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

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

今天在这里简单地介绍一下如何读取第三方合约数据表,这里以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信息,即是获取到的数据在这里也就是余额

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值