Help us understand the problem. What is going on with this article?

Bitcoin概要

More than 3 years have passed since last update.

Bitcoinアドレス

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

ウォレット

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

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

トランザクション

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

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

  • 複数のインプット(構造はTransaction Inputsを参照)
    • UTXOのトランザクションハッシュ
    • UTXOのlocking scriptを満たすunlocking script
  • 複数のアウトプット(構造はTransaction Outputsを参照)
    • locking script

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

Transaction.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を参照。

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

Block.png

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

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

Generationトランザクション

Generationトランザクションはマイニング時に作成されるトランザクションで、新しいbitcoinの発行を意味する。
Generationトランザクションの構造は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ブロックごとに次式に従い難易度の調整が行われる。

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

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

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

で表される。

トランザクション優先度

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

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

フォーク

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

マイニングプール

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

コンセンサス攻撃

強力なハッシングパワーを持つマイナーによる不正や攻撃をコンセンサス攻撃という。
攻撃者が承認済みブロックよりも下からフォークすることで、この承認済みブロック(及びそこに含まれる自身の支払いトランザクション)を無効化する「ダブルスペンド攻撃」などがある。
全体の30%程度のハッシングパワーの専有で色々なタイプのコンセンサス攻撃が可能になるらしい(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

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした