参考资料
Merkle Tree
Merkle Tree
,也叫默克尔树或哈希树,是区块链的底层加密技术,被比特币和以太坊区块链广泛采用。
Merkle Tree
是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的 2
个子节点的哈希。
Merkle Tree
允许对大型数据结构的内容进行有效和安全的验证( Merkle Proof
)。
对于有 N
个叶子结点的 Merkle Tree
,在已知 root
根值的情况下,验证某个数据是否有效(属于 Merkle Tree
叶子结点)只需要log(N)
个数据(也叫 proof
),非常高效。如果数据有误,或者给的 proof
错误,则无法还原出 root
根植。 下面的例子中,叶子 L1
的 Merkle proof
为 Hash 0-1
和 Hash 1
:知道这两个值,就能验证 L1
的值是不是在 Merkle Tree
的叶子中。
为什么呢? 因为通过叶子 L1
我们就可以算出 Hash 0-0
,我们又知道了 Hash 0-1
,那么Hash 0-0
和Hash 0-1
就可以联合算出Hash 0
,然后我们又知道Hash 1
,Hash 0
和Hash 1
就可以联合算出Top Hash
,也就是 root
节点的 hash
。
生成Merkle Tree
我们可以利用 网页 或者 Javascript
库 merkletreejs 来生成 Merkle Tree
使用
1 | pragma solidity ^0.8.0; |
我们的参数如下
1 | [ |
执行参数如下
proof
[ "0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb", "0x4726e4102af77216b09ccd94f40daa10531c87c4d60bba7f3b3faf5ff9f19b3c" ]
root
0xeeefd63003e0e702cb41cd0043015a6e26ddb38073cc6ffeb0ba3e808ba8c097
leaf
0x5931b4ed56ace4c46b68524cb5bcbf4195f1bbaacbe5228fbd090546c88dd229