Privacy

SPV 客戶端如何從其他節點獲取交易並驗證它們是區塊鏈的一部分?

  • July 14, 2020

我從許多不同的資源中探索了 SPV 客戶作為一個主題,但有一些事情讓我感到困惑:


  1. 我發現即使 SPV 客戶參與交易驗證,SPV 客戶也沒有記憶體池。那麼,當節點驗證交易時會發生什麼?SPV 客戶是否只檢查自己的傳出交易?
  2. SPV 客戶端嘗試驗證的交易是否具有塊雜湊作為交易來源的參考?當 SPV 向全節點詢問 Merkle 樹的一部分時,SPV 客戶端是如何知道在哪個區塊中搜尋目標交易的?
  3. SPV 客戶端向全節點詢問 Merkle 樹內的雜湊值,因此它可以重建它感興趣的樹的部分,並以這種方式檢查交易是否真的在交易所指的塊中。它是否正確?如果是的話,這兩個客戶還有什麼共同點嗎?
  4. 如果我在正確的道路上,布隆過濾器如何幫助提高隱私級別,因為 SPV 客戶端仍然需要通過其雜湊向完整節點詢問交易?

謝謝你。

  1. 我發現SPV沒有mempool,但是雖然SPV客戶端在參與交易驗證。那麼,當節點驗證交易時會發生什麼?SPV 客戶是否只檢查所有者的傳出交易?

這取決於您所說的“驗證”是什麼意思。SPV 客戶不能也不會自己驗證交易的有效性;他們只能驗證它們是否包含在一個區塊中,這依賴於礦工不會浪費精力創建一個包含無效交易的區塊的假設。

  1. SPV 客戶端試圖驗證的交易有塊雜湊作為參考交易來自哪裡?當 SPV 向全節點詢問 Markle 樹的一部分時,這就是 SPV 客戶端知道在哪個塊中搜尋目標交易的方式。它是否正確?

交易不(也不能)包含它們所包含的塊的雜湊;那將是一個循環依賴。我不明白這個問題的其餘部分。

  1. SPV 客戶端向全節點客戶端詢問 Merkle Tree 中的雜湊值,因此他可以重建他感興趣的樹的部分,並通過這種方式檢查交易是否真的在交易所指的塊中。

使用 BIP37 時,客戶端會發送一個 Bloom 過濾器,其中包含他們感興趣的腳本/地址/utxos,然後請求塊。伺服器以過濾後的塊進行響應,僅包含匹配的交易,以及有效的 Merkle 證明,這些交易實際上位於具有聲明雜湊的塊中。

  1. 如果我在正確的道路上,布隆過濾器如何幫助提高隱私級別,因為 SPV 客戶端仍然需要通過其雜湊向全節點客戶端詢問交易?

BIP37 布隆過濾器主要是一種提高效率的方法——這意味著在頻寬成本很小的情況下,伺服器就知道不向客戶端發送什麼。它旨在選擇性地提供一定程度的隱私,因為客戶端可以選擇發送過於寬泛的過濾器,從而導致誤報。此後發現這基本上根本不提供隱私,因為伺服器仍然可以在請求的事物之間觀察到相關性。

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