選幣策略
選幣(Coin Selection)是錢包決定使用哪些 UTXO 作為交易輸入的過程,直接影響手續費、隱私和 UTXO 集合管理。
為什麼選幣很重要?
每筆比特幣交易必須完整花費一個或多個 UTXO。錢包需要選擇足夠的 UTXO 來支付目標金額加上手續費,並產生找零輸出。這個選擇會影響:
- • 手續費:更多輸入 = 更大交易 = 更高費用
- • 隱私:輸入連結暴露地址關聯
- • UTXO 碎片化:影響未來交易成本
- • 找零輸出:產生新的 UTXO 需要未來花費
選幣問題
假設你的錢包有以下 UTXO:
可用 UTXO
UTXO A: 0.5 BTC (bc1q...abc)
UTXO B: 0.3 BTC (bc1q...def)
UTXO C: 0.1 BTC (bc1q...ghi)
UTXO D: 0.05 BTC (bc1q...jkl)
UTXO E: 0.01 BTC (bc1q...mno)
總計:0.96 BTC
如果要發送 0.35 BTC,錢包有多種選擇:
| 方案 | 輸入 | 找零 | 大小 |
|---|---|---|---|
| 1 | A (0.5) | ~0.15 BTC | 1 輸入 |
| 2 | B + C (0.4) | ~0.05 BTC | 2 輸入 |
| 3 | B + C + D (0.45) | ~0.10 BTC | 3 輸入 |
| 4 | B + D + E + ... | 可能精確 | 多輸入 |
常見選幣演算法
1. 最大優先 (Largest First)
優先選擇金額最大的 UTXO,直到滿足目標金額。簡單但通常不是最優選擇。
優點
- • 實現簡單
- • 減少輸入數量
缺點
- • 可能產生大額找零
- • 小額 UTXO 永遠不被使用
2. 先進先出 (FIFO)
按照 UTXO 收到的時間順序選擇,最舊的先使用。
優點
- • 避免 UTXO 積壓
- • 隱私:混合新舊幣
缺點
- • 不考慮費用優化
- • 可能產生大交易
3. Branch and Bound (BnB)
Bitcoin Core 使用的主要演算法。嘗試找到精確匹配目標金額的 UTXO 組合, 完全避免找零輸出。
無找零交易的好處:
- • 省下一個輸出(約 31-43 vBytes)
- • 減少 UTXO 集合膨脹
- • 提升隱私(無法識別找零)
# BnB 搜尋示例
目標:0.36 BTC(含手續費)
嘗試:B + C + E = 0.3 + 0.1 + 0.01 = 0.41 ✗
嘗試:B + D + E = 0.3 + 0.05 + 0.01 = 0.36 ✓
精確匹配,無需找零!
4. 隨機抽樣 (Random)
隨機選擇 UTXO 直到滿足目標。常作為備選方案或與其他策略結合使用。
5. Knapsack
經典的背包問題解法。Bitcoin Core 的 BnB 失敗時會回退到這個方法。 嘗試最小化找零金額。
影響選幣的因素
費率環境
當前費率直接影響最優策略:
| 費率 | 策略 | 原因 |
|---|---|---|
| 低費率 | 多輸入,整合 UTXO | 趁便宜清理碎片 |
| 中等費率 | 平衡選擇 | 正常交易 |
| 高費率 | 最少輸入,避免小 UTXO | 減少費用 |
灰塵限制 (Dust Limit)
當 UTXO 金額太小,花費它的手續費可能超過其價值。這類 UTXO 被稱為「灰塵」。
# 灰塵判斷
P2WPKH 輸入大小 ≈ 68 vBytes
若費率 = 50 sat/vB
花費成本 = 68 × 50 = 3,400 sats
# 小於 3,400 sats 的 UTXO 就是灰塵
隱私考量
地址連結
當多個 UTXO 作為同一筆交易的輸入時,它們被假設屬於同一個人。 這稱為「共同輸入所有權假設」(Common Input Ownership Heuristic)。
隱私洩露: 如果地址 A 和地址 B 的 UTXO 同時作為輸入, 區塊鏈分析可以推斷這兩個地址屬於同一實體。
找零識別
分析者可以通過多種方式識別找零輸出:
- • 金額啟發:找零通常是「奇怪」的數字
- • 地址類型:找零使用相同地址類型
- • 輸出順序:找零位置可能有規律
隱私優化策略
- ✓ 避免合併來自不同來源的 UTXO
- ✓ 使用無找零選幣(BnB)
- ✓ 考慮使用 CoinJoin 或 PayJoin
- ✓ 隨機化輸出順序
UTXO 管理最佳實踐
低費率時整合
週末或夜間,將小額 UTXO 合併成較大的
避免過度碎片化
接收時盡量使用較少的地址和較大的金額
標籤化 UTXO
記錄 UTXO 來源,避免混合不同隱私等級的幣
使用手動選幣
進階錢包允許手動選擇 UTXO,更好地控制隱私
錢包實作
不同錢包的選幣策略:
| 錢包 | 演算法 | 手動選幣 |
|---|---|---|
| Bitcoin Core | BnB + Knapsack | 支援 |
| Sparrow | 多種可選 | 支援 |
| Electrum | 可配置 | 支援 |
| 一般手機錢包 | 自動 | 不支援 |