前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >维基链智能合约APIbug定位修复

维基链智能合约APIbug定位修复

原创
作者头像
维基链WICC
修改2019-03-04 14:41:36
5050
修改2019-03-04 14:41:36
举报
文章被收录于专栏:维基链技术专区

一、关于维基链WICC

1、自行查看相关资料

(1)官方网站 (2)Github (2)开发者中心

二、维基链提供智能合约Dapp开发

从源码可知WICC底层基于bitcoin,上层是运行Lua虚拟机,智能合约跟以太坊、EOS类似,特殊是由Lua开发

三、开发过程遇到的问题

1、由开发者接口文档可知其智能合约API是由底层mylib库提供合约与链数据的交互

2、mylib库GetTxConfirmHeight接口函数调用失败

(1)GetTxConfirmHeight接口说明

(2)由文档可知其功能是通过hash查询其上链时的区块高度

以某合约交易hash值cfad02ea148ca0a763baaf67735c010023bb75c88509f6a94e87921a54182f02 为例,可在维基链测试网区块浏览器查询到结果如下图,确认高度为639083

(3) 问题分析过程

· 测试代码如下

· 结果打印输出结果一直如下,即取不到hash被确认的高度

(4)查看底层接口代码

c++功底还不够深,看不出啥问题

(5)换个思路:有没有其他入参也是hash的接口调用是正常的?对比一下代码

功夫不负有心人,GetTxContracts接口也是入参为hash,写测试代码发现此接口是正常的,同样的入参,一个正常一个异常,对比一下函数实现

(6)对比发现亮点

由以下图片可见,ExGetTxConfirmHeightFunc 函数取入参hash直接进行操作,ExGetTxContractsFunc函数对入参hash进行倒序后再操作,加打印信息调试确实两者的hash有倒序的区别

(7)解决方法:在操作之前对hash进行倒序

(8)同样的代码测试通过

confirm_height= 639083.0

注意:链上虚拟机版本问题,输出的高度值为Number类型 :123456.0,开发者使用此值的时候需要注意

3、同样的问题出现在mylib库GetBlockHash接口函数中

取到的hash值为被倒序了,解决方法同上

4、修改之后引入的问题

由于区块链的特性是去中心化的,WICC共识机制为DPOS,目前为11个超级节点随机轮流记账出块,本地节点通过以上修改之后合约可以正常获得数据,但是由于超级节点没有同步更新 所以如果只修改本地节点,调用修复后的接口后,区块同步会停止 原因未找到,有进展后续会更新…

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档