きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

ブロックチェーン × ことはじめ × 自分なりに情報をまとめてみた

この記事の目的

この記事では、
ブロックチェーンについて、自分なりにまとめること
を目的としています。

前の記事の続編のようなものです( ゚△゚)
www.kinakomotitti.net


本題

ブロックチェーンの定義って?

日本ブロックチェーン協会という機関がブロックチェーンを定義されていました。

1)「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

https://jba-web.jp/

1)が十分にかみ砕けて理解できていません…


が、ブロックチェーンは、改ざんが困難な分散台帳を実現するプログラムであり、
技術の総称ということで理解しました(´△`)

長所ばかりならべてますが、もちろん短所もあります。


まず、検索です。
ブロックチェーンに書き込んだ後のデータを検索するところは弱いようです。
この短所を克服するために、キャッシュとしてDBを立てておくなどの対応が必要となります。

また、格納できる情報に制限があります。
例えば、画像、何かしらのファイルなどの大きいサイズの情報の格納にも適していません。
大きいサイズを格納するためには、ファイルの実体は、別のところに格納し、
ファイルのハッシュ値ブロックチェーンに書き込むなどの工夫をする必要があるようです。

キーワード:電子署名、データ共有、分散、台帳


★Blockchainの開発ってどうやるの?

開発の前に、ブロックチェーンの何を開発するのかを整理します。

※ここでは、Azureで採用されているEthereum VMをベースとした開発を考えていきます。
詳細なソースはありませんが、ブロックチェーンの世界では、
今、第2世代のブロックチェーンが登場しているらしいです。
f:id:kinakomotitti:20190323183150p:plain


値を記録するだけの1世代に対し、第2世代では
”スマートコントラクトを実行した後”の値を記録することができます。
ストアドプロシージャのようなものを通して、値を記録することができるようになった。
という認識です。

ということで、ここでの開発するスコープは、

ブロックチェーンの基盤
※↓のようなイメージのことをブロックチェーンの基盤としています。
paiza.hatenablog.com

ではなく、

スマートコントラクト

とします。



★実際の開発はどうやるのか?【準備編】

そんなスマートコントラクトをどのように開発していくのか。
という点についてまとめていきます。

※ここでは、Ethereumでの 開発に必要なものを想定しています。
 これ以外にも方法はあるとは思いますが、そこまで手を出せていません…
Ethereumとは、2世代型ブロックチェーン開発のプラットフォームです。

まずは、用意するものから・・・
実際、人によっては使わないものも含まれていますが、基本キットは以下の通りです。
これで実際に開発をすることができます。

Node.js
Truffle(開発フレームワーク

Ganache(エミュレーター
Visual Studio Code


★実際の開発はどうやるのか?【開発編】

Truffleのサイトにチュートリアルがあるので、それに従って作業します。
これで、実際どうやってBlockchain開発をするのかを体感することができます。

やった後の気づきは別でまとめよう・・・

※開発なんか後でいいから、とにかく動かしてみたい!
 という場合、Trufleで公開されているBoxsを利用するのが良いらしいです。
 TrufleコマンドのUnboxコマンドにBox名を渡してあげると、
 指定したBoxのアプリケーションがローカルにダウンロードされます。
 その状態だと、そのまま実行して遊んでみることができます。

truffleframework.com


★Azure Blockchain Workbenchとは?

今まで見てきた開発環境をパパっと作ってくれるのが、Azure Blockchain Workbenchです。

最初のデプロイに時間がかかりますが、
ブロックチェーンプラットフォーム
・検索のためのDB
・ファイル格納用のDB
など、ブロックチェーンの短所をカバーするための工夫込みの環境を構築することができます。

まだそんなに重厚な環境は必要ないので、まだ使いませんが、
いずれ使っていきたいと思います。

その他、拾ってきたAzure Blockchain Workbenchについての情報をメモしておきます。
・いろいろ煩雑なスマートコントラクトの開発をより手軽にするためのサービス。
・スマートコントラクト開発の生産性を向上させるため、基底クラスを提供している。
・<誰が>スマートコントラクトを実行していいか定義できる(権限/ロールの設定)
※権限は、Azure ADを使う必要がある
・AzureのIoTシミュレーターを使って連携させることもできるらしい。
azure-samples.github.io