Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ethereumのチェーン同期法 Full / Fast / Snap
Search
shigeyuki azuchi
April 13, 2021
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ethereumのチェーン同期法 Full / Fast / Snap
GBECの解説動画の資料です。
https://goblockchain.network/2021/04/geth_sync_mode/
shigeyuki azuchi
April 13, 2021
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
Hyper Tree
azuchi
0
6
FORS
azuchi
0
20
クラスターmempool
azuchi
0
38
W-OTS+
azuchi
0
43
Shorのアルゴリズム
azuchi
0
65
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
51
Fiat-Shamir変換と注意点
azuchi
0
240
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
62
BIP-374 離散対数の等価性証明
azuchi
0
81
Other Decks in Technology
See All in Technology
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
240
Kiro WebとCloud Sessions
nagisa53
2
100
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
12
4.8k
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
1
870
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
460
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
130
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
170
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
200
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
120
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
310
VLMで2.3万枚のPyCon JP写真を検索!
terapyon
1
220
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
240
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Code Reviewing Like a Champion
maltzj
528
40k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Believing is Seeing
oripsolob
1
200
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Six Lessons from altMBA
skipperchong
29
4.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
New Earth Scene 8
popppiees
3
2.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
810
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Transcript
Ethereumのチェーン同期方法 Full / Fast / Snap
1 ブロックチェーンの同期 • Bitcoinの場合 チェーンの同期=UTXOセットの同期 • Ethereumの場合 チェーンの同期=ステートツリーの同期 Node
Node Node Node Node Local chain Local chain Local chain Local chain Local chain ネットワークに参加したばかりのノードは、 接続したピアからブロックをダウンロードし、 ローカルのブロックチェーンのコピーを構築する。 他のノードが持つ全ブロックのコピーが終わると ブロックチェーンの同期が完了する。
2 Ethereumのステート • ステートツリー 各アカウントのステートで構成されるツリー ◦ ストレージツリー 各アカウントのストレージツリー •
トランザクションツリー ブロック内のトランザクションで構成されるツリー • レシートツリー ブロック内のトランザクションレシートで構成されるツリー ↑の解説については、GBEC動画「Coparing Bitcoin and Ethereum」参照↓ https://goblockchain.network/2020/02/comparing-bitcoin-and-ethereum/ 同期のボトルネックになるのはここ
3 Merkle Patricia Trie EthereumでKey-Value形式でデータを格納し、その暗号学的なコミットメントを 提供するhex-aryツリーで、データの挿入・削除が効率的に行える
詳しいデータ構造や仕組みはGBEC動画「RLPとMerkle Patoricia Tree」参照↓ https://goblockchain.network/2020/01/rlp-merkle-patrical-tree/ Root Hash 0 1 2 ... e f 値 Hash 0 1 2 ... e f 値 Hash 0 1 2 ... e f 値 各中間ノードは最大16個の 子ノードのハッシュ値を持つ Hash 5e3(ニブル) 値 ・・・ Hash f(ニブル) 値 Hash 4c21(ニブル) 値 あるキーの値は、ルートノードから キーのデータを辿った先の リーフノードに存在。 キー「1e…f」の値
4 Full sync 最も単純なブロックチェーンの同期方法
ブロック内のトランザクションをすべて実行し、ステートツリーを更新 • 一番トラストレスにステートツリーを構築できる • ジェネシスブロックから最新ブロックまですべてのトランザクションを実行するのはヘビー ◦ 現状、性能の良いマシンで初期同期に1週間から10日 ◦ CPUリソースとディスクIOに負荷 New Block Transactions New Root EVM
5 Fast sync Geth v1.6.0から導入された高速同期モードで、ある時点のツリーを直接ダウンロードする ピボットブロックを選択 ・・ ・・
・・ ・・ IBD Node Peer GetNodeData NodeData ピボットブロックの ステートルートハッシュをトリガーに ツリーのノードデータを要求 NodeDataで対象のノードデータを送信 ルートノードから、下に すべてのノード情報をダウンロードし ステートツリーを復元 ステートツリー復元後はFull syncと同様、 トランザクションを実行してステートツリーを更新
6 Fast syncのメリットとボトルネック • Fast syncのメリット ◦ ジェネシス〜全Txを実行する必要がなくなり、同期速度が向上(約11時間) • Fast
syncのボトルネック ◦ ステートツリーの成長 ・・ ・・ ・・ 現在、mainnetのステートツリーには、約 6億7500万個の ノードが存在し、そのダウンロードがボトルネックに • 最低でも175万回の通信のラウンドトリップが発生。 → ネットワークのRTTの合計が約 150分 • ピアがGetNodeData要求に対応する際の ディスクアクセスが約2700回弱。 →構造上ランダムアクセスになり、 10ピアと並行実行しても約 108分のRead時間 • GetNodeDataによるハッシュのアップロードが約21GB、 NodeDataによ るダウンロードが2倍ちょっと。 →アップロードに56分、ダウンロードに63分 Fast syncではネットワークの帯域幅、レイテンシー、ディスクIOがボトルネックに
7 Snap sync Geth v1.10.0から利用可能になったスナップショットを利用した同期方法 SNAP protocol: https://github.com/ethereum/devp2p/blob/master/caps/snap.md
Peer ・・ ・・ ・・ Snapshot IBD Node チェーンのある時点のViewであるSnapshotを作成 GetAccountRanges AccountRange GetStorageRanges StorageRange GetByteCodes ByteCodes 取得したステートデータから ツリーを再構築 大量のツリーの中間ノードを ダウンロードせずに済み、 Fast syncのボトルネックを解消
8 Snap syncのトレードオフ • Snap syncに同期時間が短縮
• Snap syncのオーバーヘッド ◦ スナップショットの初期作成に1日〜1週間かかる (要:スナップショットを持つピアへの接続) ◦ 現状20〜25GBの追加のディスクスペースが必要 ◦ 巨大なReorgが発生するとスナップショットを再作成する必要がある ▪ Reorgに対応するためスナップショットは永続化レイヤーと インメモリの差分レイヤーで構成される。 再作成は、永続化レイヤーに影響を与えるReorgが発生した場合のみ。