脚本是一种低级语言,充当 比特币虚拟机 的程序集。通常,开发人员不必直接处理它,可以使用 sCrypt 等高级语言。但是,有些情况下需要使用 Script。例如,自定义脚本经过优化,因此比 sCrypt 生成的脚本更高效。或者脚本是使用外部工具(如 MiniForth)生成的,需要集成到sCrypt中。

用汇编表示法可以直接把脚本嵌入到sCrypt源代码中。可以用脚本编写sCrypt函数,并像正常的sCrypt函数一样被调用。

调用约定¶

对于用脚本编写的函数,它的整个函数主体必须用 asm 块包围。函数参数位于栈顶,与声明的顺序相反。当退出 asm 模式时,需要弹出栈里的所有参数,并把返回值放到栈顶。栈里其他元素保持不变。

变量可以通过前缀 $ 在 asm 模式中使用。与脚本的其余部分不同,它被完整复制到最终脚本输出中,变量以其作用域为前缀以避免名称冲突,由它所在的函数和契约唯一标识。例如,假设在合约 contractFoo 内的函数 func 中使用了一个变量 $var,它将在最终的脚本输出中显示为 $contractFoo.func.var。

一个例子如下所示。

字符串是一个双引号 UTF8 字符串,可以在 asm 中使用。

内联汇编绕过了 sCrypt 的许多功能,例如类型检查。使用此高级功能时必须格外小心。此外,为了与外部工具兼容,它不区分大小写。