FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「Mastering Bitcoin」を読む (第1章 イントロダクション・第2章 ビットコインの仕組み)

世の中ではビットコインをはじめとする仮想通貨がブームとなっているが、正直その仕組みが分かっておらず、手を出すのが怖い。

まあクレジットカードの仕組みを知らないとクレジットカードが使えないというわけでもなく、世の中のインフラには乗っかっている私だが、ビットコインについては昨今の事件の話もあり、その仕組みをしっかりと勉強してみたい。

というわけで、本を1冊買って読んでみることにした。少し古い本で、Amazonのレビューによると情報も古いみたいなのだが、まずは基本的な部分を理解する必要があるので、それを学んで行きたい。少しずつ読みながら、まとめていくことにした。

ビットコインとブロックチェーン:暗号通貨を支える技術

ビットコインとブロックチェーン:暗号通貨を支える技術

関連記事

これは著者が読んだ内容をまとめているだけなので、誤訳、理解不足により誤っている可能性があります!鵜呑みにしないようにお願いします。 文章の途中に挿入している画像は、 https://www.bitcoinbook.info/translations/ja/book.pdf に含まれている画像を使用させていただいています。

第01章 イントロダクション

  • ビットコインとは、デジタルマネーのエコシステムの基礎となるコンセプト。
  • ビットコインは分散されたpeer-to-peerのシステムではなく、中央サーバを持たない。

  • ビットコインは、マイニングという処理を通じて取引の検証と記録を行う。

  • 平均して10分に1回の頻度で、過去10分の取引が検証され、その解の発見者にはビットコインが新たに与えられる。
    • これがマイニングに相当する。
    • この報酬は、トランザクションに含まれる手数料 (インプットとアウトプットの差分)から支払われる。

ビットコイン以前のデジタル通貨

デジタル通貨は、以下の2つの問題を解決する必要がある。 1. そのデジタルマネーは本物と信じて良いか?偽物ではないのか? 2. このデジタルマネーが、私ではなく他人のものと主張されることはないか?(二重支払問題)

一方で、ビットコインは以下の4つの鍵となるイノベーションを組み合わせる。 - 分散化されたpeer-to-peerネットワーク(ビットコインプロトコル) - 公開された取引元帳(ブロックチェーン) - 数学に基づきあらかじめ決定された、分散化された通貨発行(分散マイニング) - 分散化された取引検証システム (トランザクションscirot)

ビットコインの歴史

  • サトシ・ナカモトによる論文をベースにしている。
  • 2009年にビットコインネットワークがスタート。現在の分散コンピュータの規模は、すーぱコンピュータの処理能力の合計を超えている。
  • 「ピザンチン将軍問題」に対する現実的な解法を示している。
    • 信用できない潜在的に危ういネットワークにおいて、情報を交換することで、構成員全体の行動について合意できるか、というもの。

ビットコインを誰がどのように使うのか

  • 少額物品の販売 : ビットコインのソフトウェア・取引所・基本的な取引について説明する。
  • 高額物品の販売 : 「51%合意攻撃」
  • 海外請負サービス : ビットコインを用いたアウトソーシング、請負サービス、国際電信送金
  • 通貨や国境を超えたグローバルな資金調達 : 慈善団体への寄付の透明性の向上
  • BtoBビジネス : ビットコインを用いた国際的な資金決済
  • マイニング : ビットコインネットワークの堅牢性を高め、通貨発行を担っている専用システム

ビットコインをはじめよう

  • 多くのクライアントソフトウェアが存在する。主に3つのタイプ
    • フルクライアント : ビットコインが始まって以来のすべての履歴を保持している。
    • 軽量クライアント : ユーザのウォレット保持するものの、取引情報などは、第三者が管理するサーバを介して行う。
    • ウェブクライアント : ウェブブラウザを通じてアクセスするもの。ユーザのウォレットを第三者のサーバに保持している。

クイックスタート

  • いくつかの方法でクライアントソフトウェアをダウンロードして、自分の「ビットコインアドレス」生成する。
    • ビットコインアドレスは隠す必要がない。
    • 他者とビットコインアドレスを共有することで、ウォレットに直接お金を送金することができるようになる。

最初のビットコインを手に入れる

ビットコインを送る・受け取る

  • ビットコインウォレットが作成されていると、ビットコインを受け取る準備はできている。
  • ただし、この時点でアリスのビットコインアドレスはビットコインネットワークに伝えられていない。
    • ブロックチェーン(公開元帳)に登録されるまでは、有効なアドレス候補の一つに過ぎない。
    • 公開元帳に書き込まれると、ネットワークはアリスのビットコインアドレスを認識し、そのアドレスの資金と残高を参照できるようになる。

第02章 ビットコインの仕組み

トランザクション、ブロック、マイニング、ブロックチェーン

ビットコインの1つのトランザクションを負うことで詳細にビットコインの仕組みを調べる。

登場人物: ジョー、アリス、ボブ

ビットコイン概観

f:id:msyksphinz:20180203124534p:plain

コーヒー代金の支払い

アリスがボブのカフェでコーヒーの代金を支払う。支払いの総額は0.015BTCである。 これは1.5USDに相当する。

このトランザクションでは、アリスが支払いを確定させるためにsendボタンを押し、ボブがトランザクションの完了を確認する。

ビットコインは様々な額で取引を行うことができる。 最小単位は「satoshi」で、1/100,000,000 bitcoinのことを指す。

ビットコイントランザクション

  • トランザクションには、1つ以上の「インプット」「アウトプット」が記載されている。

f:id:msyksphinz:20180203124540p:plain

アリスがボブのカフェで支払いをするとき、

コーヒー代の支払いのトランザクションをボブのビットコインアドレスと紐づけることによって、このトランザクションのアウトプットを使用するためには、ボブの署名が必要になる。

ビットコイントランザクション

  • 1つのインプットと2つのアウトプットの形式 (一般的なトランザクション)

    • インプット0 : From アリス、アリスによる署名付き
    • アウトプット0 : To ボブ
    • アウトプット1 : To アリス (おつり)
  • 集約型トランザクション (小さなコインや小額紙幣をまとめて大きな額の紙幣にするトランザクション)

    • インプット 0 ... N
    • アウトプット0
  • 分配型トランザクション (企業内での給与の支払いなど)

    • インプット 0
    • アウトプット 0 ... N

トランザクションの構築

トランザクションを作ったり署名を行うのに、ビットコインネットワークに接続されている必要はない。 最終的にそのトランザクションが送られれば問題ない。

正しいインプットをどのように得るか

ほとんどのウォレットは、未使用トランザクションアウトプット(UTXO)を保持するデータベースを持っていて、ウォレットの秘密鍵でロックされている。

フルインデックスのウォレットを持っている場合は自分が十分な量のウォレットを持っているかどうかを確認できるが、そうでない場合は、ビットコインネットワークに問い合わせることができる。

アウトプットの生成

アリスの資金 0.1BTC からコーヒー代金 0.015BTC を支払うとおつりが発生する。アリスは0.85BTCのおつりをもらう。

さらに、トランザクションビットコインネットワークで早く処理されるために、アリスのウォレットは少額のトランザクション手数料を加える (0.0005BTC)。 この差額がトランザクションの手数料となり、ブロックチェーンに組み込むための手数料としてマイナーにより徴収される。

トランザクションを元帳にどうやって取り込むか

トランザクションビットコインネットワークに取り込まれてはじめて、ブロックチェーンの一部になる。

ビットコインネットワークへのトランザクションの送信

ビットコインクライアントは、いくつかほかのビットコインクライアントとつながることで、ビットコインネットワークに参加している。 トランザクションとブロックをすべてのビットコインクラインとに伝えることである。

どのようにビットコインネットワークを伝わっていくのか

アリスのウォレットはボブのウォレットと直接つながっている必要はなく、ビットコインネットワークを通じてPeer-to-Peerで転送されていき、数秒以内で大半のノードに到達する。

ボブの視点で見た時には

アリスからボブへのトランザクションが、ボブのウォレットに到達すると、ボブのウォレットはそれを認識する。 これは、このトランザクションがボブの秘密鍵でのみ復号できるアウトプットになっているからである。

この時点で、ボブは多少のリスクがあるものの、このトランザクションがすぐにブロックに含められ承認されるものとみなすことができる。

※ 少額の場合はブロックが生成されるまで10分も待つ必要はなく、コーヒー一杯のような少額の商品には必要がない。

ビットコインマイニング

  • マイニングにより検証されブロックに取り込まれるまでは、共有されている元帳であるブロックチェーンの一部になることはできない。
  • マイニングにより、トランザクションが「ブロック」の中に取り込まれる。

  • マイニングの目的

    • 新しいビットコインを発行するためにマイニングを行う。この量は時間で決められており、時間がたつと減少していく。
    • 信用を作り出す。トランザクションが承認され、より多くのブロックが存在したということは、多くの計算量を要したという意味で、信用度が高い。
  • マイニングとは数独パズルのようなものである。

    • 約10分間で解けるように難しさが自動的に調整される。
    • 数独パズルは、解くのは難しいが、検証は容易である。
  • マイナーは約10分ごとに開放を見つけるレースに参加している。
    • Proof of Work : 前もって決められたパターンに合う解法が現れるまで反復的に、ブロックのヘッダとランダム値をSHA256暗号化アルゴリズムでハッシュ化する。
    • 最初に解法を見つけたマイナーがそのブロックの勝者 → ブロックをブロックチェーンに組み込む。

ブロック内のトランザクションのマイニング

トランザクション