比特币区块链的内容主要包括交易和标题两个部分。交易包含了每笔交易的具体内容。每笔交易内容包含付款账户的公钥的哈希值、收款账户的公钥的哈希值、找零账户的公钥的哈希值、付款账户的期初余额、找零账户的期末余额和收款账户的期末余额。
标题部分包括父区块标题的哈希值、时间戳、目标难度系数、随机数和梅克尔根。梅克尔根是本区块所有交易的哈希值。梅克尔根编号具有二叉树的结构特征,二叉树的最下层是交易信息,每两个交易信息可以计算得到一个上一层的编号,每两个下一层的编号可以计算得到一个上一层的编号,从下至上依次类推,直到最后剩下一个编号。这个最后剩下的编号称为梅克尔根编号。梅克尔根编号可以用来验证信息是否被篡改,当底层的交易信息发生任何细微变动的时候,梅克尔根编号就会发生显著变动。虽然梅克尔根可以查看任意交易,但是无法显示交易结果。这个问题在以太坊的梅克尔根中有所改进。
图9.1 梅克尔根
资料来源:Buterin(2015)。
那么,这种哈希算法有什么好处么?为什么不直接将数据块串接成单独的大块,用常规的哈希算法进行呢?答案在于梅克尔树具有整齐机制,可以提供完整性的数据证明,称为梅克尔证明。(www.xing528.com)
为了在区块链确定比特币交易,我们可以进行完整的数据验证,也可以进行简化的数据验证。比特币的轻客户端可以只下载各个区块的标题。如果轻客户端的用户希望确定某笔交易的状态,它可以简单地要求该笔交易的梅克尔证明,显示该笔交易所在的梅克尔树。如图9.2所示,我们可以选择安装轻客户端,只下载并验证标题部分,即只考虑上面部分。我们也可以下载所有数据,并下载和验证交易部分和标题部分。
图9.2 比特币的轻客户端
资料来源:Buterin(2015)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。