Skip to content

Bump ethrex to v26.0.0-rc.3 for glamsterdam-devnet-8 - #580

Open
0w3n-d wants to merge 1 commit into
od/gloas-docs-step5from
od/ethrex-v26-devnet8
Open

0w3n-d wants to merge 1 commit into
od/gloas-docs-step5from
od/ethrex-v26-devnet8

Conversation

@0w3n-d

@0w3n-d 0w3n-d commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Issue: #561 (follow-up; unblocks running the stack on devnet-8)

Why

Our pin (b4d5677, v20.0.0) targets bal-devnet-7 — ethrex's own roadmap at
that rev says so, and marks EIP-7928 and EIP-8037 "devnet-7 aligned". Those are
exactly the two EIPs the Gloas work rests on. devnet-8 (plataberget) is the
next round, and our pin has no Plataberget network variant, so a
helix-builder built from our tree cannot join it by name at all.

The reassuring part

Nothing in the Gloas work needed rework. The two things most likely to break
are unchanged between devnet-7 and devnet-8:

  • The BAL wire format is byte-identical. Same six struct shapes, same
    compute_hash character for character, and the RLPEncode for BlockAccessList impl hashes to the same md5. The 838 changed lines in that
    file are recorder/checkpoint internals, not encoding. So step 3's
    hash-as-received and recomputed-comparison hold as written.
  • EIP-8037 state gas is unchanged. STATE_BYTES_PER_NEW_ACCOUNT (120) x
    cost_per_state_byte (1530) = 183600, so a first payment still needs exactly
    204600. Both step 4 assertions pass on v26, which turns that from inference
    into a measurement.

The gas constants look changed — TX_VALUE_COST_AMSTERDAM 4244 -> 6000 and
TRANSFER_LOG_COST_AMSTERDAM (1756) removed — but 1756 + 4244 = 6000: two
constants merged into one and moved behind recipient_regular_gas. A plain
transfer still costs 21000 regular.

What the bump actually cost

what fix
vendored ethrex-crypto pinned at 20.0.0, so [patch] stopped applying and both it and upstream 26.0.0 entered the graph re-vendored at the new rev. Upstream changed 4 files, none in keccak/, so our symbol renames carried over untouched; only kzg.rs, provider.rs and the version needed updating
node bootstrap drift SyncManager::new +2 args (BackfillConfig, TaskTracker); bind_api 16->15 (node + record collapsed into SharedLocalNode); start_network +1; DiscoveryConfig lost Default; get_latest_block_number no longer async; DEFAULT_ROCKSDB_BLOCK_CACHE_SIZE_BYTES renamed
apply_fork_choice gained a reorg-depth bound test fixture passes None
v26's mempool rejects zero-tip transactions the blob fixture now tips 1 wei. The payout is unaffected: it bypasses the pool via apply_tx_to_payload, which is worth knowing

Every compile error was in cli.rs/node.rs or a test fixture. None were in
the validation, building, or Gloas logic.

Two corrections to the runbook, both found the hard way

The EIP-8282 predeploy addresses moved between devnet-7 and devnet-8. The
pair the runbook documented were devnet-7's; the bytecode is identical but the
Nick's-method addresses changed:

devnet-7 devnet-8
deposit 0x0000884d…D9008282 0x0000BFF4…300D8282
exit 0x000014574A…0f008282 0x000064D6…800E8282

This cost 15 test failures, which is how it surfaced. deploy_amsterdam_predeploys
now reads both from ethrex_vm::system_contracts rather than hardcoding them,
so the next pin bump cannot silently invalidate every Amsterdam block.

And "the predeploys must be in genesis" was wrong for a real devnet.
devnet-8's shipped genesis does not allocate them: they are Nick's-method
addresses deployed on chain by an ordinary transaction before the fork, which
activated 2026-08-20T07:50:24Z. On a synced node there is nothing to do. The
genesis requirement applies only to a local genesis with Amsterdam from block 0,
which is what the test fixture builds. The runbook now says so, and points at
eth_getCode as the check.

The runbook also gains devnet-8's specifics — chain id 7091047534, the
Amsterdam timestamp, the ethpandaops config link — and one trap: an unrecognised
--network value is not an error, ethrex treats it as a genesis file path, so a
misspelling fails as a missing file. It is plataberget, with an l.

What this PR deliberately does not do

  • No devnet-8 validation against the live network. This makes the code build
    and pass its tests against v26; whether our blocks are accepted by other
    devnet-8 clients is the next thing to find out, and it needs a running node.
  • No re-measurement of the access-list size. The encoding is byte-identical,
    so the figures in the runbook still stand.
  • No ethrex-levm removal. Still a direct dependency for the two state-gas
    constants, which is exactly why the payout survived the bump unchanged.

Tests

All 414 pass on v26 (same count as before), just fmt-check and
cargo clippy --all-features --no-deps -- -D warnings clean.

Reviewer checklist

  • CI (lint, unit-test) is green
  • Matches the linked issue/step
  • No unexplained scope creep or unrelated files touched

Adds `--network plataberget`. The BAL wire format and the EIP-8037 state
gas are unchanged, so the Gloas work needs no rework; the churn is node
bootstrap plus two moved EIP-8282 predeploy addresses, now read from
ethrex instead of hardcoded.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant