Merkle-Tree
事務查找期間的 Merkle 樹重新計算
當全節點收到來自 SPV 客戶端的請求以檢查區塊鏈中是否存在給定交易時 - 它是否總是在執行中重新計算 merkle 樹以便將 merkle 路徑 + 塊頭返回給給定交易 ID 的 SPV 客戶端?
從性能的角度來看,它看起來如何?例如,是否有任何 merkle 樹記憶體?因為據我了解,節點必須執行以下步驟:
- 查找存在給定事務 ID 的塊
- 從該塊中獲取所有交易
- 計算默克爾樹
- 返回具有確認 merkle 根所需的相關雜湊的 merkle 路徑
首先:Bitcoin Core 預設不再支持 BIP37,因為它可以用作計算、磁碟 I/O 和頻寬攻擊(因為你提出的觀點),而且它的隱私屬性一開始就很弱. 它仍然可以使用 啟用
-peerbloomfilters
,但更現代的方法不應該依賴它。
- 查找存在給定事務 ID 的塊
在 P2P 協議中無法發出任意交易請求。您只能詢問最近宣布的交易(通過 txid 或 wtxid),或確認區塊(通過區塊雜湊)。
在 BIP37 的情況下,客戶端可以將“有趣”地址/腳本/事務的過濾器發送到伺服器,然後請求塊。然後,伺服器將過濾塊中匹配過濾器的事務,並用這些來響應。但這確實需要客戶端單獨請求所有塊——它不能要求伺服器去任何地方尋找某個交易。
- 從該塊中獲取所有交易
- 計算默克爾樹
- 返回具有確認 merkle 根所需的相關雜湊的 merkle 路徑
對於客戶端向伺服器請求過濾塊的情況,這些步驟是正確的。