Skip to content

Gravity v1.8.0

Choose a tag to compare

@Lchangliang Lchangliang released this 23 Jul 04:08

Mainnet upgrade notice

Gravity v1.8.0 schedules the Alpha hardfork for Gravity mainnet:

  • Beijing: 2026-07-27 13:00:00 UTC+08:00
  • UTC: 2026-07-27 05:00:00 UTC
  • Unix timestamp: 1785128400
  • Mainnet chain ID: 127001

All Gravity mainnet validators and full nodes must upgrade to v1.8.0 before the activation time. Older binaries do not carry the Alpha rules and will diverge once the hardfork activates.

The activation time is binary-authoritative for mainnet. If the supplied genesis omits alphaTime or contains a different value, v1.8.0 overrides it and emits a startup warning. pragueTime is unchanged.

What's new

Alpha hardfork

  • Hardcodes the mainnet alphaTime schedule in gravity_node, with the same effective timestamp supplied to both the execution layer and consensus layer.
  • Makes protocol-injected system transactions fee-free after Alpha while keeping them gas-metered and nonce-checked.
  • Sets system transaction gas_price to zero after Alpha and removes the dependency on the historical SYSTEM_CALLER sentinel balance.
  • Performs a one-time migration that zeroes the SYSTEM_CALLER balance at the activation block while preserving its nonce and code metadata.
  • Uses a consensus-agreed committed block as the post-Alpha leader-reputation anchor, making validator-performance reads and proposer selection deterministic across nodes.
  • Preserves pre-Alpha execution and historical RPC replay behavior.

Related changes: gravity-sdk #796, gravity-sdk #782, gravity-reth #367.

Consensus, recovery, and epoch transitions

  • Recovery commits are persisted only after a LedgerInfo checkpoint validates the local execution hash.
  • Finalized watermarks now advance on persistence acknowledgement instead of commit handoff.
  • Recovery and rebuild correctly distinguish chain-level randomness support from epochs that actually require block randomness.
  • Proposal processing now propagates payload-retrieval failures instead of executing incomplete blocks, verifies wrapped genesis blocks, and rejects unsupported payload variants before admission.
  • Incremental proof handling and compute-result scheduling return errors instead of panicking on recoverable failures.
  • Quorum Store can serve validated batches across adjacent epoch keys, preventing lagging VFN/full-node execution from freezing at an epoch boundary; adjacent-epoch arithmetic is overflow-safe.
  • Commit-vote caches are bounded and event-notification failures no longer panic consensus-facing paths.

Related changes: #755, #772, #773, #779, #782, #784, #791.

Execution and RPC correctness

The bundled gravity-reth revision moves from 546a41b17160c76d7d8a806772bd8a0c2c1d8176 in v1.7.7 to b49b4864aeaa3c35c6871a77d7133bb9486edbf1 in v1.8.0.

  • Replaces the v1.7 emergency EIP-7702 compile-time lockdown with durable block-order nonce simulation for self-authorization and cross-account authorization effects.
  • Converts reachable system-transaction error paths from panics into deterministic error/skip behavior and preserves completed system-transaction prefixes across epoch changes.
  • Keeps serial and grevm execution aligned for system-transaction state clearing and post-block reward handling.
  • Makes historical trace/replay endpoints apply the same post-Alpha system-transaction gas rules as canonical execution, while pure simulation endpoints remain protected against SYSTEM_CALLER spoofing.
  • Registers the BLS proof-of-possession verification precompile consistently for RPC replay.
  • Reads randomness from canonical headers and adds pre-execution gas guards to randomness and mint precompiles.
  • Adds extensive pre/post-Alpha replay, trace, anti-spoofing, system-caller migration, and backend-equivalence coverage.

Related gravity-reth changes: #360, #363, #366, #367, #370, #371, #373, #377, #382, #383, #385.

Mempool, transaction pool, and relayer

  • Restores finite reth transaction-subpool limits so eviction remains active.
  • Bounds the node-side reth transaction cache with capacity and TTL cleanup to prevent unbounded memory growth.
  • Enforces transaction-byte budgets when building mempool batches.
  • Anchors each sender's expected nonce before applying the in-flight filter, preventing a higher pending nonce from incorrectly hiding a valid lower-nonce transaction.
  • Drops oracle observations whose nonce has already committed, avoiding deterministic relayer submission failures.

Related changes: #767, #768, #780, #788, #790.

Operations and testing

  • Exposes binary version, commit, build profile, target, dirty-tree status, and related build information as node metrics.
  • Gracefully shuts down reth coordinator tasks and avoids runtime-drop panics during normal node shutdown.
  • Adds the gnode end-to-end attack/PoC CLI with per-instance isolation for concurrent audit runs.
  • Adds E2E coverage for randomness configuration transitions, epoch changes, validator/VFN restart and catch-up, and hardened staking CLI operations.

Related changes: #750, #769, #776, #778, #783, #785, #786.

Compatibility notes

  • Coordinated upgrade required: Alpha changes consensus and execution behavior at 1785128400; the mainnet fleet must be on v1.8.0 before activation.
  • Non-mainnet chains: chain IDs not listed in the binary hardfork table continue to use their genesis-provided alphaTime.
  • EIP-7702: v1.7.7 shipped an emergency compile-time lockdown. v1.8.0 removes that lockdown and uses the durable execution/filter hardening from gravity-reth #385.
  • LedgerInfo retrieval validation: v1.8.0 temporarily disables the verify_ledger_infos() call during block retrieval because epoch-change suffix LedgerInfo heights use the epoch anchor rather than the suffix block height. This allows restarted or lagging nodes to catch up across epoch boundaries. The verifier remains implemented and must be re-enabled after raw committed suffix heights are exposed and validated. See gravity-sdk #793.
  • Explorers and indexers: post-Alpha system transactions remain visible in block bodies with non-zero gas_used, but use zero gas price and do not debit SYSTEM_CALLER. Supply tooling should no longer rely on the historical sentinel balance.

Docker image

The release pipeline publishes:

docker pull ghcr.io/galxe/gravity_node:v1.8.0

Dependency revisions

  • gravity-reth: 546a41b17160c76d7d8a806772bd8a0c2c1d8176 -> b49b4864aeaa3c35c6871a77d7133bb9486edbf1
  • gravity-aptos: e9544c8cb3d8a5757d4c7f1b4807b312c03ba060 -> b1f68dc85781ef0d28a568d9d64604b153be9d9e

Full changelogs