太长了;博士
- EELS 是 Python 中的执行层参考实现。
- 它与主网保持同步。
- 它完成了测试并通过了现有的测试。
- 下面是在 EELS 中实现的 EIP 示例。
介绍
经过一年多的开发,我们很高兴向公众推出 以太坊执行层规范 (亲切地称为 EELS。)EELS 是以太坊执行客户端核心组件的 Python 参考实现,专注于可读性和清晰度。 旨在作为精神继承者 黄皮书 这对程序员更加友好,并且与合并后的分叉保持同步,EELS 可以填充和执行状态测试,遵循主网1,并且是构建新 EIP 原型的好地方。
EELS 提供了每个分叉上协议的完整快照(包括即将到来的分叉),使其更容易遵循 生态工业园区 (仅提出更改)和生产客户端(通常在同一代码路径中混合多个分支。)
历史
从 2021 年开始,作为 ConsenSys Quilt 团队和以太坊基金会的一个项目, eth1.0-规范 (当时众所周知)的灵感来自于必须破译黄皮书的神秘符号所带来的彻底挫败感(图1)以了解 EVM 指令的具体行为。
借鉴成功者 共识层规范,我们着手为执行层创建类似的可执行规范。
展示
如今,EELS 已成为消费品 传统的Python存储库 并作为 渲染文档。 它的边缘仍然有点粗糙,并且没有提供太多注释或英文解释来说明各个部分的作用,但这些都会随着时间的推移而出现。
这只是Python
希望黄皮书和 EELS 中的等效代码的并排比较能够说明为什么 EELS 是对其的有价值的补充:
尽管 图2 可能是学术界容易理解的, 图3 毫无疑问,对于程序员来说更自然。
这是一个视频 添加简单 EVM 指令的演练 如果那是你喜欢的事。
编写测试
值得重复的是:EELS 只是普通的 Python。 它可以像任何其他 Python 库一样进行测试! 除了整个 以太坊/测试 套房,我们还有精选的 py测试 测试。
在一点帮助下 执行规范测试,任何为 EELS 编写的测试也可以应用于生产客户端!2
显示差异
在每个分叉上拥有快照对于智能合约开发人员了解 EVM 指令如何工作的细节来说非常有用,但对于客户端开发人员本身来说并不是很有帮助。 对于他们来说,EELS 可以显示分叉之间的差异:
EIP 示例
EIP-6780 是第一个获得的EIP EELS 实施 由作者提供, 纪尧姆芭蕾舞团! 让我们来看看。
首先,我们介绍一个 创建的合同 具有事务级范围的 EVM 变量:
@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]
其次,我们记录每笔交易中创建了哪些合约:
+ evm.env.created_contracts.add(contract_address)
最后我们修改 自我毁灭 所以它仅适用于中注明的合同 创建的合同:
- # 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) +
未来
我们希望 EELS 成为指定核心 EIP 的默认方式,EIP 作者首先将其提案原型化的地方,以及以太坊如何工作的最佳参考。