(日:スワーム)
イーサリアムのSwarmとはDHTベースの分散型ストレージプラットフォームで、イーサリアムのWeb3スタックのネィティブベースレイヤーサービスであるコンテンツ配信サービスです。Swarmの主な目的はイーサリアムのDappコードやブロックチェーンデータなどを記録し提供します。
SwarmはP2Pを使用したInter Planetary File System通称IPFSの非中央集権型で、特徴としてはイーサリアムネットワーク上で使用できるという利点を持ちます。
*DHTとは・・・分散ハッシュテーブルの意味。アドホック性とスケーラビリティを確保するデータの検索手法でハッシュテーブルをネットワークのノードで分散管理する技術
目次
1.Swarmの特性
エンドユーザーの観点から見ると、Swarmは特定のサーバーにアップロードしないことを除き、既存のインターネットとの違いありません。Swarmは経済的観点から見るとネットワーク参加者は効率的にプロジェクトなどに使用するデータを共同管理し、下記の様に提供することができます。
既存のインターネット | Swarm | |
---|---|---|
DDoS耐性 | DDoS攻撃が容易に可能 | DDoS攻撃耐性 |
ダウンタイム | サーバーのメンテナンスや障害でのダウンタイム | P2Pによるゼロダウンタイム |
システムの不具合時の影響 | エラーの可能性 | フォールトトレラントシステム |
図1.Swarmと既存のネットワークの比較
365日24時間動き続けるイーサリアムネットワークの特性を活かし通常のデータベースが抱える問題をクリアし、イーサリアムネットワークのセキュリティが高いほど攻撃が難しくなるというものです。
2.開発状況
Swarmはイーサリアムスタックの一部で、リファレンス実装はgo-ethereumリポジトリ内にあり、Go言語で書かれており、2017年9月現在はProof of Concept(以下PoCとする) 0.2で全てののノードで動いています。
2-1.Swarm PoC 0.2 “Sworm”
SwarmのPoC 0.2となるSwormは主に下記の様な実装が行われています。PoC 0.2ではSwarmは暗号化されていないため、重要なデータやプライバシ―に関するデータをストアすることは推奨されません。
・Geth1.5でリベース
・ENSの統合
・アップロード/ダウンロードのアルゴリズム改善
など
ENSについては下記を参照してください
2-2.Swarm PoC 0.3
2017年10月時点で開発優先順位は確定しておらず、下記は仮の予定となっています。
・AzureでのDocker:テストクラスタデプロイメントの完了と自動ノードコントロールフレームワーク
・ピア伝達の改善 #2044
・Mist Swarmダッシュボードのストレージのモニターとパラメーター設定API
・新たなp2p API統合 #2060
・Mistへ統合
など
2-2-1.Mist 0.90 “It’s Happening”
2017年7月24日にリリースしたDAppブラウザのMist 0.9.0でPoC 3.0のMistへの統合されました。これはbzz:// プロトコルとSwarmを使用しSwarmハッシュへENSドメインを指定するとコンテンツはbzz://ethereumnameservice.ethを経由しMistにアクセスが可能となりました。
2-2-2.MistでSwarmのストレージ容量を変更する
Swarmは初期設定でストレージシェアを約20~25GBほど必要とします。
datadir/swarm/bzz-<hash>/config.jsonを確認するとDBCapacityがあり、ストレージ容量を変更することが可能です。この変更を行わないとイーサリアムのチェーンデータが GBであるためチェーンデータに余分に20GBの容量を使用することとなり容量の少ないSSDの場合は領域を圧迫することになります。
2-3.Swarm PoC 0.4
Swarmはイーサリアムのdevp2pネットワーク上で動く :dfn:’bzz sub protocol’ を定義してしており、bzz subprotocolは流動的であり、ワイヤープロトコルの仕様はPoC 0.4以降で安定する予定です。
・ネットワークのモニタリングなど
2-4.Swarm PoC 0.5
*TBD
3.定義されている重要な概念
Swarmは断片化されたコンテンツに対して特定の識別子を定義しており、この識別子ははコンテンツを検索するアドレスとして使用できます。
:dfn:
chunks
・・・ストレージの基礎的なユニットでSwarmで検索されるストレージされたデータの断片(最大4K):dfn:
hash
・・・ユニークな識別子とアドレスとして働くデータのハッシュ:dfn:
manifest
・・・コレクションを記述するデータ構造はストアしているコンテンツに対するURLベースのアクセスを可能とする
3-1.データの識別子
識別子は下記3点を必要とします。
・コリージョンフリー:2つの異なるBlobデータは同じ識別子にマップされない
・決定性:同じコンテンツは常に同じ識別子を受け取る
・データ:均一に分散される
Swarmでの識別子の選択はSwarmハッシュ(bzzhash)により記述される階層的スワームハッシュで、すなわちイーサリアム上に分散されたデータコンテンツを効率的に保管し、検索するために設計されたマークル木です。ハッシュがコリージョンフリーであると断言できるため「コンテンツを変更することはハッシュを変更すること」となり不変となります。ユーザーがデータを検索する際、ENSによって提供されるディスカバリーまたはいずれか一方のデータへの*1セマンティック検索を使用します。
ENSはニーモニック名*2をベースとしたコンテンツ検索を可能とします。これは既存のWWWのDNSと同様ですが、サーバーを必要としません。
*1 セマンティック検索とは・・・データを検索するユーザーが欲する結果を検索エンジンが理解し提供する
*2 ニーモニック名とは・・・PCが理解するための機械語を人間が理解しやすいように簡易記述したもの
3-2.Swarm上でのデータの扱い
Swarm上にデータがアップロードされた際、そのデータは上記で定義したchunkと呼ばれるデータを細分化したものにします。各chunkはSwarmハッシュによって定義されるアドレスでアクセスされ、データchunkのハッシュ自身は順番に独自のハッシュを持つchunkへとパッケージされます。この手法ではコンテンツはchunkツリーという形でマップされ、この階層的Swarmハッシュ構成概念はコンテンツの一部内のチャンクにマークル証明を可能とします。従って(大きな)ファイルへの保護されたランダムアクセセスをSwarmでは提供できます。
現在Swarmは厳格なコンテンツ取扱のDHTを実装しており、chunkアドレスに近いノードはコンテンツの情報のみを提供しているだけでありませんが、データをホストしています。
*Swarmにはアップロードされたデータを消去または取り除くことはできず、一度アップロードされたデータは取り消すことができません
スポンサーリンク