我对Merkle和它的工作原理有基本的理解,现在我将它作为白名单验证来实现到我的智能契约中。
我将根存储在智能契约中,在智能契约中实现了验证功能(以验证为参数)。
使用smart契约进行验证,我们将调用smart契约中的验证函数,并通过验证。这就是困扰我的原因。为了得到证明,我们需要完整的叶子列表,生成一棵树,并得到证明。
实现这一点的最佳方法是什么?我心里有几个想法。
大多数教程不显示脱链部分。
希望你能帮我。
谢谢。
发布于 2022-09-24 14:19:47
如果一组叶子是不可变的,这意味着一旦生成它们就不会改变(不会添加新的休假)。然后您可以在需要时生成特定休假的证据,然后缓存它。只在需要的时候生成证据,如果你知道它会经常被使用,你就可以缓存它。如果没有,就没有必要缓存它,它可以在需要时生成。
如果要经常使用任何叶子,那么您可以创建树并将它保存/缓存到某个地方,因此,当有人想要为特定的叶子生成一个证据时,他们可以在O(log n)时间完成它,这是非常有效的。
现在的问题是,如果要将更多的叶子添加到集合中,那么叶子集是否是可变的。因为您将不能简单地生成一次树并重用它。如果叶集已被修改,则每次要生成叶的证明时,都需要生成树,因为根会明显改变。
如果这组叶子将是可变的,那么契约就需要知道根目录何时发生变化并更新其根。
这是块链的优点之一,因为事务存储在一个不可变的块中,所以不需要每次都生成Merkle树。因此,检查您需要的需求,并验证这组叶子是否是不可变的,或者您是否可以做一些其他的事情来确保它们不会。
如果叶子集是不可变的,那么只生成一次树,并且需要O(log n)来生成任何休假的证明。这是有效的,可以在任何时候完成。
为每一次休假保存证据是很浪费空间的。如果存储Merkle树,就不需要这样做,因为从它生成任何证据是非常有效的。
没有必要生成树,然后每次生成证明,除非这组叶子是可变的,我不建议您保留一组可变的叶子。检查您是否可以以某种方式避免它是可变的,并将它们组织在“块”中,以防需要。
https://ethereum.stackexchange.com/questions/136258
复制相似问题