比特币拥有一个称作script的脚本语言。通过script,可以对TXO加锁,同时支持TXI解锁TXO。Script非常简单,就是一些代码和操作符的序列,例如:

5 2 OP_ADD 7 OP_EQUAL

5, 2, 7是数据,OP_ADDOP_EQUAL是操作符。script从左至右执行代码:遇到数据放入堆栈(先进后出);遇到操作符就从堆栈顶部取出所需的数据,并将结果放入堆栈。

上面的代码执行过程如下:
OP_ADD从堆栈中获取两个数据然后求和,将结果放入堆栈中。OP_EQUAL从堆栈获取两个数据进行比较:如果相等将true放入堆栈;否则将false放入堆栈。栈顶数据就是代码的执行结果。

比特币中用于执行交付的脚本:

<signature> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

该脚本是比特币种最常用的脚本,称为P2PKH(Pay to Public Key Hash)。此脚本用于向一个公钥hash值进行支付,例如使用一个公钥对货币进行加锁。比特币支付的核心就在于此:无账户,无基金转移;仅有一个脚本用于检查所提供的签名和公钥是否正确。

此脚本数据分为两部分:

  1. 第一部分,<signature> <pubKey>,被存放在TXI的ScriptSig 中
  2. 第二部分,OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG,被存放在TXO的ScriptPubKey中

TXO定义解锁逻辑,TXI提供数据解锁TXO,脚本执行如下:

  1. Stack: empty Script: <signature> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  2. Stack: <signature> Script: <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  3. Stack: <signature> <pubKey> Script: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  4. Stack: <signature> <pubKey> <pubKey> Script: OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  5. Stack: <signature> <pubKey> <pubKeyHash> Script: <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  6. Stack: <signature> <pubKey> <pubKeyHash> <pubKeyHash> Script: OP_EQUALVERIFY OP_CHECKSIG
  7. Stack: <signature> <pubKey> Script: OP_CHECKSIG
  8. Stack: true or false. Script: empty.

OP_DUP复制复制栈顶数据,OP_HASH160获取栈顶数据、使用RIPEMD160生成hash值并放入堆栈。OP_EQUALVERIFY比较两个栈顶数据,不相等则结束脚本。OP_CHECKSIG对交易进行哈希处理并使用<signature>、<pubKey>验证签名。

正因为有了script脚本语言,比特币可以成为智能合约平台,如该脚本可以支持多种支付模式,不仅仅是单个数字了。

results matching ""

    No results matching ""