跳到主要内容

BVM & OPCODE解锁

介绍脚本系统和BVM。

脚本系统

比特币脚本(Script)是比特币交易使用的一种编程语言,用于定义支付条件。它是一种基于堆栈的语言,操作码(Opcodes)执行各种操作,例如数据推送、逻辑判断、加密哈希和签名验证。脚本不具备图灵完备性,避免了复杂的无限循环。典型的使用场景包括多重签名地址、时间锁定交易和支付给哈希锁定地址等。每个交易包含锁定脚本(Locking Script)和解锁脚本(Unlocking Script),只有当解锁脚本满足锁定脚本的条件时,交易才会被验证通过。

以下是一些比特币脚本中常见的操作码:

  1. OP_DUP:复制栈顶的项。
  2. OP_HASH160:对栈顶的项进行SHA-256和RIPEMD-160哈希。
  3. OP_EQUALVERIFY:比较栈顶的两个项,如果相等则继续,否则验证失败。
  4. OP_CHECKSIG:验证签名是否有效。
  5. OP_CHECKMULTISIG:验证多重签名。

这些操作码在比特币交易脚本中用于实现各种功能,例如验证签名、多重签名和哈希锁定。

详细信息请参阅操作码

img.png

BVM(Bitcoin Virtual Machine)

BVM是基于比特币的脚本系统 进行了操作码恢复和功能扩展的虚拟机,它是MVC智能合约的执行引擎。比特币的脚本系统是一个双栈结构的执行器,包括输入栈和输出栈,使用类forth语言对栈进行任意操作,实现更高层次的逻辑。实际上,很多现代编程语言的执行结构很大程度上都要依赖执行栈,从原理上来说,你甚至可以通过栈式结构来实现任意复杂的程序逻辑(只要内存资源足够多)。可以说,栈式结构是构成现代编程语言的基础,拥有无限的潜力。

但由于BTC的限制,脚本系统只能进行简单的逻辑判断,可以使用的操作码也非常有限,无法实现复杂的智能合约逻辑。BVM在脚本系统的基础上进行了功能扩展,引入了更多操作码。 支持更多的数据类型,提供了更多的功能,使得MVC智能合约可以实现更多的复杂逻辑。

我们可以对BVM及其合约进行如下的定义和特点归纳:

  1. BVM是基于比特币脚本系统的操作码进行了功能扩展的虚拟机。
  2. BVM由输入栈和输出栈组成。输出栈可以看作智能合约的函数定义以及数据,输入栈可以看作智能合约的函数调用以及参数。
  3. BVM合约是纯函数式运算 ,具备函数式编程的原子性,无状态,无副作用,可并行执行等特点。
  4. BVM的合约计算的结果只包含TRUE或者FALSE,通过UTXO是否能够被解锁来判断合约是否执行成功。
  5. BVM的合约具备原子性,要么全部成功,要么全部失败,不会出现部分执行的情况。校验失败的合约不会消耗GAS费,因为会被看作非法交易,不会记录上链。

操作码解锁

比特币设计的时候出于安全考虑,限制了可以使用的操作码数量和类型,只允许几大标准类型的交易输出,导致智能合约的功能受到限制。

MVC为了拓展交易和合约的灵活性,恢复了原始版本的操作码,支持更多的数据类型,提供了更多的功能,使得MVC智能合约可以实现更多的复杂逻辑。

具体可用的操作码列表请参考比特币操作码