近日,我们从BSV/DEVS的推特上得知,有个开发者发布了一款BSV的脚本编辑器,可以提供带有GUI的编辑器环境,让用户使用高级语言,来编写复杂的比特币脚本,目前支持BSV的脚本操作码,部分兼容BTC和BCH操作码。这其实是一种使得比特币区块链上的复杂智能合约变得可能的一个方法。
比特币脚本
比特币的脚本语言,定义了一组基本的操作码,这些操作码围绕着一个STACK和另外一个ALT-STACK进行操作,即可完成计算。我们所熟知的P2PK、P2PKH、P2SH交易,都是使用比特币的脚本语言而实现的。比特币交易里的锁定脚本和解锁脚本其实就是区块链领域最早的智能合约了,以太坊将它变得更加强大,专门嵌入了一个EVM虚拟机环境,来执行更加复杂的智能合约。
理论上,只要有足够大的内存空间和足够的时间,图灵机能够完成任何计算,之前人们讨论了很多比特币脚本的图灵完备性,如果能够使用比特币的脚本语言,达到其它高级语言的效果,那么它就是图灵完备的,但通过阅读图灵机的模型定义,我们认为比特币的脚本语言,能够达到图灵设想的纸带机的效果,它应该是图灵完备的。
其中,比特币的脚本语言,就像汇编语言,每个操作粒度很细,而高级语言表达能力更强,往往一个语句,对应汇编语言十几个指令,写起来更有效率。有一个想法就是,能否使用高级语言编写,然后转换成比特币的脚本语言,嵌入进交易里面,从而编写复杂的智能合约呢?这样做有一定的难度,但是不是不可行。一门语言,使用编译原理的知识,是可以转换成另外一种语言的,其中只是换了一种表示方法。
这么做的前提和要求是:
- 该高级语言指令和比特币脚本指令间有明确的可对应关系
- 转换出来的比特币脚本计算结果与高级语言计算结果一致
只要能够达到上面的两个要求,那么这样的工具就可以造出来,让人们用高级语言编写智能合约了,事实上已经有开发者开始这么做了,今天要介绍的就是这么一款编辑器 BSV Editor。首先它目前只是一个Alpha版本,还在进行一些概念验证,软件方面有一些缺陷,但是不妨碍我们体验它。这款软件目前只能再Windows平台下运行,具有交易、脚本、Hello(高级语言)模块。
交易构造
交易模块下,可以编辑已有的交易和创建一笔交易,构造交易需要定义许多参数,包括版本、输入、输出、锁定时间等等,编辑器内,可以编辑这些字段,从而构造一个新的交易。它内部存放了一些模板,可以创建对应的交易类型,例如 P2PK(支付到公钥)、P2PKH(支付到公钥哈希)、MultiSig(多重签名)、OP_RETURN(附带数据)、P2SH等,文件的后缀是.txn
。
可以增加和减少INPUT和OUTPUT,对INPUT进行签名等,最终将可以输出一个交易原生格式HEX,也可以导出一个JSON,通过右键的方式导出。理论上这个工具可以当成一个钱包来使用,不过该功能我没能体验成功。
脚本编辑
脚本模块提供了脚本编辑器功能,可以徒手写一个比特币脚本,并且进行调试了,我们也可以加载一个文件夹下已有的脚本,打开来看看它到底是怎么样的一个功能,Scripts -> load 选中脚本,即可进行编辑,我们可以看到其文件后缀是.script
。
我们打开一个最简单的判断2+2是否等于4的脚本。
打开后,可以通过Scripts下的一些菜单,进行运行和调试。调试方式和普通的IDE很相似,F5是启动调试,一步步执行,F10是执行下一步。如上图所示,我们将两个2压入栈内,进行相加操作,得到一个4,再压入一个4,最终进行相等比较操作,将会得到一个0x01,也即是True。
这个脚本编辑器和调试功能,模拟了比特币脚本的执行,可以看到调试的每一步,栈内数据会发生一个变化。比特币的脚本执行,借助了两个栈结构,一个叫STACK,是主要的栈,另外一个叫ALT-STACK,作为辅助。有两个主要指令进行ALT-STACK的操作,在进行一些复杂操作时会用到ALT-STACK:
1. OP_TOALTSTACK 将数据移动从STACK移动到ALT-STACK
2. OP_FROMALTSTACK 将数据从ALT-STACK移动到STACK
高级语言
终于到了最核心的高级语言模块了,在Hello下面,我们加载一个模板文件试试,其编辑的文件如下:
和JavaScript等高级语言的写法没有很大差别,甚至有一些的如for循环、高级的函数,如split等。编写完高级的程序之后,需要在Hello -> Compile 进行编译,将会提示已经将高级语言编译到一个script文件中去了,通过Scripts -> Load 加载文件,我们可以看到编译出来的比特币脚本,并进行调试了,操作步骤见上一个小节。
我试了自己写了一个简单的脚本,其中用到了乘法,目前未予以支持,故而报错了,编辑功能也不太好用,还有较大改进空间。期待有一天能够像写JavaScript或Python一样,编辑智能合约,并把它部署到交易里头。
其它工具
之前,我们也看到了几款比特币脚本的编辑器,其中一款BCH上的编辑器叫 BitAuth 专门用于人们构造交易的脚本,甚至还能当成一个钱包来使用,另外BCH的哥白尼团队也开放过一个Copernet Playground工具 用于编辑比特币脚本。
结论
将高级语言转换成比特币脚本语言,是一个很酷的想法,而智能合约能够实现更加复杂的交易逻辑,未来也需要共识机制能够支持足够大的操作码空间,在比特币上加这些复杂的操作,会不会造成承载能力的下降,目前还不确定,毕竟这个脚本,每个节点都会执行和验证,是一种全球公共的计算资源,相当于区块链中的服务端程序。
总体而言,现实场景一定会提出许多更加复杂的需求,要求比特币能够支撑更多的应用,就算比特币不这么做,也会有其它链做,例如以太坊、http://EOS.IO。这种做法是否能够成功,让我们拭目以待吧~