Skip to content

refactor(hardfork): unified hardfork framework with stub implementations#312

Merged
nekomoto911 merged 13 commits intomainfrom
dev_hardfork_stub
Mar 30, 2026
Merged

refactor(hardfork): unified hardfork framework with stub implementations#312
nekomoto911 merged 13 commits intomainfrom
dev_hardfork_stub

Conversation

@ByteYue
Copy link
Copy Markdown
Collaborator

@ByteYue ByteYue commented Mar 27, 2026

Summary

Introduce a unified hardfork dispatch framework based on the HardforkUpgrades trait, 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)

  • HardforkUpgrades trait: standardized interface for bytecode upgrades, extra upgrades, and storage patches
  • apply_hardfork_upgrades(): single entry point used by parallel_execute.rs to dispatch hardfork state changes

Chainspec (chainspec)

  • GravityHardfork enum with Alpha/Beta/Gamma/Delta variants
  • gravity_hardforks() accessor for unified hardfork queries
  • JSON config support (alphaBlock, betaBlock, gammaBlock, deltaBlock)

Hardfork Modules

  • alpha.rs / beta.rs / gamma.rs / delta.rs: stub implementations (empty upgrades)
  • Concrete implementations to be added via separate PRs

Executor Integration (parallel_execute.rs)

  • Unified dispatch: checks each hardfork's activation block and calls apply_hardfork_upgrades()
  • Alpha/Beta applied before balance increments, Gamma/Delta applied after

Integration Test

  • Hardfork framework validation: chainspec parsing + MockConsensus block pushing past hardfork boundaries

Follow-up

  • Delta concrete implementation will be added via a separate PR

ByteYue and others added 12 commits March 26, 2026 19:54
…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
@ByteYue ByteYue changed the base branch from dev_hardfork_rebase to main March 27, 2026 15:06
@ByteYue ByteYue changed the title chore: stub Gamma and Delta hardfork implementations refactor(hardfork): unified hardfork framework with stub implementations Mar 27, 2026
@nekomoto911 nekomoto911 merged commit 3c7634a into main Mar 30, 2026
30 checks passed
@nekomoto911 nekomoto911 deleted the dev_hardfork_stub branch March 30, 2026 09:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants