LoginSignup
0
0

More than 1 year has passed since last update.

Hardhatでテストネットやメインネットにデプロイする方法(Alchemy編)

Last updated at Posted at 2023-04-06

今まではINFURA.IO使うことが多かったけど、近代的な?Alchemyで試してみます。

HardhatでAlchemyを使う方法自体はこちらに手順が紹介されています。
デプロイするものは、この記事のソースをそのまま利用してみたいとおもいます。

前提

  • macOS
  • AlchemyでSignUpを済ませている。
  • アプリを追加(Ethereum Goerli)してKeyやURLを生成している。

準備

.envの追加

作業フォルダに移動。.envを使うので追加インストール。

cd
cd test-hardhat

npm install dotenv

.envを作成

touch .env

.envの記述

GoerliとMAINNET両方の記述をしておきます。

  • ALCHEMY_GOERLI_URLおよびALCHEMY_MAIN_URLはAlchemyで生成してもの。
  • PRIVATE_KEYはMetamask等、外部Walletで生成したもの。
.env
ALCHEMY_GOERLI_URL=https://eth-goerli.g.alchemy.com/v2/pEOf1_cKMf**********************
ALCHEMY_MAIN_URL=https://eth-mainnet.g.alchemy.com/v2/Rs5r6AEO7A2**********************
PRIVATE_KEY=4059d7ccd9006c2************************************************************

PrivateKeyを分けることもできますが、ここでは同じにしてます。
GoerliETHはFaucetサイトで入手できますが、Alchemyのアカウントおよびメインネットで0.001ETH持ってないと動かないようです。また、1日に0.05ETHの制限があるようです。

hardhat.config.jsの編集

各ネットワークへのアクセス情報をhardhat.config.jsに記述します。

localhostは明示的に記述しなくてもいいようです。

hardhat.config.js
require('dotenv').config(); //all the key value pairs are being made available due to this lib
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.18",
  networks: {
    goerli: {
      url: `${process.env.ALCHEMY_GOERLI_URL}`,
      accounts: [`0x${process.env.PRIVATE_KEY}`],
    },
    mainnet: {
      url: `${process.env.ALCHEMY_MAIN_URL}`,
      accounts: [`0x${process.env.PRIVATE_KEY}`],
    }
  }
};

Goerli

Deploy

では、Goerliにデプロイしてみます。--networkで設定したgoeriを指定します。

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

当然ですが、deployするためにはGoerli用のETHを獲得しておく必要があります(0.004ほど消費しました)。
出力されたアドレスは動作確認で利用するのでメモしておきます。

動作確認

consoleも--networkで利用したネットワークを指定すればいいようです。

npx hardhat console --network goerli

動作確認してみます。

> const abi = [
     {
       "inputs": [],
       "name": "greet",
       "outputs": [
         {
           "internalType": "string",
           "name": "",
           "type": "string"
         }
       ],
       "stateMutability": "pure",
       "type": "function"
     }
   ]
undefined
> const address = "0xAAF9692beEF3BBd23488bfcf783c0706********"
undefined
> const hello = await ethers.getContractAt(abi,address)
undefined
> await hello.greet()
'Hello World'

Verify

Etherscan上等でコードやABIを確認できるようにします。
Ehterscan上でも可能ですが、hardhatで対応できるので、hardhatコマンドを利用してみます。

準備

  • まず、EtherscanにSignUpし、API Keyを取得します。
  • API Keyをhardhat.config.jsに登録(.envから取得)
hardhat.config.js
require('dotenv').config(); //all the key value pairs are being made available due to this lib
require("@nomicfoundation/hardhat-toolbox");
// const { etherscanApiKey } = require("./etherscan_apikey.json");

module.exports = {
  solidity: "0.8.18",
  networks: {
    goerli: {
		//省略
    },
    mainnet: {
		//省略
    }
  },
  etherscan: {
    apiKey: `${process.env.ETHERSCAN_API_KEY}`, //追加
  }
};

.envにAPIKEYを追加します。

.env
# 省略
ETHERSCAN_API_KEY=DIKFGXM6ADKP8QNMM1TPH2VH5GU3A***** #追加

実行

verifyを実行します。

npx hardhat verify --network goerli --contract contracts/Hello.sol:Hello 0xAAF9692beEF3BBd23488bfcf783c0706********(コントラクトAddress)

引数があればコントラクトアドレスに続いて入力。

MAIN NET

メインネットの場合も基本的には同じです。--networkでmainnetを指定します。

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

出力されたアドレスは動作確認で利用するのでメモしておきます。

コンソールも同様に。

npx hardhat console --network mainnet

動作確認。

> const abi = [
     {
       "inputs": [],
       "name": "greet",
       "outputs": [
         {
           "internalType": "string",
           "name": "",
           "type": "string"
         }
       ],
       "stateMutability": "pure",
       "type": "function"
     }
   ]
undefined
> const address = "0xAAF9692beEF3BBd23488bfcf783c0706********"
undefined
> const hello = await ethers.getContractAt(abi,address)
undefined
> await hello.greet()
'Hello World'

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0