Name of Grant
rp-claimcheck — Offline Merkle rewards proof verifier + claim dry-run CLI for Rocket Pool node operators (Go)
What is the work being proposed?
I propose building rp-claimcheck, a small, MIT-licensed Go CLI that helps Rocket Pool node operators (and anyone auditing a claim) independently verify rewards-interval Merkle data and dry-run a claim before broadcasting.
Smartnode already lets operators view and claim rewards. This grant does not replace Smartnode. It adds a focused, standalone companion for the failure modes that hurt operators most around claim time:
- Tree vs chain root check — download (or load a local) rewards-tree JSON for an interval, compute/parse its Merkle root, and compare it to the root stored on-chain for that interval (via contracts resolved through RocketStorage). Fail loudly if they disagree.
- Offline Merkle proof verification — given a node address + interval(s), extract the node’s leaf (collateral RPL / oDAO RPL / smoothing-pool ETH as applicable) and verify the Merkle proof against the verified root without sending a transaction.
- Claim-status bitmap read — report which intervals are already claimed vs still claimable for the node (same bitmap model Smartnode uses in RocketStorage), so operators do not waste gas on already-claimed intervals.
- Claim dry-run — build the same
claim / claimAndStake call arguments Smartnode would use, then eth_call / estimate gas. Default is read-only. Broadcast is opt-in behind an explicit --broadcast flag (keys never leave the operator’s machine; the tool never requests a seed phrase).
- Megapool + minipool aware status dump — read-only summary of the node’s registration, minipool/megapool presence, smoothing-pool membership, and pending claimable intervals, aimed at Saturn-era operators (not minipool-only).
- Optional rETH holder helper (secondary) —
reth rate / short exchange-rate snapshot export (CSV) from public RPC for holders who want a dated local record. This is a small add-on, not the main deliverable.
Delivered as a single static Go binary + docker image, with fixture-based tests, a short README, and a clean-room install recording.
Out of scope (deliberate): hosted SaaS, on-box EL/CL health monitoring, Alertmanager rules, public reliability dashboards, Smartnode config preflight, Discord bots, or rewriting official docs. Round 42 already has monitoring/preflight-style applications; this grant stays in the settlement / claim-correctness niche.
Is there any related work this builds off of?
- Rocket Pool Smartnode (
rocketpool node claim-rewards, rewards tree download, Merkle distributor claim path) — primary operator UX today. rp-claimcheck reuses the same public protocol concepts (RocketStorage address resolution, rewards interval events, Merkle distributor) as an independent verifier, not a fork of Smartnode.
- Official docs — Claiming Node Operator Rewards.
- Public Smartnode Go bindings / rewards utilities — as reference for claim-status bitmaps and interval info; this project ships its own small library surface under MIT rather than vendoring Smartnode as a product dependency.
- Round 42 applications such as RP Node Pulse / NodeGuard — complementary problem spaces (live monitoring / install preflight). rp-claimcheck does not duplicate those; it targets claim-time proof verification and dry-run.
- Earlier declined monitoring / ledger-style ideas on the forum show GMC prefers narrowly scoped, RP-specific tools with clear verification. This proposal is scoped accordingly.
I am a new Rocket Pool grant applicant and do not claim prior Smartnode maintainer status or a production mainnet RP node portfolio. Feasibility rests on Go + go-ethereum experience, fixture-driven tests against recorded mainnet/Hoodi responses, and milestone-gated delivery.
Will the results of this project be entirely open source (MIT, GPL, Apache, CC BY license or similar)? If not, which parts will not be, why, and under what license will they be published?
Yes — 100% MIT for all original code, fixtures (where redistribution is allowed), docs, and deployment manifests from Milestone 1 onward. Third-party dependencies keep their own licenses. No proprietary hosted component is required for the tool to work.
Benefit
| Group |
Benefits |
| Potential rETH holders |
Indirect: healthier operator claim hygiene and fewer botched/mis-verified claims support a more reliable NO set securing the ETH behind rETH. Optional reth rate export helps newcomers keep a dated personal record. |
| rETH holders |
Indirect reliability benefit from operators catching bad trees / wrong proofs before broadcasting. Optional exchange-rate CSV is a small QoL for personal records (not tax advice). |
| Potential NOs |
A small, installable verifier demystifies the rewards Merkle step before they rely on a single UI path; docs explain the claim flow with links back to official docs. |
| NOs |
Direct: independently check tree root vs chain, verify proofs offline, see claim bitmaps, and dry-run gas/eth_call before --broadcast. Megapool-aware status dump. Useful when Smartnode tree download fails, when auditing a friend’s claim args, or when scripting claim readiness. |
| Community |
Reusable MIT Go library + CLI; fixture tests others can extend; reduces “did I just claim the wrong thing?” support friction. |
| RPL holders |
Safer claim paths and clearer operator tooling around RPL/ETH reward distribution support protocol QoL without speculative APY claims. |
Which other non-RPL protocols, DAOs, projects, or individuals, would stand to benefit from this grant?
Solo stakers and researchers who want a small Go example of RocketStorage + Merkle claim verification may reuse pieces. No other protocol is promised delivery, promotion, or exclusivity. The CLI is Rocket Pool–first.
Work
Who is doing the work?
Vincent L. (solo). All design, Go implementation, tests, docs, and milestone forum updates will be done by me. Unpaid community review is welcome; no subcontractors are budgeted.
What is the background of the person(s) doing the work? What experience do they have with such projects in the past?
Backend engineer with ~15 years of backend experience and ~5 years focused on Go. Recent work (described without employer brand names): Go microservices for digital-asset exchange systems; correctness-first patterns (idempotency, conservation-of-funds style invariants, transactional outbox); EVM integration in Go with go-ethereum (ABI calls, signing, EIP-712); Solidity + Foundry unit/invariant tests on personal open-source payment-policy work.
Honest limitations: I am not claiming an existing Rocket Pool Smartnode production ops track record or prior GMC awards. To keep delivery credible, scope is a read-mostly CLI + verifier with fixture tests and optional Hoodi soak — not a hosted fleet product and not a Smartnode rewrite.
What is the breakdown of the proposed work, in terms of milestones and/or deadlines?
Award expected ~2026-12-27. Dates below are from award.
| Milestone |
Timing |
Deliverables |
Payment |
| M1 — Foundations |
Award + ~3 weeks |
Public MIT repo; RocketStorage-based contract address resolver (mainnet + Hoodi); rewards-tree load (local file + documented download path); on-chain Merkle root comparison; CLI skeleton (rp-claimcheck version/root-check); CI with unit tests on fixtures |
$1,600 |
| M2 — Verify + dry-run |
Award + ~6 weeks |
Per-node Merkle proof verify; claim-status bitmap report; build claim / claimAndStake calldata; eth_call dry-run + gas estimate; default deny-broadcast; JSON + human output |
$1,800 |
| M3 — Megapool-aware polish + handoff |
Award + ~9–10 weeks |
Read-only node/minipool/megapool/smoothing summary; optional reth rate CSV snapshot; README + troubleshooting; clean-room install note; tagged v1.0; short forum delivery post; 3 months light maintenance plan activated |
$1,400 |
Total: $4,800 USD over ~9–10 weeks after award.
How is the work being tested? Is testing included in the schedule?
Yes — testing is inside every milestone:
- Unit tests for Merkle proof verification against recorded fixtures (golden roots / proofs).
- Integration tests that replay recorded RPC responses (no dependency on my personal mainnet node for CI).
- Manual Hoodi or mainnet-read checks documented in each milestone report (read-only RPC).
- Explicit tests that
--broadcast is off by default and that sensitive inputs are not logged.
No claim of audited smart contracts (this grant ships no new protocol contracts).
How will the work be maintained after delivery?
Included in the ask: 3 months of light maintenance after M3 (fix fixes for broken claim paths within 14 days of a reproducible report; bump fixtures if a documented rewards-tree format change lands). After that, MIT code remains public for forks; MAINTENANCE.md describes how the community can take over. No paid hosting is required for core CLI use (operator-supplied RPC).
Costs
What is the acceptance criteria?
- Public MIT repo from M1; tagged releases for M1/M2/M3.
- M1:
root-check passes against at least one documented historical interval fixture and fails when the root is deliberately mutated in tests.
- M2: For a documented sample node+interval fixture, proof verification returns pass; claim-status matches expected claimed/unclaimed bits in the fixture; dry-run produces calldata + gas estimate without broadcasting.
- M3: Megapool/minipool-aware status command documented;
reth rate optional command works against public RPC; README enables a stranger to run root-check + verify without asking me; forum delivery post links tags + evidence.
- Global: no seed-phrase collection; no guaranteed APY/returns language; no paid third-party lock-in.
What is the proposed payment schedule for the grant? How much USD $ and over what period of time is the applicant requesting?
$4,800 USD total, milestone-gated:
- M1: $1,600
- M2: $1,800
- M3: $1,400
Payable in USDC / USDT on an EVM network the GMC uses, or RPL equivalent at payment time if the GMC prefers. No invoices.
Budget rationale (brief): Solo Go engineer, ~9–10 weeks, no venue/events/SaaS. Comparable Round 42 solo tooling asks were roughly $900–$7,500; this sits in the mid-modest band because scope is a verifier CLI, not a hosted monitoring stack.
Who will directly receive the payment? (Required — the GMC can only send grants directly to a recipient address and cannot accept invoices.)
Vincent L. — EVM address: 0xb987eA76A944fEbA87B898397091cf675aD21B7D
(I can sign a verification message from this address on request. Prefer USDC on the network GMC specifies (USDT acceptable if GMC requires).)
How will the GMC verify that the work delivered matches the proposed cadence?
- Public GitHub commits/tags from M1 onward.
- Each milestone: a short reply in the Round 43 community discussion thread (or delivery note) linking the tag, listing commands to run, and attaching/pass-linking test output.
- Acceptance = public artifacts matching the criteria above — not vanity metrics.
What alternatives or options have been considered in order to save costs for the proposed project?
- Full Smartnode fork / UI — rejected; too large and duplicative.
- Hosted claim API — rejected; keys/trust surface and ongoing infra cost.
- Another EL/CL monitoring agent — rejected; Round 42 already covers that niche; GMC has previously declined overlapping monitors.
- Tax/accounting suite for rETH — deferred; prior ledger-style ideas were low priority; only a tiny rate snapshot helper remains as optional.
- Fixture-first tests + operator-supplied RPC keep recurring cost near zero.
Have you already been compensated by the RP protocol in any way for this work?
No. No prior GMC grants, bounties, retrospective awards, or oDAO compensation.
Conflict of Interest
Does the person or persons proposing the grant have any conflicts of interest to disclose? (Please disclose here if you are a member of the GMC or if any member of the GMC would benefit directly financially from the grant).
None. I am not a GMC member and have no financial relationship with any GMC member.
Will the recipient of the grant, or any protocol or project in which the recipient has a vested interest (other than Rocket Pool), benefit financially if the grant is successful?
No beyond the grant payment itself for delivering this MIT public-good CLI. No other protocol, token, or project of mine receives revenue, referrals, or exclusivity from this work.