アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

gethのsyncingについてのソース解析メモ その1

Ethereumのfull/fast/snap syncの違いについてより詳しく調べいたと思い、gethのソースを読み始めた。
が、なかなかにボリュームがあるのと、同期処理についてかなり複雑だったので、頭の整理のために解析中の内容をメモとして残しておく。

full/fast syncのプロセスについて

full/fast syncのプロセスはこの辺りにまとまってるっぽい。
https://github.com/ethereum/go-ethereum/blob/v1.10.2/eth/downloader/downloader.go#L559-L574

snap syncは別のパッケージにまとまってるが、呼び出し元がどこなのかちょっとよくわからない。。。
https://github.com/ethereum/go-ethereum/tree/master/eth/protocols/snap

Block headerのrequest部分

リクエストはこの辺りで行っている。最終的にはp2pのmessageを投げている。
https://github.com/ethereum/go-ethereum/blob/v1.10.2/eth/protocols/eth/peer.go#L443-L460

response受け取り部分

各packetの受け取り部分はここで分岐している。最終的にはdownloader.goのDeliver~~~メソッドで諸々の処理を行なってるみたい。
https://github.com/ethereum/go-ethereum/blob/v1.10.2/eth/handler_eth.go#L62-L105

ちなみに、snap syncの場合のresponse packetの受け取りは下記の部分。snapの場合はそもそもp2p messageが異なるので別で実装されてるっぽい。
https://github.com/ethereum/go-ethereum/blob/v1.10.2/eth/handler_snap.go#L46-L50

その2はこちら
y-nakajo.hatenablog.com