eos.cdt升级到1.4.1

2018-12-07  本文已影响0人  liuchungui

前天,我看到别人的合约能传递string[]参数,而我传递时,报错Error 3015004: The type defined in the ABI is invalid. Error Details: invalid type >。然后,google之后没找到解决问题的方案,于是在eos developers群中问了个问题,最后才知道是因为eos.cdt 1.2.1存在这个bug,只要升级到最新版本就没有问题了。

今天,我将eos.cdt升级到1.4.1,然后写了一个简单合约,测试了传递string[]类型进去,果然没有问题了。不过,在升级之后,发现改变内容挺多的,都没法编译,然后参考Differences between Version 1.2.x and Version 1.3.x进行修改,算是暂时可以了。

我总结下自己修改的几点。

extern "C" {
    void apply(uint64_t receiver, uint64_t code, uint64_t action) {
        auto self = receiver;

        if (code == name("eosio.token").value && action == name("transfer").value) {
            execute_action(name(receiver), name(code), &seller::receive_transfer);
            return;
        }

        if (code != receiver) return;

        if(action == name("testgame").value) {
            execute_action(name(receiver), name(code), &seller::testgame);
        }
    }
}
#include <eosiolib/eosio.hpp>

struct buy {
    name buyer;
    asset use;
    asset buy;
    uint64_t primary_key() const {
        return buyer.value;
    }
};
typedef eosio::multi_index<"buyinfo"_n, buy> buy_list;
seller(name receiver, name code,  datastream<const char*> ds):contract(receiver, code, ds), _buy_list(_code, _code.value) {}

总结

文档中,我只是将官方的示例文档修改下,熟悉了下,若是一个项目的话,修改内容会更多。

上一篇 下一篇

猜你喜欢

热点阅读