美文网首页
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