跳至主要內容
高級

Taproot 升級

全面解析 Taproot 升級,包括 Schnorr 簽章、MAST 和腳本路徑。

35 分鐘

Taproot 概述

Taproot 是比特幣自 SegWit 以來最重要的升級,於 2021 年 11 月在區塊高度 709,632 激活。 它由三個相關的 BIP 組成:BIP-340(Schnorr 簽名)、BIP-341(Taproot)和 BIP-342(Tapscript)。 這次升級大幅提升了比特幣的隱私性、效率和智能合約能力。

BIP-340

Schnorr 簽名

更高效的數字簽名方案

BIP-341

Taproot

新的輸出類型和花費規則

BIP-342

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)

直接使用內部密鑰簽名花費。這是最高效的方式,看起來與普通單簽交易完全相同。 適用於合作花費場景。

見證數據: [schnorr_signature]

腳本路徑 (Script Path)

揭示並執行腳本樹中的特定腳本。需要提供控制塊和 Merkle 證明。 適用於非合作場景或複雜條件。

見證數據: [script_args...] [script] [control_block]

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 原生保險庫支持
  • 跨輸入聚合 進一步提升多輸入交易的效率

延伸閱讀

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