开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…
根据上面几篇文章的折腾,我们在 Windows 平台上有了一条可以折腾 Golang 智能合约的长安链。这样方便后续智能合约的开发与调试。
下面尝试部署 Golang 测试智能合约,看看能否正常运行。
根据官方文档,下载 DockerGo 的智能合约。
按文档进行操作,这里要注意两点:
- 长安链节点服务器必须安装 7z 工具,用于系统解压智能合约文件,不然就会报错:
- 如果使用的 TBFT 共识策略,需要在投票管理中,进行投票操作,才能部署成功。
由于我们之前安装的是 OpenCloudOS 操作系统,所以安装 7z 工具不能按照部署提示的页面来:
这里提示的应该是 CentOS7 的安装方法。根据之前的文章,OpenCloudOS 是基于 CentOS8 的。所以用下面的命令进行安装:
yum -y install epel-release
yum -y install p7zip p7zip-plugins
安装 7z 工具完成后,继续尝试部署智能合约,遇到报错:
翻译过来就是“智能合约初始化失败,获取字节码超时”。
好事多磨啊~~~
将 DockerGo 虚拟机的日志级别调整为 DEBUG,尝试获取更多有用的信息:
vim TestCMorg1-示例测试节点1/config/TestCMorg1/chainmaker.yml
在我尝试重新部署智能合约,想要复现问题的时候,竟然部署成功了:
查看了下源码:
git.chainmaker.org.cn/gyf/vm-engi…
需要账号登录查看,没有账号注册一个就好了。
...
// _getByteCodeTimeout is the timeout(s) of get byte code, request group will clean all txs and exit then.
const _getByteCodeTimeout = 6
...
// reset get bytecode timer
r.getBytecodeTimer.Reset(_getByteCodeTimeout * time.Second)
内部的计时器会设置为6秒超时,所以部署智能合约时可能刚好卡在这个时间附近,导致有时成功,有时超时。
ok,既然成功了,赶紧调用智能合约玩玩:
成功,撒花!!!🎉🎉🎉
下一篇是最后一章,我们总结一下这次探索之旅~
系列文章: