相互に接続された匿名のコンピュータ群(P2Pネットワーク)によって新しい通貨を発行することを考える。そのようなシステムは政府やハッカーによる攻撃を受けやすいため、攻撃対象となりうる中央サーバーや本人確認機関を必要としてはならない。
通貨としての機能を果たすためには、参加者は保有残高を確認できるだけでなく、自由に送金できる必要がある。この目的のために、参加者の残高を明示的に管理するのではなく、送金の履歴(ブロックチェーン)を全て保存することを考える。 こうすることで、送金履歴をさかのぼって送金量と受取量を合計することで、各時点における残高を再現することができる。
参加者はそれぞれ秘密鍵と公開鍵を持ち、送金者はまず受取人の公開鍵と送金量を決めて取引(トランザクション)を生成する。 次に送金者は秘密鍵でそのトランザクションに電子署名を加え、ブロックチェーンにそのトランザクションを追加する。受取人は電子署名を送り主の公開鍵で検証することで、そのトランザクションが送り主によって生成されたことを確認できる。
問題は、送金者の残高が送金後もゼロ以上であることを確認できないため、残高以上の送金を防げないことである。これを二重支払い問題という。二重支払いを防ぐためには、送金者が送金前に必要な残高を消費していないかを、受取人が確認する必要がある。言い換えると、送金者がトランザクションに署名したことだけでなく、他の余計なトランザクションに署名していないことを確認しなければならない。
この問題を解決するには、全てのトランザクションを監視して送金者が十分な残高を保有することを確認する必要がある。 ビットコイン以前の試みでは、信頼できる第三者が全てのトランザクションを監視していた。 二重支払いが試みられた際には、最初に届いたトランザクションを採用して後から届いたトランザクションを無効とすることで対処していた。 信頼できる第三者なしにこれを実現するには、全てのトランザクションを共有し、トランザクションが届いた順番と、どのトランザクションを採用するかについて合意する必要がある。
匿名ネットワークによる合意形成の失敗例として、投票による多数決を考えよう。 もし信頼できる第三者によって参加者の本人確認ができていれば、多数決でトランザクションの順番について合意することも可能だろう。しかし匿名ネットワークにおいて一人一票を保証することはできない。コンピューターは一人で複数台を利用できるし、IPアドレスも複数取得できるためだ。
一人一票の代わりに、投票に時間のかかる計算を要求して、計算パワーに応じた多数決で合意を形成するのがProof of Work (PoW)である。 PoWでは、ある計算タスクを最初に解いた参加者が新しいトランザクションのまとまり(ブロック)を決める権利を獲得する。 具体的には、そのブロックに加えることでブロックのハッシュ値がいくつかの0ビットで始まるような整数(Nonce値)を見つけるという計算タスクである。
PoWを見つけた参加者は新しいブロックを決める権利を行使するために、Nonce値とブロックの内容を他の参加者に知らせる(ブロードキャスト)。 他の参加者はNonce値が正しいこと、トランザクションが署名されていること、そして残高が足りていることを確認し、ブロックを承認する。 もし同時にPoWを見つけた参加者がいた場合、複数のチェーンが発生することになるが、長い方を採用することにする。
わざわざ計算パワーを割いてまで新しいブロックの生成に協力するインセンティブとして、PoWを見つけた参加者には新しいコインが割り当てられる。 新しいコインの発行は徐々に減らしていくが、送金者から取引手数料を徴収することで参加者への第2のインセンティブとする。
