😊

[Astar]コントラクト備忘録43(Polkadot.jsでpsp22Metadata::tokenSymbolなどの関数を実行しよう)

2023/03/13に公開

本日は、「psp22Metadata::tokenSymbol」などの関数を使った値の読み取りを行っていきたいと思います。

こちらの記事は、下の記事の続きの位置付けです。
https://zenn.dev/yuki2020/articles/cc634d0d74011c

関数を読み取る際には、contract.query.messageNameを行います。

下のような、メソッドを呼ぶにはどうすればよいかが今回のテーマです。

こちらの内容を確認しました。

ここでは、まだ提案中との内容でしたが、この中でうまくいった構文がこちらになります。

内容の変更や更新がありましたら、この記事も更新します。

https://github.com/polkadot-js/api/issues/4469

ちなみに、コードは以下になります。

import Head from 'next/head'
import Image from 'next/image'
import { Inter } from 'next/font/google'
import styles from '@/styles/Home.module.css'
import { ApiPromise, WsProvider } from '@polkadot/api';
import { ContractPromise } from '@polkadot/api-contract';
import { BN, BN_ONE } from "@polkadot/util";
import type { WeightV2 } from '@polkadot/types/interfaces'
import '@polkadot/api-augment'

import metadata from "./metadata.json";

const inter = Inter({ subsets: ['latin'] })
const ALICE = "5D2MwJP4v1TeauSooBvJ8ueUyxtmrqpq6FpJTXbENwWSzn8M"

const MAX_CALL_WEIGHT = new BN(5_000_000_000_000).isub(BN_ONE);
const PROOFSIZE = new BN(1_000_000);
const storageDepositLimit = null;

async function main () {
  // Initialise the provider to connect to the local node
  const provider = new WsProvider('wss://rpc.shibuya.astar.network');

  const api = await ApiPromise.create({ provider});

  const contract = new ContractPromise(api, metadata, "YPayZsa9TQHPzj6qEekevBXxsi9kBXbvat83MYyhWkizNCr")

  console.log("contract", contract.address.toString())
  // psp22::totalSupply
  const { gasRequired, storageDeposit, result, output }  = await contract.query['psp22Metadata::tokenSymbol'](ALICE,
    {
      gasLimit: api?.registry.createType('WeightV2', {
        refTime: MAX_CALL_WEIGHT,
        proofSize: PROOFSIZE,
      }) as WeightV2,
      storageDepositLimit,
    },)

  console.log("output", output?.toHuman())

  // The actual result from RPC as `ContractExecResult`
  console.log(result.toHuman());

  // // the gas consumed for contract execution
  // console.log(gasRequired.toHuman());

  }

main().catch(console.error);

下のように書きました。

結果、このように値を取得することができました。

今回は以上です。

Discussion