🚀

Deploy Contract to Mumbai with Hardhat

2022/11/01に公開

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> とか書いてたけど特に指定できずに即反映されました!

https://hardhat.org/hardhat-runner/docs/guides/verifying

ハマったところ

  • 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 ファイルがあるかなどを確認する。

参考リンク

https://hardhat.org/hardhat-runner/docs/config

https://qiita.com/koffee0522/items/f852b8c82543d1a7b6f5

Discussion