在做了五年区块链后端工作以后, 被大家追问频率最高的一句话, 就是问一个区块里面到底包含了哪几种组成要素。如果把话说直白了讲,所谓区块, 本质上就是一个数据传输包而已。

把这个数据包拆开来看以后, 里面所包含的内容无非就是头部信息以及体部数据这样两个大部分。接下来, 我会把这些内容掰开了、揉碎了, 一点一点地给大家讲解清楚。

区块头部有什么

区块的头部其实是该区块的身份证。这个部分里面存放了上一区块哈希值以及时间戳和难度目标这些数据项。另外还有一个被叫做Merkle Root的字段存在其中。

它实际上是利用本区块内部所有交易数据计算出来的一种指纹信息。我自己在进行代码编写工作的时候最担心的就是整个哈希链条出现对不上的情况。哪怕只是出现了单个字节的错误也会导致整条区块链直接报废。

拆开一个区块看看里面有什么,区块链的区块组成全讲清

头部里面还包含了非ce字段, 矿工反复去更改这个数字, 以便能够凑到符合难度要求的哈希值。虽然它看着并不是起眼了, 但是背后烧掉的那些算力, 其实就是整条链的安全底座。

区块体里装啥

体部这个概念, 简单来说就是非常实在的交易列表。在比特币体系里面, 每一条交易记录都清晰地描述了是谁把多少数量的币转移给了谁;而在以太坊体系中, 除了这些基本转账之外, 还涵盖了诸如合约被调用、以及状态发生各种变更等一系列复杂的行为内容。

我在进行代码调试工作的时候, 个人习惯是先抓取两条具体的交易数据放在一起反复比较观看, 这样的操作方式所节省下来的时间, 要比去死磕那些厚厚的官方文档速度快上整整十倍。

区块里面到底能塞进多少笔交易, 并没有一个固定的上限数字说死最多只能有几条, 但是呢,它受到了总字节数这个条件的严格约束, 比特币的大致规模大约是1MB, 以太坊在早期的时候, 其gas限额是30MB, 如果空间不够的话, 那就只能老老实实地等待下一个区块的生成机会了。

如果下次再有别人问到, 关于区块链内部那个区块到底是由哪几个部分组成的这个问题, 那么直接把“头部”加上“体部”, 这总共五个字的话直接甩出去, 基本上就已经算是够用并且足够了。