大家好,我是比特桃。本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一,迎来创新发展新机遇。
经科技部批复,国家区块链技术创新中心落地北京中关村国家自主创新示范区,并于2023年5月10日正式投入运行。
目录
区块链技术与应用 - 学习笔记1【引言】
区块链技术与应用 - 学习笔记2【密码学基础】
(系列笔记更新中……更新完后将统一整合目录)
本文主要阐述比特币的数据结构,比特币主要通过哈希链表进行区块链的连接。而每个区块内的内容,则通过默克尔树来组织,达到高效组织记录的功能。
1. 哈希指针
比特币中的每个区块使用了哈希指针的链表组织,每个区块中包含多条交易信息。传统的链表大家应该比较熟悉了,它的前驱和后继均通过内存指针来指向。而哈希指针和普通指针略有不同,哈希指针的结构如下图所示:
每个区块所有数据会形成一个哈希值,用来保障该区块的数据没有被篡改。并且每个区块(除创世纪块)都含有前一个区块的哈希值。而后一个区块在包含上个区块的哈希值的基础之上,还要再进行一次哈希运算。所以就保障了,只要你拿到最新一个区块的哈希值,那么之前区块链上的所有数据都是没有被修改过的。
在实际应用中,一整条链可能会被切断分开保存在多个地方。若用户仅仅具有其中一段,当用到前面部分区块数据时,直接问系统中其他节点要即可。当要到之后,仅通过计算最后一个哈希值和自己保存哈希值是否一致,就可以判断所给内容是否是区块链上真实的内容。
2. Merkle tree 默克尔树
Binary tree和二叉树的区别就是用哈希指针代表了普通的指针:
区块链中的区块,包含了轻节点和全节点。轻节点只有跟哈希值,而全节点还有内容信息。这是因为全节点包含了所有交易信息,一个区块就有1M大小。对于普通场景来说没必要存整个区块链上的账本,所以只保存一个跟哈希值就可以了。普通节点只是拥有根哈希值的轻节点,但当轻节点要验证该区块中的某一个交易数据是否合法。那就需要向全节点要 Merkle Proof,即:将上图红色绿色的哈希值传递给轻节点。轻节点拿到后,就可以从底部开始:对待验证的这个交易取哈希值看是否等于全节点发来的值。如果一样再加入红色算上一级,依次计算。从而算出跟哈希值是一模一样的,证明该次交易是合法的。
此外,区块链所使用的链表是不会存在环的。因为它自身的内容包含了上一个区块的哈希值,又因为下一个区块必须包含上一个区块的哈希值,所以如果存在环则会出现循环依赖问题。