blockchainjapan’s blog

旬のブロックチェーンを記事を厳選して提供!

Aptos Review 3 — TPSと並列実行


Aptos Review 3 — TPSと並列実行

Lee Hsuan

編集・翻訳:Takeshi@Think Globally, Act Locally

ブロックチェーンの性能に関する最も基本的な評価指標(KPI)の1つとしてスループットがあります。このスループットは、ブロックチェーンが一定時間内にどれだけのトランザクションを処理できるかを示すもので、スループットの単位は、1秒あたりのトランザクション数(TPS)で表されます。

初期のブロックチェーンは、スループットが低いことで知られています。例えば、ビットコインは7TPS、イーサリアムは20TPSを処理できますが、これは、平均で約3000TPS、ピーク時に最大24000TPSを処理するVISAなどのWeb2決済ネットワークには到底及ぶものではありません。

トランザクションスピード:Cryptocurrencies Stack Up To Visa or PayPal

ブロックチェーンスループットを向上させるためには、ブロックチェーンプロトコルの様々な側面で再設計が必要であり、特にコンセンサスアルゴリズムが重要となります。

コンセンサスアルゴリズムの改善

ブロックチェーンプロトコルの中核をなすのは、分散型台帳技術です。プロトコルに参加するノードは、通信を行い、どのような記録をどのような順序で残すかを決定する必要があります。ビットコインのような初期のブロックチェーンは、Proof-of-Work(PoW)で動作するのが主流でした。

PoWの仕組みでは、全ての参加ノードは、ブロックを生成するために、そのブロックのターゲットハッシュを満たす数列(nonce)の推測に取り組みます。この数字を最初に見つけたノードが検証者となり、トークン報酬を得ることができる仕組みです。この方式では、トランザクションの検証、実行、記録に使われる計算力はごく一部で、計算力の大半はハッシュのパズルゲームにおけるnonceの推測に費やされてしまいます。

緑:txの検証、実行、記録 — 赤:nonceの推測

現在多くのブロックチェーンProof-of-Stake(PoS)に切り替えています。このPoSコンセンサスアルゴリズムでは、参加ノードがブロックを記録する資格は、ステークしたトークン量によって決まります。より多くのネイティブトークンをプロトコルにステークするほど、ブロック生成の検証者として選択される可能性が高くなります。ノードはnonceを推測する必要がなくなり、トランザクションの検証、実行、記録にすべての計算能力を割くことができるようになります。

緑:txの検証、実行、記録- 黄色 ノード間の通信コスト- 灰色:アイドル状態

しかし、PoWからPoSへのパラダイムシフトだけではなく、ブロックチェーントランザクションの実行において他の課題に直面する可能性があります。トランザクションの処理では、全ての参加ノードがブロック内のトランザクションを記録された順序で生成・検証しなければなりません。

コンセンサス・アルゴリズムが効率的になるにつれて、ブロックチェーンのTPSはそのスループットによって上限が設定されることになります。

イーサリアムがスマートコントラクトを導入して以来、ほとんどのブロックチェーントランザクションは、より多くの計算とデータの読み書きを伴うことで大幅に増加しました。これに対応するために、新世代のブロックチェーンは、スループットを最大化するための代替手段を探しています。

役割分担

トランザクションを高速化する方法として、より優れたCPUとより多くのRAMを使用することが挙げられます。一方、ネットワーク上で生成されたブロックは複数のノードで検証される必要があるため、ハードウェア要件が増え、システムがより中央集権的になってしまうという弊害が生まれます。

Dapper Labsが構築したFlowは、ノードに異なる役割を分散させる斬新なブロックチェーン設計を開発しました。一部のトランザクション決定論的で負荷の高い計算を必要とし、このタスクは特別なハードウェア機器を保有する少数のノードグループによって行われます。その他の非決定論的な計算を必要としないグループは、平均的なハードウェア機器を持つノードによって形成されます。

Flow:コンセンサスとコンピュートを分離する

重要なタスクを特別なハードウェアに分散させることで、ブロックチェーン全体のパフォーマンスを3~10倍向上させることができます。また、並列計算を行えば、ブロックチェーンは10~1000倍の性能向上を期待できるのです。

シャーディング

並列計算を実現する方法として「状態のシャーディング」があります。シャーディングは、状態をN個の部分に分割し、それぞれが独立して動作しながら、シャード間通信に対してオープンな状態を維持します。各シャードは単独でトランザクションを実行できるため、N個のシャードがあれば、システムの総スループットはおよそN倍になる計算です。

一方で、シャーディングにはデメリットもあります。まず、シャード間の通信に時間とコストがかかることが挙げられます。これは、後続のトランザクションのために、情報がメインのビーコンチェーンを経由して別のシャードチェーンに渡されなければならないからです。

また、コーディングのために別の複雑なレイヤーを追加することになるため、開発者は、シャードチェーンの設計を念頭に置いてdAppsを構築する必要があります。

Eth2.0におけるクロスシャード通信

並列実行

並列計算を実現するもう一つの方法は、並列実行です。これは、独立したトランザクションを特定し、同時に実行することで機能する仕組みです。2つのトランザクションは、同じデータから読み取ったり、同じデータに書き込んだりしない場合、別個のものとなります。ブロックチェーンがどのトランザクションを最初に実行しても、結果は同じになります。異なるCPUコアやGPUを使って、安全かつ並列的に取引を実行できるのです。

リソースモデルは、並列実行をさらに現実的なものに変えます。Solana、Flow、Aptos、Suiは、データをコントラクトアカウント下の変数として保存するのではなく、ユーザーのアカウントまたはオブジェクト下の別のストレージにデータを保存します。これによって、データアクセスにおける誤作動の可能性が低くなり、並列実行がより効果的に機能します。

これらのブロックチェーンは全てリソースモデルをベースにしていますが、その方法は若干異なります。SolanaとSuiはトランザクションの実行において互いに似ていますが、データはSolanaではアカウントとして、Suiではオブジェクトとして保存されます。dAppsは関数呼び出しでどのアカウントやオブジェクトとやりとりするかを指定する必要があるため、VMは分析を実行してどのトランザクション独立しているかを確認することができます。

一方、Aptosは斬新なアプローチをとっています。それは、Block-STMと呼ばれるSoftware Transactional Memory(STM)の変種を利用するものです。Block-STMでは、各ブロックのトランザクションはあらかじめ設定された順序に従い、実行中にプロセッサースレッド間で分割されます。ブロックチェーンは、良好なパフォーマンスを実現するために、ノード間の依存関係を想定せず、全てのトランザクションを実行し、トランザクションによって変更されたメモリ位置の記録を保持します。全てのトランザクションの結果が検証された後、あるトランザクションが先行するトランザクションによって変更されたメモリ位置にアクセスしていることが判明した場合、そのトランザクションは無効化されることになります。無効化されたトランザクションは次に再実行され、全てのトランザクションが実行されるまで、このプロセスが繰り返される仕組みです。

Aptosのアプローチは、SolanaやSuiと比較してトランザクションでアクセスするデータを指定する必要がないため、より良い開発者体験の提供につながります。Aptosによると、Block-STMとその他のメカニズムによってノード間の通信が促進され、ネットワークが160K TPSという驚異的な数値を達成できるということです。以上のことから、この分野内で最も期待されているブロックチェーンの1つとなっているのです。

参照リンク:

  1. Block-STM: How we execute over 160k TPS on Aptos blockchain
  2. The Case for Parallel Processing Chains
  3. Flow: Separating Consensus and Compute
  4. Exploring Cross-Shard Communication in Eth2.0