In the old version, I can get self balance by these code:
auto token = eosio::token(N(eosio.token)); const asset balance = token.get_balance(_self, symbol_type(EOS_SYMBOL).name());

But when I upgrade repo to 1.3.2 eosio-cpp, and using eosio.token.hpp, I don't even know how to initial the class, because the constructor has been removed.

So how to write the code above in higher version?


I've solved it ;-)


// START balance get
ACTION balance(name user) {
    const symbol sym(symbol_code("EOS"), 4);
    const auto my_balance = eosio::token::get_balance("eosio.token"_n, get_self(), sym.code());
    print("my balance is ", my_balance);
// END balance get


#pragma once

#include <eosiolib/asset.hpp>
#include <eosiolib/eosio.hpp>

#include <string>

namespace eosiosystem {
class system_contract;

namespace eosio {

using std::string;

CONTRACT token: public contract {
    using contract::contract;

    ACTION create(name issuer, asset maximum_supply);

    ACTION issue(name to, asset quantity, string memo);

    ACTION retire(asset quantity, string memo);

    ACTION transfer(name from, name to, asset quantity, string memo);

    ACTION open(name owner, const symbol& symbol, name ram_payer);

    ACTION close(name owner, const symbol& symbol);

    static asset get_supply(name token_contract_account, symbol_code sym_code) {
        stats statstable(token_contract_account, sym_code.raw());
        const auto& st = statstable.get(sym_code.raw());
        return st.supply;

    static asset get_balance(name token_contract_account, name owner, symbol_code sym_code) {
        accounts accountstable(token_contract_account, owner.value);
        const auto& ac = accountstable.get(sym_code.raw());
        return ac.balance;

    TABLE account {
        asset balance;

        uint64_t primary_key() const {
            return balance.symbol.code().raw();

    TABLE currency_stats {
        asset supply;
        asset max_supply;
        name issuer;

        uint64_t primary_key() const {
            return supply.symbol.code().raw();

    typedef eosio::multi_index<"accounts"_n, account> accounts;
    typedef eosio::multi_index<"stat"_n, currency_stats> stats;

    void sub_balance(name owner, asset value);
    void add_balance(name owner, asset value, name ram_payer);

} /// namespace eosio

ok, i got it, just like this
asset pool_eos = eosio::token::get_balance("eosio.token"_n,get_self(), symbol_code("EOS"));

  • it seems not right......... – liu Rick Nov 6 '18 at 11:51

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.