一个比特币区块里可能装着几千笔交易,但区块头只有 80 字节。只用这么一小段数据,就能“锁住”区块里的每一笔交易,靠的就是默克尔树。
每个 $BTC 区块的区块头里都存着一个默克尔根,对应这个区块里的全部交易。目前 82,509.28(24h +0.89%)。
【一棵怎样的树】
默克尔树是一种把大量数据两两哈希、逐层往上合并的树形结构。最底层是每笔交易的哈希;相邻的两个哈希拼在一起再算一次哈希,得到上一层;一直往上合并,最后只剩一个哈希,叫默克尔根。
这种结构以密码学家拉尔夫·默克尔(Ralph Merkle)的名字命名,在上世纪 70 年代末就已提出,比区块链早得多。
【为什么改不动】
比特币的区块头里记着默克尔根。区块里任何一笔交易被改动,它的哈希就会变,变化一路往上传到默克尔根,区块哈希也跟着变,后面的区块就都对不上了。
所以只要盯住区块头里这一个哈希,就等于盯住了区块里的全部交易。
【轻钱包怎么验证交易】
要证明某笔交易在某个区块里,不需要整个区块,只需要从这笔交易到默克尔根路径上的少量哈希。交易数量翻倍,需要的哈希只多一个,几千笔交易的区块,十几个哈希就够了。
比特币白皮书第 8 节描述的简化支付验证(SPV)就是这样工作的:轻客户端只保存区块头,再向节点要一条默克尔路径,就能确认交易已经被打包。
【储备金证明里的应用】
交易所的储备金证明也用到了默克尔树:平台把所有用户的余额做成一棵默克尔树,公布根哈希;每个用户拿到属于自己的路径,就能自己验证余额有没有被计入,而不用公开其他人的明细。
【小结】
默克尔树的思路很简单:用一个短短的根哈希,代表一大堆数据。正是这个设计,让手机钱包、储备金证明这些应用变得可行。刚开始的时候总觉得会看 K 线就够了,后来才发现规则才算入门课。任何回报背后都伴随着相应的风险,多看清最坏的情况。
有收获的话收藏起来,以后翻出来看。
随手记录,买卖请自行决定。