跳至主要內容
Standards Track Draft

BIP-158: 緊湊區塊過濾器

定義緊湊區塊過濾器的格式,使用 Golomb-Rice 編碼壓縮資料,搭配 BIP-157 使用。

Olaoluwa Osuntokun, Alex Akselrod 2017年5月24日
BIP 編號

158

類型

Standards Track

狀態

Draft

創建日期

2017-05-24

摘要

BIP-158 定義了一種緊湊的區塊過濾器格式,使用 Golomb-Rice 編碼來壓縮區塊中的 腳本和輸出資料。輕客戶端可以下載這些過濾器,在本地檢查是否有與自己相關的交易。

過濾器概念

過濾器是一種概率資料結構,可以快速判斷「某元素可能在集合中」或「某元素肯定不在集合中」:

查詢結果:False

元素肯定不在集合中。可以跳過這個區塊。

查詢結果:True

元素可能在集合中(有假陽性機率)。需要下載完整區塊確認。

過濾器類型

BIP-158 目前定義了一種過濾器類型:

Basic Filter(類型 0x00)

包含:

  • • 區塊中所有交易輸出的 scriptPubKey
  • • 區塊中所有交易輸入花費的 scriptPubKey(不含 coinbase)

這足以讓錢包發現與自己地址相關的交易。

Golomb-Rice 編碼

基本原理

Golomb-Rice 編碼是一種變長編碼,對於某些數值分布可以達到接近最優的壓縮率:

給定參數 P(2 的冪次),對數值 x 編碼:

1. 計算商 q = x / P
2. 計算餘數 r = x % P

3. 編碼 q:使用一元碼(q 個 1 後跟一個 0)
4. 編碼 r:使用 log2(P) 個位元

範例(P = 4, x = 11):
• q = 11 / 4 = 2
• r = 11 % 4 = 3
• 編碼 = 110(一元碼)+ 11(2 位元)= 11011

過濾器構建

構建過濾器的步驟:

1. 收集元素
   elements = [scriptPubKey1, scriptPubKey2, ...]

2. 計算哈希值(使用 SipHash)
   hashes = [SipHash(key, e) for e in elements]

   key = 前一個區塊哈希的前 16 bytes

3. 縮放到目標範圍
   F = N * M  // N = 元素數量,M = 假陽性參數
   scaled = [(h * F) >> 64 for h in hashes]

4. 排序並計算差值
   sorted = sort(scaled)
   deltas = [sorted[i] - sorted[i-1] for i in range(1, N)]

5. Golomb-Rice 編碼差值
   encoded = GolombRice_encode(deltas, P)

參數選擇

參數 說明
M 784931 假陽性率 ≈ 1/784931
P 19 Golomb-Rice 編碼參數
每元素位元 ≈ 20 平均每個腳本約 20 位元

查詢過濾器

查詢過濾器的步驟:

1. 計算查詢元素的哈希和縮放值
   query_hash = SipHash(key, query_script)
   query_scaled = (query_hash * N * M) >> 64

2. 解碼過濾器,重建排序後的值集合
   values = decode_filter(filter_data)

3. 二分搜索
   return binary_search(values, query_scaled)

假陽性場景:
• 查詢返回 True,但區塊實際不包含該腳本
• 發生機率 ≈ 1/M ≈ 1/784931
• 每約 1200 個區塊會有一次假陽性

過濾器大小

過濾器比完整區塊小得多:

~15 KB

典型區塊過濾器大小

~1.5 MB

典型區塊大小

~1%

過濾器/區塊比例

與 Bloom Filter 比較

特性 BIP-37 Bloom BIP-158 GCS
構建方 客戶端 伺服器
隱私
可驗證
每元素位元 ~10 ~20
頻寬效率 更低(按需) 較高(下載所有)

安全性

惡意伺服器

  • 假陰性攻擊:伺服器提供少了某些元素的過濾器, 客戶端會漏掉相關交易。解決方案:從多個獨立節點獲取並比較。
  • 過濾器頭鏈:使用過濾器頭鏈可以檢測篡改, 但不能防止所有節點串通。

總結

BIP-158 定義了一種高效的區塊過濾器格式,使用 Golomb-Rice 編碼達到接近最優的壓縮率。 結合 BIP-157 的 P2P 協議,為輕客戶端提供了隱私優先的同步方案。 雖然需要下載更多資料,但換來的是更好的隱私保護。

已複製連結
已複製到剪貼簿