bb2c2adbb6
The disconnect message could either be a plain integer, or a list with one integer element. We were encoding it as a plain integer, but decoding as a list. Change this to be able to decode any format. |
||
---|---|---|
.. | ||
database | ||
observer | ||
reports | ||
utils | ||
main.go | ||
README.md |
Observer - P2P network crawler
Observer crawls the Ethereum network and collects information about the nodes.
Build
make observer
Run
observer --datadir ... --nat extip:<IP> --port <PORT>
Where IP
is your public IP, and PORT
has to be open for incoming UDP traffic.
See observer --help
for available options.
Report
To get the report about the currently known network state run:
observer report --datadir ...
Description
Observer uses discv4 protocol to discover new nodes. Starting from a list of preconfigured "bootnodes" it uses FindNode to obtain their "neighbor" nodes, and then recursively crawls neighbors of neighbors and so on. Each found node is re-crawled again a few times. If the node fails to be pinged after maximum attempts, it is considered "dead", but still re-crawled less often.
A separate "diplomacy" process is doing "handshakes" to obtain information about the discovered nodes. It tries to get RLPx Hello and Eth Status from each node. The handshake repeats a few times according to the configured delays.