sCrypt 调试器简介

Posted freedomhero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sCrypt 调试器简介相关的知识,希望对你有一定的参考价值。

在开发 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
    


其中 typerequest 属性是固定的。其他属性分别为:

  • name:调试会话的名称
  • program:调试的 sCrypt 程序的绝对路径。 $workspaceFolder 是一个预定义的变量,指的是打开的文件夹的路径
  • constructorArgs:合约的构造参数
  • pubFunc:要调试的 public 函数名称
  • pubFuncArgs:要调试的 public 函数的参数
  • txContext: 运行函数所需的交易上下文

参数输入格式

constructorArgspubFuncArgs 中配置参数值时需要注意,具体格式需要符合以下规范:

参数类型格式
booltrue 或者 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 调试器的详细信息,您可以访问这个文档

以上是关于sCrypt 调试器简介的主要内容,如果未能解决你的问题,请参考以下文章

如何快速调试 sCrypt 单元测试错误

sCrypt 1.0.0 正式版发布

Solidity -> sCrypt 转译器简介

sCrypt IDE 新功能——调试链上合约

sCrypt 新功能介绍 (v1.9.0)

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js