前文研读了比特币白皮书,不知道你是否有所收获呢?
接下来我们将一起继续学习区块链相关知识:区块的组成、结构、交易及Merkle树。
正文共: 1541字 2图
预计阅读时间: 5分钟
本文由《也可以成长》公众号整理 欢迎转载
** 区块链的组成 **
之所以叫区块链(英文名Blockchain)是因为它由一个个区块以链式结构组成的。
那区块链中的区块都是怎么链接在一起的呢?
在区块的链条中每个区块都有一个唯一的区块哈希,区块头中有一个字段来存放父区块的哈希。
第二个区块的父哈希为第一个区块的哈希,第三个区块的父哈希为第二个区块的哈希,这样类推,就把一个个区块链接起来了,形成了一个前向的链表。
每个区块的头信息中都要存父区块的哈希,那么区块哈希是产生的呢?
区块哈希其实是对区块头信息做一个名为SHA256算法得到的值。
我们可以把SHA256想象为一个装置,姑且称之为翻译黑箱吧,你丢给他一句话,它会立马吐出另外一句翻译好的话,也就是哈希(这让我想起了图灵测试中的原理)。
要得到哈希就得知道翻译前包括哪里内容,具体到比特币里,就涉及到了区块具体的数据结构了。
image图灵测试原理模型
**区块的结构 **
区块是聚合了交易信息的容器数据结构。
区块由以下几部分构成:
-
区块大小(占4字节):代表了本区块除了自己这4个字节以外的其他数据量的大小,区块的具体数据写完以后才能得到这个数值;
-
区块头(占80字节):它起着至关重要的作,并非每个账户都要记录所有的交易信息,只有那些全节点或矿工才需要记录所有的数据。
而普通的比特币参与者只需要将每个区块的区块头下载到本地就可以进行简单支付验证(简写为SPV,Simplified Payment Verification)。
每个区块的区块头仅有80字节,每10分钟产生一个区块,一年产生区块占用内存仅有4.2M,无需担心内存放不下;
-
交易计数器(记录本区块中的交易数量):表达了一个区块中交易的个数,仅仅是一个计数而已;
-
交易实体:是真正的交易数据,代表着比特币个体与个体之间的价值转移。
那么区块头是什么样的结构呢?
区块头主要由三组数据组成:
-
父区块哈希值:是用来链接区块的,可以保证区块的顺序;
-
难度、时间戳和nonce值:这些与挖矿竞争相关(前文中我们有先关介绍);
-
而Merkle树的根Hash:借助Merkle树算法,可以确保收录于验证区块中所有交易的真实性。
**区块中的交易与Merkle树**
区块链中每个区块除了区块头就都是本区块收集的交易数据。
交易实体依次排列,而区块头里的交易树根就是把交易以Merkle树的形式排列并且进行哈希迭代生成的。
区块中的首个交易是Coinbase交易,Coinbase交易也叫创币交易。
创币交易仅仅用来创建新的比特币,没有输入,不消耗UTXO(也就是未花费的交易输出)。
这笔交易只有一笔输出,支付到矿工的比特币地址。
比特币交易的数据结构主要由以下部分组成:
-
交易数据结构的版本号;
-
输入交易的数量及输入交易数组;
-
LockTime:是个多意字段,表示在某个高度的区块Block之前或某个时间点之前该交易处于锁定状态,无法收录进区块Block。
Merkle树的主要作用是用来做“完整性校验”的,也就是检查一下数据有没有损坏。
完整性校验是通过对数据进行哈希,然后比对哈希值来实现的。
Merkle树是从底向上构建的,最底下的叶子节点表示每一个交易的哈希,向上每一层的值是下面两个子节点的哈希值合到一起后做了一个哈希。
这样一层层向上迭代,就得到了数目更少的新一级哈希,最终必然形成一棵倒挂的树。树根是根哈希,也就是存到区块头中的哈希值。
这种数据结构的优点是使用它可以单独拿出一个分支来对部分数据进行校验,速度很快。
当交易数量增加很快时,校验路径长度增长就很慢,并且有了Merkle树,一个节点仅需下载区块头的80个字节,然后通过从一个全节点回溯一条小的Merkle路径就能确认一笔交易的存在。
(未完待续……)
相关链接
如果你想拥有一套快捷生活的方法论,如果你想压缩自己的时间,提高自己工作的效率,欢迎你的加入,目前有40+爱学习的小伙伴已经加入,满50人后开始涨价。
image
网友评论