Skip to content

Releases: Galxe/gravity-reth

Gravity Testnet v1.5.0

28 Apr 06:46
fd3b0d6

Choose a tag to compare

What's Changed

  • fix: only log "executed successfully" when validator transaction actually succeeds by @Lchangliang in #329
  • chore: update gaptos by @Lchangliang in #330
  • fix(pipe): use checked_add to prevent overflow in gas limit by @AshinGau in #331
  • fix: map ConfigVariant::Off to Off instead of V1 by @Lchangliang in #333
  • feat(fee): enforce 50 Gwei minimum base fee for Gravity by @AshinGau in #335
  • chore(deps): bump gravity-api-types to aptos-node tip (e9544c8cb3) by @keanji-x in #336
  • feat(fee): chainspec floor with code-driven activation schedule by @AshinGau in #337
  • fix(hardfork): regenerate Zeta StakePool bytecode for PR #73 by @ByteYue in #338

Full Changelog: gravity-testnet-v1.4.0...gravity-testnet-v1.5.0

Gravity Testnet v1.4.0

15 Apr 05:32
7496c4e

Choose a tag to compare

What's Changed

Full Changelog: gravity-testnet-v1.3.0...gravity-testnet-v1.4.0

Gravity Testnet v1.3.0

07 Apr 08:00

Choose a tag to compare

Contracts Release: gravity-testnet-v1.3.0

Full Changelog:

Breaking Changes

Unified Hardfork Framework

This release introduces a unified hardfork dispatch framework based on the new HardforkUpgrades trait, replacing the ad-hoc per-hardfork glue established in v1.1.1 / v1.2.0. All four Gravity-native hardforks (Alpha, Beta, Gamma, Delta) are now expressed as HardforkUpgrades implementations and dispatched through a single apply_hardfork_upgrades() entry point in parallel_execute.rs (#307, #309, #312, #318).

Key changes:

  • GravityHardfork enum (Alpha/Beta/Gamma/Delta) added to chainspec, exposed via new EthChainSpec trait methods ({alpha,beta,gamma,delta}_transitions_at_block() and is_{alpha,beta,gamma,delta}_active_at_block_number()).
  • Genesis JSON now parses alphaBlock, betaBlock, gammaBlock, deltaBlock from extra_fields into ChainSpec.gravity_hardforks.
  • HardforkUpgrades trait standardizes the interface for system_upgrades(), extra_upgrades(), storage_patches(), and the new batch_storage_patches() (a (&[Address], B256, U256) form needed for Gamma's ReentrancyGuard initialization across all StakePool instances).
  • Dispatch ordering: Alpha/Beta are applied before balance increments; Gamma/Delta are applied after.
  • Test framework: a new generic hardfork_test_helpers module (verify_bytecodes_at_block(), verify_bytecodes_old_before_block(), verify_storage_patches()) is added so each hardfork can be validated with the same harness — see HARDFORK_TESTING.md.

Delta Hardfork

This release ships the Delta hardfork together with the corresponding gravity_chain_core_contracts v1.3.0 release. Delta upgrades 4 system contracts (StakingConfig, ValidatorManagement, Governance, NativeOracle) and applies the storage migration required by the removal of minimumProposalStake from StakingConfig (packed _initialized bit at slot 1, clearing of stale slots 2/3/6/7). Activation is configured via genesis config.deltaBlock.

What's Changed

Features

  • feat: add hardfork testing framework (trait + generic helpers) by @ByteYue in #307
  • feat(chainspec): add GravityHardfork enum + EthChainSpec hardfork methods by @ByteYue in #309
  • feat(hardfork): add batch_storage_patches to HardforkUpgrades trait by @ByteYue in #318

Bug Fixes

  • fix(view): replace block_hash with block_id in block_hash_ref by @AshinGau in #302
  • fix: Use BTreeMap for Deterministic Event Ordering Causes Consensus Split by @ByteYue in #304
    • Replaces a non-deterministic HashMap event-iteration order that could produce divergent block outputs across nodes and trigger a consensus split.
  • fix: Fix coacker audit by @nekomoto911 in #311
  • fix(relayer): persist state to disk before updating in-memory by @ByteYue in #314
    • OracleRelayerManager::update_and_save_state previously advanced the in-memory nonce before the disk write, so a crash mid-save() would restart from stale on-disk state and re-deliver already-processed events. The state is now cloned, persisted first, and only committed to live in-memory state after the disk write succeeds.
  • fix(unwind): commit view and set prune distance for execution unwind by @AshinGau in #313
    • Enforces MINIMUM_PRUNING_DISTANCE in get_next_block_range() so the pruner retains enough historical blocks for unwind.
    • Inserts commit_view() calls between write/read steps during unwind because RocksDB's WriteBatch (unlike MDBX) does not provide immediate read-after-write visibility, so explicit flushes are required before state root recalculation and state removal.
    • Also moves nested_hash to reth-trie-db for reuse and skips init_genesis on already-initialized databases.

Security Audit Fixes

  • fix: Fix coacker audit by @nekomoto911 in #311
  • fix: Use BTreeMap for Deterministic Event Ordering Causes Consensus Split by @ByteYue in #304
  • fix(relayer): persist state to disk before updating in-memory by @ByteYue in #314

Refactoring & Chores

  • refactor(hardfork): unified hardfork framework with stub implementations by @ByteYue in #312
  • chore(deps): update gaptos & grevm by @nekomoto911 in #289
  • chore(deps): Update gaptos deps to address empty jwk provider when constructing jwk txns by @ByteYue in #294

Gravity Testnet v1.2.0

20 Mar 08:32
0b174b9

Choose a tag to compare

Contracts Release: gravity-testnet-v1.2.0

Full Changelog:

Breaking Changes

System Transaction Execution Overhaul

This release fundamentally changes how system transactions (mint, BLS PoP, metadata, validator) are executed. Previously, system transactions ran against a temporary in-memory database separate from the executor's own state, requiring manual state bridging that introduced state overwrite bugs and bypassed EVM revert semantics. Now all system transactions execute directly on the executor's internal state through a unified transact_system_txn code path, identical to user-transaction execution (#288).

Key breaking changes:

  • Unified execution path: The special-cased increment_balances / commit_changes methods, the PendingMints accumulator, and the temporary database have all been removed.
  • Mint precompile rewired: mint_precompile now modifies the EVM journal directly via EvmInternals::load_account, participating correctly in checkpoint/revert semantics.
  • Executor trait changes: ParallelExecutor and Executor traits gain a new transact_system_txn(evm_env, precompiles, tx_env) method.

Gamma Hardfork

This release introduces the Gamma hardfork, extending the Gravity-native hardfork framework established in v1.1.1 (which shipped Alpha and Beta). Gamma adds new hardfork infrastructure and integration test support, configured via genesis config at a specified block number (#292).

Oracle Nonce Type Change

The nonce type for PollResult and OracleSourceState has been changed from u64 to u128 (#278). This is a breaking change for any code that interacts with the oracle relayer state.

What's Changed

Features

  • feat(bls_precompile): add benchmark and raise POP_VERIFY_GAS to 110k by @nekomoto911 in #283
  • feat(rpc-provider): add MeteredBatchRequests(Future) by @nekomoto911 in #282
  • feat: add DKG transcript size validation with 100MB limit by @Lchangliang in #271
  • feat: add Gamma hardfork infrastructure and integration test by @ByteYue in #292

Bug Fixes

  • fix(rpc): Return SYSTEM_CALLER instead of Address::ZERO fallback by @AshinGau in #259
  • fix(rocksdb): Restructure cursor with explicit drop ordering by @AshinGau in #261
  • fix(engine): Remove validate_block() when making canonical in pipeline by @AshinGau in #262
  • fix(evm): warn on None state root, improved assertion messages by @AshinGau in #263
  • fix(recovery): Crash recovery trusts unverified state root by @AshinGau in #264
  • fix(cli/p2): Add range validators for Gravity CLI args by @nekomoto911 in #269
  • fix(evm/p2): Reject over-length BLS precompile input with strict equality check by @nekomoto911 in #268
  • fix(pipeline): Only extract gravity events from system transaction receipts by @AshinGau in #270
  • fix: audit round 2 by @nekomoto911 in #279
  • fix: audit round 3 by @nekomoto911 in #284
  • fix: return empty relayer state when schema version not match by @ByteYue in #285
  • fix(metadata_txn): use actual execution result for receipt success status by @Lchangliang in #287
  • fix(precompiles): execute system transactions as normal transactions by @AshinGau in #288

Security Audit Fixes

  • fix(cli/p2): Add range validators for Gravity CLI args by @nekomoto911 in #269
  • fix(evm/p2): Reject over-length BLS precompile input with strict equality check by @nekomoto911 in #268
  • fix(storage/p2): Document RocksDB read-your-writes limitation on upsert by @nekomoto911 in #267
  • fix(pipeline): Only extract gravity events from system transaction receipts by @AshinGau in #270
  • fix(recovery): Crash recovery trusts unverified state root by @AshinGau in #264
  • fix: audit round 2 by @nekomoto911 in #279
  • fix: audit round 3 by @nekomoto911 in #284

Refactoring & Chores

  • chore: remove unused rust files by @nekomoto911 in #265
  • fix(doc): add document for semantics of latest, safe and finalized by @AshinGau in #266
  • chore: datadir for relayer state must be set when launching chain node by @ByteYue in #275
  • refactor: change nonce of PollResult and OracleSourceState to u128 by @ByteYue in #278
  • chore: fix jwk name by @ByteYue in #280
  • chore(deps): update gaptos by @nekomoto911 in #286

Gravity Testnet v1.0.0

14 Feb 08:10
6e8da10

Choose a tag to compare

Release: gravity-testnet-v1.0.0

Full Changelog: gravity-v0.5.0...gravity-testnet-v1.0.0

Breaking Changes

System Contract Upgrade

This release introduces a complete system contract overhaul. All system contracts have been replaced with new implementations from gravity_chain_core_contracts, and are fully incompatible with the previous versions.

Key breaking changes:

  • New Validator Management Contract: The validator management logic has been completely restructured. The new contract introduces separate handling for validator transactions (#229) and aligns with new ABIs (#231).
  • New DKG Contract: The Distributed Key Generation (DKG) contract has been fully replaced (#240).
  • New Oracle Contract: The oracle contract and validator set fetcher have been redesigned with new interfaces (#235).
  • BLS Verify Precompile: A new BLS12-381 proof-of-possession verification precompile has been added for consensus public key validation during validator registration (#254).

Note: This is the first release for the Gravity Testnet. All nodes must be freshly deployed with the new system contracts — there is no backward compatibility with any previous devnet or internal versions.

ETH Hardfork Compatibility

Gravity Testnet v1.0.0 block header format is compatible up to the Ethereum Prague hardfork. All relevant EIP fields are preserved to maintain upstream reth compatibility, but features not applicable to the Gravity chain are handled as dummy/noop:

Hardfork EIP Field Gravity Handling
Shanghai EIP-4895 withdrawals_root Always set to empty withdrawals hash (Gravity uses its own staking/withdrawal mechanism)
Cancun EIP-4844 excess_blob_gas, blob_gas_used Fixed to 0 (blob transactions not supported)
Cancun EIP-4788 parent_beacon_block_root Set to parent_id, only used to pass integrity checks
Prague EIP-6110 requests_hash Empty request list hash (no contract deployed at deposit_contract_address)
Prague EIP-2935 Blockhashes system call Noop (no contract at HISTORY_STORAGE_ADDRESS, EVM call silently skips)
Prague EIP-4788 Beacon root system call Noop (no contract at BEACON_ROOTS_ADDRESS, EVM call silently skips)

What's Changed

Features

  • feature(onchain_config): align with new contract ABIs from gravity_chain_core_contracts by @ByteYue in #231
  • feat(trie): support eth_getProof for nested hash, step 1 by @AshinGau in #237
  • feat: Support new dkg contract by @Lchangliang in #240
  • feat: Use new oracle contract and fix validator set fetcher by @ByteYue in #235
  • feat: Split the validator transaction and execute it separately. by @Lchangliang in #229
  • feat: Add block number tracking and oracle state fetching by @ByteYue in #245
  • feat: upgrade gravity-api-types version to fix randomnessconfig error by @Lchangliang in #248
  • feat: implement bls verify precompile for gravity pipe execution by @nekomoto911 in #254

Bug Fixes

  • fix(rocksdb): Detected interrupted trie update, but trie has idempotency by @AshinGau in #236
  • fix(test): fix CI test of unit.yml by @AshinGau in #241
  • chore(deps): update gaptos deps to include peer_id consistency fix by @nekomoto911 in #242
  • fix(trie): fix merkle stage of history sync by @AshinGau in #246
  • fix(CI): ignore and skip unsupported actions by @AshinGau in #247
  • fix(unwind): calculate storage state root even if is an EOA by @AshinGau in #249
  • fix(pipe): fix header timestamp in epoch change block by @nekomoto911 in #250
  • fix(rpc): set safe and finalized block when making canonical by @AshinGau in #251
  • fix(zstd): use transaction dictionary for tx compressor by @AshinGau in #252
  • fix(recovery): heal segments that have existing static files by @AshinGau in #253
  • fix(recovery): prune the extra static file rows when checkpoint < highest by @AshinGau in #255

CI & Tooling

gravity-v0.4.1

08 Dec 04:55
12cd18f

Choose a tag to compare

What's Changed

  • refactor(parallel): remove the read provider factory that supports parallel reading by @AshinGau in #213
  • fix: Use from block number in uri for relayer by @ByteYue in #214
  • fix(pipeline): Make sure the ordered blocks are idempotent by @AshinGau in #216

Full Changelog: gravity-v0.4.0-patch...gravity-v0.4.1

gravity-v0.4.0-patch

01 Dec 02:47
ab314aa

Choose a tag to compare

What's Changed

  • opt(mdbx): sort trie entries and add mdbx bench by @AshinGau in #180
  • feat: Support relayer for crosschain stake event by @ByteYue in #181
  • feat: update gaptos version by @keanji-x in #182
  • feat: update gaptos version by @keanji-x in #184
  • fix: update gaptos version to ef69a6d (add dkg runtime) by @keanji-x in #185
  • fix: Update gravity-api-types dependency revision by @keanji-x in #186
  • feat: Voting power conversion && pass proposer using gravity sdk's internal address by @ByteYue in #183
  • fix: Should return err when fetch none by @ByteYue in #189
  • feat: update gaptos version to export shared mempool by @keanji-x in #190
  • feat: update aptos vesion to make mempool trait async by @keanji-x in #192
  • feat: Only support cross chain deposit event in relayer by @ByteYue in #193
  • fix: update gaptos to fix vm validator by @keanji-x in #194
  • feat: Update the gravity system contract's address by @ByteYue in #195
  • fix: Fix repeat jwk fetch by passing from block number from onchain by @ByteYue in #196
  • feat: update gaptos version to fix some bug aboud txn broadcasting by @keanji-x in #197
  • chore: update gaptos version by @nekomoto911 in #198
  • fix(cache): retain deleted account&storage in cache untile persist by @AshinGau in #200
  • chore: update aptos to remove logs by @keanji-x in #201
  • fix(execution): handle empty account in grevm by @AshinGau in #202
  • chore: update gaptos to use tracing logs by @keanji-x in #203
  • feat: update gaptos to use rotation by @keanji-x in #204
  • feat: implement DKG by @Lchangliang in #199
  • feat: merge reth-v1.8.3 by @nekomoto911 in #205
  • chore: Update Cargo.toml to fix log in gaptos by @keanji-x in #206
  • fix: fix ut compilation after merge v1.8.3 by @nekomoto911 in #207
  • fix: update gaptos to fix tracing write by @nekomoto911 in #208
  • feat: update gaptos version by @nekomoto911 in #209
  • chore: bump version gravity-v0.4.0 by @nekomoto911 in #210
  • fix(txpool): ensure skipped high-priority transactions are tracked in BestTransactions (#19940) by @keanji-x in #211

Full Changelog: gravity-v0.3.0-patch-2...gravity-v0.4.0-patch