北京大学肖臻老师《区块链技术与应用》公开课笔记03-BTC-数据结构

Posted 如何科学杀正能量的猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了北京大学肖臻老师《区块链技术与应用》公开课笔记03-BTC-数据结构相关的知识,希望对你有一定的参考价值。

北大肖臻老师《区块链技术与应用》课程链接点击这里

全系列文章链接:点击这里

主要补充内容及图片来源:《区块链:技术驱动金融》

该系列文章如中有任何侵权内容,或者有链接无法打开、图片加载上传失败等情况,请及时与我个人联系删除或修改。


一、哈希指针

关于区块链的数据结构,我们主要讨论哈希指针(hash pointer)及其应用。

 (图3.1 哈希指针,source:《区块链:技术驱动金融》)

哈希指针是一个指向数据存储位置及其位置数据的哈希值的指针。我们可以利用哈希指针构建各种各样的数据结构。

一个普通的指针可以告诉我们数据存储的位置,但哈希指针不但可以告诉我们数据存储的位置,还可以让我们验证数据有没有被篡改过。


二、区块链

区块链,即是一个个区块组成的链表,它和普通链表的区别就在于它用哈希指针代替了普通指针。

  (图3.2 区块链,source: 课程截图)

第一个区块叫做创世区块(genesis block),最后一个区块是最近产生的区块(most recent block)。每个区块包含指向前一个区块的哈希指针。最后区块的H()保存在系统里。

在区块链中,上一个区块指针被置换为哈希指针。因此,每个区块不仅告诉我们上一个区块的值在哪儿,还包含了该值的摘要(digest),使我们能够验证那个值是否改变。

 (图3.3 防篡改日志,source:《区块链:技术驱动金融》)

如图,如果有人修改区块链中任意部位数据,那么就会导致下一个数据块的哈希指针不正确。

区块链,牵一发而动全身,会引发多米诺骨牌效应。为了保证整个内容一致,就算他修改了所有哈希指针,使其与修改过的数据一致,最终也不能修改头部数据。只要我们保存好链表头部的哈希值,我们就能检测到篡改行为。


三、梅克尔树(Merkle tree)

比特币中另外一个数据结构是梅克尔树,它与二叉树(binary tree)的区别就是哈希指针代替了普通指针。

 (图3.4 梅克尔树,source:《区块链:技术驱动金融》) 

假设有很多包含数据的区块,这些区块就构成了树的叶子(节点)。

将这些数据区块两两分组,然后为每一组建立一个有两个哈希指针的数据结构,每个指针对应一个区块,这些数据结构就构成了树的下一个层次。

指向下一层数据区块的指针被存储在上一层的父节点(parent node)中,向上看最后到达树的根节点,向下一直分组得到一个单一区块,即树根节点。

我们能通过哈希指针回溯到列表任何位置,保证数据确实未经篡改。

就像区块链一样,当有人篡改了树底部一些数据区块,就会导致上一层的哈希指针不匹配,对方继续篡改这个区块,改动数据的行为最终将传递到树的顶端。而他将不能篡改我们存储的哈希指针。

只要记住最顶端的哈希指针,任何企图篡改任何数据的行为都能被我们检测到。


四、隶属证明(Merkle proof)

梅克尔树一个特点是它能实现简洁的Merkle proof.

现在假设A想要证明某个数据区块隶属于梅克尔树,而我们只用记住树根节点,A展示数据块信息,以及从该数据区块通向树根节点的那些区块,我们可以忽略树的其余部分,因为这些区块已经足够让我们验证通往树根节点过程中所有的哈希值。

(source: 肖臻老师homepage slides)  

 

简单的说,即为了证明某个数据区块来自一个梅克尔树,我们只需要找到该数据区块到树根节点的路径。

 (图3.5 隶属证明,source:《区块链:技术驱动金融》) 

 

以上是关于北京大学肖臻老师《区块链技术与应用》公开课笔记03-BTC-数据结构的主要内容,如果未能解决你的问题,请参考以下文章

北京大学肖臻老师《区块链技术与应用》公开课笔记-BTC

北京大学肖臻老师《区块链技术与应用》公开课笔记-BTC

区块链与比特币基础知识——北京大学肖臻老师《区块链技术与应用》公开课笔记

待更新北京大学肖臻老师《区块链技术与应用》公开课笔记04-BTC-协议

北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介

北京大学肖臻老师《区块链技术与应用》公开课-ETH