今更だけどブロックチェーンの勉強始めました　#1 概要

#はじめ

###動機
- なんなの、それ、美味しいの？
- サーバー要らないの？
- セキュアなの？
- 儲かるの？

###方向性
ブロックチェーンの超初心者が技術を追っていきます。
最初の方は、ほとんどWikipedia博士やGoogle大先生に聞いたほうが良いかもしれないですね。
説明の過程で、特定の仮想通貨の名称が出てくるとは思いますが、通貨名称やサービス名とブロックチェーン自体の技術は分けて考えていきましょう。
#ブロックチェーンとは
![102px-Blockchain.svg.png](https://qiita-image-store.s3.amazonaws.com/0/51747/2c5eef09-ae81-840e-fb18-dad5738443f0.png)
以上。

([ブロックチェーン - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)
#概要
- 分散台帳技術、分散型ネットワーク(P2P)
- サトシ・ナカモトが開発。(どなたですか
- ブロックという順序付けられたレコードの連続的に増加するリスト(チェーン)=ブロックチェーン
- ハッシュチェーンに基づく追記型のデータ構造。時系列。
- 一度記録すると、ブロック内のデータを遡って変更することは困難(無理ではない)。
- トランザクション(取引)を電子署名する事で第三者が正当性を検証可能
- 価値の交換、移転を行うのが主目的な分野に適用しやすい、のかな。

参考:[ブロックチェーン - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)

##用語
- ブロック  
トランザクションが集まったもの。ブロックチェーンのP2Pネットワークにおける台帳の合意形成単位。
- トランザクション  
広義の取引。価値の交換。このデータ内部に色んな情報を持つ。
- 主鎖  
起源ブロックから現在のブロックまでの最長の一連のブロック
- 孤児ブロック  
主鎖の外側(紫色)
- ノード  
P2Pネットワークの構成単位。  
・フルノード  
　ブロックデータのすべてを取り込む。PC等。  
・SPVノード(Simple Payment Verification)  
　ブロックヘッダのみ  
　自分に関係するトランザクションがブロックに取り込まれたかの検証をする。スマホ等。  
- 合意形成アルゴリズム/マイニング  
ブロックチェーン(分散台帳)に誰でもブロックを追加していけるのではなく、  
合意形成アルゴリズムで条件を満たしたノードのみ、次のブロックを追加できる。  
一定の条件を満たすことで、不特定多数の参加者全員で1つのチェーンに合意できる。  
・PoW(Proof of Work)  
・PoS(Proof of Stake)  
・PoI(Proof of Importance)  
・PoA(Proof of Authority)
- PoW  
計算に時間のかかる値を算出。  
計算機リソースを投入すれば儲かる競争がシステムを強固にする。  
電力の無駄遣いを指摘されている。  

##処理の流れ
1. ノード起動時に他のノードのブロックチェーンの同期
2. 取引を行うノードはトランザクションを生成
3. トランザクションをP2Pネットワークにブロードキャスト
4. 各ノードは受け取ったトランザクションを選択し、ブロックとしてまとめ、ブロックを生成するためのマイニング作業を行う。  
ブロックの中には、”自分のマイニング報酬となるトランザクション"が含められる。
5. マイニング作業で、指定された条件を満たしたノードがブロックチェーンの先頭にブロックを追加する
6. 追加したブロックを他のノードに配信
7. 他のノードは受け取ったブロックを検証して、自分のブロックチェーンにブロックを追加

##時代の流れ・トレンド
- ブロックチェーン1.0  
サービス: Bitcoin  
"仮想通貨"/"暗号通貨"
- ブロックチェーン2.0  
サービス: Ethereum,NEM  
Hyperledger Fabric  
"スマートコントラクト"  
"FinTech"  
- ブロックチェーン3.0  
Hyperledger Iroha  
"Dapps"(Decentralized Application)  

##ブロックチェーン業界のレイヤ/スタック  
以下のスタックは、pl^gがベースの場合。
この様に業界でもレイヤが分かれている。
  
- ブロックチェーン  
サービス: pl^g
- コアサービス  
・Wallet  
　サービス： centrapay  
・ID  
　サービス： SINGLESOURCE  
・App Connector Engine  
　サービス： CENNZNET  
・Exchange  
　サービス： SINGULARX  
・Token Factory  
　サービス：  BLOCKHAUS  
・Communication tools  
　サービス： sylo  
- プラットフォームインターフェイス  
・API,SDK  
　Centrality Components  
・Big data, ML  
　causality  
- アプリ  
　skoot,paychheck,Belong,TrackBack,...etc..

##雑な詳細
###ブロック  
ハッシュ+データ

概略
・prevhash
・nonce
・Tx_enc(Tx)/Tx_enc(Tx)/...

トランザクションは公開鍵暗号で電子署名される
・生成時Tx_enc=Encrypt(PrivateKey, Tx)
・検証時Tx_dec=Decrypt(PublicKey, Tx_enc)

###マイニング
- インセンティブ  
指定された合意形成アルゴリズムの条件を満たすと、マイニング作業の報酬として、  
・トランザクションに含められた、特定仮想通貨単位での手数料  
・無から有を生み出す(通貨発行の)もととなるコインベースと呼ばれている  
　”自分のマイニング報酬のトランザクション”に含まれる特定仮想通貨単位での報酬  
が得られる。
この報酬がマイニングのインセンティブとなる。
- 大まかな仕組み  
・トランザクションをブロックサイズ分集め、ブロックにnonceを追加し、  
　ダイジェストがtarget以下になるnonceを見つける。  
　hash( block ) <= target  
・target:難易度ターゲット  
　合意形成アルゴリズムによって、target値算出方法が異なる。  
　PoWの場合:2016ブロックごとにマイニングの平均時間を計算し、10分になるように調整される。  
・nonceを知っていることが仕事の証明になる(Proof of Work)  
・Bitcoinネットワークのブロックのnonceは4byte幅だが、  
　そのブロック内コインベーストランザクションの"コインベーススクリプト"領域が8byte幅あり、  
　そこをextraNonceとして使用する。

###口座/ビットコインアドレス
- 公開鍵が口座番号/ビットコインアドレスになる
- 口座から引き出すとき、秘密鍵を使う

###匿名性/プライバシー  
- ミキシング  
　・Coinjoin  
　・仮想通貨Dash
- ゼロ知識証明  
　・仮想通貨Zcashが利用
- リング署名  
　・CryptoNightアルゴリズム  
　　傘連判状  
　・仮想通貨Moneroが利用  
- 準同型暗号  
　・暗号化したまま平文の演算が可能な性質を利用  
　・Confidential Transaction  


###セキュリティ的な話
- ブロックの内容は直前のブロックのハッシュ値に依存している為、  
一旦チェーンに追加されたブロックを改竄することは、それ以降のブロックを全て破棄しない限り出来ない。  
一般に、6ブロック繋がると改竄は不可能として、取引確定となる。
- 誰と誰の間のいつ行われた何の移転に関する取引かを記録し、  
その認証を行うことで、二重譲渡のような事態を防止する  
- 孤児ブロックの検出後  
ハッシュ値に基づく多数決によって正当な主鎖を決定してブロック間の同期を確保
- 51%攻撃
- ビザンチン将軍問題
- FLP不可能性
- シビル攻撃
- 例:マウントゴックス  
- 例:NEM  
- 例:Zaif  

###ネットワークの種類
- public network
- private network
- consortium network

#次回以降のネタの候補  
- 合意形成アルゴリズム
- ネットワークの種類  
- 孤児ブロック検出後の処理
- Bitcoin ビットコインアドレス
- Bitcoin ブロック
- Bitcoin トランザクション
- Bitcoin 暗号
- Bitcoin ウォレット
- Bitcoin P2Pネットワーク
- OpenAssetsProtocol
- SegregateWitness
- スケーラビリティ
- Ethereum
- スマートコントラクト
- Dapps
- セキュリティ的な問題

#参考
- ブロックチェーンプログラミング 仮想通貨入門 (山崎重一郎,安土茂亨,田中俊太郎/講談社)
- Bitcoinの参照実装 https://github.com/bitcoin/bitcoin