Bitcoin概要

# Bitcoinアドレス
公開鍵から生成されるアドレス。
Bitcoinの送金先として使用する。

# ウォレット
秘密鍵と公開鍵のペア。ウォレットには以下の種類がある。

- 非決定性ウォレット
	- キーペアの集合
	- 全キーをバックアップする必要があり非効率的
- 決定性ウォレット
	- シードから複数のキーペアを生成する
- 階層型決定性ウォレット
	- 親キーペアから複数の子キーペアを生成する

# トランザクション
未使用トランザクションアウトプットをUTXO(Unspent transaction output)と言う。

トランザクションは以下から成る。

- 複数のインプット（構造は[Transaction Inputs](http://chimera.labs.oreilly.com/books/1234000001802/ch05.html#tx_inputs)を参照）
	- UTXOのトランザクションハッシュ
	- UTXOのlocking scriptを満たすunlocking script
- 複数のアウトプット（構造は[Transaction Outputs](http://chimera.labs.oreilly.com/books/1234000001802/ch05.html#tx_outs)を参照）
	- locking script

トランザクションの安全性は公開鍵暗号の電子署名に基づく。

![Transaction.png](https://qiita-image-store.s3.amazonaws.com/0/61641/1cbb9c27-b455-046b-19ae-7f78e0088c85.png)

「インプットの総額」＞「アウトプットの総額」であり、差額がトランザクション手数料になる。
トランザクション手数料は市場原理に基づき決定される。手数料が高額なほど、より早くブロックチェーンに取り込まれる。

## script言語
トランザクションの検証にはScript言語（unlocking scriptとlocking script）と呼ばれるスタックマシンを用いる。
unlocking scriptとlocking scriptを結合して実行し、TRUEが返ってくれば有効なトランザクションとみなす。

## scriptの種類
- P2PKH(pay-to-public-key-hash)
	- locking scriptに含まれる「公開鍵のハッシュ値」とunlocking scriptに含まれる「秘密鍵による署名」を検証する
- public-key
	- locking scriptに含まれる「公開鍵」とunlocking scriptに含まれる「秘密鍵による署名」を検証する
- multi-signature
	- locking scriptに含まれる「複数の公開鍵」とunlocking scriptに含まれる「複数の秘密鍵による複数の署名」を検証する
	- 資金の利用に複数の署名を必要とする。
	  「複数のビジネスパートナーのトランザクションに署名しなければ使えない資金」等の作成に使用する
- P2SH(pay-to-script-hash)
	- multi-signatureはlocking scriptが長くなる。
	  そのため送金のトランザクションが長くなり、検証に必要なトランザクション手数料が通常より高額になる。
	- P2SHでは、redeem scriptにmulti-signatureのlocking scriptを記述し、locking scriptにはredeem scriptのハッシュ値を入れる。
	  これにより長いscriptを扱う負担を受取側で負担することができる。
- data output(`OP_RETURN`)

| | locking script | unlocking script |
| --: | :-- | :-- |
| P2PKH | `OP_DUP OP_HASH160 <Public Key Hash> OP_EQUAL OP_CHECKSIG` | `<Signature> <Public Key>` |
| public-key | `<Public Key> OP_CHECKSIG` | `<Signature>` |
| multi-signature | `M <Public Key 1> <Public Key 2> ... <Public Key N> N OP_CHECKMULTISIG` | `OP_0 <Signature 1> <Signature 2> ... <Signature M>` |
| P2SH | | |
| data output | | |

# ブロック
複数のトランザクションをまとめたものをブロックという。
最初のブロックはgenesisブロックと呼ばれ、以降のブロックは直列に連結している（＝ブロックチェーン）。
ブロックの構造は[Structure of a Block](http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#_structure_of_a_block)を参照。

積み上がったブロックチェーンの先頭からの深さが深いほど、改ざんが困難とされる。

![Block.png](https://qiita-image-store.s3.amazonaws.com/0/61641/d25e451c-d99d-9bfc-4edb-16f7170871b9.png)

ブロックには2種類のトランザクションが含まれる。

- 通常のトランザクション
- Generationトランザクション

## Generationトランザクション
Generationトランザクションはマイニング時に作成されるトランザクションで、新しいbitcoinの発行を意味する。
Generationトランザクションの構造は[Structure of the Generation Transaction](http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#_structure_of_the_generation_transaction)を参照。

## Merkle Tree
ブロック内のトランザクションのサマリを含む二分ハッシュ木をMerkle Treeという。
これはブロック内のトランザクションの検索に使用される。

# マイニング
ブロックヘッダのnonceを変えながらブロックヘッダをハッシュ化する。
difficulty targetより小さくなるブロックヘッダを発見する。
マイニングに成功したら新しいブロックを隣接ノードに転送する。

## マイニングの報酬
以下の2つがマイニングの報酬である。

- Generationトランザクションに含まれるbitcoin（ブロック生成時に新規に発行されるbitcoin）
- ブロックに含まれている全トランザクションから得られるトランザクション手数料

ブロック生成時に発行されるbitcoinの量は、420,000ブロックがマイニングされる度に半減する。
最終的なbitcoinの発行量は2140年ごろに2100万bitcoinに収束する。

## difficulty target
10分毎に新しいブロックが生成されるよう、2016ブロックごとに次式に従い難易度の調整が行われる。

```math
New\_Difficulty = Old\_Difficulty * \frac{Actula\_Time\_of\_Last\_2016\_Blocks}{20160\_minutes}
```

difficulty bitsの最初の2桁の16進数は指数部(exponent)、次の6桁の16進数は係数(coefficient)である。
difficulty targetは

```math
target = coefficient \times 2^{8 (exponent - 3 )}
```

で表される。

## トランザクション優先度
優先度が高いトランザクションからブロックに組み込まれる。
トランザクションの優先度は次式から求まる。

```math
Priority = \frac{\sum(Value\_of\_input \times Input\_Age)}{Transaction\_Size}
```

## フォーク
異なるノードが同時にマイニングに成功した場合、親ブロックに2つの子ブロックが連結する。これをフォークという。
ノードはより長いブロックチェーンをメインチェーンとみなし、フォークしたブロックは削除される。
よって更に子孫ブロックが生成されることでブロックチェーンは1本に収束する。

## マイニングプール
複数のマイナーが協力してマイニングを行い、寄与度に応じて報酬を分配しあう仕組みをマイニングプールという。
マイニングプールでは特別なプールマイニングプロトコルを使用する。
マイニングプールには中央集権的なマネージドプールと、P2PなP2Poolがある。

## コンセンサス攻撃
強力なハッシングパワーを持つマイナーによる不正や攻撃をコンセンサス攻撃という。
攻撃者が承認済みブロックよりも下からフォークすることで、この承認済みブロック（及びそこに含まれる自身の支払いトランザクション）を無効化する「ダブルスペンド攻撃」などがある。
全体の30%程度のハッシングパワーの専有で色々なタイプのコンセンサス攻撃が可能になるらしい（[Consensus Attacks](http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#consensus_attacks)より）。

# Alt chain、AltCoin

## MetaCoin
Bitcoinのメタデータを利用した仕組み。

- Colored coin
- Mastercoin
- Counterparty

## AltCoin

### 通貨パラメータ代替案
- Litecoin
- Dogecoin
- Freicoin

### コンセンサスのイノベーション
- Peercoin
- Myriad
- Blackcoin
- VeriCoin
- NXT

Bitcoinのコンセンサスメカニ済みはSHA256アルゴリズムを用いたproof of workに基づいている。
Peercoin、Blackcoin、VeriCoin、NXTはproof of workとは別のproof of stakeに基づいている。

### 2つの目的を持ったマイニングのイノベーション
- Primecoin
	- 素数探索を行う
- Curecoin
	- Folding@Homeに貢献する
- Gridcoin
	- BOINCプロジェクトに貢献する

### 匿名性に集中したAltCoin
- Zerocoin/Zerocash
- CryptoNote
- Bytecoin
- Monero
- Darkcoin

## AltChain（通貨ではないAltCoin）
- Namecoin
- Etherum

# 参考文献
- [Mastering Bitcoin - O'Reilly Media](http://shop.oreilly.com/product/0636920032281.do)
	- HTML版が[Mastering Bitcoin](http://chimera.labs.oreilly.com/books/1234000001802/index.html)から閲覧できる
	- 日本語訳PDFが[Translations of Mastering Bitcoin](https://www.bitcoinbook.info/translations-of-mastering-bitcoin/)からダウンロードできる