Mousse: Eth2アプリローカルテスト用エミュレーター
TL;DR:
未踏でminaminao.iconとnrryuya.iconが作ったやつ
※LayerXの業務外、週末プロジェクトです
Eth2のdata shardingでアプリ開発を助けるもの
現在のEthereumにおけるGanacheを目指したい
前提
そもそもエミュレーターとは
エミュレータ(英: Emulator)とは、コンピューターを含む機械装置の動作・機能を模倣する事 Wikipedia Androidアプリ開発の時にAndroidのエミュレーターとかありますよね
Ganacheは、「Ethereum」と言うシステムの動作・機能を模倣している
なぜエミュレーターがアプリ開発で必要なのか
実物を動かすより早くて楽だから。
毎回テストネットを使っていたら遅くて大変。。。
作ったり壊したりしにくい
後述するが、Mousseだと実際のP2Pクライアントを使うより数万倍はやい
プロダクトとしての話
主な機能
Eth2 Emulator
Eth2のノードとのやりとりを再現するREST API
これを使って、アプリ開発のテストなどを行う(行って欲しい)
https://gyazo.com/4a4f0827c17a6f09495e44e1ff31e8c5
Dashboard
ブロック一覧など可視化したり、エミュレーターを操作できる(スロットを進めるなど)
https://gyazo.com/83d39bc2fcd2e994d49bb359cb2a2b1a
こだわりポイント: 異常系のシミュレーション
パブリックブロックチェーンは異常系のテストが大事
いろいろな異常系シナリオを再現(Ganacheにはない機能!?)
Beacon Blockの生成の失敗
Beacon Blockのファイナリティの遅延
Shard Headerのinclusionの失敗
Shard Headerのconfirmationの遅延
Bidのinclusionの失敗
(上記からランダムに一つ、というのもある)
cipepser.icon これ以外の異常系も考え得ます?また、その中で上記の異常系を選んだ理由などあれば伺いたく。
A. 形式的にモデル化し、変数の取りうる値で状態集合を作る→定理証明。現状はまだ厳密にモデル化していないが、ある程度網羅的。equivocationはまだ。
Eth2特有なところはどこ
Eth2のdata shardingを対象にしている
最初は主に、Eth1と共存して使われる。Eth1にRollupのコントラクトがあり、Eth2にRollupトランザクションを置く。
このとき、Eth1のコントラクトで、以下が必要
Eth2のライトクライアント機能を実装し、Eth2のbeacon blockのファイナリティ検証が必要
ファイナリティ検証したblockを使って、Eth2に置かれたデータを検証するなど
↑この辺りはまだ実装していない。。。。
nrryuya.icon > 要望が多ければ作ります!
難しいポイント: Eth2特有の、SSZと言う方式でシリアライズする必要がある
cipepser.icon SSZ知らなかった...
実装の話
言語・フレームワーク選定
エミュレーター: Rust
REST API: warp
ダッシュボード: JavaScript (React)
ベンチマーク
https://gyazo.com/fc5ed02e0045f96ae2eea8a495fed4ef
process_slots_happy() (正常系)は、1000 slotを300msちょっとで動かしている
実際だと、1 slotが12秒なので、1000 slot = 12,000秒 = 3.33時間
およそ4万倍高速にできる