Hive 测试工具和 Keccak256

Hive 测试工具

Hive 是端对端测试框架,能够通过 模拟多种场景来确保不同客户端在统一网络下的互操作性。

以太坊协议的整体架构

  1. 执行层 (Execution Layer, EL)
  • 执行层是以太坊的“大脑”,负责 处理所有的交易、智能合约逻辑和状态管理

  • 以太坊虚拟机 (EVM) 是执行层的心脏,负责运行智能合约代码。

  • 交易解剖 (Transaction Anatomy):定义了交易的结构和属性。

  • 数据结构与序列化:执行层使用 RLP (Recursive Length Prefix) 进行数据序列化。

  • 网络协议 (DevP2P):负责执行层节点之间的通信。

  • 客户端实例:如 Besu 和 Reth,它们是执行层协议的具体软件实现。

  1. 共识层 (Consensus Layer, CL)
  • 共识层负责确保所有节点对网络状态达成一致,即负责权益证明( Proof of Stake)机制。

  • 信标链 (Beacon Chain):共识层的核心,处理验证者管理和共识逻辑。

  • 序列化与默克尔化 (SSZ & Merkleization):共识层使用 SSZ (Simple Serialize) 格式,这与执行层的 RLP 不同,更便于进行默克尔证明。

  • 弱主观性 (Weak Subjectivity):这是权益证明机制中的一个重要安全概念。

  1. 层级间的协作: Engine API

执行层和共识层并不是孤立的,它们通过 Engine API 进行通信。共识层告诉执行层何时生产区块或验证区块,而执行层将处理结果反馈给共识层。

  1. 底层密码学支撑

整个架构建立在多种密码学技术之上,包括:

  • 哈希函数如 Keccak256 。

  • 数字签名:执行层使用 ECDSA,而共识层为了支持签名聚合使用了 BLS 签名。

  • 承诺机制:如 KZG 承诺,这在以太坊的扩容方案(如 EIP-4844 )中至关重要。

  1. 架构的测试与验证 (Hive)

由于以太坊有多个不同的客户端(如执行层的 Besu 和共识层的各种客户端),确保它们能够完美兼容至关重要。

Hive 是一个端到端的测试套件,它通过模拟各种场景在一个网络中启动多个客户端。

它的作用是测试所有客户端在相同参数下是否会出现分歧,特别是在处理网络升级和硬分叉时, Hive 扮演着关键的测试角色。

Keccak256

#Keccak256 是以太坊区块链中核心的加密哈希函数,它在确保以太坊网络的数据完整性、安全性和高效检索方面发挥着至关重要的作用。

  1. 设计原理:海绵结构 (Sponge Construction)

Keccak256 以其独特的海绵结构脱颖而出,这种结构允许它“吸收”任意长度的输入数据,并随后“挤出”所需长度的哈希值。其运行过程分为两个阶段:

  • 吸收阶段:输入数据被分成若干块,并与海绵的状态(称为比特率 r)进行异或 (XOR) 运算。在每次异或操作后,都会应用一个置换函数对整个状态进行处理,以确保输入与状态的彻底混合。

  • 挤出阶段:一旦数据吸收完成,就会从状态的比特率部分生成输出哈希。这一阶段可以根据需求产生任意长度的输出。

EVM 实现

在 EVM 的堆栈式架构中,虽然没有直接命名为 KECCAK256 的操作码 (Opcode),但存在一个 SHA3 指令。这个 SHA3 指令实际上就是用来对堆栈中的输入数据进行加密输出一个 Keccak256 哈希值(这个值与官方标准的 SHA3-256 并不完全相同)。

协议中的具体应用场景

  • 区块头字段:区块头中的多个关键字段,如 parentHash(父块哈希) 和 stateRoot(状态根),都使用 256 位的 Keccak 哈希。

  • 默克尔帕特里夏树:以太坊使用这种树结构来编码其状态。树中的每个节点都是通过其内容的 Keccak256 哈希来标识的,这构成了区块头中 stateRoot 的基础。

  • 账户存储编码:它用于编码账户的存储内容,将整数键的 Keccak256 哈希映射到经 RLP 编码的整数值。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计