Ethereum fast sync

Ab7495ab54679df6e0877822a384500f?s=47 ころ
July 24, 2018

Ethereum fast sync

blockchain.tokyo #10 LT資料
Ethereum fast sync アルゴリズムの説明

Ab7495ab54679df6e0877822a384500f?s=128

ころ

July 24, 2018
Tweet

Transcript

  1. 5.

    ブロックチェーンの初期同期 5 Block 1 Block 2 Block N-1 Block N

    Block 3 Block 1 Block 2 Block N-1 Block N Block 3 Remote Node New Node
  2. 6.

    ブロックチェーンの初期同期 6 Block 1 Block 2 Block N-1 Block N

    Block 3 Block 1 Block 2 Block N-1 Block N Block 3 ✔ Remote Node New Node
  3. 8.

    Ethereum Block 8 Tx Root Prev Hash Nonce etc. Receipt

    Root State Root Header Body Transaction 1 Transaction N ... ※ Uncleは省略 Transaction 2
  4. 9.

    Merkle Root 9 Transactions Tx Root Transaction Receipts Receipt Root

    World State State Root Body内の トランザクションか ら構築可能 一つ前の状態から トランザクションを 実行することで構築可能
  5. 10.

    素朴な同期 10 Block 1 Block N-127 Block N Block N-128

    S R S R Block 1 R R Remote Node New Node
  6. 11.

    素朴な同期 11 Block 1 Block N-127 Block N Block N-128

    S R S R Block 1 R R Block N-127 Block N Block N-128 Remote Node New Node
  7. 12.

    素朴な同期 12 Block 1 Block N-127 Block N Block N-128

    S R S R Block 1 R R Block N-127 Block N Block N-128 ✔ ✔ ✔ ✔ Remote Node New Node
  8. 13.

    素朴な同期 13 Block 1 Block N-127 Block N Block N-128

    S R S R Block 1 R R Block N-127 Block N Block N-128 R ↻ S Remote Node New Node
  9. 14.

    素朴な同期 14 Remote Node Block 1 Block N-127 Block N

    Block N-128 New Node S R S R Block 1 R R Block N-127 Block N Block N-128 S R S R R R ↻ S S ↻ ↻ ↻
  10. 17.

    fast sync algorithm • 状態の同期とnonce検証の高速化 – pull-req: https://github.com/ethereum/go-ethereum/pull/1889 • gethの初期同期のデフォルトモード

    • eth/63プロトコル を使って同期 – https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol#fast-sy nchronization-pv63 • 以下ではそれ以前からの手法も含めて説明 17
  11. 20.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 20 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 並列なブロックダウンロード
  12. 21.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 21 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 N-M N 並列なブロックダウンロード fetch header N-M fetch header N
  13. 22.

    22 Node A Node B New Node 並列なブロックダウンロード skeleton 1

    1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 N-M N
  14. 23.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 23 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 2 3 N-M N-M+1 N 並列なブロックダウンロード fetch header (1, M) fetch header (N-M, N)
  15. 24.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 24 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 2 3 N-M N-M+1 N 並列なブロックダウンロード
  16. 25.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 25 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 2 3 3 3 N-M N-M N-M+1 N-M+1 N N fetch body 2 fetch body 3 fetch body N-M fetch body N-M+1 fetch body N 並列なブロックダウンロード
  17. 26.

    1 1 2 2 3 3 N-M N-M N-M+1 N-M+1

    N N 26 1 Node A Node B New Node 1 2 2 3 3 N-M N-M N-M+1 N-M+1 N N 1 1 2 3 3 3 N-M N-M N-M+1 N-M+1 N N 並列なブロックダウンロード
  18. 30.

    30 New Node nonce検証の省略 1 Rand [1,K] K K+1 2K

    2K+1 3K Rand [K+1, 2K] Rand [2K+1, 3K] Kブロックの範囲からランダムに1つ
  19. 31.

    31 New Node nonce検証の省略 1 Rand [1,K] K K+1 2K

    2K+1 3K Rand [K+1, 2K] Rand [2K+1, 3K] ✔ ✔ ✔
  20. 35.

    35 トランザクション再生の省略 Remote Node 1 Pivot +1 N Pivot New

    Node S R S R 1 R R Pivot +1 N Pivot R R S fetch tx receipt fetch tx receipt
  21. 37.

    37 トランザクション再生の省略 Remote Node 1 Pivot +1 N Pivot S

    R S R 1 R R Pivot +1 N Pivot R R S sync state trie S ※ 全アカウントの全状態を同期 New Node
  22. 38.
  23. 39.

    39 トランザクション再生の省略 Remote Node 1 Pivot +1 N Pivot New

    Node S R S R 1 R R Pivot +1 N Pivot S R S R R R S ↻ ↻ S
  24. 42.

    42 fast sync の効果 • pull-req (2015 Oct) に示されている値 –

    今の実装だと多少変わるかも – 時間 8分の1, ストレージ 5分の1 くらいの効率化 Dataset: Olympic, 837869 blocks, 10.2M states
  25. 43.

    43 まとめ • ブロックチェーンの初期同期は大変 – フルノードは全部を同期する必要がある – サイズは増える一方 • Ethereum

    (geth) は様々な手法によって 安全性を確保しつつ高速化を実現している 間違いなどあったら @koropicot まで (⁎・‸・⁎)