😸

コントラクトdeploy ~ verifyまで

2023/12/01に公開

スマートコントラクトをデプロイしてイーサscanなどでコントラクトのデプロイをすることがよくあるので備忘録としてまとめておく。今回はmumabaiテストネットでの方法。

前提としてhardhatを使用

詳細なhardhatの使用方法などはここでは割愛させていただく。

hardhat起動してプロジェクトを開始する手順は下記

mkdir project名
cd hardhat-project名
npm init -y
npm install --save-dev hardhat
npx hardhat

コントラクト作成

contractsフォルダにコントラクト作成。

hardhat.config.tsに設定値記載

ここも詳細な説明は省く。私の環境では下記のように記載

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@nomiclabs/hardhat-etherscan";
require('dotenv').config();

const config: HardhatUserConfig = {
  solidity: {
    compilers: [
      { version: "0.8.18" },
      { version: "0.8.20" }
    ]
  },
  networks: {
    mumbai: {
      url: "https://rpc-mumbai.maticvigil.com", // Mumbai RPC URL
      accounts: [`0x${process.env.MUMBAI_PRIVATE_KEY}`] // 秘密鍵
    }
  },
  etherscan: {
    apiKey: process.env.POLYGONSCAN_API_KEY
  }
};

export default config;

コンパイル -> デプロイ -> Verify

コンパイル

npx hardhat compileこのコマンドでコンパイル

mameta test-smart-contract %npx hardhat compile
Generating typings for: 3 artifacts in dir: typechain-types for target: ethers-v5
Successfully generated 36 typings!
Compiled 3 Solidity files successfully (evm target: paris).

デプロイ

最小限のデプロイスクリプトの例を下記に記載しておく。
scripts/deploy.jsとして記載。

import { ethers } from "hardhat";

async function main() {
  const TestContract = await ethers.getContractFactory("TestContract");
  const testContract = await TestContract.deploy();

  await testContract.deployed();

  console.log(
    `testContract deployed to ${testContract.address}`
  );
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

下記コマンドでデプロイ

mameta test-smart-contract %npx hardhat run scripts/deploy.ts --network mumbai
PassportSBT deployed to 0x35288b---------------------78762

Verify

下記コマンドでVerifyすると mumbai スキャンでコントラクトを確認することができる。

mameta test-smart-contract %npx hardhat verify --network mumbai --contract contracts/PassportSBT.sol:PassportSBT 0x35288bac0777aD7dDA37BE2B0d38873BDDb78762

Nothing to compile
No need to generate any newer typings.
Successfully submitted source code for contract
contracts/PassportSBT.sol:PassportSBT at 0x35288bac0777aD7dDA37BE2B0d38873BDDb78762
for verification on the block explorer. Waiting for verification result...

Successfully verified contract PassportSBT on Etherscan.
https://mumbai.polygonscan.com/address/0x35288bac0777aD7dDA37BE2B0d38873BDDb78762#code

ちなみにこれをする前にhardhat.config.tsで下記の設定を記載しておく必要あり。apiキーはそれぞれのスキャンに行けば取得できる。

  etherscan: {
    apiKey: process.env.POLYGONSCAN_API_KEY
  }

Discussion