👻

(動画付き)[Astar]コントラクト備忘録41(Polkadot.jsを使ってトランザクションを実行しよう!)

2023/03/12に公開

本日は、Polkadot.jsを用いて、トランザクションを実行してみましょう。

この記事に対応するYouTubeはこちらです。
https://www.youtube.com/watch?v=yG09eeBjMMQ

トランザクションの実行には、下にあるように「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」を下のように設定すると、エラーが生じます。

こちらは下の記事をご参照ください。

https://zenn.dev/yuki2020/articles/06cc36a2b11c36

今回は以上です。

Discussion