ブロックチェーン整理

## ブロックチェーンについて

なんとなくブロックチェーンのことを聞いているが、わからないことが多かったので、自身でブロックチェーンについて整理してみました。（※ **BTCが対象です。** ）
概要から説明させていただきます。
何か間違えていたらご指摘いただければ幸いです。

### 概要
皆様ご存じの通り、取引データを安全に担保できる技術のことです。（※大雑把）
一つのデータベースにデータを格納するのではなく、[多くのマイナー](https://bitnodes.earn.com/)が同じデータ（取引台帳）を持っています。
銀行等とは違い、[取引履歴](https://blockchain.info/ja)をいつでもだれでも見れますし、改ざんも難しい仕組みとなっています。
[メルミライ](http://www.mermirai.com/entry/0409_blockchain)が非常にわかりやすかったので、参照ください。
***
### 仕組み

簡単に記載すると下記のような流れ（繰り返し）だと思っています。
各内容の説明は下記に記載します。

・トランザクション作成 → マイニング →　ブロック追加

***
#### トランザクション

ビットコインにおける送金は、そのビットコインを持つ本人が[トランザクション](https://live.blockcypher.com/btc/tx/d6cf4916d190fb256328cb7561e6a9104a4c919df06681c234dfd4d39213a736/)を作成して、ネットワーク（マイナー）へと送るところから始まります。
トランザクションとは、[アドレスAからアドレスBへ 1BTC]と言った送金情報のことです。ブロックに取り込まれるまで、[未確認トランザクション](https://blockchain.info/ja/unconfirmed-transactions)は溜まっていきます



***
#### マイニング

##### ▼方法
今から作るブロックのハッシュ値を作成することです。
マイニングの計算概念は、簡単に表すと、これから確定するブロックのハッシュ値がある閾値（[Difficulty Target](https://blockchain.info/ja/charts/difficulty)）より小さくなれば良いというものです。これは値が小さいほどマイニングが難しくなります。　

　<該当ブロックのハッシュ値計算方法>
　・前ブロックのハッシュ値①と、[Merkle root](http://landau.jp/blog/310/)②を確認
　・好きな32ビットの変数を決める（ナンス）③
　・①、②、③をハッシュ関数（ビットコインの場合は「SHA-256」）に代入し、
　　256桁の値「ブロックハッシュ」を得る
　・答えがある閾値（[Difficulty Target](https://blockchain.info/ja/charts/difficulty)）より小さくなれば良いというものです、違った場合は別の③を試す

マイニングはナンスを探すのが大変な作業となっている。
マイニング成功者以外の人はマイニング成功者が提示したナンスが正しいかどうか計算するだけなので、１回計算が成功するかどうか試すだけで良いので簡単である。
※数独に似ている。問題を解くのは大変だが、答え合わせは簡単

##### ▼報酬

マイナーは計算をした報酬として、ビットコインをゲットすることができる。
ビットコインの報酬にも２種類存在する。
①手数料
　各トランザクションに記載されている手数料をもらうことができる

②報酬
　手数料とは別に、2018年現在は、報酬として12.5BTCを受け取ることができます。
12.5BTCのトランザクションを自身で作成し、マイニングしたブロックに取り込むことで、報酬を得ることができるようになっている。

***
#### ブロック

マイニングで得たハッシュ値を用いて、[ブロック](https://blockchain.info/block/0000000000000000000a0ea899559a324e93fee7e6c9c70dee2f30c7886a0722)が作成されます。
前のブロックハッシュ値を使用して、該当ブロックのハッシュ値を求めているため、チェーンのようにつながっています。

上記トランザクションの作成→マイニングを通じて下記のようにブロックが繋がっていきます。
![block.jpg](https://qiita-image-store.s3.amazonaws.com/0/58961/15220492-8e3e-8214-81ae-40bbc89dc85b.jpeg)
※１回のハッシュ値を求めるだけで相当な計算量が必要であるため、以前のブロックを計算し、その後のブロックすべてのハッシュを計算しなおすのは無理だと言われています。
また、ハッキングをするとしたら、51%以上([51%攻撃](https://bitflyer.com/ja-jp/glossary/fifty_one_percent_attack))の取引台帳に対して同じようにデータを書き換えなければいけません。
したがって、実質改竄が不可能と言われています。


#### 残高について

BTCには、残高情報って実はありません。
あるのは未使用支払情報（UTXO）だけです。
<img width="346" alt="UTXO.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/58961/8431bd0e-fa74-aa46-a0ac-dcaedcfc6e8b.png">

```
取引履歴
1　Bさんがマイニングで2BTC Get
2　Bさん→Aさん 0.5BTC
3　Aさん→Cさん 0.25BTC
4　Bさん→Dさん 1BTC

→それぞれのユーザーに対して、未使用のBTCを求めると、下記のようになります。
この残高は取引履歴から未使用分(UTXO)を参照し、都度計算を行っています。

　A：0.25BTC
　B：0.5BTC
　C：0.25BTC
　D：1BTC
```

## 暗号通貨の入手方法

### ◆取引所

bitflyer,binance,poloniex,coincheck,etc....に法定通貨(ドルや円)を入れて
その取引所内で暗号通貨を日本円と交換することができます。


### ◆もらう

自身または取引所でウォレットを作成し、既に暗号通貨を保持している人に送金してもらう
※自身でウォレットを作成する場合、秘密鍵を自身で管理しなければいけません。
　ウォレットアプリを使用すれば、ウォレットアプリ内で管理されているはずです。

### ◆マイニング

上記で記載した通り、自身でPCを設定し、マイニングを実施することも可能です。
[マイニングの方法](https://warucoin.com/knowledgematome/shoshinsha/beginner-mining/)は色々ありますが、2018/07時点では個人でマイニングは得策ではありません。
※多くの人がマイニングに参加しているため、個人でのマイニングはほとんど成果がないです。

マイニングに成功すれば、マイナーがブロック作成時にマイニングの手数料と12.5BTC(2018/07時点)をGetできる。
報酬は、それぞれのブロックの先頭にある、コインベース（coinbase）と呼ばれる、特殊なトランザクションによって実現されている。このトランザクションは、誰かから誰かへのコインの譲渡を表すのではなく、コインの生成を表すトランザクションである。受取先はブロックの生成者である。この特殊なトランザクションのおかげで、ブロックを生成すると生成者は、一定額の定められたコインを報酬としてもらうことができる。

## セキュリティについて

暗号通貨を管理する方法は下記のような手段があります。

* ウォレットアプリ

PCやスマートフォンのウォレットアプリをダウンロードし、秘密鍵を自己で管理する

* ウォレットサービス

良質なオンラインのウォレットサービスに登録し、暗号通貨の管理を委託する

* ブレインウォレット

秘密鍵や、秘密鍵を復元するためのパスワード（ニーモニックを含む）を脳に記憶する

* ハードウェアウォレット

USB等のフラッシュメモリやハードウェアウォレットに秘密鍵や、秘密鍵を復元するパスワードを保存する

* ペーパーウォレット

紙などの物理媒体に秘密鍵や秘密鍵の情報が含まれたQRコード、秘密鍵を復元するためのパスワードを転写して保存する

どの方法をとってもデメリットはあります。
例えば、自身で管理するのが難しい場合、ウォレットサービスを使うことになりますが、
コインチャックの事件等のリスクは発生します。
自身にあった管理方法を選択しましょう。

## 参考資料
https://cryptocurrency.theater/3145/
http://landau.jp/blog/310/
https://daichimiyajima.github.io/Kinco_Pitch/
https://my-ether.net/mining/