メインコンテンツへスキップする

Hardhatを使用してスマートコントラクトをデプロイする

Hardhatは、人気のあるスマートコントラクト開発フレームワークです。 このチュートリアルでは、Hardhatを使用して、Astar zkEVMテストネットにシンプルな、数を数えるスマートコントラクトをデプロイします。 サンプルコントラクトとそれをデプロイするスクリプトを使用したHardhatプロジェクトの作成の基本について説明します。

Hardhatの使い方については、公式のHardhatドキュメントを参照してください。

プロジェクトの新規作成

空のフォルダに移動し、npm プロジェクトの作成を開始するには、npm init を実行し、表示される指示に従います。 yarnのようなnpm以外のパッケージマネージャーを使用することは可能ですが、Hardhatプラグインをシンプルにインストールするため、npm 7以降を使用することがHardhatにより推奨されています。

Hardhat スマートコントラクト

サンプルプロジェクトを作成するには、プロジェクトフォルダにnpx hardhat init を実行します:



  • Press <ENTER> javascript、typescript、または空のプロジェクトを選択します
  • プレス <ENTER> プロジェクトのルートを設定します
  • プレス <ENTER> .gitignoreを追加します
  • Press <ENTER> hardhat @nomicfoundation/hard-toolbox` をインストールします。

デプロイ用のアカウントを作成

  • プロジェクトのルートフォルダに.envファイルを作成し、次の行を追加します:
ACCOUNT_PRIVATE_KEY='my private key'
  • .env ファイルに秘密鍵を書き入れてください。 MetaMask から秘密鍵を取得できます。 MetaMaskから秘密鍵を取得する方法については、以下のセクションを参照してください。
MetaMaskから秘密鍵を取得する方法
  • MetaMaskウィンドウの右上にある垂直方向の3つの点をクリックします

  • アカウントの詳細を選択し、秘密鍵を表示をクリックしてください

  • 秘密鍵を表示するには、メタマスクのパスワードを入力してください

  • 秘密鍵をコピーし、.envファイルに貼り付けます。

警告

Do not commit your private key to a public repository!

.gitignoreファイルに.envが含まれていることを確認して、秘密鍵が公開されているリポジトリにコミットされないようにしてください。

ハードハットの設定

  • hardhat.config.jsファイルを開き、以下のコードを貼り付けてください:
    require("dotenv").config();
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
solidity: "0.8.19",
paths: {
artifacts: "./src",
},
networks: {
zKatana: {
url: `https://rpc.zkatana.gelato.digital`,
accounts: [process.env.ACCOUNT_PRIVATE_KEY],
},
astarZkEvm: {
url: `https://rpc.startale.com/astar-zkevm`,
accounts: [process.env.ACCOUNT_PRIVATE_KEY],
},
},
};

スマートコントラクトの作成

info

注意: サンプルプロジェクトで用いる既存のスマートコントラクトコードは、Lock.solコントラクトです。 削除しても、残しておいても全く問題ありません。

  • コントラクトフォルダにCounter.solという名前の新しいファイルを作成します。
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract Counter {
uint256 currentCount = 0;

function increment() public {
currentCount = currentCount + 1;
}

function retrieve() public view returns (uint256){
return currentCount;
}
}
  • 以下のコードをコピーして Counter.sol コントラクトコードに貼り付けます:
    const hre = require("hardhat");

async function main() {
const deployedContract = await hre.ethers.deployContract("Counter");
await deployedContract.waitForDeployment();
console.log(
`Counter contract deployed to https://zkatana.blockscout.com/address/${deployedContract.target}`
);
}

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

デプロイするスクリプトを作成

  • scripts/deploy.js ファイルの内容を削除し、以下のコードを追加します:
    const hre = require("hardhat");

async function main() {
const deployedContract = await hre.ethers.deployContract("Counter");
await deployedContract.waitForDeployment();
console.log(
`Counter contract deployed to https://zkatana.blockscout.com/address/${deployedContract.target}`
);
}

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

コントラクトのコンパイル

  • dotenv パッケージのインストール: npm install dotenv
  • コントラクトコードをコンパイルします。(CLIのプロジェクトルートに戻り、実行します。)
    npx hardhat compile

コントラクトのデプロイ

  • デプロイするスクリプトを実行:

    npx hardhat run scripts/deploy.js --network zKatana

    出力例:

    Counter contract deployed to https://zkatana.blockscout.com/address/0x8731DC57f9C7e01f5Ba733E7a10692cA540862f8