0%

VerifyTransaction

比特币中的签名

签名存在于解锁脚本里面即ScriptSig,主要有身份认证,就是签名是用户使用私钥完成的,所以证明了花的钱是自己的,之后解锁脚本会去验证锁定脚本,进而解锁UTXO,所用到的也是sig和PubKey进行交易验证,验证成功即可完成交易产生新的UTXO。
那么在Bitcoin中验证交易的具体过程是怎样的呢?并且签名的类型也是多种:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。今天我门主要探索的是SIGHASH_ALL中交易的验证过程。

具体过程

下图当成两张图片使用
TxPrev and TxNew

  • 创建subscript:从OP_CODESEPARATOR到脚本的最后
    PrevTx_PKScript
  • 如果脚本中存在签名则移除
  • 把操作码:OP_CODESEPARATORS从脚本中移除
    remove
  • 把hashtype从签名中移除
    hashtype
  • 复制一份TxNew命名为TxCopy
  • 把TxCopy中的所有TxIn置空
  • 复制Subscript到你要验证的TxIn中
  • 序列化TxCopy并且扩展4字节hashTypeCode(使用的是sha256^2)
  • 通过字符串验证签名(hash strings是big-endian)

    小结

    这一个比较细节的过程,希望以后能够用的到
-------------本文结束感谢您的阅读-------------
#