わかりやすくブロックチェーンを説明してみる(第4回):様々な疑問

<連載目次>

はじめに

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

これまで第1回から第3回ではブロックチェーンの本質について説明してきました。ただし本質を説明するために細かいことに関しては説明を省略してきました。このため色々と疑問が残ったかと思います。

今回(第4回)は、いくつかの疑問について触れてみたいと思います。

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

疑問:みんなが同じ計算問題を解いたら、ほぼ同時に解ける人がやっぱり多数出てくるのでは?

1人を決めるために「時間のかかる計算問題」を解くということでしたが、よく考えてみるとみんなが同じ計算問題を解くのなら、コンピュータの性能はどれも似たようなものなのでnonceを見つける人が同時にたくさん現れてもおかしくないはずです。

これについて考えてみます。

以下の図に示すようにハッシュ関数の入力はブロックデータとnonceでした。

実はブロック内の各送金情報はマイニングをするコンピュータごとに異なっています。決定的に異なる点は、自分に送金してもらうためのビットコイン・アドレスです。ビットコイン・アドレスについてはまだ説明していませんが、今の時点では口座番号や電子メールアドレスに相当するものだと思ってもらって大丈夫かと。

Aさんはマイニングをする前に、Aさん自身のビットコイン・アドレスをブロック内に追記します。その後、マイングに成功すると(nonce値を見つけると)報酬としてビットコインがもらえます。このとき、ビットコイン・ネットワークからAさんのビットコインアドレスに対してビットコインが送金されます。より具体的にいうと、Aさんが報酬を受け取ったという内容が世界中のコンピュータにある取引台帳に書かれるということです。

また、ネットワーク遅延により各コンピューターに到着するトランザクションの順番が異なることもあります。トランザクションの順番が変わればブロックの内容も変わります。

さらにいうと、マイニングの対象となるブロックにどのようなトランザクションを入れるかについてはマイニングする人が自由に決めてよいことにもなっています。

このようにマイニングの対象となるブロックの内容は、マイニングをする人ごとに異なります。つまり、全員異なる問題を解くことになります。問題が異なれば、同時に解き終わる人が出てくる可能性は低くなりそうです。

疑問:それでもほぼ同時に複数の人が解けたら?

とは言ってもやはりある程度の確率で、ほぼ同時にnonceを見つける人が現れます。下図に示したように例えばXさんとYさんがほぼ同時にnonceを見つけてネットワーク上でnonce発見を通知したとします。そしてAさんはまず先にXさんからの通知を受け、Bさんはまず先にYさんからの通知を受けたとします。

この場合、AさんはXさんから転送されてきたブロックを自分の保存している取引台帳に書き込みます。一方、BさんはYさんから転送されてきたブロックを自分の保存している取引台帳に書き込みます。

これではAさんとBさんの取引台帳の中身が異なってしまいます。

この問題に対してビットコインでは、「ブロックチェーンの分岐(フォーク)」という概念を使って解決を図っています。「ブロックチェーンの分岐(フォーク)」については別の回で詳しく説明してみたいと思います。

疑問:サトシ・ナカモトは送金手数料を安くしたかったのでは?送金手数料の話は?

第2回ではサトシ・ナカモト氏がやりたかったことの1つに送金手数料を安くする、というのがありました。ビットコインにおいて送金手数料はどうなっているのでしょうか?

送金手数料は送金者が事前に決める

実はビットコインにおいて送金手数料は送金する人が決めることになっています。送金手数料の情報は送金情報(トランザクション)とともに一旦ブロックにたまります。そしてそのブロックがマイニング対象となり、nonceを見つけたマイナーにはビットコインが報酬として与えられます。このとき、送金手数料も報酬としてマイナーに与えられることになっています。

ということは、手数料が高く設定されているトランザクション(送金)を優先してブロックにためてマイニングをしたほうがマイナーにとっては報酬が増えてうれしいです。つまりあまりに手数料が低く設定されているトランザクション(送金)はいつまでたってもブロックに入らず、結局は取引台帳にか書かれず送金が成立しないということが発生します。あるいはそのうちブロックに入れてもらえるかもしれませんが、それにしても送金成立に時間がかかることになります。

送金手数料は安いわけでもない

確実に素早く送金を完了するには、送金手数料を高めに設定して送金するしかありません。でもちょっと待って下さい。これではどんどん送金手数料が高くなってしまい、サトシ・ナカモト氏のやりたかったことからは離れてしまいます。

実際、送金件数が非常に多くなった2017年末から2018年1月にかけて1回の送金手数料が6000円を突破したことがありました。現在(2021/4/7)でも送金手数料は約2000円となっており、とてもサトシ・ナカモトの思惑とは違ってきています。送金手数料の推移は以下で確認することができます。

https://bitinfocharts.com/comparison/bitcoin-transactionfees.html

なお、送金額がいくらであっても送金手数料は同じです。送金手数料は転送するデータのサイズにより決まります。1回の送金でだいたい200Byteのデータを転送しています。このあたりについて詳しく説明するとややこしくのなるでここでは詳細な説明は割愛します。

疑問:ブロックにどれだけ溜まったらマイニングを開始するの?

マイニングをしながら同時に次回のマイニング用にブロックを作成していきます。ブロックの作成とは、転送されてくる個々のトランザクション(個々の送金情報)をブロックにためていく作業のことです。

ではどれだけのトランザクションがブロックにたまったら次のマイニングを開始するのでしょうか?じつはブロックにどれだけトランザクションがたまったかにかかわらず、誰かがnonceを見つけたら全員次のマイニング作業を開始します。

ブロックのサイズは1Mバイト以下

ただしビットコインではブロックのサイズに1Mバイト(正確に言うと1Mバイトではない)以下、という決まりがあります。1Mバイトだと約4000件の送金情報に相当します。

1ブロックあたりのマイニングにかかる平均時間は10分なので、10分間で4000件の送金情報を世界中の取引台帳にコピーすることができます。1時間(60分)では 4000(件)×6 = 24000件です。1日では 24000(件)×24(時間)=576,000件です。1秒あたり約7件を処理できることになります。

クレジットカード決済では1秒あたり2000件以上を処理しているので、それと比べるとビットコインの処理速度は見劣りします。少なくとも高速取引には向いていないように思えます。

ビットコインにおいてもブロックの上限サイズを2Mバイトとか10Mバイトといった具合に増やせば処理速度は向上するはずです。ではなぜビットコインはブロックの上限サイズを1Mバイトにしているのでしょうか?

なぜ1MB以下?

以降は私の個人的な考えです。この1Mバイトという上限はサトシ・ナカモト氏が最初に決めたわけですが、おそらくたいした意味はなかったのではと思います。ビットコインシステムのソースコード内にてとりあえず1Mバイトとしておいて、必要になれば変更するばいい、くらいな感じだったのではと推測しています。

ではなぜいまだに1Mバイトのままなのでしょうか?それはビットコインシステムを開発しているコミュニティ内で1Mバイト以上のサイズに反対する人が多いからのようです。なぜ反対するのでしょうか?

いくつか理由はあるようなのですが、1つにはネットワーク遅延が関係しているようです。ブロックのサイズが大きくなるとブロック転送に時間がかかり、ブロック発見(nonce発見)の通知が遅れ、その間みんな無駄なマイニングを続けてしまいます。

また、ブロック転送に時間がかかってしまうとブロック発見者(nonce発見者)は有利になります。なぜならブロック発見者はすぐに次のマインニングを開始できるのに対して、他のみんなはブロック発見の通知を受け取るまで次のマイニングを開始できません。これだと特定の人たちだけがマイニングに成功する可能性があり、中央集権的なシステムになりかねません。

ちなみに、ブロック発見の通知を受けるとみんなはまずnonceの検算をします。nonceが正しければ取引台帳にブロックを書き込みます。みんなはやるべきことがあともう1つあります。それは、次回のマイニング用に作成していたブロックY内の各トランザクション(各送金情報)が、今回通知のあったブロックXの中に含まれていないかをチェックします。含まれている場合は、ブロックYからそのトランザクション(送金情報)を削除します。

このようにブロックサイズが大きいとネットワーク遅延によりマイニング開始時期に不公平がでてきます。このネットワーク遅延はTor(The Onion Router)を使う人にとってはさらに深刻です。Torではネットワーク遅延がさらに大きくなります。TorとはTCP/IPにける接続経路の匿名化を実現するための規格です。Torの詳細については割愛します。

疑問:残高情報も記録するの?

これまでの説明では取引台帳に書かれる送金情報は「AさんからBさんへ0.1BTC送金した」という情報でした。ではAさんの残高情報はどこに記録されているのでしょうか?実はビットコインでは残高情報は取引台帳には記録されません。銀行の通帳なら残高は記録されているのですがビットコインの取引台帳では残高は記録されません。残高が記録されていなくても取引台帳全体を検索して計算するば残高はわかりますがさすがにそれでは効率が悪いです。

UTXOデータベース

では残高の情報はどこに記録されているのでしょうか?
実は残高情報はビットコイン・ネットワークに接続している各コンピュータが個別に記録しています。各コンピュータは取引台帳(ブロックチェーン)を参照して各アカウント(ユーザ)の残高を計算し残高データベースを作成します。この残高データベースは各コンピュータが責任を持って管理、他のコンピュータと共有はしません。したがって残高情報は、取引台帳(ブロックチェーン)のようにみんなで管理しているわけではありません。この残高情報データベースはUTXOセット(Unspent Transaction Output)と呼ばれています。UTXOはざっくりいうと未使用コインのことです。

以上を図にまとめてみました。

UTXOセット(データベース)は各コンピュータが独自に作成しているのですが、それで大丈夫なのだろうかと思うのは私だけでしょうか・・・。

ちなみにイーサリアムという暗号資産はブロックチェーン(取引台帳)に残高情報を持っています。

UTXOデータベース方式を使う理由やメリット、デメリットについて説明するとかなり長くなるのでここでは説明を割愛します。

なお話はそれますが、上述では「各アカウント(ユーザ)」という表現を使いました。厳密に言うとビットコインでは「アカウント(ユーザ)」の概念がありません。ビットコインアドレスが「アカウント(ユーザ)」に相当すると言えばそうなのですが厳密には違います。このあたりを説明しだすとややこしくなるので詳細につていは割愛します。機会があれば詳しく説明してみたいと思います。

疑問:スマホでも340Gギガバイトのブロックチェーンを保存するの?

ビットコインにおいて自分の残高等を調べるためには取引台帳(ブロックチェーン)全体を知らべる必要があります。以前にも触れたように2021年4月現在、ビットコインのブロックチェーン・ファイルのサイズは約340ギガバイトにもなります。スマホでビットコインに参加するときはスマホに340ギガバイトのファイルをコピーしなければならいのでしょうか?

スマホを使ってビットコインを利用する場合は、「ウォレット」と呼ばれる種類のアプリを使います。「ウォレット」は日本語では「財布」という意味です。「ウォレット」を使って相手にビットコインを送金したり自分の残高を確認したりします。

実はスマホのウォレットでは取引台帳(ブロックチェーン)全体は保存していません。ではどうやって取引台帳の中身を確認しているかというと、取引台帳全体を保存しているコンピュータにネットワーク上で問い合わせをして情報を取得しています。なお、取引台帳(ブロックチェーン)全体を保存しているコンピュータを「フルノード(Full Node)」と呼びます。

スマホのウォレットは取引台帳(ブロックチェーン)全体は保存しませんが、ブロックチェーンのずべてのヘッダーは保存します。ヘッダーだけであればブロックチェーン全体の1/1000程度のサイズですみます。ブロックチェーンのヘッダーについては第3回で説明しています。

ブロックチェーン内のすべてのヘッダ情報があれば、フルノードに問い合わせた時の回答をかなりの確度で信用することが可能となります。これはSPV(Simplified Payment Verification)と呼ばれる技術により実現されています。SPVの詳細については割愛します。

疑問:ビットコインよりも高速取引できる仮想通貨のからくりは?

ビットコインよりも高速に取引ができる、とうたっているブロックチェーンがあります。実はこの手のブロックチェーンにはからくりがあります。

ビットコイン・ネットワークに参加する「フルノード」(取引台帳をすべて保存するコンピュータ)の数は日々変化しています。しかし高速取引をうたっているブロックチェーンにおいては取引台帳を保存するコンピュータの台数が事前に決まっており固定となっているもがあります。事前にフルノードの台数が固定されていれば、マイニングなどしなくても高速に1人を決めることが可能なのです。そんなことがどうやってできるのかなのですが、有名なアルゴリズムにPaxosというものがあります。興味のある方は一度調べてみてはいかがでしょうか?

疑問:そもそも「暗号技術」の話が全く出てこないが?

ビットコインは「暗号資産」と呼ばれています。どの点が「暗号」なのでしょうか?

これまで説明してきた内容では、マイニング時に使うSHA-265(ハッシュ関数)が暗号技術の一部といえばそうなのですがそれだけで「暗号資産」とは言えません。なぜならマイニングをしない暗号資産もあるからです。ビットコインでは「公開鍵暗号」等の暗号技術が使用されています。「公開鍵暗号」等は通常のインターネット通信において利用されています。

次回(第5回)はビットコイン送金時にビットコイン・ネットワーク上で何がどのように検証されブロックチェーンに書かれるのかについて、「公開鍵暗号」を絡めて説明したいと思います。

次回

今回はブロックチェーンに関する各種疑問について説明しました。

次回(第5回)はビットコイン送金時にビットコイン・ネットワーク上で何がどのように検証されブロックチェーンに書かれるのかについて、「公開鍵暗号」を絡めて説明したいと思います。

<連載目次>