在合約中獲取代幣餘額のEOS智慧合約系列
阿新 • • 發佈:2019-01-13
在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 的原始碼哦。