Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実録 Medalla Testnet Validator / Real Story of Me...

Ara
December 17, 2020

実録 Medalla Testnet Validator / Real Story of Medalla Testnet Validator

2020/12/17 ビットコインとか勉強会#48 <オンライン> にて発表
https://cryptocurrency.connpass.com/event/197033/

Google Slides 版: https://docs.google.com/presentation/d/1lHUnp458aLrYHoXpdfZpNrzy3iNaEHTdL_S5hs4I_eg/edit#slide=id.p1

---

実録 Medalla Testnet Validator
2018.10.29 ビットコインとか勉強会#48

■リンク
12/29 (木) 16:00~18:00 Flow 勉強会
https://flow-japan-community.connpass.com/event/199239

詳細なブロック構造
https://github.com/ethereum/eth2.0-specs/blob/dev/specs/phase0/beacon-chain.md

現行テストネットのLaunchpad
https://pyrmont.launchpad.ethereum.org

Intro to ETH2 & Staking for Beginners:
https://unvetica.com/ethonline

各種クライアントのセットアップガイド
https://github.com/SomerEsat/ethereum-staking-guide

Teku に高速同期オプションが登場、数分で同期完了できるように
https://www.youtube.com/watch?v=Oz3flfj50Ig

Beaconcha.in のモバイルアプリが登場
https://twitter.com/etherchain_org/status/1336949569498853377

初期のペナルティを軽減する変更
https://twitter.com/VitalikButerin/status/1326442642696097794

Prysm で問題が発生し、ネットワークが大混乱
https://medium.com/prysmatic-labs/eth2-medalla-testnet-incident-f7fbc3cc934a
https://lighthouse.sigmaprime.io/update-28.html

Medalla Resuscitator POAP
https://poap.delivery/medalla-resuscitator

Medalla テストネットのデータ分析のコンテスト
https://blog.ethereum.org/2020/11/17/medalla-data-challenge-results

■もっと知りたい人のためのリソース
ConsenSys のドキュメント
https://consensys.net/blog/blockchain-development/the-ethereum-2-0-beacon-chain-explained

「Ethereum 2.0」の仕様と研究動向についてLayerX R&Dチームが解説
https://logmi.jp/tech/articles/323017

Intro to ETH2 & Staking for Beginners
https://unvetica.com/ethonline/

Eth 2 の仕様(Vitalik の注釈付き)
https://github.com/ethereum/annotated-spec

Eth 2 Phase 0 の比較的わかりやすい仕様解説(by Danny Ryan)
https://notes.ethereum.org/jDcuUp3-T8CeFTv0YpAsHw?view

参加証のトークン(POAP)について
https://medium.com/@poap/the-core-value-proposition-of-poap-explained-dc379aca332d

Ara

December 17, 2020
Tweet

More Decks by Ara

Other Decks in Technology

Transcript

  1. 3

  2. 今日話すこと 5 Ethereum 2.0 の Medalla テストネットで バリデータの各種クライアントを 1ヶ月 動かしてみた話

    • Ethereum 2.0 ざっくりおさらい • バリデータを動かすまでの道のり • バリデータになりたいあなたへ
  3. Ethereum 2.0 は段階的にリリースされる 8 Phase 0 Beacon Chain Phase 1

    Beacon Chain + Shard Chain(データ保存のみ) Phase 1.5 現行 Ethereum を 1 つのシャードとしてマージ Phase 2 全シャードで完全なトランザクション機能
  4. Phase 0 Beacon Chain Phase 1 Beacon Chain + Shard

    Chain(データ保存のみ) Phase 1.5 現行 Ethereum を 1 つのシャードとしてマージ Phase 2 全シャードで完全なトランザクション機能 Ethereum 2.0 は段階的にリリースされる 9 2020.12.01 無事にローンチ
  5. 10 Beacon Chain Shard Chain Shard #64 B1 B2 B3

    B4 B5 Eth 1 Original diagram from “What you can do for Ethereum 2.0 a.k.a. sharding: by Hsiao-Wei Wang Eth 2 Ethereum 2.0 略図 Shard #1 …
  6. 11 Beacon Chain Eth 1 Original diagram from “What you

    can do for Ethereum 2.0 a.k.a. sharding: by Hsiao-Wei Wang Eth 2 Phase 0 は Beacon Chain だけ
  7. 12 Beacon Chain Eth 1 Original diagram from “What you

    can do for Ethereum 2.0 a.k.a. sharding: by Hsiao-Wei Wang Phase 0 は Beacon Chain だけ バリデータがブロックを生成する … …
  8. バリデータのお仕事 13 • 12秒ごとに、以下が選ばれる: ◦ 1人の ブロック提案者 ◦ 128 人以上の

    証明者、1人の 集約者 • ブロック提案者 は新しいブロックを提案する • 証明者 はブロックに署名し、集約者 はそれら署名を集約する
  9. ブロックには何が含まれているのか 14 • スロット番号 • ブロック提案者のバリデータ番号 • 親ブロックのハッシュ値 • 疑似乱数の情報(ブロック提案者であることの証明)

    • 集約された証明 • (Graffiti ※任意のバイト列) • (新規デポジット情報) • (Slash されるバリデータの情報) • (自発的に Exit するバリデータの情報)
  10. ブロックには何が含まれているのか 15 • スロット番号 • ブロック提案者のバリデータ番号 • 親ブロックのハッシュ値 • 疑似乱数の情報(ブロック提案者であることの証明)

    • 集約された証明 • (Graffiti ※任意のバイト列) • (新規デポジット情報) • (Slash されるバリデータの情報) • (自発的に Exit するバリデータの情報) Phase 0 では、単にブロックが生成されていくだけ トランザクションを送ることもできない
  11. 16 { slot: <スロット番号> proposer_index: <バリデータ番号> parent_root: <親ブロックのハッシュ値> state_root: <最新ステートのハッシュ値>

    body: { randao_reveal: <疑似乱数情報> eth1_data: { deposit_root: <デポジット情報のハッシュ値>, deposit_count: <デポジットの番号>, block_hash: <ブロックハッシュ値> } graffiti: <任意のバイト列> proposer_slashings: [{ signed_header_1: <署名済みブロックヘッダ情報 1>, signed_header_2: <署名済みブロックヘッダ情報 2> }] // 最大 16 attester_slashings: [{ attestation_1: <証明情報 1>, attestation_2: <attestation 情報 2> }] // 最大 2 attestations: [{ aggregation_bits: [バリデータのビット集合] data: { slot: <スロット番号> index: <Committee番号> beacon_block_root: <ブロックハッシュ値> source: <Checkpoint 情報 (epoch番号, ルートハッシュ値)> target: <Checkpoint 情報 (epoch番号, ルートハッシュ値)> } signature: <署名> }] // 最大 128 deposits: [{ proof: <デポジット情報のマークルパス> data: { pubkey: <バリデータの公開鍵> withdrawal_credentials: <デポジット引き出しに必要なコミットメント(バイト列)> amount: <Gwei> signature: <署名> } }] // 最大16 voluntary_exits: [{ message: { epoch: <エポック番号>, validator_index: <バリデータ番号> }, signature: <署名> }] // 最大16 } } より詳細なブロック構造 https://github.com/ethereum/eth2.0-specs/blob/dev/specs/phase0/beacon-chain.md
  12. • Ethereum 2.0 では、複数のクライアントが開発されている • 複数のクライアントがつながる最初のテストネット • Phase 0 に向けた最終テスト用(のはずだった)

    ↓  • Medalla のあと、追加で Spadina, Zinken なども稼働 • 途中から不安定な状態となり、復旧困難なため Medalla は終了へ (現在は Pyrmont テストネットが稼働中) Medalla テストネット 18
  13. 22

  14. 23

  15. バリデータになるために必要なもの 24 • 32 ETH(Görli Testnet の ETH) • マシン

    ◦ 最近の CPU(www.cpubenchmark.net で 6,667+) ◦ 16 GB RAM(32 GB 推奨) ◦ 1 TB SSD(2 TB 推奨) ◦ Ubuntu 20.04 ◦ ローカルサーバ or クラウドサービス ◦ 安定したインターネット回線 参考:Intro to ETH2 & Staking for Beginners: unvetica.com/ethonline
  16. バリデータになるまでの流れ 25 1. バリデータのキーペア(公開鍵・秘密鍵)をツールで生成 2. クライアントにキーペアをインポートして起動 3. クライアントが同期されるまで待つ 4. キーペア生成時に出力されたデポジット用

    JSON を使って、 Launchpad で 32 ETH をデポジット 5. バリデータプールに追加されるまで待つ → バリデータ稼働へ ※Eth 1のクライアントも必要(Infura を使ってもよい)
  17. クライアントに対する所感(初動1ヶ月) 27 • Lighthouse(Rust 実装 by Sigma Prime)  低スペックでも動く、Discord に人が多い

    • Prysm(Go 実装 by Prysmatic Labs)  安定して動く(がバグがあった)、設定が楽、情報発信が多い • Teku(Java 実装 by PegaSys)  安定して動くが、同期に時間がかかり(今は改善)、メモリを食う • Nimbus(Nim 実装 by Status)  同期が遅すぎる、起動時に毎回重いビルドが必要、  Android でも動くとのことだが実際きつい… • Lodestar(TypeScript 実装 by ChainSafe)  安定して動くようにみえたが、ついに正しく署名することはなかった…
  18. 最近の情報(12月初旬時点) 28 • 各種クライアントのセットアップガイドが充足 https://github.com/SomerEsat/ethereum-staking-guide • Teku に高速同期オプションが登場、数分で同期完了できるように https://www.youtube.com/watch?v=Oz3flfj50Ig •

    Beaconcha.in のモバイルアプリが登場 https://twitter.com/etherchain_org/status/1336949569498853377 • Lodestar もようやく利用可能に(ただしまだメインネットは非推奨)
  19. 私が経験したこと 29 • 基本的に、MacBook Pro だと特に問題なく稼働 (Prysm / Lighthouse /

    Teku / Nimbus / Lodestart) • AWS EC2 で動かしてみた ◦ Amazon Linux だとエラー → Ubuntu は OK(Lighthouse) ◦ 稼働が確認できたインスタンスタイプ ▪ Lighthouse:t2.micro → 途中から動かなくなり t2.small へ ▪ Prysm:t2.medium ▪ Teku:t2.large
  20. 私が経験したこと 30 • GCP Compute Engine で動かしてみた ◦ Debian でも動いた(Teku)

    ◦ Teku, Lodestar は n1-standard-2 で動いた • Nimbus で attest できない → バグがあった:our.status.im/medalla-update • Lodestar で attest できない → バグがあった(稼働中に修正されることはなかった)
  21. 私が経験したこと 31 • Android 9(3 GB RAM, 32 GB SSD)上の

    Ubuntu で Nimbus を動かしてみる → 動いたが、数時間おきに KILL される(メモリ不足?) → 途中からストレージが足りなくなり継続不能
  22. 私が経験したこと 32 • Medalla 無事にローンチ → クライアントが正常に attest していることを確認し就寝 →

    朝起きたらデポジット額がマイナスに…   謎のエラーでクライアントが停止していた。再起動したら直った
  23. Prysm で問題が発生し、ネットワークが大混乱 37 • バリデータの約 70 % が Prysm クライアント

    • Prysm が参照する時刻サーバが間違った情報を返したせいで、 大量のバリデータが不正とみなされてスラッシュ • ブロックのファイナライズが 3〜4 日ほど止まっていた • エクスプローラサイトの情報も更新されず • 詳細:medium.com/prysmatic-labs/eth2-medalla-testnet-incident-f7fbc3cc934a    lighthouse.sigmaprime.io/update-28.html クライアントを稼働し続けているにも関わらず、 どんどんデポジットが減っていく、理不尽きわまりない事態に・・・
  24. 39 • Eth 2 のステーキングサービス rocketpool.net • 小額デポジットでき、ノードを動かすこともできる • ノードを動かすための

    Smart Node というスクリプトが提供されている • AWS t2.medium + Lighthouse で、非常に安定して稼働していた • キャンペーンをやっていて、おそらく、Medalla のネットワークを 混乱させて終了に追い込んだ一番の要因じゃないかと思う
  25. Medalla で 1ヶ月以上ノードを動かしてみて・・・ 43 正直、メインネットでバリデータになろうとは思わなかった 印象に残っていること: • 理不尽に課せられるペナリティ • 突然止まるクライアント

    • 同期に時間がかかりすぐに再開できない • 急に出るアップデート こういう状況のなか、少なくとも2年くらいずっと オンラインで動かし続けなければならないのは、個人ではきつい…
  26. もっと知りたい人のためのリソース 44 • ConsenSys のドキュメント https://consensys.net/blog/blockchain-development/the-ethereum-2-0-beacon-chain-explained • 「Ethereum 2.0」の仕様と研究動向についてLayerX R&Dチームが解説

    https://logmi.jp/tech/articles/323017 • Intro to ETH2 & Staking for Beginners https://unvetica.com/ethonline/ • Eth 2 の仕様(Vitalik の注釈付き) https://github.com/ethereum/annotated-spec • Eth 2 Phase 0 の比較的わかりやすい仕様解説(by Danny Ryan) https://notes.ethereum.org/jDcuUp3-T8CeFTv0YpAsHw?view • 参加証のトークン(POAP)について https://medium.com/@poap/the-core-value-proposition-of-poap-explained-dc379aca332d