🍣

Twitterで話題のリビールNFTというのを調査する

2022/05/31に公開

「リビール前の〇〇を1名様にプレゼント!」

「リビール前の〇〇のプリセールが始まりました!」

みたいなツイートをよく見かけます。

ここ最近の有名どころでいくと

  • @kei31さんのZQNコレクション

他にもNSMとかampontant、CloneXなどいろいろ出てきていますね。

「SecretNFT」「capsule toy NFT」など呼び方は決まって無さそうです。

リビールとは

reveal:明らかにする、公開する、暴露する

といった意味が含まれています。

つまり隠した状態でプリセールし売り切れ確定後、もしくはオープンセール時に公開するというものと考えられます。

なぜリビールNFTは売れるのか

一種のガチャのようなもので、SR、R、N、Cというように同じ価格で販売されてもレア度によって一発逆転の可能性があるところに中毒性、可能性を感じるのだと思われます。

0.01で販売されていたものがリビール後に1ETH以上で取引される例も多く見ます。

LAGの例でいくと、有名どころのとのコラボで行っているの為Collection系ではなくART系のfoundationで出されるレベルのものが1枚紛れていたりしました。

こういったワクワク感などを事前に提供出来る点はとても良いかなと思います。

いろいろ見てるけど、法的にグレーなものも...

ただ、こういったものは安易に手を出すと法的観点で指摘されることもあるので
波に乗る前に事前にいろいろと調査を行ってから始めましょう。

例えば日本のガチャ制度でいくと

  • カード合わせの禁止
    • AとBを揃えるとXのアイテムが貰える
  • レア度の割合表示と金額設定、推定取得金額の表示
    • 無限ガチャの場合は上限値を設けること

みたいなのがあったりします。

あとは景品表示法などもあり、リビール後に獲得できるものを事前に公開しなければこれに当たるかもしれません。

何にせよNFTは今無法地帯なので
流行りに乗り知らず知らずに抵触してしまったとしても「知らなかったもん!」では済まされない為、こういったものを調べることをおススメします。

とりあえずやり方を調べてみる

調べてみると実は内容自体はとてもシンプルなものでした。

リビール前の状態の画像のIPFSなどのURLと公開したいURLを別々に保存しておき、revealedフラグのようなもので切り替えるという内容です。

HashLipsさんのCodeなどが参考になると思いました。

https://github.com/HashLips/hashlips_nft_contract

つまりスマートコントラクトの定義が必要になるようです。難しいじゃん!!!!!!!

と思うでしょう。実は簡単なんです!一緒にやっていきましょう。

今回はhashlipsさんのコードをお借りして進めていくのですが、コードを使う際は必ずライセンスを見るようにしましょう。

https://github.com/HashLips/hashlips_nft_contract/blob/main/LICENSE

hashlipsさんの場合MITライセンスとなっている為自由に無料で扱うことが出来ます。

ただしこのソフトウェアの著作権表示(「Copyright (c) 年 作者名」)と、このライセンスの全文(英語の文章)を、ソースコードのなかや、ソースコードに同梱したライセンス表示用の別ファイルなどに掲載する必要があります。

Remixを使う

Remixは環境構築不要でスマートコントラクトを定義しデプロイすることが可能なサービスになります。

https://remix.ethereum.org/

本来であればnodeをインストールしたり...という面倒な環境構築をPCにしなければならないのですが、これさえあれば全員が同じ状態で始めることが出来ます!すばらしい!

ワークスペースの作成

Remixを開いたらワークスペースの作成を行いましょう。
ワークスペースはいわば作業部屋のようなイメージで、やりたいことベースで分けて作ります。

  • +アイコン を押して workspace_study_日付 を入力して OK を押す

  • ファイル名で右クリックをして Delete を押す

その前にテストネット用のネットワークをMetaMaskに追加する

設定からテストネットワークを表示するにチェックを入れる

ネットワークから Rinkeby を選択する

Rinkebyではテスト用のEthereumを取得するためのSNSなどで自分の口座をTwitterに投稿してそのURLを張り付けなければなりません。

オフラインになっていることも多く、気長に待つ必要があります...。唯一使いにくいのだ...。

テスト開発で利用するためのethereumを取得するには、https://faucet.rinkeby.io にアクセスしましょう。このサイトでは、自分のethereumの口座をgoogleやtwitterで投稿し、そのURLをここに貼ることで口座にethereumをもらうことができます。

これじゃないとOpenSeaのテストネットで見れません ;;

Contractの定義を行う

https://github.com/HashLips/hashlips_nft_contract/blob/main/contract/SimpleNft_flat.sol

ファイルの作成を行い、こちらのコードをコピー&ペーストを行います。

  • contractsディレクトリで右クリックをしNew Fileを選択
  • SimpleNft_flat.sol と入力し OKを押す
  • SimpleNft_flat.sol をクリックし上記のコードをコピー&ペーストする
  • ctrl + s でコンパイルさせるといろいろファイルが生成される

コピー出来たら次へ

SimpleNft_flat.solを修正する

一番下にwithdrawという関数があります。

https://github.com/HashLips/hashlips_nft_contract/blob/70c3c7fb1597a3a0f48e92bc79f1d5d56086054a/contract/SimpleNft_flat.sol#L1343-L1357

これは売り上げの5%をHashLipsにペイバックするという処理になります。
いわゆるロイヤリティ的な感じです。

不要なら削除しても良いとあるので削除しましょう。

以下のようになればOKです。

  function withdraw() public payable onlyOwner {
    // This will payout the owner 95% of the contract balance.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

画像を用意しておく

pinataを使ってIPFSとして保存しましょう

https://app.pinata.cloud/pinmanager

upload fileからファイルをアップロードしておきます

ここのCIDというのがipfsの識別子番号になります。

Compileを行う

上から3番目くらいにある再生マークっぽいアイコンをクリックして設定を行います

COMPILER 0.8.7+commit.e...
LANGUAGE Solidity
EVM VERSION default
Auto Compile
Enable optimization

Test Networkと繋ぎデプロイ作業を行う

MetaMaskのネットワークをETHが入っているテストネットに切り替えます。

今回は Rinkyby で行います。理由はOpenSea側のテストネットがこれを利用している為です。

その後Remix側でSimpleNft.solを選択した状態でETHアイコンをクリックしてください。

  • ENVIRONMENT で Injected Web3 を選択する
  • ACCOUNT が自分のものであることを確認する

  • CONTRACT で NFT - contracts/SimpleNft.sol を選択します

  • Deploy横にある下三角をクリックして情報を入力

    • _NAME: LoveMeItems
    • _SYMBOL: LOVEMEITEMS
    • _INITBASEURL: ipfs://本公開したいCID
    • _INITNOTREVEALEDURI: ipfs://リビール前のCID

これらを入力し終えたら transact をクリックします。

そうするとガス代の見積もりの画面が出ます。
これが本番でも同様に同じくらいのガス代が掛かるため目安として覚えておきましょう。

ガス代を抑える最適化みたいなものあるのでいずれ紹介いたします。

transactを押してしばらくすると下の方のコンソールに✅マークが付きます。
(体感5分くらい)

左側の Deployed contracts欄に今回デプロイした情報が出ているので確認してみましょう。

青色で囲まれた部分が呼び出し関数で処理を行う部分になります。

その他オレンジ色などの部分がMintに関する情報になります。

実際にMintを行いOpenSeaで確認をする

mint部分に 1と入力し mint とかかれた部分をクリックするとMetaMaskが起動するので承認します。

https://ropsten.etherscan.io/address/0x1a2a5d3871d4612195fe1bd61bb7af37d44aaf39

独自コントラクトになっているので前回見たように個人のものになっているのが確認できるかなと思います。
Trackerも自分の設定したもので、BlockIDも1になってますね。

https://ropsten.etherscan.io/address/0x1a2a5d3871d4612195fe1bd61bb7af37d44aaf39

その後テスト用のOpenSeaに行き確認してみましょう => https://testnets.opensea.io/

mintを増やせばその分IDも増えていきます。

Revealを切り替える

revealと書いてある部分を押すことでbooleanを切り替えることが出来ます。
下の方にある青色のrevealedを押すとfalseかtrueかどうかが分かります。

false: 公開前
true: 公開状態

これによって公開前、公開後の設定が出来るというわけです。

Discussion