知识库详情
知识库

以“词条释义”的形式对比特币区块链技术中经常涉及的术语及基本概念进行专业化的阐释和解读。

签名标识
返回上级
BSV区块链编辑 2022-04-14 17:32 330

签名标识用于指示交易的哪一部分已由ECDSA签名签署。这种标识签名的机制提供了构建交易的灵活性。比特币里一共有6种不同的标识组合可以添加到交易中的数字签名上。请注意,不同的输入可以使用不同的签名标识,从而在花费资金的条件上实现复杂的组合。

注意:目前所有的BSV交易都需要一个额外的签名标识,称为SIGHASH_FORKID,具体表示为 0x40。

下表展示了使用不同类型的SIGHASH,表示交易的哪些部分已被ECDSA签名、哪些部分未被ECDSA签名。


始终被签名的项目

所有输入上的签名都会对TXIDVOUT进行签名,这些TXID和VOUT包括正在使用的输出点(outpoint),以及正在评估交易的协议版本,和应用于该交易的锁定时间

 

永远不会被签名的项目

交易的解锁脚本部分永远不会被签名。


SIGHASH_ALL
 

SIGHASH_ALL对用于构建交易的所有输入和输出进行签名。一旦使用 SIGHASH_ALL签名的输入被添加到交易中,除非该签名失效,否则交易内的任何信息都将无法被更改。

 

SIGHASH_SINGLE

SIGHASH_SINGLE对所有输入和与被签名的输入有相同索引的输出进行签名。 如果该输出或任何输入发生更改,则该签名将失效。


SIGHASH_NONE

SIGHASH_NONE对所有输入进行签名,而不为输出签名。在签名未失效的情况下,任何输出都可以更改;但是如果对任何输入进行变更,签名就会失效。

 

SIGHASH_ALL|ANYONECANPAY

一旦将使用 SIGHASH_ALL|ANYONECANPAY 签名的输入添加到交易中,除非该签名失效,否则将无法更改或添加输出。

 

SIGHASH_SINGLE|ANYONECANPAY

SIGHASH_SINGLE|ANYONECANPAY用来对正在签名的输入和与之有相同索引的输出进行签名。如果该输出被更改,则该签名就会失效。

 

SIGHASH_NONE|ANYONECANPAY

SIGHASH_NONE|ANYONECANPAY用来签署单个输入,但不签署输出。这种类型的签名可用于轻松地在不创建链上操作的情况下,将资金分配给个人或智能合约。

 

应用实例

签名标识在构建支付信道(payment channel)中的智能合约和可协商交易时,应用广泛。

用例1:众筹项目

使用ALL|ANYONECANPAY允许交易有一个或多个固定输出,同时保持输入列表处于可编辑的状态。也就是说,任何人都可以将带有签名的输入添加到交易中,而不会使所有现有签名失效。

用例2:空白支票

使用NONE系列的标识,允许任何人将他们想要的输出添加到交易中,以声明他们对输入中的资金的合法使用权。

用例3:模块化交易

使用SINGLE|ANYONECANPAY可将交易模块化。任何数量的交易都可以合并为一个交易。

 

参考资料

https://github.com/bitcoin-sv/bitcoin-sv/blob/master/src/script/sighashtype.h

比特币协议
创世区块
Coinbase
区块
区块哈希算法
工作量证明(PoW)
区块哈希目标值
区块补贴
挖矿
中本聪共识
难度
区块重组
孤块
比特币单位:聪
比特币协议
BSV化名协议(BSVAlias)
SHA-256
RIPEMD-160
签名标识
矿工补贴
区块时间戳
Secp256k1
传统签名算法
版本握手