『マスタリング・イーサリアム』の翻訳に参加しました。

Ethereum Shardingの大まかな説明と概念図

暗号通貨

Ethereum Shardingは現在複数のチームが開発中で、Ethresearchでも活発に議論が行われています。Plasmaと並んでEthereumのスケーリングソリューションとして注目を集めるShardingですが、まだ開発の初期段階ということもあり、仕様や用語が度々変更されています。

ある程度定まってから記事にしようと思っていたのですが、このままだと変化が早すぎて、追いつけなくなる可能性を感じたので、現段階の情報をまとめておきます。

Shardingはリリースまでに段階を踏んで仕様が公表されていくと思うので、次の仕様がまとまったら、その都度まとめて別記事で共有していく予定です。

要約

Shardingを大胆に要約すると「処理の分業によるトランザクション処理能力の向上と表現できます。ネットワークに投入される計算力(ハッシュパワー)が多くなればなるほど、セキュリティは向上していきますが、実はハッシュパワーとトランザクション処理能力は無関係です。

Ethereumやビットコインではトラストレスで運用が行われており、他者を信じずに、各ノードが個別にトランザクションの検証を行うことになっています。言い換えれば、ネットワークに参加するコンピュータの数が増えたところで、役割分担を行うわけではないので、各ノードの処理能力の上限がネットワークの上限ということになります。

ノードの役割やEthereumメインチェーンの全体像は以下の記事をご覧下さい。

創設者による「Ethereum in 25 minutes」でワールドコンピュータを理解する
11月1日、Devcon3の初日に、Ethereum創設者のVitalik氏によるEthereumの概説が行われました。その名も「Ethereum in 25 Minutes, Version MMXVII」で、25分でEthereumを簡...

Shardingはトラストレス性を維持した上で、ネットワークにおける処理の分業を達成しようというものです。当然ながらトラストレスを維持しながら、ネットワークを分割し、且つ分割されたネットワーク同士のコミュニケーションを実現し、更にはセキュリティを大幅に犠牲にしない、というのは離れ業ともいえ、様々な課題や懸念点があります。

Shardingは開発中で、今年中の実装は難しいのではないかと思っていますが(MVPは既にあり、今年のリリースが可能と主張するチームもあります)、Plasmaと同様に活発に開発や議論が行われています。また個人的には、Shardingの設計には横方向の分業(空間の分割)と縦方向の分業(役割の分割)があり、さらにEthresearchで提案される仕様を見ていくと、ゲーム理論的な工夫と開発者の苦労が垣間見えるところがあり、とても面白いと思っています(縦方向の分業は結局統合され、なくなる可能性があります)。

本記事では暫定的な情報をShardingを俯瞰することを目標に簡潔にまとめています。

Shardingの全体像

まずはこちらのインフォグラフィックをご覧下さい。Hsiao-Wei WangらによるShardingの概念図で非常に分かりやすいので、Shardingの説明を読む際には、こちらの画像を同時に表示しながらテキストを追っていくのが良いかと思われます。以下の説明も、このインフォグラフィックに沿って行います。元ファイルのサイズが縦長で、途中で切ると意味がわからなくなるので、画像の引用を必要な部分に留めてあります。別ウィンドウやタブレットを使って同時表示して下さい。

※Shardingの仕様は定まっておらず、現在積極的に開発中であり、用語や設計に変更が加えられ続けることは間違いありません。故に、枝葉末節にこだわらずに、大体の設計図を理解することをこの記事では目指します。

またPlasma等の有用な記事を公開しているOsuke氏によるSharding Phase1.0の解説記事もありますので、ご覧下さい。

Sharding Phase 1の具体的な仕組みとセキュリティ課題

Sharding Manager Contract(旧Validator manager Contract)の概要

メインチェーンに位置し、メインチェーンと各Shardを接続する役割を果すのがSMCです。インフォグラフィックの真ん中に図示されています。

Sharding Manager Contractとは?

SMCはメインチェーンに位置するコントラクト。

Sharding Manager Contractの役割は?

Quadratic Sharding(※)をサポートする。
※Quadratic Sharding=O(c) shards * O(c) block size/gas limit of shard chains = O(c^2)

具体的には?

  • Collator(旧Validator=Shardingシステムにおけるブロック生成者のようなもの)の管理。例えば、Collatorのランダムサンプリング(※)を行う。
    ※どのシャードにどのCollatorが選ばれるかはランダムに決定される(厳密にはデポジットをベースにしたセキュリティも考慮されるはず)。
  • 各シャードのCollation header(※後述)の記録の保持
  • Cross-shard informationの記録
    ※Cross-shardの仕様は定まっていないため詳述しません。

Proposer, Collator, Executorの役割

以下は、当初の仕様通り、3つの役割を個別に說明しますが、ProposerとCollatorの分離がゲーム理論的に現実的ではないため、ProposerとCollatorを分離せずに、一つの主体が両方の役割を果すこと仕様が提案されています。

またExecutorはPhase 3で実装される予定です。

ここでは各主体の役割を簡単に説明することに留めます。

ちなみに各主体のインセンティブは以下のようになっています。

Ethereum Sharding General Introduction

Proposer

CollationをCollatorに提案

CollationはShardingにおけるブロックのようなものです。Proposerは、PoWにおいてマイナーがMempoolにあるトランザクションを、トランザクション手数料の高い順に(経済合理性に従って)拾っていき、ブロックに含める予定のトランザクションの束を作るのと同じように、トランザクション手数料の高い順からShard内のトランザクションを拾っていき、Collationを作ります。

Ethereum Sharding General Introduction

上図におけるCollationの下部にCollation Bodyというものがありますが、これがShard内のトランザクションに相当します。

用語が多くて分かりづらいですが、

Shard内のトランザクション→blob
Shard内のブロック→collation
Shard内のブロック生成者→Collator

です。

PoWブロックチェーンの知識がある方には以下のテーブルも有用です。

Ethereum 1.0sharding phase 1
blockchainshard
blockcollation
block timeperiod
gas limitcollation size
transactionblob
transaction rootchunk root
minercollator
PoW samplingcollator shuffling

以下の図が示しているように、blobはchunkにまとめられ、chunkのマークルツリーによってルートが取られ、chunk rootがCollation headerに収められます。

Ethereum_Sharding_Infographic

Collator

Collationの検証とShard-chainの生成

CollatorはProposerから提案されたCollationの検証を行い、Shard内にあるチェーンにつなげていく役割を果たします。

どのCollatorがどのShardに割り当てられるかはランダムに決定され、一定期間頃にCollatorのシャッフルが行われるシステムになっています。

Executor

正統なチェーンにおける状態遷移の実行

※Executorの仕様は定まっていないため詳述しません。

参考リンク

Ethereum Sharding: Overview and Finality – Hsiao-Wei Wang – Medium
Ethereum Sharding Workshop in Taipei – Hsiao-Wei Wang – Medium
Sharding phase 1 spec (RETIRED) – Sharding – Ethereum Research
Sharding FAQ · ethereum/wiki Wiki · GitHub

ビットコイン開発者Petter Toddによる記事も参考になるので、追加資料としてリンクを貼っておきます。

Why Scaling Bitcoin With Sharding Is Very Hard
peter-todd-scalability