refactor(hardfork): unified hardfork framework with stub implementations#312
Merged
nekomoto911 merged 13 commits intomainfrom Mar 30, 2026
Merged
refactor(hardfork): unified hardfork framework with stub implementations#312nekomoto911 merged 13 commits intomainfrom
nekomoto911 merged 13 commits intomainfrom
Conversation
…hods
Add shared hardfork infrastructure to main:
- GravityHardfork enum (Alpha, Beta, Gamma, Delta) in gravity.rs
- EthChainSpec trait methods: {alpha,beta,gamma,delta}_transitions_at_block()
and is_{alpha,beta,gamma,delta}_active_at_block_number() with default false
- ChainSpec.gravity_hardforks field with genesis JSON parsing
(alphaBlock, betaBlock, gammaBlock, deltaBlock from extra_fields)
- ChainSpec impl overrides using gravity_hardforks.is_fork_active_at_block()
Release branches add concrete hardfork modules (alpha.rs, beta.rs, etc.)
that implement the actual bytecode upgrades.
* feat(evm): implement Alpha hardfork contract upgrades and disable PoW rewards (#277) * feat(evm): implement Beta hardfork contract upgrades
Cherry-picked from gamma_fork_test (3599442) onto gravity-testnet-v1.2. Resolved merge conflicts in api.rs, gravity.rs, spec.rs, mod.rs, parallel_execute.rs. Updated test fixture to use top-level genesis config format (alphaBlock/betaBlock/gammaBlock).
Move 12 inline hex arrays (4231 lines) to bytecodes/gamma/*.bin files, loaded via include_bytes!() at compile time. gamma.rs reduced to 98 lines. Zero runtime overhead, identical compiled output.
- Add backticks around StakePool in doc comments (alpha.rs, beta.rs, parallel_execute.rs) - Add doc comments to all ADDRESS constants in gamma.rs
…e._owner The Governance contract was deployed via BSC-style bytecode placement during genesis, which skips the Solidity constructor. This left the Ownable._owner at slot 0 as address(0), making addExecutor/removeExecutor permanently inaccessible and breaking the proposal execution lifecycle. This hardfork writes the correct owner address to storage slot 0, restoring the full governance capability. Changes: - Add Delta variant to GravityHardfork enum - Create delta.rs with GOVERNANCE_OWNER_SLOT and GOVERNANCE_OWNER constants - Add apply_delta() in parallel_execute.rs - Add deltaBlock chainspec parsing in spec.rs - Add delta_transitions_at_block trait method in api.rs - Add integration test coverage for Governance owner storage verification
…testing - GOVERNANCE_OWNER = faucet (0xf39F...) for E2E private key access - Add GovernanceConfig storage writes in apply_delta(): - minVotingThreshold = 1 (slot 0) - requiredProposerStake = 1 (slot 1) - votingDurationMicros = 10s (slot 2) - Bypasses MIN_VOTING_DURATION validation for fast governance testing
…ccessor Replace 8 per-hardfork EthChainSpec trait methods with a single gravity_hardforks() -> &ChainHardforks accessor. Callers now use: chain_spec.gravity_hardforks().fork(GravityHardfork::Alpha).transitions_at_block(n) chain_spec.gravity_hardforks().is_fork_active_at_block(GravityHardfork::Alpha, n) This follows reth's pattern of generic fork queries. Adding a new hardfork only requires extending the GravityHardfork enum — no trait changes needed.
Each hardfork module now implements HardforkUpgrades with system_upgrades(), extra_upgrades(), and storage_patches(). The generic apply_hardfork_upgrades() in common.rs handles bytecode replacement + storage writes + commit. This removes ~300 lines of duplicated inline apply_* methods from parallel_execute.rs. Adding a new hardfork now only requires: 1. Add GravityHardfork enum variant (done previously) 2. Create hardfork module with HardforkUpgrades impl 3. One-line call in executor
Remove actual bytecode data from Alpha, Beta, and Gamma hardfork modules while keeping the HardforkUpgrades trait impl stubs so that the dispatch infrastructure in parallel_execute.rs compiles without changes. - alpha.rs: 1159 → 18 lines (remove inline Staking + StakePool bytecodes) - beta.rs: 466 → 18 lines (remove inline StakePool bytecodes) - gamma.rs: 155 → 42 lines (remove 12 .bin includes, keep public constants) - Delete bytecodes/gamma/*.bin (12 files, ~65KB) - delta.rs, common.rs, parallel_execute.rs: unchanged
- Add #[derive(Debug)] to AlphaHardfork, BetaHardfork, GammaHardfork, DeltaHardfork - Remove unused B256/U256 imports from gamma.rs - Add backticks to doc identifiers (GovernanceConfig, nextProposalId, etc.) - Add missing doc comments for GOV_CONFIG_SLOT_* and GOV_CONFIG_PROPOSER_STAKE constants
Remove concrete Gamma and Delta hardfork implementations, replacing them with minimal stubs matching the Alpha/Beta pattern. This separates the unified hardfork framework from specific hardfork logic, allowing Delta to be re-introduced via a dedicated PR. - gamma.rs: remove public constants (GAMMA_SYSTEM_UPGRADES, REENTRANCY_GUARD_*, STAKEPOOL_*) and StoragePatch override - delta.rs: remove all Governance storage patches and constants (150 → 25 lines) - gravity_hardfork_test.rs: remove implementation-specific verification functions, preserve hardfork framework chainspec parsing validation
nekomoto911
approved these changes
Mar 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduce a unified hardfork dispatch framework based on the
HardforkUpgradestrait, with stub implementations for all four hardforks (Alpha, Beta, Gamma, Delta). This provides a clean, extensible infrastructure for managing hardfork state changes without bundling concrete implementations.Key Changes
Hardfork Framework (
common.rs)HardforkUpgradestrait: standardized interface for bytecode upgrades, extra upgrades, and storage patchesapply_hardfork_upgrades(): single entry point used byparallel_execute.rsto dispatch hardfork state changesChainspec (
chainspec)GravityHardforkenum with Alpha/Beta/Gamma/Delta variantsgravity_hardforks()accessor for unified hardfork queriesalphaBlock,betaBlock,gammaBlock,deltaBlock)Hardfork Modules
alpha.rs/beta.rs/gamma.rs/delta.rs: stub implementations (empty upgrades)Executor Integration (
parallel_execute.rs)apply_hardfork_upgrades()Integration Test
Follow-up