Ethereum

Ethereum execution layer specification | Ethereum Foundation Blog

tl;dr

  • EELS is a reference implementation of Python’s execution layer.
  • It is up to date on mainnet.
  • Fill out tests and pass existing tests.
  • Below is an example of an EIP implemented in EELS.

introduction

After more than a year of development, we are excited to introduce it publicly. Ethereum Execution Layer Specification (Also known as EELS) EELS is a Python reference implementation of the core components of an Ethereum execution client with a focus on readability and clarity. Intended as a spiritual successor yellow paper Fork after merge makes it programmer friendly and up to date. EELS can populate and run health tests and follow mainnet.OneIt’s a great place to prototype new EIPs.

EELS provides a complete snapshot of the protocol at each fork, including future forks, making it easier to follow than ever before. EIB (only suggest changes) and production clients (often mixing multiple forks into the same code path)

history

Starting in 2021, it is a project of ConsenSys’ Quilt team and the Ethereum Foundation. eth1.0-spec (as it was known at the time) was inspired by the sheer frustration of having to decipher the cryptic notation of the Yellow Paper.Figure 1) Understand the specific behavior of EVM instructions.

Official 2, 3, and 4 screenshots from Yellow Paper
Figure 1. Mysterious runes explain the basis of the blockchain paradigm

Based on successful results Consensus Layer SpecificationWe set out to create a similar executable specification for the execution layer.

Present

Today, EELS is available as a consumable. Existing Python repository and Rendered Document. It’s still a bit rough around the edges and doesn’t offer much in the way of annotations or English descriptions of what the various parts do, but these will come with time.

It’s just Python

We hope that a side-by-side comparison of the equivalent code in the Yellow Paper and EELS will help you see why EELS is a valuable complement to it.

LT (less than) opcode

Figure 2. Less than (L.T.) EVM guidelines from the Yellow Paper

def less_than(evm: Evm) -> None:
    # STACK
    left = pop(evm.stack)
    right = pop(evm.stack)

    # GAS
    charge_gas(evm, GAS_VERY_LOW)

    # OPERATION
    result = U256(left < right)

    push(evm.stack, result)

    # PROGRAM COUNTER
    evm.pc += 1

Figure 3. Less than (L.T.) EVM command of EELS

while Figure 2 Scholars may be able to digest, Figure 3 It’s undoubtedly more natural for programmers.

here is the video Additional practice of simple EVM commands If that’s your kind of thing.

Write a test

It bears repeating: EELS is just plain Python. You can test it like any other Python library! In addition to all Ethereum/Test The suite also has a variety of products. Pie test test.

with a little help from Test execution specificationAll tests written for EELS can be applied to production clients as well!2

Show differences

Having a snapshot at each fork is great for smart contract developers to visit to learn more about how EVM instructions work, but it’s not very helpful for the client developers themselves. For this purpose, EELS can show differences between forks.

Screenshot showing the apply_fork function differences between Homestead and DAO forks.

Figure 4. One difference between Farmhouse and DAO fork

EIP example

EIP-6780 This is the first EIP. EELS Implementation Provided by the author, Guillaume Ballet! Let’s take a look.

Screenshot of the specifications section of EIP-6780

Figure 5. Specification section of EIP-6768

First, we create_contract Variables for EVM with transaction level scope:

 @dataclass
 class Environment:
     caller: Address
     block_hashes: List(Hash32)
     origin: Address
     coinbase: Address
     number: Uint
     base_fee_per_gas: Uint
     gas_limit: Uint
     gas_price: Uint
     time: U256
     prev_randao: Bytes32
     state: State
     chain_id: U64
+    created_contracts: Set(Address)

Second, we check which contracts were created in each transaction.

+    evm.env.created_contracts.add(contract_address)

I will edit it one last time. self-destruct It therefore only applies to the contracts set out below. create_contract:

-    # register account for deletion
-    evm.accounts_to_delete.add(originator)
-
+    # Only continue if the contract has been created in the same tx
+    if originator in evm.env.created_contracts:
+
+        # register account for deletion
+        evm.accounts_to_delete.add(originator)
+

future

We want EELS to become the default way to specify core EIPs, the first place EIP authors go to prototype proposals, and the best possible reference for how Ethereum works.

If you are interested in contributing to or prototyping the EIP, please join us at: #Specification Please join our channel or share our issues. Storage.

Related Articles

Back to top button