Article Outline
保留和替换
🏃🏃🏃
{
[
1,
1,
1
],
5
}
这个简单的数据结构描述了这样一笔比特币交易,它有 3 个输入,5 个输出,每个输入都使用 SIGHASH_ALL
作为签名选项。
那么,这笔交易中那些部分是可以被替换(指替换了部分内容后,现有的签名依旧合法)的 ———— 没有。
{
[
2,
1
],
3
}
2 个输入,3 个输出,第一个输入使用 SIGHASH_NONE
, 第二个输入使用 SIGHASH_ALL
。
那么,这笔交易中那些部分是可以被替换的 ———— 没有。
{
[
2
],
3
}
1 个输入,3 个输出,第一个输入使用 SIGHASH_NONE
。
那么,这笔交易中那些部分是可以被替换的 ———— 全部的输出都可以被替换。
{
[
2,
3
],
3
}
2 个输入,3 个输出,第一个输入使用 SIGHASH_NONE
,第二个输入使用 SIGHASH_SINGLE
。
那么,这笔交易中那些部分是可以被替换的 ———— 除了第二个输出,其它的输出都可以被替换。
{
[
2 | 0x80,
3 | 0x80
],
3
}
2 个输入,3 个输出,第一个输入使用 SIGHASH_NONE|ANYONECANPAY
,第二个输入使用 SIGHASH_SINGLE|ANYONECANPAY
。
那么,这笔交易中那些部分是可以被替换的 ———— 除了第二个输出,其它的输出都可以被替换;可以添加或删除任意输入;可以改变输入输出对的排序(index相同的输入输出要保持index相同)。
在上一篇记录中,我们知道了使用 locktime
和 sequence
参数可以替换已经被广播了的交易。但新的交易仍需重新签名,这点不太方便。这里我们灵活使用 SIGHASH
,可以在不重新签名的情况下,修改交易内容。