Windows探索体验长安链Golang智能合约08

233 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…

根据上面几篇文章的折腾,我们在 Windows 平台上有了一条可以折腾 Golang 智能合约的长安链。这样方便后续智能合约的开发与调试。

下面尝试部署 Golang 测试智能合约,看看能否正常运行。

根据官方文档,下载 DockerGo 的智能合约。

按文档进行操作,这里要注意两点:

  1. 长安链节点服务器必须安装 7z 工具,用于系统解压智能合约文件,不然就会报错:

image.png

  1. 如果使用的 TBFT 共识策略,需要在投票管理中,进行投票操作,才能部署成功。

image.png

由于我们之前安装的是 OpenCloudOS 操作系统,所以安装 7z 工具不能按照部署提示的页面来:

image.png

这里提示的应该是 CentOS7 的安装方法。根据之前的文章,OpenCloudOS 是基于 CentOS8 的。所以用下面的命令进行安装:

yum -y install epel-release 
yum -y install p7zip p7zip-plugins

安装 7z 工具完成后,继续尝试部署智能合约,遇到报错:

image.png

翻译过来就是“智能合约初始化失败,获取字节码超时”。

好事多磨啊~~~

将 DockerGo 虚拟机的日志级别调整为 DEBUG,尝试获取更多有用的信息:

vim TestCMorg1-示例测试节点1/config/TestCMorg1/chainmaker.yml 

image.png

在我尝试重新部署智能合约,想要复现问题的时候,竟然部署成功了:

image.png

查看了下源码:

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,既然成功了,赶紧调用智能合约玩玩:

image.png

image.png

image.png

成功,撒花!!!🎉🎉🎉

下一篇是最后一章,我们总结一下这次探索之旅~

系列文章: