見出し画像

コントラクトをローカルにデプロイする

前回、作成したクイズコントラクトをHardhatのローカルにデプロイしていきます。

scriptsフォルダーを作成して、フォルダー内にdeploy.jsファイルを作成します。

mkdir scripts
touch deploy.js


deploy.jsに以下のコードを貼り付けます。

const { ethers } = require("hardhat");

const main = async () => {
  const [deployer] = await ethers.getSigners();

  const quizAppFactory = await ethers.getContractFactory("QuizApp");
  const quizAppContract = await quizAppFactory.deploy();
  const quizApp = await quizAppContract.waitForDeployment();
  const deployedContractAddress = await quizApp.getAddress();


  console.log("Contract deployed to:", deployedContractAddress);
  console.log("Contract deployed by: ", deployer.address);
};

const runMain = async () => {
  try {
    await main();
    process.exit(0);
  } catch (error) {
    console.error(error);
    process.exit(1);
  }
};

runMain();


デプロイするアドレスをdeployerに入れます。

  const [deployer] = await ethers.getSigners();


QuizAppコントラクトのインスタンスを生成するためのファクトリを取得します。

const quizAppFactory = await ethers.getContractFactory("QuizApp");


コントラクトをブロックチェーン上にデプロイします。

  const quizAppContract = await quizAppFactory.deploy();


トランザクションがマイニングされ、コントラクトのデプロイが完了するまで待機します。

  const quizApp = await quizAppContract.waitForDeployment();


ethers.jsのデプロイ方法は下記でしたが、現在はwaitForDeployment()を使うやり方に変更されています。

const QuizApp = await ethers.getContractFactory("QuizApp");
quizApp = await QuizApp.deploy();
quizApp.deployed();


コントラクトアドレスを取得して、ログに出力します。

  const deployedContractAddress = await quizApp.getAddress();


コマンドを短縮するためpackage.jsonのscriptsにデプロイコマンドを追加します。

"scripts": {
  "test": "npx hardhat test",
  "local_deploy": "npx hardhat run scripts/deploy.js --network localhost"
}


local_deployを実行します。

npm local_deploy

> contract@1.0.0 local_deploy
> npx hardhat run scripts/deploy.js --network localhost

Contract deployed to: 0x5FC8d32690cc91D4c39d9d3abcBD16989F875707
Contract deployed by:  0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266


ローカルにデプロイできたことが確認できました!


いいなと思ったら応援しよう!