我做链上开发工作做了三年, 每次遇到有人问我数据块到底存储了什么具体内容的时候, 我总是觉得那个答案要比人们想象中的要简单得多。一个数据块其实仅仅包含了两个部分, 也就是数据块头和数体, 这里面装载的信息数量并没有大家想象的那么神秘复杂, 如果把它展开来分析的话, 它其实就是分布式记账本的一页记录。

区块链区块头存什么

区块头相当于整个块的身份证, 里面的字段数量并不多, 但是每一个字段都非常关键, 它里面会去记录前一个区块的哈希值、还有当前出现的时间戳以及Merkle根, 这里的Merkle根是指这组交易的一个指纹信息, 另外还有难度目标以及nonce这些东西, 把它们全都加起来的话, 总大小大约是80字节。

正是因为前一个区块的哈希值把每一个环节都牢牢地卡住了, 所以整条链条才谁也插不进来、也拔不出来。我在调整节点的时候, 最让我头疼的就是去验证这条哈希链条的情况。只要有一丁点差错, 哪怕只是错了一个字节, 那么整个块就直接作废了, 然后就不得不重新进行拉取和验证的操作。

区块链区块存哪些交易

一旦把区块的头部分剥掉之后, 剩下就全都是交易记录的明细内容,而且每一笔交易都必须包含发送方的账户地址、接收方的账户地址、具体的转账金额、还有数字签名以及交易哈希这些必不可少的数据要素, 哪怕只是有一笔对不上也不行全都得严丝合缝地匹配好。

想知道一个区块链区块里到底记录了哪些信息?看这几样就够了

比特币里面的一个区块, 大概能塞进去四千笔交易数据, 以太坊的情况稍微宽裕一点, 它的字段嵌套得非常复杂, 比JSON还要绕人, 我平时用来解析交易体的时间是最多的, 只要稍微看错一个字节的偏移量, 签名验证的事情就会直接出问题, 然后还得从头开始处理。

把问题一直追问到最深层, 你就会知道, 区块链里的这个区块, 它记的东西其实就是某人是在啥时候, 给了谁多少钱这种交易内容, 而且整个网络大家都认这笔账。它的整体结构一直都是长这样的形式。