Hive 是端对端测试框架,能够通过 模拟多种场景来确保不同客户端在统一网络下的互操作性。
以太坊协议的整体架构
- 执行层 (Execution Layer, EL)
-
执行层是以太坊的“大脑”,负责 处理所有的交易、智能合约逻辑和状态管理。
-
以太坊虚拟机 (EVM) 是执行层的心脏,负责运行智能合约代码。
-
交易解剖 (Transaction Anatomy):定义了交易的结构和属性。
-
数据结构与序列化:执行层使用 RLP (Recursive Length Prefix) 进行数据序列化。
-
网络协议 (DevP2P):负责执行层节点之间的通信。
-
客户端实例:如 Besu 和 Reth,它们是执行层协议的具体软件实现。
- 共识层 (Consensus Layer, CL)
-
共识层负责确保所有节点对网络状态达成一致,即负责权益证明( Proof of Stake)机制。
-
信标链 (Beacon Chain):共识层的核心,处理验证者管理和共识逻辑。
-
序列化与默克尔化 (SSZ & Merkleization):共识层使用 SSZ (Simple Serialize) 格式,这与执行层的 RLP 不同,更便于进行默克尔证明。
-
弱主观性 (Weak Subjectivity):这是权益证明机制中的一个重要安全概念。
- 层级间的协作: Engine API
执行层和共识层并不是孤立的,它们通过 Engine API 进行通信。共识层告诉执行层何时生产区块或验证区块,而执行层将处理结果反馈给共识层。
- 底层密码学支撑
整个架构建立在多种密码学技术之上,包括:
-
哈希函数如 Keccak256 。
-
数字签名:执行层使用 ECDSA,而共识层为了支持签名聚合使用了 BLS 签名。
-
承诺机制:如 KZG 承诺,这在以太坊的扩容方案(如 EIP-4844 )中至关重要。
- 架构的测试与验证 (Hive)
由于以太坊有多个不同的客户端(如执行层的 Besu 和共识层的各种客户端),确保它们能够完美兼容至关重要。
Hive 是一个端到端的测试套件,它通过模拟各种场景在一个网络中启动多个客户端。
它的作用是测试所有客户端在相同参数下是否会出现分歧,特别是在处理网络升级和硬分叉时, Hive 扮演着关键的测试角色。
Keccak256
#Keccak256 是以太坊区块链中核心的加密哈希函数,它在确保以太坊网络的数据完整性、安全性和高效检索方面发挥着至关重要的作用。
- 设计原理:海绵结构 (Sponge Construction)
Keccak256 以其独特的海绵结构脱颖而出,这种结构允许它“吸收”任意长度的输入数据,并随后“挤出”所需长度的哈希值。其运行过程分为两个阶段:
-
吸收阶段:输入数据被分成若干块,并与海绵的状态(称为比特率 r)进行异或 (XOR) 运算。在每次异或操作后,都会应用一个置换函数对整个状态进行处理,以确保输入与状态的彻底混合。
-
挤出阶段:一旦数据吸收完成,就会从状态的比特率部分生成输出哈希。这一阶段可以根据需求产生任意长度的输出。
EVM 实现
在 EVM 的堆栈式架构中,虽然没有直接命名为 KECCAK256 的操作码 (Opcode),但存在一个 SHA3 指令。这个 SHA3 指令实际上就是用来对堆栈中的输入数据进行加密输出一个 Keccak256 哈希值(这个值与官方标准的 SHA3-256 并不完全相同)。
协议中的具体应用场景
-
区块头字段:区块头中的多个关键字段,如 parentHash(父块哈希) 和 stateRoot(状态根),都使用 256 位的 Keccak 哈希。
-
默克尔帕特里夏树:以太坊使用这种树结构来编码其状态。树中的每个节点都是通过其内容的 Keccak256 哈希来标识的,这构成了区块头中 stateRoot 的基础。
-
账户存储编码:它用于编码账户的存储内容,将整数键的 Keccak256 哈希映射到经 RLP 编码的整数值。