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
}
- 状态
解决中
solidity文档的解释
根据官方的文档,有这样一段话:
限制的情况: 当前在外部函数中,不能使用多维数组。 另外,基于EVM的限制,不能通过外部函数返回动态的内容。
此外,他给了一种可能的方法:
一种临时的解决办法,是使用一个非常大的静态数组。
也就是说,在现有的solidity合约中,因为EVM的原因,外部函数不能直接获取动态数组信息。但是通过浏览器的返回值显示与truffle console的命令行返回值显示。有一种基于返回对象的值获取方式。
- 方法
无
时间问题
最近想在智能合约里用一下时间,然而找了一个上午的资料,愣是没找到相关内容。
solidity的now变量返回的是最新区块的时间戳,不是当前时间的时间戳,这明显不是我想要的。
解决办法:
将事件生效和终止的控制权交到admin的手里