💭

thirdwebでNFT所有者を抽出し、その所有者のみが特定のトークンで新たなNFTを購入できるようにする

2022/11/23に公開

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

今回はthirdwebのコントラクトで作成したNFTの所有者を抽出し、その所有者のみが特定のトークン・価格で新しいNFTを購入するという仕組みをやってみます。

なお、この記事はこちらのblogを元に進めています。
https://blog.thirdweb.com/guides/allow-nft-holders-to-mint-nfts-in-custom-erc20-token/

0 事前準備

事前準備として、thirdwebでFT(ERC20)とNFT(ERC721)のコントラクトを作成してください。

ERC20
https://thirdweb.com/thirdweb.eth/TokenERC20
ERC721
https://thirdweb.com/thirdweb.eth/DropERC721

今回は詳細を省きますが、簡単な操作で作ることができます。

なお、NFTは
①既に作成済みで所有者がいるという設定のもの
②新しく作り、ホワイトリストを作るという設定のもの

の2種類があるとよいと思います。

1 今回やりたいこと

設定
=======================================
・ERC20:コントラクトA ⇦ 既に発行済みのトークン
・ERC721:コントラクトB ⇦ 既に発行済みで所有者がいるNFT
・ERC721:コントラクトC ⇦ これからホワイトリストを登録し、新たに作成するNFT
=======================================

① コントラクトBの所有者・数量リストを取得する
② コントラクトCにホワイトリストを登録する
・登録者:「1200Aトークン」で新しいNFTを購入することができる
・非登録者:「0.1ETH」で新しいNFTを購入することができる

2 NFTの所有者・数量リストを取得する

こちらの、Githubからgit cloneした状態から始めていきます。
https://github.com/thirdweb-example/custom-currency-claim-conditions

まずは、現在すでに多くの所有者がいる設定のNFTのコントラクトから、所有者・数量リストを抽出します。

事前準備で作成したコントラクトアドレスを入れます。

コントラクトのインスタンスを取得できなかったり、NFTがなければ、ログを出します。

下のように、それぞれのウォレットがいくつのNFTを持っているのかを抽出します。

その上で、0アドレスについてはリストから外します。

そして、最後にCSV形式にします。

CSVはこちらの「snapshot.csv」にあります。
これで、CSVの抽出が完了しました。

3 新しいNFTのコントラクトにホワイトリストを登録する

設定方法は、こちらをご参照ください。
https://zenn.dev/yuki2020/articles/f8e288aeef19bf

ホワイトリスト以外のウォレットがいくらで購入できるかを設定します。

その上で、「Edit Claimer Snapshot」で先ほどのCSVファイルを登録していきます。

このように登録されました。

あとは保存すれば完了です。

4 登録者と非登録者で試してみる

では、最後にうまく行っているかを試してみましょう。

登録されていないウォレットで接続すると、このように「0.1GOR」と表示されます。
(Goerliで作成しているので、「GOR」です。)

一方、登録済みのウォレットで接続すると、このように、あらかじめ設定したトークンで購入ができます。

今回は以上です。

最後までお読みいただき、ありがとうございました。

Discussion