【NFT】IPFSのデータを複数のIPFSストレージサービスで管理してみよう!
IPFSとは
IPFSは分散型のファイルストレージです。
一般的なファイルストレージでは、URLではデータの保存場所を指定しているのに対して、IPFSではContent Addressingというハッシュ値でデータを指定する仕組みが使われています。この仕組みによって取得できるデータは改ざんされていないデータということが検証可能になっています。
NFTに使われているIPFSのデータを確認してみる
2018年くらいに僕が開発した、DigitalArtChainというIPFSとEthereumを使用したNFT発行サービスでは、こちらの画像が#1として発行、画像データはIPFS上で管理されています。
ブロックチェーン上に保存されている情報は下記の通りです。
こちらのゲートウェイからアクセスすることが可能です。
DigitalArtChianやOpenSeaのようにサービスがIPFSでデータを管理してくれるような構造になっている場合、そのサービスが利用・運営しているIPFSノードがデータを永続的に保持し続けてくれることを保証することはできません。
サービスが利用・運営しているIPFSノードがファイルを削除しても、ローカルかクラウドに保存しておいたファイルを再度IPFSにアップロードするか、自分でIPFSノードを立ててファイルのレプリカを保持しておけば良いのですが、大量のファイルを保持し続けたり、自分でIPFSのノードを運用したりするのは大変です。
この記事では、できるだけ簡単に、少しでも分散的な管理ができることを目標に、IPFSのデータを複数のIPFSストレージサービスで運用してみよう、という提案をします。
複数のIPFSストレージサービスによる運用
DigitalArtChainではInfuraの提供するIPFSノードにファイルを保持していますが、このままだとInfuraに依存している状態になってしまっているので、今回はIPFSストレージの選択肢の一つであるPinataを利用して、IPFSのデータをより分散的に保持していきます。PinataはFree Planでも1GBまでデータをアップロードすることができるので、気軽に試してみることができます。
上記のようなイメージで、InfuraかPinataのどちらかのIPFSのノードがファイルを保持していればデータにアクセスできる状態を作っていきます。
アカウントを作って、先ほどの画像データをIPFSにアップロードします。
ここで生成されているCIDに注目して欲しいのですが、PinataにアップロードしたファイルのCIDは
QmTPWPuYVjsB4P4QcVANn8Kt8jpEV6wc1os9DWA6pAsxsn
となっており、こちらはDigitalArtChainに登録しているipfsHashと同じ値になっています。IPFSではContent Addressingという仕組みで、コンテンツのハッシュ値をIDとしてファイルにアクセスする仕組みのため、同じデータを再度アップロードしたら、同じCIDが生成されます。
ですので、同じファイルを複数のIPFSのストレージサービスにアップロードすれば、レプリカが複数のノードでピン留めしている運用になるので、より分散的にデータを管理できている状態になります。
この場合、下記のようにデータにアクセスすると
ipfs://QmTPWPuYVjsB4P4QcVANn8Kt8jpEV6wc1os9DWA6pAsxsn
InfuraとPinataどちらか近い方からデータを取得するようになり、InfuraかPinataのどちらかのIPFSのノードがファイルを保持していればデータにアクセスできる状態になります。
例えばOpenSeaでフリーズしたデータをダウンロードして、自分のPinataにもアップロードするだけで、OpenSeaに依存しない形でデータ管理ができるようになるので、ぜひ試してみてください!
今回はできるだけ簡単にIPFSのデータを保護するために、複数のIPFSストレージサービスで管理しよう、という趣旨でしたが技術者向けには下記のような
・Arweaveやブロックチェーンなどの長期的にデータを保持できるとされている分散型ストレージを活用してデータを保持する
・IPFSのノードを運用しFilecoinのインセンティブと組み合わせる
より踏み込んだ方法も提案できるのかなと考えているので、こちらも別途記事化予定です!お楽しみに!