跳至主要內容
進階

Full RBF

深入了解 Bitcoin Core 的 Full RBF 策略,與傳統 RBF 的區別及影響。

10 分鐘

Full RBF 概覽

Full RBF(Complete Replace-By-Fee)允許替換 mempool 中的任何未確認交易, 無論原始交易是否標記為可替換。這與傳統的選擇性 RBF(BIP-125)形成對比。

RBF 類型比較

選擇性 RBF(BIP-125)

  • • nSequence < 0xFFFFFFFE
  • • 發送者明確選擇
  • • 錢包可識別
  • • 預設策略

Full RBF

  • • 任何未確認交易
  • • 無需發送者標記
  • • 需要節點啟用
  • • v24.0+ 可選

歷史背景

RBF 演進歷史:

2013: 交易替換最初被禁用
      └── 防止垃圾交易攻擊

2016: BIP-125 選擇性 RBF
      ├── nSequence 信號機制
      ├── 發送者可選擇加入
      └── 接收者可識別

2022: Full RBF 討論
      ├── mempoolfullrbf 選項提議
      ├── Bitcoin Core v24.0 加入
      └── 預設關閉

2023: Full RBF 逐漸採用
      ├── 更多節點啟用
      └── 礦池開始接受

爭議點:
┌─────────────────────────────────────────────────────────────┐
│ 支持者:                        │ 反對者:                 │
├─────────────────────────────────────────────────────────────┤
│ • 反映經濟現實                  │ • 破壞 0-conf 交易       │
│ • 防止交易卡住                  │ • 影響商家體驗           │
│ • 簡化用戶體驗                  │ • 改變社會契約           │
│ • 減少 pinning 攻擊             │ • 歷史行為改變           │
└─────────────────────────────────────────────────────────────┘

配置選項

# bitcoin.conf

# 啟用 Full RBF(v24.0+)
mempoolfullrbf=1

# 預設值(關閉)
mempoolfullrbf=0

# v28.0+ 可能成為預設行為
# 檢查節點的 Full RBF 設置
bitcoin-cli getmempoolinfo | jq '.fullrbf'

# 查看 mempool 策略
bitcoin-cli getmempoolinfo

# 輸出示例
{
  "loaded": true,
  "size": 50000,
  "bytes": 25000000,
  "usage": 80000000,
  "total_fee": 1.5,
  "maxmempool": 300000000,
  "mempoolminfee": 0.00001000,
  "minrelaytxfee": 0.00001000,
  "incrementalrelayfee": 0.00001000,
  "unbroadcastcount": 0,
  "fullrbf": true  # Full RBF 狀態
}

行為差異

交易替換行為:

選擇性 RBF(mempoolfullrbf=0):
┌─────────────────────────────────────────────────────────────┐
│ 原始交易                        │ 替換結果                 │
├─────────────────────────────────────────────────────────────┤
│ nSequence = 0xFFFFFFFD (可替換) │ ✓ 允許替換              │
│ nSequence = 0xFFFFFFFF (最終)   │ ✗ 拒絕替換              │
└─────────────────────────────────────────────────────────────┘

Full RBF(mempoolfullrbf=1):
┌─────────────────────────────────────────────────────────────┐
│ 原始交易                        │ 替換結果                 │
├─────────────────────────────────────────────────────────────┤
│ nSequence = 0xFFFFFFFD (可替換) │ ✓ 允許替換              │
│ nSequence = 0xFFFFFFFF (最終)   │ ✓ 允許替換(忽略標記)  │
└─────────────────────────────────────────────────────────────┘

替換規則(兩者相同):
├── 新交易手續費 > 舊交易手續費
├── 新費率 >= 舊費率 + 增量
├── 新交易不能添加未確認輸入
└── 新交易信號數必須 >= 舊交易

實際影響

Full RBF 對不同角色的影響:

用戶/發送者:
├── 優勢:可以替換任何卡住的交易
├── 優勢:不需要提前決定是否可替換
└── 風險:第三方可能嘗試替換你的交易

商家/接收者:
├── 0-conf 變得不可靠
├── 需要等待至少 1 確認
└── 或使用額外的安全措施

礦池/礦工:
├── 可以接受更高手續費的替換
├── 經濟激勵明確
└── 大多數礦池已支持

閃電網路:
├── 有助於及時關閉通道
├── 防止某些 pinning 攻擊
└── 增強安全性

Full RBF 好處

  • • 解決交易卡住問題
  • • 簡化用戶體驗
  • • 反映挖礦經濟現實
  • • 減少 pinning 攻擊
  • • 增強閃電網路安全

需要考慮

  • • 0-conf 交易不再安全
  • • 商家需要調整流程
  • • 可能增加雙花嘗試
  • • 需要等待確認

0-Conf 安全性

0-Conf 交易安全性分析:

即使沒有 Full RBF,0-conf 也有風險:
┌─────────────────────────────────────────────────────────────┐
│ 攻擊向量                        │ Full RBF 前 │ Full RBF 後│
├─────────────────────────────────────────────────────────────┤
│ 礦工直接挖雙花                  │ 可能        │ 可能       │
│ 找到接受 RBF 的礦池             │ 可能        │ 更容易     │
│ 通過特定節點廣播                │ 可能        │ 可能       │
│ 賄賂礦工                        │ 可能        │ 可能       │
└─────────────────────────────────────────────────────────────┘

結論:
├── 0-conf 從來不是絕對安全的
├── Full RBF 只是降低了攻擊成本
└── 安全接收應等待確認

替代方案:
├── 等待 1+ 確認
├── 使用閃電網路(即時確認)
├── 客戶身份驗證(非匿名場景)
└── 較小金額可接受風險

使用範例

# 場景:交易卡住,需要替換

# 1. 發送原始交易(無 RBF 標記)
bitcoin-cli sendtoaddress "bc1q..." 0.1

# 交易卡住(手續費太低)...

# 2. 在支持 Full RBF 的節點上創建替換交易
# 使用相同的輸入,更高的手續費

# 獲取原始交易的輸入
bitcoin-cli gettransaction "txid" | jq '.decoded.vin'

# 創建替換交易
bitcoin-cli createrawtransaction '[
  {"txid": "same_utxo_txid", "vout": 0}
]' '[
  {"bc1q...": 0.0999}  # 減少輸出 = 增加手續費
]'

# 簽名並廣播
bitcoin-cli signrawtransactionwithwallet "hex..."
bitcoin-cli sendrawtransaction "signed_hex..."

# 3. 如果連接的節點支持 Full RBF,替換會成功
# 即使原始交易沒有 RBF 標記

網路狀態

Full RBF 採用狀態(估計):

節點:
├── 約 30-40% 節點啟用 Full RBF
└── 比例持續增長

礦池:
├── 大多數主要礦池接受 Full RBF
├── 礦池有經濟激勵接受更高費用
└── 實際替換成功率較高

實際效果:
├── 如果足夠多節點/礦工支持
├── Full RBF 替換可以成功
└── 即使你的節點未啟用

檢查節點支持:
bitcoin-cli getpeerinfo | jq '.[].services_str' | grep -c FULLRBF

未來展望

Full RBF 的未來:

趨勢:
├── 可能成為預設行為(v28.0+?)
├── 選擇性 RBF 標記可能變得不必要
└── 網路會逐漸收斂到這個行為

建議:
┌─────────────────────────────────────────────────────────────┐
│ 對於發送者:                                                │
│ ├── 使用 RBF 標記(向後兼容)                               │
│ ├── 設置合理的初始手續費                                   │
│ └── 準備好使用 RBF/CPFP                                    │
├─────────────────────────────────────────────────────────────┤
│ 對於接收者:                                                │
│ ├── 不要依賴 0-conf                                        │
│ ├── 等待至少 1 確認                                        │
│ └── 或使用閃電網路                                         │
└─────────────────────────────────────────────────────────────┘

總結

  • Full RBF:允許替換任何未確認交易
  • 配置:mempoolfullrbf=1 啟用
  • 趨勢:逐漸被更多節點和礦工採用
  • 注意:0-conf 交易應謹慎對待
已複製連結
已複製到剪貼簿