👋
[Astar]コントラクト備忘録37(Polkadot.jsを使って特定時点での情報を取得しよう!)
今回は、Polkadot.jsを用いて、特定時点での情報をとってきます。
こちらを見ていきましょう。
また、下にあるように、基本的には最後の256ブロックだけということもポイントだと思います。
https://polkadot.js.org/docs/api/examples/promise/read-storage-at
こちらのコードを貼り付けました。
const ALICE = '5D2MwJP4v1TeauSooBvJ8ueUyxtmrqpq6FpJTXbENwWSzn8M';
const BOB = '5D7wg3iQZj8xhpoecMfCd4GRttfbP8mBz7Y9ZWbxsW9Ho1s2';
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 });
const { hash, parentHash } = await api.rpc.chain.getHeader();
console.log(`last header hash ${hash.toHex()}`);
console.log("parentHash",parentHash.toHex())
// Retrieve the balance at the preceding block for Alice using an at api
const apiAt = await api.at(parentHash);
const balance = await apiAt.query.system.account(ALICE);
console.log(`Alice's balance at ${parentHash.toHex()} was ${balance.data.free}`);
// Now perform a multi query, returning multiple balances at once
const balances = await api.query.system.account.multi([ALICE, BOB]);
console.log(`Current balances for Alice and Bob are ${balances[0].data.free} and ${balances[1].data.free}`);
}
下のように、「api.rpc.chain.getHeader()」を用いて、現在のブロックのハッシュとその親のハッシュを取得しています。
そして、その、親の時点でのbalanceを取得しています。
また、「api.query.system.account.multi()」を用いることで、二つのaccountを取得しています。
下のように、親のハッシュや現在のハッシュ、balanceを取得していることが確認できました。
また、Blockscoutを確認することで、ハッシュが間違っていないかも確認ができます。
https://shibuya.subscan.io/block
今回は以上です。
Discussion