在合約中讀取第三方合約的資料表のEOS智慧合約系列
阿新 • • 發佈:2019-01-13
在之前的文章中有提到在合約中獲取代幣餘額的方法,但是有時候這個方法會出現當代幣沒有餘額時被中斷報錯的問題,那麼我們可以使用主動獲取合約中資料表的方式去讀取資料,自行作判斷。
今天在這裡簡單地介紹一下如何讀取第三方合約資料表,這裡以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資訊,即是獲取到的資料在這裡也就是餘額