Merge upstream base v1.2.0 into the Firehose fork#18
Open
maoueh wants to merge 386 commits into
Open
Conversation
Prevent worker session record retries from reopening or duplicating backend sessions that have already reached a terminal state. Lock matching session rows before writes and return a terminal-session outcome so retries remain idempotent. Co-authored-by: Codex <codex-noreply@coinbase.com>
…pe bytes (base#3311) * refactor(consensus): rename EIP-8130 owner to actor Align the EIP-8130 consensus and txpool terminology with the updated spec, which renames the account-abstraction "owner" primitive to "actor" throughout. Pure rename with no behavioral change: - InitialOwner -> InitialActor - OwnerChange / OwnerChangeType -> ActorChange / ActorChangeType - owner_id -> actor_id, initial_owners -> initial_actors, owner_changes -> actor_changes - OWNER_CHANGE_AUTHORIZE/REVOKE -> ACTOR_CHANGE_AUTHORIZE/REVOKE - MAX_OWNERS_PER_ENTRY -> MAX_ACTORS_PER_ENTRY - validate_owner_iter -> validate_actor_iter RLP encoding, op-byte values, and scope semantics are unchanged. * chore(consensus): pin EIP-8130 tx type bytes and align authenticator terminology Fold the remaining EIP-8130 realignment changes onto the owner->actor rename so the spec-alignment lands as a single change: - Pin the AA transaction type bytes to the EIP-8130 constant table: EIP8130_TX_TYPE 0x7D -> 0x7B and EIP8130_PAYER_TYPE 0xFA -> 0x7C. Updated atomically across every type-byte reference so the inner tx, envelope, receipt and RPC surfaces stay consistent: * Eip8130Constants (constants.rs), drop the stale "TBD" wording * EIP8130_TX_TYPE_ID (125 -> 123) and the RPC rejection message * BaseTxEnvelope / BasePooledTransaction `#[envelope(ty = 123)]` * BaseReceipt / receipt envelope serde rename "0x7d" -> "0x7b" * rpc-types and rpc error doc/test expectations - Rename the EIP-8130 authenticator terminology to match the spec ("verifier" -> "authenticator"): ECRECOVER_AUTHENTICATOR, REVOKED_AUTHENTICATOR, AccountChange/ConfigChange `authenticator` field, validator helpers and docs. Scoped to the EIP-8130 types only; the unrelated consensus/TEE "verifier" components are untouched. - Fix the import ordering left unsorted by the owner->actor rename. RLP encoding remains positional; the field rename is non-behavioral. The type-byte pin changes the wire/serde type tag to the final values. Test plan: - cargo test -p base-common-consensus --lib (81 passed) - cargo test -p base-execution-txpool --lib (79 passed) * chore(consensus): complete owner->actor rename in envelope.rs Three "configured-owner" references in transaction/envelope.rs were left unchanged by the owner->actor rename: the debug_assert wrap-guard message, the k256-gated recovery test name, and a path comment. Rename them to "configured-actor" for terminology consistency. No behavioral change.
…nd Mainnet (base#3450) * fix(chains): update B20 activation admin addresses for Base Sepolia and Mainnet Replaces the old admin addresses with the newly provisioned coreKMS keys for activation testing and smoke tests on Base Sepolia and Base Mainnet. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> * fix(chainspec): update activation_admin_matches_chain_config test addresses Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
base#3170) Reject EIP-8130 (account abstraction, type 0x7D) transactions before the Cobalt upgrade is active, both at mempool admission and at block inclusion: - txpool validator rejects EIP-8130 transactions with `TxTypeNotSupported` unless `is_cobalt_active_at_timestamp(head_timestamp)`, closing the devp2p admission path (RPC ingress already rejects unconditionally). - batch derivation (single + span) drops batches containing an EIP-8130 transaction before Cobalt, mirroring the existing `Eip7702PreIsthmus` gate via a new `BatchDropReason::Eip8130PreCobalt`. Adds a `cobalt_activated()` chain-spec builder helper to exercise the post-Cobalt side of the gate in tests.
* feat(basectl): add destructive p2p peer commands * fix(basectl): support CL multiaddr add-peer targets * warn on ignored p2p RPC overrides * model p2p action output by layer * document libp2p id len check
…ase#3468) * fix(precompiles): return halt instead of Fatal for oversized crypto precompile inputs Size guards for BN254 pairing (Granite/Jovian) and BLS12-381 G1MSM, G2MSM, and pairing (Isthmus/Jovian) were returning PrecompileError::Fatal, which revm treats as unrecoverable and aborts the whole EVM transaction. An oversized input should only fail the CALL, not the transaction. Switch all 8 sites to return Ok(PrecompileOutput::halt(...)) with the appropriate typed PrecompileHalt variant so only the subcall fails. * test(precompiles): align provider oversized-input assertions Amp-Thread-ID: https://ampcode.com/threads/T-019ead38-ae00-727a-80ea-1e2a61ca6861 Co-authored-by: Amp <amp@ampcode.com> * test(evm): expect halts for oversized precompile inputs Amp-Thread-ID: https://ampcode.com/threads/T-019ead38-ae00-727a-80ea-1e2a61ca6861 Co-authored-by: Amp <amp@ampcode.com> --------- Co-authored-by: Eric Shenghsiung Liu <ericliu121187@gmail.com> Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Codex <codex-noreply@coinbase.com>
* chore: update reth to v2.3.0 Align the workspace with the reth v2.3.0 release and migrate the related alloy and revm API changes. Also fix the follow-up clippy and test breakages surfaced by the requested Justfile validation targets. Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Fix reth 2.3 CI fallout Persist test-harness canonical blocks immediately so follow-up payloads can resolve parent headers under reth 2.3.0, and update Jovian fixture headers plus deny skips for the new dependency graph. Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Drop dead BAL post-execution check Reth 2.3.0 added a BAL hash argument to post-execution consensus validation for Amsterdam-capable Ethereum paths. Base does not have an execution-derived BAL hash to compare, so stop threading the header value through and remove the tautological check. Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Keep BAL hash at the trait boundary only Accept the reth 2.3.0 BAL hash argument in the Base consensus trait impl, but stop threading it through Base-only helpers and tests where it is unused. Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Fix rustfmt fallout in engine-tree validator Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Use branch-based base-anvil workflow checkouts Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * Fix Jovian blob gas mismatch test fixture Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * ci: use default base-anvil branch Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * test(runner): avoid finalizing harness blocks Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * test(runner): trim harness persistence workaround Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * docs(execution): clarify reth 2.3 migration notes Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * fix(consensus): drop post-exec requests hash check Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * refactor(reth): trim non-essential migration behavior Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * ci: revert workflow-only reth migration changes Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * refactor(engine-tree): inline overlay builder construction Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> * ci: bump base-anvil workflow pin Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com> --------- Co-authored-by: Amp <amp@ampcode.com>
Adds worker-facing RPC, client, and server support for recording and fetching backend proof sessions, so ZK workers can persist backend session IDs and resume in-flight work while preserving worker lock ownership checks. Co-authored-by: Codex <codex-noreply@coinbase.com>
Co-authored-by: Codex <codex-noreply@coinbase.com>
Apply Base-specific execution peer defaults in the execution CLI runtime config so EL nodes default to 80 inbound peers and 80 outbound peers when operators do not pass explicit overrides. Add regression tests to verify the new defaults and preserve explicit CLI values. Amp-Thread-ID: https://ampcode.com/threads/T-019eb8fc-371b-71ab-901d-499925b7f017 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019eb1f4-e95e-7346-b575-6af1be02f038 Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Codex <codex-noreply@coinbase.com>
* refactor(proof): remove optimism rpc re-export indirection Co-authored-by: Codex <codex-noreply@coinbase.com> * fix(system-tests): import optimism rpc directly Co-authored-by: Codex <codex-noreply@coinbase.com> --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
* feat(prover): add zk host binary skeleton Co-authored-by: Codex <codex-noreply@coinbase.com> * chore(prover): remove unused zk host tokio dependency Co-authored-by: Codex <codex-noreply@coinbase.com> --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
* refactor(proof): add shared worker claim primitives Co-authored-by: Codex <codex-noreply@coinbase.com> * refactor(proof): add shared worker heartbeat Co-authored-by: Codex <codex-noreply@coinbase.com> --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
* refactor(proof): add shared worker claim primitives Co-authored-by: Codex <codex-noreply@coinbase.com> * refactor(proof): add shared worker heartbeat Co-authored-by: Codex <codex-noreply@coinbase.com> * refactor(proof): add shared worker job discovery Co-authored-by: Codex <codex-noreply@coinbase.com> --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
* feat(proposer): add collector orchestration * review: guard collector zero block interval * review: handle collector retry build failures * review: restart collector on retry exhaustion * review: restart collector on discard exhaustion * review: propagate collector retry exhaustion * review: preserve collector retry attempt accounting * review: restart collector on root retry build failure * review: restart collector on replacement dispatch failure * review: preserve discard retry sessions on dispatch failure * review: restart collector on discard retry build failure * review: restart collector on discard retry dispatch failure Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: use recovered state after collector submit Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: clean up discard retry session state Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
…with_account_info (base#3386) * fix(precompile-storage): hydrate bytecode in with_account_info (BOP-343) with_account_info called load_account which populates code_hash lazily but never fetches the actual bytecode from the database, so info.code was always None in the callback even for accounts with real bytecode. Switch to load_account_code which calls load_code on the journaled account before returning, ensuring info.code is fully hydrated. This matches the upstream tempo implementation and fixes the latent bug that any future caller reading info.code would silently observe empty bytecode. Adds a regression test using CacheDB to verify the code field is present after the call. * ci: retrigger after sccache rate-limit failure * fix(precompile-storage): remove redundant clone in test * revert(precompile-storage): revert load_account_code back to load_account Callers of with_account_info only read is_empty_code_hash(), which inspects the code_hash field (always eagerly populated by load_account). No caller reads info.code, so load_account_code is unnecessary overhead that fetches bytecode from the database for no benefit. Per refcell's review comment: drop the hydration. * docs(precompile-storage): tighten with_account_info comment precision code_hash not info.code is what every caller needs. Saying is_empty_code_hash() was slightly imprecise since is_b20_initialized accesses code_hash directly.
* feat(txpool): add eip8130 2d nonce sidecar Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * chore(txpool): satisfy clippy in 2d nonce pool Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): address PR review feedback Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): tighten sidecar review follow-ups Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): harden sidecar invalidation paths Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * chore(txpool): address small review follow-ups Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): tighten sidecar ordering and promotions Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): remove eip8130 downcast path Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): address latest review nits Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * test(txpool): cover sidecar subscription delivery Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): address remaining review nits Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): harden sidecar removal and live views Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * perf(txpool): tighten sidecar pool access Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): keep sender nonce APIs protocol-only Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * perf(txpool): bound pending transaction lookups Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): preserve sidecar index invariants Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * refactor(txpool): drop dead mined promotion path Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): skip nonce checks for nonce-free eip8130 Amp-Thread-ID: https://ampcode.com/threads/T-019e6f1e-1cd0-77d9-b249-dd18f8516cb4 Co-authored-by: Amp <amp@ampcode.com> * fix(workspace): restore reth-eth-wire-types Amp-Thread-ID: https://ampcode.com/threads/T-019ebc5d-b92a-719d-acdb-4b78f5a1a7e8 Co-authored-by: Amp <amp@ampcode.com> * fix(txpool): adapt wrapper to reth 2.3.0 APIs Amp-Thread-ID: https://ampcode.com/threads/T-019ebc5d-b92a-719d-acdb-4b78f5a1a7e8 Co-authored-by: Amp <amp@ampcode.com> --------- Co-authored-by: Amp <amp@ampcode.com>
* feat(proposer): wire proving pipeline orchestration Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: prioritize task exits in pipeline sessions Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: honor submit timeout configuration Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
Co-authored-by: Codex <codex-noreply@coinbase.com>
* feat(proposer): wire proving pipeline orchestration Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: prioritize task exits in pipeline sessions Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: honor submit timeout configuration Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * refactor(proposer): extract recovery orchestration Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * review: share proposal interval calculation Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
* refactor(registrar): simplify registration manager dedupe Co-authored-by: Codex <codex-noreply@coinbase.com> * docs(registrar): update proof task dedupe comment Co-authored-by: Codex <codex-noreply@coinbase.com> --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
…#3887) Update the EIP-8130 account-abstraction transaction type byte from 0x7B (123) to 0x79 (121) and the payer signature magic prefix byte from 0x7C to 0x7A, aligning with the revised EIP-8130 constant-table values. Covers the canonical constants, envelope/pooled type derives, receipt serde tags, and all doc/test references.
* fix(nitro-host): decouple proof generation heartbeats Co-authored-by: Codex <codex-noreply@coinbase.com> * add heartbeat thread * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments * address review comments --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
…oy (base#3889) * feat(eip8130): repin system-contract addresses to latest Sepolia deploy Update the enshrined EIP-8130 contract addresses and their init-code hashes to the latest Base Sepolia deployment following the account hierarchy restructure. Adds the newly deployed UpgradeableAccount implementation (and extends the CREATE2 drift guard to cover it). DefaultAccount remains the code-less-EOA auto-delegation target at its new address. * feat(eip8130): drop UpgradeableAccount from enshrined contracts UpgradeableAccount is an external-only implementation the node does not need to be aware of, so remove its address/init-code constant and the corresponding CREATE2 drift-guard case.
* Improve snapshotter progress and upload resiliency Reuse previous manifest metadata for finalized chunk hashes to avoid long serial pre-passes, add component-level compression progress logging, and improve upload observability with active-operation stall warnings and richer structured retry logs. Keep large multipart uploads retrying on transient S3 or Cloudflare failures without imposing aggressive client-side timeouts. * Add upload-only mode for existing snapshot runs Allow the snapshotter CLI to upload a prebuilt run-<timestamp> directory from the configured output dir without stopping the EL or regenerating artifacts. Reuse the normal upload path, validate the existing run directory, and cover the container-lifecycle bypass with an orchestrator test. * Add live snapshotter progress tables * Clean up snapshotter review follow-ups * Fix snapshotter clippy warnings * Address snapshotter API and progress review comments
* feat(registrar): add Boundless progress metrics Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * chore: format zepter features Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * fix(registrar): avoid ambiguous proof failure metrics Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * fix(registrar): skip pre-start cancel durations Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * fix(registrar): avoid blocked recovery double count Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * fix(registrar): satisfy metrics doc clippy Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
* feat(protocol): add BaseTime metadata deposit plumbing * style: format BaseTime metadata deposit plumbing * refactor: trim BaseTime plumbing helpers * refactor: split BaseTime foundation from follow-up plumbing * refactor(protocol): share Regolith deposit gas limit * feat(protocol): align BaseTime deposit inputs with L1 info * docs(protocol): clarify BaseTime deposit gating * refactor(protocol): remove dead BaseTime regolith branch * refactor(protocol): localize regolith gas constant * docs(protocol): clarify BaseTime invariants * fix(protocol): use Regolith deposit settings for BaseTime * refactor(protocol): inline BaseTime deposit gas * refactor(protocol): share Regolith deposit gas constant * fix(protocol): enforce BaseTime millis invariant * fix(protocol): resolve clippy doc warnings * fix format * update based on comments
* plumb basetime millis through payload attributes * better code position * improve * update * test to ensure parity without ms timestamp * fix nostd * add gate for timestamp millis * fix format * fix CI * fix ci * fix ci * fix ci * fix ci * fix ci
* fix(ci): harden SP1 setup download Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * fix(ci): pin SP1 installer ref Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
* feat(prover-service): tag heartbeat metrics by worker Co-authored-by: OpenCode <opencode-noreply@coinbase.com> * chore(prover-service): debug log worker heartbeats (base#3873) Co-authored-by: OpenCode <opencode-noreply@coinbase.com> --------- Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
…#3863) Drive proving as a linear sequence of stages: every request proves a range (STARK) proof, and Groth16 requests then aggregate it into a SNARK via the new ZkProver::submit_next. Each stage is driven to completion by drive_stage, which resumes any session recorded on a previous run and reuses an already-completed stage without re-polling a possibly-purged backend session. The ZkProver trait gains submit_next (defaulting to Unimplemented) and a session_type argument on download, so a backend returns the ProofResult variant matching the stage. poll is left unchanged, since session status never depends on the stage. Co-authored-by: Cursor <cursoragent@cursor.com>
* add init_snapshots for download urls * update URL to actually deployed demo version
…n_finalized (base#3883) * refactor(proof): always propose against finalized head, drop allow_non_finalized * test(proof): simplify dispatcher test helper to finalized-only heads * fix(proof): bound proposer recovery walk by finalized head
…on base (base#3897) * refactor(zk-host): narrow ZkProver::submit to the range request Every proving job's first stage is a compressed range proof, so submit only ever receives a Compressed request. Narrow the trait method to take &ZkProofRequest directly instead of the broader ZkProofRequestKind enum. This drops the SnarkGroth16 rejection branches in the cluster, network, and dry-run backends and lets the host caller pass the range request without re-wrapping it into a Compressed variant. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(zk-backend): add shared groth16 aggregation witness helper Add OpSuccinctWitnessProvider::generate_aggregation_witness so the cluster and network backends can build aggregation stdin from a completed compressed range proof without duplicating the logic. Placing it in this base lets the per-backend aggregation PRs (cluster, network) stack on top independently rather than one depending on the other. Co-authored-by: Cursor <cursoragent@cursor.com> * refactor(zk-backend): address review nits on aggregation base - Extract BootInfoStruct via SP1's public_values.read() instead of a manual bincode legacy decode, matching the existing aggregation code and staying resilient to SDK serialization changes. - Import ZkProofRequest in the backend modules instead of referencing it by fully-qualified path, for consistency with the other imports. - Fix generate_aggregation_witness doc to say a single range proof. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
…on (base#3892) * feat(eip8130-rpc): accept senderActorId hint for estimateGas simulation Estimation never recovers a signature, so simulate published the account's self-actor to TxContext — policy-gated session-key calls then looked up the wrong policy and reverted. Accept an optional senderActorId on the estimate request (orthogonal to the existing senderAuth shape hint), thread it onto simulation parts, and resolve that actor's policy after applying accountChanges so same-tx authorizations are visible. * fix(eip8130): address review nits on senderActorId estimate hint Trim the verbose simulate_resolve docs, correct the revocation comment (get_policy does treat a revoked default-EOA self as ungated), and add a simulate test that proves the hint changes policy resolution after accountChanges apply. * fix(eip8130-rpc): exclude senderActorId from EIP-8130 detection gate senderActorId is simulation-only metadata about an 8130 request, not a defining field — a lone hint must not route onto the AA path.
* test(consensus): cover startup with pruned reth history Add a base-system-tests regression case for validator startup when reth returns 4444 pruned history unavailable while hydrating the finalized block during the initial engine reset. Co-authored-by: Codex <codex-noreply@coinbase.com> * test(consensus): address pruned history review comments Remove the imported EngineRequestReceiver name from the system test and call the trait explicitly at the processor start site. Rename the mock get_l2_block request kind binding now that the full-block branch reads it. Co-authored-by: Codex <codex-noreply@coinbase.com> * refactor(engine): unify mock L2 block errors by BlockId Drop the duplicate full-block-only error path and make MockL2BlockError per-block so forkchoice unit tests and the pruned-history system test share one API. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: address comments --------- Co-authored-by: Codex <codex-noreply@coinbase.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: add zombie pseudo fork * just fix * fix: reject Zombie at runtime-override write side Enforce the 'Zombie is never stored as active' invariant at the source by dropping Zombie writes in UpgradeActivationOverrides::set_activation, which also covers the RuntimeUpgradeRegistry paths. Previously the raw override map would store a dead Zombie->Timestamp entry that consumers had to keep short-circuiting. * docs: clarify Zombie is intentionally not resolvable in from_contract_fork_name contract_id emits "zombie" but the reverse lookup deliberately drops it so the L1 upgrade signal can never address the permanently-off gate. * update based on comments
Add two-stage (STARK range -> SNARK aggregation) dry-run support, trim docs/tests to essentials, and re-parent onto the narrowed submit base. Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(zk-backend): cluster groth16 aggregation Add two-stage (STARK range -> SNARK aggregation) support to the SP1 cluster backend, wiring aggregation cycle/gas limits through the CLI. Re-parent onto the narrowed submit base, use the short ZkProofRequest import, trim doc comments, and make download's SessionType dispatch an exhaustive match. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(zk-backend): log aggregation witness prep duration Track and log witness_gen_duration_ms across the aggregation download + witness generation, matching the range-proof path for operational latency visibility. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
Add two-stage (STARK range -> SNARK aggregation) support to the SP1 network backend, wiring aggregation cycle/gas limits through the CLI. Re-parent onto the narrowed submit base, use the short ZkProofRequest import, and make download's SessionType dispatch an exhaustive match. Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(proof): extract anchor updater Co-authored-by: Codex <codex-noreply@coinbase.com> * address review comments * address review comments * address review comments --------- Co-authored-by: Codex <codex-noreply@coinbase.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…se#3944 to releases/v1.2.0] (base#3984) * fix(trie): initialize proofs from storage-v2 trie tables Select the matching Reth trie codecs during bootstrap so fresh proofs stores retain canonical paths and can resume safely. * fix(trie): avoid copies in proofs initialization --------- Co-authored-by: Niran Babalola <niran.babalola@coinbase.com>
* fix(reth-cli): update snapshot API URL * fix(reth-cli): update snapshot download URLs
…base#4043) * fix(consensus): wait for peer connection state Keep peer RPC callers blocked until libp2p state reflects the requested transition, preventing registry retries from flooding pending outbound dials. Co-authored-by: Niran Babalola <niran.babalola@coinbase.com> * fix(consensus): filter non-retryable peer state errors Retry only peer-state polling failures so disconnected RPC channels fail fast. Co-authored-by: Niran Babalola <niran.babalola@coinbase.com> * refactor(consensus): clarify peer state wait helpers Own the peer-map check in named helpers and document why InvalidParams is the retryable signal. Co-authored-by: Niran Babalola <niran.babalola@coinbase.com> --------- Co-authored-by: Niran Babalola <niran.babalola@coinbase.com>
Bump the Firehose fork to upstream base v1.2.0. No reth release is required: upstream v1.2.0 keeps the same pins as v1.1.1 (paradigmxyz/reth v2.3.0, revm 40.0.3, alloy-evm 0.36.0), so the existing streamingfast/reth v2.3.0-fh-5 patch stays API-compatible. Conflict resolution ------------------- The merge base predates the releases/v1.1.0 backports, so 43 files conflicted — most of them files the fork never touched, where both sides carry the same backport applied at different offsets. Those 37 files were taken wholesale from v1.2.0. The 6 fork-modified files were resolved by hand: * Cargo.toml — workspace version to 1.2.0; kept the fork-only alloy-rpc-types-trace, reth-db-models and reth-tokio-util deps; took upstream's alloy-rpc-types-txpool, reth-eth-wire-types and the SP1 6.2.1 -> 6.3.0 bump. Added reth-eth-wire-types to the paradigmxyz/reth patch table so it resolves through the Firehose fork rather than pulling a second copy. * Cargo.lock — regenerated from v1.2.0 under our patches; all 105 reth crates resolve to streamingfast/reth, none to paradigmxyz/reth. * crates/common/evm/src/evm.rs — took upstream's oversized-precompile assertion and aligned the surrounding rstest cases with it. The file's only remaining delta is the Firehose one: routing system calls through InspectSystemCallEvm when inspect is set. * crates/execution/node/src/node.rs — took upstream's BaseDiscoveryConfig::new(false) after the base-discovery flag removal. * crates/common/consensus/src/reth_compat.rs and .github/workflows/base-std-fork-tests.yml — took upstream's additions. Duplicate-apply artifacts introduced by the merge were found and removed from .github/workflows/base-anvil-package.yml and base-std-fork-tests.yml (a doubled Python setup step and a doubled cargo update block). Both were reset to v1.2.0, then the fork's intentional workflow_dispatch-only trigger was re-applied. Other changes ------------- * crates/execution/runner/tests/firehose_live_tracing.rs — set the new BasePayloadAttributes::timestamp_millis_part field to None. * Regenerated the stale base-firehose-tests nop_transfer golden. It had not been refreshed since it was created against reth v1.11.4-fh and still recorded gas_limit 30000000 for the EIP-4788 beacon-roots system call, where the current tracer reports 31566720. Confirmed pre-existing by re-running the test on the pre-merge tree; no other field of the captured block changed. * Stopped tracking .dev/ and added it to .gitignore. Verification ------------ * cargo check of base-reth-node and all Firehose crates: clean. * cargo test across base-execution-firehose, base-firehose-tests, base-firehose-flashblocks, base-common-evm, base-common-consensus, base-node-core, base-node-runner and base-engine-tree: 260 passed, 0 failed. * Battlefield and devnet validation not run. Known gap: upstream v1.2.0 lands EIP-8130 phased transaction execution. It is gated behind the Cobalt upgrade, which is unscheduled on all real networks, but the Firehose tracer does not yet model multiple root call frames per transaction.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps the Firehose fork from
v1.1.1-fh-1to upstream base v1.2.0.No reth release needed
Upstream
v1.2.0keeps the exact same pins asv1.1.1—paradigmxyz/rethv2.3.0,revm40.0.3,revm-inspectors0.40.1,alloy-evm0.36.0— so the existingstreamingfast/rethv2.3.0-fh-5patch stays API-compatible.cargo checkofbase-reth-nodeplus every Firehose crate against it is clean.Note:
streamingfast/rethhas a newerv2.3.0-fh-6tag. This PR deliberately stays on-fh-5so the upstream bump is the only variable. Adopting-fh-6is a separate decision.Conflict resolution
The merge base predates the
releases/v1.1.0backports, so 43 files conflicted — most of them files the fork never touches, where both sides carry the same backport applied at a different offset. Classification rule: compare forkHEADagainstv1.1.1; identical means the fork never touched it, so takev1.2.0wholesale. That covered 37 files. The 6 fork-modified files were resolved by hand:Cargo.toml1.2.0; kept fork-onlyalloy-rpc-types-trace,reth-db-models,reth-tokio-util; took upstream'salloy-rpc-types-txpool,reth-eth-wire-types, SP16.2.1→6.3.0Cargo.lockv1.2.0under our patchescrates/common/evm/src/evm.rscrates/execution/node/src/node.rsBaseDiscoveryConfig::new(false)crates/common/consensus/src/reth_compat.rs.github/workflows/base-std-fork-tests.ymlreth-eth-wire-typeswas added to the[patch."https://github.com/paradigmxyz/reth"]table. Upstreamv1.2.0began depending on it directly; without the patch entry cargo would resolve a second copy fromparadigmxyz/rethalongside the Firehose fork's copy and the types would not unify. Verified: all 105 reth crates inCargo.lockresolve tostreamingfast/reth, zero toparadigmxyz/reth.Duplicate-apply artifacts the merge introduced were found and removed —
.github/workflows/base-anvil-package.ymlandbase-std-fork-tests.ymleach ended up with a doubledSet up Python 3.13step, and the latter with a doubledcargo updateblock. Both reset tov1.2.0, then the fork's intentionalworkflow_dispatch:-only trigger re-applied.To confirm nothing else double-applied, the per-file diffstat of merged tree vs
v1.2.0was checked against the fork's own diffstat (v1.1.1vs840391d1a) — they match line for line across all 26 modified upstream files, with the single intended exception ofCargo.tomlat 147 added lines instead of 146 (the new patch entry).Other changes
crates/execution/runner/tests/firehose_live_tracing.rs— set the newBasePayloadAttributes::timestamp_millis_partfield toNone(upstream added it in620d22816).nop_transfergolden. It had not been refreshed since it was created against rethv1.11.4-fh, so it still recordedgas_limit: 30000000for the EIP-4788 beacon-roots system call where the current tracer reports31566720. Confirmed pre-existing by parking the merged tree in a git object, resetting the worktree tov1.1.1-fh-1, re-running the test (byte-identical failure) and restoring. No other field of the captured block changed..dev/and added it to.gitignore.Verification
cargo check -p base-reth-node -p base-execution-firehose -p base-firehose-tests -p base-firehose-flashblocks— clean, no warnings.cargo testacrossbase-execution-firehose,base-firehose-tests,base-firehose-flashblocks,base-common-evm,base-common-consensus,base-node-core,base-node-runner,base-engine-tree— 260 passed, 0 failed.OpFirehoseEvmConfigwrapper innode.rs, theexecute_and_trace_blockhooks inengine-tree, theSignatureFieldsimpl onBaseTxEnvelope, the flashblocks peek hooks, and thebin/nodetracer bootstrap.Known gap
Upstream
v1.2.0lands EIP-8130 (account abstraction) with phased transaction execution — one transaction runs multiple call phases, each with its own status — plus a Cobalt irregular state transition that plants a0xEFcode stub on code-less senders.This is not a problem today: EIP-8130 is gated behind the Cobalt upgrade, and
cobalt_timestampisNonefor mainnet, sepolia, devnet and zeronet. But the Firehose tracer does not model multiple root call frames per transaction, and the Cobalt state transition is not emitted as a system call. This must be addressed before Cobalt activates. Note the local Docker devnet does schedule Cobalt (L2_BASE_COBALT_BLOCK=22), so tracing a local devnet past block 22 will hit the unsupported path.