mirror of https://github.com/status-im/nim-eth.git
Update discv5.md
This commit is contained in:
parent
e25500c9f0
commit
ab969f72c1
|
@ -40,26 +40,32 @@ d = newProtocol(privKey, ddb, ip, tcpPort, udpPort,
|
||||||
d.open() # Start listening and add bootstrap nodes to the routing table.
|
d.open() # Start listening and add bootstrap nodes to the routing table.
|
||||||
```
|
```
|
||||||
|
|
||||||
Now there are two ways to run the protocol.
|
Next there are two ways to run the protocol.
|
||||||
|
|
||||||
One can call `d.start()` and two loops will be started:
|
One can call `d.start()` and two loops will be started:
|
||||||
1. Random lookup loop
|
1. Refresh loop
|
||||||
2. Revalidation loop
|
2. Revalidation loop
|
||||||
|
|
||||||
The first loop will at specific interval do a lookup with a random `NodeId`.
|
The first loop will at specific interval do a query with a random `NodeId` if no
|
||||||
This lookup will add discovered nodes to the routing table.
|
manual queries were done for more than that interval period.
|
||||||
|
This query will add discovered nodes to the routing table.
|
||||||
The second loop will at random ranged interval send a ping to the least recently
|
The second loop will at random ranged interval send a ping to the least recently
|
||||||
seen node in a random bucket. This is to keep the routing table cleared of
|
seen node in a random bucket. This is to keep the routing table cleared of
|
||||||
unreachable/dead nodes.
|
unreachable/dead nodes.
|
||||||
|
|
||||||
Or, one can decide to do this manually within its application by using the
|
Now within the application, manual queries or lookups can be done, for which
|
||||||
available calls:
|
the discovered nodes can be used. Nodes discovered during this process will be
|
||||||
- `lookupRandom` and `lookup` for discovering more peers.
|
attempted to be added to the routing table. One can use the `query`, `queryRandom`
|
||||||
- `revalidateNode` or directly `ping` for revalidating nodes.
|
or `lookup` calls for this. `randomNodes` can also be used to find nodes,
|
||||||
|
but this will only look into the current routing table and not actively
|
||||||
|
search for nodes on the network.
|
||||||
|
|
||||||
In the future, the random lookup loop might be altered to only run in case no
|
|
||||||
lookup was done in the last x minutes. This way `d.start()` could still be run
|
|
||||||
while maintaining control over the lookups.
|
Or, one can decide not to run `d.start()` and do this manually within its
|
||||||
|
application by using the available calls:
|
||||||
|
- `query`, `queryRandom` or `lookup` for discovering more peers.
|
||||||
|
- `revalidateNode` or directly `ping` for revalidating nodes.
|
||||||
|
|
||||||
Of course, in either scenario, lookups can still be done for actually finding a
|
Of course, in either scenario, lookups can still be done for actually finding a
|
||||||
specific node. There is a `resolve` call that can help with this, it will first
|
specific node. There is a `resolve` call that can help with this, it will first
|
||||||
|
|
Loading…
Reference in New Issue