【问题标题】:Proofs for UTXO set with Utreexo accumulator使用 Utreexo 累加器设置 UTXO 的证明
【发布时间】:2020-10-19 08:33:35
【问题描述】:

我正在尝试了解 Utreexo 技术,但遇到了一个问题。在 Utreexo 中,我们有一片森林,每棵树都有 2^k 片叶子。我们有 3 个操作:

add(acc, newNode) : Proof // simply adds new UTXO to our Utreexo, and returns the proof for added element.
verify(acc, proof) : Bool // gets the proof as argument and checks that the element is still in set.
remove(acc, proof) // removes element with given proof from accumulator.

问题是:我添加了一个新的 UTXO 并得到了证明。之后,发生了一些变化(不同的删减和添加),Utreexo 的结构也发生了变化。现在,如我所见,我的证明(我在添加新 UTXO 时收到的)将不正确。如何处理这个问题?还是我误会了什么?

【问题讨论】:

    标签: algorithm transactions cryptography bitcoin cryptocurrency


    【解决方案1】:

    您正在了解 Utreexo 如何正常工作。为单个累加器状态生成的证明仅对该状态有效。如果累加器发生增删改查,则必须生成新的证明。

    例如,区块#500,000 的单个 UTXO 的证明对区块 #500,001 无效。

    进一步说明:

    在一般意义上,Utreexo 是一个花哨的Merkle Tree。 “证明”是散列到根所需的所有节点。对于这棵树:

     14                                                                                                                                                                                                              
     |---------------\                                                                                                                                                                                               
     12              13                                                                                                                                                                                              
     |-------\       |-------\                                                                                                                                                                                       
     08      09      10      11                                                                                                                                                                                      
     |---\   |---\   |---\   |---\                                                                                                                                                                                   
     00  01  02  03  04  05  06  07
    

    节点只需要保留根,因此节点的树视图可能如下所示,其中仅保留根14

     14                                                                                                                                                                                                              
     |---------------\                                                                                                                                                                                               
                                                                                                                                                                                                                 
     |-------\       |-------\                                                                                                                                                                                       
                                                                                                                                                                                                             
     |---\   |---\   |---\   |---\                                                                                                                                                                                   
      
    

    如果有人想证明节点00 的存在,他们需要提供以下节点:00, 01, 09, 13。这些节点需要能够哈希到14,然后验证者将检查他们存储的14是否与00, 01, 09, 13的证明计算的匹配。

    所以对于这棵树,生成的证明将是节点00, 01, 09, 13

    假设通过删除节点07 来修改树。生成的树将如下所示:

      12                                                                                                                                                                                                              
      |-------\                                                                                                                                                                                                       
      08      09      10                                                                                                                                                                                              
      |---\   |---\   |---\                                                                                                                                                                                           
      00  01  02  03  04  05  06
    

    如果我们想再次证明00,需要的节点是00, 01, 09,我们将它与12匹配。这和之前00, 01, 09, 13的证明不同。

    在比特币术语中,由于在生成新块时会修改累加器,因此证明会因块而异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多