![](https://img.haomeiwen.com/i459820/474f3b26218bfce7.png)
今天的越写越快乐系列文章继续为大家带来《精通比特币》的读书笔记中有关区块链的下半部分,也就是从Merkle树和比特币测试网络两部分来阐述区块链结构在比特币系统中的巨大作用。
内容回顾
![](https://img.haomeiwen.com/i459820/6823ad63925045f4.png)
我们从上图可以区块作为比特币系统中交易验证和广播的核心数据结构,那么在区块头中的那几个字段代表什么含义呢?
- Version - 当前比特币系统使用的版本号
- Previous Block Hash 上一个块的哈希值
- Merkle Root 当前块包含所有交易的Merkle根树
- Timestamp 当前块生成的时间戳
- Difficulty Target 当前块生成的挖矿难度
- Nonce 当前块生成的随机数
Merkle树
介绍
Merkle树是一种哈希二叉树,它是一种用作快速扫描和校验大规模数据完整性的数据结构。在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。生成一颗完整的Merkle树需要递归地对一对节点进行哈希,并将新生成的哈希节点插入到Merkle树种,直到只剩一个节点,该节点就是Merkle树的根。
Merkle结构
![](https://img.haomeiwen.com/i459820/4a180941bcfdc05a.png)
Merkle树是自底向上构建的,比如上图中假设有ABCD4笔交易构成而成的一个区块,那么H(A)、H(B)、H(C)和H(D)就表示了该笔交易的哈希值,然后H(A)和H(B)两个叶子节点的哈希值串联在一起进行哈希,这对叶子节点随后被归纳为父节点,同样的H(C)和H(D)形成父节点H(CD),直到只剩下顶部的一个节点,即Merkle根。该根节点同时归纳了四笔交易额所有数据。
HA = SHA256(SHA256(交易A))
有关树的扩展知识
基本概念
树是一种非线性的数据结构,我们可以理解为是数据在计算机中存储的一种方式,这种数据结构和族谱比较类似,其结构大体如下:
![](https://img.haomeiwen.com/i459820/86e1f727d43f2fef.png)
树(tree)是包含n(n > 0)个节点的有穷集合,其中:
- 每个元素称为节点(node)。
- 有一个特定的节点被称为根节点或树根(root)。
- 除根节点之外的其余数据元素被分为m(m≥0)个互不相交的结合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。
树的特点
- 每个节点有零个或多个子节点。
- 每个子节点只有一个父节点。
- 没有父节点的节点称为根节点。
树的相关术语
- 节点的度:一个节点含有的子树的个数称为该节点的度;
- 叶节点或终端节点:度为零的节点称为叶节点;
- 非终端节点或分支节点:度不为零的节点;
- 双亲节点或父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;
- 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
- 兄弟节点:具有相同父节点的节点互称为兄弟节点;
- 树的高度或深度:定义一棵树的根结点层次为1,其他节点的层次是其父结点层次加1。一棵树中所有结点的层次的最大值称为这棵树的深度。节点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
- 树的度:一棵树中,最大的节点的度称为树的度;
- 节点的祖先:从根到该节点所经分支上的所有节点;
- 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
- 森林:由m(m>=0)棵互不相交的树的集合称为森林;
Merkle树可以看做是一种特殊的树结构,除了具备一般树该有的性质外,还具有哈希二叉树特有的性质。
Merkle树在SPV节点的应用
SPV节点不保存所有交易也不会下载整个区块,仅仅保持区块头。它们使用认证路径或者Merkle路径来验证交易是否存在于区块中,而不必下载区块中的所有交易。
也就是说验证某笔交易是否在某一个区块中,那么我们可以猜测在区块头中的Merkle Root字段和查找某笔交易的哈希相关,也就是从一个Merkle树中查找一个叶子节点。
比特币的测试区块链
Testnet - 比特币的试验场
Testnet是一个功能齐全的在线P2P网络,包括钱包、测试比特币,挖矿以及类似主干网络的所有其他功能。要使用Testnet网络可以在比特币节点启动时指定要连接的比特币节点网络类型,比如bitcoind -testnet
,也可以在比特币钱包启动后,手动切换比特币钱包要连接的网络节点类型。
Segnet - 隔离见证测试网络
Segnet用于帮助开发和测试隔离见证
,也可以看做是具备特殊测试功能的测试网络。
Regtest - 本地区块链
Regtest可以看做是一种回归测试
。是一种比特币核心功能,允许你创建本地区块链进行测试。与Testnet3不同的是Regtest区块链旨在作为本地测试的封闭系统运行。
使用测试块链进行开发
也就说在本地构建区块链系统的节点,然后基于节点开发基于RPC的诸如钱包、交易所,电子商务网站等应用程序,甚至是开发新颖的智能合约和复杂的脚本。
个人感想
通过《精通比特币》第二版的学习,我们知道了区块结构在交易验证和SPV节点的核心作用,也知道了区块头中重要字段的具体含义,那么接下来我们可以通过脚本和共识来看看比特币系统中是如何达成共识和挖矿的机制,这些知识大多数是从书本上学习到的,也就是说结合这本书开放的源码和书籍中的理论知识才能慢慢了解区块的设计理念、共识的具体作用、以及在比特币交易过程中是如何确保交易双方的安全的,这些议题都是我们需要去理解和实践的,虽然没有像中本聪大神那样创建一个比特币系统,但是我们可以慢慢揭开比特币系统的神秘面纱去构建属于自己的区块链技术体系,去挖掘和发现那些值得了解和投资的区块链项目,也算是为后续的学习打下一个坚实的基础,我相信技术的发展也不是一朝一夕的,那么对于我们而言,需要做的就是不断发现技术的本质,也就是技术是如何推动技术进步的,人作为技术发展的载体和窗口,那么扎实的计算机功底才是学习新技术的MVP。若是我的文章对你有所启发,那将是我莫大的荣幸。
网友评论