楼盘网站建设,查学校去哪个网站,网站的色调,网站备案信息地址文章目录比特币中的数据结构1. 区块链#xff08;block chain#xff09;2. 默克尔树#xff08;Merkle tree#xff09;3.哈希指针的问题比特币中的数据结构 1. 区块链#xff08;block chain#xff09; 哈希指针#xff1a; #xff08;1#xff09;保存数值的位置…
文章目录比特币中的数据结构1. 区块链block chain2. 默克尔树Merkle tree3.哈希指针的问题比特币中的数据结构 1. 区块链block chain 哈希指针 1保存数值的位置 2保存数值的哈希值 区块链一个使用哈希指针的链表 genesis block创世块最开始创建的块 most recent block最近创建的块 tamper-evident log篡改证明记录 每一个当前区块都保存了上一个区块所有内容的哈希值与位置形成了一个哈希指针保存在当前区块中所有区块利用哈希指针形成了区块链。最后一个区块的哈希指针保存在系统内部。 当区块链中某一个区块图中红色区块的内容遭到篡改那么这个区块后面的所有区块图中红色区块右边的区块中的哈希指针都要修改。因此只需要通过对比最后一个区块的哈希值是否被修改就能够察觉整个区块链上的区块是否遭到了篡改。 有了这个性质比特币上的某些节点无需保存所有的区块有的可能只保存了离自己最近的几千个区块。如果要用到更靠前的区块那么可以向其他人询问但如何保证询问到的区块是可靠的呢只需要对比保存的区块的最前面一个区块内保存的的哈希值与别人给的区块的哈希值是否一致即可。 2. 默克尔树Merkle tree
默克尔树一个使用哈希指针的二叉树。树中包含数据块交易记录和哈希指针。 区块的结构 1block header保存了root hash 2block body保存交易记录数据信息 Merkle tree的用途向轻节点证明某个记录被写入到了区块链。proof of membership或proof of inclusion 比特币中有两种节点区块 轻节点只保存block header 全节点既有block header又有block body Merkle proof 图中圈起来的节点就是轻节点。 a. 首先需要向某个全节点请求一个Merkle proof路径并请求路径上需要的哈希值图中红色H b. 然后计算需要证明的记录的哈希值然后通过给定的路径一步一步计算哈希值直到计算到根哈希值root hash c. 因为轻节点中是保存了block header的而block header中保存的是root hash因此只需要对比计算出来的root hash是否与保存的root hash一致即可。 Merkle tree的第二个用途proof of non-membership证明某个交易不在某个轻节点中。 使用sorted Merkle tree对交易记录tx的哈希值进行排序如果计算出待证明tx的哈希值不在这些值里面而在某两个tx哈希值之间那么按照Merkle proof的路径计算这两个tx的哈希值一直算到root hash看是否被篡改如果没有被篡改则证明待证明tx不在该轻节点中。 比特币中没有用到sorted Merkle tree这是因为比特币中不需要proof of non-membership。 3.哈希指针的问题
只要是该数据结构不存在环那么就可以使用哈希指针如果存在环就会存在循环依赖的问题。