Skip to content

Commit 0777272

Browse files
committed
feat: supplement README
1 parent a533ffc commit 0777272

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

BTC/Basic/SegWit/README.md

+131
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
隔离见证(Segregated Witness,简称SegWit)是比特币协议的一项重大升级,于2017年8月通过软分叉方式激活。这项技术通过将交易的签名数据(见证数据)与交易数据分离,解决了比特币网络中的一些关键问题,并为未来的扩展性改进奠定了基础。
66

7+
隔离见证的名称直接反映了其核心概念:将交易的"见证"(witness,即签名数据)从交易的主要部分"隔离"(segregate)出来。这种结构上的变化不仅解决了技术问题,还为比特币网络带来了显著的性能和安全性提升。
8+
79
## 隔离见证的工作原理
810

911
### 传统交易结构的问题
@@ -66,12 +68,28 @@ SegWit引入了两种主要的地址类型:
6668

6769
SegWit解决了交易延展性问题,这是实现闪电网络等二层解决方案的关键前提。闪电网络依赖于能够创建依赖于未确认交易的交易链,而没有SegWit,这将是不可靠的。
6870

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+
6985
## 代码示例:创建SegWit地址和交易
7086

7187
代码示例文件:[examples.js](./example.js)
7288

7389
该示例文件包含以下功能:
7490

91+
### 基础功能
92+
7593
1. **创建不同类型的SegWit地址**
7694
- P2WPKH(原生SegWit)地址 - 以bc1q开头
7795
- P2SH-P2WPKH(兼容SegWit)地址 - 以3开头
@@ -93,16 +111,129 @@ SegWit解决了交易延展性问题,这是实现闪电网络等二层解决
93111
- 检查地址是否为有效的SegWit地址
94112
- 识别地址类型(原生SegWit、兼容SegWit或传统地址)
95113

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+
96132
要使用这些示例,您需要安装bitcoinjs-lib库:
97133

98134
```bash
99135
npm install bitcoinjs-lib
100136
```
101137

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+
102231
## 结论
103232

104233
隔离见证是比特币历史上最重要的技术升级之一,它不仅解决了交易延展性等关键问题,还提高了网络的交易容量和效率,同时为闪电网络等创新解决方案铺平了道路。随着越来越多的用户和服务采用SegWit,比特币网络的性能和可用性将继续提高。
105234

235+
通过本示例代码,开发者可以轻松实现SegWit的各种功能,从基本的地址生成到复杂的多签名和闪电网络集成。这些工具为构建现代、高效的比特币应用提供了坚实的基础。
236+
106237
## 参考资料
107238

108239
1. [BIP 141: Segregated Witness](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki)

0 commit comments

Comments
 (0)