Ethereumネイティブな分散ストレージSwarmの概要

Ethereumネイティブな分散ストレージSwarmの概要

どうもこじりょー(@kojiryoinvestor)です。

この記事ではEthereumネイティブな分散ストレージ「Swarm」を紹介します。

EthereumでDappsを作る際には必須となるポテンシャルを持ったサービスですので、知っておくことをオススメします!

Swarmとは

ワールドコンピューターのワールドハードディスク

SwarmはEthereum上で提供される前提で開発されている分散ストレージです。

・写真などのファイルの保存

・Dappsのホスティング

・Ethereumエコシステムとの連携

上記のことを考えるとEthreumネイティブのSwarmは、Ethereum上でDappsを開発する際には必須となるポテンシャルを秘めています。

ちなみにこの記事の執筆時点ですでに、Swarmにアップロードしたコンテンツのハッシュ値に対してENS(Ethereum Name Service)を設定することができます。

公式サイト: Ethereum Name Service

着実にEthereumエコシステムとの連携が進んでいますね。

Dapps開発に必要なインフラを提供する

SwarmはDapps開発に必要なインフラを提供することを大きな目標にしています。

Swarm’s broader objective is to provide infrastructure services for developers of decentralised web applications (dapps)

引用:Introduction | Swarm documentation

ストレージ機能だけを提供して終わりではないんです。

現在サーバー・クライアント方式(Centralized)のアプリには、AWS(Amazon Web Services)やGCP(Google Cloud Platform)のようなアプリのバックグランドを簡単に構築・運用できるクラウドサービスがあります。

SwarmはDappsに特化したAWSやGCPのようなサービスを目指しています。

インセンティブ設計されたシステム

Swarmのノードとなり、ストレージ領域か通信するためのリソース(帯域幅)を提供することでインセンティブ(Ether)を受け取ることができます。

From an economic point of view, it allows participants to efficiently pool their storage and bandwidth resources in order to provide these services to all participants of the network, all while being incentivised by Ethereum.

引用:Introduction | Swarm documentation

ちなみにインセンティブはストレージの提供に対するものと、帯域幅の提供に対するものに分けられています。

Storage Incentives

Swarm上にアップロードされたものの、あまり呼び出されないコンテンツを削除せずにとっておく事に対するインセンティブがStorage Incentivesです。

「Storage incentives」はPoC 0.4.xで運用される予定です。

Storage incentives (punitive insurance) to protect availability of rarely-accessed content is planned to be operational in POC 0.4.

引用:Swarm alpha public pilot and the basics of Swarm | Ethereum Blog

Bandwidth incentives

Bandwidth incentivesが難解でいろんな情報を吟味した上での自分の解釈です。

Bandwidth incentivesは、Swarm上にアップロードされたコンテンツの保存や検索の際に、ノード間にその情報を伝搬する役割に貢献するとインセンティブが貰えます。

この一連の流れはSWAP(Swarm Accounting Protocol)というプロトコルで管理されます。

スポンサーリンク


Swarmの開発状況

Proof of Consept(コンセプトの検証)

2018年9月時点ではまだPoC(Proof of Concept)の段階で、まだSwarmというコンセプトを検証している最中です。

2018年9月時点では「PoC 0.3」が最新版です。

PoCの段階ですが、SwarmのクライアントをインストールしてSwarmを動かすことができます。

Swarmを触ってみよう

事前準備

Swarmを利用するにはGethが必要です。

以下の記事を参考にGethのインストールおよびアカウントの作成まで行っておきましょう。

Swarmのインストール

以下のサイトから自分の環境にあったクライアントをダンウロードします。

ダウンロードしたファイルは一旦そのままにしておきます。

次にSwarmを動かすためのディレクトリを用意しましょう。

ここではadmin直下に「swarm」というディレクトリを作成しています。

作成した「swarm」ディレクトリの中に、ダウンロードしてきたファイルの中身をコピーします。

コピーが完了したらターミナルをひらいて、作成した「swarm」ディレクトリへ移動します。

cd swarm

ターミナルから「swarm」 ディレクトリへ移動したら、以下のコマンドを実行します。

./swarm version

以下のようにバージョンが表示されればSwarmクライアントのインストール完了です。

ローカル環境でSwarmを動かす

「swarm」ディレクトリ内に「swarm_private_net」というディレクトリを作成します。

次に「swarm_private_net」内にgethで作成したアカウント情報の入った「keystore」ディレクトリをコピーします。

gethで作成したアカウントの「keystore」は、プライベートネット作成時に作ったディレクトリ内に存在します。

上記の記事を参考にしてgethを設定した場合は、「eth_private_net」内にある「keystore」ディレクトリを「swarm_private_net」内にコピーします。

次にgethを起動してaccount[0]のアドレスを表示させましょう。

Swarmを起動する際にアカウントアドレスが必要になるのでコピーしておきましょう。

gethはここで終了させても問題ないです。

次に「swarm」ディレクトリ内で以下のコマンドを実行してSwarmを起動します。

./swarm --bzzaccount accounts[0]のアカウントアドレス --datadir swarm_private_net/ --keystore swarm_private_net/keystore

コマンドを実行して以下のように表示されればSwarmの起動に成功です。

試しにブラウザを起動してローカルホスト(http://localhost:8500/)にアクセスしてみましょう。

以下のように表示されればSwarmが起動しています。

HTMLをアップロードしてみよう

次にSwarmを利用してローカル環境内にHTMLをアップロードしてみます。

まずは以下のような簡単なHTMLファイルを用意します。

ここでは「swarm-sample」というディレクトリをデスクトップ上に作成して、上記のindex.htmlをそのディレクトリの中に保存しています。

さて、Swarmを起動させているターミナルを終了させるわけにはいかないので、もう1つターミナルを起動しておきましょう。

2つ目のターミナルも「swarm」ディレクトリ内に移動させて、以下のコマンドを実行してデスクトップ上に保存した「swarm-sample」ディレクトリ内の「index.html」をアップロードします。

./swarm up /Users/admin/Desktop/swarm-sample/index.html

アップロードに成功するとコンテンツのハッシュ値が表示されます。

次に「http://localhost:8500/」にアクセスします。

フォームの中にハッシュ値をペースとして「submit」をクリックします。

アップロードしたHTMLファイルが表示されます。

さてこれだけでは物足りないので、画像の入ったHTMLファイルをアップロードしてみましょう。

まずHTMLファイルを以下のように変更します。

次に「swarm-sample」ディレクトリ内に「img」ディレクトリを作成して「ethereum-logo.png」という画像データを格納しておきます。

Ethereumのロゴ:Logo assets – Ethereum.org

さてHTMLファイルの準備ができたら下記のコマンドを実行して、ディレクトリごとアップロードします。

./swarm --recursive up /Users/admin/Desktop/swarm-sample/

アップロードに成功するとハッシュ値が表示されます。

再び「http://localhost:8500/」にアクセスして、フォームの中にハッシュ値をペースとして「submit」をクリックしましょう。

ここではmanifestを用意していないためエラーになります。

そこでURLに「index.html」を追加して読み込んでみましょう。

画像つきのWebページが表示されます。

おわりに

以上がSwarmの概要と紹介でした。

この記事の執筆時点では、Swarmまだコンセプトの段階であるため、Swarmを取り入れたアプリケーション作るにはまだ時間がかかりますね。

それでもSwarmはEthereumでDappsを作る上で必要不可欠なサービスになる可能性があるので、知っておいて損はないです。

今後もSwarmは積極的に追っていきましょう!

参考サイト

How does the incentive system for Swarm work? | StackExchange

Swarm documentation

Swarm alpha public pilot and the basics of Swarm | Ethereum Blog

SWAP | GitHub

Swarmの概要とインストール方法・簡単な使用方法を解説 | block-chain.jp

Dapps開発カテゴリの最新記事