# 《区块链技术与应用》02 BTC 数据结构 **Published by:** [Minna Yu](https://paragraph.com/@minna-yu/) **Published on:** 2022-06-15 **URL:** https://paragraph.com/@minna-yu/02-btc ## Content 这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。 本篇内容主要回答以下几个问题: 1、区块链和普通的链表区别在哪里? 2、区块链是如何使用哈希指针实现历史内容的不可篡改的? 3、Merkle tree的特点是什么?在区块链中可以有什么样的实际应用? 4、全节点和轻节点的区别是什么?轻节点如何实现数据验证?Hash pointers哈希指针哈希指针作用 (1)存地址(起始位置),普通指针都会有 (2)存结构体的哈希值,就可以知道内容是否被修改 也就是说哈希指针与普通的指针的区别在于,多加了一个哈希值的存储。 区块链就是一个个区块组成的链表。 区块链和普通的链表的区别,用的是哈希指针。 Block chain is a linked list using hash pointers. 整个区块的内容一起取哈希,如果历史的内容有篡改,最后的哈希值就对不上,所以这样的结构可以保证数据的不可篡改。Merkle treeMerkle tree结构的好处,只要存了root hash 根哈希值,就可以检测出整个链表中任何的修改 每个区块分为块头block header和块身block body,header存了区块的根哈希值,body里面有交易的列表,最下面的数据块,里面是transaction。 Merkle tree的作用,提供Merkle proof 区块链分全节点,轻节点,有的轻节点只存header 对于轻节点的交易,想要知道是不是在链上记录了,就需要merkle proof,就是下图里面涂了颜色的路径。最上面的轻节点(类似钱包应用)存储了橘色的根哈希值,要如何知道最下面的黄色交易tx是否被记录了呢?首先根据tx本地计算出最下面第一个绿色H(),结合全节点请求的红色H()往上一层计算出H(),再结合全节点红色的H(),往上得出绿色的H(),再结合全节点的H(),计算出根哈希值 **Merkle proof就是在这个过程中计算需要用到的哈希值。**发生交易的tx这边的人给轻节点证明,自己进行了交易 Proof of membership/inclusion 对数级别的计算量,要证明某个交易存在,效率比较高 如果要进行Proof of non-membership 不存在某个交易 方法一:每个都计算一下,不存在就是没有,线性的计算量 方法二:sorted merkle tree对哈希值进行排序。再把要证明的哈希值进行对比,就是对数级别的计算量 视频原文地址 https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c ## Publication Information - [Minna Yu](https://paragraph.com/@minna-yu/): Publication homepage - [All Posts](https://paragraph.com/@minna-yu/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@minna-yu): Subscribe to updates - [Twitter](https://twitter.com/Captai_addicted): Follow on Twitter