Skip to content

Commit ea4c664

Browse files
committed
新增文章特色圖片 SVG 並更新路徑
- 新增 13 個自訂 SVG 特色圖片: - full-node.svg - 節點伺服器視覺化 - lightning.svg - 閃電網路節點 - bitcoin-dev.svg - Bitcoin Script 程式碼 - taproot-guide.svg - Taproot 樹狀結構 - ordinals.svg - Satoshi 銘文格子 - halving-2024.svg - 減半獎勵圖表 - fedimint.svg - 聯邦守護者圖示 - silent-payments.svg - 隱密支付流程 - bitvm.svg - NAND 邏輯門 - nostr.svg - 中繼網路圖 - stratum-v2.svg - 礦池加密連線 - bolt12.svg - Offer/Invoice 流程 - default-post.svg - Cypherpunks 標誌 - 更新 22 篇文章的圖片路徑從 .png 改為 .svg
1 parent 6b98061 commit ea4c664

File tree

36 files changed

+10593
-4
lines changed

36 files changed

+10593
-4
lines changed
Lines changed: 328 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,328 @@
1+
---
2+
layout: post
3+
title: 'Taproot 完整指南:從 Schnorr 簽名到實際應用'
4+
date: 2025-01-15
5+
categories:
6+
- bitcoin
7+
- taproot
8+
description: 深入解析比特幣 2021 年最重要的升級 Taproot,包括 Schnorr 簽名、MAST、Tapscript 的技術原理與實際應用。
9+
image: /img/taproot-guide.svg
10+
published: true
11+
hero_image: /img/hero.png
12+
tags:
13+
- bitcoin
14+
- taproot
15+
- schnorr
16+
- bip340
17+
- bip341
18+
- bip342
19+
---
20+
21+
## 前言
22+
23+
2021 年 11 月 14 日,比特幣在區塊高度 709,632 啟用了 Taproot 升級。這是自 2017 年 SegWit 以來最重要的協議更新,由三個緊密相關的 BIP 組成:
24+
25+
- **BIP 340**: Schnorr Signatures for secp256k1
26+
- **BIP 341**: Taproot: SegWit version 1 spending rules
27+
- **BIP 342**: Validation of Taproot Scripts (Tapscript)
28+
29+
本文將深入解析這次升級的技術細節、帶來的改進,以及對比特幣生態系統的長期影響。
30+
31+
---
32+
33+
## 一、Schnorr 簽名 (BIP 340)
34+
35+
### 為什麼需要新的簽名方案?
36+
37+
比特幣原本使用 ECDSA(橢圓曲線數位簽名演算法)。雖然 ECDSA 已被證明安全,但 Schnorr 簽名方案具有幾個重要優勢:
38+
39+
| 特性 | ECDSA | Schnorr |
40+
|------|-------|---------|
41+
| 簽名大小 | 70-72 bytes | 64 bytes |
42+
| 批量驗證 | 不支援 | 支援 |
43+
| 簽名聚合 | 不支援 | 原生支援 |
44+
| 數學證明 | 較複雜 | 更簡潔 |
45+
46+
### Schnorr 簽名原理
47+
48+
Schnorr 簽名基於離散對數問題的困難性。給定:
49+
- 私鑰 `x`
50+
- 公鑰 `P = x * G`(G 為生成點)
51+
- 訊息 `m`
52+
53+
簽名過程:
54+
1. 選擇隨機數 `k`,計算 `R = k * G`
55+
2. 計算挑戰值 `e = H(R || P || m)`
56+
3. 計算簽名 `s = k + e * x`
57+
4. 簽名為 `(R, s)`
58+
59+
驗證過程:
60+
- 檢查 `s * G == R + e * P`
61+
62+
### 簽名聚合的威力
63+
64+
Schnorr 簽名的線性特性允許多個簽名被聚合成單一簽名:
65+
66+
```
67+
# 三個簽名者的公鑰
68+
P1, P2, P3
69+
70+
# 聚合公鑰
71+
P = P1 + P2 + P3
72+
73+
# 聚合簽名看起來與單一簽名完全相同
74+
```
75+
76+
這意味著:
77+
- **2-of-3 多簽**在鏈上看起來與**單簽**完全一樣
78+
- **更低的手續費**(更小的交易體積)
79+
- **更好的隱私**(無法區分多簽和單簽)
80+
81+
### MuSig2 協議
82+
83+
MuSig2 (BIP 327) 是實現多方 Schnorr 簽名的標準協議:
84+
85+
1. **密鑰聚合階段**:所有參與者的公鑰被聚合
86+
2. **Nonce 交換**:兩輪通訊交換隨機數
87+
3. **簽名生成**:每個參與者產生部分簽名
88+
4. **簽名聚合**:部分簽名被合併為最終簽名
89+
90+
---
91+
92+
## 二、Taproot 輸出 (BIP 341)
93+
94+
### 新的地址格式
95+
96+
Taproot 引入了 SegWit v1 輸出,使用新的地址格式:
97+
98+
| 版本 | 地址前綴 | 範例 |
99+
|------|---------|------|
100+
| Legacy | 1... | 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 |
101+
| P2SH | 3... | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy |
102+
| SegWit v0 | bc1q... | bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq |
103+
| **Taproot** | **bc1p...** | **bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297** |
104+
105+
### 兩種花費路徑
106+
107+
Taproot 輸出可以通過兩種方式花費:
108+
109+
#### Key Path(密鑰路徑)
110+
111+
最簡單高效的方式,直接用聚合公鑰簽名:
112+
113+
```
114+
witness: <signature>
115+
scriptPubKey: OP_1 <32-byte-pubkey>
116+
```
117+
118+
- 看起來像普通的單簽交易
119+
- 最小的交易體積
120+
- 最高的隱私性
121+
122+
#### Script Path(腳本路徑)
123+
124+
當需要使用複雜腳本條件時:
125+
126+
```
127+
witness: <script-input> <script> <control-block>
128+
```
129+
130+
- 只需揭示被執行的腳本
131+
- 其他腳本分支保持隱藏
132+
- 使用 Merkle 證明驗證
133+
134+
### MAST(默克爾化替代腳本樹)
135+
136+
MAST 允許將多個腳本條件組織成 Merkle 樹:
137+
138+
```
139+
Root
140+
/ \
141+
H1 H2
142+
/ \ / \
143+
S1 S2 S3 S4
144+
```
145+
146+
**優勢:**
147+
- 只揭示使用的腳本分支
148+
- 未使用的條件完全隱藏
149+
- 支援大量複雜條件
150+
151+
**實際應用範例:**
152+
153+
假設一個資金需要滿足以下任一條件:
154+
1. Alice 和 Bob 共同簽名(正常情況)
155+
2. Alice 單獨簽名 + 1週時間鎖(Bob 失聯)
156+
3. Bob 單獨簽名 + 1個月時間鎖(Alice 失聯)
157+
4. 受託人簽名 + 6個月時間鎖(雙方失聯)
158+
159+
在 Taproot 之前,所有這些條件都必須公開。使用 MAST 後:
160+
- 正常情況下使用 Key Path,看起來像普通交易
161+
- 只有需要使用備用條件時才揭示該分支
162+
163+
---
164+
165+
## 三、Tapscript (BIP 342)
166+
167+
### 腳本語言更新
168+
169+
Tapscript 對比特幣腳本做了以下改進:
170+
171+
#### 新操作碼
172+
173+
**OP_CHECKSIGADD**:支援批量簽名驗證
174+
175+
```
176+
# 舊的多簽方式(OP_CHECKMULTISIG)
177+
OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG
178+
179+
# 新的方式(更高效)
180+
<pubkey1> OP_CHECKSIG
181+
<pubkey2> OP_CHECKSIGADD
182+
<pubkey3> OP_CHECKSIGADD
183+
OP_2 OP_EQUAL
184+
```
185+
186+
#### 移除的限制
187+
188+
- 移除了腳本大小限制(原本 10,000 bytes)
189+
- 移除了操作碼數量限制(原本 201 個)
190+
- 簽名必須非空(防止簽名可塑性)
191+
192+
#### 升級友好設計
193+
194+
Tapscript 使用 **OP_SUCCESS** 操作碼保留未來升級空間:
195+
196+
```
197+
# 目前未定義的操作碼被視為 OP_SUCCESS
198+
# 未來可以賦予新功能而不需硬分叉
199+
```
200+
201+
---
202+
203+
## 四、實際應用場景
204+
205+
### 1. 更便宜的多簽
206+
207+
**傳統 2-of-3 多簽:**
208+
- 輸入大小:約 297 bytes
209+
- 所有公鑰都暴露
210+
211+
**Taproot 2-of-3:**
212+
- Key Path 輸入大小:約 57 bytes(節省 80%+)
213+
- 看起來與單簽完全相同
214+
215+
### 2. 閃電網路改進
216+
217+
#### 更隱私的通道
218+
219+
Taproot 使閃電網路通道在鏈上更難識別:
220+
- 開通道交易看起來像普通交易
221+
- 協作關閉也是普通交易
222+
- 只有非協作關閉才會揭示腳本
223+
224+
#### PTLC(點時間鎖合約)
225+
226+
用 Adaptor Signatures 替代 HTLC:
227+
228+
| 特性 | HTLC | PTLC |
229+
|------|------|------|
230+
| 鏈接性 | 同一支付路徑可被關聯 | 每一跳都不同 |
231+
| 鏈上足跡 | 暴露哈希值 | 普通簽名 |
232+
| 隱私 | 較差 | 更好 |
233+
234+
### 3. DLC(離散對數合約)
235+
236+
Taproot 讓 DLC 更實用:
237+
- 所有可能結果都隱藏在 MAST 中
238+
- 正常結算看起來像普通交易
239+
- 大幅降低鏈上足跡
240+
241+
### 4. Vault(金庫)
242+
243+
使用 Taproot 實現更安全的冷儲存:
244+
245+
```
246+
Key Path: 延遲 + 冷錢包簽名
247+
Script Path:
248+
- 分支1: 熱錢包 + 24小時延遲
249+
- 分支2: 恢復密鑰 + 1週延遲
250+
```
251+
252+
---
253+
254+
## 五、開發者資源
255+
256+
### 錢包支援狀態(2025年)
257+
258+
| 錢包 | Taproot 支援 | 發送 | 接收 |
259+
|------|-------------|------|------|
260+
| Bitcoin Core | 完整 |||
261+
| Sparrow | 完整 |||
262+
| Blue Wallet | 部分 |||
263+
| Ledger | 完整 |||
264+
| Trezor | 完整 |||
265+
| Coldcard | 完整 |||
266+
267+
### 開發工具
268+
269+
- **[bitcoin-s](https://bitcoin-s.org/)** - Scala 實現
270+
- **[rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin)** - Rust 實現
271+
- **[bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib)** - JavaScript 實現
272+
- **[BDK](https://bitcoindevkit.org/)** - Bitcoin Dev Kit
273+
274+
### 學習資源
275+
276+
- **[BIP 340](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)** - Schnorr 規範
277+
- **[BIP 341](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki)** - Taproot 規範
278+
- **[BIP 342](https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki)** - Tapscript 規範
279+
- **[Bitcoin Optech Taproot](https://bitcoinops.org/en/topics/taproot/)** - 技術追蹤
280+
281+
---
282+
283+
## 六、採用現況與未來展望
284+
285+
### 採用數據(2024年底)
286+
287+
根據鏈上數據:
288+
- Taproot 輸出佔總 UTXO 約 5-8%
289+
- 新交易中約 15-20% 使用 Taproot
290+
- 主要交易所已支援存提款
291+
292+
### 未來發展
293+
294+
#### Cross-Input Signature Aggregation (CISA)
295+
296+
允許交易中所有輸入共享單一簽名:
297+
- 進一步減少交易大小
298+
- 更低的手續費
299+
- 需要額外的軟分叉
300+
301+
#### OP_CAT 復活
302+
303+
如果啟用,可實現:
304+
- 更靈活的 covenant
305+
- 鏈上驗證能力增強
306+
- 新的 Layer 2 可能性
307+
308+
---
309+
310+
## 結論
311+
312+
Taproot 是比特幣協議的重大進步,帶來了:
313+
314+
1. **更好的隱私** - 多簽和複雜腳本在鏈上不可區分
315+
2. **更高的效率** - 更小的交易體積,更低的費用
316+
3. **更強的可擴展性** - 為閃電網路和其他 Layer 2 提供更好的基礎
317+
4. **更靈活的腳本** - MAST 和 Tapscript 開啟新的應用可能
318+
319+
隨著錢包和服務的持續採用,Taproot 的優勢將越來越明顯。建議所有比特幣用戶和開發者儘快遷移到 Taproot 地址。
320+
321+
---
322+
323+
## 參考資料
324+
325+
- [Bitcoin Optech: Preparing for Taproot](https://bitcoinops.org/en/preparing-for-taproot/)
326+
- [Taproot Workshop](https://github.com/bitcoinops/taproot-workshop)
327+
- [Pieter Wuille's Taproot Presentation](https://www.youtube.com/watch?v=KLNH0ttpdFg)
328+
- [Jimmy Song: Taproot Explained](https://programmingblockchain.com/)

0 commit comments

Comments
 (0)