Ethereumのローカルノードを立ち上げて、MetaMaskも使ってみる (hardhat)

記載日2024/01/26

備忘録で、Ethereumのノード（サーバ）をローカル環境で立ち上げる手順を記載します。
MetaMaskをローカル環境につなぐ手順も記載します。

## hardhatとは
Ethereumをより簡単に環境構築したり運用するための環境開発ライブラリ。

## 環境
・OS : Ubuntu22.04
・curl : 7.81.0
・yarn : 1.22.21
・nodejs : 20.7.0 (私の環境ではnodenvを使っています)
　npm : 10.1.0

## 手順
### hardhatの決まり事
hardhatは、デフォルトで以下の設定になっている。これらの値は後々使うので頭の片隅に入れておく。
　サーバのポートは8545 ([参考](https://hardhat.org/hardhat-network/docs/overview#:~:text=Running%20stand%2Dalone%20in%20order%20to%20support%20wallets%20and%20other%20software))
　チェーンIDは31337 ([参考](https://hardhat.org/hardhat-network/docs/metamask-issue))
### 1. hardhatライブラリのインストール (5分)
毎回`npx hardhat ～`と入力するのは手間なので、

<details>
<summary>yarnの場合</summary>

~~~
yarn add --dev hardhat && \
sudo apt-get update && \
npx hardhat init
~~~

</details>



<details>
<summary>npmの場合</summary>

~~~
npm install --save-dev hardhat && \
sudo apt-get update && \
npx hardhat init
~~~

</details>

いくつか質問されるので、適宜選択する。私は、よく`Create a TypeScript project`を使う。.gitignoreの作成や、yarnでの必要なライブラリ追加は`y`で進めるのが良いかと思う。

### 2. コントラクトのコンパイルとノード起動 (5分)
手順1でEthereum環境は用意できたので、ノードを起動してみる。

まずコントラクトをコンパイルする。
~~~
npx hardhat compile
~~~

次にローカル環境にノードを起動する。
hardhatのおかげで、20アカウントがサンプルとして既に有る状態で、Ethereumノードが起動する。
~~~
npx hardhat node
~~~

### 3. 【yarnの場合】今後の操作を楽にするために（package.jsonの編集） (2分)
毎回`npx hardhat ～`と入力するのは面倒なので、ショートカットコマンドを使えるようにする。

package.jsonを開く。"dependencies"と同じ階層に"scripts"がないかと思うので、以下のようなscriptを追記する。"scripts"がすでにある場合には、その中にスクリプト部分を追記する。
これで、`yarn compile`と入力すればコンパイルできるし、'yarn noderun'でノード起動できる。
~~~
{
  "scripts": 
  {
    "compile": "npx hardhat compile",
    "noderun": "npx hardhat node",
  },
  "dependencies": {
    ～
  },
  ～
}
~~~

### 4. MetaMaskでアクセスしてみよう
MetaMaskはEthereum系ブロックチェーンの通貨やNFTを操作管理するためのツールで、ブラウザの拡張機能で使うことができます。ウォレットアプリと呼ばれるようです。MetaMask以外にもTrust WalletSafePalなどがあったり、各仮想通貨取引所がアプリ提供していると思います。
今回はMetaMaskをローカル環境のノードにつないでみようと思います。

#### 4.1. MetaMaskインストール (5分)
ブラウザの拡張機能からMetaMaskをインストールする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/3c571c72-2076-206c-5d76-e8926a1daaad.png" width=60%>

#### 4.2. MetaMaskの初期設定 (15分)
MetaMaskを起動し、初期設定を行う。
[こちら](https://matsumoto-inc.co.jp/nft-media/metamask/)の手順①と②が参考になる。

#### 4.3. MetaMaskでローカルネットワークを設定する (10分)
初期画面は以下のような感じになっている。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/499350a0-4ee9-2860-e535-82cbbffea237.png" width=60%>

左上にあるネットワーク設定ボタンを押し、”ネットワークを追加”を押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/7c0071c9-b885-2ef2-1b17-3c2d09c1080d.png" width=60%>

ネットワーク追加画面が表示されるので、下の方にある”ネットワークを手動で追加”を押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/9af907bc-d79b-9bb1-c613-fc9cf457de1f.png" width=60%>

ネットワークのコンフィグ画面が表示されるので、ローカルのhardhat環境の値を設定する。設定後、”保存”を押す。
<ul>
<li>ネットワーク名：自由に設定する</li>
<li>新しいRPC URL：hardhatサーバのURL。ポートをデフォルトから変更している場合は、変更したポートを使う。</li>
<li>チェーンID：31337</li>
<li>通貨記号：Eth</li>
</ul>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/7bccd1c9-1b81-2ca2-6426-7d72bd568531.png" width=60%>

正しく設定されていると、ネットワークが追加される。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/c418cae7-a12a-2635-3667-f459c55f782c.png" width=60%>

トップ画面の左上にあるネットワーク設定ボタンから、ローカル環境を選択すると切替完了。

#### 4.4. ローカル環境のアカウントを追加 (10分)
hardhatでは、サーバ起動時に自動で[20アカウント](https://hardhat.org/hardhat-network/docs/reference#:~:text=20%20accounts%20with%2010000%20ETH%20each)を用意している。その中から使いたいアカウントを追加する。

中央上部のアカウント設定ボタンを押す。”＋”ボタンを押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/f262f3c2-370b-a6b5-d57f-4bc43859b3a0.png" width=60%>

”アカウントをインポート”ボタンを押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/470e0ab5-5f03-20ae-34f7-baef1d66d4ed.png" width=60%>

hardhatでEthereumサーバ起動時に、コンソールにアカウントIDと秘密鍵のセットが表示されているので、追加したいアカウントに対応する秘密鍵を入力する。入力後、”インポート”ボタンを押す。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1381309/1540b75c-bae6-504f-f623-6ce187736459.png" width=60%>

アカウントが追加される（10000Ethを持った状態）。
複数のアカウントを追加するとお互いに送金できるので、試してみると実感がわく。（ローカル環境のEthを使っているだけなので、費用はかからない。）



### 参考にさせて頂いたサイト
・hardhatホームページのドキュメント
https://hardhat.org/hardhat-runner/docs/getting-started#overview

・yarnのインストール手順
https://chore-update--yarnpkg.netlify.app/ja/docs/install#linux-tab

・MetaMaskの初期設定
https://matsumoto-inc.co.jp/nft-media/metamask/