Blockchain

下載“最近的”UTXO 集快照的最佳方式是什麼?

  • January 31, 2022

我正在使用 bitcoinj 來收聽付款。我需要一種方法來維護本地數據庫中的整個 UTXO 集。

  1. 可以使用 bitcoinj 下載每個塊(我認為它只下載最近的塊和舊塊的標題)?
  2. 如果存在更好的解決方案,我不需要使用 bitcoinj 甚至 Java 來創建或維護這個數據庫。有這樣的嗎?

理想情況下,我想要一個只下載 UTXO 集而不下載整個區塊鏈(由於頻寬限制)並從那時起維護它的錢包。這需要是整個集合,而不僅僅是我擁有的地址。此外,我需要一個允許以下查詢的 API:

  1. 給定一個 UTXO,檢查它是否存在於集合中。
  2. 給定一個地址,給我所有的 UTXO。

我認為目前無法在不下載整個區塊鏈的情況下驗證給定的 UTXO 集,因此在這方面的一些解決方案也將受到讚賞。

是的,預設情況下,bitcoinj 從 Genesis 下載完整的塊。僅當您連接錢包時,它才會使用檢查點和過濾器等優化。

僅僅下載 UTXO 集(以無信任的方式)是不可能的,因為比特幣協議不是為此而設計的。你可以從區塊瀏覽器和 Electrum 伺服器獲取 UTXO,但它沒有加密證明。

正如 Andreas 所寫,僅下載 UTXO 集(以無信任的方式)是不可能的。我希望它是可能的,所以我已經考慮過如何做到這一點……

每個塊辨識來自先前塊中的交易,這些交易在 UTXO 集中並且不再在其中,並且還完全指定了目前塊添加到 UTXO 集中的所有交易。這意味著如果您已經擁有完整且經過驗證的 UTXO 集,並且有人想知道 N 個塊前的 UTXO 集是否有效,您可以提供答案。他們是否信任你是另一回事。如果您的集合是有效的,那麼您可以撤消 N 個塊所指示的交易的加減,計算一個雜湊,然後將該雜湊發送給其他人。如果他們在他們的集合上獲得相同的雜湊,他們可以安全地假設您使用相同的 UTXO 集來獲得他們使用的雜湊(即,他們匹配)。

可能已經有軟體可以做到這一點。我想要那個。但是沒有證據表明你們中的任何一個都有正確的UTXO 集。我希望每個人都能解決這個問題,但這需要一點引導。我有一個計劃:

  1. 創建將 SHA256 雜湊渲染成令人難忘和獨特的軟體。這比聽起來要復雜一些。無論渲染產生什麼(音樂、藝術、動畫、組合……)都必須(至少)有 256 個不同的二進制屬性,這些屬性很容易被記住。任何人都可以使用這個軟體來查看 UTXO 集在最近塊高度上的雜湊是否會產生令人難忘的渲染。
  2. 讓它成為有時會產生令人難忘的渲染的東西。這可以作為區塊鏈的全域檢查點。如果有足夠多的人(判斷呼叫)知道令人難忘的渲染,那麼新安裝的完整節點可以(從任何擁有它的人那裡)獲取該高度的 UTXO,計算雜湊,渲染它,並將結果與每個人的結果進行比較記得。我想這在網際網路上很容易獲得,但在現實生活中與某人交談以避免 Sybil 攻擊的危險更安全。
  3. 更新全節點軟體以提供 UTXO 集作為請求節點指定的塊(使上一步可能用於全新安裝)
  4. 更新全節點軟體,允許使用者指定一個已知的塊高度,該塊高度產生了一個具有可記憶雜湊的 UTXO 集,從對等點請求該塊的 UTXO 集,從答案的雜湊創建渲染,並顯示它給使用者。
  5. 允許使用者指示渲染匹配,如果使用者指示,則跳過下載區塊鏈(除了規範 UTXO 集中未包含的任何部分 - 如果有)以節省頻寬和磁碟空間,然後開始使用作為答案的 UTXO 集。

出於同樣的原因,不能使用深度小於 100 塊的已開採比特幣(即,不太可能重組 100 塊 - 甚至可能不支持?),這種策略允許我們繼續處理至少 100 個歷史塊而不是整個區塊鏈。

這將確保使用全節點軟體的人設置起點 UTXO 的完整性的責任。它必須進行一段時間的實驗,直到證明不再需要從零到 X 的塊(因為設置在塊高度 X 的 UTXO 令人難忘,足以被使用此新功能的人類辨識),從而減少了區塊鏈需要不斷增加的儲存量到可能會趨於平穩的儲存量。

這個想法對我的部分吸引力在於,UTXO 集的隨機 SHA256 雜湊可以被渲染成令人難忘的東西,發生這種情況的機會很低但不是零,就像挖礦本身一樣。不同的渲染算法可以競爭。我只想到一個…

雜湊的 256 位加上塊高度的 32 位可用於指示 16x18 生命遊戲中的哪些單元格處於打開狀態。讓生命的遊戲執行起來。看它。記住它是如何穩定的。有些遊戲最終會清除棋盤。那是令人難忘的。它如何清除董事會也將是令人難忘的。

我開始尋找一個規範的 UTXO 集(即,其結構是標準化的,因此同一組 UTXO 將具有與數據相同的表示)。使用Golly或任何其他實現 John Conway 的“生命遊戲”的軟體可以很容易地將 SHA256 雜湊加上 32 位塊高度轉換為生命遊戲,看看它是如何發揮作用的。

所以我和OP有同樣的追求,但安德烈亞斯有道理。您必須執行一個完整的節點並自己創建它。但是,一旦你這樣做了,你就可以將它提供給其他人(我!)。他還指出,除了執行一個完整的節點並為每個事務重複更新它的所有工作之外,沒有辦法證明它是正確的。在沒有所有工作的情況下證明結果是正確的是我在這個答案中提出的想法的目標。

引用自:https://bitcoin.stackexchange.com/questions/53865