在开发 sCrypt 智能合约时,推荐使用之前介绍过的 VSCode 插件 IDE,其中重要的一个原因是可以借助其中的调试器进行调试,它支持断点、步进、堆栈跟踪和变量检查,所有这些都非常有助于开发人员发现和修复错误。
如何使用调试器
只需在工作区的 .vscode 文件夹中创建一个 launch.json 文件,在调试视图中选择配置,然后按 F5 即可开始调试。
与其他 VSCode 调试器一样,launch.json 文件存储调试配置。下面是关于特定于 sCrypt 调试器的 launch.json 属性的参考。
{
"type": "scrypt",
"request": "launch",
"name": "Debug sCrypt",
"program": "${workspaceFolder}/contracts/xxx.scrypt",
"constructorArgs": [123456],
"pubFunc": "unlock",
"pubFuncArgs": [123, 456],
"txContext": {
"hex": "01000000015884e5db9de218238671572340b207ee85b628074e7e467096c267266baf77a40000000000ffffffff0000000000",
"inputIndex": 0,
"inputSatoshis": 100000
}
}
其中 type 和 request 属性是固定的。其他属性分别为:
- name:调试会话的名称
- program:调试的 sCrypt 程序的绝对路径。
${workspaceFolder} 是一个预定义的变量,指的是打开的文件夹的路径 - constructorArgs:合约的构造参数
- pubFunc:要调试的 public 函数名称
- pubFuncArgs:要调试的 public 函数的参数
- txContext: 运行函数所需的交易上下文
参数输入格式
在 constructorArgs 和 pubFuncArgs 中配置参数值时需要注意,具体格式需要符合以下规范:
参数类型 | 格式 |
---|
bool | true 或者 false | int | 数字或字符串,如果值小于 9007199254740991 (2^53 ? 1), 可以直接使用数字表示,也可以使用字符串表示(包括十进制 字符串和 0x 开头的十六进制字符串),如果值大于等于 9007199254740991,应该使用字符串表示 | bytes | 字符串, 例如: “b’0011’” | PubKey | 字符串, 例如: “PubKey(b’036cfa9a0b0abf4fa56e583b99f8d1ba4a2608096283cdea68ecf1d4f5bdefeb1f’)”,括号中间是 bytes | PrivKey | 字符串, 例如: “PrivKey(1000000000000)” or “PrivKey(0x036cfa9a)”, 括号中间是十进制或十六进制数字 | Sig | 字符串, 例如: “Sig(b’036cfa9a0b0abf4fa56e583b99f8d1ba4a2608096283cdea68ecf1d4f5bdefeb1f’)”,括号中间是 bytes | Ripemd160 | 字符串, 例如: “Ripemd160(b’ba53f598a150a242b21bcb6963a2db6dae6fa896’)”,括号中间是 bytes | Sha1 | 字符串, 例如: “Sha1(b’3e5b01787918c4e39f99ee70d7db11dddb1cc98d’)”,括号中间是 bytes | Sha256 | 字符串, 例如: “Sha256(b’5a3d057ba410db21e6e92788779e6262a83d0a305762d5ece77dc801c6242f70’)”,括号中间是 bytes | SigHashType | 字符串, 例如: “SigHashType(b’4c’)”,括号中间是 bytes | SigHashPreimage | 字符串, 例如: “SigHashPreimage(b’0100000028bcef7e73248aa273db19d73f65730862b2491c8e0eeb767f7fbd78c4…’)”,括号中间是 bytes | OpCodeType | 字符串, 例如: “OpCodeType(b’81’)” 表示 OP_1 ,括号中间是 bytes | 数组 | 同 JSON 的数组,所有元素必须是以上基本类型或者是结构体、数组 | 结构体 | 同 JSON 的对象,所有成员必须是以上基本类型或者是结构体、数组 |
交易上下文
交易上下文,即 txContext 参数,指定调试时当前交易的相关上下文信息,仅当在合约内进行签名或者原象校验时才需要。缺少会导致调试器无法进行校验。
字段 | 必须 | 说明 |
---|
hex | 是 | 序列化的当前交易,即解锁脚本所在交易。可以是签名过的,也可以是未签名的 | inputIndex | 是 | 要花费的、被合约锁定的 UTXO 所对应的 input 索引 | inputSatoshis | 是 | 要花费的、被合约锁定的 UTXO 中比特币数量,单位 satoshis | opReturn | 否 | 带状态合约的状态(asm 格式),从OP_RETURN开始,不包含OP_RETURN |
更多关于 sCrypt IDE 调试器的详细信息,您可以访问这个文档。
|