Truffle 使い方メモ (2) Polygon Testnetにデプロイ
TruffleでPolygon Testnet (mumbai) にデプロイするまでの手順。
公式ドキュメント → Using Truffle | Polygon Technolgy | Documentation
ニモニックワードを用意する
ニモニックワードは流出しないように別ファイルに記載するのだが、
などいくつかの方法がある。今回は 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