thirdwebを使ってNFTのマーケットプレイスを作成する
こんにちは、CryptoGamesの高橋です。
今回はthirdwebを使って、NFTのマーケットプレイスを作成していきます。
こちらのGithubから簡単に作ることができます。
こちらの具体的な中身を見ていきましょう。
1 メタマスク接続について
まずは、「Conntect Wallet」を押したときに、メタマスク接続ができるようにしていきます。
こちらの、useMetamask関数を使います。
下のように、「connectWithMetamask」に入れて
下のように「Conntect Wallet」を押したときに実行しています。
2 コントラクトのインスタンスを取得する
こちらの、useContract関数を使います。
今回は、マーケットプレイス用に、こちらのコントラクトを用意しています。
なお、今回は作成方法の詳細は省きますが、こちらで簡単に作ることができます。
コントラクトのインスタンスを、下のように取得します。
なお、第二引数の「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