CScript
比特币的交易验证引擎依赖于两类脚本来验证比特币交易:锁定脚本和解锁脚本。
锁定脚本是一个放置在输出上面的花费条件:它指定了今后花费这笔输出必须要满足的条件。 由于锁定脚本往往含有一个公钥或比特币地址(公钥哈希值),在历史上它曾被称为脚本公钥(scriptPubKey)。
解锁脚本是一个“解决”或满足被锁定脚本在一个输出上设定的花费条件的脚本,它将允许输出被消费。解锁脚本是每一笔比特币交易输入的一部分,而且往往含有一个由用户的比特币钱包(通过用户的私钥)生成的数字签名。由于解锁脚本常常包含一个数字签名,因此它曾被称作ScriptSig。
P2PKH脚本
比特币网络处理的大多数交易花费的都是由“付款至公钥哈希”(或P2PKH)脚本锁定的输出。
锁定脚本 scriptPubKey1
OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
解锁脚本 ScriptSig1
<Signature> <Public Key>
将解锁脚本和锁定脚本组成组合脚本:1
<Signature> <Public Key> OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
解锁步骤:1
2
3
4
5
6
7将<Signature>入栈
将<Public Key> 入栈
复制<Public Key>
对<Public Key>执行HASH160计算,使用计算结果<Public Key Hash Result>替换<Public Key>
将<Public Key Hash>入栈
比较<Public Key Hash Result>和<Public Key Hash>是否相同,相同继续下一步,不相同则失败
用<Public Key>对<Signature>进行验证,通过则允许付款