智能合约中的若干问题

introduction

语言:solidity
编译器:solc 0.5.16
开发环境:vs code

问题1:函数返回值

  • 问题描述
    我有这样一个函数及参数如下:
 struct BallotList{
        uint[] list;
 }
 mapping(address=>BallotList) ballotList;
 
function getCandidateLength()public view returns(uint length){
        length=ballotList[msg.sender].list.length;
        // return uint(ballotList[msg.sender].list.length);
    }

当我在truffle console下调用该合约函数后,其返回值不是uint类型,而一个object类型(但是solidity里没有这样的概念),返回如下:

truffle(development)> instance.getCandidateLength()
BN { 
	negative: 0, 
	words: [ 2, <1 empty item> ], 
	length: 1, 
	red: null
}

根据官方的文档,有这样一段话:

限制的情况: 当前在外部函数中,不能使用多维数组。 另外,基于EVM的限制,不能通过外部函数返回动态的内容。

此外,他给了一种可能的方法:

一种临时的解决办法,是使用一个非常大的静态数组。

也就是说,在现有的solidity合约中,因为EVM的原因,外部函数不能直接获取动态数组信息。但是通过浏览器的返回值显示与truffle console的命令行返回值显示。有一种基于返回对象的值获取方式。

  • 方法

时间问题

最近想在智能合约里用一下时间,然而找了一个上午的资料,愣是没找到相关内容。
solidity的now变量返回的是最新区块的时间戳,不是当前时间的时间戳,这明显不是我想要的。
解决办法:
将事件生效和终止的控制权交到admin的手里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值