开发的DAPP需要获取另一个帐户的EOS余额,看遍了EOS源码eosiolib下的头文件,觉得只有currency.hpp最靠谱,尝试使用该头文件下的get_balance方法,但是一直没能成功,官方又没有文档,最终放弃。后来又尝试了eosio.token/eosio.token.hpp
竟然让我成功了,这里介绍一下用法:
安装eos的时候并不会把eosio.token放到你的依赖库路径下,所以需要我们自己手动链接一下依赖库
ln -s /your-eos-path/contracts/eosio.token /usr/local/include/
用的时候需要额外带上一个头文件
#include <eosio.token/eosio.token.hpp>
用起来还是很简单的
auto eos_token = eosio::token(N(eosio.token)/* 合约账户名 */);
auto balance = eos_token.get_balance(owner/* 要查的账户名 */, symbol_type(S(4, EOS)).name());
print("eos balance: ", balance.amount);
需要注意的是get_balance的第二个参数为symbol_name,而不是symbol,所以需要先symbol_type(S(4, EOS))构造出symbol后调用name()方法获取。否则会一直提示你找不到对应的余额,主要原因是在于S(4, EOS)构造出的64位无符号数中最后八位代表的是精度,而余额表中的键值不需要用到精度,所以存的时候去掉了最后8位,所以如果直接传入S(4, EOS)会查不出来。
转载自:github