比特币中的签名
签名存在于解锁脚本里面即ScriptSig,主要有身份认证,就是签名是用户使用私钥完成的,所以证明了花的钱是自己的,之后解锁脚本会去验证锁定脚本,进而解锁UTXO,所用到的也是sig和PubKey进行交易验证,验证成功即可完成交易产生新的UTXO。
那么在Bitcoin中验证交易的具体过程是怎样的呢?并且签名的类型也是多种:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。今天我门主要探索的是SIGHASH_ALL中交易的验证过程。
具体过程
下图当成两张图片使用
- 创建subscript:从OP_CODESEPARATOR到脚本的最后
- 如果脚本中存在签名则移除
- 把操作码:OP_CODESEPARATORS从脚本中移除
- 把hashtype从签名中移除
- 复制一份TxNew命名为TxCopy
- 把TxCopy中的所有TxIn置空
- 复制Subscript到你要验证的TxIn中
- 序列化TxCopy并且扩展4字节hashTypeCode(使用的是sha256^2)
- 通过字符串验证签名(hash strings是big-endian)
小结
这一个比较细节的过程,希望以后能够用的到!!!