Mainnet upgrade: greth v2.3.0
Gravity v1.9.0 upgrades the bundled execution client to greth v2.3.0 (gravity-reth pin bc817c64…), with SDK CLI / cluster-stop adaptations, a consensus hardfork-key fix, and a mempool hot-path optimization.
Mainnet operators should treat this as a coordinated binary upgrade. Keep the mixed-version rollout window as short as possible.
This release does not schedule mainnet betaTime or osakaTime (see v1.9.1). Without mainnet betaTime, greth's EIP-7702 lockdown stays fail-closed.
What's changed
greth v2.3.0 integration
The bundled gravity-reth revision moves from 807c161584b5c785b692946e53d31ddc89599086 to bc817c642c9c3816cc4e22754e13e3c9633419dd.
SDK-side adaptation (#804):
- Pins greth / workspace
reth-primitives-traitsto the v2.3.0 line and aligns alloy versions. - Updates
gravity_nodeCLI wiring for reth v2.3.0 command signatures (Runtime/CliContext) and greth node log defaults. - Enables tokio
taskdumpforgravity_node(requiresRUSTFLAGS="--cfg tokio_unstable"builds). - Hardens cluster stop/restart paths so greth v2.3+ RocksDB
LOCKflush after SIGTERM does not race e2e restarts.
Notable execution-layer behavior in this pin:
- EIP-7702 lockdown gated by Beta (gravity-reth#412): lockdown is no longer a compile-time switch. Missing
betaTimekeeps the lockdown on (fail-closed). After Beta activates, the lockdown is released. - Block-gas packing last gate at Beta (gravity-reth#414): fixes prefix-cut packing that could empty blocks under adversarial ordering; gated by
betaTime. - Skip recoverable invalid transactions (gravity-reth#393, gravity-reth#410): durable executor-skip path for recoverable invalids (e.g. same-block nonce races), with stable reason codes.
- Osaka 30M per-tx gas cap (gravity-reth#401): Monad-style flat cap, dormant until
osakaTime. - Mempool rejects EIP-4844 blob txs at every ingress (gravity-reth#394).
- Merges upstream reth v2.3.0, including opt-in static-file changeset storage (
--storage.v2) and related prune fixes (gravity-reth#396, #403, #413).
Consensus hardfork key cleanup
- Stops reading the legacy genesis
consensusAlphaepoch key when building CL hardforks (#794). Activation uses onlyalphaTime(timestamp), removing a silent divergence path if genesis carriedconsensusAlpha: 0.
Mempool performance
- Snapshot shards are handed out via
Arcinstead of deep-copying every sender-bucket onread_timeline(#800). Hot broadcast path cost scales with actually dispatched transactions, not full shard length.
Security
- Removes public
tools/gnodecluster attack / PoC tooling; it lives in a private audit-tooling repo (#797).
Compatibility and operator notes
- Coordinated upgrade required: validators and full nodes should upgrade together. Do not leave the fleet split across v1.8.x and v1.9.0 outside a controlled window.
- EIP-7702 still locked down on mainnet in this release: no mainnet
betaTimeyet, so greth's Beta-gated lockdown stays active (fail-closed). - Beta / Osaka schedule: v1.9.1.
- No runtime override for hardfork times: the
HARDCODEDtable is binary-authoritative; retiming requires a new release binary. - Build note:
gravity_nodeexpectsRUSTFLAGS="--cfg tokio_unstable"when building with greth taskdump support.
Docker image
The release pipeline publishes:
docker pull ghcr.io/galxe/gravity_node:v1.9.0Dependency revision
gravity-reth:807c161584b5c785b692946e53d31ddc89599086->bc817c642c9c3816cc4e22754e13e3c9633419ddgravity-aptos: unchanged atb1f68dc85781ef0d28a568d9d64604b153be9d9e