Skip to content

Map ScrollSpecId::Feynman to SpecId::Prague #47

@greged93

Description

@greged93

Currently the Euclid fork maps to the Ethereum Shanghai fork, due to missing EIPs that Scroll doesn't support. Below is an overview of the required work to allow for ScrollSpecId::Feynman to map to the Ethereum Prague fork, which would avoid to much overloading of the revm fork.

Cancun

  • EIP-1153: Transient storage opcodes → already active for Scroll since Curie.
  • EIP-5656: MCOPY - Memory copying instruction → already active for Scroll since Curie.
  • EIP-4788: Beacon block root in the EVM → would be implemented in Reth, so activating it should not influence the behavior of Revm.
  • EIP-4844: Shard Blob Transactions → Would require setting the blob_excess_gas_and_price field of the BlockEnv to Some(0), and would activate EIP-4844 transactions in revm. If we prevent these transactions at mempool level and validate their absence at block validation level, this should be acceptable. This is similar to what OP does.
  • EIP-6780: SELFDESTRUCT only in same transaction → NOT ACTIVE
  • EIP-7516: BLOBBASEFEE opcode → NOT ACTIVE

Shanghai

  • EIP-7702: Set EOA account code → already active for Scroll since Euclid.
  • EIP-2537: Precompile for BLS12-381 curve operations → NOT ACTIVE
  • EIP-7623: Increase calldata cost → planned for Feynman.
  • EIP-2935: Save historical block hashes in state → would be implemented in Reth, so activating it should not influence the behavior of revm.

Changes required in revm

  • Map Feynman to Prague
  • Deactivate BLOBBASEFEE from the instructions.
  • Deactivate BLS12-381 from precompiles.

Changes required in Reth

  • Set blob_excess_gas_and_price to Some(0) in all places that prepare a BlockEnv. Similar to the ConfigureEvm implementation to Op.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions