コンテンツへスキップ
0%

Ethereumシャーディング:ブロックチェーンシャーディング入門

Alchemy team headshot

執筆者 Alchemy

2023年7月10日 公開読了時間 4 分

ブロックチェーンのシャーディングとは

Ethereumのシャーディングは、メインネットを直接スケールさせるのではなく、レイヤー2のスケーリングをサポートするdankshardingに置き換えられました。

注記:以下の記事は、Ethereumのメインネットをシャーディングするという、現在は放棄された計画について解説したものです。一部のデータは古くなっている可能性があります。Ethereumのスケーリングロードマップに関する最新情報については、上記リンク先のdanksharding記事を参照してください。

ブロックチェーンのスケーラビリティという問題は、長年にわたって開発者コミュニティで議論されてきました。Ethereumのようなパブリックブロックチェーンネットワークでは、複数のノードがトランザクションを検証する必要があるため、スケーラビリティに限界があります。

例えば、Ethereumが処理できるトランザクション数は毎秒10〜13件程度です。これは、毎秒最大24,000件を処理できるVISAのような中央集権型システムと比べると、かなり見劣りします。

ブロックチェーンと、その上で動作する分散型アプリケーションが大衆に普及するためには、人口規模でのスケーラビリティが必要です。

レイヤー2ブロックチェーンに加えて、シャーディングはEthereumがより多くのユーザーをサポートできるようスケールさせるための解決策として提案されています。シャーディングの考え方は、メインのブロックチェーンを複数のセグメントに分割し、各ノードがトランザクションの一部のみを検証すればよいようにするというものです。

ノードが並列でトランザクションを検証することで、ネットワークのスループットが向上し、アプリは増加し続けるユーザーのニーズに応じてスケールできるようになります。

Payment System / Cryptocurrency
Transactions per Second

Visa

24,000

Ripple

1,500

PayPal

193

Bitcoin Cash

60

Litecoin

56

Dash

48

Ethereum

20

Bitcoin

7

データベースのシャーディングとは

データベースのシャーディングは、中央集権型のデータベース管理でよく使われる手法で、大規模なデータベースを複数の小さな塊(「シャード」)に分割し、複数のマシンに分散配置することで効率性とアプリケーションのスケーラビリティを向上させるプロセスです。

ソフトウェアの利用者数や処理件数が増えるにつれ、そのデータベースに保存されるデータ量も増加します。データベースへの負荷が過大になると、アプリのパフォーマンスが低下し、ユーザー体験を損ないます。そのため、データベースの負荷を軽減し、読み込み時間を改善するためにシャーディングが必要になります。

データベースシャーディングの例

ある都市の住民10万人分の個人情報が入ったデータベースがあるとします。

特定の個人の情報を検索するには、約10万件のトランザクションを計算する必要があり、コストも時間もかかる作業になります。

では、この大規模なデータベースを複数の小さなデータベースに分割したらどうなるでしょうか。

例えば、姓が特定の文字で始まる住民をグループ化し、それぞれ専用のサーバーに配置すれば、情報検索に必要な計算リソースは少なくなり、処理にかかる時間も短縮され、データベースの管理も容易になります。

データベースシャーディングの別の例を、次の図で示します。

Product
Price
Price Range

WIDGET

$118

$100+

GIZMO

$88

$50-$99.99

TRINKET

$37

$0-$49.99

THINGAMAJIG

$18

$0-$49.99

DOODAD

$60

$50-$99.99

TCHOTCHKE

$999

$100+

シャードとは

「シャード」とは「全体の一部」を意味します。データベース管理において、シャードとは、大規模なデータベースの一部を別サーバーでホストしたものです。各シャードにはデータの一部が含まれていますが、それらは全体として1つの論理的なデータセットを構成します。

先ほどの例で言えば、姓が「A」で始まる住民用の「シャード1」、姓が「B」で始まる住民用の「シャード2」、というように分けることができます。

これらの論理的なシャードをすべて結合すれば、その都市の全住民の記録からなる1つのデータセットが得られます。

ブロックチェーンネットワークにおけるシャーディング

ブロックチェーンネットワークのシャーディングは、中央集権型データベースの場合と同じプロセスをたどります。ブロックチェーンネットワークを「シャーディング」して複数の異なるセグメントに分割し、各シャードがブロックチェーンデータの一部を保存し、それぞれ固有のトランザクション群を処理するようにします。

シャーディングにより、ブロックチェーンネットワークはネットワークレイテンシとスケーラビリティを改善できます。

ブロックチェーンネットワークにおけるシャーディングは何を解決しようとしているのか

すべてのノードがトランザクションの妥当性についてコンセンサス(合意)を得る必要があるため、ブロックチェーンネットワークが同時に処理できるトランザクション数はごくわずかに限られます。

通常、各ノードはブロックチェーンの全履歴を保存し、すべてのトランザクションを処理します。これが、EthereumやBitcoinのようなブロックチェーンネットワークを「分散型」たらしめている要素です。

すべてのフルノードがネットワークの完全な履歴のコピーを保有していることで、悪意のある行為者がネットワークを乗っ取り、トランザクションを覆したり書き換えたりすることが難しくなります。

ただし、ブロックチェーンの分散性とセキュリティを確保することは、スケーラビリティを犠牲にすることにもなります。

シャーディングされたブロックチェーンでは、ノードがブロックチェーンの全履歴をダウンロードしたり、ネットワークを通過するすべてのトランザクションを検証したりする必要がなくなるため、ネットワークの効率が向上し、増大するユーザー需要をサポートするスケーリングが可能になります。

Ethereumシャーディング図
出典:Genesis Block

シャードチェーンとは

ブロックチェーンネットワークの文脈において、シャードチェーンはデータの一部を保持し、トランザクション処理責任の一部を担うことになります。

シャードチェーンは、独立して動作する複数のミニブロックチェーンの集合のようなものです。セキュリティを保つため、各シャードチェーンはValidator Manager Contract(VMC)を通じて、一定間隔でトランザクションの記録をメインチェーン(Beacon Chain)に提出します。

各シャードチェーンは固有のトランザクション履歴と、新規トランザクションを検証するノード群を持つため、複数のシャードチェーンを同時に稼働させることで、並列処理によってネットワークのレイテンシとスループットを向上させることができます。

シャードチェーンがEthereum Beacon Chainにトランザクション記録を送信する仕組みの図
シャードチェーン

Ethereumにおけるシャーディングとは

Ethereumは、Ethereum 1.0の機能改善を目的とした一連のアップグレードであるEthereumのPoSアップグレードの後に、スケーリングソリューションとしてシャーディングを採用する計画でした。

なぜシャーディングが必要なのか

Ethereumにシャーディングが必要となる主な理由は2つあります。ユーザー数の指数関数的な増加をサポートする能力と、規模が拡大しても分散性を維持する必要性です。

1. 増加し続けるユーザー数のサポート

Ethereumの現在の構造では、利用の指数関数的な増加に対応できません。

現在、すべてのEthereumノードは、スマートコントラクトのコードやアカウント残高を含むEthereum Virtual Machine(EVM)の完全な状態を保存しています。

さらに、トランザクションは直線的に実行され、ネットワーク全体による確認を必要とします。

トランザクションを直線的に処理し、ノードに大量のデータ管理を要求することが、ネットワークの速度低下を招いています。

2. 規模拡大時の分散性の維持

ノードにブロックチェーンの完全なコピーを保持させることは、中央集権化の問題も生じさせます。すでにEthereumの台帳は10テラバイト以上のストレージ容量を占めており、これは一般的なコンピュータが保有できる容量の10倍にあたります。

Ethereumのブロックチェーンが増大し続けるにつれ、Ethereumノードの運用が困難になり、ネットワークのセキュリティを担うノードがごく少数に限られてしまう可能性があります。これは、Ethereumが解決しようとしていた中央集権化と単一障害点の問題を再び持ち込むことになり、その価値を損なうことになります。

シャーディングは両方の問題を解決できる

シャーディングでは、複数のノードが同時に異なるトランザクションを検証できるため、スケーラビリティが向上します。また、トランザクションデータをより小さな塊に分割することで、フルノードの運用が容易になり、中央集権化のリスクが低下します。

Ethereumシャーディングの用語

シャーディングの仕組みを説明する前に、いくつかの重要な用語を定義しておきます。

State(状態)

Stateとは、ある時点におけるシステムに関する情報を指します。Ethereumにおいて、stateとは特定の時点でのネットワークの状態、すなわちコントラクトコード、アカウント、アドレス残高などの記述です。新しいトランザクションが発生するたびに、Ethereumのstateは変化します。

Merkleツリー

MerkleツリーまたはMerkleルートは、大量の情報をハッシュを介して保存する暗号技術です。Merkleツリー/ルートは、あるデータがより大きな構造の一部であるかどうかをノードが迅速に検証できるようにするため、Ethereumのセキュリティにとって不可欠です。

Collation(コレーション)

コレーションとは、シャードチェーン上で行われる一群のトランザクションのことで、Proof-of-Work(PoW)におけるブロックに相当します。コレーションはメインチェーンに提出され、互いに連結されてブロックチェーンを形成します。

Collation header(コレーションヘッダー)

コレーションヘッダーは、PoWコンセンサスにおけるブロックヘッダーに相当するものです。コレーションヘッダーには、コレーション内の情報に関する以下のようなメタデータが含まれます。

  • コレーションが属する単一のシャード
  • 親コレーションのルートハッシュ
  • コレーション内の全トランザクションのMerkleルート
  • pre-state root(処理前状態のルート)およびpost-state root(処理後状態のルート)
  • notary(公証人)の署名
Property
Value
Signature 1
Signature 2

Shard ID:

43

<sig #1284>

<sig #2543>

Pre state:

a138b3ff

<sig #7821>

<sig #6118>

Post state:

835680cc

<sig #9053>

<sig #4337>

Receipt root:

fa3819d4

<sig #1662>

<sig #4785>

Tx a142

Tx a558

Tx eca6

Tx a35f

Tx e25a

Tx 34ac

Tx 2308

Tx 6987

Tx f260

Tx 9f14

Tx ec30

Tx 5fc3

Notaries(公証人)

Notaryとは、提案されたコレーションに対して投票を行うために、あるシャードチェーンにランダムに割り当てられるバリデーターのことです。この投票は「attestation(アテステーション)」と呼ばれ、コレーションの妥当性を証明します。各コレーションがコンセンサスチェーンに追加される前には、少なくとも3分の2のcollatorによる署名が必要です。

Proposers(提案者)

Proposerとは、コレーションを作成し検証のために提案するために選ばれたcollator(またはバリデーター)です。ProposerはPoWブロックチェーンにおけるマイナーと同様の役割を担います。

Committees(委員会)

Committeeとは、シャードブロックの妥当性を証明するバリデーターまたはnotaryの集合です。これらの委員会は一定間隔でランダムにシャッフルされるため、バリデーターは自分がどの委員会に所属することになるかを予測できません。

Ethereumのシャーディングはどのように機能するのか

ロードマップの度重なる遅延を受けて、Ethereumコミュニティはシャーディング計画から方向転換し、レイヤー2を中心としたロードマップへと舵を切りました。これにより、コアデベロッパーは「The Merge」として知られるコンセンサスアップグレードを実現し、ネットワークのコンセンサスをProof-of-Stakeへと変更することができました。

Ethereumのシャーディングアップグレードは、Ethereumのブロックチェーンを64個のシャードチェーンに分割する計画でした。各シャードチェーンは独立したstateを持ち、各ノードはアカウント残高やスマートコントラクトコードの一部のみを保存し、全トランザクションのうち一部のみを処理することになります。

EthereumのPoSシャーディングは実際にはどのように機能する予定だったか

Ethereumに10,000人のバリデーターと100個のシャードチェーンがあると想定します。

疑似ランダムなプロトコルにより、Validator Manager Contract(VMC)にETHをデポジットした対象バリデーターが、シャード1〜100に割り当てられます。

シャード1では、あるバリデーター(proposer)が選ばれ、新しいトランザクションをまとめてコレーションを作成します。

他のバリデーター(notary)は、そのコレーションをダウンロードし、トランザクションの妥当性を検証します。

notaryの3分の2がそのコレーションを承認(attest)すると、VMCを通じてメインチェーンに提出されます。

ここで重要なのは、コレーション全体がBeacon Chainに追加されるわけではないという点です。すべてのシャードのコレーションを検証することは、困難でかつ時間の無駄になります。

その代わりに、メインチェーン上のバリデーターノードは、各コレーションのattestation(署名)を確認するだけで、その妥当性を判断します。

Ethereum PoSシャーディングの図:バリデータがメインチェーンに送信されるシャードコレーションを検証する
Ethereum PoSシャーディングの仕組み

コレーションヘッダーのおかげで、誰でも各シャードの活動を検証できます。

コレーションヘッダーは「クロスリンク」として機能し、異なるシャードにおけるstateとトランザクションの説明を提供します。このため、クロスシャード通信によって、すべてのシャードに参加することなくEthereumネットワーク全体を俯瞰的に把握することが可能になります。

シャーディングの潜在的な欠点

Ethereumのシャーディングは多くの利点をもたらすはずでしたが、新たな問題も生じさせます。

  • 各シャードを運用するノード数が少なくなるため、51%攻撃のような悪意ある行為が実行しやすくなる。
  • コードがより複雑になるため、スマートコントラクトのセキュリティ脆弱性のリスクが高まる。
  • 委員会のメンバーが結託し、メインチェーンに悪意あるトランザクションを提出する可能性がある。
シャーディングによるスマートコントラクトのセキュリティ脆弱性
シャーディングによるスマートコントラクトのセキュリティ脆弱性

Ethereumシャーディング:タイムラインと段階的ロールアウト

シャーディングをめぐる議論は、少なくとも2013年からEthereumコミュニティ内で続けられてきましたが、開発者たちはその実装を先送りにしてきました。それには理由があります。シャーディングは非常に複雑であり、新たなリスクをもたらすため、問題点を洗い出すには入念なテストが必要だからです。

Ethereum.orgによれば、シャーディングは「The Merge」が完了した後にEthereumに導入される予定です。念のため補足すると、The MergeとはPoWのEthereumメインネットワーク(メインネット)がBeacon Chain(PoS)と統合するイベントを指します。

Beacon Chainは、CasperのProof-of-Stakeシステムの実装であり、機能するシャーディングシステムを構築するために必要なランダム性を生成します。このチェーンは2020年12月1日に稼働を開始しました。

次のセクションでは、Ethereumにおけるシャーディング実装の概要を簡単に説明します。

【放棄済み】Ethereumシャーディング:タイムラインと段階的ロールアウト

シャーディングをめぐる議論は2013年からEthereumコミュニティ内で続けられてきましたが、Ethereumの開発者はその実装を先送りにしてきました。これは、シャーディングが非常に複雑で新たなリスクをもたらすため、成功裏に導入するには入念なテストが必要だったためです。

以下は、Ethereumのシャーディングのタイムラインの概要です。

ETH 2.0のシャーディングのタイムラインとは

Ethereum.orgによれば、シャーディングは「The Merge」、すなわちPoWのEthereumメインネットワーク(メインネット)がBeacon Chainと統合するイベントが完了した後に導入される予定です。

シャーディングフェーズ1

このフェーズは、Ethereumの計画されたアップグレードのタイムラインによれば、2023年頃に開始される見込みでした。ただし、シャーディングのタイムラインについては具体的な日程はまだ示されていません。

Ethereumシャーディングの第1フェーズの概要は次の通りです。

  • Beacon Chain上でホストされるValidator Manager Contract(VMC)が、シャーディングプロセスの調整を担う
  • ETH2のバリデーター候補は、対象バリデータープールに加わる前に、32 ETHをスマートコントラクトにロックする必要がある
  • VMCは一定間隔でバリデーターをシャードに割り当て、トランザクションのコレーションを検証・処理し、コンセンサスチェーンに反映させる
  • シャードは、Ethereumネットワークのデータ処理能力を高める「データ保管庫」としてのみ機能する

シャーディングフェーズ2

ETH PoSシャーディングアップグレードの第2フェーズについては、開発者間でいくつかの点が議論されており、まだ定義が固まっていません。ただし、実際には次のようなものになると予想されます。

  • シャードは単なるデータ層からコード実行層へと移行し、各シャードは独立した「state」(すなわち、固有のスマートコントラクト、アカウント残高、アドレスの集合)を持つ
  • 各シャードは、フルなスマートコントラクトおよびdAppサポートを備えたEthereum Mainnetのように機能する
  • クロスシャード通信により、異なるシャードチェーン上のユーザー同士が価値をやり取りできる
  • 異なるシャードチェーン上で動作するアプリ同士が、クロスシャード通信を使って「対話」・連携できるようになり、Ethereumのスケーラビリティ機能が向上する

Ethereumシャーディング:まとめ

複数のシャードチェーンが同時に稼働することで、ノードはトランザクション処理能力を高め、オンチェーンでより大量のデータを処理できるようになります。

先ほどの例を続けると、100個のシャードチェーンがそれぞれ毎秒100件のトランザクションを処理する場合、Ethereum 2.0は毎秒10,000件のトランザクション(TPS)を達成できることになります。

ベースレイヤーチェーンに公開されるシャードからの情報は、コレーションヘッダー(妥当性の暗号学的証明)のみであるため、バリデーターノードがトランザクションを確認し、コンセンサスレイヤーチェーンにコミットすることが容易になります。

その結果、トランザクションのファイナリティが高速化し、ネットワークのレイテンシも向上します。

見積もりにはばらつきがあるものの、シャーディングの導入によって、Ethereumは毎秒数十万件のトランザクションを処理できるようスケールすると見込まれています。

TPSレートが向上することで、Ethereumは利用の急増や数十億人のユーザーに対応するために必要なスケーラビリティをアプリに提供できるようになります。

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。