py-evm系列译文,有不当之处请联系改正,原文如下:https://py-evm.readthedocs.io/en/latest/guides/architecture.html

py-evm系列译文之2-Guides翻译2:py-evm架构

架构

Py-EVM的主要用例是支持公共以太坊区块链。

但是,它的架构主要集中在可配置性和可扩展性上。在没有对核心库进行任何更改的情况下,应该可以将Py-EVM用于诸如私有链,联盟链甚至具有根本不同的VM语义的链的替代用例。

以下抽象用于表示基于Py-EVM的区块链的完整共识规则。

  • 链:用于与区块链交互的高级API。
  • 虚拟机:Chain中单个fork的高级API,(我理解的fork应该是分叉的意思)
  • VMState:VM的当前状态,事务执行逻辑和状态转换函数。
  • 消息:表示与VM执行相关的事务部分。
  • 计算:VM执行的计算状态和结果。
  • 操作码:单个操作码的逻辑。

术语**链(Chain)**用于封装:

  • 状态转换功能(例如VM操作码和执行逻辑)
  • 协议规则(例如块奖励,头奖励,难度计算,交易执行)
  • 链数据(例如区块交易收据
  • 状态数据(例如余额随机数代码存储
  • 链状态(例如跟踪链头,规范块)

!注意

虽然链用于包装这些概念,但其中许多实际上是在较低层定义的,例如底层虚拟机

所述Chain对象本身主要是一个接口和协调层。大多数ChainAPI仅仅作为适当的传递 VM

链具有一个或多个底层虚拟机或VM。该链包含一个映射,该映射定义哪个VM应对哪些块有效。

公共主网以太坊区块链的链将为每个fork规则集定义一个单独的VM(例如FrontierHomesteadTangerine WhistleSpurious DragonByzantium)。

虚拟机

术语**虚拟机(VM)**用于封装:

  • 单个fork规则集的状态转换函数。
  • 用于事务执行的编排逻辑。
  • 区块的构建和验证。
  • 链数据存储和检索API

VM对象松散地映射了许多Chain API,用于检索链状态,例如块,头,事务和收据。它还负责块级协议逻辑,例如块创建和验证。

VMState

术语VMState用于封装:

  • VM的执行上下文(例如coinbasegas_limit
  • 状态根定义当前VM状态。
  • 一些块验证

消息

术语**消息(Message)**来自于黄皮书。它封装了启动VM最外层执行所需的事务信息。

  • 一些参数像sendervalueto

消息可以被视为事务在VM的内部表示。

计算

术语**计算(Computation)**用于封装:

  • VM执行期间的计算状态(例如内存,堆栈,gas计量)
  • VM执行的计算结果(例如返回数据,gas消耗和退款,执行错误)

该抽象是实现操作码逻辑的接口。

操作码

术语**操作码(opcode)**被用于封装:

  • VM中的单个指令,例如ADDMUL操作码。

操作码以TODO实现。