Skip to content

Remove cfg_env.disable_eip7623 override after EIP-7623 activation #125

@panos-xyz

Description

@panos-xyz

Background

morph-reth currently sets cfg_env.disable_eip7623 = true in two places (crates/evm/src/config.rs:39, :90) to match morph-geth's behavior — morph-geth has not implemented EIP-7623 and treats calldata floor gas as not applicable.

However, reth's upstream mempool ensure_intrinsic_gas enforces EIP-7623 floor gas based on the active SpecId, without consulting cfg_env.disable_eip7623. The upstream cfg → mempool sync channel only propagates tx_gas_limit_cap etc., not disable_eip7623. As a result morph-reth's mempool is stricter than its own execution layer (and stricter than morph-geth) — see QA finding X18.

A 41,000-gas tx with 5,000 zero-byte calldata is accepted by morph-geth and imports cleanly into morph-reth's execution layer (stateRoot matches), but rejected by morph-reth's mempool with intrinsic gas too low.

Decision

Will be fixed alongside morph-geth at the next Morph hardfork that activates EIP-7623.

Once EIP-7623 is activated, removing the disable_eip7623 = true override here aligns morph-reth's execution layer with the new "EIP-7623 enabled" state, and reth's mempool floor-gas check (which already enforces EIP-7623) becomes correct.

Scope

  • crates/evm/src/config.rs: remove cfg_env.disable_eip7623 = true from both evm_env() and next_evm_env()
  • Verify mempool / execution behavior is identical (both enforce EIP-7623)
  • Verify behavior matches morph-geth post-hardfork
  • Update tests that asserted cfg_env.disable_eip7623 == true (e.g. crates/evm/src/config.rs:266)

Acceptance Criteria

  • cfg_env.disable_eip7623 = true removed from both evm_env() and next_evm_env()
  • Test asserting disable_eip7623 is updated/removed
  • X18 QA reproducer (5000-byte calldata, 41000 gas) is rejected at mempool with intrinsic gas too low — now intentionally, matching geth post-hardfork
  • Same reproducer with gas_limit ≥ 71000 is accepted by both morph-geth and morph-reth
  • cargo nextest run --workspace and e2e tests pass

Reference

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions