在之前的文章中有提到在合约中获取代币余额的方法,但是有时候这个方法会出现当代币没有余额时被中断报错的问题,那么我们可以使用主动获取合约中数据表的方式去读取数据,自行作判断。
今天在这里简单地介绍一下如何读取第三方合约数据表,这里以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信息,即是获取到的数据在这里也就是余额