Now and Nawoo

NFTの制作記録、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

Truffle 使い方メモ (2) Polygon Testnetにデプロイ

TruffleでPolygon Testnet (mumbai) にデプロイするまでの手順。

公式ドキュメント → Using Truffle | Polygon Technolgy | Documentation

ニモニックワードを用意する

ニモニックワードは流出しないように別ファイルに記載するのだが、

  • .secretファイルに書く (fs.readFileSyncで読み込む)
  • .envファイルに書く (dotenvを使う)
  • secrets.jsonJSON形式で書く (requireする)

などいくつかの方法がある。今回は secrets.json を使う方法にした。

secrets.jsonファイルを作成

プロジェクトフォルダに secrets.json を作成。内容はこんな感じ。後からニモニック以外のsecretも追加できる。

{
  "mnemonic": "apple orange ... banana"
}

重要 GitHub等にアップロードしないように .gitignoreで指定しておく。

HDWalletProvider をインストール

> npm i @truffle/hdwallet-provider

truffle-config.js を修正

networksのところに matic_testnetとmatic_mainnetを追加する。

const { mnemonic } = require("./secrets.json");
const HDWalletProvider = require('@truffle/hdwallet-provider');

...

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*",
    },
    matic_testnet: {
      provider: () => new HDWalletProvider(mnemonic, `https://matic-mumbai.chainstacklabs.com`),
      network_id: 80001,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true
    },
    matic_mainnet: {
      provider: () => new HDWalletProvider(mnemonic, `https://matic-mainnet.chainstacklabs.com`),
      network_id: 137,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true
    },
  },
}

RPCについて

RPCは複数あるので、こちらで確認 → Network | Polygon Technolgy | Documentation

最初は公式ドキュメントの通りに https://rpc-mumbai.matic.today でやっていたのだが、

  • Error: Unknown Error: 404 page not found
  • Error: Unknown Error: 403 Forbidden

などのエラーが出て、何度やってもデプロイできなかった。 RPCを https://matic-mumbai.chainstacklabs.com に変えたらうまくいった。

HDWalletProviderについて

デフォルトではHDウォレットの最初のアドレスが使われるけど、3つ目の引数でindexを指定できる。

// 2つ目のアドレスを使う
provider: () => new HDWalletProvider(mnemonic, "https://~", 1);

GitHub - trufflesuite/truffle-hdwallet-provider: HD Wallet-enabled Web3 provider

マイグレーション

> truffle migrate --network matic_testnet

コンパイルされた後に、デプロイがはじまる。

Starting migrations...
======================
> Network name:    'matic_testnet'
> Network id:      80001
> Block gas limit: 20000000 (0x1312d00)

...

Summary
=======
> Total deployments:   2
> Final cost:          0.08609982 ETH

しばらく時間がかかるが、上のように表示されれば完了。デプロイされたコントラクトのアドレスをコピーして、Polygonscan(Testnet)で確認しよう。

TESTNET Polygon (MATIC) Blockchain Explorer

デプロイ後にコンソールから触る方法

truffle console の --networkスイッチを使う。

> truffle console --network matic_testnet
truffle(matic_testnet)> instance = await MyNFT.deployed()
truffle(matic_testnet)> instance.name()
truffle(matic_testnet)> instance.mint()

Connecting to Public Test Networks with Truffle - Guides and Tutorials - OpenZeppelin Community