(ガオガオ)新規事業立ち上げに特化したコンサル&開発のプロフェッショナルエンジニアが20名以上在籍しています。プログラミングの研修事業も行っている世界5拠点コミュニティベースのスタートアップスタジオです。(ガオガオ)新規事業立ち上げに特化したコンサル&開発のプロフェッショナルエンジニアが20名以上在籍しています。プログラミングの研修事業も行っている世界5拠点コミュニティベースのスタートアップスタジオです。Labでブロックチェーンエンジニアをしているこうりんと申します。使ってみたという方も多いのではないでしょうか?DAppsではウォレットを使用することが前提になっていたりと、既存のアプリケーションと大きく異なることに気がつくかと思います。ユーザがリクエストを送った後にそれが反映されるまでに時間がかかるのは、多くの人が体験していることかと思います。これはブロックチェーンの特徴の一つによるものなのですが、ではなぜ時間がかかるのか?この時間を短縮できないのか?というのが今回の記事のテーマです。このような問題をスケーリング問題と呼びます。今回はスマートコントラクト基盤では一番有名なEthereumブロックチェーンを中心に、スケーラビリティ問題について説明します。Ethereumのスケーラビリティ問題の現在スケーラビリティ問題とは、シンプルに言えば、ブロックチェーンのトランザクション処理スピードに関する問題です。近年、ブロックチェーンが有名になり多くの人が使用するようになったため、より多くのトランザクションが生成されています。ブロックの生成時間やブロックあたりのトランザクション数というものはそこまで変化していません。ブロック生成時間は大体12秒〜14秒と言われています。(ハードフォークのタイミングで急激に変化することがあります。詳しくはディフィカルティ・ボムなどを参照してください)また、1つのブロックに入れることのできるトランザクション数に関しても段階的に増加していますが、そこまで大きな影響を及ぼしていません。15TPS前後で推移しています。カード決済で有名なVisaは平均2000TPS前後と言われています。考えると、この処理スピードというのは広く普及する上で大きな壁になっていることが分かります。https://blockchair.com/ethereum/charts/transactions-per-second)また、この問題はトランザクション手数料にも影響します。ブロックチェーンの混雑度に応じて、必要なトランザクション手数料は増減します。そのため、多くのユーザが一度にトランザクションを送ると、ユーザが支払う手数料は大きくなります。2022年6月2日23時現在、ERC20トークンの送金が$7ほど、Uniswapの取引が$27ほどです。Apeという有名なNFTプロジェクトがセールを行った5月初めにはトランザクションが急増し、ERC20を送金するのに$1150かかるほど急騰してしまいました。https://etherscan.io/gastracker)速度の遅さや手数料の高さはユーザーが利用する上で大きな壁になっています。Ethereumはなぜ遅いのかさて、なぜEthereumは遅いのでしょうか?これは基本的にはコンセンサスメカニズムに基づきます。Work)を採用しています。PoWではブロックチェーンを運営するたくさんのノードが同時並行でブロックの生成をしています。このブロック生成には時間がかかるような仕組みになっており、Ethereumの場合13秒前後になるよう調整されます。(将来的にマシンスペックが向上して生成時間が短縮するようになったとしても、一定の間隔で調整が発生します)ブロックが生成できたら他のノードに送信し、他のノードはブロックを検証して正しい場合それを採用します。ブロックを受け入れたら次のブロックの生成に取り掛かります。(厳密に言うと、他のノードのブロック・チェーンを採用する基準はチェーンの長さや計算量に基づきます。詳しくはGHOSTプロトコルなどをご参照ください)そして、このブロックの生成者には一定の報酬が支払われます。このように、PoWでは多数のノードがブロックチェーンの維持に携わっていますが、同時並行的にトランザクションを処理しているのでは無く、あくまでのシステム全体で一定時間に一つのブロックを生成するようになっています。多数のノードが検証・承認してチェーンに繋がったブロックが正当なものとみなされ、このブロックにトランザクションが入ることで取引が完了したとみなすことができます。ブロックチェーンのトリレンマさて、Ethereumが遅い理由は分かりました、それでは高速化はできないのでしょうか?シンプルなアイデアだと以下が思いつきます。Limitの増加)ブロック生成時間を減らすブロック生成者を予め決定しておくしかしながら、上の3つは上手く機能しないかスケールしません。1はブロックサイズが大きくなるにつれてノードの要求スペックは向上し、マイナーとしての参入難易度が高くなります。(最新の数ブロックが書き換わる)が発生しやすくなります。その結果、かえって非効率になったり、セキュリティに影響を及ぼす可能性があります。3に関しては、Ethereumのようなパブリックブロックチェーンでは不特定多数のノードが参加することを前提としているので、まず、Ethereum全体でどのくらいのノードが参加していることを把握するのが難しい問題があります。不特定多数のノードがブロックチェーン全体の検証をし信頼性を担保しているという側面もあります。以上のように、単純にEthereumがスケールするように高速化すると、問題が出てきてしまいます。Buterin氏はブロックチェーンの複数の性質の関係性を表すブロックチェーンのトリレンマを提唱しました。スケーラビリティのうち2つまでしか高められないことを示しています。どれか一つの性質を犠牲にする必要があります。簡単に説明すると、分散性とは不特定多数のノードでブロックチェーンを維持できるか、安全性とは十分な攻撃耐性があるか、そしてスケーラビリティとは膨大なトランザクションを処理できるかを表しています。Ethereumはスケーラビリティを犠牲にして、不特定多数のノードが参加する状況でシステムの安全性を保つことに重きを置いていると言えます。既存のEthereum向けサイドチェーンやEthereumキラーと呼ばれるブロックチェーンでも、このトリレンマに基づいています。PoSでは、実際のトランザクションをBorというPoSチェーンで処理しています。このPoSチェーンではMATICトークンをステークしているアカウントからバリデータとブロック提案者が一定期間ごとに選出され、提案者が順番にブロックを提案しバリデータが検証することで短いブロック生成時間を達成しています。バリデータやブロック提案者の数は限られているため、分散性が高いとは言えません。BFTを採用したり、いくつかの高速化手法を組み合わせて高いTPSを実現しています。ノードとして参加するには高いマシンスペックが要求されているなど、こちらも分散性が高いとは言えません。現在Ethereumでは安全性と分散性を高めるために、スケーラビリティが犠牲になっていると説明しました。今後のEthereumではスケーラビリティ問題は解決されるのでしょうか?これを説明する上で重要なワードが2つあります。それは、Ethereum2.0とRollupです。Ethereum2.0まず、Ethereum2.0について説明します。Ethereum2.0とはその名の通りEthereumの大規模アップグレードです。これまでにもEthereumは何度かハードフォークを通しアップデートを経験してきましたが、これらはガス代計算などの細かい仕様変更のみでした。Ethereum2.0では既存のものから大きく変化します。Ethereum2.0では大きく分けて、BeaconチェーンとShardチェーンの2種類のチェーンがあります。Beaconチェーンはシステム全体を管理するためのチェーンで、主にチェーンを運営するバリデータを管理します。Stake)を採用しており、バリデータが掛けているお金の額に応じて影響力が決まります。Beaconチェーンはバリデータのステーク額に基づき、各Shardチェーンのバリデータを選出します。この他に、Beaconチェーンにはバリデータに報酬やペナルティを課したりする責務があります。Shardチェーンは64個のチェーンで、Beaconチェーンで選出されたバリデータにより維持されます。このチェーン毎のバリデータは一定期間ごとに、ステーク額に応じてシャッフルして選出されます。ユーザが送信したトランザクションはこのShardチェーンで処理されます。一般に多数のチェーンで構成されるシステムの場合、一つのチェーンを攻撃することでシステム全体に影響を及ぼすことが可能です。バリデータが各チェーンに分散されているため、一つのチェーンを攻撃をするために必要な計算量やステーク額は、1チェーン構成のものと比較すると小規模で済みます。Ethereum2.0のシャーディングの場合は、各チェーンのバリデータの選出はランダムであるため、攻撃をするためにはEthereum2.0全体のステーク額の30%〜40%相当の量をステークしておく必要があります。このため、Ethereum2.0ではセキュリティを維持しつつ、複数のチェーンを同時に実行できるような仕組みになっています。Ethereum2.0へのアップグレードは3段階で行われます。1つ目はBeaconチェーンの開始が2020年12月にありました。Mergeが今年の夏に予定しています。最後にシャードチェーンの開始が2023年に予定されています。2ソリューションです。ユーザが送信したトランザクションをEthereumのチェーン上ではなく、チェーン外で処理をします。(全状態のハッシュ値)をEthereumのチェーン上に保存します。このようにすることで、Ethereumチェーンでトランザクションを実行せずともトランザクションデータとその実行結果をチェーンに保存することが可能となります。Rollupを使用すると、ユーザーが送信したトランザクションはブロックに入らずシーケンサーが即座に処理を行います。Ethereum側はユーザのトランザクションを実行すること無く、またユーザのトランザクションは圧縮して保存されるため、一つのブロックに大量のトランザクションを含めることが可能となります。単一のシーケンサーがトランザクションを処理しているため、もちろんこのシーケンサーが間違った状態遷移をEthereumチェーンに提出しないような仕組みが必要です。RollupとzkRollupの2種類の方法があります。Rollupはシーケンサーが正しく動いていると仮定してEthereumチェーンがシーケンサーの状態遷移を一旦受理します。不正な状態遷移があった場合、シーケンサーとは別のバリデータノードがこれを監視しており、バリデータノードが不正の証明をEthereumチェーンに提出することで、Ethereumチェーン内のコントラクトで再度状態遷移を実行します。この状態遷移の結果とシーケンサーが提出した結果が一致しない場合は、それ以降の状態遷移も無かったことになります。zkRollupはゼロ知識証明を使用してシーケンサーの状態遷移の信頼性を担保します。ゼロ知識証明は、自分が特定の情報を持っていることをその情報を明らかにせずに証明する手法のことを指します。zkRollupではトランザクションとその状態遷移が正しいことをゼロ知識証明を使い証明を作成します。Ethereumチェーンではこの証明を検証することで、オフチェーンの処理が正しく行われたと信頼することができます。zkRollupはEthereumチェーンが状態遷移を受け取った瞬間にそれが正しいことが分かるため、チェーンへの反映は即座に行われます。Rollupの方が先行しています。Rollupを使用することで100倍ぐらいまでのスケーラビリティ性能が得られると言われています。Ethereum2.0+RollupEthereum2.0とRollupについて簡単に説明してきましたが、これらは独立した概念なのでしょうか?いいえ、その真髄は両者を組み合わせることで威力を発揮します。述べられている通り、Ethereumはこれらの2つを組み合わせてスケーラビリティを高める方向に進んでいます。トランザクションの実行をRollupで行い、その結果をEthereum2.0のShardチェーンに保存します。セキュリティなどをEthereum2.0が担保し、実行レイヤーはRollupが担当することになります。両者を組み合わせることで、最終的には100000TPSほどになると言われています。このレイヤー分割により、Ethereumはもともとあった分散性や安全性を維持しつつ、スケーラビリティを高める方向へ進んでいます。まとめこの記事ではEthereumのスケーラビリティ問題とEthereumの今後について説明しました。rollups」を見て、その後いくつか調査し自分なりに流れをシンプルに説明したものです。AmsterdamではEthereumのLayer2に関する色々なトークが行われましたが、Rollupをテーマにしたものが多くEthereum全体でRollupを重視していることを実感しました。それまでは、Rollupは単なるLayer2技術の一つだという認識だったのですが、Ethereum2.0以後も活用されるということで、今後個人的に注視していきたいと思っています。kourinTOPトップページSTUDIOスタートアップスタジオDXスタジオクリエイティブスタジオGATEGAOGAOゲートスタートアップゲート法人向けDXゲートABOUT会社概要お問い合わせブログ採用情報お問い合わせはこちら。