📘

thirdwebを使ってNFTのマーケットプレイスを作成する

2022/11/22に公開

こんにちは、CryptoGamesの高橋です。

今回はthirdwebを使って、NFTのマーケットプレイスを作成していきます。

こちらのGithubから簡単に作ることができます。
https://github.com/thirdweb-example/marketplace

こちらの具体的な中身を見ていきましょう。

1 メタマスク接続について

まずは、「Conntect Wallet」を押したときに、メタマスク接続ができるようにしていきます。

こちらの、useMetamask関数を使います。

下のように、「connectWithMetamask」に入れて

下のように「Conntect Wallet」を押したときに実行しています。

2 コントラクトのインスタンスを取得する

こちらの、useContract関数を使います。

今回は、マーケットプレイス用に、こちらのコントラクトを用意しています。

なお、今回は作成方法の詳細は省きますが、こちらで簡単に作ることができます。
https://thirdweb.com/thirdweb.eth/Marketplace

コントラクトのインスタンスを、下のように取得します。
なお、第二引数の「marketplace」はコントラクトタイプを表しています。

3 マーケットプレイスのアクティブリストを取得する

こちらの、useActiveListings関数を使います。

下のように、データとロードの状態を取得しています。

ロード状態時は、「Loading listings...」と表示させています。

ロードが終わりましたら、map関数を使って、個々のリスティングのIDや画像などを表示させています。

4 リストを作成する

下のように、リストを作成する処理を作っていきます。

こちらの、createListing関数を使います。

ここにあるように、引数として、コントラクトアドレスやトークンIDなどに加え、価格や開始時間、販売期間などを渡しています。

実際に、このように渡しています。

なお、ここでは下のように2つのトランザクションが要求されます。
①setApprovalForAll
②createListing

5 個々のリストを取得する

こちらの、useListing関数を使います。

下のように、ローディング中には「Loading...」と表示し、
リスティングがない場合には「Listing not found」と表示します。

リスティングが存在する場合には、下のように名前や画像などを取得しています。

結果、下のように表示されていました。

6 ネットワークが異なるかどうかを取得する

こちらの、useNetworkMismatch関数を使います。

ここに書かれているように、「desiredChainId」に一致するかどうかを取得しています。

下のように取得し、

trueかfalseかで、下のように分岐させています。

7 ネットワークを切り替える

こちらの、useNetwork関数を使います。

下のように、「switchNetwork」に入れて

このように、今回はGoerliに設定しています。

8 リストの商品を購入する

こちらの、buyoutListing関数を使います。

下のように適用しています。

9 オファーを行う

こちらの、makeOffer関数を使います。

下のように適用しています。

今回は以上です。

ぜひやってみてください。

Discussion