Repository navigation
docs(operators): document which pre-L2 requests op-reth forwards to the historical RPC - #2345
Conversation
…a warning, snapshot wording, metrics URL) - network-config: op-node celo-v2.2.1 -> celo-v2.2.3 on the mainnet and Celo Sepolia lines, matching compose main 9634d6e4 (2026-10-06); tag confirmed in the registry - monitoring: add a Warning under the Grafana credentials to set GF_SECURITY_ADMIN_PASSWORD in .env or firewall port 3000 - monitoring: the op-node metrics line now says where to read them (Prometheus at localhost:9090 or Grafana) - configuration, run-node: "default" is scoped to the shipped .env files, matching celo-org#2345 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
af8a2a9 to
ae953ae
Compare
GigaHierz
left a comment
There was a problem hiding this comment.
head 0d8ed97 · 0 commits behind main (418506f), merge-tree with main clean, PR diff = 5 files under operate/operators; CI "Check for broken links" pass; local mint broken-links --check-redirects, mint validate, scripts/check-orphans.sh all pass; mint dev on :3811 served the PR text (Warning renders as a callout, not a code block, 0 console errors)
Verdict: REQUEST-CHANGES
Status of earlier findings
- "Forwarding
eth_getLogsdepends on ethereum-optimism/optimism#22663, which is not merged yet" -- NOT FIXED. The sentence is still atoperate/operators/archive-node.mdx:112. #22663 is still OPEN (last update 2026-10-03). It documents a pending upstream change (AGENTS.md section 4) and goes stale silently. - PR body "v2.3.1, the version the celo-reth release line pins" -- NOT FIXED in the body, and the picture moved (see new finding 1). Latest release
celo/reth-v1.0.6(2026-10-05) still pinscelo-org/optimismrev49ee2f71..., same as v1.0.5, and that rev'shistorical.rsforwards exactly the 17 listed methods (lines 240-243, 363-374). So the page is correct for the released line, but the body names an upstream version rather than the celo-reth releases the page describes.
New findings (severity-ordered)
- MEDIUM ·
operate/operators/archive-node.mdx:97-110(and theeth_getBlockReceiptsclaim at :110) · The warning describes the released set, but the fix for it has already merged: celo-org/celo-kona#338 merged 2026-10-05 intocelo/reth-v1.0(after v1.0.6 was cut) and moves the pin tocelo-org/optimismrevb08a8d0a, whosehistorical.rsadditionally forwardseth_getBlockReceipts,eth_getHeaderBy{Number,Hash},eth_getBlockTransactionCountBy{Number,Hash},eth_getTransactionByBlock{Number,Hash}AndIndex,eth_getRawTransactionByBlock{Number,Hash}AndIndexand the four uncle methods. · Scenario: the next celo-reth release (v1.0.7 or later) makes "eth_getBlockReceiptsreturnsnull" and "any other method is answered from the local database" false, and the page names no version, so an operator on the new image cannot tell which reading applies; the PR body's residual-risk note still calls #338 a draft. · Fix: scope the Warning to the images it was checked against ("celo-v1.0.5andcelo-v1.0.6"; the compose default is v1.0.5) and either update it together with the release that carries #338 or hold the merge until then; correct the body (#338 is merged, unreleased). - MEDIUM ·
operate/operators/archive-node.mdx:112· Unresolved earlier finding 1 (pending upstream PR documented). · Scenario: #22663 merges or is closed and nothing in the repo notices; operators keep being told to bypass forwarding. · Fix: delete the sentence; keep "To read pre-L2 logs, sendeth_getLogsdirectly to the Historical RPC Service." If the dependency matters, track it in a filed issue linked from the PR, not on the page. - LOW ·
operate/operators/archive-node.mdx:76vs:74· Line 74 now says the Historical RPC Service applies to every mainnet node, but line 76 still says "configure a Historical RPC Service for your archive node". · Scenario: a full-node operator reads :76 and concludes the setup is archive-only, the exact misreading this PR removes elsewhere. · Fix: "for your node". - LOW ·
operate/operators/archive-node.mdx:109-110· "In particular" lists onlyeth_getLogsandeth_getBlockReceipts. Observed on forno (reth backend, pre-L2 block 31,000,000):eth_getBlockTransactionCountByNumberreturnsnullwhile the Geth backend returns0x33. It is covered by "any other method" but is the same class of silent gap (count, by-index, header and uncle methods). · Fix: add one clause naming these, or fold it into finding 1's version scoping since #338 forwards them.
Merge-order hazards
- Open PR #2376 (outside contributor) conflicts textually with this PR in
archive-node.mdx(snapshot paragraph, line 67-70),configuration.mdx(OP_RETH__SNAPSHOTrow, line 20) andrun-node.mdx(From genesis bullet);maintenance.mdxandnetwork-config.mdxauto-merge (git merge-treeof the two heads: 3 conflicts). Both agreeOP_RETH__SNAPSHOTdefaults totrue(matches the compose README and the mainnet env file line 55). But #2376 keeps "it provides the pre-L2 (Celo L1) history", which is the claim this PR corrects. Merge this PR first and have #2376 rebase onto its wording (Celo L1 state at the migration); otherwise a conflict resolution can silently restore the wrong sentence. #2376 also updatesnetwork-config.mdximage tags; this PR does not touch them. - No contradiction with merged #2351: the PR's text keeps "Support for op-geth has ended" and the empty-datadir rules; learn/celo-l1.mdx:45 and the notice page still point at the archive-node page, consistent.
Verified good
- The 17-method list matches
rust/op-reth/crates/rpc/src/historical.rsatcelo-org/optimism49ee2f71 (the rev pinned bycelo/reth-v1.0.5andv1.0.6) and at b4ba5c39 (the rev in celo-konacelo/v1.1.1): 4 transaction-keyed methods, 4 block-keyed, 7 with block id in param 1, 2 in param 2. Transaction-hash methods forward when the tx is pre-bedrock or not found locally;is_pre_bedrockforwards an unknown block hash. - Live on https://forno.celo.org, batched with
web3_clientVersion: reth backend (reth/v2.2.0-1fc77b9) returns[]foreth_getLogs1,000,000-1,000,100 while the Geth backend returns logs;nullforeth_getBlockReceiptson 31,000,000 (Geth: 51 receipts);-32001 block not found: hash 0x8f29e8cb...foreth_getLogswith the pre-L2blockHashof block 31,000,000 (Geth returns logs); range 31,056,400-31,056,976: reth first log at 31,056,517 (560 logs), Geth from 31,056,400 (16,279 logs). Migration block 31,056,500 matches. OP_RETH__SNAPSHOTdefaulttrue: compose README ("the default", twice) and the mainnet env file (line 55, read throughgh api).configuration.mdx:20wording "(default in the shipped.envfiles)" is accurate. The Sepolia env file was not read directly; the README is consistent.- Historical RPC for any
NODE_TYPE: the README describesHISTORICAL_RPC_DATADIR_PATH/OP_RETH__HISTORICAL_RPCwithout a node-type condition. Geth-all 1.8.9 is the Celo L1 client innetwork-config.mdx:62, so the new sentence at archive-node.mdx:74 points at a listed version. - Style: no frontmatter changes, no heading regressions, Warning component (no blockquote), no promotional wording, links root-relative; the new anchor
/operate/operators/archive-node#configure-historical-rpc-servicematches the heading at archive-node.mdx:72. run-node, configuration, maintenance, network-config all render (200, new text present).
What the PR got right
It fixes a real operator trap (pre-L2 eth_getLogs silently empty, receipts null) with an exact method list, exact failure shapes and two workarounds, checked against both source and live backends. It also corrects the OP_RETH__SNAPSHOT default and the archive-only framing in lines it was already editing, and the snapshot wording now matches what import-celo-state writes. What remains is one round: drop the pending-PR sentence, scope the list to the releases it was checked against, fix the PR body, and sequence against #2376.
4502688 to
1627f29
Compare
GigaHierz
left a comment
There was a problem hiding this comment.
head 1627f29 · merges cleanly with main · CI "Check for broken links" pass · re-reviewed the diff against my earlier findings.
Verdict: REQUEST-CHANGES (one finding, small)
Status of earlier findings
- Version scoping: FIXED. The Warning now names
celo-v1.0.5andcelo-v1.0.6, and the PR body says the rev and the release line. - Pending upstream PR sentence: FIXED. It is gone, and ethereum-optimism/optimism#22663 is closed without merging (2026-10-09), so nothing on the page depends on it.
- "for your archive node" at the Historical RPC step: FIXED ("for your node").
- Count, by-index and uncle methods: FIXED, listed in the new third bullet.
- Merge-order hazard with #2376: gone, #2376 merged and the PR body says the rebase is done.
New finding
- MEDIUM ·
operate/operators/archive-node.mdxWarning, "Theop-rethimagescelo-v1.0.5andcelo-v1.0.6forward…" and the bullets under it ·celo-v1.0.7was released 2026-10-14, about an hour after the last commit here, and is marked "upgrade recommended for RPC nodes … that serve pre-migration blocks". Its notes say celo-kona#338 now forwardseth_getBlockReceipts,eth_getHeaderBy{Number,Hash},eth_getBlockTransactionCountBy{Number,Hash},eth_getTransactionByBlock{Number,Hash}AndIndexandeth_getRawTransactionByBlock{Number,Hash}AndIndexbelow block 31,056,500, and thateth_getLogsis not forwarded yet. The PR body's residual-risk section said the warning needs an update together with the first release that carries #338; that release now exists. · Scenario: an operator who follows the upgrade recommendation to v1.0.7 reads thateth_getBlockReceiptsreturnsnulland tells their users to fetch receipts one by one, which is no longer true on their image; the page names no version they can match. · Fix: say theeth_getBlockReceiptsbullet and the count and by-index methods in the third bullet apply to v1.0.5 and v1.0.6 only, and that from v1.0.7 they are forwarded. Keep theeth_getLogsand filter-method text as is, it holds for v1.0.7. The release notes do not list the four uncle methods, so I would leave their wording scoped to "v1.0.5 and later" until someone checks them on a v1.0.7 backend. The compose default is stillcelo-v1.0.5, so the existing text stays right for operators who have not upgraded.
Verified good
- The 17-method list, the
eth_getLogsbehaviours and the snapshot wording are unchanged from what I checked last time. - The new
Network configpointer and the#configure-historical-rpc-serviceanchor resolve. - No style regressions: Warning component, root-relative links, no promotional wording.
Once the Warning covers v1.0.7 this is ready to merge.
Pre-L2 eth_getLogs and eth_getBlockReceipts are answered locally and return empty results; the forwarded set is the one in op-reth v2.3.1. Also correct the OP_RETH__SNAPSHOT default and drop the archive-only wording for the Historical RPC Service.
…v1.0.6 The forwarded set differs on the celo/reth-v1.0 branch, so the list names the images it was checked against. Drop the reference to an unmerged upstream PR and name the count, by-index and uncle methods.
1627f29 to
615de9a
Compare
… and bump image tags celo-v1.0.7 forwards eth_getBlockReceipts and the header, count, by-index and uncle methods below the migration block. Image tags follow celo-l2-node-docker-compose#108 (op-reth celo-v1.0.7, op-node celo-v2.2.4).
615de9a to
cbcf8a0
Compare
GigaHierz
left a comment
There was a problem hiding this comment.
Re-checked the head against the code: the 30 forwarded methods match celo-org/optimism at the rev v1.0.7 pins, the v1.0.7 release notes match the new eth_getBlockReceipts and by-index text, and the image tags match the merged compose bump. Earlier findings are resolved.
The operator docs say the mainnet snapshot provides the pre-L2 history, and imply that op-reth serves all of it. Neither is true. The snapshot holds only the Celo L1 state at the migration, and op-reth forwards only some pre-L2 requests to the Historical RPC Service, so pre-L2
eth_getLogsquietly returns no logs. This corrects the snapshot wording, adds a warning to the archive node page that lists what op-reth forwards, fixes some archive-only wording that contradicted the new text, and bumps the image tags innetwork-config.mdxto the ones celo-l2-node-docker-compose now ships.Changes
run-node.mdx,archive-node.mdx,configuration.mdxandnetwork-config.mdxsaid the mainnet snapshot provides the pre-L2 history.import-celo-statewrites pre-migration headers without bodies or receipts, so the snapshot provides only the L1 state at block 31,056,500.<Warning>under "Configure Historical RPC Service" lists the 30 methods thatop-rethcelo-v1.0.7forwards for pre-L2 blocks. v1.0.7 pins celo-org/optimism revb08a8d0a, and the list matchesrust/op-reth/crates/rpc/src/historical.rsat that rev. That includes the four uncle methods, which the release notes leave out but the code and its unit tests cover.eth_getLogsand the filter methods are not forwarded. A pre-L2 range returns[], a range across the migration returns only L2 logs, and a pre-L2blockHashreturns "block not found". The warning tells operators to sendeth_getLogsto the historical node directly.configuration.mdxandmaintenance.mdxdescribed the Historical RPC Service as an archive-node feature. The compose start script passes--rollup.historicalrpcfor anyNODE_TYPE, and op-reth installs the forwarding layer regardless of prune mode.network-config.mdxnow lists op-rethcelo-v1.0.7and op-nodecelo-v2.2.4for both networks, matching Bump op-node to celo-v2.2.4 and op-reth to celo-v1.0.7 celo-l2-node-docker-compose#108.Verification
I checked the forwarded list against the code at
b08a8d0a. Theeth_getLogsbehaviour I checked on forno.celo.org against celo-reth backends, batching each request withweb3_clientVersionto see which client answered.mint broken-links --check-redirects,mint validateandscripts/check-orphans.shpass locally with mint 4.2.746. The CI-pinnedmintlify@4.2.920will not install locally, so CI is the check on that version.Residual risk
eth_getLogshandling v1.0.7 does not change.eth_getLogs) needs an update here.Issues
Refs celo-org/celo-blockchain-planning#1464
Stacking / conflicts
Branched off main, independent of my other open PRs. Rebased onto main (55f1ec7).