ブロックチェーン ~ ブロックチェーンネットワークの構成要素

## はじめに
[堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門](https://www.amazon.co.jp/%E5%A0%85%E7%89%A2%E3%81%AA%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-%E6%8A%80%E8%A1%93-%E5%85%A5%E9%96%80-%E7%94%B0%E7%AF%AD-%E7%85%A7%E5%8D%9A/dp/4774193534)を読んだので忘れないようにまとめておこうと思います！
Part1のChapter1の「ブロックチェーンの全体像」についてまとめていきます。

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

なんだか難しそうだしとっつきにくい感じがしますね。
この時点では技術ってことしか分からなかったです:pensive:

## 分かりやすく噛み砕いていこう
### 用語
- ブロックチェーン：様々な要素で構成される技術
- ブロックチェーンネットワーク：ブロックチェーン技術を利用したネットワーク全般
- ビットコイン：特定のネットワーク内で流通している通貨

ビットコインネットワークやEthereumなど有名なブロックチェーンネットワークがあるそうです。
※[堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門](https://www.amazon.co.jp/%E5%A0%85%E7%89%A2%E3%81%AA%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-%E6%8A%80%E8%A1%93-%E5%85%A5%E9%96%80-%E7%94%B0%E7%AF%AD-%E7%85%A7%E5%8D%9A/dp/4774193534)での用語の意味を参考にしています。

### ブロックチェーンネットワークの構成要素
ビットコインネットワークを例として、ブロックチェーンネットワークの構成要素を紹介していきます。
##### P２P（ピア・ツー・ピア）
- P２Pはインターネットに接続したPCやサーバなど（ノード）が、相互によるコミュニケーションをとるネットワークの形態のこと
- ネットワーク毎にコミュニケーションをとるための約束事がある（プロトコル）
- ユーザ（クライアント）が特定のサーバからファイルを取得する方式（クライアント-サーバ型）とは異なり、P２Pネットワークに参加している各ノード上にファイルが保存されるのが特徴
![スライド1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254767/da1db22e-07d5-a04d-1df4-e7e624925a1b.jpeg)

クライアント-サーバ型のファイル取得の流れを図示するとこんな感じです。
サーバがファイルを持っているので各ノードがサーバにファイルを要求し、サーバがAさん、Dさんにファイルを送信しています。

P２Pのファイル配布の場合、P２Pネットワークは不特定多数の端末と相互にコミュニケーションをとるためのもののため、P２Pに参加している全てのノードがファイル要求をするクライアントになったり、ファイルを返すサーバの役割を担ったりします。図示すると下記のようになります。
![スライド2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254767/31c1c828-623d-2854-1bc5-7b6b903ca98e.jpeg)

Aさん、Bさん、Cさん、Dさんがそれぞれファイルを要求したりファイルを返したりしているため、サーバになったりクライアントになったりしていることが分かりますね。

##### 参加者
- ビットコインネットワークの参加者はユーザとマイナーで分けられる
  - ユーザ：ビットコインを送金する
  - マイナー：ブロックを生成してその報酬としてビットコインをもらう

##### トランザクション（取引）
- トランザクションは送金者がビットコインを送金するときに発行する命令で、ビットコインネットワーク内に各ノードを介して伝搬される
- トランザクションには送金者、送金先、送金額といった情報が含まれる

##### ブロック
- ブロックは複数のトランザクションが格納されているもの
- トランザクションと同様にビットコインネットワークに伝搬される
- 各ブロックの中にはひとつ前のブロックの情報（ハッシュ値）が含まれているので、ひとつ前のブロックはそのハッシュ値から参照できるようになっている

後で紹介する分散台帳の中で、ブロックがハッシュ値によりチェーンのようにつながっているようなイメージ。
ブロックチェーンと呼ばれるのはこのデータ構造によるらしい:point_up:

##### 分散台帳
- ビットコインネットワークでは伝搬されてきたすべてのブロックを各ノードの台帳（データベース）上に保持している
- 過去の送金トランザクションが各ノードの分散台帳に格納されているため、一つのノードがダウンしても他のノードの分散台帳から過去の送金トランザクションを確認することが出来る
- ノードが新たなブロックを受け取ると自身の分散台帳に格納し、各ブロックの中にはひとつ前のブロックの情報（ハッシュ値）が含まれている

##### マイニング
- 新しいブロックを生成すること
- マイニングを行うのはマイナーで、その報酬でビットコインを受け取ることが出来る
- あるブロックを生成できるのは一人のマイナーのみで、そのマイナーだけが報酬を受け取れる

### ビットコインネットワークの流れ
![スライド3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254767/84a66ad9-84a2-3bc2-6479-c49a778da2b2.jpeg)

①ユーザAがユーザBに1000円送金しようとし、トランザクションを発行
②①で発行されたトランザクションがビットコインネットワーク内を各ノードを介して伝搬される
③マイナーAが①で発行されたトランザクションを取り込みブロックを生成（マイニング）
④③で発行されたブロックが各ノードに伝搬される

## 感想
思ったよりシンプル！分かりやすい！と思いました。
（[堅牢なスマートコントラクト開発のためのブロックチェーン[技術]入門](https://www.amazon.co.jp/%E5%A0%85%E7%89%A2%E3%81%AA%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-%E6%8A%80%E8%A1%93-%E5%85%A5%E9%96%80-%E7%94%B0%E7%AF%AD-%E7%85%A7%E5%8D%9A/dp/4774193534)でシンプルに説明してくれているからかもしれません。）

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

冒頭で記載したこの内容も入ってきやすくなりました。

- 分散台帳のため「参加者による分散型の合意形成を可能」にしている
- ブロックに前回のブロックの情報（ハッシュ値）が含まれているので「すべての履歴を追跡可能」
- トランザクションに送金者、送金先、送金額などの情報が入っているため「透明性の高い取引を可能」にしている

という認識です！
一つ引っかかったのが「特定の第三者を介さずに」という部分で、ブロックを生成するマイナーは第三者ではないのだろうかと思いました。
（マイナーはブロックを生成するだけのため第三者にはならないのだろうか。。。）

以上、ここまで読んでいただきありがとうございました！