使用 Utreexo 累加器设置 UTXO 的证明

Proofs for UTXO set with Utreexo accumulator

我正在尝试了解 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 时收到的证明)将不正确。如何处理这个问题?还是我理解错了什么?

您正在了解 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.[=26= 的证明计算的匹配。 ]

所以对于这棵树,生成的证明将是节点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.

的证明不同

在比特币术语中,由于在生成新块时会发生对累加器的修改,因此每个块的证明都会发生变化。