😊
[Astar]コントラクト備忘録43(Polkadot.jsでpsp22Metadata::tokenSymbolなどの関数を実行しよう)
本日は、「psp22Metadata::tokenSymbol」などの関数を使った値の読み取りを行っていきたいと思います。
こちらの記事は、下の記事の続きの位置付けです。
関数を読み取る際には、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