在对“区块链是什么”有基本的了解后,我们就可以开始这章的探讨。
盖一间房子,它的基本单元结构是每一块砖;而组成区块链的基本单元结构,就叫做区块。每个区块由区块头和区块主体组成。如果把区块链比做有头有身子的人,那它更像大白:区块头存储结构化的数据,大小是80字节;而区块主体利用一种神奇的树状结构,记录区块挖出的这段时间里所有交易信息,所需空间比较大。平均来讲,假设一个区块内有400笔交易信息,区块主体可能比区块头大1000倍以上。
虽然区块头比区块主体小,但区块头总归是脑袋,大部分功能其实都由区块头实现。
为了更好地了解区块链的概念,我们可以把每个区块当成一个小盒子,里面的交易信息是小纸条;也可以把它想象成小黑板,每块小黑板上都分区块头、区块主体登记重要信息。现在我们就来看看每个区块上都写了些什么。
上图中,区块头部分括号里的数字表示各个数据所占大小,加起来刚好是80字节。区块头内含的数据有:
用来标识交易版本和所参照的规则。例如安卓8.1,或者iOS11.3,区块也有自己的版本号。
也称“父区块哈希值”,这个哈希值通过对前一个区块的区块头数据进行哈希计算(SHA256算法)得出,它的意义在于:每个新挖出的区块都按秩序接在前一个区块的后面;这样,挖出新的区块后,你才能安心地喝一口茶,因为你很清楚这个区块是跟在一个被各节点验证过的可靠的区块后头。
如上图,在区块主体中,所有交易信息先进行两个一组的哈希计算,这种结构叫做Merkle树(Merkle Tree),而且是一棵倒挂的树。
我们把问题简单化,假设区块主体中有4笔交易信息,分别是交易1,交易2,交易3,交易4。Merkle树先对每个交易信息进行哈希Hash计算(如果不知哈希,请先阅读《区块链是什么?》),分别得出Hash 1 、Hash 2、Hash 3、Hash 4。
到了第二层,像班主任安排座位一样,两个一组,也就是说 Hash 1 和 Hash 2 的字符串排排坐,变成2倍长的字符串,然后算出这个字符串的哈希值,我们记做 Hash(1&2);Hash 3 和 Hash 4 同上办法处理,得到 Hash( 3&4),再往上算,Hash(1&2)、Hash( 3&4)这两个字符串又合并,接着进行哈希运算,这个最后的哈希值就是区块头的Merkle树根。
对比特币来讲,真实情况是一个区块主体包含约4000多笔,更多的情况大家就举一反三吧,总之就是不断两组合并、哈希运算,依次往上计算,直到算到最后一个哈希值。
Merkle树能够快速检验交易数据的完整性,即数据是否被篡改过。根据密码学中哈希函数的特点,如果有人对数据做过手脚,计算出的哈希值也会变得完全不一样。哪怕在这4000笔交易中,我只移动了一个小数点,你也能从Merkle树根的哈希值发现问题。
记录这个区块生成的时间,精确到秒。每诞生一个新的区块,就会被盖上相应的时间戳,这样就能保证整条链上的区块都按照时间顺序进行排列。
挖出该区块的难度目标。每产生2016个区块,数据区块运算难度会调整一次。比如,比特币区块链网络能够自动调整挖矿的难度,让矿工每10分钟才挖出一个区块。原本需要14天才能挖完2016块区块,但不知哪个天杀的突然弄来几台算力爆表的矿机,7天就搞定了,这就意味着到预定调整期的时候,挖矿难度会增加一倍。
在《比特币挖矿是什么?矿工是怎样挖到比特币的?》这篇文章里,我们知道挖矿相当于矿工做数学题,他们利用计算机或矿机的算力(hashrate),经过大量的计算(专业一点称“哈希碰撞”),试出一个正确的区块哈希值;很多时候我们也把挖矿称作争夺记账权。
那么,矿工怎样才知道试对了哈希值呢?随机数就是这道数学题的解,挖矿过程就是在寻找这个随机数。假设某个新区块的随机数为23333,矿工们开始苦哈哈地尝试各种随机数,直到有个幸运星成功试到一组数字,这组数字的哈希值是
e401a2f533e853713eea21b878c1921c19fa9c8b887c1547c771ece46e13f766
而这个字符串正是随机数23333的哈希值!Bingo!
挖到一个新区块的节点/矿工向全网广播:“别挖啦!这个区块被我承包啦!”不管还差多少就快成功,其他矿工都只能放弃这个区块的记账权,转而开始验证这个区块。新区块验证通过后,成功加入区块链。
1)区块是区块链的基本组成单元。
2)每个区块由区块头和区块主体组成,头小身大。
3)区块头包括:
4)区块主体包括挖出该区块的这10分钟内的所有交易信息,呈Merkle树结构排列。
如果读完本文有收获,欢迎分享到朋友圈;科普区块链,有你的功劳哦!
蜂巢财经公号ID:HiveEcon,跟蜂不跟风。
更多精彩报道请访问:www.blockob.com。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。