Taproot 升級
全面解析 Taproot 升級,包括 Schnorr 簽章、MAST 和腳本路徑。
Taproot 概述
Taproot 是比特幣自 SegWit 以來最重要的升級,於 2021 年 11 月在區塊高度 709,632 激活。 它由三個相關的 BIP 組成:BIP-340(Schnorr 簽名)、BIP-341(Taproot)和 BIP-342(Tapscript)。 這次升級大幅提升了比特幣的隱私性、效率和智能合約能力。
Schnorr 簽名
更高效的數字簽名方案
Taproot
新的輸出類型和花費規則
Tapscript
升級版的腳本語言
Schnorr 簽名 (BIP-340)
Schnorr 簽名是一種比 ECDSA 更優雅的簽名算法,由 Claus Schnorr 發明。 由於專利已過期,比特幣終於可以採用這項技術。
Schnorr vs ECDSA
| 特性 | ECDSA | Schnorr |
|---|---|---|
| 簽名大小 | 70-72 字節 | 64 字節 |
| 密鑰聚合 | 不支持 | 原生支持 |
| 批量驗證 | 不支持 | 支持 |
| 延展性 | 需要額外處理 | 原生不可延展 |
| 安全證明 | 複雜 | 簡潔優雅 |
密鑰聚合
Schnorr 簽名最強大的特性是線性密鑰聚合。多個公鑰可以組合成單一聚合公鑰:
# MuSig2 密鑰聚合
P_agg = P_1 + P_2 + P_3
# 聚合簽名
s_agg = s_1 + s_2 + s_3
優勢:
- n-of-n 多簽看起來像單一簽名
- 鏈上無法區分單簽和多簽
- 節省空間和費用
Taproot 結構 (BIP-341)
Taproot 輸出(P2TR)結合了密鑰路徑和腳本路徑兩種花費方式:
Taproot 輸出公鑰:
Q = P + H(P || merkle_root) * G
其中:
P = 內部密鑰(可用於密鑰路徑花費)
merkle_root = 腳本樹的 Merkle 根
G = 橢圓曲線生成點
H = tagged hash 函數
花費路徑
密鑰路徑 (Key Path)
直接使用內部密鑰簽名花費。這是最高效的方式,看起來與普通單簽交易完全相同。 適用於合作花費場景。
腳本路徑 (Script Path)
揭示並執行腳本樹中的特定腳本。需要提供控制塊和 Merkle 證明。 適用於非合作場景或複雜條件。
MAST(Merkle 化抽象語法樹)
MAST 允許將多個腳本組織成 Merkle 樹,花費時只需揭示使用的腳本:
Merkle Root
/ \
Hash(AB) Hash(CD)
/ \ / \
Hash(A) Hash(B) Hash(C) Hash(D)
| | | |
Script A Script B Script C Script D
花費 Script B 需要:
- Script B 本身
- Hash(A) 作為兄弟證明
- Hash(CD) 作為叔節點證明
優勢:
- 只揭示使用的腳本
- 其他腳本保持隱私
- 證明大小為 O(log n)
Tapscript (BIP-342)
Tapscript 是 Taproot 腳本路徑中使用的腳本版本,對傳統 Script 進行了改進:
OP_CHECKSIGADD
替代 OP_CHECKMULTISIG,使用計數器累加方式實現多重簽名, 更高效且避免了原本的 off-by-one bug。
OP_SUCCESS
預留的升級操作碼(OP_SUCCESS80-254),未來可以通過軟分叉添加新功能, 而不影響現有腳本。
簽名驗證改進
所有簽名操作碼使用 Schnorr 簽名,64 字節固定大小, 支持批量驗證以提高性能。
移除限制
移除了 201 操作碼限制和 520 字節元素限制(在腳本路徑中), 允許更複雜的腳本邏輯。
實際應用場景
閃電網絡通道
使用 MuSig2 聚合雙方公鑰,通道開啟和合作關閉看起來像普通交易:
Key Path: Alice + Bob 聚合密鑰
Script Path:
- Alice + timelock(單方面關閉)
- Bob + timelock(單方面關閉)
- 懲罰腳本
多簽錢包
3-of-5 多簽在合作情況下看起來像單簽:
Key Path: 所有 5 人的 MuSig 聚合(需要 5/5)
Script Path: 10 個 3-of-3 組合的 MAST
- A+B+C, A+B+D, A+B+E
- A+C+D, A+C+E, A+D+E
- B+C+D, B+C+E, B+D+E
- C+D+E
繼承規劃
結合時間鎖和多重簽名的遺產繼承方案:
Key Path: 所有者密鑰(日常使用)
Script Path:
- 所有者 + 配偶(緊急情況)
- 配偶 + 2年時間鎖(所有者失聯)
- 3-of-5 繼承人 + 5年時間鎖(最後手段)
隱私提升
Taproot 的隱私優勢
- • 所有密鑰路徑花費看起來相同,無法區分單簽、多簽或複雜合約
- • 腳本路徑只揭示使用的分支,其他條件保持隱私
- • 合作關閉的閃電通道與普通交易無法區分
- • Taproot 輸出統一使用 bc1p 地址前綴
未來發展
Taproot 為未來的比特幣改進奠定了基礎:
- OP_CAT 重新啟用字符串連接,啟用更強大的合約能力
- SIGHASH_ANYPREVOUT 支持 Eltoo 等更優雅的閃電網絡協議
- OP_VAULT 原生保險庫支持
- 跨輸入聚合 進一步提升多輸入交易的效率