👻
(動画付き)[Astar]コントラクト備忘録41(Polkadot.jsを使ってトランザクションを実行しよう!)
本日は、Polkadot.jsを用いて、トランザクションを実行してみましょう。
この記事に対応するYouTubeはこちらです。
トランザクションの実行には、下にあるように「tx.<messageName>」で実行します。
https://polkadot.js.org/docs/api-contract/start/contract.tx
今回のサンプルコードはこちらです。
index.tsx
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'
const { Keyring } = require('@polkadot/keyring');
import metadata from "./metadata.json";
const inter = Inter({ subsets: ['latin'] })
const apiKey = process.env.NEXT_PUBLIC_MNEMONIC;
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, "ZQ4RpChAKdDqkcssYjRhuupc9tUsWG1uhu7Birqm9StwMms")
const keyring = new Keyring({ type: 'sr25519' });
const alicePair = keyring.createFromUri(apiKey);
const flipResult = await contract.tx.flip(
{
gasLimit: api?.registry.createType('WeightV2', {
refTime: 10000000000,
proofSize: PROOFSIZE,
}) as WeightV2,
storageDepositLimit,
},).signAndSend(alicePair,{nonce: -1}, (result: any) => {
if (result.status.isInBlock) {
console.log('in a block');
} else if (result.status.isFinalized) {
console.log('finalized');
}} )
console.log("flipResult", flipResult)
}
main().then(() => console.log('completed'))
.env.local
NEXT_PUBLIC_MNEMONIC = ''
webpack.config.js
import Dotenv from "dotenv-webpack";
export default {
plugins: [new Dotenv()],
};
.eslintrc.json
{
"extends": ["next", "next/core-web-vitals", "prettier", "next/babel"]
}
トランザクションを実行するので、まずは実行者のキーペアを準備します。
下のようにして作成します。
そして、オフィシャルを元に、下のようにトランザクションを実行しようとしますが、下のようにエラーが発生します。
そのため、このように型を指定します。
結果、このようになり、無事トランザクションが実行されました。
ちなみに、「refTime」を下のように設定すると、エラーが生じます。
こちらは下の記事をご参照ください。
今回は以上です。
Discussion