BlockstackでDApp入門 Part 1 ~Blockstack導入編~

Yuya Sugano
13 min readApr 9, 2019

--

先日HushHubさんで行われたBlockstackのワークショップに参加してきたので備忘録です。Part 1ではBlockstackの概要と必要となるBlockstack ID、Netlifyのアカウント作成を。Part 2ではチュートリアルに出てくるAnimal KingdomとApp.coへのアプリ追加を行います。We appreciate for Louis Ivan from Amsterdam his enthusiasm and his visit at HashHub for the workshop.

blockstack.org

補足説明を加えつつ、Part 1の内容はワークショップ同様に『Try it! Zero to Dapp』に沿って展開されていきます。[1]

以下の太字のものをPart 1で記載しています。

  • Blockstackとは
  • Blockstack DApp
  • Blockstack ID、Netlifyアカウント作成
  • 環境構築
  • Animal Kingdomのカスタマイズ
  • アプリケーションデプロイ(Netlify)
  • App.coへのアプリ追加とApp Mining

Blockstackとは

ブロックチェーンの仕組みを利用して非中央集権型のアプリケーションを作成できるプラットフォームです。Blockstackではブロックチェーン技術を認証とデータ保存に使用しています。ユーザの暗号鍵、データは全てユーザの所有とされ、Blockchain Name Service および Blockchain & P2P Network と各種API(下図のIdentity API、Storage API、Tokens API)がBlockstackアプリと連携することで動作するようになっています。[2]

https://aishinbun.com/clm/20180507/1402/

インターネットの上にTCP/UDPの層があり、その上にBlockstackのブロックチェーンとBlockstackのソフトウェア層、その上に作成したDAppが展開されるアーキテクチャになっています。ユーザのIDやデータが管理主体がアプリケーションから切り離されているため従来の中央集権型サービスのような情報漏洩や企業によるデータの独占といった懸念が緩和されます。

鍵やデータをユーザ側で所有できることのメリットです。

  • ユーザがデータを管理できる
  • アプリやサーバがハッキング被害にあってもデータへの被害がない
  • アプリ間でのデータ移行が容易である

Blockstack DApp

チュートリアル内に書かれていて重要そうなのでこのパートは追記です。BlockstackプラットフォームにおけるDAppの特徴とは何か、Decentralized Applicationといっても環境や開発者によって意味合いが異なると前置いた上で説明されています。BlockstackにおけるDAppの位置付けとは。[3]

Blockstack DAppは、

1.ユーザが自身のデータを所有します。

ユーザはデータをアプリケーションから切り離し独立させ、アプリケーション外部に保存します。Gaiaストレージシステムを使用する際には、ユーザは自身の秘密鍵でデータを署名および暗号化し保存することが可能です。Gaia上の全てのファイルはユーザ識別子、アプリケーション名およびファイル名でポイントされることで、ユーザはデータ所有および権限設定をすることができるようになります。

2.ユーザがユーザ識別子(ユーザID)を所有します

ユーザは自身のユーザIDの管理者で、ユニーク(一意)なユーザIDを使用します。Blockstack DApp側からユーザIDを取得することはできず、ユーザは自身のデータをユーザIDに紐づけることが可能となっています。それぞれのユーザは最低1つ以上のユーザIDを持ち、Blockstack Naming ServiceによってユーザIDを走査することができます。

ユーザはBlockstackブラウザへアクセスし、 id.blockstack を取得します。Blockstack IDはブロックチェーンの全ノード上へ伝播され、それぞれ操作履歴をエンコードするための公開鍵を持ちます。公開鍵はユーザのデータをBlockstack IDへバインドするために使用されます。繰り返しになりますが、ユーザIDは複数個作成が可能です。

3.ユーザ識別子(ID)とデータがアプリ独立です

ユーザIDやあるアプリケーションにおいて作成されたユーザデータは他のアプリケーションからもアクセスできます。つまりユーザIDとユーザデータはアプリケーションに対して独立性を持っていることになります。この3番目の項目については将来的に変わる可能性があります。

例えばアプリケーションがクライアントとユーザの選択した特定のGaiaプロバイダの間でデータを暗号化した場合。この場合は、アプリ側が暗号化のキーを公開しない限りユーザ側にクライアントの選択の余地がありません。となるとアプリケーション指定のクライアントにユーザからの使用は限定される、ということのようです。

加えてBlockstack DAppは以下のような特徴は持たない、もしくは採用する必要がないと記載されています。BlockstackはあくまでDAppのためのプラットフォームおよびエコシステムであるという点が理解できると思います。

  • スマートコントラクトを持つ(described as Replicated State machine)
  • トークンやNFT(Non-Fungible Token)を持つ
  • ブロックチェーンである(必要すらない)

仮想通貨のマイニングやトークン発行(ICO/STO)、またブロックチェーン上でのスマートコントラクトの執行という既存の思想からは距離感があるようです。

Blockstack ID、Netlifyアカウント作成

これまでの説明からBlockstack IDの作成が必要となります。またコードのデプロイにはNetlifyを使用します。

https://browser.blockstack.org/にアクセスして新しいBlockstack IDを設定してください。[4]

Create your Blockstack ID

Create new IDをクリックして、使用可能なユーザIDを選びます。Continueをクリックして先へ進めます。

Continue if Username was available

パスワードの設定を行い、メールアドレスを入力すると以下のようにBlockstack IDが設定されます。メールはMagic Recovery Codeの送付のために必要です。このBlockstackブラウザによってDAppへのユーザ認証が可能となります。

※パスワードはBlockstackブラウザセッション用のパスワードであり、Blockstackアプリケーションのパスワードなどではありません

次に https://app.netlify.com/にWebブラウザからアクセスし、ユーザアカウントを作成してください。こちらはGitHub、GitLab、Bitbucketとの連携が可能です。メールアドレスでも登録できます。

app.netlify.com

環境構築

Blockstack Public Benefit Corp.(PBC)が提供するBlockstackのDAppプラットフォームには2つの原理があるとのこと。アプリケーションがスケールできるようなバックエンドを提供することと、使いやすい開発インターフェースです。その点からプラットフォームには以下のような特徴があります。

  • Javascriptのフレームワークを使用して開発が可能(React for Web)
  • Javascript API(GETやPUT)を使用することでブロックチェーン側の複雑な操作は不要
  • Blockstack Naming System(BNS)により90,000以上のユーザがすぐにアプリを利用可能
  • すばやくスケール可能なストレージ(GaiaはAmazon S3、Google Drive、Azureとも遜色ない、本当?ww)

ということでBlockstackアプリケーションはnode.jsnpm さえあればすぐにでも開発可能です(回し者ではありません)。

Mac、Windows、Linuxなどどのマシンでも問題ないはずですが、個人的にLinux(Ubuntu)で動作確認しています。

$ node --version
v10.13.0
$ npm --version
6.8.0
$ which npm
/usr/local/bin/npm

ワークショップにはありませんでしたが、公式サイト『Hello, Blockstack Tutorial』に沿って簡単なDAppを動かしてみます。、 Yeomangenerator-blockstack をインストールすることでSPA(シングルページアプリケーション)をScaffoldできます。Ruby on Railsにもありましたが、手っ取り早く全体像を理解するにはScaffoldは便利です。パッケージはグローバルでなくローカルインストールでもいいと思います。[6]

$ sudo npm install -g yo
...
Yeoman Doctor
Running sanity checks on your system
? Global configuration file is valid
? NODE_PATH matches the npm root
? Node.js version
? No .bowerrc file in home directory
? No .yo-rc.json file in home directory
? npm version
? yo version
Everything looks all right!
+ yo@2.0.5
added 542 packages from 267 contributors in 46.187s

次に generator-blockstack をインストールします。

$ sudo npm install -g generator-blockstack
+ generator-blockstack@0.5.0
added 347 packages from 230 contributors in 14.148s

アプリケーション用のフォルダを作成して、yo blockstackコマンドでScaffoldします。

$ mkdir hello-world-tutorial
$ cd hello-world-tutorial
$ yo blockstack

アプリケーションを自動で構成して、必要なパッケージをインストールしてくれます。

yo blockstack

このアプリケーションで確認できることです。

  • Blockstackアプリケーションでのユーザ認証
  • 新しいステータスのアップデート
  • ユーザプロフィールでのステータスの表示
  • 他ユーザの検索とプロフィールの表示

サーバをローカルで起動します。ポート番号はサーバ設定ファイルであるserver.jsで指定できますので必要に応じて変更してください。[7]

$ npm run start> hello-blockstack@0.0.0 start /home/ether/work/blockstack/hello-world-tutorial
> npm run browserify && node server.js
> hello-blockstack@0.0.0 browserify /home/ether/work/blockstack/hello-world-tutorial
> browserify requires.js -o public/bundle.js
server is listening on 3000

Sign In with Blockstackをクリックしてサインインを確認できます。

Hello, Blockstack!

補足事項としてWeb App版のBlockstackブラウザを使用している場合は、Web App側からローカルのnpmサーバへ通信許可を聞かれますのでAllowを選択します。うまくいかない場合はローカルにBlockstackブラウザをインストールしてみてください。[8]

まとめ

  • Blockstackはブロックチェーンの仕組みを利用して非中央集権型のアプリケーションを作成できるプラットフォームである
  • Blockstack DAppではユーザ自身がユーザIDやアプリケーションデータを所有する
  • 基盤となるブロックチェーンおよび認証やストレージサービスはBlockchain Name Service および Blockchain & P2P Networkによって提供される

--

--

Yuya Sugano

Cloud Architect and Blockchain Enthusiast, techflare.blog, Vinyl DJ, Backpacker. ブロックチェーン・クラウド(AWS/Azure)関連の記事をパブリッシュ。バックパッカーとしてユーラシア大陸を陸路横断するなど旅が趣味。