上次大致讲了比特币的交易模式。接着讲讲比特币的交易。比特币的交易验证引擎依赖于两类脚本来验证比特币交易:一个锁定脚本和一个解锁脚本。
锁定脚本锁定了一个输出值,同时它明确了今后花费这笔输出的条件。锁定脚本往往含有一个公钥(即比特币地址)。解锁脚本是解开输出上设定的花费条件的脚本,同时它将允许输出被消费。解锁脚本是每一笔比特币交易输入的一部分,而且含有一个通过用户的私钥生成的数字签名。
每次交易都会通过执行锁定脚本和解锁脚本来验证这笔交易。一次交易的输入指向的UTXO,这个UTXO有一个锁定脚本,如果这个输入的解锁脚本能解开UTXO中的锁定脚本, 则可以使用这个UTXO。下图就是脚本验证之前将解锁脚本和锁定脚本串联而成的组合脚本。
比特币脚本语言被称为基于栈语言,图灵非完备的,就是没有循环或者复杂流控制功能。比特币的脚本语言就是由一堆命令和参数组成的,上图中的DUP,HASH160,EQUALVERIFY,CHECKSIG就是命令<sig> <Pubk> <PubkHash>就是参数。脚本的执行方式和表达式的执行有点像。比如 2 5 + 这个后缀表达式,2和5就是参数,+ 是命令,2先入栈,5再入栈,遇到+ 是执行命令得出2+5得到7。比特币的脚本执行也是类似的。下面看下最常用的P2PKH,以上图的解锁脚本和锁定脚本为例。
脚本的存在增加了交易验证的多样性,也使比特币作为一种可编程货币,但Standard()函数定义了五种类型的标准交易。这五种标准交易脚本是仅有的被客户端和大多数运行客户端的矿工们所接受的脚本。P2PKH、P2PK、MS、P2SH和OP_Return。这里只介绍了P2PKH。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/8895.html