TL;
- 鳗鱼是Python中的执行层参考实现。
- 它是Mainnet的最新信息。
- 它填充测试并通过现有测试。
- 下面有EIP实现的EIP示例。
介绍
经过一年多的发展,我们很高兴公开介绍 以太坊执行层规范 (亲切地称为鳗鱼。)鳗鱼是以太坊执行客户端的核心组成部分的python参考实现,专注于可读性和清晰度。打算作为属灵的继任者 黄纸 这是更友好的程序员,并且与后叉,鳗鱼可以填写和执行状态测试,关注mainnet1,并且是原型新EIP的好地方。
鳗鱼在每个叉子(包括即将到来的叉子)上提供了协议的完整快照,比遵循它要容易得多 EIP (仅提出更改)和生产客户(通常在同一编码器中混合多个叉子。)
历史
从2021年开始,作为Consensys被子团队和以太坊基金会的项目, ETH1.0规格 (当时已知)的灵感来自于不得不破译黄纸的神秘符号的沮丧(图1)了解EVM指令的特定行为。
借鉴成功 共识层规范,我们着手为执行层创建类似的可执行规范。
展示
今天,鳗鱼可以作为一个 传统的Python存储库 和 渲染文档。边缘周围仍然有些粗糙,并且对各种作品所做的事情的注释或英语解释并不多,但是随着时间的流逝。
只是Python
希望对黄纸和鳗鱼的等效代码进行并排比较可以表明为什么鳗鱼是有价值的补充:
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
尽管 图2 学者可能可以消化 图3 对于程序员而言,无可争议的自然。
这是一个视频 添加简单的EVM指令的演练 如果那是你的事情。
写作测试
它重复出现:鳗鱼只是普通的python。它可以像其他任何Python库一样进行测试!除了整个 以太坊/测试 套房,我们也有选择 Pyteste 测试。
在一点点的帮助下 执行规格测试,为鳗鱼编写的任何测试也可以应用于生产客户!2
显示差异
在每个叉子上有快照非常适合弹出的智能合同开发人员,以了解EVM指令的工作方式的细节,但对客户开发人员本身并不是很有帮助。对于他们来说,鳗鱼可以显示叉之间的差异:
一个示例EIP
EIP-6780 是第一个获得的EIP 鳗鱼实现 由作者提供 Guillaume芭蕾舞呢让我们看看。
首先,我们介绍了 create_contracts 具有事务级范围的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)
最后,我们修改 自我结构 因此,它仅适用于指定的合同 create_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) +
未来
我们希望鳗鱼成为指定核心EIP的默认方式,EIP作者的第一名是原型的,以及以太坊工作方式的最佳参考。