Tl;
- Eels ist eine Implementierung der Ausführungsschichtreferenz in Python.
- Es ist auf dem neuesten Stand mit Mainnet.
- Es füllt Tests und besteht vorhandenen.
- Es gibt ein Beispiel für einen EIP, der in AELs unten implementiert ist.
Einführung
Nach mehr als einem Jahr in der Entwicklung freuen wir uns, die öffentlich die öffentliche Einführung vorzustellen Ethereum -Ausführungsschichtspezifikation (liebevoll als Eels bekannt.) Eels ist eine Python -Referenz -Implementierung der Kernkomponenten eines Clients von Ethereum Execution, der sich auf Lesbarkeit und Klarheit konzentriert. Als spiritueller Nachfolger der Gelbes Papier Das ist mehr Programmierer freundlicher und aktueller. Nach dem Merge-Gabeln können Aale staatliche Tests füllen und durchführen, dem Mainnet folgen.1und ist ein großartiger Ort, um neue EIPs zu prototypisieren.
AELs bieten vollständige Schnappschüsse des Protokolls bei jeder Gabel – einschließlich der kommenden -, um es viel einfacher zu befolgen als EIP (die nur Änderungen vorschlagen) und Produktionskunden (die häufig mehrere Gabeln im selben Codepath mischen).)
Geschichte
Ab 2021 als Projekt des Konsensys Quilt -Teams und der Ethereum Foundation die ETH1.0-Spec (Wie es damals bekannt war) war inspiriert von der bloßen Frustration, die kryptische Notation des gelben Papiers zu entschlüsseln (Abbildung 1) das spezifische Verhalten einer EVM -Anweisung zu verstehen.
Auf dem erfolgreichen Abschluss der erfolgreichen KonsensschichtspezifikationWir haben uns vorgenommen, eine ähnliche ausführbare Spezifikation für die Ausführungsschicht zu erstellen.
Gegenwärtig
Heute ist Eels als konsumiert als Traditionelles Python -Repository und as Darstellungsdokumentation. Es ist immer noch ein bisschen rau an den Rändern und liefert nicht viel in Bezug auf Anmerkungen oder englische Erklärungen für das, was verschiedene Stücke tun, aber diese werden mit der Zeit einhergehen.
Es ist nur Python
Hoffentlich kann ein Side-by-Side-Vergleich des gelben Papiers und des äquivalenten Code von AELs zeigen, warum Eels eine wertvolle Ergänzung dazu ist:

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
Während Abbildung 2 könnte für Akademiker verdaulich sein, Abbildung 3 ist für Programmierer unbestreitbar natürlicher.
Hier ist ein Video Durchlauf des Hinzufügens einer einfachen EVM-Anweisung Wenn das deine Art von Ding ist.
Schreiben von Tests
Es hat sich wiederholt: Aale ist nur normales Python. Es kann wie jede andere Python -Bibliothek getestet werden! Zusätzlich zum gesamten Ethereum/Tests Suite, wir haben auch eine Auswahl von PyTeste Tests.
Mit ein wenig Hilfe von Ausführungs-Spec-TestsAlle Tests, die für Aale geschrieben wurden, können auch auf Produktionskunden angewendet werden!2
Unterschiede zeigen
Snapshots bei jeder Gabel zu haben, ist großartig für einen intelligenten Vertragsentwickler, der eintritt, um die Einzelheiten zu sehen, wie ein EVM -Anweisungen funktioniert, aber für Kundenentwickler selbst nicht sehr hilfreich ist. Für sie können Aale die Unterschiede zwischen Gabeln anzeigen:

Ein Beispiel EIP
EIP-6780 ist der erste EIP, der zu bekommen ist eine EEL -Implementierung vom Autor bereitgestellt, Guillaume Ballett! Schauen wir uns an.

Erstens stellen wir eine vor erstellt_contracts Variable zum EVM mit Umfang auf Transaktionsebene:
@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]
Zweitens stellen wir fest, welche Verträge in jeder Transaktion erstellt wurden:
+ evm.env.created_contracts.add(contract_address)
Schließlich ändern wir Self -truct So funktioniert es nur für Verträge, erstellt_contracts:
- # 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) +
Zukunft
Wir möchten, dass AELs die Standardmethode werden, um Kern -EIPs anzugeben, der erste Platz für EIP -Autoren, um ihre Vorschläge zu prototypisieren, und die bestmögliche Referenz für die Funktionsweise von Ethereum.
Wenn Sie Ihren EIP beizutragen oder Prototypen zu leisten oder zu prototypisieren, besuchen Sie uns auf dem #spezifisch Kanal oder ein Problem von unserem ergreifen Repository.

