BCOS链智能合约开发避坑

2020年6月10日10:10:08
评论
230
摘要

BCOS链特有的Table结构直接与数据库打交道,solidity智能合约在开发中遇到的一些问题总结。如table的entry循环赋值出错;非storage变量不能使用push,memory变长数组不支持push;string[]作为函数参数;处理时间函数;Table插入问题。

更多区块链技术与应用分类:

区块链应用    区块链开发

以太坊 | Fabric | BCOS | 密码技术 | 共识算法 | 比特币其他链

通证经济传统金融场景 | 去中心化金融 | 防伪溯源 | 数据共享 | 可信存证

 

 

BCOS链智能合约开发避坑

 

1. table的entry循环赋值出错

执行代码

错误描述

查看entry的值,出i=0,之后值均为空。

BCOS链智能合约开发避坑

错误原因

字符串解析方法(如下代码所示)中,切割时依照“,”作为分隔符

但之前待分隔字符串中“,”附近存在空格:

因此,t_bag_struct.fields中的字符串会存在若干个空格问题,导致entry.set无法存储

修改之后(去掉空格),代码如下,运行正常。

2. 非storage变量不能使用push,memory变长数组不支持push

执行代码

在上面这个例子中,可以看到,可通过stateVar.length++语句对数组长度进行自增,我们就得到了一个不断变长的数组。

3. string[]作为函数参数,似乎无法成功

改为string,然后使用strings库进行切

4. 处理时间函数

https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary

5.Table插入问题

一旦出问题,重新命名表并新建。

 


原文链接:BCOS链智能合约开发避坑

BCOS最后更新:2020-11-6
  • 本文由 发表于 2020年6月10日10:10:08
  • 转载请注明:https://www.wanghaoyi.com/bcos-contract-troubleshooting.html
Solidity合约间调用原子性操作实验 BCOS

Solidity合约间调用原子性操作实验

实验说明 为了测试在合约内调用另一个合约时,若在某一方法内,先调用另一个合约方法导致其数据更改成功,而执行后面的语句时由于某些原因导致交易失败,那么已经被调用的合约数据已然更改还是未被更改?针对这个问...
以太坊之数据存储详解 以太坊

以太坊之数据存储详解

本文整理分析以太坊网络中的区块、交易以及合约数据是如何存储的。 区块结构 区块由两部分组成,分别是区块头(header)和区块体(body)两部分,详细结构图如下。 区块头(header) 区块头存储...
WeIdentity-Sample国密化部署 BCOS

WeIdentity-Sample国密化部署

之前基于全国密化搭建了FiSCO BCOS链,但是官网给的WeIdentity-Sample例子是基于非国密的,欲将WeIdentity-Sample在国密下运行,还需要手动修改下。 1.修改代码 W...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: