Skip to content

test: impl delta hardfork and corresponding test#310

Open
ByteYue wants to merge 2 commits intomainfrom
dev_hardfork_rebase
Open

test: impl delta hardfork and corresponding test#310
ByteYue wants to merge 2 commits intomainfrom
dev_hardfork_rebase

Conversation

@ByteYue
Copy link
Copy Markdown
Contributor

@ByteYue ByteYue commented Mar 27, 2026

No description provided.

@ByteYue ByteYue force-pushed the dev_hardfork_rebase branch 5 times, most recently from 0f5866a to 828ae8c Compare March 27, 2026 09:14
…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
@ByteYue ByteYue force-pushed the dev_hardfork_rebase branch 3 times, most recently from 3781c6c to 855bda6 Compare April 2, 2026 04:29
- 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.
@ByteYue ByteYue force-pushed the dev_hardfork_rebase branch from 855bda6 to 7169ef5 Compare April 2, 2026 04:36
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.

1 participant