⛑️

ポリゴン - Hardhat mumbaiへのデプロイと実行

2024/01/03に公開

Hardhatを使用して、ポリゴンのテストネットのmumbaiにスマートコントラクトをデプロイし、実行する手順になります。

こちらのHardhatクイックスタートの続きから説明しますので、まずはこちらの手順に沿ってプロジェクトの作成を済ませておいてください。

https://hardhat.org/hardhat-runner/docs/getting-started#quick-start

Mumbai

hardhat.config.tsに、mumbaiネットワークとetherscanを設定します。

hardhat.config.ts
import {HardhatUserConfig} from "hardhat/config";

const config: HardhatUserConfig = {
    defaultNetwork: "localhost",
    solidity: "0.8.19",
    networks: {
        mumbai: {
            url: "https://rpc-mumbai.maticvigil.com",
            accounts: [process.env.PRIVATE_KEY!]
        },

    },
    etherscan: {
        apiKey: {
            polygonMumbai: process.env.POLYSCAN_KEY!
        }
    }
};

export default config;

polygonscan > APIキーから、APIキーの新規作成をします。デプロイ先はmumbaiですが、APIキーはpolyscan(mumbaiではなく)から作成します。

環境変数PRIVATE_KEYPOLYSCAN_KEYを設定します。

環境変数
export PRIVATE_KEY=f58e... (メタマスクのアカウント詳細からプライベートキーをコピペ)
export POLYSCAN_KEY=93ZR... (先ほど作成したpolygonscanのAPIキーをコピペ)

mumbaiへデプロイします。

デプロイ
npx hardhat run scripts/deploy.ts --network mumbai

デプロイが成功すると、アンロック・タイムスタンプとコントラクト・アドレスが表示されるので、これを控えます。

デプロイ結果
Lock with 0.01ETH and unlock timestamp 1704078355 deployed to 0x3D6D4...De98f

次にverifyをします。タイムスタンプとアドレスをご自身の値に置き換えてください。

ライブラリのインストール
pnpm install --save-dev @nomicfoundation/hardhat-verify
verify
npx hardhat verify --network mumbai 0x3D6D4...De98f 1704079784

成功すると以下のように表示されます。最後に表示されるURLをブラウザから開きます。

以下のように緑のチェックマークがつきます。

アンロックされる60秒後まで待ちます。

新規にファイルscripts/withdraw.tsを作成し、スマコンのwithdraw()を呼び出す実装をします。その際にconnect(signer)で呼び出すアカウントを指定します。

scripts/withdraw.ts
import {ethers} from "hardhat";

async function main() {
    try {
        const Lock = await ethers.getContractFactory("Lock");

        // ご自身のスマートコントラクトのアドレスを設定する
        const contractAddress = "0x063B...577";
        const contract = await Lock.attach(contractAddress);

        // デプロイしたアカウントで実行する。
        const privateKey = process.env.PRIVATE_KEY!;
        const wallet = new ethers.Wallet(privateKey);
        const signer = wallet.connect(ethers.provider);

        await contract.connect(signer).withdraw(); // スマコンの呼び出し

        console.log("done");

    } catch (error) {
        console.error(error);
        process.exit(1);
    }
}

main();

スクリプトを実行し、スマート・コントラクトを呼び出します。

スマコンの実行
npx hardhat run scripts/withdraw.ts --network mumbai

正常に成功すると、スマコンのバランスがゼロになり、正常にMaticが引き出されたことが確認できます。イベントを開くとWithdrawalとインターナル・トランザクションが作成されたのが確認できます。

Discussion