📝
(動画付き)[Astar]コントラクト備忘録35(Polkadot.jsを使って残高の変化を取得しよう!)
本日は、Polkadot.jsを用いて、アドレスの残高の取得と、残高が変化したときに通知を受けてみましょう。
この記事に対応するYouTubeはこちらです。
こちらの「Listen to balance changes」を見ていきましょう。
https://polkadot.js.org/docs/api/examples/promise/listen-to-balance-change
今回は、こちらのコードを使用します。
const ALICE = '5D2MwJP4v1TeauSooBvJ8ueUyxtmrqpq6FpJTXbENwWSzn8M';
async function main () {
// Initialise the provider to connect to the local node
const provider = new WsProvider('wss://rpc.shibuya.astar.network');
// Create the API and wait until ready
const api = await ApiPromise.create({ provider });
// Retrieve the initial balance. Since the call has no callback, it is simply a promise
// that resolves to the current on-chain value
let account = await api.query.system.account(ALICE);
console.log("account", account)
let { data: { free: previousFree }, nonce: previousNonce } = await api.query.system.account(ALICE);
console.log(`${ALICE} has a balance of ${previousFree}, nonce ${previousNonce}`);
console.log(`You may leave this example running and start example 06 or transfer any value to ${ALICE}`);
// Here we subscribe to any balance changes and update the on-screen value
api.query.system.account(ALICE, ({ data: { free: currentFree }, nonce: currentNonce }) => {
// Calculate the delta
const change = currentFree.sub(previousFree);
// Only display positive value changes (Since we are pulling `previous` above already,
// the initial balance change will also be zero)
if (!change.isZero()) {
console.log(`New balance change of ${change}, nonce ${currentNonce}`);
previousFree = currentFree;
previousNonce = currentNonce;
}
});
}
main().then(() => console.log('completed'))
確認したいアドレスはこちらに入れてください。
また、このように、エラーも発生してしまっています。
こちらによると、TypeScriptの場合、デフォルトでは「Substrate types」「endpoints」がデコレートされていないようです。
そのため、「import '@polkadot/api-augment';」を入れる必要があります。
https://github.com/polkadot-js/api/releases/tag/v7.0.1
このように入れると、エラーが消えたようです。
では、中身を少し見てみましょう。
「await api.query.system.account(ALICE)」の結果を、下のように分割代入しています。
実際にaccountを確認すると、下のような構造になっていることが確認できました。
こちらも見てみましょう。
取得した値をもとに、コールバック関数を実行しています。
また、上の「sub」は「Balance」オブジェクトのメソッドであり、差分を計算しているようです。
別でトランザクションを起こし、ガス代分の残高を減らすと、下のように変化した量と、新しいnonceを表示しました。
今回は以上です。
Discussion