メインコンテンツまでスキップ

lesson-1_コントラクトをテストネットにデプロイしよう

🖥 本番環境の構築を行う

ローカル環境のイーサリアムネットワークを終了します。

  • ターミナルを閉じれば完了です。

これから、実際のブロックチェーンにコントラクトをデプロイするための環境を構築していきます。

🦊 MetaMask をダウンロードする

次に、イーサリアムウォレットをダウンロードしましょう。

このプロジェクトではMetaMaskを使用します。

  • こちら からブラウザの拡張機能をダウンロードし、MetaMaskウォレットをあなたのブラウザに設定します。

すでに別のウォレットをお持ちの場合でも、今回はMetaMaskを使用してください。

✍️: MetaMask が必要な理由 ユーザーが、スマートコントラクトを呼び出すとき、本人のイーサリアムアドレスと秘密鍵を備えたウォレットが必要となります。 これは、認証作業のようなものです。

💳 トランザクション

イーサリアムネットワーク上でブロックチェーンに新しく情報を書き込むことを、トランザクションと呼びます。

ここまでのレッスンに登場したトランザクションは以下です。

  • 新規にスマートコントラクトをデプロイしたという情報をブロックチェーン上に書き込む。
  • Web サイト上で送信された「👋(wave)」の数をブロックチェーンに書き込む。

トランザクションにはマイナーの承認が必要ですので、Alchemyを導入します。

Alchemyは、世界中のトランザクションを一元化し、マイナーの承認を促進するプラットフォームです。

こちら からAlchemyのアカウントを作成してください。

💎 Alchemy でネットワークを作成

Alchemyのアカウントを作成したら、Appsページの+ Create new appボタンを押してください。

次に、下記の項目を埋めていきます。下図を参考にしてください。

  • Chain: Ethereumを選択
  • Network: Ethereum Sepoliaを選択
  • Name: プロジェクトの名前(例: ETH dApp)
  • Description: プロジェクトの概要(任意)

Create appボタンを押すと、プロジェクトが作成されます。API Keyをクリックすると、表示されたポップアップからKeyを取得することができます(今回のプロジェクトで使用するのは、HTTPSに表示されているものになります)。

これがあなたが本番環境のネットワークに接続する際に使用するAPI Keyになります。

  • API Keyは、今後必要になるので、PC 上のわかりやすいところに保存しておきましょう。

🐣 テストネットから始める

今回のプロジェクトでは、コスト(= 本物のETH)が発生するイーサリアムメインネットではなく、テストネットにコントラクトをデプロイします。

テストネットはイーサリアムメインネットを模しています。

  • イーサリアムメインネットにコントラクトをデプロイした際に発生するイベントのテストを行うのに最適です。
  • テストネットは偽のETHを使用しているため、いくらでもトランザクションのテストを行えます。

今回は、以下のイベントをテストしていきます。

  1. トランザクションの発生を世界中のマイナーたちに知らせる
  2. あるマイナーがトランザクションを発見する
  3. そのマイナーがトランザクションを承認する
  4. そのマイナーがトランザクションを承認したことをほかのマイナーたちに知らせ、トランザクションのコピーを更新する

このセクションでは、コードを書きながら、これらのイベントについての理解を深めていきます。

🚰 Testnet ETH を取得する

今回は、Sepoliaというイーサリアム財団によって運営されているテストネットを使用します。

Sepoliaにコントラクトをデプロイし、コードのテストを行うために、偽のETHを取得しましょう。ユーザーが偽のETHを取得するために用意されたインフラは、「フォーセット(=蛇口)」と呼ばれています。

フォーセットを使用する前に、あなたのMetaMaskウォレットをSepolia Test Networkに設定してください。

✍️: MetaMask でSepolia Test Networkを設定する方法

1 . MetaMask ウォレットのネットワークトグルを開きます。

2 . Show test networksONにして、表示されたSepoliaを選択します。

3 . ネットワークがSepoliaに切り替わったことを確認します。

MetaMaskウォレットにSepolia Test Networkが設定されたら、下記のリンクの中から条件に合うものを選んで、少量の偽ETHを取得しましょう。

  • Alchemy - 1 Sepolia ETH(24時間に1度もらうことができる)
    • ウォレットアドレスを入力してSend Me ETHボタンを押下するとその場でもらえます。

📈 hardhat.config.jsファイルを編集する

hardhat.config.jsファイルを変更する必要があります。

これは、スマートコントラクトプロジェクトのルートディレクトリにあります。

  • 今回は、packages/contractディレクトリの直下にhardhat.config.jsが存在するはずです。

例)ターミナル上でpackages/contractに移動し、lsを実行した結果

$ ls
README.md artifacts cache contracts hardhat.config.js package.json scripts test

hardhat.config.jsをVS Codeで開いて、中身を編集していきます。

require("@nomicfoundation/hardhat-toolbox");

module.exports = {
solidity: "0.8.19",
networks: {
sepolia: {
url: "YOUR_ALCHEMY_API_URL",
accounts: ["YOUR_PRIVATE_SEPOLIA_ACCOUNT_KEY"],
},
},
};

1. YOUR_ALCHEMY_API_URLの取得

hardhat.config.jsYOUR_ALCHEMY_API_URLの部分を先ほど取得した Alchemy の URL( HTTPリンク) と入れ替えます。

2. YOUR_PRIVATE_SEPOLIA_ACCOUNT_KEYの取得

ドキュメントを参考に取得していきます。

  1. お使いのブラウザから、MetaMask プラグインをクリックして、画面上部のアカウント選択をクリックします。

  1. 秘密鍵をエクスポートしたいアカウントの横にあるメニューをクリックし、Account detailsを開きます。

  1. Show Private Keyをクリックしてください。

  1. MetaMask のパスワードを求められるので、入力したらConfirmを押します。

  1. Hold to reveal Private Keyを長押しすると、あなたの秘密鍵(= Private Key )が表示されるので、クリックしてコピーします。

  • hardhat.config.jsYOUR_PRIVATE_SEPOLIA_ACCOUNT_KEYの部分をここで取得した秘密鍵とを入れ替えます。

🙊 秘密鍵は誰にも教えてはいけません

hardhat.config.jsを更新したら、ここで一度立ち止まりましょう。

🚨: hardhat.config.jsファイルをあなたの秘密鍵の情報を含んだ状態で GitHub にコミットしてはいけません

この秘密鍵は、あなたのイーサリアムメインネットの秘密鍵と同じです。

秘密鍵が流出してしまうと、誰でもあなたのウォレットにアクセスすることができてしまうので、とても危険です。

絶対に秘密鍵を自分以外の人が見れる場所に置かないようにしましょう

下記を実行して、VS Codeで.gitignoreファイルを編集しましょう。

code .gitignore

.gitignorehardhat.config.jsの行を追加します。

.gitignoreの中身が下記のようになっていれば、問題ありません。

node_modules
.env
coverage
coverage.json
typechain
typechain-types

#Hardhat files
cache
artifacts
hardhat.config.js

.gitignoreに記載されているファイルやディレクトリは、GitHubにディレクトリをプッシュされずに、ローカル環境にのみ保存されます。

✍️: スマートコントラクトをデプロイするのに秘密鍵が必要な理由 > 新しくスマートコントラクトをイーサリアムネットワーク上にデプロイすることも、トランザクションの一つです。

トランザクションを行うためには、ブロックチェーンに「ログイン」する必要があります。

「ログイン」には下記の情報が必要となります。

  • ユーザー名: 公開アドレス
  • パスワード: 秘密鍵 ユーザー名とパスワードを使用して、AWS にログインしてプロジェクトをデプロイするのと同じです。

⚠️: すでにGitHubにhardhat.config.jsをpushしてしまった場合の対処法

すでにGitHubにコードをpushしている場合は、ターミナル上で下記を実行してください。

git rm --cached hardhat.config.js

これで、ローカルリポジトリのhardhat.config.jsファイルを残した状態で、リモートリポジトリのファイルを消すことができます。再度、git pushまで行ったら、GitHub上にhardhat.config.jsが存在しないことを確認してください。

🚀 Sepolia Test Network にコントラクトをデプロイする

hardhat.config.jsの更新が完了したら、Sepolia Test Networkにコントラクトをデプロイしてみましょう。

ではルートディレクトリにいることを確認して、ターミナル上で下記のコマンドを実行しましょう。

yarn contract deploy

下記のような結果が出力されていれば成功です 🎉

Deploying contracts with account:  0x1A7f14FBF50acf10bCC08466743fB90384Cbd720
Account balance: 174646846389073382
Contract deployed to: 0x04da168454AFA19Eb43D6A28b63964D8DCE8351e
Contract deployed by: 0x1A7f14FBF50acf10bCC08466743fB90384Cbd720

あなたのターミナル上で、Contract deployed toの後に出力されたコントラクトアドレス(0x..)をコピーして、保存しておきましょう。後でフロントエンドを構築する際に必要となります。

👀 Etherscan でトランザクションを確認する

コピーしたContract deployed toに続くアドレスを、Etherscan に貼り付けて、あなたのスマートコントラクトのトランザクション履歴を見てみましょう。

Etherscanは、イーサリアムネットワーク上のトランザクションに関する情報を確認するのに便利なプラットフォームです。

表示されるまでに約 1 分程度かかる場合があります。

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#ethereumで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨

1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット

Sepolia Test Networkにスマートコントラクトをデプロイしたら、次のレッスンに進みましょう 🎉