SPV 驗證

簡化支付驗證機制

簡化支付驗證(SPV)原理詳解

SPV(Simplified Payment Verification,簡化支付驗證)是中本聰比特幣白皮書中提出的創新概念,讓輕客戶端能在不下載完整區塊的情況下驗證交易。

為什麼需要 SPV?

完整節點的問題

SPV 的解決方案

SPV 的核心原理

區塊頭結構

每個區塊包含:

Merkle 樹結構

                    Merkle Root
                       /\
                     /    \
                   /        \
                 /            \
           Hash(AB)          Hash(CD)
             /\                /\
           /    \            /    \
        Hash(A)  Hash(B)  Hash(C)  Hash(D)
           |        |        |        |
         TX1       TX2     TX3      TX4

驗證流程

  1. 下載區塊頭:從網路獲取所有區塊頭
  2. 獲取交易證明:向節點請求某交易的 Merkle 證明
  3. 驗證區塊頭:確認區塊存在於最長鏈
  4. 驗證交易:使用 Merkle 證明確認交易在區塊中

SPV 的安全性

信任模型

SPV 節點信任礦工

攻擊向量

  1. Sybil 攻擊
  1. 芬靈攻擊
  1. 費用劫持

SPV 的實現

Bitcoin Core 的 SPV 模式

# 啟動修剪節點
bitcoind -prune=550

# 或使用 -blockfilterindex 啟用 SPV
bitcoind -blockfilterindex=1

輕量級錢包

常見 SPV 錢包:

Bloom 過濾器

早期 SPV 使用 Bloom 過濾器:

Neutrino 協議

新的 SPV 協議:

SPV vs 完整節點

特性SPV完整節點
儲存需求~6MB~500GB
頻寬需求
隱私性較低較高
安全性信任礦工自主驗證
驗證交易部分完整

實務建議

何時使用 SPV

何時使用完整節點

混合方案

驗證工具

命令列驗證

# 獲取區塊頭
getblockheader <block_hash>

# 獲取 Merkle 證明
gettxoutproof '["txid1", "txid2"]'

在線工具


相關文章

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!