Skip to content

Commit 8b0e535

Browse files
committed
feat: add extend knowledge
1 parent 0777272 commit 8b0e535

File tree

2 files changed

+969
-5
lines changed

2 files changed

+969
-5
lines changed

BTC/Basic/SegWit/README.md

+95-5
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,105 @@ SegWit引入了两种主要的地址类型:
6464

6565
自2017年激活以来,SegWit的采用率稳步增长。截至2023年,超过80%的比特币交易使用了SegWit,这显著提高了网络的整体效率和容量。
6666

67-
## SegWit与闪电网络的关系
67+
### 采用率数据
6868

69-
SegWit解决了交易延展性问题,这是实现闪电网络等二层解决方案的关键前提。闪电网络依赖于能够创建依赖于未确认交易的交易链,而没有SegWit,这将是不可靠的。
69+
| 年份 | 采用率 |
70+
|------|--------|
71+
| 2017 | ~10% |
72+
| 2018 | ~30% |
73+
| 2019 | ~50% |
74+
| 2020 | ~65% |
75+
| 2021 | ~75% |
76+
| 2022 | ~80% |
77+
| 2023 | ~85% |
7078

71-
### 闪电网络如何依赖SegWit
79+
### 按地址类型分布
7280

73-
1. **交易延展性解决**:闪电网络需要创建相互依赖的交易链,如果交易ID可以被修改(延展性问题),整个交易链将失效。SegWit通过将签名数据分离,确保交易ID不受签名数据影响,从而解决了这个问题。
81+
当前比特币网络中的地址类型分布大致如下:
7482

75-
2. **通道资金交易**:闪电网络通道通常使用2-of-2多签名SegWit地址(P2WSH)来锁定资金。这种设计既提供了安全性,又享受了SegWit的费用优势。
83+
- 原生SegWit地址 (P2WPKH/P2WSH): ~45%
84+
- 兼容SegWit地址 (P2SH-P2WPKH): ~15%
85+
- Taproot地址 (P2TR): ~25%
86+
- 传统地址 (P2PKH/P2SH): ~15%
87+
88+
这一趋势表明,比特币生态系统正在逐步迁移到更高效的地址类型,特别是随着Taproot的激活,更多用户开始采用这一基于SegWit v1的新技术。
89+
90+
### 性能数据对比
91+
92+
不同地址类型的交易大小和费用对比(假设费率为10聪/字节):
93+
94+
| 交易类型 | 传统地址 (P2PKH) | 兼容SegWit (P2SH-P2WPKH) | 原生SegWit (P2WPKH) | Taproot (P2TR) |
95+
|---------|-----------------|------------------------|-------------------|----------------|
96+
| 1输入1输出 | 192字节 / 1,920聪 | 132字节 / 1,320聪 | 109字节 / 1,090聪 | 98字节 / 980聪 |
97+
| 2输入2输出 | 374字节 / 3,740聪 | 254字节 / 2,540聪 | 208字节 / 2,080聪 | 186字节 / 1,860聪 |
98+
99+
这些数据显示,与传统地址相比:
100+
- 原生SegWit地址可节省约45%的交易费用
101+
- 兼容SegWit地址可节省约30%的交易费用
102+
- Taproot地址可节省约50%的交易费用
103+
104+
### 区块容量提升
105+
106+
- 传统区块:最大1MB,约容纳2,000笔交易
107+
- SegWit区块:最大可达4MB,约容纳4,000-8,000笔交易
108+
109+
这种容量提升使得比特币网络的吞吐量从传统的3-7 TPS (每秒交易数) 提高到了7-14 TPS。
110+
111+
## SegWit的技术实现细节
112+
113+
### 交易序列化格式
114+
115+
SegWit引入了一种新的交易序列化格式,这是理解其工作原理的关键。下面比较传统交易和SegWit交易的序列化格式:
116+
117+
#### 传统交易格式
118+
```
119+
[4字节] 版本
120+
[变长] 输入数量
121+
[输入列表] 每个输入包含:
122+
[32字节] 上一笔交易ID
123+
[4字节] 输出索引
124+
[变长] 脚本长度
125+
[变长] 脚本(包含签名数据)
126+
[4字节] 序列号
127+
[变长] 输出数量
128+
[输出列表] 每个输出包含:
129+
[8字节] 金额
130+
[变长] 脚本长度
131+
[变长] 脚本
132+
[4字节] 锁定时间
133+
```
134+
135+
#### SegWit交易格式
136+
```
137+
[4字节] 版本
138+
[1字节] 标记 (0x00)
139+
[1字节] 标志 (0x01)
140+
[变长] 输入数量
141+
[输入列表] 每个输入包含:
142+
[32字节] 上一笔交易ID
143+
[4字节] 输出索引
144+
[变长] 脚本长度
145+
[变长] 脚本(不包含签名数据)
146+
[4字节] 序列号
147+
[变长] 输出数量
148+
[输出列表] 每个输出包含:
149+
[8字节] 金额
150+
[变长] 脚本长度
151+
[变长] 脚本
152+
[见证数据] 每个输入的见证数据:
153+
[变长] 见证数据项数量
154+
[变长] 见证数据(签名、公钥等)
155+
[4字节] 锁定时间
156+
```
157+
158+
关键区别:
159+
1. SegWit交易添加了标记(0x00)和标志(0x01)字节
160+
2. 签名数据从输入脚本移到了交易末尾的见证数据部分
161+
3. 交易ID计算不包括见证数据,解决了交易延展性问题
162+
163+
### 区块权重计算
164+
165+
SegWit引入了"区块权重
76166

77167
3. **HTLC实现**:闪电网络中的哈希时间锁定合约(HTLC)依赖于SegWit提供的脚本版本控制功能,使得复杂的条件支付成为可能。
78168

0 commit comments

Comments
 (0)