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

lesson-1_thirdwebのセットアップをしよう

🍪 thirdweb のセットアップをしよう

前回までのLessonでユーザーのウォレット接続ができるようになりました。

つまり、ユーザーがDAOに参加しているかどうかをチェックできるようになったということです。

一般的に、ユーザーがDAOに参加するためにはメンバーシップNFTを所有する必要があります。

もし、メンバーシップNFTを持っていなければ、メンバーシップNFTをミントし、DAOに参加するよう促しましょう。

ただし、NFTをミントするためには、独自のNFTスマートコントラクトを作成し、デプロイする必要がでてきます。

そこで thirdweb の出番となるわけです。

thirdweb は、Solidityを一切書かずにスマートコントラクトを作成するためのツール一式を提供してくれるのです。

このプロジェクトでは、Solidityを書きません。

必要なのは、コントラクトを作成し、デプロイするためにTypeScriptで書かれたスクリプトを記述することだけです。

thirdweb は、作成された安全で標準的なコントラクトを使用します。

興味のある方はぜひ覗いてみてください。

thirdwebを利用してコントラクトをデプロイすると、クライアントサイドSDKを通してフロントエンドから簡単にそれらのコントラクトとやりとりができます。

Solidityのコードを書くのに比べて、thirdwebでスマートコントラクトを作るのがいかに簡単であるかは明らかです。

では、さっそくコードを書いていきましょう。

thirdweb のダッシュボードから、コードを書かずにコントラクトを作成することもできますが、このプロジェクトではTypeScriptを使って実装していくことにします。

※ thirdwebはデータベースを持っておらず、あなたのデータはすべてオンチェーンに保存されます。

📝 環境変数を設定しよう

thirdwebを使ってSepoliaにコントラクトを作成し、デプロイするためにはスクリプトをいくつか作成する必要があります。

その前に、まずはプロジェクトのルートに以下の.env.localファイルを作成し以下のように編集しましょう。

PRIVATE_KEY=YOUR_PRIVATE_KEY_HERE
CLIENT_ID=YOUR_CLIENT_ID
SECRET_KEY=YOUR_SECRET_KEY

ここに記載する情報は誰にも教えてはならない情報なので、取り扱いには十分に注意しましょう。

⚠️ 注意:thirdweb は、あなたに代わってコントラクトをデプロイするために、これらすべての環境変数を必要とします。

秘密鍵を盗まれてしまう恐れがあるので、.env.localファイルを GitHub にコミットしないよう気をつけてください。.gitignore ファイルに.env.localが含まれていることを確認してください。

YOUR_PRIVATE_KEY_HEREにはMetamaskのPrivate Keyを、YOUR_CLIENT_IDにはthirdweb APIキーのClient IDを、YOUR_SECRET_KEYにはthirdweb APIキーのSecret Keyを設定していきましょう。

PRIVATE_KEYの取得方法は、こちらを参照してください。

※ CLIENT_IDとSECRET_KEYの取得方法については以下で解説していきます。

🔑 API キーを作成する

SDKでthirdwebのインフラサービスを利用するには、APIキーが必要になります。APIキーは、thirdwebのダッシュボードから無料で作成することができます。

こちらからthirdwebのダッシュボードにアクセスをして、ウォレット接続を行いSign inしましょう。

Sign inが完了したら、ダッシュボード右上の「+ Create API Key」をクリックします。

APIキーに任意の名前をつけて、「Next」をクリックします。

次に、APIキーの設定を行います。下記画像のようにサービス有効化とアクセス制限の設定を行い、最後に「Create」をクリックします。

画面上に作成したAPIキーのClient IDSecret Keyが表示されます。これらの値をコピーして、.env.localYOUR_CLIENT_IDYOUR_SECRET_KEYにそれぞれ設定しましょう。注意書きにもありますが、Secret Keyは表示されている画面を閉じると二度と取得することはできないので、大切に保管してください。設定と保管が完了したら、「I have stored the Secret Key securely」をクリックして画面を閉じます。

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

今回のプロジェクトでは、コスト(= 本物の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ボタンを押下するとその場でもらえます

🙋‍♂️ 質問する

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

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

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

次のレッスンでは、実際にthirdwebスクリプトを書きメンバーシップNFTをデプロイします!