CKB 中的脚本不一定只是我们在脚本语言中看到的脚本,例如 Ruby,JS,它实际上是指在 CKB VM 上运行的 RISC-V 格式二进制文件。CKB VM 模拟 RISC-V 指令集,与其他 VM 通过 opcode 硬编码功能非...
本文标题和你说说调试 CKB 脚本的几个技巧,作者:知世,本文有946个文字,大小约为4KB,预计阅读时间3分钟,请您欣赏。知世金融网众多优秀文章,如果想要浏览更多相关文章,请使用网站导航的搜索进行搜索。本站虽然不乏优秀之作,但仅作为投资者学习参考。
CKB 中的脚本不一定只是我们在脚本语言中看到的脚本,例如 Ruby,JS,它实际上是指在 CKB VM 上运行的 RISC-V 格式二进制文件。CKB VM 模拟 RISC-V 指令集,与其他 VM 通过 opcode 硬编码功能非常不同。考虑到 CKB VM 的通用特性,每种编程语言和工具链都有一些不同。在这篇本章中,CKB 开发者 jjy 将和大家介绍调试 CKB 脚本的几个技巧,快来查看吧。
请注意:尽管 CKB 的编程模型现在非常稳定,但目前仍然在进行开发,因此可能会有变化。
错误码
CKB 节点仅在交易验证失败时报告 exit code,区分错误最直接的方法是使用不同的 exit code(-127 和 127 之间)来表示错误。
例如,默认的 lock script error code:secp256k1 error codes
https://github.com/nervosnetwork/ckb-system-scripts/wiki/Error-codes
注意:常见的错误是混淆了lock script 错误和 type script 错误。简单的调试方法是删除 type script,然后重新运行;如果错误仍然存在,可以确定错误是由 lock script 引起的;否则,它是由 type script 引起的。
调试 syscall
当我们想要从脚本中输出额外的信息时,采用 debug syscall 来完成此需求。
默认情况下,CKB节点不输出调试 syscall 消息,可以配置 ckb.toml 来启用它。
[logger]
filter = info,ckb-script=debug
还可以选择在调试环境下运行脚本:ckb-cli, VM debugger, ckb-contract-tool。
对于语言 / 工具链实现人员,如果开发语言支持,建议您集成 debug syscall 来打印错误向后追踪。例如:如果将 Rust 与 ckb-contract-std 一起使用,您可以看到程序崩溃的位置。
用 ckb-cli 生成 mock tx 和验证
ckb-cli 支持在调试环境下生成模拟 tx 和验证,步骤如下:
1. 生成 mock-tx 模板
ckb-cli mock-tx template --lock-arg <your lock-arg> --output-file debug-tx.json
2. 修改模板
将你的 script cell 添加到 cell_deps 中,并修改交易结构以使用 lock script 或 type script。
3. 实现模板
ckb-cli mock-tx complete --tx-file debug-tx.json
此命令根据 lock arg 使用私钥签名交易。
4. 验证交易
ckb-cli mock-tx verify --tx-file debug-tx.json
你将看到验证结果和调试输出。
另外关于如何构建交易可参考 RFC:CKB 的交易结构
使用 VM debugger 和 GDB
1. Install ckb-standalone-debugger 安装 ckb-standalone-debugger
git clone https://github.com/nervosnetwork/ckb-standalone-debugger
cd ckb-standalone-debugger/bins
cargo build --release
2. Start standalone debugger 启动 ckb-standalone-debugger
ckb-standalone-debugger 支持 ckb-cli 生成的模板。要调试一个脚本,我们用 -g <script type> 来指代 script group 类型,这表示我们想要调试哪个 script group,使用引用的 -h <script hash>。
ckb-debugger -l 0.0.0.0:2000 -g type -h <type script hash> -t debug-tx.json
3. 启动 GDB
docker run --rm -it -v pwd:/code nervos/ckb-riscv-gnu-toolchain:bionic-20191012 bash
# start gdb
riscv64-unknown-elf-gdb <path of script binary>
# connect to debugger server
target remote <ip>:2000
若想了解更多,请参考 CKB 开发者 Xuejie 的文章:CKB 脚本编程简介第一弹: 验证模型
关于提交 bug
当您在脚本中发现与安全相关的 bug 时,请不要将其发布在 github public issue。请在 ckb dev telegram(https://t.me/nervos_ckb_dev) 联系维护人员,这不仅有助于维护人员更新,也可以防止用户损失资金。
当您在 CKB 官方 script 或 CKB VM 中发现与安全相关的 bug 时,欢迎加入我们的 bug bounty program,我们会为您的宝贵贡献提供丰厚奖励!
本文相关推荐: 几个方法让你避开投资骗局
以上便是知世金融网给大家分享的关于和你说说调试 CKB 脚本的几个技巧/qkl/29356.html的相关信息了,希望能帮助到大家,更多金融相关信息,敬请关注知世金融网!
网站内容均来自互联网,如侵害您的利益联系客服进行删除!
下一篇:EOS的BM:为什么区块链是更好的应用服务器/数据库架构?
本文标题:和你说说调试 CKB 脚本的几个技巧
本文地址:/index.php?s=article&c=search&keyword=%E5%87%A0%E4%B8%AA