4
4
5
5
隔离见证(Segregated Witness,简称SegWit)是比特币协议的一项重大升级,于2017年8月通过软分叉方式激活。这项技术通过将交易的签名数据(见证数据)与交易数据分离,解决了比特币网络中的一些关键问题,并为未来的扩展性改进奠定了基础。
6
6
7
+ 隔离见证的名称直接反映了其核心概念:将交易的"见证"(witness,即签名数据)从交易的主要部分"隔离"(segregate)出来。这种结构上的变化不仅解决了技术问题,还为比特币网络带来了显著的性能和安全性提升。
8
+
7
9
## 隔离见证的工作原理
8
10
9
11
### 传统交易结构的问题
@@ -66,12 +68,28 @@ SegWit引入了两种主要的地址类型:
66
68
67
69
SegWit解决了交易延展性问题,这是实现闪电网络等二层解决方案的关键前提。闪电网络依赖于能够创建依赖于未确认交易的交易链,而没有SegWit,这将是不可靠的。
68
70
71
+ ### 闪电网络如何依赖SegWit
72
+
73
+ 1 . ** 交易延展性解决** :闪电网络需要创建相互依赖的交易链,如果交易ID可以被修改(延展性问题),整个交易链将失效。SegWit通过将签名数据分离,确保交易ID不受签名数据影响,从而解决了这个问题。
74
+
75
+ 2 . ** 通道资金交易** :闪电网络通道通常使用2-of-2多签名SegWit地址(P2WSH)来锁定资金。这种设计既提供了安全性,又享受了SegWit的费用优势。
76
+
77
+ 3 . ** HTLC实现** :闪电网络中的哈希时间锁定合约(HTLC)依赖于SegWit提供的脚本版本控制功能,使得复杂的条件支付成为可能。
78
+
79
+ 4 . ** 通道关闭效率** :当闪电网络通道关闭时,最终结算交易会广播到比特币区块链。使用SegWit可以降低这些交易的费用,提高结算效率。
80
+
81
+ ### 实际应用示例
82
+
83
+ 本示例代码中的` createLightningChannelFundingTx ` 函数展示了如何创建一个与闪电网络兼容的通道资金交易,这是建立闪电网络通道的第一步。
84
+
69
85
## 代码示例:创建SegWit地址和交易
70
86
71
87
代码示例文件:[ examples.js] ( ./example.js )
72
88
73
89
该示例文件包含以下功能:
74
90
91
+ ### 基础功能
92
+
75
93
1 . ** 创建不同类型的SegWit地址** :
76
94
- P2WPKH(原生SegWit)地址 - 以bc1q开头
77
95
- P2SH-P2WPKH(兼容SegWit)地址 - 以3开头
@@ -93,16 +111,129 @@ SegWit解决了交易延展性问题,这是实现闪电网络等二层解决
93
111
- 检查地址是否为有效的SegWit地址
94
112
- 识别地址类型(原生SegWit、兼容SegWit或传统地址)
95
113
114
+ ### 高级功能
115
+
116
+ 6 . ** 批量生成SegWit地址** :
117
+ - 一次性生成多个SegWit地址
118
+ - 支持不同类型的SegWit地址批量生成
119
+
120
+ 7 . ** 批量处理SegWit交易** :
121
+ - 处理多个输入和输出
122
+ - 自动计算交易费用和找零
123
+
124
+ 8 . ** 创建SegWit多签名地址** :
125
+ - 支持m-of-n多签名方案
126
+ - 支持原生P2WSH和兼容P2SH-P2WSH多签名地址
127
+
128
+ 9 . ** 创建闪电网络通道资金交易** :
129
+ - 创建与闪电网络兼容的2-of-2多签名SegWit地址
130
+ - 构建通道资金交易
131
+
96
132
要使用这些示例,您需要安装bitcoinjs-lib库:
97
133
98
134
``` bash
99
135
npm install bitcoinjs-lib
100
136
```
101
137
138
+ ## SegWit的最佳实践
139
+
140
+ ### 地址选择
141
+
142
+ 1 . ** 优先使用原生SegWit地址(bc1开头)** :
143
+ - 提供最低的交易费用
144
+ - 最佳的安全性和性能
145
+ - 适用于支持Bech32地址格式的现代钱包和交易所
146
+
147
+ 2 . ** 兼容性考虑** :
148
+ - 如果需要与旧钱包或服务兼容,可以使用P2SH-P2WPKH地址(3开头)
149
+ - 虽然费用优势略低于原生SegWit,但仍优于传统地址
150
+
151
+ 3 . ** 多签名场景** :
152
+ - 对于多签名钱包,P2WSH(原生)或P2SH-P2WSH(兼容)提供了更高的安全性和更低的费用
153
+ - 复杂脚本应优先考虑SegWit版本,以获得费用优势
154
+
155
+ ### 交易构建
156
+
157
+ 1 . ** 费用估算** :
158
+ - 使用` estimateSegWitTransactionFee ` 函数准确估算交易费用
159
+ - SegWit交易的费用计算与传统交易不同,正确估算可避免支付过高费用
160
+
161
+ 2 . ** 批量处理** :
162
+ - 当需要处理多个交易时,使用` batchSegWitTransaction ` 函数可以更有效地管理UTXO
163
+ - 批量处理可以优化交易费用和UTXO集合管理
164
+
165
+ 3 . ** 与闪电网络集成** :
166
+ - 使用` createLightningChannelFundingTx ` 函数创建与闪电网络兼容的通道资金交易
167
+ - 确保通道资金交易使用正确的多签名脚本格式
168
+
169
+ ## 实际应用场景
170
+
171
+ ### 1. 交易所集成
172
+
173
+ 交易所可以通过实现SegWit来显著降低提款交易的费用,同时提高交易处理速度:
174
+
175
+ ``` javascript
176
+ // 交易所批量处理提款示例
177
+ const withdrawals = [
178
+ { address: ' bc1q...' , amount: 1000000 }, // 用户A提款
179
+ { address: ' bc1q...' , amount: 2500000 }, // 用户B提款
180
+ // 更多提款...
181
+ ];
182
+
183
+ const tx = batchSegWitTransaction (availableUTXOs, withdrawals, exchangeKeyPair, exchangeChangeAddress, ' p2wpkh' );
184
+ // 广播交易...
185
+ ```
186
+
187
+ ### 2. 钱包应用
188
+
189
+ 钱包应用可以提供多种地址类型选择,并解释每种类型的优缺点:
190
+
191
+ ``` javascript
192
+ // 为用户生成不同类型的地址
193
+ const addressOptions = {
194
+ legacy: bitcoin .payments .p2pkh ({ pubkey: userKeyPair .publicKey , network }).address ,
195
+ segwitCompatible: bitcoin .payments .p2sh ({
196
+ redeem: bitcoin .payments .p2wpkh ({ pubkey: userKeyPair .publicKey , network }),
197
+ network
198
+ }).address ,
199
+ segwitNative: bitcoin .payments .p2wpkh ({ pubkey: userKeyPair .publicKey , network }).address
200
+ };
201
+ ```
202
+
203
+ ### 3. 多签名钱包
204
+
205
+ 企业和组织可以使用SegWit多签名地址来增强资金安全性:
206
+
207
+ ``` javascript
208
+ // 创建3-of-5多签名企业钱包
209
+ const corporateWallet = createSegWitMultisigAddress (3 , 5 , ' p2wsh' );
210
+ // 保存地址和赎回脚本信息...
211
+ ```
212
+
213
+ ### 4. 闪电网络节点
214
+
215
+ 运行闪电网络节点的用户可以使用SegWit来创建通道资金交易:
216
+
217
+ ``` javascript
218
+ // 开设新的闪电网络通道
219
+ const channelFunding = createLightningChannelFundingTx (
220
+ selectedUTXO,
221
+ localNodePubkey,
222
+ remoteNodePubkey,
223
+ myChannelAmount,
224
+ theirChannelAmount,
225
+ myKeyPair,
226
+ estimatedFee
227
+ );
228
+ // 广播资金交易并等待确认...
229
+ ```
230
+
102
231
## 结论
103
232
104
233
隔离见证是比特币历史上最重要的技术升级之一,它不仅解决了交易延展性等关键问题,还提高了网络的交易容量和效率,同时为闪电网络等创新解决方案铺平了道路。随着越来越多的用户和服务采用SegWit,比特币网络的性能和可用性将继续提高。
105
234
235
+ 通过本示例代码,开发者可以轻松实现SegWit的各种功能,从基本的地址生成到复杂的多签名和闪电网络集成。这些工具为构建现代、高效的比特币应用提供了坚实的基础。
236
+
106
237
## 参考资料
107
238
108
239
1 . [ BIP 141: Segregated Witness] ( https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki )
0 commit comments