hanzochang
hanzochang
NFT のリビールとは
tokenURIについて
URLに規則性があると類推できてしまう
見えることが悪いわけではない
リビールNFTのメリット
リビールNFTの使いどころ
thirdwebを利用します
thirdwebのダッシュボードにアクセスします
thirdwebに接続します
walletを接続します。
Pre-build Contract 一覧画面へ
Deploy new contractを選択
参考:Pre-buildContractの説明
ContractをDeployします
BatchUploadでNFTをアップロード
参考:サンプル用のNFTデータをダウンロード
NFTデータをアップロード
リビール状態の設定
リビール状態をコントラクトで確認
リビールを実行する
リビール後
参考:コントラクトでリビールを確認する
リビール設定を複数持たせる場合
https://s3.ap-northeast-1.amazonaws.com/hanzochang.com/_v2/article-ogp-007.png

リビールNFTの作り方 | thirdwebでつくるノーコードなリビールNFT作成方法

この記事では、リビール(reveal)機能付きのNFTの作成方法を紹介します。thirdwebを使うことで、ノーコードで実現できます。リビールNFTを使うことで、NFTプロジェクトに期待感を醸成したり、またはガチャのようにNFTごとに価値を変化させたい場合に効果的です。

公開日2022.06.11

更新日2022.07.05

💡 はじめに:thirdwebの使い方ゼロから知りたい方は

このページはリビールNFTの作り方の解説です。コントラクトの作り方〜サイトの作り方をゼロから知りたい方は 下記の記事がおすすめです。

thirdwebの使い方 - 独自コントラクトの作成と「NFTのMINTサイト」の作り方を紹介 https://hanzochang.com/articles/10

NFT のリビールとは

リビール(reveal)とは「明らかにする」という意味です。

NFT のリビール とは、最初は隠されていて、あるタイミングで内容が公開される NFT のことを指します。

💡注意:有償NFTガチャと賭博罪

**NFT(Non-Fungible Token)と賭博罪 ** https://gvalaw.jp/blog/b20220301

https://gvalaw.jp/blog/b20220301上記記事によるとリビールNFTの仕組みを活用した有償NFTガチャは日本国内法では賭博罪とみなされる可能性があるとのことです。

有償NFTガチャのプレイは賭博罪(刑法第185条)に該当する可能性が高く、有償NFTガチャの仕組みを提供するNFTゲーム事業者等は賭博場開帳罪(同第186条第2項)に該当する可能性が高いため、ガチャの仕組みによるNFTアイテム等を配布する場合には、その制度設計等に慎重な検討が必要となります。

本記事は国内でのリビールNFTを使った有償NFTガチャや賭博行為を推奨するものではなく、あくまでthirdwebを活用した、rinkebyテストネットでのリビールNFTの作成方法を記述したものですので、この点ご留意ください。

tokenURIについて

NFTでは、一般的に、トークン番号に対応するURLを出力する機能を実装する必要があります。

その機能はtokenURIという名称の機能で、トークン番号に対応したURIを発行します。

tokenURIで出力されるするURIのイメージは下記です。

  • トークン番号0に対応した metadata: ipfs://example123456789/0.json
  • トークン番号 1 に対応した metadata: ipfs://example123456789/1.json
  • トークン番号 2 に対応した metadata: ipfs://example123456789/2.json
  • トークン番号 3 に対応した metadata: ipfs://example123456789/3.json
  • ...

URLに規則性があると類推できてしまう

こうした場合、URIに規則性があるので、どんなトークン番号もURIを簡単に類推可能です。 コントラクトコードで隠す工夫をしなければ、誰でも閲覧できてしまいます。

例えば、1000 個の MINT できる NFT コントラクトがあったとします。 特に工夫をしなければ、それぞれのトークン番号は、0,1,2,3,4...999 と規定されます。

こうした場合、トークン番号に対応したすべてのURIは類推可能です。

例えば、期日を区切って、10回に分けて100個ずつMINTするようなキャンペーンを組んで、期待感を煽っていこう、とした場合、 このままの仕組みですと先のデータはあらかじめわかってしまうので、仕掛ける側としては都合が悪いです。 (手動で後でアップロードするという力技はある程度できますが)

先のNFTを見せたくない場合は、隠しておく必要があります。

こうしたときにリビールという仕組みが使われます。

見えることが悪いわけではない

ただ、あらかじめ見えることは悪いことではありません。あらかじめ発行しきっているプロジェクトもありますし、 パターンに規則性があり、NFT ごとに値段に違いがなければ、問題になるようなことではありません。

リビールNFTのメリット

リビール機能を実装することにより、URIを隠すことができ、こうした推測を防ぐことができます。 任意のタイミングで公開フラグを立てることにより、URIを変化させることができます。

具体的にはリビール前にはダミーの画像とダミーのURIを参照させておき、リビール後に、本来意図したURIに変化させるという仕組みを取ります。

これで、発行されていないNFTを類推できないようにしたり、あるいは、NFTを購入したとしても一定の期日にならないと中身がわからない、といった演出をすることが可能です。

リビールNFTの使いどころ

リビールNFTは例えば下記の時に使えます。

  • 演出をつけたい場合
  • マーケティング上、期日を設定して期待感を醸成したい場合

演出がある場合、あらかじめ URI と中身の画像がわかってしまうと、MINT の順番争いになるなど、さまざま不都合が起こりそうです。NFT を使ったゲームやアプリにて、トークンによって能力の差があるような仕組みの場合も、あらかじめ出るものがわかっていると不都合が多そうです。

マーケティング施策としてリビールを活用する手もあります。 いつリビールするかの期限だけを宣言しておき、購入者に MINT を解放しておく。リビールする日に向けてコミュニティの期待感を醸成しておく、という施策も考えられます。

一点注意として、日本国内でいわゆる”ガチャ”のような仕掛けを行った場合、賭博罪に引っかかる可能性があるとのことで、プロジェクトへの反映は各自法務担当者の見解を仰ぐなど、十分な注意が必要です。

では本題に進みます。

thirdwebを利用します

リビールを実装するにあたり、thirdwebを利用します。thirdwebにはコントラクトのテンプレートが用意されており、選んだテンプレートをすぐにデプロイできます。

thirdweb https://thirdweb.com/

https://thirdweb.com/df250a5d14e286026977e3bd7ee391fb.png

thirdwebで実現できるリビールは、 コントラクトオーナー(つまり自分)が好きなタイミングで、リビールを行うパスワードを入力し、リビールを実施する、というものです。

MINTした直後にリビールしたり、あるいは指定した日時に自動的にリビールする、といった実装はできません。

それではリビールNFTの作成をすすめて行きましょう。

thirdwebのダッシュボードにアクセスします

https://thirdweb.com/dashboard

https://thirdweb.com/dashboard

thirdwebに接続します

walletを接続します。

7_01.png

Ethereum,Polygon,Fantom,Avalancheを利用できます。この例では、EthereumのテストネットであるRinkebyを利用します。右上のウォレットボタンから、Rinkeby(ETH)を選びましょう。

7_02.png

Pre-build Contract 一覧画面へ

Deploy new contractを選択

Deploy new contractを選択した後、作成できるコントラクト一覧が現れます。

7_03.png

必要機能が詰まったコントラクトが作成されていて、非常に便利です。すぐにNFTを作ることができます。

7_04.png

参考:Pre-buildContractの説明

参考までに、22/06現在の各コントラクトの詳細を説明すると下記です。(ERC20の説明は省きます)

7_05.png

ContractをDeployします

NFTDrop(ERC721)のDeployボタンを押下します。

7_06.png

コントラクトのメタデータを入力します。

7_07.png

  • 項目の意味は下記の通りです
    • Name (必須): コントラクト名
    • Symbol (必須): NFTのシンボル名
    • Image: コントラクトの画像(NFTのtokenURIではない、あくまでContractのサムネ)
    • Recipient Sales (必須): MINT時のNFTの販売料金の受け取り先のWalletAddress
    • Royalities : 二次流通時のマージンのパーセンテージ設定と受け取り先のWalletAddress
    • Networks : デプロイするチェーン (ひとまずRinkebyを選択)

Deployボタンを押下し、MetamaskでトランザクションをConfirmします。

BatchUploadでNFTをアップロード

Batch Uploadボタンを押下します。

ドロップ画面が表示されます。

7_08.png

7_09.png

ドロップエリアに、CSVまたはCSVと画像を含んだフォルダをアップロードすると、まとめてNFTをアップロードすることができます。ipfsへのホスティングもこのUIからやってくれます。

参考:サンプル用のNFTデータをダウンロード

(この項目は任意です) アップロードするNFTをいきなり用意するのは大変なので、サンプルを用意いたしました。

https://drive.google.com/drive/folders/1mXmmN_eArKsoXkny_OcH6CNibuvANtrb?usp=sharing

https://drive.google.com/drive/folders/1mXmmN_eArKsoXkny_OcH6CNibuvANtrb?usp=sharing7_11.png

右上の「すべてダウンロード」で、アップロード用のサンプルをダウンロードできます。

ダウンロードしたらzipを解凍します。

NFTデータをアップロード

CSVと画像を含んだフォルダごと、ドロップエリアにまるっとドロップします。

7_12.png

アップロード後、プレビューが表示されます。Nextボタンを押下します。

7_13.png

7_14.png

リビール状態の設定

「Delayed Reveal」を選択します。

7_15.png

リビール解除のパスワードと、リビール前の状態を設定します。

7_16.png

各設定項目は下記です。

  • Password / Confirm password: リビール解除のためのパスワード
  • Placeholder - image: リビール前のNFTの画像
  • Placeholder - name: リビール前のNFTの名前
  • Placeholder - desciption: リビール前のNFTの文章

なお、リビール対象が複数あっても、すべて同じものが設定されます。 個別に設定したい場合は、Batch Upload時に小分けにするなどの工夫が必要です。その場合都度ガス代がかかるので注意です。

Uploadボタンを押下します。

7_17.png

Walletが出てくるので「Confirm」を押下します。

7_18.png

これにてリビールするNFTのアップロードは完了です。

アップロードが完了すると、コントラクトのトップ画面に遷移します。アップロード時のCSVに登録した画像が表示されておらず、リビール時に登録した画像やパラメータになっていることがわかります。

7_19.png

リビール状態をコントラクトで確認

(この作業は確認作業のため、任意です。不要な方は飛ばしていただいて結構です)

リビールに設定したものが、実際のチェーン・コントラクトでどう表示されているのかを実データで確認します。

NFTをMINTしないとコントラクトで参照できないので、MINT作業を行います。

「Set Claim Phase」または「Claim Phases」を押下します。

7_20.png

この画面は、NFTのMINT条件を設定するものです。

7_21.png

ClaimPhasesのボックスにある「Add Initial Claim Phase」を押下します。

7_21.png

MINT条件のパラメータを設定します。NFTの価格や、一人当たりの販売上限、MINTの実行間隔制限など、細やかな設定が可能です。

7_22.png

Save Claim Phases を押下します。

7_22.png

WalletのConfirmを押下して、Transactionを発行します。

7_23.png

Embedを押下します。Embedは、wordpress等のサイトに貼り付けることができるMINT用のボックスを出力できます。プレビュー機能があるので、プレビュー機能にて、実際にMINTします。

7_24.png

数量を設定し、MINTボタンを押下します。

7_25.png

Confirmを押下します。

7_26.png

Overviewに移動します。 MINTしたNFTのOwned byが変更されていることを確認することができます。

7_27.png

コントラクトのアドレスをコピーします。

7_28.png

rinkebyのetherscan( https://rinkeby.etherscan.io/ )にアクセスし、addressフォームに、コピーしたコントラクトのアドレスを貼り付けます。

https://rinkeby.etherscan.io/7_29.png

コントラクトの詳細ページに遷移するので、Contract -> ReadContractの順にクリックします。

7_30.png

下に辿っていくと「tokenURI」という項目があるので、そこまで移動し、開きます。(ページ内検索でtokenURIと検索するともっと早く見つけられます)

フォームがあるので、MINTしたIDを入力し、「Query」ボタンを押下します。

7_31.png

NFTが参照するmetadataのアドレスが表示されます。thirdwebがアップロードしてくれているipfsのuriが表示されています。このipfsの中身を確認していきます。

7_32.png

ipfsのアドレスをブラウザに入力しても、正しくジャンプしないので、下記のようにURIを書き換えます。

7_33.png

アクセスすると、jsonが表示されます。リビール用に設定したパラメータが表示されていることがわかります。

7_34.png

さらに画像を確認していきましょう。jsonに含まれる「image」のipfsURIを下記のように書き換えます。

7_35.png

アクセスしてみると、リビール用に設定した画像が表示されるのが確認されます。

7_36.png

と、このように、コントラクト上からもリビールのURIが設定されていること、そしてリビール前のコントラクトが出力されていないことがわかります。

では次の項目では、実際にリビールを実施してみてみます。

リビールを実行する

Reveal NFTsを押下します。

7_37.png

設定したパスワードを入力します。

7_38.png

トランザクションを発行するので、confirmを押下します。

7_39.png

リビール後

リビールするとこのように、Batch UploadでアップロードしたNFT群が公開されていることがわかります。

7_40.png

参考:コントラクトでリビールを確認する

etherscanにて、リビールしたNFTを確認できます。当該コントラクトにアクセスしtokenURIにMINT済みのリビールしたNFTのIDを入力すると、URIが変わっていることがわかります。

7_41.png

7_42.png

7_43.png

リビール設定を複数持たせる場合

なお、リビール設定を複数持たせた場合は、RevealNFTsにプルダウンメニューが表示され、リビール一覧が表示されます。リビールを段階的に行いたい場合は、いくつか分割するとよさそうです。

7_44.png

以上がリビールNFTの作り方、となります。

要旨をまとめると

  • 通常NFTのトークン番号のURIは類推できてしまう。トークンごとに価値の変化を持たせたい場合など不都合が多い。
  • リビールNFTという方法で、URIを隠しておくことができる。
  • thirdwebでは、コントラクト作成者がフラグを手動解除する形式のリビールを提供している
  • thirdwebでのリビールのやり方と、実際のコントラクトでの変化を確認できた。
picture
hanzochang - 半澤勇大
慶應義塾大学卒業後、Webプランナーとして勤務。 ナショナルクライアントのキャンペーンサイトの企画・演出を担当。 その後開発会社に創業メンバーとして参加。 Fintech案件や大手企業のDXプロジェクトに関わり、その後個人事業主として独立し、 2023年にWeb3に特化した開発会社として法人化しました。 現在はWeb3アプリ開発を中心にAI開発フローの整備を行っています。
また、趣味で2017年ごろより匿名アカウントでCryptoの調査等を行い、 ブロックチェーンメディアやSNSでビットコイン論文等の図解等を発信していました。
X (Twitter)

お問い合わせはこちらから

ご希望に応じて職務経歴書や過去のポートフォリオを提出可能ですので、必要な方はお申し付けください。
また内容とによっては返信ができない場合や、お時間をいただく場合がございます。あらかじめご了承ください。