どうもこじりょー(@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)
ストレージ機能だけを提供して終わりではないんです。
現在サーバー・クライアント方式(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.
ちなみにインセンティブはストレージの提供に対するものと、帯域幅の提供に対するものに分けられています。
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 alpha public pilot and the basics of Swarm | Ethereum Blog
[…] 前回の記事:Ethereumネイティブな分散ストレージSwarmの概要 […]