【区块链笔记】BTC_脚本(07)
Page content
这篇文章简单的整理了比特币脚本
相关的内容。
1.交易的数据结构
先看看比特币交易的数据结构。
其中需要解释的字段是:
locktime:是用来表明生效的时间的,绝大多数情况下都是0,如果非0的话一般要过一段时间才生效。
vin
被称作输入脚本,vout
被称为输出脚本。
2.脚本的验证
常用的几个命令
- OP_DUP (duplicate) 复制栈顶元素
- OP_HASH160 (hash) 0xa9 取出栈顶元素,先用SHA-256,再用RIPEMD-160,然后压入栈内。
- OP_EQUAL (equal) 0x87 如果输入的两个数相等,返回1,否则返回0
- OP_EQUALVERIFY (equal verify) 0x88 与OP_EQUAL 一样,如结果为0,之后运行OP_VERIFY
- OP_CHECKSIG (check signature) 0xac 弹出栈顶的2个元素,用公钥检查输入中的签名,验证该签名是否是拥有该公钥的用户用私钥签署的,如果匹配返回1,不匹配返回0
- OP_CHECKMULTISIG (check multiple signature) 0xae 多个公钥需要查询多重签名的正确性
- OP_RETURN (return) 0x6a 标记交易无效
- OP_PUSH 下面多少个字节要被压入堆栈
- OP_TRUR/OP_1 0x51 数字1被压入堆栈
- OP_FALSE/OP_0 0x00 一个字节空串被压入堆栈
P2PK(Pay to Public Key)
这是最简单的验证模式
P2PK(Pay to Public Key)
input script:
PUSHDATA(Sig)
output script:
PUSHDATA(PubKey)
CHECKSIG
PUSHDATA(Sig) //签名
PUSHDATA(PubKey) //公钥
CHECKSIG //验证
P2PKH(Pay to Public Key Hash)
这是最常用的验证模式
P2PKH(Pay to Public Key Hash)
input script:
PUSHDATA(Sig)
PUSHDATA(PubKey)
output script:
DUP
HASH160
PUSHDATA(PubKeyHash)
EQUALVERIFY
CHECKSIG
P2SH(Pay to Script Hash)
P2SH(Pay to Script Hash) 前期版本比特币系统中是没有的。 后期用软分叉的方式加进去的。
P2SH(Pay to Script Hash)
input script:
...
PUSHDATA(Sig)
...
PUSHDATA(serialized redeemScript)
output script:
HASH160
PUSHDATA(redeemScriptHash)
EQUAL
用P2SH实现P2PK
redeemScript:
PUSHDATA(PubKey)
CHECKSIG
input script
PUSHDATA(Sig)
PUSHDATA(serialized redeemScript)
output script:
HASH160
PUSHDATA(redeemScriptHash)
EQUAL
3.多重签名
目前使用的多重签名的方式。
好处是使用者不用管每个商家的多重签名使用方式,只要输入改脚本的hash值就可以。
4.Proof of Burn
脚本遇到RETURN
就会失败。
存在这样的脚本的原因是,花费一定的费用想在区块链中做记录。
这个交易是输出脚本,所以写入的时候是不会被执行验证的。
只有想花费的时候当做输出脚本做验证。
欢迎大家的意见和交流
email: li_mingxie@163.com