区块链学习三——比特币的数据结构

文章介绍了比特币数据结构的核心概念,包括哈希指针用于检测数据篡改,区块链作为由哈希指针链接的链表确保数据完整性。Merkletree通过根哈希高效验证交易的存在,MerkleProof允许轻节点验证交易是否在区块链中,而Proofofnon-membership则证明交易不在区块链中。文章强调了Merkletree在提高验证效率和防止篡改中的重要性。
摘要由CSDN通过智能技术生成

区块链学习三——比特币的数据结构

文章内容来源于北京大学肖臻老师《区块链技术与应用》公开课


一、哈希指针(hash pointers)

普通的指针存储的是结构体在内存中的起始地址
哈希指针除了存储起始地址还存储该结构体的哈希值
根据哈希值可以检测出该结构体是否被篡改。

二、区块链

由一个一个区块组成的链表
Q:区块链使用的链表与普通链表的区别
A:区块链使用的链表使用哈希指针代替了普通的指针
区块链表

系统中产生的第一个区块:创世纪区块 genesis block
系统中最近产生的区块:most recent
每个区块都有一个哈希指针
取哈希值是将整个区块的内容合在一起取得哈希(包括哈希指针)
只需记住最后一个哈希值即可检测前面得区块是否被篡改(多米诺骨牌、牵一发而动全身)
因此节点只需保存最近的节点,需要前面得区块可以问别人要,通过计算哈希值即可检测前面的区块是否是正确的。

三、Merkle tree

根节点也可取哈希值叫做根哈希
知道根哈希可以检测出整棵树节点是否被篡改(效率更高)每个节点的改变会导致根节点发生改变
最下面的子节点相当于是交易
Merkle tree
这个数跟二叉树很像
最上面深颜色的方块代表区块,tx即最下面的一行代表交易,H()哈希值
每个区块都包含块头block header (有根哈希值、块头没有具体的交易数据的)和块身block body(块身含有交易数据)
区块包含的所有交易组成的merkle tree的根哈希值存在区块的块头

1.Merkle tree的作用:Merkle Proof

全节点:保存整个区块链的内容,有块头block header 和块身block body(块身含有交易数据)
轻节点:只保存块头block header
Q(Merkle Proof):如何向轻节点证明交易已经写入区块链中 (轻节点没有保存交易列表,只有根哈希值block header)上图黄色的方块包含在Merkle tree。
A:轻节点向全节点发出请求。全节点把图中红色的H() 哈希值发给轻节点。轻节点在本地计算标绿的哈希值 H(),由绿色的哈希值和红色的哈希值可以计算出上一层节点的绿色的哈希值;再由刚才计算出绿色的哈希值与该层红色的哈希值;计算出再上一层的绿色哈希值,再由绿色的哈希值与红色的哈希值即可计算出根节点的哈希值,与轻节点的哈希值比较即可得到是否包含交易信息。
只验证交易数据所在的到根节点的一条分支即可,根哈希值不变,即交易都不会被篡改。人为制造哈希碰撞可以篡改 难度太大了collision resistence

Merkle Proof(Proof of membership、Proof of inclusion):向轻节点证明交易已经写入区块链中。有n条交易的话时间复杂度为log(n)

2.Proof of non-membership

Q:如何证明Proof of non-membership
A:直接将一棵树发给轻节点,把整个交易都发给轻节点。时间复杂度为O(n)
优化:把交易的哈希值按照顺序进行排序,其他步骤跟merkle proof 过程类似。时间复杂度为log(n)。代价是要先排序。sorted merkle tree。
比特币中不要求排序 不要求Proof of non-membership

四、总结

区块链与Merkle tree都需要使用哈希指针来构造。没有环的链表可以使用哈希指针,有环的不可使用哈希指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值