リビールNFTの作り方
では本題に進みます。
thirdwebを利用します
リビールを実装するにあたり、thirdwebを利用します。thirdwebにはコントラクトのテンプレートが用意されており、選んだテンプレートをすぐにデプロイできます。
thirdwebで実現できるリビールは、
コントラクトオーナー(つまり自分)が好きなタイミングで、リビールを行うパスワードを入力し、リビールを実施する、というものです。
MINTした直後にリビールしたり、あるいは指定した日時に自動的にリビールする、といった実装はできません。
それではリビールNFTの作成をすすめて行きましょう。
thirdwebのダッシュボードにアクセスします
thirdwebに接続します
walletを接続します。
Ethereum,Polygon,Fantom,Avalancheを利用できます。この例では、EthereumのテストネットであるRinkebyを利用します。右上のウォレットボタンから、Rinkeby(ETH)を選びましょう。
Pre-build Contract 一覧画面へ
Deploy new contractを選択
Deploy new contractを選択した後、作成できるコントラクト一覧が現れます。
必要機能が詰まったコントラクトが作成されていて、非常に便利です。すぐにNFTを作ることができます。
参考:Pre-buildContractの説明
参考までに、22/06現在の各コントラクトの詳細を説明すると下記です。(ERC20の説明は省きます)
ContractをDeployします
NFTDrop(ERC721)のDeployボタンを押下します。
項目の意味は下記の通りです
Name (必須): コントラクト名
Symbol (必須): NFTのシンボル名
Image: コントラクトの画像(NFTのtokenURIではない、あくまでContractのサムネ)
Recipient Sales (必須): MINT時のNFTの販売料金の受け取り先のWalletAddress
Royalities : 二次流通時のマージンのパーセンテージ設定と受け取り先のWalletAddress
Networks : デプロイするチェーン (ひとまずRinkebyを選択)
Deployボタンを押下し、MetamaskでトランザクションをConfirmします。
BatchUploadでNFTをアップロード
Batch Uploadボタンを押下します。
ドロップ画面が表示されます。
ドロップエリアに、CSVまたはCSVと画像を含んだフォルダをアップロードすると、まとめてNFTをアップロードすることができます。ipfsへのホスティングもこのUIからやってくれます。
参考:サンプル用のNFTデータをダウンロード
(この項目は任意です)
アップロードするNFTをいきなり用意するのは大変なので、サンプルを用意いたしました。
右上の「すべてダウンロード」で、アップロード用のサンプルをダウンロードできます。
ダウンロードしたらzipを解凍します。
NFTデータをアップロード
CSVと画像を含んだフォルダごと、ドロップエリアにまるっとドロップします。
アップロード後、プレビューが表示されます。Nextボタンを押下します。
リビール状態の設定
リビール解除のパスワードと、リビール前の状態を設定します。
各設定項目は下記です。
Password / Confirm password: リビール解除のためのパスワード
Placeholder - image: リビール前のNFTの画像
Placeholder - name: リビール前のNFTの名前
Placeholder - desciption: リビール前のNFTの文章
なお、リビール対象が複数あっても、すべて同じものが設定されます。
個別に設定したい場合は、Batch Upload時に小分けにするなどの工夫が必要です。その場合都度ガス代がかかるので注意です。
Uploadボタンを押下します。
Walletが出てくるので「Confirm」を押下します。
これにてリビールするNFTのアップロードは完了です。
アップロードが完了すると、コントラクトのトップ画面に遷移します。アップロード時のCSVに登録した画像が表示されておらず、リビール時に登録した画像やパラメータになっていることがわかります。
リビール状態をコントラクトで確認
(この作業は確認作業のため、任意です。不要な方は飛ばしていただいて結構です)
リビールに設定したものが、実際のチェーン・コントラクトでどう表示されているのかを実データで確認します。
NFTをMINTしないとコントラクトで参照できないので、MINT作業を行います。
「Set Claim Phase」または「Claim Phases」を押下します。
この画面は、NFTのMINT条件を設定するものです。
ClaimPhasesのボックスにある「Add Initial Claim Phase」を押下します。
MINT条件のパラメータを設定します。NFTの価格や、一人当たりの販売上限、MINTの実行間隔制限など、細やかな設定が可能です。
Save Claim Phases を押下します。
WalletのConfirmを押下して、Transactionを発行します。
Embedを押下します。Embedは、wordpress等のサイトに貼り付けることができるMINT用のボックスを出力できます。プレビュー機能があるので、プレビュー機能にて、実際にMINTします。
数量を設定し、MINTボタンを押下します。
Confirmを押下します。
Overviewに移動します。
MINTしたNFTのOwned byが変更されていることを確認することができます。
コントラクトのアドレスをコピーします。
rinkebyのetherscan( https://rinkeby.etherscan.io/ )にアクセスし、addressフォームに、コピーしたコントラクトのアドレスを貼り付けます。
コントラクトの詳細ページに遷移するので、Contract -> ReadContractの順にクリックします。
下に辿っていくと「tokenURI」という項目があるので、そこまで移動し、開きます。(ページ内検索でtokenURIと検索するともっと早く見つけられます)
フォームがあるので、MINTしたIDを入力し、「Query」ボタンを押下します。
NFTが参照するmetadataのアドレスが表示されます。thirdwebがアップロードしてくれているipfsのuriが表示されています。このipfsの中身を確認していきます。
ipfsのアドレスをブラウザに入力しても、正しくジャンプしないので、下記のようにURIを書き換えます。
アクセスすると、jsonが表示されます。リビール用に設定したパラメータが表示されていることがわかります。
さらに画像を確認していきましょう。jsonに含まれる「image」のipfsURIを下記のように書き換えます。
アクセスしてみると、リビール用に設定した画像が表示されるのが確認されます。
と、このように、コントラクト上からもリビールのURIが設定されていること、そしてリビール前のコントラクトが出力されていないことがわかります。
では次の項目では、実際にリビールを実施してみてみます。
リビールを実行する
トランザクションを発行するので、confirmを押下します。
リビール後
リビールするとこのように、Batch UploadでアップロードしたNFT群が公開されていることがわかります。
参考:コントラクトでリビールを確認する
etherscanにて、リビールしたNFTを確認できます。当該コントラクトにアクセスしtokenURIにMINT済みのリビールしたNFTのIDを入力すると、URIが変わっていることがわかります。
リビール設定を複数持たせる場合
なお、リビール設定を複数持たせた場合は、RevealNFTsにプルダウンメニューが表示され、リビール一覧が表示されます。リビールを段階的に行いたい場合は、いくつか分割するとよさそうです。
まとめ
以上がリビールNFTの作り方、となります。
要旨をまとめると
通常NFTのトークン番号のURIは類推できてしまう。トークンごとに価値の変化を持たせたい場合など不都合が多い。
リビールNFTという方法で、URIを隠しておくことができる。
thirdwebでは、コントラクト作成者がフラグを手動解除する形式のリビールを提供している
thirdwebでのリビールのやり方と、実際のコントラクトでの変化を確認できた。