Wallet

如何使用 SPV 驗證尚未(尚未)在區塊鏈上的交易?

  • October 3, 2021

SPV 系統(如比特幣白皮書中所述)允許:“無需執行完整的網路節點即可驗證付款。” 您只需要整個有效區塊鏈的標頭(少量數據,隨時間線性增長)(當然,您需要對等方從中獲取包含證明)。

我很確定這裡的“付款”是指已經包含在有效區塊中的交易(輸出到您感興趣的地址)。

但是這個方案本身不能用來驗證一個新的交易。這可以通過區塊鏈標頭加上UTXO 集來完成。 那是更多的數據(今天,2021 年 10 月 2 日,UTXO 集約為 4¼GB,明顯超過 53½MB 的區塊鏈標頭集,儘管對於今天的機器來說比比特幣開始時更合理)。

因此,如果您(例如,商家)想要一個“輕錢包”——比完整節點更輕!- 驗證提議的付款是否良好(不包括已經花費的輸入),這就是您需要的。

這是怎麼做到的?

  • 是否可以在比特幣網路中查詢您需要的 UTXO?
  • 您是否通過偵聽新塊並驗證它們並更新您的 UTXO 集然後丟棄塊(保留標題)來保留自己的 UTXO 集 - 在首先以某種方式引導您的 UTXO 集而無需獲取整個區塊鏈之後?
  • 只需接受 Satoshi 的建議(來自白皮書):“接收頻繁付款的企業可能仍希望執行自己的節點以實現更獨立的安全性和更快的驗證。”
  • 還有什麼?
  • 我上面所說的信念是錯誤的嗎?

(我對您自己驗證這些事情的解決方案感興趣,而不是您要求第 3 方進行驗證的解決方案,這在哲學上類似於 SPV 本身。另外,我知道上面我所說的“驗證”確實是“臨時驗證”取決於競爭條件,即在提議的交易進入區塊之前,區塊鏈上的交易可能會花費一個或多個輸入。)

額外問題:這種錢包叫什麼?(介於僅 SPV 的“輕”錢包和完整節點之間。)

第二個獎勵問題:是否有任何錢包軟體可以做到這一點,你可以指出我可以看一下嗎?

SPV 錢包根本無法驗證任何容量的未確認交易。正如您正確指出的那樣,沒有經過驗證的 UTXO 意味著 SPV 錢包可以建立的絕對最佳狀態是可能存在可用於確認的交易,但它無法確定任何相關資訊。

是否可以在比特幣網路中查詢您需要的 UTXO?

您不能向不受信任的第三方索取此資訊,因為他們總是會因遺漏而撒謊,因為默克爾證明僅證明 UTXO 已經存在,而不是證明它仍然存在(此後未在任何區塊中使用過)。

您是否通過偵聽新塊並驗證它們並更新您的 UTXO 集然後丟棄塊(保留標題)來保留自己的 UTXO 集

您無法驗證新塊,因為如果沒有它們的先前參考,您就無法確定其中交易的有效性。但是,您可以只執行一個修剪過的節點,它只保留經過驗證的 UTXO 和少量塊,而不是整個歷史記錄。

還有什麼?

不信任地接受比特幣付款的唯一正確方法是執行一個完全驗證節點。值得一提的是,中本聰白皮書中對 SPV 的描述並不真正有效。有一種建議是節點可以提醒 SPV 客戶潛在的欺詐行為,並讓他們下載並驗證特定的區塊,但這幾乎是不可能的。根據定義,他們沒有經過驗證的 UTXO,也無法單獨驗證區塊。

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