わかりやすくブロックチェーンを説明してみる(第2回):1人を決める

<連載目次>

はじめに

ブロックチェーンの本質は「データ分散(コピー)」技術です。

前回(第1回)はブロックチェーンとの出会いおよび腑に落ちない点についてお話しました。ただし、ブロックチェーンについて全く知らない人にとっては私の腑に落ちない点についてもわからなかったかと思います。そのような人も本連載を読んで頂ければブロックチェーンの本質が必ずわかるようになるはずです。

今回(第2回)は、ビットコインとブロックチェーンの概要について説明します。「疑問は色々残るけどなんとなくわかったかな」、という気になれると思います。残った疑問については第3回以降で明らかにしていきます。

なお本連載はビットコインやブロックチェーンを技術的な側面から解説することを目的としています。ビットコインへの投資を勧める連載では決してありません。

ビットコインとブロックチェーン

ブロックチェーンについて説明する前に、まずはビットコインについて説明します。

ビットコインの概要

ビットコインとは何か、についてまずは世間一般で言われている内容で説明してみたいと思います。

ビットコインは日本国内では「仮想通貨」と呼ばれていましたが、2019年6月からは「暗号資産」と呼ばれるようになっています。なおビットコイン以外にも多くの種類の暗号資産が存在しています。暗号資産というとなにやら仰々しい名前ですがその本質はそんなに難しいことではありません。

少し乱暴な表現かも知れませんがビットコインの特徴は以下の通りです。

  1. 全員の送金情報を誰でも見ることができる
  2. 全員の送金情報を1つにまとめて(1つのファイル(取引台帳)として)管理する。
  3. 取引台帳はビットコインネットワークに接続されている世界中の約1万台のコンピュータに同じ内容でコピーされる。
  4. ビットコインネットワークには誰でも許可なく接続できる。

上記では「暗号」らしき要素はでてきません。実は上記を実現するために暗号技術が使用されているのです。ただこの暗号技術は特に新しいものではなく、皆さんが普段インターネットを使う場合、特に意識せずに使用されている暗号技術と同じ技術です。ビットコインで使用されている暗号技術については連載の後半で説明する予定です。なお、暗号技術を理解していなくてもビットコインやブロックチェーンの本質を理解することはできます。

銀行との違い

ビットコインの特徴を上に4つあげましたが、銀行などと何が違うのでしょうか?
銀行の場合だと、その銀行のネットワークやサーバーに問題が発生した場合は取引(送金)ができなるかも知れません。あるいは万が一その銀行が倒産した場合は預けていた資産が無くなってしまいます(ある程度の保証はありますが)。また、ネットワークやサーバーに問題が決して発生しないように莫大な費用をかけてシステム開発およびメンテナンスを銀行は行っています。

一方、ビットコインではこのような心配はありません。ビットコインネットワークは世界中に張りめぐらされているため、一部のネットワークやサーバーに問題が発生しても有効なネットワークを使うように切り替わり取引を継続することが可能です。また一部のサーバーが壊れて取引台帳のデータが無くなってしまっても世界中にある約1万台のコンピュータに取引台帳のコピーがあるので全く問題ありません。

といったような説明が一般的にはされています。だいたいは正しいのですが、一部は間違っています。しかしビットコインの概要説明としてはこれでもよいのかなと思います。

ビットコインって円?ドル?

ところでビットコインの通貨としての単位は何でしょうか?ビットコインの通貨としての単位はBTCです。読み方は「ビーティーシー」です。

例えば、
  「AさんからBさんに0.1BTCを送金した」
といった感じです。

他の単位もあるのですが本連載における今の段階ではビットコインの単位=BTCでよいかと思います。

では1BTCを日本円で換金するといくらになるのでしょうか?それは決まっていません。市場が決めることになります。つまり昨日は1BTC=100万円だったのに、今日は1BTC=130万円などということもありえるわけです。

ちなみにビットコインが誕生した2009年は1BTC=0.07円という交換レートでした。ところが2021年4月初旬には1BTC=約650万円となっています。また今後の交換レートがどうなるのは誰にも分らないと思います。

このようには価値が激しく変動するビットコインは通貨としての役割を果たしているとはとても思えません。ですから「仮想通貨」ではなく「暗号資産」と呼ぶようになったようです。

ビットコイン・ネットワークの概観

上述したようにビットコインではビットコイン・ネットワークに接続されいるすべてのコンピュータで取引台帳が保存されています。この様子を以下に図で示します。

上図ではAさん→Bさんへ0.1BTCを送金する場合を示しています。図中に「トランザクション」という単語が出てきますが、単に送金情報の転送を意味します。「トランザクション」と書くと文字数が多くなるので図では略して「Tx」と書いています。

ビットコイン・ネットワークにおいて送金情報は世界中のコンピュータにバケツリレーで転送されていきます。

前回(第1回)でも触れましたが、ビットコインでは取引台帳のファイルサイズは2021年4月時点で約340GBです。また、ビットコインネットワークには約1万台のコンピュータが接続されています。

ビットコインの歴史

ビットコインの歴史について以下に簡単にまとめてみました。

2007年・Satoshi Nakamotoと名乗る人物がビットコイン・システムの開発をはじめた
・Satoshi Nakamotoが誰であるかは不明(日本人かどうかも不明)
2008年10月・Satoshi NakamotoがCryptography(暗号化)メーリングリストでビットコイン
 に関する論文を発表
2009年 1月・Satoshi NakamotoがCryptography(暗号化)メーリングリストで
 ビットコイン・システムのソースコードをリリース
・最初のビットコインの送金
  ・Satoshi Nakamoto → Hal Finny氏へ
2009年10月・「New Liberty Standard」社が初めて法定通貨との交換レートを提示
  ・1BTC = 約0.07円
2010年 5月・ビットコインが初めて商取引に使われる
  ・ピザと10,000BTCを交換(2020年4月時点で換算すると約657億円!)
2010年中旬・Satoshi Nakamotoが消息不明となり、ビットコイン・システムの開発がコミュニティに
 引き継がれる
2010年 7月・最初の取引所(ビットコインと法定通貨との交換)としてMt.Gox社(本社:日本)が
 サービスを開始
・1BTC=約7円
2010年 9月・マイニングプールとして初めて「Slush’s pool」がマイニングに成功
 (マイニングについては後で説明が出てきます)
2013年12月・NHKが日本で初めてビットコインに関する特集を放送
・1BTC = 約12万円
2014年 2月・Mt.Goxが閉鎖(ビットコイン盗難事件)
・1BTC = 約18,000円
・私がビットコインの存在を知った時期
・ビットコインが何なのかさっぱりわからなかった!
2017年12月・1BTC = 約220万円
2018年 6月・1BTC = 約70万円
2019年 1月・1BTC = 約37万円
2019年 6月・1BTC = 約90万円
2020年 3月・1BTC = 約38万円
2020年12月・1BTC = 約200万円
2021年 4月・1BTC = 約650万円
表1 ビットコインの歴史

表1の最後の方は最近の交換レートについて書いてみました。これをみてもビットコインが通貨としての役割を果たしていないことがわかります。

表1にも出てきていますが、ビットコインはSatoshi Nakamoto(サトシ・ナカモト)と名乗る人物が開発しました。サトシ・ナカモト氏が誰なのか、また日本人なのかそうでないのかはわかっていません。サトシ・ナカモト氏が誰なのかについて推理するのもなかなか面白いかも知れません。

サトシ・ナカモト氏が書いたビットコインに関する論文は以下から参照できます。
サトシ・ナカモト氏の論文

サトシ・ナカモト氏がやりたかったこと

サトシ・ナカモト氏の論文によると彼(彼女)は以下のようなことを考えたようです。なお、以下は私なりの解釈が加わったものとなっています。

  • 銀行等では多額の手数料がかかるため、少額の送金は現実的ではない
  • であれば、なんとかして個人間で直接送金できないものか?
  • そのためにはお金を受け取る人は少なくとも相手の預金残高(支払い能力)を確認する必要がある
  • 銀行などの仲介なしに、どうやって相手の預金残高を確認する?
  • そうだ、相手の通帳(他の人との取引を含めすべての取引履歴)の内容がわかればよい
  • 世の中のすべての人のすべての取引履歴(送金履歴)を保存しておけばよい
  • そしてすべての人がその取引履歴を参照できるようにすればよい
  • 保存したデータが壊れたらどうする?改ざんされたらどうする?
  • だったら世界中の大勢で全く同じ内容のデータを保存すればよい
  • あと、特別な権限をもつ管理者は置きたくない。誰でも同じ権限が持てるようにしたい(中央集権は嫌だ)。

ここで問題なのが上記赤線部分の、

    「世界中の大勢で同じ内容のデータを保存する」

という点です。多くのコンピュータがネットワークで接続されていれば簡単に実現できそうですが、実はこれは非常に困難なことです。もしこの問題に対してすばらしい解決策を思いついたら大金持ちになれるかも知れません。

一番の難しいのは、

   「全く同じデータを」

という部分です。コンピュータ間においていわゆる「データの同期」を取る、ということです。

では一体何が難しいのでしょうか?ここでは取引内容が保存されたデータを「取引台帳」と呼ぶことにします。例えば「AさんからBさん」に1BTCの送金があった場合、以下の情報が取引台帳に書かれます。

  • 送金元:Aさん
  • 送金先:Bさん
  • 送金額:1BTC

上記の「Aさん→Bさん」への送金とほぼ「同時」に地球の裏側では「Xさん→Yさん」への送金が発生したとします。
この場合、あるコンピュータの取引台帳には先に「Aさん→Bさん」への送金情報が書かれ、その後に「Xさん→Yさん」への送金情報が書かれるかも知れません。一方、別のコンピュータにある取引台帳には先に「Xさん→Yさん」への送金情報がかかれ、その後に「Aさん→Bさん」への送金情報が書かれるかも知れません。これでは2つのコンピュータにある取引台帳において取引の順序が異なってしまいます。二つの送金がほぼ「同時」に発生するので、これは避けられない問題です。もちろん取引の順序が異なっていても問題ない場合もあるのですが。

とにかくこれでは、世界中のコンピュータで全く同じデータを保存する、ということはできません。

誰か1人を代表者として決めればよい

上記のような問題を解決するにはどうすればよいのでしょうか?解決策はいくつかあるのですが、サトシ・ナカモト氏は以下の方法を考えました。アイデアとしては単純です。

  • 取引台帳に書き込むデータはたった1人(1台のコンピュータ)が決めて、他のすべての人(コンピュータ)はその人の書いたデータをコピーする。

確かにこうすればすべてのコンピュータにある取引台帳の中身は同じなります。

例えば先の「Aさん→Bさん」への送金の場合ですと、「Aさん→Bさん」への送金情報を取引台帳に書こうした人(コンピュータ1)が手をあげます。世界中のコンピュータが「コンピュータ1」を代表者と認めて、世界中の全員が「Aさん→Bさん」への送金情報を自分が保存している取引台帳に書くわけです。

しかしこれでもまだ問題があります。というのも「Aさん→Bさん」への送金とほぼ同時に地球の裏側では「Xさん→Yさん」への送金情報を取引台帳に書くために手をあげる人(コンピュータ2)がいるかも知れないからです。この場合、他のコンピュータはコンピュータ1とコンピュータ2のどちらに従えばよいのでしょうか?早い者勝ち、つまり先に手を挙げた方を代表者にすればよいのですが、ネットワークを情報が伝搬するときには遅延(伝搬時間)が生じます。このため、あるコンピュータは「コンピュータ1が先に手を挙げた」と思い、あるコンピュータは「コンピュータ2が先に手を挙げた」と思うかも知れません。

残念ながら複数のコンピュータが接続されている状況において、早い者勝ちにより1人を決めることはできないのです。ただし接続されているコンピュータの総台数が事前に分かっている場合は早い者勝ちにより1人を決める方法が実は存在します。しかしビットコイン・ネットワークに接続するコンピュータの数は日々変化しているのでその方法は使えません。

どうやって1人を決めるか?

ではどうやって代表者1人を決めればよいのでしょうか?早い者勝ちではだめな理由は、ほぼ同時に名乗りを上げる人達がいるからでした。

であれば、同時に名乗りを上げられないような仕組みにすればよいわけです。そこでサトシ・ナカモト氏が採用した方法が、

  「時間のかかる計算問題を解いた人」

を代表者として選ぶ、という方法です。計算問題としては以下の要素が必要です。

  • 解くのには時間がかかる
  • 検算(答え合わせ)は一瞬で完了する

解くのに時間がかかれば、複数の人が同時に手をあげる可能性は減りそうです。

検算を一瞬で終える必要がある理由は、他の全員が「うんうん、たしかにあなたは難しい計算問題を解いたね」と一瞬で納得しその人を代表者として認めるためです。検算に時間がかかっていては、その人を代表者として認めるまでに時間がかかり、結局は送金情報を台帳に書き込むまでに時間がかかってしまうことになります。

「計算問題」の具体的な中身については次回説明します。

マイニングの正体

1人を決めるために行う「時間のかかる計算問題を解く」行為は、「マイニング」と呼ばれています。
またマイニングをする人たちは「マイナー(採掘者)」と呼ばれます。

マイニングは英語では「Mining」であり、「鉱山での採掘」を意味します。時間のかかる計算問題を解くことがなぜ「鉱山での採掘」なのでしょうか?

実は、「時間のかかる計算問題」を一番早く解いた人には報酬としてビットコインが与えられます。なぜ報酬がもらえるかというと、「時間のかかる計算問題」を解いて代表者となるということは、すべてのコンピュータにある取引台帳の中身を同じにすることに貢献しているからです。なお、「時間のかかる計算問題」を人よりも早く解くためには多数のコンピュータを並列で動かし膨大な電力を必要とします。電気代が馬鹿にならないので、この点でも報酬をもらえないとやってられないですね。

具体的に報酬額はどのくらいなのでしょうか?ここで詳細は割愛しますが、報酬額は以下の表のように定期的に減っていきます。これはビットコイン自身の仕様です。

2009年 1月~1回の計算問題を誰よりも早く解くと50BTCの報酬
2012年11月~1回の計算問題を誰よりも早く解くと25BTCの報酬
2016年 7月~1回の計算問題を誰よりも早く解くと12.5BTCの報酬
2020年 5月~1回の計算問題を誰よりも早く解くと6.25BTCの報酬
表2 ビットコイン・マイニングの報酬

現在(2021/4/5)では、マイニングの報酬は1回につき6.25BTCです。現在(2021年4月)は1BTC=約650万円ですから、「時間のかかる計算問題」を1回解けば、約4000万円の報酬がもらえます。まさに金鉱山での採掘のようですね。

そんなにもらえるのなら自分も計算問題を解くことに参加してみよう、と思うかもしれませんが現実はそんなに甘くはありません。これについては次回以降触れたいと思います。

ブロックとブロックチェーン

「時間のかかる計算問題」はビットコインでは約10分程度かかる難易度の計算問題となっています。つまりAさん→Bさんへの送金情報を世界中のコンピュータに取引台帳に書き込むために約10分の時間がかかるということになります。しかし送金が正確に確定するには数時間あるいは場合によっては数日かかることがあります。このあたりについては次回以降の連載で説明するので今の時点では、世界中のコンピュータに取引台帳に書き込むために約10分の時間がかかるという理解でよいかと思います。


なぜ約10分なのかについては私はよくわかっていません。10分より短い時間だと同時に手を挙げる人が出る可能性が増えるし、10分より長い時間だと取引成立に時間がかかりすぎてくるので、ちょうどよい感じが約10分なのかも知れません。

しかし、たった1件の送金情報を書くためだけに10分も費やすしてしまうと、1日に扱える送金件数は非常に少なくなってしまいます。このためビットコインでは送金1件ごとに代表者を決めるのではなく、ある程度の件数の送金情報がまとまった時点で計算問題を出し代表者を決め、その「まとまった複数の送金情報」を取引台帳に書くようにしています。

この「まとまった複数の送金情報」は「ブロック」と呼ばれています。ブロックチェーンという言葉の由来はこの「ブロック」にあります。「チェーン」は単に「ブロック」が次々とつながっていくのでそう呼ばれているのだと思います。ただブロックチェーンにおいては「ブロック」の繋がり方に特徴があります。この特徴については次回以降で説明したいと思います。なお、サトシ・ナカモト氏の論文では「chain of blocks」と表現されており、「ブロックチェーン」という単語は出てきていません。

ビットコインでは1ブロックあたりの送金件数は数千件程度と言われています。ということは10分間で数千件しか処理できないことになります。これでは処理能力が低すぎる、という意見もあります。では1ブロックあたりの送金件数をもっと増やせばいいじゃないか、というとそうでもないのです。このあたりについても次回以降で説明する予定です。

次回

今回(第2回)は、「1人を決める」ということと、「計算問題を解くこと(マイニング)」について説明しました。実はこれでブロックチェーンの本質についてはほぼ説明したことになります。

次回(第3回)は、マイニングおよびブロックチェーンについてもう少し詳しく説明します。

<連載目次>