CKB 中的剧本不必然只是我们在剧本语言中看到的剧本,譬喻 Ruby,JS,它实际上是指在 CKB VM 上运行的 RISC-V 名目二进制文件。CKB VM 模仿 RISC-V 指令集,与其他 VM 通过 opcode 硬编码成果很是差异。思量到 CKB VM 的通用特性,每种编程语言和东西链都有一些差异。在这篇本章中,CKB 开拓者 jjy 将和各人先容调试 CKB 剧本的几个能力,快来查察吧。
对付语言 / 东西链实现人员,假如开拓语言支持,发起您集成 debug syscall 来打印错误向后追踪。譬喻:假如将 Rust 与 ckb-contract-std 一起利用,您可以看到措施瓦解的位置。
若想相识更多,请参考 CKB 开拓者 Xuejie 的文章:CKB 剧本编程简介第一弹: 验证模子
当您在 CKB 官方 script 或 CKB VM 中发明与安详相关的 bug 时,接待插手我们的 bug bounty program,我们会为您的名贵孝敬提供丰盛嘉奖!
ckb-debugger -l 0.0.0.0:2000 -g type -h <type script hash> -t debug-tx.json
cargo build –release
git clone https://github.com/nervosnetwork/ckb-standalone-debugger
1. 生成 mock-tx 模板
target remote <ip>:2000
调试 syscall
ckb-cli 支持在调试情况下生成模仿 tx 和验证,步调如下:
4. 验证生意业务
# start gdb
riscv64-unknown-elf-gdb <path of script binary>
CKB 节点仅在生意业务验证失败时陈诉 exit code,,区分错误最直接的要领是利用差异的 exit code(-127 和 127 之间)来暗示错误。
1. Install ckb-standalone-debugger 安装 ckb-standalone-debugger
利用 VM debugger 和 GDB
譬喻,默认的 lock script error code:secp256k1 error codes
3. 实现模板
将你的 script cell 添加到 cell_deps 中,并修改生意业务布局以利用 lock script 或 type script。
ckb-standalone-debugger 支持 ckb-cli 生成的模板。要调试一个剧本,我们用 -g <script type> 来指代 script group 范例,这暗示我们想要调试哪个 script group,利用引用的 -h <script hash>。
ckb-cli mock-tx template –lock-arg <your lock-arg> –output-file debug-tx.json
ckb-cli mock-tx verify –tx-file debug-tx.json
还可以选择在调试情况下运行剧本:ckb-cli, VM debugger, ckb-contract-tool。
当您在剧本中发明与安详相关的 bug 时,请不要将其宣布在 github public issue。请在 ckb dev telegram(https://t.me/nervos_ckb_dev) 接洽维护人员,这不只有助于维护人员更新,也可以防备用户损失资金。
2. 修改模板
3. 启动 GDB
用 ckb-cli 生成 mock tx 和验证
# connect to debugger server
错误码
关于提交 bug
cd ckb-standalone-debugger/bins
ckb-cli mock-tx complete –tx-file debug-tx.json
https://github.com/nervosnetwork/ckb-system-scripts/wiki/Error-codes
filter = info,ckb-script=debug
你将看到验证功效和调试输出。
此呼吁按照 lock arg 利用私钥签名生意业务。
请留意:尽量 CKB 的编程模子此刻很是不变,但今朝仍然在举办开拓,因此大概会有变革。
留意:常见的错误是夹杂了lock script 错误和 type script 错误。简朴的调试要领是删除 type script,然后从头运行;假如错误仍然存在,可以确定错误是由 lock script 引起的;不然,它是由 type script 引起的。
2. Start standalone debugger 启动 ckb-standalone-debugger
[logger]
默认环境下,CKB节点不输出调试 syscall 动静,可以设置 ckb.toml 来启用它。
当我们想要从剧本中输出特另外信息时,回收 debug syscall 来完成此需求。
docker run –rm -it -v pwd:/code nervos/ckb-riscv-gnu-toolchain:bionic-20191012 bash
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。