区块是区块链按顺序提交的一批交易及其验证信息。区块头负责标识和连接历史,区块体保存交易等数据;具体字段会因网络而不同。
把区块理解成普通文件夹并不准确。节点会按严格编码与共识规则解析区块,任何字段错误都可能使整个区块被拒绝。

区块通常可以分成区块头和区块体。区块头体积较小,常包含父区块哈希、交易数据承诺、时间或高度相关字段,以及共识机制需要的信息。区块体主要保存按顺序排列的交易,某些网络还包含证明、提款或其他协议数据。
字段名称并不通用。比特币区块头包含版本、前序区块哈希、默克尔根、时间、难度目标和 nonce;以太坊区块则包含状态根、收据根、Gas 相关字段和执行负载等信息。介绍一种链的结构时,不能直接当作所有区块链的模板。
每个新区块引用其父区块的哈希,这让区块具有明确顺序。旧区块内容变化会造成哈希变化,子区块保存的引用随即失配。攻击者若想让替代历史被接受,还需重建后续区块并满足网络共识条件。
有时同一父区块会短暂出现两个子区块,形成竞争链头。节点会按分叉选择规则收敛,未被采用的分支不会继续作为主链历史。详细过程可见区块链分叉是什么。
许多区块链会先对交易计算哈希,再两两组合并继续哈希,直到得到一个根值。这个值称为默克尔根,是对整组交易及顺序的紧凑承诺。

只要提供目标交易、同层相邻哈希和通往根节点的路径,就能验证该交易是否包含在这棵树中。证明大小随交易数量增长得较慢,适合轻量验证。但包含证明只说明交易被某个区块承诺,还需验证区块是否属于网络认可的链。
交易根承诺区块内的交易集合与顺序,状态根则承诺执行这些交易后形成的全局状态,例如账户余额和合约存储。并非所有链都使用账户状态根,UTXO 型网络更关注未花费输出集合与交易历史。
收据根、日志 Bloom 等字段又有不同用途。查看区块浏览器时,应先确认该网络的数据模型,不能把名称中带有根的字段都理解为同一份交易哈希。
网络需要限制一个区块可容纳的数据或计算量,否则超大区块会拖慢传播与验证。比特币类网络通常按区块重量或大小约束,以太坊类网络常按 Gas 使用量约束执行工作。
限制越宽,单个区块可能处理更多内容,但节点带宽、计算和存储压力也会增加。限制越紧,拥堵时交易会竞争有限空间。协议需要在吞吐量、去中心化参与门槛和传播速度之间取舍。
区块高度表示它在链中的位置,创世区块通常记作高度 0。确认数描述某笔交易所在区块之后又累积了多少区块,页面口径可能把所在区块本身计为第一次确认。
最终确定则是共识层概念,表示历史被逆转的可能性已降到协议定义的程度。不同网络的最终确定机制不同,不能简单把同一个确认数套用到所有链。第一块的特殊之处可见什么是创世区块。
节点会验证区块编码、父区块、数据根、共识证明和资源限制,再检查或重新执行其中交易。只有所有必要条件都符合本地共识规则,区块才会进入节点认可的账本。
这解释了为什么区块生产者不能单方面决定规则。生产者负责提议,验证节点负责检查。完整交易流程可继续阅读区块链如何工作,各组件的整体关系则可回到区块链核心概念全解。
空区块通常指没有普通用户交易,但仍可能包含创建新区块所需的系统交易、奖励记录或共识数据,因此字节内容不一定为空。
传统线性区块链通常引用一个直接父区块。采用有向无环图或特殊合并结构的协议可能引用多个前序对象,需要按具体协议判断。
不一定。以比特币为例,区块哈希来自区块头,而交易通过默克尔根承诺到区块头。不同网络的区块标识计算范围和编码规则不同。
不能直接修改已被网络接受的区块。未进入该区块的交易只能等待后续区块,或在协议允许时调整费用、替换待处理交易。


