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

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

🖥 本番環境の構築を行う

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

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

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

💳 トランザクション

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

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

  • 新規にスマートコントラクトをデプロイしたという情報をブロックチェーンに書き込む。

  • NFT が Mint されたという情報をブロックチェーンに書き込む。

  • NFT を 10 点、コントラクト所有者のためにキープした情報をブロックチェーンに書き込む。

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

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

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

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

Alchemyのアカウントを作成したら、CREATE APPボタンを押してください。

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

  • NAME: プロジェクトの名前(例: NFTCollectible)
  • DESCRIPTION: プロジェクトの概要
  • CHAIN: Ethereumを選択。
  • NETWORK: sepoliaを選択。

それから、作成したAppのVIEW DETAILSをクリックします。

プロジェクトを開いたら、VIEW KEYボタンをクリックします。

ポップアップが開くので、HTTPのリンクをコピーしてください。

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

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

🦊 MetaMask をダウンロードする

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

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

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

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

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

  • これは、認証作業のようなものです。

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

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

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

  • イーサリアムメインネットにコントラクトをデプロイした際に発生するイベントのテストを行うのに最適です。

  • テストネットは偽のETHを使用しているため、いくらでもトランザクションのテストを行えます。

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

1. トランザクションの発生を世界中のマイナーたちに知らせる

2. あるマイナーがトランザクションを発見する

3. そのマイナーがトランザクションを承認する

4. そのマイナーがトランザクションを承認したことをほかのマイナーたちに知らせ、トランザクションのコピーを更新する

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

🚰 偽の ETH を取得する

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

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

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

✍️: MetaMask でSepolia Test Networkを設定する方法 1 . MetaMask ウォレットのネットワークトグルを開く。

2 . Show/hide test networksをクリック。

3 . Show test networksONにする。

4 . Sepolia Test Networkを選択する。

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

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

🤫 機密情報を隠す

まず、dotenvライブラリを使用して、先ほど作成したAlchemy URLとあなたのMetaMaskの秘密鍵を隠していきます。

.envというファイルをpackages/contractディレクトリ内に作成し、下記のように編集しましょう。

API_URL="YOUR_ALCHEMY_API_URL"
PRIVATE_KEY="YOUR_PRIVATE_SEPOLIA_ACCOUNT_KEY"

※ ターミナルでlsを押すと(コマンドプロンプトではdir)、隠しファイルを確認できます。

1. YOUR_ALCHEMY_API_URLの取得

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

2. YOUR_PRIVATE_SEPOLIA_ACCOUNT_KEYの取得

1. お使いのブラウザから、MetaMask プラグインをクリックして、ネットワークをSepolia Test Networkに変更します。

2. それから、Account detailsを選択してください。

3. Account detailsからExport Private Keyをクリックしてください。

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

5. あなたの秘密鍵(= Private Key )が表示されるので、クリックしてコピーします。

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

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

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

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

  • ユーザー名: MetaMask の公開アドレス
  • パスワード: MetaMask の秘密鍵

ユーザー名とパスワードを使用して、AWS にログインしてプロジェクトをデプロイするのと同じです。

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

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

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

  • packages/contract/hardhat.config.js

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

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

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

hardhat.config.jsをVS Codeで開いて、中身を下記のように更新しましょう。

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

const { API_URL, PRIVATE_KEY } = process.env;

module.exports = {
solidity: "0.8.17",
defaultNetwork: "sepolia",
networks: {
sepolia: {
url: API_URL,
accounts: [PRIVATE_KEY],
},
},
};

これで、.envに定義したAPI_URLPRIVATE_KEYの値が呼び出され、hardhat.config.jsが使用できるようになりました。

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

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

🚨: あなたの個人情報を GitHub にコミットしたり、ほかの人に教えてはいけません

ここで取得した MetaMask の秘密鍵は、あなたの Mainnet の秘密鍵と同じです。

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

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

🙋‍♂️ 質問する

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

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

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

Sepolia Test Networkへのデプロイが完了したら、次のレッスンに進みましょう 🎉