ビットコインが解決すべき課題として毎日のように目にするスケーラビリティ(Scalability)という単語ですが、「そもそもスケーラビリティって何?」という疑問を持っている方も多いのではないでしょうか。ビットコインのスケーラビリティ問題はスケールという言葉から連想されるように「規模」に関する話なので、なんとなく「ビットコインネットワークの規模の拡大や処理能力に課題があるのだな」ということは字面から判断できそうです。しかし「なぜスケーラビリティが何年もの間解決されていないのか」「なぜ派閥を生みネットワークの分裂を生み出すほどに深刻な問題として捉えられているのか」「Segwitのアクティベーションによって解決されていないのか」など不明瞭な点は多いと思います。本記事ではビットコインのスケーラビリティについて簡単にまとめてみたいと思います。
ビットコインの処理能力はプロトコルによって決定されている
そもそもブロックとは何なのでしょうか?ビットコインにおけるブロックはトランザクションの記録を保管するためのスペースです。そのスペースに書き込まれなければパブリックブロックチェーンという公開台帳に取引が記録されないため、取引を遂行することができません。そして記録するためのスペースは無限ではなく有限です。ビットコインの場合、1MBサイズのブロックが約10分間に一度生成されることになっています。手数料は、この10分おきに現れるブロックサイズの需給によって上下するわけです。
ネットワークが処理できる秒間トランザクションの数(Throughput=スループットという言葉が使われることもあります)はブロックサイズ、ブロック生成間隔、1トランザクションあたりの平均サイズで決定されます。簡単な式で表すと
ビットコインの処理能力=
ブロックサイズ / (ブロック生成間隔×トランザクションあたりのサイズ)
になります。つまりブロックサイズが大きければ大きいほど、またブロック生成間隔と1トランザクションあたりのサイズが小さければ小さいほど、ビットコインの処理能力は向上することになります(※後述)。
実際の数字を当てはめて考えてみましょう。ブロックサイズは1MBでブロック生成間隔は約10分(600秒)です。つまり、
1000KB / 600s = 1.667KB/s
一秒間に1.667KBを処理できる計算になります。では1トランザクションあたりのサイズはどの程度の大きさなのでしょうか。
Historical Data | TradeBlockAverage Number Of Transactions Per Block – Blockchain
11月18日の平均トランザクションサイズは488Bです。
上の式によるとビットコインの秒間トランザクション処理能力は1.667KB/sなので、
1667/488=3.42transactions/s
秒間3.42トランザクションという結果が出ました。
1ブロックは1mb(1,000,000b)なので、
1,000,000/488=2049transactions/block
1ブロックあたり2049のトランザクションが格納できます。
11月18日の1ブロックあたりの実際のトランザクションは1992になっています。
このようにビットコインが単位時間あたりに処理できるトランザクションの数は仕様として決まっているため、これを超えるスループットを実現することは出来ません。ビットコインのトランザクションが詰まり、Mempoolのトランザクション数が10万を超えたりするのは、単にビットコインが処理できるトランザクション数を超えるトランザクションが生成されているからで、マイナーの計算力が足りないとか、ビットコインのネットワークがバグっているとか、そういう理由ではないことに注意が必要です。ビットコインのネットワークが正常に機能したとしても(というよりも正常に機能しているからこそ)、このような事態は発生します。
3つの変数のどれを変更するかで派閥が形成されている
先程の式をもう一度見てみます。
ビットコインの処理能力=
ブロックサイズ / (ブロック生成間隔×トランザクションあたりのサイズ)
ブロックサイズ、ブロック生成間隔、トランザクションあたりのサイズの3つによって処理能力が決まっている以上、ビットコインをスケーラブルにするにはこれらを変更する必要があります。そしてこれらの変数のうち、どの変数をどのように変更していくかという点において大きな方向性の違いがあるため、コミュニティの分裂が生まれているのです。簡易的な式にして眺めると単純なことのように思えるのですが、変更する変数が違えば必要な技術やメリット、デメリットが大きく異なります。それ故に方向性の違いによるコミュニティの分裂はある意味では仕方のないこととも言えます。
それぞれの変数について簡単に見ていきましょう。
ブロックサイズを引き上げる
これが所謂ビッグブロック派ですね。8月に生まれたビットコインキャッシュはブロックサイズを8MBに引き上げています。単純計算で8倍の処理能力を持ったことになります。ただし、実際には採掘難易度や、採掘難易度と価格によって決定される収益性に基づくマイナーのハッシュパワーの振り分け等にも大きく影響されます。またブロックを大きくすることによるブロック伝播の遅延問題も指摘されています。これに関連して、Xtreme Thinblocksが考案されたり、最近ではBitcoin Unlimited陣営のPeter Rizun氏等がギガブロックのテストを行っていたりと動きがあります。ビッグブロックの実証実験が進むに連れて従来の指摘が正しいのか、改善策は存在するのか等、様々なことが明らかになってくるでしょう。
スケーラビリティの解決策としてよく取り上げられるSegwitは署名データをCoinbaseという領域に格納し、約4MBまでのBlock weightを認めるというものです。
Block weightは(Base size * 3 + Total size)で定義され、署名データはその他のデータに比べて1/4分しかカウントされないため、トランザクションサイズ中の分離された署名データが占める割合が大きければ大きいほど、1ブロックに格納できるサイズが大きくなるというわけです。Segwitはブロックサイズの問題のみならず、トランザクション展性問題解決などオフチェーン技術の開発にも重要なのですが、スケーラビリティ問題の解決はSegwitの先にあるオフチェーン技術の開発にかかっています。
ブロック生成間隔を短縮する
今現在10分おきに生成されるブロックを、より高い頻度で生成しようというものです。ブロックの生成間隔を短縮するとネットワークの分岐がより頻繁に起こるようになり、結果的に破棄されることになるチェーンに投入された計算量が無駄になることでビットコインネットワークのセキュリティを低下させると言われています。
オンチェーントランザクションのサイズor頻度を引き下げる
トランザクションのサイズを引き下げることができれば、1ブロックに格納できるトランザクションの数は増えますが、これには限界があります。ライトニングネットワーク等のオフチェーン技術はトランザクションのサイズを引き下げるのではなく、オンチェーンで記録するトランザクションの数そのものを減らすことによって、現状のメインチェーンの処理能力を維持したまま、事実上ネットワークとそれに付随するレイヤーの総体としての処理能力を向上させるというものです。ライトニングネットワークについては、以下のステートチャネルに関する記事をご覧ください。
スケーラビリティ問題は他のブロックチェーンプロジェクトにとって他人事ではない
ビットコインは他のプロジェクトに較べてネットワークの利用率が高いので、スケーラビリティや処理速度に関する問題が頻繁に取り上げられるだけで、これらの問題は基本的に他のブロックチェーンプロジェクトも本質的に抱えている問題です。スケーラビリティに対するアプローチは様々ですが、例えばEthereumはブロックサイズやコンセンサスアルゴリズムの面でビットコインとは異なる方法を採用しています。