ブロックチェーンにデータを保存するのはコストがかかるため、大量のデータを「ブロックチェーン スタイル」で (不変で無許可の分散型の方法で) 保存する必要がある場合は、外部ストレージ ソリューションを使用する必要があります。最も一般的な選択肢はIPFSを使用することですが、市場には他にもいくつかのプレーヤーがあります。それらの 1 つがEthereum Swarmです。この記事では、Swarm と IPFS の類似点と相違点を紹介し、次のプロジェクトに適したストレージ ソリューションを選択できるようにします。
IPFS (InterPlanetary File System の頭字語) は、2014 年に Protocol Labs によって設立されました。これは、コンテンツ アドレッシングを使用してグローバル名前空間内の各ファイルを一意に識別する分散ファイル システム プロトコルです。 IPFS には実際のインセンティブ システムがありません。これが、Protocol Labs が 2017 年に独自のストレージ中心のブロックチェーンであるFileCoinを作成した理由です。
Ethereum Swarm のアイデアは、Ethereum の創設者の 1 人である Gavin Wood から生まれました。 2015 年、Viktor Trón と Daniel Nagy が Foundation の Geth チーム内でプロジェクトを引き継ぎました。 ICO が成功した後、彼らはイーサリアム財団がサポートする自律的なプロジェクトとして独自の旅をします。現在 (2022 年)、Swarm は多かれ少なかれ機能が充実しており、積極的に開発されています。
どちらのシステムも、独自のインセンティブ システムと暗号通貨を備えた、分散型で不変のコンテンツ アドレス可能なシステムを提供し、どちらもlibp2pに基づいています。以下では、2 つのシステムを段階的に比較します。
IPFSは基本的に、ノードがコンテンツ ハッシュによって参照されるコンテンツを公開するストレージ プロバイダー コミュニティです。ハッシュのストレージ ノードのリストはDHTに格納されます。コンテンツを取得したい場合は、最初のステップで、コンテンツ ハッシュによって DHT 内のピア リストを見つける必要があります。 2 番目のステップでは、ピア IDを IP アドレスに変換する必要があります。3 番目のステップでは、IP アドレスで特定のピアからコンテンツをダウンロードできます。
Ethereum Swarmは、コンテンツ自体を DHT に格納するため、ロジックが異なります。彼らはこのシステムを DISC (Distributed Immutable Store for Chunks) と呼び、システム全体がこの DHT を効率的にするように設計されています。たとえば、ノードが接続する他のノードを選択する場合、すべての近接順序 (つまり、自身のアドレスからの桁違いの距離) に対してピアを選択します。 Kademlia 接続により、このシステムではチャンクの検索が非常に高速です。ノードがチャンクを取得したいときは、ピアに問い合わせます。ピアがコンテンツを持っている場合はそれを返し、そうでない場合はピアを要求します。コンテンツは常に Kademlia の距離が小さいノードによって保存され、Kademlia 接続により、常に対数の長さのパスを見つける.保存ノードが検索要求を受け取ると、要求元ノードにコンテンツを返します。次に、要求元に到達するまで、コンテンツを要求元のノードに中継します。 Swarm は Kademlia を転送するこのメソッドを呼び出し、匿名性を提供します。ノードは、コンテンツを要求しているピアのみを認識していますが、要求またはコンテンツの発信元が誰であるかは誰も知りません。これは、 Tor ネットワークがリクエストを匿名化するために行うことと似ています。しかし、匿名性は Kademlia を転送する利点の 1 つにすぎません。コンテンツの配布にも役立ちますが、これについては後で書きます。
変更可能なコンテンツ (頻繁に変更される Web ページなど) をIPFSに保存する場合は、 IPNSを使用できます。 IPNS では、可変コンテンツのアドレスは公開鍵であり、基になる不変コンテンツのアドレスはその秘密鍵部分によって署名されます。公開鍵 -> 署名付きコンテンツの割り当ては、DHT で公開されます。コンテンツが変更された場合、コンテンツ所有者は新しいコンテンツ ハッシュに署名し、それを公開キーとして発行します。これにより、取得者はそこからコンテンツの割り当てを更新できます。
Ethereum Swarmには、2 種類のチャンクがあります。 1 つは「通常の」コンテンツ アドレス チャンクで、もう 1 つはシングル オーナー チャンクです。単一所有者チャンクのアドレスは、所有者と一意の ID のハッシュです。これらの単一所有者のチャンクも不変ですが、トピック名とシリアル番号から ID を作成できます。コンテンツを変更する場合は、シリアル番号を増やして新しいチャンクを公開するだけです。リトリーバーはシステムをポーリングでき、より高いシリアル番号を持つ新しいチャンクが利用可能であれば、そこからコンテンツを更新できます。 Swarm は、これらのシリアル番号が付けられた構造フィードを呼び出します。
コンテンツをIPFSに保存する場合は、さらに多くのオプションがあります。 Infura や Pinata などの集中型プロバイダーを選択し、コンテンツをアップロードし、保管料金を支払ってコンテンツを IPFS で利用できるようにするか、マシンで IPFS ノードを実行して自分で公開するだけです。
もう 1 つの方法は、IPFS の「公式」ブロックチェーンである FileCoin を使用することです (これも、IPFS 自体を開発した Protocol Labs によって開発されました)。 FileCoin は基本的に、コンテンツを保存するための契約を結ぶことができるストレージ プロバイダーのマーケットプレイスです。 FileCoin ネットワークのメカニズムは、コンテンツを安全に保ち、コンテンツを保持しない、または利用可能にしない契約プロバイダーを罰します。コンテンツを取得し、データ転送のしきい値に達した場合は、料金を支払う必要があります。
Ethereum Swarmは、ブロックチェーンの代わりに独自の支払いシステムを使用します。ブロックチェーンは、 Lightning Networkのような支払いチャネルに似ていますが、少し異なります。ノードが別のノードに支払う場合、小切手で支払います。これらの小切手は、実際の小切手、ノードの小切手帳契約からお金を引き出すために使用できる署名済みの文書に似ています。
Swarm では、データ転送に料金がかかります。ノードがそのピアにデータを送信すると、少額の料金がカウントされます。すべてのピア接続にはバランスがあり、このバランスが制限に達すると、ノードは他の接続をチェックします。すべてがオフチェーンになります。ブロックチェーンのアクションが必要なのは、小切手を換金することだけです。
コンテンツを取得したい場合は、コンテンツを提供したピアに料金を支払う必要があります。コンテンツがある場合は、すべての料金を保持できますが、そうでない場合は、それを提供したピアに対して支払う必要があります。このロジックは、人気のあるコンテンツをローカルに保存するようノードにインセンティブを与えるため、Swarm は適応型 CDN として機能します。
Swarm ネットワークには、個別のプロバイダーはありません。コンテンツは常に、そのハッシュから Kademlia の距離が最も小さいノードに保存されます (Swarm はこれらのノードを近傍と呼びます)。 DHT を効率的に検索できるようにすることは、Swarm の重要なプロパティです。任意のノードでコンテンツを公開できます。これにより、最も近いピアにコンテンツがプッシュされ、最適な保存場所にプッシュされます。この方法はコンテンツ検索と非常に似ていますが、方向が逆です。コンテンツをネットワークに保存する場合は、それに郵便切手を添付する必要があります。郵便切手は小切手のようなもので、内容物を保管していることを証明できる場合にのみ換金できます。
Ethereum の相互運用性は、Ethereum Swarm が本当に強い分野です。イーサリアムの「公式」ストレージとして、すべてが「イーサリアム互換」です。
たとえば、ノード アドレスは所有者の Ethereum アドレスから派生します。このため、チャンク転送システムを使用して、暗号化されたメッセージを特定のノードに送信できます。 Swarm は、この手法を PSS と呼んでいます。これは、Ethereum メッセージング プロトコル Whisper の後継です。
シングルオーナー チャンクの所有者もイーサリアム アドレスであり、署名方法はイーサリアムの使用と同じであるため、スマート コントラクトで簡単に確認したり、フィードでメタデータを割り当てるために使用したりできます。 MyETHMeta (イーサリアム アカウント用の Gravatar のようなメタデータ システム) を構築したとき、イーサリアム アドレス -> メタデータ URL マッピングを格納するためにスマート コントラクトを使用する必要がありました。 Swarm なら、ブロックチェーンを使わないシンプルなフィードで実現できます。
スワーム チャンクはマークル ツリーです。これは、チャンク アドレスがコンテンツのマークル ルートであることを意味します。これは、コンテンツの包含証明を簡単に作成できるため、スマート コントラクトでチェックする場合に役立ちます。たとえば、長い (1000 要素を超える) ホワイトリストを保存する場合は、ブロックチェーンではなく Swarm に保存し、マークル プルーフを使用したスマート コントラクトによってメンバーシップを確認できます。または、状態ルートが状態全体のコンテンツ アドレスでもある Swarm で完全なロールアップを作成できます。
ご覧のとおり、どちらのストレージ ソリューションにも長所と短所があります。
IPFSは(良い意味で)古いシステムです。多くのユースケースがあり、十分に文書化されており、広く使用されています。多くの集中型 IPFS プロバイダーがあり、FileCoin を使用してコンテンツを保存することもできます。
Ethereum Swarmは比較的新しく、開発中ですが、非常にエキサイティングな特性がいくつかあります。匿名コンテンツの保存と取得、非常に効率的な DHT 管理、強力な Ethereum 互換性は、このソリューションのユニークな機能です。