Eth2 Core Teams Online Workshop: Sharding Design編
TL;DR:
Eth2コアチームにおいて、主にリサーチサイドの進捗を、開発チーム含めた全体に共有するWorkshopが開催された
例によって、資料や動画が公開されているので、勉強になる
主なトピックは、「(新たな)sharding design」と「Eth1とEth2のマージ」
今回は、このうちのSharding Designについて、Workshopの資料を参照しながら、大雑把に概要を解説します
Sharding design
Workshop資料
あまり知られていないですが、実はEth2のシャーディングの設計は、この数ヶ月(beacon chainのリリース以降)で大きく変わってます
まず、最初に導入されるshardingは"data sharding"と言われ、単にデータを乗っけられるだけです。
スマートコントラクトはないです。
FAQ: 何に使うの?→ Rollupのデータ置き場に使います https://gyazo.com/603839f18955311150e5838719ff6731
シャードブロックはデータ乗っけるだけなので、シャードごとにハッシュチェーンで順番づけする必要はないです
Beacon chainに参照された順に、全体の順番があるだけです
なので、「シャードチェーン」みたいな概念はないです
Data shardingは、見方を変えれば、セキュリティを落とさないよう色々な工夫のされた、big blockみたいなものでもあります
セキュリティを落とさない工夫というのは、シャーディングでは各シャードにvalidatorが分割して割り当てられる (committee) ので、普通のブロックチェーン(全部のvalidatorが一つのブロックチェーンをみる)に比べて、何も工夫しなければ、シャードの数だけセキュリティが落ちてしまうので、それをどうにかしようということです
基本的に、data availabilityをまもるのが肝です
要は、ブロックのデータが隠されずにちゃんとみんなの手元に届くことです
これさえ担保されていれば、ブロックのフォーマットが間違ってたりしても、間違っていることをみんな検証できるので、問題は起きないです
Data availabilityのための仕組みの一つ目は、attestation + committee shufflingです
各シャードに割り当てられたvalidatorは、そのシャードのブロックが問題なければ署名 (attestation) して、一定以上署名が集まればよしとする、というものです
攻撃者が特定のシャードに集まらないよう、committeeは定期的にランダムでシャッフルされます
https://gyazo.com/7bacaf30bce4dc438a1c50d1c1276fbd
Data availabilityのための仕組みの一つ目は、erasure coding + random samplingです
雑に言えば、erasure codingによって、ブロックを、元データの二倍のサイズに拡張して、そのうち半分のサイズが集まれば(どの箇所をとっても)元データが復元できるようになります
cipepser.icon 誤り訂正符号みたいな感じですかね?
https://gyazo.com/14b07ae3447217a4bf3c41731167942c
シャードブロックは分割(下図のchunk)され、前述のcommitee (下図のhorizonal subnet) とは別に、chunkごとに割り振られたvalidator (下図のvertical subnet) が、data availabilityをチェック(要するに、ダウンロードしてみる)します
https://gyazo.com/ac06e8c08288cc4e7eceb759388d7379
ちなみに、Eth2 data sharingでは、Polynomial commitmentという暗号プリミティブが導入されます
ここまで述べた、シャードブロックに乗せるデータについて、通常のブロックチェーンにおけるMerkle treeの代わりみたいな役割を担います
Merkle treeと違って、前述のerasure codingが正しく行われていることを保証できる、というのがポイントです
詳細は割愛しますが、今回のWorkshopでも取り上げられていました。Dankradの資料をご覧ください!
Polynomial commitmentは、他にもstateless clientなど色々なアプリケーションがあって、期待の暗号プリミティブです!
https://gyazo.com/4353b60c5cd5ced14183f36ae793167c
おしまいです。