Slide 1

Slide 1 text

実録 Medalla Testnet Validator 荒川 貴将 (Avocado) 2020.12.17 ビットコインとか勉強会#48

Slide 2

Slide 2 text

自己紹介 2 • 荒川 貴将(Avocado) • • • エンジニア 開発 開発コミュニティリード

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

12/29 (木) 16:00~18:00 Flow の勉強会を開催します 4 https://flow-japan-community.connpass.com/event/199239

Slide 5

Slide 5 text

今日話すこと 5 Ethereum 2.0 の Medalla テストネットで バリデータの各種クライアントを 1ヶ月 動かしてみた話 • Ethereum 2.0 ざっくりおさらい • バリデータを動かすまでの道のり • バリデータになりたいあなたへ

Slide 6

Slide 6 text

Ethereum 2.0 ざっくりおさらい

Slide 7

Slide 7 text

Ethereum 2.0 概要 7 • 現行の Ethereum とは別チェーン • 目的:スケーラビリティ、セキュリティ の向上 • 主な変更点: PoW → PoS 、シャーディング

Slide 8

Slide 8 text

Ethereum 2.0 は段階的にリリースされる 8 Phase 0 Beacon Chain Phase 1 Beacon Chain + Shard Chain(データ保存のみ) Phase 1.5 現行 Ethereum を 1 つのシャードとしてマージ Phase 2 全シャードで完全なトランザクション機能

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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 …

Slide 11

Slide 11 text

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 だけ

Slide 12

Slide 12 text

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 だけ バリデータがブロックを生成する … …

Slide 13

Slide 13 text

バリデータのお仕事 13 • 12秒ごとに、以下が選ばれる: ○ 1人の ブロック提案者 ○ 128 人以上の 証明者、1人の 集約者 • ブロック提案者 は新しいブロックを提案する • 証明者 はブロックに署名し、集約者 はそれら署名を集約する

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

ブロックには何が含まれているのか 15 • スロット番号 • ブロック提案者のバリデータ番号 • 親ブロックのハッシュ値 • 疑似乱数の情報(ブロック提案者であることの証明) • 集約された証明 • (Graffiti ※任意のバイト列) • (新規デポジット情報) • (Slash されるバリデータの情報) • (自発的に Exit するバリデータの情報) Phase 0 では、単にブロックが生成されていくだけ トランザクションを送ることもできない

Slide 16

Slide 16 text

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: }] // 最大 2 attestations: [{ aggregation_bits: [バリデータのビット集合] data: { slot: <スロット番号> index: beacon_block_root: <ブロックハッシュ値> source: target: } signature: <署名> }] // 最大 128 deposits: [{ proof: <デポジット情報のマークルパス> data: { pubkey: <バリデータの公開鍵> withdrawal_credentials: <デポジット引き出しに必要なコミットメント(バイト列)> amount: signature: <署名> } }] // 最大16 voluntary_exits: [{ message: { epoch: <エポック番号>, validator_index: <バリデータ番号> }, signature: <署名> }] // 最大16 } } より詳細なブロック構造 https://github.com/ethereum/eth2.0-specs/blob/dev/specs/phase0/beacon-chain.md

Slide 17

Slide 17 text

Medalla テストネット 17 • Ethereum 2.0 では、複数のクライアントが開発されている • 複数のクライアントがつながる最初のテストネット • Phase 0 に向けた最終テスト用(のはずだった)

Slide 18

Slide 18 text

• Ethereum 2.0 では、複数のクライアントが開発されている • 複数のクライアントがつながる最初のテストネット • Phase 0 に向けた最終テスト用(のはずだった) ↓  • Medalla のあと、追加で Spadina, Zinken なども稼働 • 途中から不安定な状態となり、復旧困難なため Medalla は終了へ (現在は Pyrmont テストネットが稼働中) Medalla テストネット 18

Slide 19

Slide 19 text

バリデータを動かすまでの道のり

Slide 20

Slide 20 text

「バリデータに参加すると記念の NFT がもらえるらしい」 20 ※既に終了しています

Slide 21

Slide 21 text

バリデータになるには? 21 Launchpad にアクセスして、手順に従うのが一番よい medalla.launchpad.ethereum.org ※サイト閉鎖済 現行テストネット: pyrmont.launchpad.ethereum.org

Slide 22

Slide 22 text

22

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

バリデータになるために必要なもの 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

Slide 25

Slide 25 text

バリデータになるまでの流れ 25 1. バリデータのキーペア(公開鍵・秘密鍵)をツールで生成 2. クライアントにキーペアをインポートして起動 3. クライアントが同期されるまで待つ 4. キーペア生成時に出力されたデポジット用 JSON を使って、 Launchpad で 32 ETH をデポジット 5. バリデータプールに追加されるまで待つ → バリデータ稼働へ ※Eth 1のクライアントも必要(Infura を使ってもよい)

Slide 26

Slide 26 text

クライアントは複数ある 26

Slide 27

Slide 27 text

クライアントに対する所感(初動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)  安定して動くようにみえたが、ついに正しく署名することはなかった…

Slide 28

Slide 28 text

最近の情報(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 もようやく利用可能に(ただしまだメインネットは非推奨)

Slide 29

Slide 29 text

私が経験したこと 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

Slide 30

Slide 30 text

私が経験したこと 30 • GCP Compute Engine で動かしてみた ○ Debian でも動いた(Teku) ○ Teku, Lodestar は n1-standard-2 で動いた • Nimbus で attest できない → バグがあった:our.status.im/medalla-update • Lodestar で attest できない → バグがあった(稼働中に修正されることはなかった)

Slide 31

Slide 31 text

私が経験したこと 31 • Android 9(3 GB RAM, 32 GB SSD)上の Ubuntu で Nimbus を動かしてみる → 動いたが、数時間おきに KILL される(メモリ不足?) → 途中からストレージが足りなくなり継続不能

Slide 32

Slide 32 text

私が経験したこと 32 • Medalla 無事にローンチ → クライアントが正常に attest していることを確認し就寝 → 朝起きたらデポジット額がマイナスに…   謎のエラーでクライアントが停止していた。再起動したら直った

Slide 33

Slide 33 text

初期に受けたペナルティがなかなか回復できない 33 • ペナルティ量と報酬量は、バリデータの総数によって決まる → バリデータがどんどん増えると、回復が難しくなる

Slide 34

Slide 34 text

※後日、初期のペナルティを軽減する変更が加えられた 34 https://twitter.com/VitalikButerin/status/1326442642696097794

Slide 35

Slide 35 text

私が経験したこと 35 • 性能が良いマシンで普通に動かしていても、一定の頻度で miss する

Slide 36

Slide 36 text

Graffiti に好きな文字を刻める(ブロック提案できれば) 36

Slide 37

Slide 37 text

Prysm で問題が発生し、ネットワークが大混乱 37 • バリデータの約 70 % が Prysm クライアント • Prysm が参照する時刻サーバが間違った情報を返したせいで、 大量のバリデータが不正とみなされてスラッシュ • ブロックのファイナライズが 3〜4 日ほど止まっていた • エクスプローラサイトの情報も更新されず • 詳細:medium.com/prysmatic-labs/eth2-medalla-testnet-incident-f7fbc3cc934a    lighthouse.sigmaprime.io/update-28.html クライアントを稼働し続けているにも関わらず、 どんどんデポジットが減っていく、理不尽きわまりない事態に・・・

Slide 38

Slide 38 text

こんな状況のなか稼働してたバリデータに贈られた NFT 38 poap.delivery/medalla-resuscitator

Slide 39

Slide 39 text

39 • Eth 2 のステーキングサービス rocketpool.net • 小額デポジットでき、ノードを動かすこともできる • ノードを動かすための Smart Node というスクリプトが提供されている • AWS t2.medium + Lighthouse で、非常に安定して稼働していた • キャンペーンをやっていて、おそらく、Medalla のネットワークを 混乱させて終了に追い込んだ一番の要因じゃないかと思う

Slide 40

Slide 40 text

Medalla Data Challenge 40 • Medalla テストネットのデータ分析のコンテストが開催された blog.ethereum.org/2020/11/17/medalla-data-challenge-results 比較的安定なのは Teku と Lighthouse ?

Slide 41

Slide 41 text

バリデータをやめようと思い、Slash されてみた 41 • 同じバリデータのキーで2つのクライアントを動かすと、 数分〜1時間程度で slash される (かなりの ETH を没取され、バリデータからも退場)

Slide 42

Slide 42 text

バリデータになりたいあなたへ

Slide 43

Slide 43 text

Medalla で 1ヶ月以上ノードを動かしてみて・・・ 43 正直、メインネットでバリデータになろうとは思わなかった 印象に残っていること: • 理不尽に課せられるペナリティ • 突然止まるクライアント • 同期に時間がかかりすぐに再開できない • 急に出るアップデート こういう状況のなか、少なくとも2年くらいずっと オンラインで動かし続けなければならないのは、個人ではきつい…

Slide 44

Slide 44 text

もっと知りたい人のためのリソース 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