使用 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
.
的证明不同
在比特币术语中,由于在生成新块时会发生对累加器的修改,因此每个块的证明都会发生变化。
我正在尝试了解 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
.
在比特币术语中,由于在生成新块时会发生对累加器的修改,因此每个块的证明都会发生变化。