文章目录
前言
区块是指一批交易的组合,并且包含链中上一个区块的哈希。 这将区块连接在一起(成为一个链),因为哈希是从区块数据中加密得出的。 这可以防止欺诈,因为以前的任何区块中的任何改变都会使后续所有区块无效,而且所有哈希都会改变,所有运行区块链的人都会注意到。
区块如何工作
为了保存交易历史,区块被严格排序(创建的每个新区块都包含一个其父块的引用),区块内的交易也严格排序。 除极少数情况外,在任何特定时间,网络上的所有参与者都同意区块的确切数目和历史, 并且正在努力将当前的活动交易请求分批到下一个区块。
随机选择的验证者在网络上构建完区块后,该区块将传播到整个网络;所有节点都将该区块添加至其区块链的末尾,然后挑选新的验证者来创建下一个区块。 目前,确切的区块构建过程和提交/共识过程由以太坊的"权益证明"协议规定。
区块包含什么?
以太坊区块由 ** 区块头(Header)和区块体(Body)** 两部分组成,其设计兼顾了交易验证效率和状态管理的灵活性:
- 区块头:共识与状态的核心标识
- 父哈希(Parent Hash):链接前一个区块,形成链式结构,确保数据不可篡改。
- 时间戳(Timestamp):记录区块生成时间,用于验证区块顺序和出块间隔(平均 12 秒)。
- 状态根(State Root):通过Patricia 树(一种高效的 Merkle 树变种)对当前全网账户状态(余额、合约代码、存储变量)进行哈希运算,确保所有节点的状态一致性。
- 交易根(Transactions Root):对区块内所有交易进行哈希,快速验证交易完整性。
- 收据根(Receipt Root):记录每笔交易的执行结果(如 Gas 消耗、事件日志),用于追溯交易影响。
- 难度值(Difficulty):PoW 时期用于调整挖矿难度,PoS 后被验证者随机选择算法替代,但区块头仍保留该字段以兼容历史数据。
- 随机数(Nonce):PoW 时期用于工作量证明,PoS 后被验证者签名取代,证明区块合法性。
- 额外数据(Extra Data):记录区块生成者信息(如验证者公钥)、升级版本号等元数据。
- 区块体:交易与执行结果的载体
- 交易列表(Transactions):包含普通转账、合约调用和合约部署三类交易,每笔交易需经过签名验证和 Gas 费用计算。
- 叔块引用(Uncle Hashes):记录本区块引用的 ** 叔块(Uncle Block)** 哈希值,叔块是因网络延迟未被及时打包的合法区块,通过 GHOST 协议获得部分奖励。
- 收据列表(Receipts):记录每笔交易的执行结果(如成功 / 失败状态、事件日志),用于节点快速同步状态变更。
区块时间
区块时间是指两个区块之间的时间间隔。 在以太坊中,时间划分为每 12 秒一个单位,称为"时隙"。 在每个时隙内,选择一个单独的验证者提议区块。 假设所有验证者都在线且完全正常运行,则每个时隙内都会有一个区块产生,意味着区块时间是 12 秒。 但是,偶尔验证者在被要求提议区块时不在线,导致有时候一些时隙是空的。
区块大小
以太坊的 "区块大小" 并非物理存储的字节数,而是由Gas 上限和Blob 数据容量共同定义的动态指标。Gas 是衡量计算资源消耗的单位,而 Blob(分片数据块)则是专门用于存储 Layer 2(L2)交易数据的扩展结构。
区块本身的大小是有界限的。 每个区块的目标大小为 1500 万单位燃料,但区块的大小将根据网络需求而增加或减少,直至达到 3000 万单位燃料的区块限制(目标区块大小的 2 倍)。 区块的燃料限制可以相对于上一个区块的燃料限制上调或下调 1/1024 的比例。 因此,验证者可以通过共识来改变区块的燃料限制。 区块中所有交易消耗的总燃料量必须低于区块的燃料限制。 这很重要,因为它可以确保区块不能任意扩大。 如果区块可以任意扩大,由于空间和速度方面的要求,性能较差的全节点将逐渐无法跟上网络。 区块越大,在下一个时隙中及时处理它们需要的算力就越强大。 这是一种集中化的因素,可以通过限制区块大小来抵制。
与比特币区块对比
维度 | 以太坊区块 | 比特币区块 |
---|---|---|
核心功能 | 不仅记录交易,还实时同步账户状态和合约执行结果,支持智能合约逻辑。 | 仅记录 UTXO 的转移,专注于简单转账。 |
状态管理 | 通过状态根和 Patricia 树实现全局状态共识,每次区块生成需重新计算全网状态。 | 无全局状态,仅维护 UTXO 集合,验证交易时需遍历历史记录。 |
扩展性 | 通过 Layer2(Rollup)和分片技术实现扩容,目标 1 万 TPS 以上。 | 依赖链下扩容(如闪电网络),链上 TPS 仅 7 笔左右。 |
分叉处理 | 采用 GHOST 协议,叔块可获得部分奖励,分叉率约 9.7%。 | 孤块无奖励,分叉率极低(约 1%)。 |
数据结构 | 使用 Patricia 树存储状态和交易,支持快速状态验证。 | 使用 Merkle 树存储交易,仅验证交易完整性。 |