先日社内でブロックチェーンの入門講座を開催したので、その内容をこちらのブログにも書いていきたいと思います。
(前回の勉強会:Kotlin入門

ブロックチェーンとは

  • 特定の第三者を介さずに、オープンなネットワークで参加者による分散型の合意形成を可能にし、すべての履歴を追跡可能にして透明性の高い取引を実現する技術

です。

…はい、日本語でおkですよね。
この定義を理解してもらうことが、今回の記事の目標です。

とりあえずブロックチェーンのイメージをつかみやすくするため、よくあるシステム(集中管理型)のイメージを載せます。

基幹サーバがあり、そこで全てを管理しています。
クライアントはそこにアクセスするだけです。
基幹サーバで障害が発生したり、攻撃を受けたりするとシステム全体に影響してしまいます。

次にブロックチェーンによって作られたネットワークのイメージを見てみます。

ブロックチェーンでは基本的に基幹サーバは存在せず、データは全てのクライアントが管理します。
特定のクライアントで障害が発生したり、攻撃を受けた場合でもシステム全体としては機能し続けることができます。

ブロックチェーンのイメージをなんとなくつかんだところで、次はビットコインを例にしてもう少し詳しく見ていきます。

まずは用語の定義から。

名称 定義
ノード ネットワークに接続されたクライアントやサーバの総称。
ユーザ ビットコインを送金する人。
マイナー ブロックを生成したり、検証したりする人。
トランザクション ユーザがビットコインを送金するときに発行する命令。
ブロック 複数のトランザクションが格納されているもの。
一つ前のブロックへの参照も持つ。
分散台帳 ブロックが保持されているデータベース。
マイニング 新しいブロックを生成すること。
この処理がコンピュータ的な計算量が多く難しいが、最初に成功したマイナー一人が手数料をもらえるので競ってマイニングを行う。

これらの用語をイメージにしてみます。

まだよくわからないと思うので、実際に送金するときの流れを見ていきます。

AさんがBさんに送金するとします。

まずAからトランザクションが発行されます。
そのトランザクションがネットワーク上でつながっているノードに伝わります。

トランザクションがノードを伝播していき、最終的に全てのノードにAの発行したトランザクションが行き渡ります。

トランザクションを受け取ったノードは、それをブロックに格納しようとします。

マイナーの一人がマイニングに成功しました。

マイニングに成功しブロックが生成されると、そのブロックはノードを伝播して全ノードに伝わります。
この際マイニングに成功したマイナー以外のマイナーは、ブロックが送られてきた時点でマイニングを中止し、送られてきたブロックが正しいものかどうか検証します(ブロック作成と異なり、検証は一瞬で終わる作業)。
ブロックが正しいものであった場合そのブロックを他のノードに送り、不正なものであった場合はそのブロックを破棄します。

最終的に全てのノードにブロックが伝播し、そのブロックがそれぞれのノードの分散台帳に格納されます。
その結果、全てのノードに置いて「AがBに送金した」という情報が共有されることになります。

…いかがでしょうか。
流れつかめましたかね…?

ちなみに実際の勉強会ではこの部分の説明を丸々3回繰り返して行い、私の学習時に至っては5回くらい本の同じ箇所を繰り返し読んでました。
それくらいつかみづらい部分だと思うので、すぐに理解できなくても諦めずに何度も読み返すか、もっと上手にわかりやすくまとめられた参考書などを読んでいただければと思います。

ちなみに私は技術評論社の ブロックチェーン[技術]入門 で学習しました。
この本には geth という Ethereum のクライアントソフトを使って、実際にローカル環境でブロックチェーンを使ったネットワークを触ってみる手順も書いてあります。

勉強会でもエンジニアを対象にこのハンズオンを行い、実際にマイニングに成功してコインが貯まっていくのを体感して大変盛り上がりました。

とりあえず一通り説明を読んだ後に、最初のブロックチェーンの定義に立ち返ってみたいと思います。

最初と比較したらだいぶ理解できるようになったかと思います。

 

…だいぶ理解できるようになっているはずです。

 

…だいぶ理解できるようになっていてください。

 

実際本当に分かりづらいと思うので、さきほどの繰り返しにはなりますが、何度も読み返したり本などを読んで理解を深めていただければと思います。

以上、理解したてのにわか知識でブロックチェーンの概要を記事にしてみましたが、少しでも伝わっていれば嬉しいです。

次はこの技術を使って何ができるのかを考えていきたいですね。

最後になりますが、ブレイブソフトではこのような勉強会を頻繁に開催してエンジニア同士でワイワイやっています。
興味のある方は、話をするだけでも良いので↓からのご連絡お待ちしています!

Follow me!