《区块链技术与应用》学习笔记2——BTC数据结构

Hash pointer(哈希指针)

  • 指针
        在程序运行过程中,需要用到数据。最简单的是直接获取数据,但当数据本身较大,需要占用较大空间时,明显会造成一定麻烦。因此可以引用指针,每次获取相应的数据即可。
        实际使用中,指针实际上存储的是逻辑地址更多
  • 哈希指针
        如下图对于该节点,我们可以看到有两个指针指向这个节点(实际上为一个),其中P为该节点的地址,H()为该节点的哈希值,该值与节点中内容有关。当节点(区块)中内容发生改变,该哈希值也会发生改变,从而保证了区块内容不能被篡改。区块链节点
在比特币中,其最基本的数据结构便是一个个区块形成的区块链。
  • 区块链与链表的区别:哈希指针代替普通指针
        每个区块根据自己的区块内容生成自己的哈希值,此外,每个区块(除创世纪块)都保存有前一个区块的哈希值。需要注意的是,本区块哈希生成依赖于本区块内容,而本区块内容中又包含有前一个区块的哈希值。从而保证了区块内容不被篡改。
    在这里插入图片描述
在实际应用中,一整条链可能会被切断分开保存在多个地方。若用户仅仅具有其中一段,
当用到前面部分区块数据时,直接问系统中其他节点要即可,当要到之后,
仅仅通过计算要到的最后一个哈希值和自己保存哈希值是否一致,
可以判断所给内容是否确实为区块链上真实的内容。

Markel Tree(默尔克树)

  • Markel Tree用哈希指针代替了普通指针
    在这里插入图片描述
    上图为一个Markel Tree,其中A、B、C、D为数据块。可见A和B各有一个哈希值,将其合并放在一个节点中,C和D同样操作。C和D同样操作,而后,针对得到的两个节点分别取哈希,又可以得到两个新的哈希值,即为图中根节点。实际中,在区块块头中存储的是根节点的哈希值(对其再取一次哈希)。
  • 该数据结构的优点在于:只要记住了Root Hash(根哈希值),便可以检测出对树中任何部位的修改。
在比特币系统中,不同区块通过哈希值指针连接,在同一个区块中的多个交易(数据块),
则通过Markle Tree的形式组织在一起。区块本身分为两部分(块头和块身),
在块头中存在有根哈希值(没有交易的具体信息),块身中存在交易列表。
  • Markel Tree的实际用途
    Markel Tree可以用于提供Markel Proof。
        
    比特币中节点分为轻节点和全节点。全节点保存整个区块的所有内容,而轻节点仅仅保存区块的块头信息。因为硬件的局限。一个区块大小为1MB,对于移动便携设备来说,如果存储区块的所有内容,则所需空间过大,而这是不现实的。所以轻节点只需要存储区块块头信息,全节点存储区块所有内容即可。

    
    当需要向轻节点证明某条交易是否被写入区块链,便需要用到Markle proof。我们将交易到根节点这一条路径称为Markle proof,全节点将整个Markle proof发送给轻节点(如下图所示),轻节点即可根据其算出根哈希值,和自己保存的对比,从而验证该交易是否被写入区块链。只要沿着该路径,所有哈希值都正确,说明内容没有被修改过。

    
    
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值