2018.07.03
イサーリアムのシャーディングについて
こんにちは、次世代システム研究室のT.D.Qです。
イーサリアムのスケーラビリティに関して解決するため、いくつかの方法が提案されました。前回の記事でプラズマの仕組みについて書きました。今回は、シャーディングという解決方法について紹介したいと思います。
※イーサリアムにおけるオンチェーンスケーリングソリューションであるシャーディングのロードマップが決められ、最初のフェースにおける仕様がある程度確定されました。今回の記事はSharding Phase 1を中心に説明します。
イサーリアムのシャーディングとは
現在のイーサリアム(non-sharding)は、全てのマイニングノードは同じデータを持ち、同じトランザクションに対してハッシュ値を見つける計算をしていますが、これではイーサリアムネットワークの処理能力は一つのノードの処理能力と同じになってしまいます。
イーサリウム上には32,000ほどのノードが存在しています。これらノードには様々な種類がありますが基本的にはトランザクションの処理を行なっています。また、各々のノードのスペック(処理速度、通信速度など)は大きく異なります。低スペックのノードはそれだけトランザクションの処理・伝搬が遅く、ネットワークにとっては足手まといになってしまいます。なぜならトランザクションはすべてのノードに行き渡り検証される必要があるからです。
イーサリアム財団の研究者、Vlad Zamfir氏が公開したSharding the blockchainによると、イサーリアムのシャーディングは処理すべきトランザクションをいくつかのシャードに分割し、それをいくつかのノードが集まったグループが役割を分担しながらトランザクションを並列的に処理することです。つまり、マイニングノードを各シャードに分けて、それぞれのシャードで異なるトランザクションのハッシュ値計算を並列で走らせることで高スループットを実現します。普段は割り当てられたトランザクションのシャードをグループごとで処理し、定期的にその結果をグループ同士で同期し合うことになります。Vitalik Buterin氏によるとプラズマとシャーディングを合わせて1秒間に100万回の処理能力を得る事が期待されています。
イサーリアムのシャーディングの実現
イーサリアムのシャーディングを実現するにはいくつかの概念が出てきます。下記のテーブルにまとめたのでご覧ください。
Ethereum 1.0 | Sharding phase 1 | 説明 |
---|---|---|
blockchain | shard | シャード |
block | collation | シャード内のブロック |
block time | period | シャード内5ブロックを作成する時間 |
transaction | blob | シャード内のトランザクション |
miner | collator | シャード内のブロック生成する特定の複数のノード |
イサーリアムの状態がシャードに分割
上記の図のように、イサーリアムのネットワーク全体で共有されていたグローバル状態(ルート)から複数のサブ状態(シャードの状態)に分割されます。ユニークアカウント1個が1シャードのみに配属して、そのシャード内のアカウントとしかトランザクションを行いません。
また、それぞれのシャードが独立して特定のトランザクション群を処理しているので、それぞれのシャードの状態は異なってきます。ネットワーク全体のシャードの管理が必要があるので、Sharding Phase 1はメインチェーンにデプロイされているSharding Manager Contract(SMC)によって行われます。
イサーリアムのさまざまなセキュリティ的課題点があげられますが、まず問題となるのが上述のcollatorが不正な検証を行う可能性があることです。このような不正を防ぐためにSMCがシャードごとのcollatorsを定期的にシャッフルします。
シャードの詳細情報
シャードに分割した後、イサーリアムのブロックに下記の2個のルート情報があります。
・グルーバル状態(State root)
・トランザクショングループのルート(Txgroup root)
各シャード内では、「collators」と呼ばれる特定の複数のノードが、そのシャードに関する情報をまとめた「collation」を作成しています。
それぞれのcollationには以下の内容が含まれます。
・Shard ID:そのcollationはどのシャードのものか
・Pre state:トランザクションを処理する前のシャードの状態
・Post state:トランザクションを処理した後のシャードの状態
・Receipt root:トランザクションのレシートログ。シャード間のコミュニケーションに使う
・Sig #xxx:そのcollation内に書かれた情報について、collatorsのうちの2/3が承認しているデジタル署名
・Tx xxx:シャード内に処理したトランザクション
シャード間コミュニケーション
ロードマップではシャード間コミュニケーションはphase1では実装されなく、phase4で主な実装が行われる予定です。シャード間のトランザクションを処理するのが非常に面倒になってしまうのが、一つの理由かもしれません。
下記の図のように、シャード間のコミュニケーションはログ情報であるreceiptによって行われます。実現するため、シャード内のトランザクションを処理するたびに、シャードの状態を変更するとともに、receipt情報も同時に生成します。
生成されたreceipt情報が、ほかのシャードからアクセスできるように、読み込み専用メモリエリアにも保存されます。下記の図のように、シャードNがシャードMのReceipt情報を参照してトランザクションを確認できます。
※ただし、Phase 4の仕様は定まっていないので、今後、変更される可能性があります。
終わりに
イーサリアムにおけるシャーディングという主要なスケーラビリティ解決方策をまとめました。シャーディングをまとめると取引の検証作業を分割する事で1ノードあたりの検証作業を削減し、Sharding Manager Contract(SMC)が処理能力を最適化してトランザクション処理速度を向上させることですね。そもそもブロックチェーン技術にはトリレンマが存在します。それは、分散化、セキュリティ、スケーラビリティの3つのうち、2つしかサポートできないということです。実際、現在のイーサリアムでは分散化とセキュリティは達成していますが、スケーラビリティはサポートできていないので、スケーラビリティ解決の技術が待たれます。
参考リンク
What are Ethereum Nodes And Sharding?
Sharding the blockchain
Ethereum Sharding Inforgraphic
Ethereum Sharding General Introduction
次世代システム研究室では、アプリケーション開発や設計を行うアーキテクト、またはブロックチェーンのエンジニアを募集しています。次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD