波场中返回数组 / 学习智能合约#43

in STEEM CN/中文2 months ago

因为波场中的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。只是希望波场不要落后太多,也多开放些基金以支持生态的发展。