test: impl delta hardfork and corresponding test#310
Open
Conversation
0f5866a to
828ae8c
Compare
…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 & Beta hardfork (#291)
* feat(evm): implement Alpha hardfork contract upgrades and disable PoW rewards (#277)
* feat(evm): implement Beta hardfork contract upgrades
feat: add Gamma hardfork infrastructure and integration test
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).
refactor: extract gamma hardfork bytecodes to external .bin files
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.
fix: resolve clippy doc_markdown and missing_docs warnings
- Add backticks around StakePool in doc comments (alpha.rs, beta.rs, parallel_execute.rs)
- Add doc comments to all ADDRESS constants in gamma.rs
feat: delta hardfork — activate Governance contract by setting Ownable._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
feat(delta): set owner to faucet + override GovernanceConfig for E2E 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
refactor(chainspec): unify hardfork queries via gravity_hardforks() accessor
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.
refactor(hardfork): extract apply logic into HardforkUpgrades trait
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
chore: stub Alpha/Beta/Gamma hardfork bytecodes, preserve Delta
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
fix: resolve clippy errors in hardfork modules
- 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
3781c6c to
855bda6
Compare
- Remove StorageOrPatch type and storage_or_patches() trait from common.rs - Remove StakingConfig stale slot cleanup patches from delta.rs - Remove STAKING_CONFIG_INITIALIZED_OR_MASK and read-modify-write logic - Update StakingConfig.bin (1519B → 1530B, includes gap variable) - Simplify integration test: verify_staking_config_preserved() replaces verify_staking_config_migration() Net ~120 lines removed. Hardfork now only does bytecode replacement for StakingConfig — no storage migration needed.
855bda6 to
7169ef5
Compare
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.
No description provided.