波场中返回数组 / 学习智能合约#43
因为波场中的TVM中还只是支持solidity 0.5的版本,在返回数组类型的值时还是不方便。在新版的solidity 0.8的版本中已经不用特别声明了,但是在波场中还是很麻烦,因为它还没有更新到新版本。看来波场要加油抄啊!
returns(address[] memory)
比如这个返回值,在波场中还不支持,必须在最前头加上pragma experimental ABIEncoderV2;
才可执行。这也导致了在返回一个结构体数值时会遇上麻烦!
struct TaskMessage
{
string hash;
address promoter;
address hunterA;
address token;
address[] hunters;
string[] reasonHashs;
uint256 bonus;
uint256 taskStart;
uint256 taskDeadLine;
State state;
}
mapping(uint256 => TaskMessage) public tasks;
如上代码,public
属性的函数会自动生成一个getter函数,所以不必特别再去定义一个函数去获取它的值,是可以直接取出来的。这在以太坊中没什么问题,但在波场中却还是一大问题,因为无法获取上述结构体中hunters
值!所以,必须再定义一个获取数据的函数,如下所示:
function getHunters(uint256 uid)
public
view
returns(address[] memory)
{
return tasks[uid].hunters;
}
现在处于多链的时代,但明显感到波场有些落伍了,事实上也确实如此。现在都有些不太情愿在波场上开发了,更愿意玩polygon。只是希望波场不要落后太多,也多开放些基金以支持生态的发展。