Execution layer cross validation
Resilience without swapping clients
24 August 2024
ETHTokyo
Péter Szilágyi
Go Ethereum Lead
 
      Péter Szilágyi
Go Ethereum Lead
 
       
Consensus mechanisms aim for two properties:
 
Reality has another annoying property... partitioning
 
Ethereum must stay alive ⇒ network needs self-heal
 
Consensus faults can be much more interesting:
 
Famous chart I grew to hate... 🫠
 
Run multiple clients vs. verify with multiple clients?
 
Observation: a block only touches ~4.5MB worth of state. What if we gut out clients? 🤔
 
EVM execution need a variety of data... we need verifiability:
 
witness = [headers, codes, state]    
    
headers = [header₁, header₂, ...] // Descending list of headers  - Enforces parent linking
codes   = [binary₁, binary₂, ...] // Unordered soup of bytecodes - Enforces by-hash access
state   = [binary₁, binary₂, ...] // Unordered soup if trienodes - Enforces MPT structure 
Relatively straightforward with a few gotchas:
CALL* and EXTCODE* opcodesBLOCKHASH opcode needs all headers from current to the refed oneSLOAD needs prefetching, siblings postfetching 
 
Verify an EVM execution via another implementation
 
Must run production EVM
 
      
       
Engine API seems the tightest
 
Proposed API usage:
 
Go Ethereum Lead