Gravity Testnet v1.2.0
Contracts Release: gravity-testnet-v1.2.0
Full Changelog:
- gravity-reth: gravity-testnet-v1.0.0...gravity-testnet-v1.2.0
- gravity_chain_core_contracts: gravity-testnet-v1.0.0...gravity-testnet-v1.2.0
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_changesmethods, thePendingMintsaccumulator, and the temporary database have all been removed. - Mint precompile rewired:
mint_precompilenow modifies the EVM journal directly viaEvmInternals::load_account, participating correctly in checkpoint/revert semantics. - Executor trait changes:
ParallelExecutorandExecutortraits gain a newtransact_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