肖臻老师《区块链技术与应用》--比特币的数据结构

肖臻老师《区块链技术与应用》–比特币的数据结构

hash pointer(哈希指针)

区块链中采用哈希指针,传统链表则是通过指针串联起来的。
在这里插入图片描述
哈希指针如图所示,对于该节点,有两个指针指向这个节点(实际上是一个),P为该节点地址,H()为该节点的哈希值,与节点中的内容有关。当节点中内容发生改变,哈希值也会发生变化,保证区块的内容不能被篡改。
在这里插入图片描述
区块链与链表的区别:
·哈希指针代替普通指针,每个区块根据自己的区块内容生成自己的哈希值,此外,每个区块都保存有前一个区块的哈希值(除创世纪块genesis block)。一个区块的哈希生成依赖于该区块的内容,而一个区块的内容又包含前一个区块的哈希值,从而保证了区块内容不被篡改。
在这里插入图片描述
如上图所示,如果想要破坏区块链的完整性,篡改B的内容,而C中保存又有B的哈希值,所以C也得进行修改。用户只需要记住最后一个区块链的哈希地址,就可以监测区块链上内容是否被篡改。在实际应用中,一整条链可能会被切断分开保存于多个地方,。若用户仅仅具有其中一段,当用到前面部分区块数据时,直接问系统中其他节点要即可,当要到之后,仅仅通过计算要到的最后一个哈希值和自己保存哈希值是否一致可以判断所给内容是否确实为区块链上真实的内容。

Merkle Tree

在这里插入图片描述
Merkle Tree和Binary Tree的区别有哪些?

  • Merkle Tree用哈希值真代替了普通指针
    在这里插入图片描述
    A、B、C、D为数据块,A和B各有一个哈希值,将其合并放到一个节点中,C和D同样操作,而后,针对得到的两个节点分别取哈希,又可以得到两个新的哈希值,即为根节点。实际中,在区块块头中存储的是根节点的哈希值(再取一次哈希)。

该结构优点,只需要记住root hash,便可以检测出Merkle中任何部位的修改。例如,所绘制的Merkle Tree中B节点发生了改变,则上层的哈希值也会发生变化,进而根节点中第一个哈希值也会发生变化,从而导致跟哈希之值也发生了变化。

在比特币系统中,不同区块通过哈希值指针连接,在同一个区块中的多个交易(数据块),则通过Merkle Tree的形式组织在一起。区块本身分为两部分(块头和块身),在块头中存在有根哈希值(没有交易的具体信息),块身中存在交易列表。

  • Merkle Tree可以用于提供Merkle Proof。全节点:保存整个区块的所有内容
    轻节点:保存区块的块头信息

为什么要分轻节点和全节点? 因为硬件的局限。一个区块大小为1MB,对于移动便携设备来说,如果存储区块的所有内容,则所需空间过大,而这是不现实的。所以轻节点只需要存储区块块头信息,全节点存储区块所有内容即可。

在需要向轻节点证明某条交易是否被写入区块链,便需要用到Merkle proof(将交易到根节点的这一条路径称为Merkle proof)
如下图所示,劝解带你将整个Merkle proff发送给轻节点,轻节点即可根据其算出跟哈希值,和自己保存哈希值对比,从而验证该交易是否被写入区块链,只要沿着该路径,所有哈希值都正确,说明内容没有被修改过。
在这里插入图片描述
存在不安全的情况——要验证B,但是H(2)和H(5)都是由全节点提供的,全节点能否修改B,通过H(1)调整,使得修改过后的H(1)和轻节点计算出的H(2)一起取得哈希仍然为H(5)。

在这里插入图片描述
这种情况是人为制造哈希碰撞。由于哈希函数的collision resistance性质,这种情况是不会发生的。从而,保证了系统的不可篡改性。同时,这样一个Merkle Proof的事件复杂度为O(log n),非常高效【证明交易存在】。如果要证明交易不存在,如果不对叶节点规定排序顺序,没有一个效率较高的方法证明不存在。 在比特币系统中,没有相应的需求,所以在比特币系统中并没有对Merkle Tree进行排序。

一般的链表我们都可以改造为使用哈希指针的链表,但当链表中存在环时,哈希指针便不能再使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值