1.指针和哈希指针
区块链与普通的链表的区别:哈希指针代替了普通指针,每个区块都包含了指向前一个区块的哈希指针(最后一个区块的哈希保存在系统里)
因为这个性质,在区块链中,如果某一区块的数据被篡改,那么之后所有的区块哈希指针都会改变。所以只需要检查最后一个区块的哈希值就能完成对整个区块的检查
比特币分为:
全节点:保存所有区块的内容(块头、块身、交易的具体信息)
轻节点:只保存块头(如果向轻节点证明某个交易被写入到区块链中,使用Merkle proof)
2.Merkle tree
每个数据块代表一笔交易,区块分为块头和块身。这个区块头中,有根哈希值,这个区块所包含的所有交易组成的Merkle tree,都包含在区块头中,交易的具体内容都在块身
Merkle tree优点:
1.只要记住根哈希值,就能检测出对树中任何部位的修改。
2.提供Merkle proof(找到该交易,顺着父节点往上直到找到根节点,其路径就为Merkle proof)
3.Merkle proof:
如果轻节点需要证明Merkle tree中某个数据节点记录的一笔交易被写入区块链中,需要将向上所有父节点中的另一个哈希值(黄色),通过请求到的哈希值与本地哈希值结合,依次从底自上计算该父节点哈希值(绿色),算出根哈希值比较验证。时间复杂度Ω(log(n))
如果对交易内容哈希值进行排序,将要查的交易算出哈希,再求这笔交易是否在块中。也能够完成验证。