節點應該如何使用 Utreexo 更新其包含證明?
使用Utreexo,全節點無需儲存 UTXO 集即可建構和驗證區塊。這是通過使用交易中的 UTXO 包含在 Utreexo 累加器中的證明來完成的。這些證明隨交易一起廣播。要更新 Utreexo 累加器,唯一需要的是添加 UTXO,並刪除現在使用的輸出的包含證明。
但是,我在論文中沒有看到任何地方描述瞭如何在這個過程中更新未使用的包含證明。它只提到“維護和更新集合中每個元素的證明不會在計算根之外產生額外的計算成本”。我猜想在添加或刪除葉子的過程中,每個證明更改的UTXO都會被觸及,因此可以很容易地同時提取。有誰更深入地了解這個過程是如何發生的?
另外,還有一個額外的問題:其他類型的累加器(例如 RSA 累加器)是否有辦法像這樣使證明保持最新?
快速回答:
我沒有在論文中看到任何描述未使用的包含證明如何在此過程中更新的地方
對於單個塊,發送單個批次證明。沒有未使用的包含證明,因為只發送了一個。這種“批量證明”證明了給定塊中包含所有 UTXO。
僅在用於將進入記憶體池的交易時發送僅證明包含單個 utxo 的“證明”。
在此過程中如何更新未使用的包含證明
由於單個 utxo 的證明因塊而異,因此不會每次說“更新”,但會為每個新塊生成一個新證明。
更長的答案:
我沒有在論文中看到任何描述未使用的包含證明如何在此過程中更新的地方
為了回答你的問題,我們需要看看當接收一個塊和接收一個交易時,累加器證明會有什麼不同。
我們記得 Utreexo 本質上是一棵Merkle 樹。Utreexo 節點只需要保留這棵樹的根。對於這樣的樹:
14 |---------------\ 12 13 |-------\ |-------\ 08 09 10 11 |---\ |---\ |---\ |---\ 00 01 02 03 04 05 06 07
Utreexo 節點只能保留根節點,並且仍然是完全驗證節點。此類節點的樹視圖可能如下所示:
14 |---------------\ |-------\ |-------\ |---\ |---\ |---\ |---\
“證明”是雜湊到根所需的所有 utxos。對於上面的樹樹,為了證明包含 00,證明將包括 (
01
,09
,13
)的雜湊驗證節點會像這樣製作一棵樹並散列到根節點。如果
14
從包含證明計算的結果與14
它儲存的匹配,00
則驗證 utxo 存在。14 |---------------\ 13 |-------\ |-------\ 09 |---\ |---\ |---\ |---\ 00 01
為了證明 utxo
01
,證明將包括 (00, 09, 13) 的雜湊值。
01
注意和的證明中的重疊00
。09
和13
都需要00
和01
。此外,01
需要證明00
和00
需要證明01
。如果給出上述證明
00
,我們還可以驗證01
:14 |---------------\ 13 |-------\ |-------\ 09 |---\ |---\ |---\ |---\ 00 01
因為一個區塊有很多這樣的重疊,我們可以只發送一個證明來驗證所有正在使用的 utxos。沒有未使用的證明可言。
在此過程中如何更新未使用的包含證明
我發現不要將 Utreexo 視為生成證明的黑盒,而是將其視為樹結構,這很有幫助。
這棵樹每個塊都會更新。因此,對於每個新區塊,所需的證明都會發生變化。
對於上面的樹:
14 |---------------\ 12 13 |-------\ |-------\ 08 09 10 11 |---\ |---\ |---\ |---\ 00 01 02 03 04 05 06 07
如果這棵樹被刪除了 node
07
。生成的樹將如下所示:12 |-------\ 08 09 10 |---\ |---\ |---\ 00 01 02 03 04 05 06
注意 的證明是如何從 ( , , ) 的前一個證明
00
變為 (01
, ) 的。09``01``09``13
在實現中,沒有任何“證明”被保存和更新,而是一個用於派生證明的塊的單一樹。