美文网首页
Bitcoin Signature

Bitcoin Signature

作者: 黄泉老鬼 | 来源:发表于2018-08-29 16:57 被阅读0次

讲一下签名

解锁脚本里的签名有三个作用:

身份认证:花的钱是我的

交易认证:这笔交易我是承认的

内容校验:交易内容不得更改

一个关键字段:Hash Type

它决定了交易的哪些部分被签名,未被签名的地方则支持修改

基本hash Type有三种:

SIGHASH_ALL,SIGHASH_SINGLE,SIGHASH_NONE

后缀ALL,SINGLE,NONE对应的是该签名要包含的交易输出个数,也就是说他们影响的是交易输出

SIGHASH_ALL

Signature Computation

计算步骤:

1. 用输入对应的输出脚本(要去除OP_CODESEP ARATOR操作码)替换要签名的解锁脚本,注意长度也要重新计算。

2. 其他输入的解锁脚本清空

3. 对灰色部分做sha256^2

SIGHASH_SINGLE

Signature Computation

步骤:

1. 同上

2. 将剩余输入的sequence设为0

3. 将#vout设为当前签名输入的n+1

4. 当前输出之前的vout清空(其中nValue 置为-1,其余字符置为nil)

注意的是这种签名类型只签名了与输入对应的输出。

什么叫对应?就是vin0的签名签的是vout0,vin1-->vout1

SIGHASH_NONE

Signature Computation

步骤看图,就是一个输出都不签

SIGHASH_ANYONECANPAY

这是个修饰符,必须和上面三种类型共同使用,影响了交易输入,该修饰符表示签名时只签正在被签名的输入本身,其他输入不在签名范围内,anyone can pay,who cares

步骤:

1. 基于上面各类型的步骤

2. #vin置为1

3. 移除该签名输入外的其他输入

最后说下根据hash值怎么算签名

Signature Computation

步骤:把hashtype接到交易后面后算hash256^2值,然后算个签名,把签名der编码,然后把hashtype的最后一字节接到签名后,ok

把签名类型也保护起来了

还有一个fork id签名,后续补充进来

下一节我说下为什么有这么多签名,怎么玩

相关文章

网友评论

      本文标题:Bitcoin Signature

      本文链接:https://www.haomeiwen.com/subject/qpphwftx.html