Now and Nawoo

NFTの制作記録、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

100時間後に死ぬNFT を作りました

NFTの第4弾として、「100時間後に死ぬNFT」を作りました。

Claimで新しいNFTを飼って、Feedでエサをあげて育てます。何を言ってるんだ?と思うかもしれませんが、まあ実際に触ってみてください。

  • 飼って育てるNFT !?
  • フルオンチェーンNFT
  • Polygonのメインネットに公開
  • ガス代のみ
  • Web UIサイトもあります

f:id:nawoo5:20211117214247p:plain:w300:h300

ソースコード
OpenSea

遊び方

Web UIサイト にアクセスします。

  1. Connect Wallet でPolygonメインネットに接続してください。
  2. 名前を入力して Claim すると、新しくNFTを飼うことができます。
  3. NFTの初期ライフは100です。
  4. ライフは1時間に1減ります。
  5. Feed でエサをやるとライフは100に回復します。
  6. ライフが0になると死んでしまいます。
  7. 長くかわいがってください。

※ClaimとFeedにはガス代(MATIC)が必要です。
条件にもよりますが、Claimで1.2円~、Feedで0.17円ぐらいです。(1 MATIC=186円, ガス30 gweiの場合)

放置していると100時間でライフが0になって死んでしまうので、100時間以内にエサをあげてライフ回復してあげないといけない、という手間のかかるNFTです。だんだん大きく育っていくので、できるだけ長生きするように世話してあげてください。

製作のきっかけ

少し前になりますが、でりおてんちょーさんのDiscord (イーサリアムnavi) で、「時間の経過によって内容が変化するNFTはどうやって作るのか」という話題があって、何か面白いNFTを作れそうだなと思ったのがきっかけです。

また、(Lootの作者の)Dom氏が作成したWAGMIGOTCHIも参考にしています。時間経過やユーザーからのフィードバックで変化するスマートコントラクトで作られたペットです。

ワグミゴッチ─インセンティブも実用性もなく、NFTでもないデジタルペットが人気 | coindesk JAPAN

技術的なこと

このNFTは、ライフが1時間ごとに1減るのですが、これはライフを変数として持つのではなく、 最後にエサをやった時刻(block.timestamp)を変数として保持しておいて、 tokenURIが呼び出されるたびに、現在時刻と最後にエサをやった時刻の差からライフを計算して、画像を作成する、という方法をとっています。

ちなみに、OpenSeaでは画像がキャッシュされるため、メタデータの更新ボタンを押さないとライフが変化しません。 Web UIサイトでは、5分ごとに画像を再読み込みしています。

フルオンチェーンNFTなので、画像はSVGで作成しています。 ワニの絵は絵文字を使っています。絵文字を使えば、フルオンチェーンでも豪華な(?)画像が表示できます。 ただし絵文字は環境によって見た目が変わってしまいますし、絵文字が表示できない環境もあるかもしれません。

SVGアニメーションにも挑戦しました。ワニが∞の動きをしています。残りライフによってスピードが変わります。

WebサイトはReact+ethers.jsで作成しました。Chakra UIで前回より見た目がリッチになりました。 ホスティングはVercelを使っています。

おわりに

もともとは、ライフがテキストで表示されるだけの簡単なものを作る予定でしたが、絵文字を表示したいとか、アニメーションさせたいとか、Webサイトもこだわりたい、と考えていたら、ずいぶん時間がかかってしまいました。 特にWebサイトの方が作るのが大変でした。Reactがまだよくわからない。。。

さて、これで4作目になるので、そろそろNFTクリエーターと名乗ってもいいでしょうか?(笑)

次回作もまたフルオンチェーンでおかしな実験的なNFTを作りたいと思います。