Skip to content

Ethereum Mainnet EVM Compatibility Specification

Overview

This document provides a comprehensive analysis of the Ethereum Improvement Proposals (EIPs), VM opcodes, and protocol features required for Fukuii to claim full Ethereum mainnet execution client compatibility. Fukuii was originally designed as an Ethereum Classic client, and this specification identifies the gaps and requirements for Ethereum mainnet compatibility.

Table of Contents

  1. Current Implementation Status
  2. Implemented EIPs
  3. Ethereum Mainnet Fork History
  4. Missing EIPs for Full Compatibility
  5. Opcode Implementation Status
  6. Precompiled Contracts
  7. Consensus and Protocol Differences
  8. Testing and Validation
  9. Implementation Roadmap

Current Implementation Status

Summary

Category Implemented Partial Missing
Pre-Merge EIPs 25+ 2 8+
Post-Merge EIPs 0 0 10+
Pectra/Fusaka EIPs 0 0 9
Opcodes 142/145 0 3
Precompiled Contracts 9/19 0 10

Compatibility Level

  • ETC Spiral (โ‰ˆ Shanghai equivalent): โœ… Full compatibility
  • Ethereum Berlin: โœ… Full compatibility
  • Ethereum London: โš ๏ธ Partial (EIP-1559 not implemented)
  • Ethereum Paris (The Merge): โŒ Not implemented
  • Ethereum Shanghai: โš ๏ธ Partial (beacon chain features missing)
  • Ethereum Cancun (Dencun): โŒ Not implemented
  • Ethereum Prague (Pectra/Fusaka): โŒ Not implemented

Implemented EIPs

Frontier Era (Block 0)

EIP Title Status Notes
N/A Initial EVM opcodes โœ… Implemented 130+ base opcodes

Homestead (Block 1,150,000)

EIP Title Status Notes
EIP-2 Homestead Hard-fork Changes โœ… Implemented Contract creation, tx validation
EIP-7 DELEGATECALL โœ… Implemented Opcode 0xF4
EIP-8 devp2p Forward Compatibility โœ… Implemented Network protocol

Tangerine Whistle (Block 2,463,000)

EIP Title Status Notes
EIP-150 Gas cost changes for IO-heavy operations โœ… Implemented EXTCODE*, CALL*, SLOAD updates

Spurious Dragon (Block 2,675,000)

EIP Title Status Notes
EIP-155 Simple replay attack protection โœ… Implemented Chain ID in tx signature
EIP-160 EXP cost increase โœ… Implemented G_expbyte = 50
EIP-161 State trie clearing โœ… Implemented noEmptyAccounts flag
EIP-170 Contract code size limit โœ… Implemented MAX_CODE_SIZE = 24576

Byzantium (Block 4,370,000)

EIP Title Status Notes
EIP-100 Difficulty adjustment โœ… Implemented Uncle inclusion adjustment
EIP-140 REVERT instruction โœ… Implemented Opcode 0xFD
EIP-196 BN128 addition and multiplication โœ… Implemented Precompiles at 0x06, 0x07
EIP-197 BN128 pairing check โœ… Implemented Precompile at 0x08
EIP-198 Big integer modular exponentiation โœ… Implemented Precompile at 0x05
EIP-211 RETURNDATASIZE and RETURNDATACOPY โœ… Implemented Opcodes 0x3D, 0x3E
EIP-214 STATICCALL โœ… Implemented Opcode 0xFA
EIP-649 Difficulty bomb delay โœ… Implemented Block reward reduction
EIP-658 Transaction status in receipts โœ… Implemented Status field in receipts

Constantinople/Petersburg (Block 7,280,000)

EIP Title Status Notes
EIP-145 Bitwise shifting โœ… Implemented SHL, SHR, SAR opcodes
EIP-1014 Skinny CREATE2 โœ… Implemented Opcode 0xF5
EIP-1052 EXTCODEHASH โœ… Implemented Opcode 0x3F
EIP-1234 Constantinople bomb delay โœ… Implemented Block reward = 2 ETH
EIP-1283 Net gas metering for SSTORE โœ… Implemented Constantinople only

Istanbul (Block 9,069,000)

EIP Title Status Notes
EIP-152 Blake2b F compression โœ… Implemented Precompile at 0x09
EIP-1108 BN128 gas cost reduction โœ… Implemented Reduced gas for BN128 ops
EIP-1344 ChainID opcode โœ… Implemented Opcode 0x46
EIP-1884 Opcode repricing โœ… Implemented SLOAD, BALANCE, EXTCODEHASH
EIP-2028 Calldata gas reduction โœ… Implemented G_txdatanonzero = 16
EIP-2200 SSTORE gas changes (net metering) โœ… Implemented Combined with EIP-1283

Berlin (Block 12,244,000)

EIP Title Status Notes
EIP-2565 ModExp gas cost โœ… Implemented Repriced modular exponentiation
EIP-2718 Typed Transaction Envelope โš ๏ธ Partial Type 0 legacy only
EIP-2929 Gas cost increases for state access โœ… Implemented Cold/warm access tracking
EIP-2930 Optional access lists โš ๏ธ Partial Access lists parsed but Type 1 tx incomplete

London (Block 12,965,000)

EIP Title Status Notes
EIP-1559 Fee market change โŒ Missing Base fee, priority fee
EIP-3198 BASEFEE opcode โŒ Missing Opcode 0x48
EIP-3529 Reduce refunds โœ… Implemented SELFDESTRUCT refund = 0
EIP-3541 Reject new contracts starting with 0xEF โœ… Implemented EOF preparation

Paris/The Merge (Block 15,537,394)

EIP Title Status Notes
EIP-3675 Upgrade consensus to Proof-of-Stake โŒ Missing Beacon chain integration
EIP-4399 DIFFICULTY โ†’ PREVRANDAO โŒ Missing Opcode behavior change

Shanghai (Block 17,034,870)

EIP Title Status Notes
EIP-3651 Warm COINBASE โœ… Implemented Coinbase in warm addresses
EIP-3855 PUSH0 instruction โœ… Implemented Opcode 0x5F
EIP-3860 Limit and meter initcode โœ… Implemented MAX_INITCODE_SIZE
EIP-4895 Beacon chain push withdrawals โŒ Missing Validator withdrawals
EIP-6049 Deprecate SELFDESTRUCT โœ… Implemented Informational only

Cancun (Block 19,426,587)

EIP Title Status Notes
EIP-1153 Transient storage opcodes โŒ Missing TLOAD, TSTORE
EIP-4788 Beacon block root in EVM โŒ Missing Parent beacon root
EIP-4844 Shard Blob Transactions โŒ Missing Proto-danksharding
EIP-5656 MCOPY instruction โŒ Missing Memory copy opcode
EIP-6780 SELFDESTRUCT changes โŒ Missing Same-transaction only
EIP-7516 BLOBBASEFEE opcode โŒ Missing Blob gas price

Prague/Pectra (Execution: Prague, Consensus: Fusaka - Activated May 7, 2025)

Note: EIP-7251 and EIP-7549 appear in both sections as they affect both execution and consensus layers.

EIP Title Status Notes
Execution Layer EIPs
EIP-2537 BLS12-381 precompiles โŒ Missing BLS curve operations (9 precompiles)
EIP-2935 Serve historical block hashes from state โŒ Missing BLOCKHASH opcode improvement
EIP-6110 Supply validator deposits on chain โŒ Missing Deposit processing in EL
EIP-7002 Execution layer triggerable exits โŒ Missing Validator exits from EL
EIP-7251 Increase MAX_EFFECTIVE_BALANCE โŒ Missing Max 2048 ETH effective balance
EIP-7549 Move committee index outside Attestation โŒ Missing Consensus layer optimization
EIP-7685 General purpose execution layer requests โŒ Missing Request framework
EIP-7702 Set EOA account code for one transaction โŒ Missing Account abstraction precursor
Consensus Layer EIPs (Fusaka)
EIP-7251 Max effective balance (Consensus) โŒ Missing Validator consolidation support
EIP-7549 Committee index optimization โŒ Missing Attestation efficiency
EIP-7594 PeerDAS (Peer Data Availability Sampling) โŒ Missing Data availability layer

Ethereum Mainnet Fork History

Block 0          โ”‚ Frontier
Block 200,000    โ”‚ Frontier Thawing
Block 1,150,000  โ”‚ Homestead
Block 1,920,000  โ”‚ DAO Fork (ETC split)
Block 2,463,000  โ”‚ Tangerine Whistle
Block 2,675,000  โ”‚ Spurious Dragon
Block 4,370,000  โ”‚ Byzantium
Block 7,280,000  โ”‚ Constantinople/Petersburg
Block 9,069,000  โ”‚ Istanbul
Block 9,200,000  โ”‚ Muir Glacier
Block 12,244,000 โ”‚ Berlin
Block 12,965,000 โ”‚ London          โ† EIP-1559 (base fee)
Block 13,773,000 โ”‚ Arrow Glacier
Block 15,050,000 โ”‚ Gray Glacier
Block 15,537,394 โ”‚ Paris (The Merge) โ† PoS transition
Block 17,034,870 โ”‚ Shanghai        โ† Withdrawals
Block 19,426,587 โ”‚ Cancun (Dencun) โ† Proto-danksharding
Slot 10388992    โ”‚ Prague (Pectra/Fusaka) โ† Account abstraction, MaxEB, EL requests
(May 7, 2025)    โ”‚ (Execution: Prague, Consensus: Fusaka)

Missing EIPs for Full Compatibility

Critical Path (Required for Basic Compatibility)

1. EIP-1559: Fee Market Change for ETH 1.0 Chain

Priority: ๐Ÿ”ด Critical
Complexity: High
Impact: Transaction processing, block validation

Requirements: - Add base_fee_per_gas to block header - Add max_fee_per_gas and max_priority_fee_per_gas to transactions - Implement Type 2 (EIP-1559) transactions - Calculate effective gas price - Burn base fee portion - Implement base fee adjustment algorithm

Gas Calculation:

effective_gas_price = min(max_fee_per_gas, base_fee_per_gas + max_priority_fee_per_gas)
priority_fee = effective_gas_price - base_fee_per_gas

2. EIP-3198: BASEFEE Opcode

Priority: ๐Ÿ”ด Critical (depends on EIP-1559)
Complexity: Low
Impact: EVM opcode

Implementation:

case object BASEFEE extends ConstOp(0x48)(s => UInt256(s.env.blockHeader.baseFee.getOrElse(0)))

3. EIP-4399: Supplant DIFFICULTY with PREVRANDAO

Priority: ๐Ÿ”ด Critical (post-Merge)
Complexity: Low
Impact: DIFFICULTY opcode behavior

Changes: - After The Merge, DIFFICULTY (0x44) returns the beacon chain RANDAO value - Rename to PREVRANDAO semantically - Update block header to include prevRandao field

4. EIP-3675: Upgrade Consensus to Proof-of-Stake

Priority: ๐Ÿ”ด Critical (for mainnet sync)
Complexity: Very High
Impact: Consensus, block production

Requirements: - Engine API implementation (JSON-RPC for consensus/execution layer communication) - Block building without PoW - Beacon chain integration - Fork choice rule changes - Terminal Total Difficulty (TTD) handling

High Priority (Required for Modern Features)

5. EIP-4895: Beacon Chain Push Withdrawals

Priority: ๐ŸŸ  High
Complexity: Medium
Impact: Block processing

Requirements: - Add withdrawals field to block body - Process withdrawals as balance credits - Withdrawal index tracking

6. EIP-1153: Transient Storage Opcodes

Priority: ๐ŸŸ  High
Complexity: Medium
Impact: EVM opcodes

New Opcodes: | Opcode | Name | Description | |--------|------|-------------| | 0x5C | TLOAD | Load from transient storage | | 0x5D | TSTORE | Store to transient storage |

Implementation Notes: - Transient storage is cleared at end of transaction - Same gas costs as SLOAD/SSTORE warm access (100 gas) - Per-transaction, per-address key-value store

7. EIP-5656: MCOPY Instruction

Priority: ๐ŸŸ  High
Complexity: Low
Impact: EVM opcode

New Opcode: | Opcode | Name | Description | |--------|------|-------------| | 0x5E | MCOPY | Memory copy |

Gas Calculation:

gas = G_verylow + G_copy * ceil(size / 32) + memory_expansion_cost

8. EIP-6780: SELFDESTRUCT Only in Same Transaction

Priority: ๐ŸŸ  High
Complexity: Medium
Impact: SELFDESTRUCT behavior

Changes: - SELFDESTRUCT only deletes the account if called in the same transaction as contract creation - Otherwise, only transfers ETH, does not delete code or storage - Enables future state expiry proposals

Medium Priority (Required for Complete Compliance)

9. EIP-4844: Shard Blob Transactions

Priority: ๐ŸŸก Medium
Complexity: Very High
Impact: Transaction types, data availability

Requirements: - Type 3 (blob) transactions - KZG commitments and proofs - Blob data handling - Data availability sampling (future)

New Components: - blob_versioned_hashes in transactions - excess_blob_gas and blob_gas_used in headers - Precompile at 0x0A (point evaluation)

10. EIP-7516: BLOBBASEFEE Opcode

Priority: ๐ŸŸก Medium (depends on EIP-4844)
Complexity: Low
Impact: EVM opcode

New Opcode: | Opcode | Name | Description | |--------|------|-------------| | 0x4A | BLOBBASEFEE | Get blob base fee |

11. EIP-4788: Beacon Block Root in EVM

Priority: ๐ŸŸก Medium
Complexity: Medium
Impact: System contract

Requirements: - System contract at address 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02 - Stores beacon block roots - Ring buffer of 8191 entries

Lower Priority (Future Enhancements)

12. EIP-2537: BLS12-381 Curve Operations

Priority: ๐ŸŸ  High (Included in Pectra)
Complexity: High
Impact: Precompiled contracts

New Precompiles: | Address | Name | Description | |---------|------|-------------| | 0x0B | BLS12_G1ADD | G1 point addition | | 0x0C | BLS12_G1MUL | G1 point multiplication | | 0x0D | BLS12_G1MSM | G1 multi-scalar multiplication | | 0x0E | BLS12_G2ADD | G2 point addition | | 0x0F | BLS12_G2MUL | G2 point multiplication | | 0x10 | BLS12_G2MSM | G2 multi-scalar multiplication | | 0x11 | BLS12_PAIRING | Pairing check | | 0x12 | BLS12_MAP_FP_TO_G1 | Hash to G1 | | 0x13 | BLS12_MAP_FP2_TO_G2 | Hash to G2 |

Notes: - Required for efficient BLS signature verification in EVM - Critical for Ethereum consensus layer integration - Activated as part of Pectra/Fusaka (May 7, 2025)


Prague/Pectra (Fusaka) EIPs - Activated May 7, 2025

13. EIP-2935: Serve Historical Block Hashes from State

Priority: ๐ŸŸก Medium
Complexity: Medium
Impact: State storage, BLOCKHASH opcode

Requirements: - System contract at address 0x0aae40965e6800cd9b1f4b05ff21581047e3f91e - Stores last 8192 block hashes in a ring buffer - BLOCKHASH opcode reads from this contract for blocks beyond 256 - Improves historical block hash availability

Implementation Details:

HISTORY_STORAGE_ADDRESS = 0x0aae40965e6800cd9b1f4b05ff21581047e3f91e
HISTORY_SERVE_WINDOW = 8192

Gas Impact: - BLOCKHASH becomes more expensive for historical queries - But provides much longer lookback window

14. EIP-6110: Supply Validator Deposits on Chain

Priority: ๐Ÿ”ด Critical (Execution-Consensus Integration)
Complexity: High
Impact: Deposit contract, block structure

Requirements: - Process deposit events from deposit contract in execution layer - Add deposits field to execution payload - Remove reliance on consensus layer for deposit processing - Maximum 8192 deposits per block

Deposit Contract: 0x00000000219ab540356cBB839Cbe05303d7705Fa

Implementation Notes: - Deposits are extracted from logs in execution layer - Improves execution-consensus layer separation - Part of Engine API v4

15. EIP-7002: Execution Layer Triggerable Exits

Priority: ๐ŸŸ  High
Complexity: Medium
Impact: Validator exits, block structure

Requirements: - System contract at 0x00431D736Ab7fA9C4d1B0e70c1E2B8a0e79e3C4e - Allows validators to trigger exits from execution layer - Add exits field to execution payload - Maximum 16 exits per block

Exit Request Structure:

case class ExitRequest(
  validatorPubkey: ByteString,  // 48 bytes
  amount: BigInt                 // uint64 value (represented as BigInt in Scala)
)

16. EIP-7251: Increase MAX_EFFECTIVE_BALANCE

Priority: ๐ŸŸก Medium (Consensus Layer)
Complexity: Medium
Impact: Validator economics, consolidations

Changes: - Increases MAX_EFFECTIVE_BALANCE from 32 ETH to 2048 ETH - Allows validator consolidation - Reduces beacon chain state size - Execution layer needs to support consolidation requests

Impact on Execution Layer: - Must support validator consolidation requests - Part of general request framework (EIP-7685)

17. EIP-7549: Move Committee Index Outside Attestation

Priority: ๐ŸŸข Lower (Consensus Layer)
Complexity: Low
Impact: Attestation structure

Notes: - Primarily consensus layer change - Improves attestation efficiency - No direct execution layer impact - Minimal execution client changes required

18. EIP-7685: General Purpose Execution Layer Requests

Priority: ๐Ÿ”ด Critical
Complexity: Medium
Impact: Block structure, Engine API

Requirements: - Framework for execution layer to consensus layer requests - Add requests field to execution payload - Support multiple request types (deposits, exits, consolidations)

Request Types: | Type ID | Name | EIP | |---------|------|-----| | 0x00 | Deposit | EIP-6110 | | 0x01 | Exit | EIP-7002 | | 0x02 | Consolidation | EIP-7251 |

Implementation:

case class ExecutionPayload(
  // ... existing fields ...
  requests: Seq[Request]  // New field
)

sealed trait Request {
  def requestType: Byte
}

19. EIP-7702: Set EOA Account Code for One Transaction

Priority: ๐Ÿ”ด Critical
Complexity: High
Impact: Transaction types, account abstraction

Requirements: - Implement Type 4 (EIP-7702) transactions - Add authorization_list to transactions - Temporarily set code for EOA accounts during transaction - Revert code after transaction completes

Authorization Structure:

case class Authorization(
  chainId: BigInt,
  address: Address,
  nonce: BigInt,
  yParity: Byte,
  r: BigInt,
  s: BigInt
)

Transaction Format: - Type: 0x04 - Fields: chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s

Use Cases: - Account abstraction without protocol changes - Batched transactions from EOAs - Sponsored transactions - Gas payment by contract

Implementation Challenges: - Temporary code storage - Nonce management - Gas accounting - Security considerations (reentrancy, etc.)

20. EIP-7594: PeerDAS (Peer Data Availability Sampling)

Priority: ๐ŸŸข Lower (Consensus Layer)
Complexity: Very High
Impact: Data availability, networking

Notes: - Primarily consensus layer feature - Improves data availability sampling - Reduces bandwidth requirements for validators - Minimal direct execution client impact - Enables more efficient blob handling


Opcode Implementation Status

Complete Implementation (142 opcodes)

Arithmetic Operations (0x00-0x0B)

Opcode Name Gas Status
0x00 STOP 0 โœ…
0x01 ADD 3 โœ…
0x02 MUL 5 โœ…
0x03 SUB 3 โœ…
0x04 DIV 5 โœ…
0x05 SDIV 5 โœ…
0x06 MOD 5 โœ…
0x07 SMOD 5 โœ…
0x08 ADDMOD 8 โœ…
0x09 MULMOD 8 โœ…
0x0A EXP 10* โœ…
0x0B SIGNEXTEND 5 โœ…

Comparison & Bitwise Logic (0x10-0x1D)

Opcode Name Gas Status
0x10 LT 3 โœ…
0x11 GT 3 โœ…
0x12 SLT 3 โœ…
0x13 SGT 3 โœ…
0x14 EQ 3 โœ…
0x15 ISZERO 3 โœ…
0x16 AND 3 โœ…
0x17 OR 3 โœ…
0x18 XOR 3 โœ…
0x19 NOT 3 โœ…
0x1A BYTE 3 โœ…
0x1B SHL 3 โœ…
0x1C SHR 3 โœ…
0x1D SAR 3 โœ…

SHA3 (0x20)

Opcode Name Gas Status
0x20 SHA3 30* โœ…

Environmental Information (0x30-0x3F)

Opcode Name Gas Status
0x30 ADDRESS 2 โœ…
0x31 BALANCE 100-2600* โœ…
0x32 ORIGIN 2 โœ…
0x33 CALLER 2 โœ…
0x34 CALLVALUE 2 โœ…
0x35 CALLDATALOAD 3 โœ…
0x36 CALLDATASIZE 2 โœ…
0x37 CALLDATACOPY 3* โœ…
0x38 CODESIZE 2 โœ…
0x39 CODECOPY 3* โœ…
0x3A GASPRICE 2 โœ…
0x3B EXTCODESIZE 100-2600* โœ…
0x3C EXTCODECOPY 100-2600* โœ…
0x3D RETURNDATASIZE 2 โœ…
0x3E RETURNDATACOPY 3* โœ…
0x3F EXTCODEHASH 100-2600* โœ…

Block Information (0x40-0x48)

Opcode Name Gas Status Notes
0x40 BLOCKHASH 20 โœ…
0x41 COINBASE 2 โœ…
0x42 TIMESTAMP 2 โœ…
0x43 NUMBER 2 โœ…
0x44 DIFFICULTY/PREVRANDAO 2 โš ๏ธ Returns difficulty, not prevRandao
0x45 GASLIMIT 2 โœ…
0x46 CHAINID 2 โœ…
0x47 SELFBALANCE 5 โœ…
0x48 BASEFEE 2 โŒ EIP-1559 required

Stack, Memory, Storage, Flow Operations (0x50-0x5F)

Opcode Name Gas Status
0x50 POP 2 โœ…
0x51 MLOAD 3* โœ…
0x52 MSTORE 3* โœ…
0x53 MSTORE8 3* โœ…
0x54 SLOAD 100-2100* โœ…
0x55 SSTORE 100-20000* โœ…
0x56 JUMP 8 โœ…
0x57 JUMPI 10 โœ…
0x58 PC 2 โœ…
0x59 MSIZE 2 โœ…
0x5A GAS 2 โœ…
0x5B JUMPDEST 1 โœ…
0x5C TLOAD 100 โŒ
0x5D TSTORE 100 โŒ
0x5E MCOPY 3* โŒ
0x5F PUSH0 2 โœ…

Push Operations (0x60-0x7F)

All PUSH1-PUSH32 opcodes: โœ… Implemented

Dup Operations (0x80-0x8F)

All DUP1-DUP16 opcodes: โœ… Implemented

Swap Operations (0x90-0x9F)

All SWAP1-SWAP16 opcodes: โœ… Implemented

Log Operations (0xA0-0xA4)

All LOG0-LOG4 opcodes: โœ… Implemented

System Operations (0xF0-0xFF)

Opcode Name Gas Status
0xF0 CREATE 32000* โœ…
0xF1 CALL 100-2600* โœ…
0xF2 CALLCODE 100-2600* โœ…
0xF3 RETURN 0* โœ…
0xF4 DELEGATECALL 100-2600* โœ…
0xF5 CREATE2 32000* โœ…
0xFA STATICCALL 100-2600* โœ…
0xFD REVERT 0* โœ…
0xFE INVALID all gas โœ…
0xFF SELFDESTRUCT 5000* โš ๏ธ

Missing Opcodes Summary

Opcode Name EIP Priority
0x48 BASEFEE EIP-3198 ๐Ÿ”ด Critical
0x4A BLOBBASEFEE EIP-7516 ๐ŸŸก Medium
0x5C TLOAD EIP-1153 ๐ŸŸ  High
0x5D TSTORE EIP-1153 ๐ŸŸ  High
0x5E MCOPY EIP-5656 ๐ŸŸ  High

Precompiled Contracts

Implemented Precompiles

Address Name EIP Status
0x01 ECRECOVER Frontier โœ…
0x02 SHA256 Frontier โœ…
0x03 RIPEMD160 Frontier โœ…
0x04 IDENTITY Frontier โœ…
0x05 MODEXP EIP-198/2565 โœ…
0x06 BN128ADD EIP-196 โœ…
0x07 BN128MUL EIP-196 โœ…
0x08 BN128PAIRING EIP-197 โœ…
0x09 BLAKE2F EIP-152 โœ…

Missing Precompiles

Address Name EIP Priority
0x0A KZG_POINT_EVALUATION EIP-4844 ๐ŸŸก Medium
0x0B BLS12_G1ADD EIP-2537 ๐ŸŸ  High (Pectra)
0x0C BLS12_G1MUL EIP-2537 ๐ŸŸ  High (Pectra)
0x0D BLS12_G1MSM EIP-2537 ๐ŸŸ  High (Pectra)
0x0E BLS12_G2ADD EIP-2537 ๐ŸŸ  High (Pectra)
0x0F BLS12_G2MUL EIP-2537 ๐ŸŸ  High (Pectra)
0x10 BLS12_G2MSM EIP-2537 ๐ŸŸ  High (Pectra)
0x11 BLS12_PAIRING EIP-2537 ๐ŸŸ  High (Pectra)
0x12 BLS12_MAP_FP_TO_G1 EIP-2537 ๐ŸŸ  High (Pectra)
0x13 BLS12_MAP_FP2_TO_G2 EIP-2537 ๐ŸŸ  High (Pectra)

Transaction Types

Ethereum has evolved from a single transaction format to multiple typed transactions using the envelope format (EIP-2718). Fukuii currently only supports Type 0 (legacy) transactions.

Type 0: Legacy Transactions (Pre-EIP-2718)

Status: โœ… Implemented
EIP: N/A (Original format)

Structure:

rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s])

Fields: - nonce: Transaction counter for sender - gasPrice: Gas price in wei - gasLimit: Maximum gas allowed - to: Recipient address (or empty for contract creation) - value: ETH amount to transfer - data: Contract data or initialization code - v, r, s: ECDSA signature components

Limitations: - Fixed gas price (no priority fee) - No access lists - No chain ID protection in pre-EIP-155 transactions

Type 1: Access List Transactions (EIP-2930)

Status: โš ๏ธ Partial (Berlin)
EIP: EIP-2930

Structure:

0x01 || rlp([chainId, nonce, gasPrice, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])

New Fields: - accessList: List of addresses and storage keys that will be accessed - Transaction type prefix: 0x01

Benefits: - Reduced gas costs for pre-declared storage access - Mitigates effects of EIP-2929 (cold/warm access costs)

Type 2: EIP-1559 Transactions

Status: โŒ Missing (London)
EIP: EIP-1559

Structure:

0x02 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])

New Fields: - maxPriorityFeePerGas: Maximum priority fee (tip) to miner - maxFeePerGas: Maximum total fee willing to pay - Replaces gasPrice with fee market mechanism

Gas Calculation:

effectiveGasPrice = min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas)
priorityFee = effectiveGasPrice - baseFeePerGas

Benefits: - Predictable base fees - Better UX (no more gas price guessing) - ETH burn mechanism (base fee is burned)

Type 3: Blob Transactions (EIP-4844)

Status: โŒ Missing (Cancun/Dencun)
EIP: EIP-4844

Structure:

0x03 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, maxFeePerBlobGas, blobVersionedHashes, signatureYParity, signatureR, signatureS])

New Fields: - maxFeePerBlobGas: Maximum fee per blob gas unit - blobVersionedHashes: Commitments to blob data (not included in block)

Blob Data: - Blobs are ~128KB each (4096 field elements ร— 32 bytes) - Not stored in execution layer state - Designed for rollup data availability - Separate gas market from regular transactions

Benefits: - Dramatically cheaper data availability for rollups - Separate blob gas pricing (independent of regular gas) - Temporary storage (blobs pruned after ~18 days)

Type 4: Account Abstraction Transactions (EIP-7702)

Status: โŒ Missing (Pectra/Fusaka)
EIP: EIP-7702

Structure:

0x04 || rlp([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, authorizationList, signatureYParity, signatureR, signatureS])

New Field: - authorizationList: List of authorizations to temporarily set code for EOAs

Authorization Structure:

case class Authorization(
  chainId: BigInt,
  address: Address,      // Contract address to delegate to
  nonce: BigInt,         // Account nonce for replay protection
  yParity: Byte,
  r: BigInt,
  s: BigInt
)

Mechanism: 1. EOA signs authorization to delegate to a contract 2. During transaction execution, EOA temporarily gets code from contract 3. Code is removed after transaction completes 4. Enables smart contract logic for EOAs

Benefits: - Account abstraction for EOAs without protocol changes - Batched transactions from EOAs - Gas sponsorship (someone else pays gas) - Custom signature schemes - Social recovery - Transaction batching

Security Considerations: - Authorization nonce prevents replay attacks - Chain ID prevents cross-chain replay - Temporary delegation limits attack surface - Must validate all authorizations before execution

Transaction Type Comparison

Feature Type 0 Type 1 Type 2 Type 3 Type 4
Gas Pricing Fixed Fixed Dynamic (EIP-1559) Dynamic + Blob Dynamic + Blob
Access Lists โŒ โœ… โœ… โœ… โœ…
Base Fee โŒ โŒ โœ… โœ… โœ…
Blob Data โŒ โŒ โŒ โœ… โŒ
EOA Code Delegation โŒ โŒ โŒ โŒ โœ…
Chain ID Optional โœ… โœ… โœ… โœ…
Use Case Legacy Gas optimization Modern txs Rollup data Account abstraction

Implementation Status in Fukuii

Type Status Priority Notes
Type 0 โœ… Implemented N/A Fully supported
Type 1 โš ๏ธ Partial ๐ŸŸ  High Access list parsing incomplete
Type 2 โŒ Missing ๐Ÿ”ด Critical Required for London compatibility
Type 3 โŒ Missing ๐ŸŸก Medium Required for Cancun compatibility
Type 4 โŒ Missing ๐Ÿ”ด Critical Required for Pectra compatibility

Consensus and Protocol Differences

Ethereum Classic vs Ethereum Mainnet

Feature Ethereum Classic Ethereum Mainnet
Consensus Proof of Work (Ethash) Proof of Stake
Block Time ~13 seconds 12 seconds (slots)
Block Reward 2.56 ETC (w/ reduction) N/A (tips only)
Difficulty Bomb Removed N/A (post-Merge)
DAO Fork Not applied Applied
EIP-1559 Not implemented Implemented
Beacon Chain Not applicable Required
Withdrawals Not applicable EIP-4895
Blob Transactions Not applicable EIP-4844

Key Protocol Differences

  1. Transaction Types:
  2. ETC: Type 0 (legacy) only
  3. ETH: Types 0, 1, 2, 3, 4 (legacy, access list, EIP-1559, blob, EIP-7702)

  4. Block Headers:

  5. ETC: Classic header structure with PoW fields
  6. ETH: Extended header with baseFeePerGas, withdrawalsRoot, blobGasUsed, excessBlobGas, parentBeaconBlockRoot

  7. Execution Payload (Post-Pectra):

  8. Additional field: requests (EIP-7685)
  9. Includes deposits, exits, and consolidation requests

  10. Chain ID:

  11. ETC: 61 (mainnet), 63 (Mordor)
  12. ETH: 1 (mainnet)

  13. Network Protocol:

  14. ETC: eth/63-68, snap/1
  15. ETH: eth/66-68, snap/1 (with extended message types)

  16. Validator Operations (Pectra):

  17. ETC: N/A (PoW)
  18. ETH: On-chain deposits (EIP-6110), execution-triggered exits (EIP-7002), validator consolidation (EIP-7251)

Testing and Validation

Ethereum Test Suite Compatibility

Fukuii includes the ethereum/tests submodule for compliance testing:

# Run EVM tests
sbt "testOnly *VMSpec"
sbt "Evm / test"

# Run blockchain tests
sbt "IntegrationTest / test"

Test Categories

Category Status Notes
General State Tests โœ… Passing Core EVM tests
Blockchain Tests โœ… Passing Pre-Merge blocks
VM Tests โœ… Passing Opcode tests
RLP Tests โœ… Passing Encoding tests
Transaction Tests โš ๏ธ Partial Type 0 only
Beacon Chain Tests โŒ Missing Post-Merge
  1. EVM Compliance:

    # Run ethereum/tests GeneralStateTests
    sbt "testOnly *GeneralStateTest*"
    

  2. Opcode Correctness:

    # Run VM-specific tests
    sbt "testOnly *OpCode*"
    

  3. Precompile Verification:

    # Run precompiled contract tests
    sbt "testOnly *PrecompiledContracts*"
    

  4. Fork Transition Testing:

    # Test fork activation
    sbt "testOnly *Fork*"
    


Implementation Roadmap

Phase 1: EIP-1559 Support (Estimated: 4-6 weeks)

  1. Week 1-2: Transaction type infrastructure
  2. Implement typed transaction envelope (EIP-2718)
  3. Add Type 1 (EIP-2930) access list transactions
  4. Add Type 2 (EIP-1559) transactions

  5. Week 3-4: Block header changes

  6. Add baseFeePerGas to block header
  7. Implement base fee calculation algorithm
  8. Update block validation

  9. Week 5-6: EVM changes

  10. Implement BASEFEE opcode (EIP-3198)
  11. Update gas price calculations
  12. Integration testing

Phase 2: Missing Cancun EIPs (Estimated: 3-4 weeks)

  1. Week 1: Transient storage (EIP-1153)
  2. Implement TLOAD/TSTORE opcodes
  3. Add transient storage tracking per transaction

  4. Week 2: MCOPY instruction (EIP-5656)

  5. Implement memory copy opcode
  6. Gas cost calculations

  7. Week 3: SELFDESTRUCT changes (EIP-6780)

  8. Modify SELFDESTRUCT behavior
  9. Track contract creation in same transaction

  10. Week 4: Testing and validation

Phase 3: Post-Merge Infrastructure (Estimated: 8-12 weeks)

  1. Weeks 1-4: Engine API
  2. Implement JSON-RPC Engine API
  3. Payload building and validation
  4. Fork choice rule updates

  5. Weeks 5-8: Beacon chain integration

  6. PREVRANDAO support (EIP-4399)
  7. Withdrawals processing (EIP-4895)
  8. Parent beacon block root (EIP-4788)

  9. Weeks 9-12: Testing and validation

  10. Hive test suite integration
  11. Devnet participation
  12. Full sync testing

Phase 4: Proto-Danksharding (Estimated: 6-8 weeks)

  1. Weeks 1-3: Blob transactions
  2. Type 3 transaction support
  3. KZG commitment handling
  4. Point evaluation precompile

  5. Weeks 4-6: Block changes

  6. Blob gas accounting
  7. Excess blob gas tracking
  8. BLOBBASEFEE opcode

  9. Weeks 7-8: Testing and validation

Phase 5: Pectra/Fusaka Support (Estimated: 10-14 weeks)

  1. Weeks 1-3: BLS12-381 Precompiles (EIP-2537)
  2. Implement 9 BLS12-381 precompiled contracts (0x0B - 0x13)
  3. G1/G2 point operations
  4. Pairing and mapping functions
  5. Extensive testing with official test vectors

  6. Weeks 4-5: Historical Block Hashes (EIP-2935)

  7. Implement system contract for block hash storage
  8. Update BLOCKHASH opcode logic
  9. Ring buffer implementation (8192 blocks)

  10. Weeks 6-8: Execution Layer Requests Framework (EIP-7685)

  11. Add requests field to execution payload
  12. Implement request encoding/decoding
  13. Update Engine API to v4
  14. Request validation and processing

  15. Weeks 9-10: On-chain Deposits (EIP-6110)

  16. Extract deposits from execution layer logs
  17. Add deposits field to payload
  18. Deposit validation (max 8192 per block)
  19. Integration with deposit contract

  20. Weeks 11-12: Execution-Triggered Exits (EIP-7002)

  21. Implement exit request system contract
  22. Add exits field to payload
  23. Exit request validation (max 16 per block)
  24. Public key and amount processing

  25. Weeks 13-14: EIP-7702 Transactions (Type 4)

  26. Authorization list parsing and validation
  27. Temporary code delegation mechanism
  28. Nonce verification for authorizations
  29. Gas accounting for delegated code
  30. Comprehensive security testing

Note on EIP-7251 and EIP-7549: These are primarily consensus layer changes with minimal execution layer impact beyond supporting consolidation requests in the general request framework.

Note on EIP-7594 (PeerDAS): This is a consensus layer networking change with no direct execution client implementation required.


Conclusion

Fukuii provides a solid foundation for EVM compatibility up to the Berlin/Istanbul level. To achieve full Ethereum mainnet compatibility including the recently activated Pectra/Fusaka fork (May 7, 2025), the following priorities should be addressed:

  1. Critical: EIP-1559 and related London fork changes
  2. Critical: Post-Merge infrastructure (Engine API, PoS)
  3. Critical: Execution layer requests framework (EIP-7685)
  4. Critical: Type 4 transactions and account abstraction (EIP-7702)
  5. High: Missing Cancun opcodes (TLOAD, TSTORE, MCOPY)
  6. High: BLS12-381 precompiles (EIP-2537) - now part of Pectra
  7. High: On-chain deposits and execution-triggered exits (EIP-6110, EIP-7002)
  8. Medium: Proto-danksharding (EIP-4844)
  9. Medium: Historical block hashes (EIP-2935)

The architecture of Fukuii (based on the well-tested Mantis codebase) provides a clean separation between EVM execution and consensus, which should facilitate these additions. The Pectra/Fusaka fork represents a significant evolution of the Ethereum protocol, introducing important features for account abstraction, validator management, and execution-consensus layer integration.

Key Takeaways for Pectra/Fusaka

Execution Layer Changes: - EIP-7702 brings delegated code execution to EOAs, a major step toward account abstraction - EIP-2537 adds 9 new precompiles for BLS12-381 operations - EIP-2935 improves historical block hash availability - EIP-7685 establishes a general framework for execution-to-consensus requests

Execution-Consensus Integration: - EIP-6110 moves deposit processing to execution layer - EIP-7002 enables execution layer to trigger validator exits - EIP-7251 supports validator consolidation (minimal execution layer impact)

Development Impact: The Pectra fork significantly increases the complexity of Ethereum execution clients, particularly around: 1. Transaction type handling (Type 4) 2. System contract interactions (multiple new system contracts) 3. Engine API evolution (v4 with request support) 4. Cryptographic operations (BLS12-381)

Estimated Total Implementation Time: 30-44 weeks across 5 major phases, assuming sequential development. Parallel development could reduce this timeline significantly.


References

Official Ethereum Resources

Ethereum Classic Resources

Pectra/Fusaka Fork Resources

Engine API and Consensus

Testing and Validation


Document History

  • Initial Version: Pre-Pectra analysis (focusing on London through Cancun)
  • Current Version (December 2025): Updated for Pectra/Fusaka fork activation
  • Pectra/Fusaka fork was activated on May 7, 2025
  • Added 9 new Pectra/Fusaka EIPs with detailed analysis
  • Added comprehensive transaction types section (Types 0-4)
  • Updated fork history timeline with Pectra activation
  • Revised priority classifications (EIP-2537 upgraded to High)
  • Added 10 new precompile addresses (1 from EIP-4844, 9 from EIP-2537)
  • Expanded implementation roadmap with Phase 5 (Pectra support)
  • Enhanced conclusion with Pectra-specific development impact analysis
  • Added comprehensive references for Pectra-related EIPs