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
250
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
FORS
azuchi
0
4
クラスターmempool
azuchi
0
30
W-OTS+
azuchi
0
32
Shorのアルゴリズム
azuchi
0
55
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
41
Fiat-Shamir変換と注意点
azuchi
0
220
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
54
BIP-374 離散対数の等価性証明
azuchi
0
71
BIP-353 DNS Payment Instructions
azuchi
0
86
Other Decks in Technology
See All in Technology
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
250
Bedrock AgentCore RuntimeでAuth0 Changelog調査AIをアップグレードした話
t5u8a5a
1
170
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
7k
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
2k
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
250
Android の公式 Skill / Android skills
yanzm
0
150
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
270
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
230
Claude Codeとのおしゃべりでセマンティックモデルの定義からダッシュボード作成まで完成させる
nic_sugiyama
0
120
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
Featured
See All Featured
How to make the Groovebox
asonas
2
2.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
310
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
350
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Music & Morning Musume
bryan
47
7.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.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が発生した場合のみ。