Skip to content

Commit

Permalink
Create SIGHASH标志.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tanZiWen authored Oct 14, 2024
1 parent cd53533 commit e1fd644
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions SIGHASH标志.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
在比特币交易中,`SIGHASH`标志位(`SIGHASH flags`)决定了在签名时,哪些部分的交易数据将被包含在签名的哈希中。这些标志位的主要作用是**帮助多方协调创建和签署交易**,允许用户对某些交易输入或输出进行部分或全部签名。通过这些标志位,用户可以灵活地定义哪些部分的数据是固定的,哪些部分可以在其他用户添加时变动。

### 常见的SIGHASH标志位

1. **SIGHASH_ALL**(默认标志位)
- **作用**:签名所有的输入和输出。
- **解释**:如果使用这个标志,整个交易(包括所有的输入和输出)都被签名。交易的每一部分都固定,无法被修改。
- **应用场景**:通常用于大多数标准的比特币交易,确保所有输入和输出的数据都不会被篡改。

2. **SIGHASH_NONE**
- **作用**:只签名输入,不签名任何输出。
- **解释**:这意味着你只锁定了输入的部分,允许之后的任何人随意更改或添加输出。这可以使交易的输出部分动态变化,而不影响原始签名。
- **应用场景**:适合输入已确定,但输出可以根据不同情况生成的交易。例如,捐赠或众筹类的交易。

3. **SIGHASH_SINGLE**
- **作用**:签名所有输入,但只锁定一个输出。
- **解释**:在这种模式下,所有输入都被签名,但只锁定某个特定的输出,其他的输出可以被添加或修改。这允许在输出中加入额外数据,而不影响最初的输出内容。
- **应用场景**:适用于那些只需要锁定一个特定输出的情况,如多方合作生成交易的场景,其中每个人只关心自己的输出。

4. **SIGHASH_ANYONECANPAY**
- **作用**:只锁定一个输入。
- **解释**:此标志可以与上面的标志组合使用,意味着你只锁定一个输入,其他输入可以由其他人添加。这通常用于支持多个用户共同出资的交易,每个人只需为自己的输入部分签名,而不需要锁定整个交易。
- **应用场景**:适合多个用户共同提供输入的交易,例如多个用户联合支付费用的场景。

---

### `SIGHASH` 组合使用

- **SIGHASH_ALL | SIGHASH_ANYONECANPAY**
- 只锁定当前输入和所有输出。其他用户可以加入自己的输入。

- **SIGHASH_NONE | SIGHASH_ANYONECANPAY**
- 只锁定当前输入,允许其他人修改或添加输入和输出。

- **SIGHASH_SINGLE | SIGHASH_ANYONECANPAY**
- 只锁定当前输入和一个特定的输出,其他输入和输出都可以由其他用户添加或修改。

---

### 应用场景
1. **多签名钱包**:在多签名钱包中,SIGHASH标志位允许多个用户共同签署交易。每个用户可以用`SIGHASH_ANYONECANPAY`来签署自己的部分输入,而不影响其他人的输入。

2. **众筹与联合支付**:如果多个用户想一起支付一个交易,他们可以使用`SIGHASH_ANYONECANPAY`来分别添加各自的输入,并联合支付目标输出。

3. **闪电网络(Lightning Network)**:比特币的闪电网络利用了`SIGHASH_SINGLE`等标志位来锁定部分交易输出,使得支付通道中的资金可以灵活变动。

---

总结一下,`SIGHASH`标志位为比特币交易提供了灵活性,允许交易参与者根据实际需求,锁定交易的不同部分,从而实现更复杂的多方交易机制和高级应用场景。

0 comments on commit e1fd644

Please sign in to comment.