見出し画像

ブロックチェーンのスケーラビリティ問題(処理性能の問題)

非エンジニアにとってブロックチェーンがよくわからないところに「スケーラビリティ」関連の話があると思います。そもそもどういうことか、というところからプライベートとパブリックの違い、スループット、レイテンシー、シャーディング、など謎の言葉が頻出してきます。わたしもそうですが正直非エンジニアにはハードルが高いですよね・・・(あとエンジニアのみなさまは簡単に説明するということに興味がないですよね・・・)ということで今回はこのテーマでnoteを書いてみます。

ビットコイン、イーサリアムの処理性能

ビットコイン、イーサリアムの送付手数料の高騰、という話はマーケットが盛り上がると必ずでてきます。最近ではDeFiブームでイーサリアムの送付手数料が爆騰しましたね。※このチャートでは平均Feeがずっと1ドル以下だったのが2020年9月頃は14ドル超までになっています。

画像2

出所:BitInfoCharts

ビットコインも価格が高騰し取引が活発化すると手数料が高騰します。
※このチャートでは平均Feeがいわゆる「仮想通貨バブル」時の2017年末に55ドル、足許も10ドル超になっていますが、それ以外は2-3ドル以下です。

画像2

出所:BitInfoCharts

送付手数料が高騰するというのは仮想通貨を送付するときにお金がめちゃくちゃかかる、ということなのですが、このような状況では必要な分の手数料の積み増しをしていない仮想通貨送付リクエストが処理されないままたまっていく、という事象が起こります。(そのようなリクエストはMempoolというところに溜まっていき、たまっていくとMempoolのサイズが大きくなります。こちら↓が直近のMempool Sizeの推移)

画像3

出所:Blockchain.com

10月末にはビットコインの送付手数料もあがり、処理されない送付リクエストも溜まっていた、というのがFeeとMempoolのチャートから読み取れます。

これはそもそもビットコインやイーサリアムの処理性能がそんなに高くない、ということに起因します。
処理性能については、1秒間に何取引を処理できるか、TPS(Transaction Per Second)という指標を見るのですが
ビットコイン→5件程度
イーサリアム→最大25件
全銀システム→最大1,100件程度
クレジットカード(VISA)→最大56,000件

Thruput比較


という感じで、ビットコインとイーサリアムは処理性能という観点からみるととってもいけてないのです。ビットコインだと1秒に5件しか処理できないので、5件以上のリクエストが来ると後回しになってしまいます。なお、この時間当たり処理件数のことを「スループット」と呼びます。
※イーサリアムはこの問題の解決になるイーサリアム2.0というプロジェクトをやっています。それは後述します。

パブリックブロックチェーンの構造

ビットコインとイーサリアムの時間当たり取引件数に限界があるのはその構造が原因です。

以下の図がブロックチェーンの技術要素の解説ですが、最後の「コンセンサスアルゴリズム」のところで、ビットコインやイーサリアムはPoW(プルーフオブワーク)と呼ばれるやり方でマイナーに計算をさせて、最初に計算を解いたマイナーにブロックを記録させる、ということをしています。

画像4

出所:bitFlyer Blockchain

ビットコインの場合は、ブロックサイズが1MBで、ブロックが10分に1回記録されるようにPoWの難易度が調整されています(難易度調整が勝手に行われるプログラムになっています)。
マイナーは「最初に計算を解いて記録した」ことに対する報酬(いわゆるマイニング報酬)とブロックの中の各取引の送付手数料がもらえるので、送付リクエストが込み合っているときは安い手数料の送付リクエストはマイナーに無視されてブロックに入れてもらえない、ということが起こります。

この問題の解決方法として、ビットコインの場合はブロックサイズを大きくするか、送付リクエストのデータサイズを小さくするか、というので2017年にはマイナー間でもめていましたが、送付リクエストのデータサイズを小さくする(=Segwit)というのが2017年8月に実装されました。が、まだ問題が完全に解決したわけではなく、足許でも送付手数料の高騰や処理されない送付リクエストが溜まっていたことは前述したとおりです。

ということは「処理できる件数がとても少ない」のは「ブロックチェーン」において避けられない問題なのでしょうか?

処理件数を増やすための解決方法①ブロックサイズを大きくする

ブロックチェーンの処理件数の問題を解決するための1つ目の方法として、ビットコインでも提案されていた「ブロックサイズを大きくして、一つのブロックに入る件数を増やそう」というものがあります。
ブロックチェーンは今1ブロック1メガバイトですが、例えば10ギガバイトにすれば1万倍の件数が処理可能になります(1ギガバイト=1,000メガバイト)。しかし10分ごとに10ギガということは1分1ギガバイト、1秒16メガバイトの通信をする必要があります。
Softbank 3Gと4Gの処理速度は以下の通りです。ちなみにbps= bit per second で1バイト=8ビット、1秒16メガバイト=1秒128メガビットが必要になります。世界中の全マイナーがSoftbank 4Gの下り最速に近い速度を維持し続けないと、10分に1回10ギガバイトのブロックを処理し続けることはできません。

画像7

出所:SoftBank

クレジットカードは秒間5.6万件、ビットコインは秒間5件なのでブロックのサイズを1万倍にすると比肩する水準になりますが、1万倍してしまうと通信の限界が来てしまいます。

また、1秒16メガバイトの処理をし続ける、という状態だとストレージの限界も来てしまいます。
現時点のビットコインのブロックチェーン全体のサイズが310GBなので100倍すると31TB、1,000倍すると310TB。。。2009年から11年で蓄積したサイズであることを考えると、ストレージの制約でブロックサイズはせいぜい100倍にしかできないのでは、というのが当社CTO小宮山さんの考えです。
(なお、ブロックの中の件数が増えすぎるとCPUの制約を受けます)

処理件数を増やすための解決方法②ブロック生成時間を短くする。プライベートブロックチェーンにしたら解決?

処理件数の問題を解決するための2つ目の方法として、「10分に1回ブロックに入っている取引を記録しているのを5分に1回にすれば2倍、1分に1回にすれば10倍の件数を処理できるのでは」というものがあります。ブロックが承認されるまでの時間は「レイテンシー」と呼ばれています。
ここでブロックチェーンの技術要素の解説を見返していただくと、、、ビットコインなどのパブリックブロックチェーンでは、コンセンサスアルゴリズムにPoWを採用しています。ここでは「計算競争」に勝ったマイナーが最新のブロックの情報をハッシュ化したものも書き加えて最新のブロックを記録します。ブロックができてから承認されるまでの時間が短すぎると、マイナーによって最新だと認識しているブロックがT番目だったり、T-1番目だったりT-2番目だったりしてしまいブロックチェーンの分岐が起きやすくなってしまいます。ブロックチェーンの分岐が起きると、あるノードが認識している取引が別のノードには認識されていない、という事象が起き、ブロックチェーンの「分散された不特定多数のノードで同じ台帳を共有する」というそもそもの前提が崩れてしまいます。(これでは「お金」として使えませんね)CTO小宮山さんによればブロックチェーンが承認されるまでの時間=レイテンシーとしてパブリックブロックチェーンでは10秒は欲しいのではないかとのこと。そうするとレイテンシーが1/60になることで、ブロックサイズが同じだとすると60倍の処理性能の向上になります。
では、ノードになれる人を限定したらどうなるでしょう。企業間での農作物のトレーサビリティやグループのサプライチェーンマネジメントなどで活用されているブロックチェーンは、承認された人しかノードになれない形(パブリックブロックチェーンに対して「プライベートブロックチェーン」と呼びます)になっています。そして、ものすごくざっくり言ってしまうと、取引は承認されたノードの多数決によってブロックチェーンに記録されます。この場合の「承認されたノードによる多数決」がプライベートブロックチェーンの「コンセンサスアルゴリズム」で、RaftとかTendermintとかTangaloaとかです。
(※ちなみにbitFlyer Blockchainでは「BFK2」というコンセンサスアルゴリズムの特許を持っており当社が開発したプライベートブロックチェーンmiyabiで使われています。この話はどこかで小宮山さんが書いてくれるはず。)
この形の場合、PoWよりはレイテンシーを短くすることはできますが、コンピュータ同士が通信を行うため、短くできても1秒が限界ではないかというのがCTO小宮山さんの考えです。レイテンシーが1秒=10分の1/60になることで、ブロックサイズが同じだとすると600倍の処理性能の向上になります。

実際のユースケースで使われている代表的なプライベートブロックチェーンのTPSを比べた結果がこちらです。

Quorum:数十~数百件
Hyperledger Fabric2.0:数十~数百件
Corda:数十~数百件
miyabi:4,000件

出所:bitFlyer Blockchain、Hyperledger Fabric、情報処理学会、R3 Corda

当社のmiyabiは4,000件を達成していますが、他のプライベートブロックチェーンでは最大1,000件以下となっており、いずれにしてもクレジットカードの性能には及びません。

イーサリアム2.0の挑戦

時間当たり処理件数に限界がある、ブロックチェーンが混みあうと手数料が高騰してしまうという問題についてはイーサリアムのVitalikたちは結構初期から気付いていました。なのでこの問題を解決すべく、「イーサリアム2.0」という計画を立てていました。「イーサリアム2.0」とは、超ざっくり言うと、ブロックチェーンを分割して並列処理することで処理性能を上げる(複数のシャードチェーンに分割してすべてのシャードチェーンはビーコンチェーンと呼ばれるチェーンにつながる)、そのためにはPoWだと分割されたブロックチェーンにおいて51%攻撃のリスクがあがるのでPoS(プルーフオブステーク、計算競争ではなくETHの保有割合に基づきブロックを記録する)に移行する、というものです。これが実現すれば、理論上イーサリアムは(ほぼ)無限の処理能力を手にすると考えられています。
ただこれは大幅な仕様変更(ハードフォーク、以前のブロックチェーンと互換性のない仕様変更)になるため、マイナーたちの合意形成にとても時間がかかっており、もともと2016年くらいには完了しているはずだったプロセスが、2020年11月に最初の一歩であるフェーズ0が始まったところで、イーサリアム2.0への移行が完了するのは来年以降になると言われています。現状ではまだイーサリアムはまだブロックチェーンが混みあうと手数料が高騰する問題を抱えています。

Polkadotはイーサリアムキラーになるか?

という状況下で注目されているのがPolkadotというプロジェクトです。このプロジェクトはもともとイーサリアムの共同創業者でCTOだったGavin Woodさんがリーダーで、イーサリアムの問題点を彼なりに解決する仕組み、と見る人が多いです。仕組みは以下の通りで、メインチェーンである「リレイチェーン」の上に個々のブロックチェーンである「パラチェーン」を接続。ビットコインのブロックチェーンやイーサリアムのブロックチェーンも「リレイチェーン」に接続される(「ブリッジされる」)という構想です。

画像8

出所:Polkadot

また、Polkadotは以下のように言っています。

①データベースの最適化などで、各パラチェーンにおいて5,000TPSは達成可能(miyabiのTPSが4,000で一番よいときで6,000程度なのでこの数字は納得感あります)
②パラチェーンの上限は当初は100とするが200程度まで拡張可能

ということは、Polkadot全体でのTPSは理論上5,000TPS×200=100万TPSということになり、処理性能の問題でクレジットカードなどにひけをとることはない、ということになるのでは、と期待されています。(まだこのプロジェクトは本格稼働前です。)

さらに、Polkadotは仕様変更をフォークなしで行うことができる以下の仕組みを持っています。
・チェーンのロジックをチェーンに「データ」として記述できる
→ポルカドット内のチェーンすべて(パラチェーン、リレイチェーン、ブリッジされたブロックチェーン)に適用
→ブロックチェーン自体がアップグレード性とオンチェーンガバナンスの仕組みを持つことで未来の技術進化や環境変化に合わせフォークなしで改善・進化していくことができる

イーサリアム2.0ではハードフォークに対するマイナーの賛同が得られず手数料高騰、処理性能の問題がなかなか解決できないことから、こういった状況を回避する仕組みも入れているよ、ということのようです。。。ということはわかるのですが、現時点で上記の仕組みは検証されたものではなく、今後真価が問われてくるのだと思っています。
(※ちなみにPolkadotはパラチェーン、ブリッジされたブロックチェーンの相互運用性、インターオペラビリティを主な特色としていますがインターオペラビリティの話は加納さんが書いてくれるはずです。)

最後に(miyabiもすごいです!)

ということで、今回はブロックチェーンのスケーラビリティ問題について書いてみました。最初思っていたより難しく、小宮山さんにたくさん教えていただきました。ブロックチェーンがいろいろなビジネスシーンで使われていけばいくほど、この「処理性能」の問題は注目されていくはずです。
先ほど説明したmiyabiの処理性能4,000TPSというのはシャーディングなしの数字としてはかなりいけていますし、シャーディングを実装することでさらに性能は向上していく予定です。また、イーサリアム2.0でもPolkadotでもブロックチェーンを「階層型」にすることにより処理性能を上げるというコンセプトですが、bitFlyer Blockchainではブロックチェーンを階層型にする特許をすでに取得しています。ブロックチェーンの処理性能を上げるためには、まずはこのやり方だよね、ということかと思います。
miyabiもがんばりますが、Polkadotを筆頭に様々なプロジェクトが出てきているので金光も非エンジニアなりに調査&勉強を続けようと思います!

画像8

※最近界隈ではパブリックブロックチェーンで5万TPSの処理性能を持つと言われているSolanaが注目されています。ブロックチェーンのスケーラビリティのため世界中の技術者が研究&開発を続けているので勉強するネタが尽きることはありません。


この記事が気に入ったらサポートをしてみませんか?