-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
49 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`标志位为比特币交易提供了灵活性,允许交易参与者根据实际需求,锁定交易的不同部分,从而实现更复杂的多方交易机制和高级应用场景。 |