1. 程式人生 > >在合約中獲取代幣餘額のEOS智慧合約系列

在合約中獲取代幣餘額のEOS智慧合約系列

在EOS合約開發中,難免會遇到需要在合約的action中取獲取賬戶餘額的問題。合約中又不可以對外進行請求,那麼怎麼拿別的合約中的資料呢?

就拿eosio.token合約來講,你會發現在 eosio.token.hpp 中會預留有一個 inline asset get_balance(account_name owner, symbol_name sym) const 的函式,很明顯該函式名就可以看出是用來獲取餘額的。接下來如何在自己的合約中呼叫這個函式呢?

首先在你的合約中引入標頭檔案,貌似可以不引入也可以,引入也無大礙呀

#include <eosio.token/eosio.token.hpp>

用法說明:

auto eos_token = eosio::token("合約名");
auto token_balance = eos_token.get_balance("使用者名稱", symbol_type(S("幣種精度", "幣種名")).name());

我們先演示下獲取賬戶 supertoken11 的EOS餘額

在需要獲取餘額的action加入以下三行程式碼

auto eos_token = eosio::token(N(eosio.token));
auto token_balance = eos_token.get_balance(N(supertoken11), symbol_type(S(4, EOS)).name());
eosio_assert(false, std::to_string(token_balance.amount).data());

可以看到中斷如下,輸出的是 supertoken11 的EOS餘額 為 2460000 ,說明是有 246個EOS

在區塊瀏覽器上核實,如下

接下來獲取 第三方合約的代幣餘額,這裡以 supertoken11 合約中的 TKB 代幣為例,加入程式碼如下:

auto eos_token = eosio::token(N(supertoken11));
auto token_balance = eos_token.get_balance(N(supertoken11), symbol_type(S(4, TKB)).name());
eosio_assert(false, std::to_string(token_balance.amount).data());

得到的中斷資料和區塊鏈上查出來的資料,核對一樣。

合約中獲取代幣餘額的使用就解釋到這裡啦,如有不懂可以先去看一遍 eosio.token 的原始碼哦。