🚀
Deploy Contract to Mumbai with Hardhat
hardhat での Mumbai テストネットワークへのデプロイ方法が公式に名言されてなかったり(Network は JSON-RPC のネットワークか hardhat 独自のネットワークだよとしか書いて無く、Mumbai をどのように指定すればいいかパッとわからなかった)、各記事でネットワークの指定名がバラバラだった( matic
とか maticmum
とかあった)のでメモ。
環境変数を使う準備
秘密鍵や Alchemy API Key などを使うので dotenv
をインストールする。
npm i dotenv
hardhat.config.ts と同じ階層に .env
を配置(.env.local
では駄目だった)。
// .env
MUMBAI_RPC_URL=https://polygon-mumbai.g.alchemy.com/v2/[YOUR_API_KEY]
PRIVATE_KEY=[YOUR_METAMASK_PRIVATE_KEY]
hardhat.config.ts
// hardhat.config.ts
import * as dotenv from 'dotenv' // 他より先に読み込む必要があるらしい
dotenv.config()
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
const config: HardhatUserConfig = {
solidity: "0.8.17", // ここは人によって違う
defaultNetwork: "mumbai",
networks: {
hardhat: {
},
mumbai: {
url: process.env.MUMBAI_RPC_URL,
accounts:
process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
},
},
};
export default config;
Deploy
npx hardhat compile // コマンド叩く場所はルートのままでいい
npx hardhat run scripts/deploy.ts --network mumbai
Verify
ちなみに Polygonscan など Explorer 上で Contract を Verify してもらい、コードを表示したり、実行できるようにするには
npx hardhat verify --network <contract_address>
を実行するだけです! hardhat 便利! ドキュメントには <unlock time> とか書いてたけど特に指定できずに即反映されました!
ハマったところ
- dotenv を使ったが、
.env.local
では使えなかった - dotenv の
import
(js ならrequire
)は他の imort より前に書かないといけないらしい
トラブルシューティング
TypeError [ERR_INVALID_URL]: Invalid URL
RPC URL が空文字などになっているときに出るエラー
Invalid value undefined for HardhatConfig.networks.mumbai.url - Expected a value of type string.
RPC URL が .env から読み込めていない
HardhatError: HH700: Artifact for contract "xxx" not found.
コンパイルが上手く行っていない。
npx hardhat clean
npx hardhat compile
をするか、ファイル名とコントラクト名が違ってないか、/artifacts/contracts
の中にちゃんとコントラクトに対応した json ファイルがあるかなどを確認する。
参考リンク
Discussion