在合约中读取第三方合约的数据表のEOS智能合约系列

版权声明:版权属 ©胖子ღ牛逼,微信:xuewen-weiboweixin https://blog.csdn.net/z_xuewen/article/details/85138762

在之前的文章中有提到在合约中获取代币余额的方法,但是有时候这个方法会出现当代币没有余额时被中断报错的问题,那么我们可以使用主动获取合约中数据表的方式去读取数据,自行作判断。

今天在这里简单地介绍一下如何读取第三方合约数据表,这里以eosio.token的accounts表为示例。

首先需要先定义一个相同结构的struct,用来接受数据

struct account
{
    asset balance;

    uint64_t primary_key() const { return balance.symbol.name(); }
};
typedef eosio::multi_index<N(accounts), account> accounts;

在action中使用获取表数据

asset quantity = asset(1.0000, S(4, EOS));
account_name account = N(xxxxxxxxxxxx);
accounts acnts(N(eosio.token), account);
auto itr = acnts.find(quantity.symbol.name());

调试的时候可以使用eosio_assert进行中断输出数据。

eosio_assert(false, std::to_string(itr->balance.amount).data());

可以看到输出错误中的message信息,即是获取到的数据在这里也就是余额

猜你喜欢

转载自blog.csdn.net/z_xuewen/article/details/85138762