
区块链的基本组成
区块链可以理解为由多个网络节点共同维护的、按顺序连接的共享账本。账本中的数据被分组写入区块,每个区块通常包含交易数据以及用于验证和连接区块的元信息。全节点会依据协议规则独立验证收到的区块和交易,只有通过验证的内容才会被纳入该节点认可的链。多个节点对同一组区块和状态达成一致时,就形成了网络共识。
因此,区块链的基础结构至少包含四个层面:交易如何表达资产或状态变化,区块如何组织交易,密码学如何提供完整性证明,以及节点如何在没有单一管理者的情况下决定哪条链有效。不同项目的具体实现可能不同,不能把某一条链的规则直接当作所有区块链的通用规则。
交易、哈希与默克尔树
交易是区块链记录状态变化的基本数据单元。以比特币采用的UTXO模型为例,一笔交易会引用此前尚未花费的输出作为输入,并生成新的输出;同一输出不能被重复作为输入,否则会构成双重花费。交易输入和输出的有效性需要由节点依据签名、金额和引用关系等规则检查。账户模型的区块链则通常围绕账户余额和状态变更组织交易,数据表达方式与UTXO模型不同。
哈希函数会把交易或区块数据转换为固定长度的摘要。数据哪怕发生很小变化,重新计算出的摘要也会不同。区块通常在区块头中保存前一区块的哈希,使后续区块与先前记录形成链式关系;如果要修改较早区块中的内容,就必须重新处理该区块以及后续区块的相关连接。
默克尔树用于把区块中的多笔交易汇总成一个默克尔根。交易标识先两两组合并进行哈希,再逐层合并,直到得到单一根值。默克尔根写入区块头后,节点或轻量客户端可以通过一组中间哈希验证某笔交易是否属于特定区块,而不必取得整个区块的所有交易数据。
区块头、区块高度与分叉
区块头通常承载前一区块哈希、默克尔根、时间信息以及与共识机制有关的字段。区块高度表示某个区块与创世区块之间的相对位置,但在多个区块同时竞争同一位置时,不同区块可能拥有相同高度,所以高度不能单独作为全局唯一标识。区块哈希更适合用于精确引用区块。
分叉发生在网络中同时出现多个有效候选区块,或者不同节点暂时接收到不同链头时。协议需要通过链选择规则确定应继续扩展哪条链,未被最终选中的区块可能成为过时区块。分叉不一定意味着系统故障,它也可能是网络传播延迟或协议升级带来的结果;关键在于节点如何依据规则恢复一致状态。
共识机制与抗女巫机制
共识机制是让分布式节点对区块链状态达成一致的一整套协议、激励和选择规则。工作量证明和权益证明经常被统称为共识机制,但更准确地说,它们主要承担抗女巫和区块作者选择的作用:前者要求参与者投入计算资源,后者要求参与者锁定具有经济价值的权益。完整的共识系统还包括区块验证、投票或确认、奖励与惩罚,以及出现多个候选区块时的分叉选择。
在比特币的工作量证明体系中,矿工需要寻找满足目标阈值的区块头哈希,网络通常选择累计工作量更高的有效链。区块越多地建立在某笔交易之后,修改该交易所需重新完成的工作通常越多,因此确认深度会影响交易被改写的难度。工作量证明的安全性依赖协议规则、网络算力分布和节点验证,而不是单靠哈希函数本身。
以太坊的相关机制采用权益证明思路,由验证者参与区块提议和验证,并通过权益权重、奖励和惩罚形成经济约束。出现多个候选区块时,链选择规则会依据验证者投票及其权益权重等信息决定链头。这个例子说明,区块链可以使用不同的资源约束和链选择方法,但都需要解决节点身份泛滥、恶意提议和状态不一致等问题。
这些概念何时需要重点关注
学习或设计区块链系统时,首先应明确数据模型:需要追踪可独立花费的输出,还是维护账户和全局状态;其次要区分数据完整性与共识安全,哈希能帮助发现数据变化,却不能单独决定哪条链应被接受;最后还要结合节点类型判断验证能力,全节点与轻量客户端能够获得的数据和验证范围并不相同。
如果系统需要处理高并发、跨链交互或复杂合约,还应进一步分析区块空间、状态同步、最终性、交易排序和执行环境等问题。基础结构的概念可以迁移到许多区块链,但具体的交易格式、确认规则、分叉选择和安全假设必须以相应协议的规范为准。
常见问题
问题一:区块链是不是只要有区块和哈希就够了?不是。区块和哈希解决了数据组织与完整性关联,但还需要交易验证、节点通信、共识规则和链选择机制,才能让分布式网络对同一状态形成稳定认识。
问题二:最长链是否适用于所有区块链?不适用。某些工作量证明系统会依据累计工作量选择链,而权益证明系统可能依据验证者投票及权益权重选择链。所谓最长链是特定协议语境下的规则,不能泛化到所有网络。
问题三:默克尔树能否证明交易一定有效?不能。默克尔证明主要说明交易是否被包含在某个区块及其对应的默克尔根中;交易签名、输入是否可用、区块是否符合共识规则等问题仍需另外验证。