ブロックチェーンの始まり　“ビットコインはなぜブロックチェーンを必要としたのか？” 

2008年、サトシナカモトを名乗る人物が「銀行のような中央機関を介さない、デジタル決裁の仕組み」を考案して、論文で発表しました。

これが**ビットコイン**です。

今、その高いポテンシャルに期待が寄せられ、注目を集めているブロックチェーンは、この論文の中で、ビットコインを実現するための中核テクノロジーとして紹介されて世に出ました。

この文書では、ブロックチェーンのルーツであるビットコインの概要を説明した後

- 「ビットコインの実現に、なぜブロックチェーンが必要だったのか」
- 「ブロックチェーンで何ができるのか？」

について、筆者の見解を記してみたいと思います。

# 従来型のデジタル決裁	集中型
これまでのデジタル決裁では、銀行のような「信頼のおける第三者機関に委ねる」方法が取られてきました。

銀行が所有する台帳を使って、顧客の残高・送金を一元管理することでデジタル決済が実現されています。

![スライド1.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/1ade64a5-fcaf-de98-46db-b37b8cf08aa8.gif)
**図1 銀行　集中型**

> 台帳は中央のサーバー上に一つ存在します
> 台帳は銀行が集中管理しています

# ビットコインのコンセプト
ビットコインには銀行のような管理者は存在しません。

台帳を持った参加者が、事前に決められたルールの元、自己の利益に基づいて行動することでデジタル決裁が実現されています。

![スライド2.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/ae08b9bf-f9d4-b4f5-72df-0fdbc4bfc779.gif)
**図2 ビットコイン　分散型**

>台帳は参加者各自が自分のサーバー上に持っています
> 全体の管理者はいません

# ビットコインの仕組み・構造
管理者のいない状態で、どうやってデジタル決済を可能にしているのか、ここからその仕組みを見ていきます。

## 台帳
ビットコインでは各自が同じ内容の台帳を持っており、その中にはこれまでの全ての取引（トランザクション）が記録されています。

これにより各自がこれまでの全ての取引履歴、現時点での各口座の残高がわかる仕組みになっています。
![スライド3.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/eada2d84-ab32-9450-7d0a-a178f18987fd.gif)
***図3 台帳の内容***

> 10:00 Aさんの口座に10万の残高があります
> 11:00 AさんがBさんに10万を送付しました
> 12:00 BさんがCさんに5万、Dさんに5万送付しました
> UTXOの印がついているものがその時点での残高です

## 送金処理
ここから送金の動きを見ていきます
AさんがBさんに10万送金するトランザクションを例に、トランザクションの中身を見てみましょう

### トランザクション作成
まず送金元であるAさんが送金トランザクションを作成します。
![スライド4.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/652b0e32-f2b9-eed8-2aad-744ed30d8cca.gif)
***図4 トランザクションの構造***

### トランザクション検証
トランザクションを作成したら、それを近隣ノードに配布します
トランザクションを受け取ったノードはその整合性をチェックします

- 参照しているトランザクションの使用権利があるか？（unlock出来るか?)
- トランザクションの内容は正当か？(残高以上の送金してないか、など)
- すでに参照されたトランザクションを参照していないか？（二重送金のチェック）

各ノードはトランザクションをチェックし、正当なものである確認ができたら、近隣ネットワークに転送すると同時に、各自の持っているトランザクションプールに追加します。

不正なものであることが判明した場合は破棄します (転送、プールへの追加は行いません)

![スライド5.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/a9d778a6-e275-7235-d505-0a6933b3d2e0.gif)
**図5 トランザクションプール**


> ビットコインの場合、正当なトランザクションは数秒以内でほぼ全てのノードに伝搬されます

### ここまでで未解決の課題　二重処理は厄介だ
ここまで説明したプロセスで、各ノードの情報は整合性を持ったものになっています。
しかし、まだ全てのノードの情報が同じであることを保証することは出来ません。

なぜか？　それは二重処理の扱いに原因があります

すでに参照されているトランザクションを、再度参照しようとするトランザクションは、二重処理として破棄されます。

ネットワークの状態によっては、各ノードでトランザクションの届く順番が異なる可能性があります。

この場合、ノードによって採用するトランザクションが異なってきます。

![スライド6.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/b21880be-1a97-12ac-9ab9-9afbbecf2687.gif)
**図6 ノード間で差異が発生する例**

どちらも正しい処理をしているのですが、どちらかに統一しないと、全員で同じ内容の帳簿を共有することができず、整合性を持った決済ができません。

### ブロック作成　みんなの台帳を同じ内容にする
二重処理が発生した場合も、全員の台帳を同じ内容に保つため、ビットコイン がとっている方法は非常にシンプルです

```
１つのノードの内容をみんな採用すればいいのだから、参加者の中でやる気のある人のノードの内容を全員が採用する
```

**やる気って何???** やる気を持ったAさんが行う作業を説明します

![スライド7.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/bb973c73-a981-44c9-c2d4-25e2264f7fb1.gif)
**図7 やる気になったAさんが行う作業**

- プールのトランザクションを集めてブロックを作ります
- 作ったブロッックをみんなに配布します
- 参加者はブロックの整合性を確認します
- 検証で問題がなければブロックを自分の帳簿として採用します

これによって、参加者全員の台帳が同じ内容（Aさんが作ったもの）に統一されます。

ブロックが台帳として採用された時点で、トランザクションは承認されます。

ブロックを定期的に作る（ビットコインの場合は10分おき）ことで、一定の時間でトランザクションが承認される仕組みにすることができます。

### ブロックチェーン　改ざん不可
作成されたブロックを正とする仕組みを入れることで、整合性を持った台帳を作る仕組みができました。

しかし、一旦作成したブロックを後から改ざんしようとする不届き者が出でくる可能性があります。

これを防ぐため、一旦作成したブロックは改ざんできないような構造になっています。

![スライド8.gif](https://qiita-image-store.s3.amazonaws.com/0/177899/1e149b9c-a4d0-36f4-6785-c6906dd5f265.gif)
***図8 ブロックチェーン***


- 作成したブロックを順番にチェーン状につなげていきます 
- 定期的に作成されるブロックは次々にチェーンの先頭に追加されて行きます
- 各ブロックには前のブロックの要約情報が入っているので、ブロックを変更するとすぐに発覚します
- 正しい要約になってるか誰でも確認できます
- 深い層になるほど、多くのブロックが関係するので改ざんがいっそう困難になっていきます

ブロックがチェーンのようにつながる構造になっているので、**ブロックチェーン**という名称がつきました。

## どうやってブロック作る気にさせるのか？
**やる気のある人**と書きましたが、どうやってやる気を出させるのでしょうか？

### 役目を決める
一番簡単なのは、Aさんをブロック作り係に任命して、責任持ってブロック作成をやらせる方法です。

他のブロックチェーンの実装ではこの方法を取るものもありますが、ブロック作成者が中央の管理者になってしまいます。
これでは、ビットコインの目指す「第三者機関を介さない」というコンセプトが実現できないので、ビットコインではこの方法は採用されていません。

### 報酬を与える
ビットコイン が採用しているのはこの方法です。

仕組みはシンプルで、みんなで競争して「一番最初にブロック作った人にビットコインをあげる」というものです。


>ブロック作る作業なんてコンピューター使えばすぐ出来るよな、そんなことしたら全員がブロック作って収集つかなくなるんじゃ。。。

これを避けるために、ブロック作成作業を敢えて難しくしています

ブロック作成の時に、時間とコストのかかる ”くじ引き” に正解しないと、ブロック完成とは認めないというルールを追加しているのです。

***やる気のある人たち*** はブロック作成の報酬を得るために、このルールに従ってブロック作成競争を行います。

このくじ引きの難易度を調整することで、ブロック完成の間隔を調整しています。（ブロックチェーン の場合10分）

#### くじ引きとは？####
正確な実装については別の機会に書こうと思いますが、ここではざっくりと説明してみます

```
テクニカルにざっくり言うと
作成したブロックにナンスと呼ばれる数字を加えたものを入力とするハッシュ値を計算して、そのハッシュ値が一定の値以下になれば正解。
やる気のある人たちはナンス値を修正してトライアンドエラーで正解を探して行く。
正解を探すのはCPU資源が大量に必要で非常に難しいが、答え合わせは簡単な仕組みになっている。

穴掘りゲームに例えると（穴掘りゲームなんてないですけど。。。）
１０００兆個の穴が埋めてあって、そのうちの一つに ”正解” と書いた石が埋まっている
正解を見つけるためには１０００兆個の穴をしらみつぶしに掘っていかなくてならないので体力と時間が必要。
一旦正解の穴が見つかれば、その穴だけ掘れは「確かにこれは正解だね」とわかるので誰でも簡単に確認可能。
```

# ブロックチェーン とは？
ここまでビットコインについて述べてきましたが、この説明のどの部分をブロックチェーン と呼ぶかについてはいろいろな見解があります。

(1) チェーン状につながっている改ざん困難なデータベース
(2) 中央のサーバーを必要としない分散型構造のデータベース
(3) 参加メンバー全てがデータの正当性を確認できる仕組み
(4) 事前に決められたルールの元、各自が自己利益に従った行動をすることで整合性が保たれる仕組み

相手、状況によって定義が異なってくるので、会話する際は注意しておきましょう。

## ブロックチェーンのプラットフォーム
ビットコインを実現するために誕生したブロックチェーン ですが、その可能性の高さからその後ブロックチェーンを使った様々なプラットフォームが出てきてます。

代表的なのがイーサリアム、ハイパーレジャーなどです。

## ブロックチェーンのどこがいいのか？
ブロックチェーンは大きな可能性を持っていますが、万能ではありません。

信頼おける第三者がいる存在する場合は、ブロックチェーンを使わないほうが効率的なシステムが構築できる場合が多いです。

では、ブロックチェーンはどんな場合に有効なのか？以下あくまで筆者の経験の範囲からの一例ですが

### 中央機関が存在しない環境でシステムを構築したいケース
ビットコインがブロックチェーンを必要としたのは、この要件を満たすためです。

>第三者機関が介在しないデジタル決済の懸念事項であった**二重処理**をうまくハンドリングするために、ブロックチェーンが生まれました。

### 権限の集中を避けたいケース
関係者でルールの決定は可能だが、一箇所に運用を任せるとそこで不正、権限の過度の集中が発生する可能性があるようなケース

> 複数の会社が集まった業界団体で合同の仕組みを作る場合などがこのケースに当たります

### データの正当性を証明できる仕組みにしたいケース
データの正当性を第三者に簡単に証明できる仕組みにしたいケース
>食品のトレーサビリティーのように、食品会社の保持している情報が、不正による改ざんがされていないことを、消費者に証明する必要がある場合などがこのケースに当たります。

もちろん、今述べた以外のケースでもブロックチェーンは色々な可能性を持っています。

ブロックチェーンの特性が有効な適用分野を見極め、新たな仕組みを作って行くことで、大きな価値が生まれていくと筆者は期待しています。