
区块与区块头:记录内容和验证入口
区块是按协议组织的一组数据,包含交易及相关验证信息。区块头提供关键摘要,交易等具体内容则放在相应的数据部分。理解区块时,可以分别问:记录了什么、接在哪个区块后面、节点凭什么接受它。
比特币开发者参考文档介绍的区块头为80字节,字段包括版本、前一区块头哈希、默克尔根、时间、nBits和nonce。其中,nBits编码工作量证明的目标阈值,nonce是矿工尝试改变哈希结果时可调整的数值。
哈希与父区块引用:历史如何连接
哈希可以理解为由数据计算出的摘要。后一个区块引用前一个区块的哈希,使历史记录形成关联;修改前面的数据,会影响后续引用的一致性。
这种关联让修改容易被发现,但不能单独保证历史绝对不可改写。节点还需要检查区块是否符合协议,并依照共识规则选择链。数据之间能够连接,与整条历史获得网络认可,是两个不同层面的问题。
默克尔根与状态根:摘要对象有什么不同
比特币的默克尔根由区块内交易的TXID按顺序逐层配对哈希得到;某层数量为奇数时,末项复制后参与配对。它把交易集合与区块头关联起来。
交易摘要回答的是“包含哪些交易”,状态摘要回答的是“处理后得到什么状态”。两者不能混用。摘要也不等于完整数据:知道一个根哈希,并不能直接从中还原全部交易或账户记录。
工作量证明与权益证明:接受区块的条件
在比特币的工作量证明中,区块头哈希必须不大于协议要求的目标阈值。满足这一条件仍不代表区块必然有效,交易等内容也需要通过检查。
以太坊区块文档描述了另一种流程:权益证明下,提议者组织区块,其他节点验证交易执行结果。其执行载荷承载交易,执行层状态根对应执行后的状态;信标区块也有状态根,阅读字段时需要先区分所属层级。
常见问题:出块时间和容量能否直接比较
以太坊使用时隙安排提议机会,但时隙可能为空,因此一次机会不等于必然产生一个区块。区块时间描述出块间隔,时间戳则是区块记录的时间字段,两者含义不同。
容量也要看计量方式。字节衡量数据体积,Gas衡量协议定义的执行资源消耗,不能直接等同。阅读不同链的参数时,应先确认单位、协议版本和适用范围,避免把某条链的字段或历史参数当成所有区块链通用的规则。