👋

[Astar]コントラクト備忘録37(Polkadot.jsを使って特定時点での情報を取得しよう!)

2023/03/10に公開

今回は、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