Merkle 树方法的优点在于,我们只需要向支付池中写入 32 字节的 Merkle 根,并且可以存在 Merkle 树中的收款人数量没有上限。无论 Merkle 树代表多少收款人,我们都只需要为树写一个 32 字节的 Merkle 根:对于无数收款人, gas 费则可以分计。 我们中许多人都知道:Merkle 树 [6] 是一种新颖的二叉树结构体,它使我们能够轻松,廉价地确认树中是否确实存在节点。Merkle 树构成了以太坊的基础,并有助于以太坊节点无需区块链的完整历史即可验证区块的能力。 Merkle 树最重要的方面是:
Merkle 根 我们将关心的数据放在 Merkle 树的叶节点中。有许多可用的代码库可以执行此操作,给库中提供一个数组,库将对数组进行排序,并使用提供的已排序数组构成 Merkle 树的叶节点来构建 Merkle 树结构体。库会提供 Merkle 树的根,它也可以为任何节点提供证明,其中证明是该节点的哈希与叔叔们 hash 列表,当与节点的哈希值加在一起时,就是默克尔根。 我们可以验证节点是否确实存在于 Merkle 树中的方法是添加带有其证明的节点,然后查看该结果是否等于根节点。OpenZepplin 有一个 Solidity 库 [7] 用来验证。 在此示例中,检查树中是否存在 L2,我们通过在 hash(L2) 上加入哈希 A 和哈希 B,来确认总和的哈希是否「根节点」的哈希值 Merkle 树支付池我们如何在支付池中利用 Merkle 树? 这种方法利用了需要链上和链下机制的方法。为了生成 Merkle 树,我们可以使用链下程序 (例如 NodeJS 模块) 从收款人及其付款金额列表中构建 Merkle 树。采用这种方法,每个节点都是收款人地址及其付款金额的字符串连接。 考虑以下收款人清单: 收款人清单 我们可以将此列表转换为如下所示的数组: 列表 然后,我们可以从该列表构建 Merkle 树,合约所有者可以将 Merkle 根提交到支付池合约。而且,我们也可以在一些地方 (例如 IPFS) 发布这些叶节点及其证明数据,以便收款人可以访问此数据。 (责任编辑:admin) |