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.
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 explanations 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 from the Yellow Paper and EELS will help you see why EELS is a valuable complement to it.
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 of 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.
EIP example
EIP-6780 This is the first EIP. EELS Implementation Provided by the author, Guillaume Ballet! Let’s take a look.
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. blow oneself up 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.