Blockchainはどう役に立つのだろうか

# はじめに
先日、あるConferenceにてタイトルの内容で登壇しました。今更ですがBlockchainに関する基礎知識として、これから勉強される方の一助となりましたら幸いです。図も含めた発表資料は[こちら](https://drytt.com/blog/introduction_to_blockchain.html)に置いてます。

2018年8月末時点でまとめた情報です。ご注意ください。

# 目次
1. Blockchainって何？
2. Blockchainって何がすごいの？
3. Blockchainってどう活用されてるの？
4. Blockchainを実際に作ってみた

※私の気力不足のため、Qiitaでは「1. Blockchainって何？」のみ記述しています。もし2.以降をご覧になりたい方は前述の発表資料をご覧ください。

# 1.Blockchainって何？
Blockchainって何かと話題ですよね。「分散型取引台帳」なんて呼ばれて、世界各国で取り沙汰されています。改ざん不可能だとか、インターネット以来の革新技術だとか、実証実験をどこかの企業が開始したとか。
それではBlockchainって何か、その定義を調べてみると、意外に曖昧でした。

## Blockchainの発祥
なぜ定義が曖昧なのか、それは発祥に起因しています。Blockchainは、仮想通貨Bitcoinの基盤技術として誕生したんです。2008年11月に、Satoshi Nakamotoさん（国籍不明）が発表した論文が元だと言われています。論文は[「Bitcoin: A Peer-to-Peer Electronic Cash System」](https://bitcoin.org/bitcoin.pdf)です。全9ページなのでさらっと読まれてみるのも良いかと思います。ちなみに日本語訳もされています。[こちら](http://www.kk-kernel.co.jp/qgis/HALTAK/FEBupload/nakamotosatoshi-paper.pdf)とか。

Blockchainとはこういうものです、として生まれたのではなく、既存の仕組みから抽出されたものなので、定義が曖昧・難しくなっているのですね。ではどんな技術があるのか、次項以降で説明していきます。

## Blockchainの構成技術
主に次の4つの技術から構成されます。
(1) 特有のData構造
(2) P2P (Peer to Peer)
(3) Consensus algorithm
(4) Hash化/電子署名

### (1) 特有のData構造
"Block"というDataの塊を作って、そのBlockを連鎖的(chain)に追加していく構造を持っています。この構造がBlockchainという名前の由来でもあります。

"Block"のDataには大きく次の3つが挙げられます。

- Transaction Data
- 前BlockのHash値
- Nonce(Hash用)

Transaction Data所謂取引データで、コンテンツですね。前BlockのHash値とNonceはシステム側で利用するDataで、前者はBlock間をつなげるために使用して、後者は耐改ざん性を高めるために使用されているイメージです。

Blockchaiが面白いなと私自身感じたことは、このTransaction Dataを蓄積していくという仕組みですね。何かというと、例えばAさんとBさんの二人の間で、１００コインの取引をする（AさんからBさんへ１００コイン渡す）場合で考えてみます。

よくある仕組みは、Aさんがいくら持っていて（２００コイン）、Bさんがいくら持っていて（０コイン）、取引の結果、Aさんがいくら（１００コイン）、Bさんがいくら（１００コイン）になった、という**保有情報**を保持する形だと思うんです。一方でBlockchainの場合は、あくまで**取引情報**を保持するので、今Aさんがいくら持っているか、は把握していないんですね。そのため、Aさんがいくら持っているか、把握するためには、過去のTransaction Data（取引情報）をかき集めて、Aさんは１００コインもらう取引をして、１００コイン支払う取引をして、、、といった情報をかき集めて、取引記録を合計するとAさんはいくら持っている、と把握するわけです。

一見面倒な手間をかけているようにも思えますが、この仕組みによって、(Bitcoinで)お金を電子化できましたし、改ざんも困難ですよと言わしめたのだと思っています。

### (2) P2P (Peer to Peer)
続いてP2P。これは説明不要かもしれません。
いわゆるサーバ・クライアント型ではなく、各端末（peer）がサーバでありクライアントであるネットワークアーキテクチャですね。

### (3) Consensus algorithm
次にConsensus algorithm。聞きなれないかと思いますが、考え方自体はBlockchai以前からあるようです。私は初めて聞きました。P2PにおけるBlockの合意形成の方法のことを指します。Blockの正当性(不正がないか)をどのように判断するのか、の決めごとですね。具体例としてBitcoinを見てみましょう。Proof of Work、通称PoWと呼ばれるアルゴリズムを採用しています。これは、最も仕事(計算処理)をした人がBlockの正当性を判断する方式です。具体的には「前BlockのHash値」と「任意のNonce」から特定のHash値を探し、一番早く見つけた人がBlockを追加する権利を持つ、というやり方です。
特定のHash値を探す作業をMiningと呼ぶのですが、わざとHash値を探す作業を手間（膨大なComputer powerが必要となるよう設計)にすることで、Blockの追加(生成)には時間がかかるようにし、不正がしにくい仕組みを作っています。

PoW以外にも様々なConsensus algorithmが考案されていて、
コインの保有量を基準とした「Proof of Stake(PoS)」や コインの保有量と取引数を基準とした「Proof of Importance(PoI)」などあります。PoWの弱点を改善しようして考案、それでも駄目なら次の方法を考案、といった形で次々に考え出されていますね。

### (4) Hash化/電子署名
こちらは説明を省略します。Security強化と利便性向上にHash化と電子署名を活用していますね。

## Blockchainって何?の回答
次のように定義できるのではないでしょうか。
*暗号化されたTransaction Dataと付随するData(Block)を、Network内の参加者Node間で、連鎖的(Chain)に追記していく分散コンピューティングの考え方を用いた技術*

参考ですが、JBA(日本ブロックチェーン協会)では、2016年10月3日時点で次の通り定義を公表しています。
1)「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」
2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

## (参考)Blockchainの分類
Blockchainの定義を難しくしている要素に、その分類が挙げられます。パブリック型、プライベート型、コンソーシアム型といった分類を聞いたことがありませんか？例えば、よくBlockchainは管理者不在（P2Pなので）が特徴として挙げられるのですが、プライベート型の場合管理者を設置しているんですよね。管理者がいてもBlockchainだと。こういった事情が定義の難しさに拍車をかけているのかと思われます。

# おわりに
Blockchain業界は新しい情報が次々と出てくるので、書籍にしてもWeb記事にしても各情報の公開時期をしっかりと抑えることが肝要かと考えます。
もし気になる点等ありましたらコメントいただけましたら幸いです。