NFTの消えない画像を支える技術、 Arweave
先日、YAMATOがOpenSeaから削除された件で、 NFTの画像データに関する話題が持ち上がりました。
そもそも、NFTというのは「トークン」であり、大半の(フルオンチェーンを除く)NFTにおいて、画像自体はブロックチェーンに刻まれないため、外部サーバーに保存していく必要があります。現在、主流なのは「IPFS」と呼ばれるサーバーに画像データを置き、NFTトークンは画像データをIPFSから読み込みます。
このIPFSというのは、サーバーを各地に分散させることにより、一つのサーバーが災害やうっかりミスで使えなくなってもデータが残り続けるという素晴らしい仕組みです。ただ、一つ問題点があって、IPFS自体は誰かがサーバーをメンテナンスしない限りデータが消えてしまうのです。
では、誰がIPFSサーバーをメンテナンスするのでしょうか。いま、一番使われているIPFSは「Pinata」というサービスです。ですが、このPinataというのは普通のWebサービスなので、一般的なジェネレーティブNFTほどの容量を確保するには、最低月額20ドル支払う必要があります。
つまり、プロジェクトの運営が、月額料金を払ってpinataに運営を委託し、画像データを保守してもらうことにより大半のNFTプロジェクトが成り立っているのです。
そのため、(YAMATOはどうか知りませんが) 今後運営がNFTの保守をやめたとき、NFTの画像データは消えてしまう可能性が高いです。せっかく買ったNFTが見えなくなってしまったらそもそもNFTの価値とはいったい何なのでしょうか。
そのため、私は最近はIPFSに画像を保存するのをやめて、Arweaveというサービスを使っています。
Arweaveとは
Arweaveはデータを極めて長い期間 ( 約200年 )保管することのできる分散型ストレージサービスです。Arweaveというネットワークの上に「Permaweb(『Permanent(永久の)』+『Web』)」という層があり、この層に画像やアプリケーションを保存することができます。Permawebに存在するコンテンツはすべて変更することはできません。
Arweaveの優れた特徴として、月額料金を払ったり、保守メンテナンスをする必要から解放されることです。一度、先払いで(ARトークンを使って)料金を支払うことにより、NFTの画像データがほぼ永続的に残り続けます。
Arweaveに、永続的なデータ管理のために料金を先払いしている形になります。Arweaveは過去のストレージ価格の動きをもとに、将来にわたってデータ量あたりのストレージコストが低下していくはずだと考えています。そのため、最初に多めに代金を支払っておけば、それで将来下落していくであろう保管コストをまかないきれると見積もっているようです。
これを利用することで、たとえ運営がメンテナンスをしなくても、永続的に画像データが表示できるようになります。費用も高くないため、Arweaveを使ってジェネレーティブNFTプロジェクトを運営することを現在はおススメしています。
利用にあたっての注意
注意点として、Arweaveは、IPFSと比べて中央集権的であり、データ永続性に疑問が残るという声がありますが、ノード自体は分散されており、問題がない範囲だと私は考えています。気になる方は、IPFS+ Arweaveで保存してください。
Arweaveの使い方
ここからは技術者向けに、Arweaveを使ってNFTの画像データを保存して利用する方法を説明します。
Arweaveエコシステムを使った便利サービスが色々出てきていますが、今回は私がいつも使っている方法を紹介します。
まずs、Arweaveを使うためには、まずBinance等の取引所で AR トークンを買う必要があります。そして、 AR トークンを買った後、 Arweave専用のWallet (Arconnect) に、購入したARトークンを送ります。
そのあと、 Arweaveに NFTの画像データを上げますが、私は Bundlr というサービスを使っています。これはざっくりと言うと、簡単に大量に 画像データをArweaveにあげるためのCLIサービスです。
Bundlr を使うためには、AWSなどで Linuxサーバーを借りて、そこから操作する必要があります。まず、Bundlrをインストールします。
npm install -g @bundlr-network/client
Bundlrをインストールした後、ARトークンを入れたArweave Walletの秘密鍵を所定のフォルダにいれて、ARトークンをBundlrのアカウントに移します。
bundlr fund 1479016 -h https://node1.bundlr.network -w wallet.json -c arweave
これで、最後にフォルダにまとめて画像データを用意して、コマンドを叩けばまとめてArweaveにアップロードできます。
$ bundlr upload-dir ./testFolder -c arweave -h https://node1.bundlr.network
> Loaded address: 7smNXWVNbTinRPuKbrke0XR0N9N6FgTBVCh20niXEbU
> ? Authorize upload?
> Total amount of data: 72947780 bytes over 1000 files - cost: 17069780520 winston (0.01706978052 arweave)
> Y / N y
> Uploading items 0 to 50
> Uploading items 50 to 100
...
> Uploading items 950 to 1000
> Finished uploading 1000 items (0 failures)
> Uploaded to tVsrI5jVbvePUf6_cwNmGQ5i9vNnZCY7LuONOA1tm08
アップロードが終わった後は、アップロード済みの画像のファイルパスが出てきますので、これを利用してmetadata の JSONファイルを作成します。JSONファイルも上記のやり方でArweaveにアップロードします。
Arweaveのデータをコントラクトから読み込む
Arweaveにアップロードした画像は、 http ないしは ar:// を利用することで読みだすことが可能です。 OpenSeaは画像・JSONファイルともに ar:// に対応していますので、ゲートウェイを使わずに ar:// で登録することをオススメします。
注意として、一度アップロードしたデータは編集・削除することは出来ません。やり直したい場合は同じ画像データをもう一度アップロードする必要があります。
最後に
NFTプロジェクトに対する技術サポート及びエンジニアリングを引き続き行っています。国産プロジェクトのコラボ依頼なども承っていますので、NFTプロジェクトの運営ないしは今後発行を考えている方は (@HayattiQ) まで相談ください。