通常比特币都是以虚拟货币的概念出现在大众眼前,实际上比特币是第一个真正的区块链“平台”,利用它去中心化、不可篡改、可追溯等特点不光可以实现多种交易模式(如点对点交易、多重签名交易等),还可以实现虚拟货币以外的其他功能(如数据染色等,这些功能内容不是本节讨论范畴)。
那比特币究竟是如何实现多种多样的功能的呢?
最重要的原因是比特币的交易过程是非静态的,而是通过锁定脚本(locking script)与解锁脚本(unlocking script)实现动态的交易过程。今天我们主要来探寻比特币在普通交易中锁定脚本与解锁脚本是如何发挥作用的。
首先,我们先了解比特币交易脚本的特性:
1.图灵非完备
比特币交易脚本故意使用一种图灵非完备的语言,没有循环或复杂流程控制,减少了灵活性,但极大的提高了安全性。
2.无状态验证
比特币交易脚本是无状态的,所以一个脚本能在任何系统上以相同的方式执行,如果你的系统验证了一个脚本,可以确信的是每一个比特币网络中的其他系统也将验证这个脚本,这意味着一个有效的交易对每个人而言都是有效的,而且每一个人都知道这一点。
3.基于堆栈的语言
堆栈语言极其简单,也增强了比特币的安全性。
比特币交易P2PKH(Pay-to-Public-Key-Hash)解锁过程示例
比特币最基本的交易类型为P2PKH,顾名思义交易付款的对象是公钥哈希
解锁脚本:<Sig> <PubKey>
解锁脚本是由签名与公钥组成,这就保证了必须拥有私钥的用户才能对某一笔交易进行解锁。
锁定脚本:OP_DUP OP_HASH160 <PubkeyHash> OP_EQUALVERIFY OP_CHECKSIG
锁定脚本是由一连串堆栈命令和公钥哈希组成,公钥哈希即RIPEMD160(SHA256(公钥)),大小20字节;由第二节的知识可知比特币地址实际是由该公钥Hash进行Base58check编码而来,所以必须拥有该地址的私钥才能将锁定脚本解锁。
下面演示解锁脚本如何解锁锁定脚本
从上图可知,比特币将解锁脚本与锁定脚本拼接后,使用堆栈语言按后进先出的顺序执行,最后完成CHECK,如果返回结果为TRUE,代表解锁成功,用户可以使用该笔输出作为新交易的输入进行交易。如果返回为FALSE或者执行过程中出现问题,则花费这笔输出的请求被拒绝。
作者:Aaron