Kim De Mey
ea3bb0836d
Update discv5 implementation explainer comment ( #504 )
...
And some line char limit adjustments.
2022-04-22 16:46:47 +02:00
Ștefan Talpalaru
5a78e2fe23
disc: updateExternalIp() ( #495 )
...
* disc: updateExternalIp()
New public proc that can be used to inform the discovery subsystem about
a changed external IP (as reported by UPnP/NAT-PMP in some other module).
2022-03-30 12:52:45 +02:00
Zahary Karadjov
f947827c70
Debug logs providing info for the initial discoveryv5 configuration
2022-02-18 17:42:37 +02:00
Kim De Mey
05ef9a8e00
More --styleCheck fixes for discoveryv5 and eth/common ( #473 )
2022-02-03 15:51:08 +01:00
Kim De Mey
41edd4a3f2
Add DiscoveryConfig to tune routing table ip limits and bitPerHops ( #471 )
2022-02-02 15:29:45 +01:00
KonradStaniec
9a7b1afe9b
Add custom talkreq implementation ( #464 )
...
* Add custom talkreq implementation to utp over discv5
2022-01-24 11:58:35 +01:00
Kim De Mey
42e257796f
Add discoveryv5 session metrics ( #454 )
2021-12-21 15:09:46 +01:00
Kim De Mey
8b7d41f596
Don't use exceptions for enr get call ( #453 )
...
The ENR code used to be solely exception based, and these
exceptions where a left-over of that. They are useless as later
calls use Result anyhow.
Additionally, they cause quite the performance loss because they
are used in the "common path" for the toTypedRecord call, e.g.
when reading the fields of ip6, tcp6 and udp6.
2021-12-21 15:09:32 +01:00
Kim De Mey
2c236f6495
Style fixes according to --styleCheck:usages ( #452 )
...
Currently only setting `--styleCheck:hint` as there are some
dependency fixes required and the compiler seems to trip over the
findnode MessageKind, findnode Message field and the findNode
proc. Also over protocol.Protocol usage.
2021-12-20 13:14:50 +01:00
Etan Kissling
5655bd035c
Merge pull request #450 from etan-status/reject-whoareyou-len
...
reject WHOAREYOU packets with non-empty message
2021-12-14 16:22:25 +01:00
Etan Kissling
45387ad4d2
reject WHOAREYOU packets with non-empty message
...
This changes the `discv5` parser to reject malformed WHOAREYOU packets
that have a non-0 message length. The extra data used to be ignored.
The `message` part of WHOAREYOU packets is always empty.
See https://github.com/ethereum/devp2p/blob/master/discv5/discv5-wire.md
2021-12-11 15:55:14 +01:00
Etan Kissling
fb7ea69eb4
Merge pull request #449 from etan-status/encryptgcm-type
...
more specific type check in `encryptGCM`
2021-12-11 14:50:35 +01:00
Etan Kissling
172dad7968
more specific type check in `encryptGCM`
...
Narrowed the type of `encryptGCM`'s `key` parameter from
`openarray[byte]` to `AesKey`, same as already used for `decryptGCM`.
2021-12-11 12:41:18 +01:00
Kim De Mey
ae0920d40d
Remove hashData usage on objects ( #441 )
...
* Remove hashData usage on objects
* Add hash func for NodeId to avoid using the one of stint
2021-12-06 15:24:07 +01:00
Kim De Mey
6e21b32f0d
Allow a node to self resolve ( #439 )
2021-12-02 11:10:26 +01:00
Kim De Mey
ae0574fe61
Adjust logging when node is not reachable but enrAutoUpdate is on ( #436 )
...
Separate the logging when the node is not reachable and
enrAutoUpdate is on or off to avoid confusion whether or not the
node might still become reachable.
2021-11-29 22:13:08 +01:00
Kim De Mey
84f755d792
Revert the useless async change for queryRandom ( #432 )
2021-11-22 23:14:37 +01:00
Kim De Mey
086162183c
Make queryRandom async and add exports ( #431 )
...
queryRandom was currently only async for the `enrField` version.
However the basic queryRandom is also exported and thus gets
changed so it can be properly used as async proc.
Also added exports for the modules of which objects are used in
the discovery public API.
2021-11-22 19:45:38 +01:00
Kim De Mey
e606d8c79e
Export discovery routing table and its buckets nodes ( #430 )
2021-11-22 18:53:52 +01:00
Kim De Mey
22757db83b
Fix logDistance for BE arch and remove toBytes for NodeId ( #427 )
...
toBytes for NodeId wasn't selected by compiler byt if it does
get selected, it will fail on the test cases due to the
countdown that is done in logDistance.
Set to toBytesBE properly now and do countup, that should make
it correct also for BE architecture.
Removed toBytes to avoid confusion and avoid this one being
selected ever. The only place toBytes for NodeId was used is in
sessions.nim makeKey func and there also the stint one
(thus native endianness) was selected in Nim 1.2.x.
Native endianness is fine there as it is only an internal
representation.
2021-11-17 22:55:19 +01:00
Kim De Mey
9a1bb5e125
Make ENR $ call print the IP address prettier ( #409 )
2021-10-19 14:13:09 +02:00
Kim De Mey
f101c83626
Enr rlp lists ( #408 )
...
* Don't fail ENR decoding when value is an RLP list
* Store RLP raw list in the ENR field pair instead
* Add ENR kList FieldKind so lists can be treated differently
Treated differently now when printing out the ENR, mentioning
that it is a raw RLP list
2021-10-19 09:26:14 +02:00
Kim De Mey
5125a438db
Make the custom distances call somewhat more accessible ( #404 )
...
And make the naming more consistent
2021-10-07 16:03:12 +02:00
Kim De Mey
1babe38226
Allow for tcp/udp ports to always be configured ( #402 )
...
* Allow for tcp/udp ports to always be configured
- Allow for an ENR to be build with tcp and udp ports also when
no IP address is provided
- In the address set-up always provide best efforttcp and udp ports
also when configuration of external ip (and/or ports) fails.
2021-09-29 18:50:23 +02:00
Zahary Karadjov
5327565f95
Add accessor for the discv5 listening address (Protocol.bindAddress)
2021-09-29 01:43:00 +03:00
KonradStaniec
a95b205cf7
Modify nodes verification ( #398 )
...
* Modify nodes verification
* Move nodes verification to separate module
By moving verification to separate module it can be re-used
in different contexts not only in discoveryv5.
2021-09-13 14:20:26 +02:00
KonradStaniec
e219547d64
Fix lookupDistances function and make it public ( #399 )
2021-09-10 17:26:22 +02:00
Kim De Mey
bea1f1c6a1
Clean-up routing table object constructions ( #395 )
2021-09-07 11:56:16 +02:00
KonradStaniec
c078f85e48
Expose id and address of talkreq sender ( #393 )
2021-09-07 10:49:18 +02:00
KonradStaniec
bfadcfbfaf
Make Routing table distance function configurable ( #392 )
2021-09-02 14:00:36 +02:00
Kim De Mey
9bc4fa366a
Let talkreq directly return the seq[byte] for easier API ( #384 )
2021-07-30 16:04:14 +02:00
Kim De Mey
dd02d1be23
Remove unused lastUpdated from buckets ( #382 )
2021-07-29 21:58:10 +02:00
Kim De Mey
2557fd35c6
Use aesKeySize const for aes key instead if ivSize (same values) ( #375 )
2021-07-16 14:55:52 +02:00
Kim De Mey
79911ed5d8
Log distance to uint16 and add public neighbours calls ( #371 )
...
* Use uint16 instead of uint32 for discv5 log distance
* Make neighboursAtDistances and neighbours calls available
2021-07-13 10:05:46 +02:00
kdeme
e2e30247bf
Add implementation of Portal wire protocol
2021-06-09 14:57:30 +02:00
Kim De Mey
d18ebaa570
Slightly improved logging traces for error on message responses ( #364 )
2021-06-09 14:55:00 +02:00
Kim De Mey
8abe6b7144
Add support for discv5 talk protocols ( #357 )
2021-05-20 09:49:46 +02:00
kdeme
00a45a7b91
Remove inline pragmas
2021-05-11 09:59:58 +02:00
kdeme
e10ef19f81
Move push raises to top and add/update license info where needed
2021-04-28 16:20:05 +02:00
Kim De Mey
762415319c
Add build_dcli target and add it to CI ( #344 )
...
* Add build_dcli target and add it to CI
* Fix local imports for dcli
* And use local imports for all other files too
* Use local imports in tests and rlpx protocols
2021-04-06 13:33:24 +02:00
Kim De Mey
c5dace27ca
Use chronos http server for dcli metrics and remove insecure compile flag ( #343 )
...
And add cfg file to default have runtime log filtering on
2021-04-02 17:29:38 +02:00
Kim De Mey
ae4177851f
Remove no longer needed try/except ( #339 )
2021-03-26 17:49:03 +01:00
Jacek Sieka
698b3bea88
Exception tracking ( #334 )
...
* Exception tracking
https://github.com/status-im/nim-chronos/pull/166
* Remove redundant raises annotation
Co-authored-by: kdeme <kim.demey@gmail.com>
2021-03-25 18:12:11 +01:00
Jacek Sieka
16802c0e52
Fix minor exception effect issues ( #335 )
...
Makes code compatible with
https://github.com/status-im/nim-chronos/pull/166 without requiring it.
2021-03-23 07:47:55 +01:00
Kim De Mey
be5e088b21
Move parsing of nat cli option out of setupAddress ( #331 )
...
* Move parsing of nat cli option out of setupAddress
* Change some proc to func
2021-03-05 21:23:54 +01:00
Kim De Mey
0700ec770f
Improve network address discovery / NAT setup ( #323 )
...
* Add search for best route and refactor setupNat to setupAddress
* Update setupAddress and make enr ports in discovery optional
* Add specific error log when no route is found
* Use bindIP if it is public
* Adjust some log levels
2021-03-02 17:13:29 +01:00
Kim De Mey
a339944bcf
Some discv5 cleanup / refactor ( #326 )
...
* Use Address in HandshakeKey
* Refactor + comments + dcli use queryRandom
* Rename types.nim to messages.nim
2021-02-02 22:47:21 +01:00
kdeme
4e58eb48ce
Add comments on enrAutoUpdate and add metric
2021-02-01 20:30:55 +02:00
kdeme
bfbad64d83
Add update of ENR on newly discovered address
2021-02-01 20:30:55 +02:00
kdeme
689eef2c11
Move IpAddress into the pong message
2021-02-01 20:30:55 +02:00
kdeme
d33d27c2ee
Small improvements and cleanup
2021-02-01 20:30:55 +02:00
kdeme
e43ee6ef9c
Add ip address voting through pong responses
2021-02-01 20:30:55 +02:00
kdeme
181bbadcbc
Add more message related metrics
2021-01-13 21:44:17 +01:00
kdeme
aa7442c9ff
dcli: actually use the provided listen address
2021-01-11 15:01:02 +01:00
kdeme
9cedbc0cc8
Move code into seedTable and populateTable proc
2021-01-07 10:20:40 +01:00
kdeme
ac58a1f35c
Only do discovery queries to refresh the table
2021-01-07 10:20:40 +01:00
kdeme
12ec608efd
Put a limit on the nodes returned on a findnode request
2020-12-17 17:06:42 +01:00
kdeme
21423fca42
Use of discv5.1 findnode request with multiple distances
2020-12-17 15:42:04 +01:00
kdeme
a506739b23
Add query proc and use this for recurrent queries
...
This query proc is similar to the original (faulty) lookup proc.
But as we don't need to look for specific targets, it can be
used still as it gives a quicker and broader search resulting
in more nodes.
2020-12-17 15:23:02 +01:00
kdeme
e1acc1ae2d
Avoid sending more requests to node that timed out + request metrics
2020-12-16 00:07:49 +01:00
kdeme
68c9b7b3ad
Fix lookup to sort and query closest nodes
2020-12-15 13:24:57 +01:00
Kim De Mey
0820dbba46
Use one instead of deprecated oneIndex ( #317 )
2020-12-15 12:41:53 +01:00
Kim De Mey
d024ea8e85
Change invalid distance warning to debug ( #316 )
...
And also:
* move connected_peers metric so it does get added where it
shouldn't.
* imports cleanup
2020-12-14 12:21:03 +01:00
Kim De Mey
b4c1391be9
Discv5 ip limits for routing table ( #308 )
...
* Add ip limits to routing table and routing table buckets
* Fix order of ip limit check and duplicate check for replacement
* Fix ip limit for node with updated ip in ENR
* Fix bug where address wouldn't update on ENR update
and update some comments
* Reuse some add/remove code in routing table
* Fix seen bug on ENR update in routing table
* Rework addNode to make sure to do address check always
and adjust some logs.
* More documentation on the ip limits in routing table [skip ci]
2020-11-26 18:20:15 +01:00
Kim De Mey
b88fef203b
Add info log line in case of no external IP ( #313 )
2020-11-26 18:19:13 +01:00
kdeme
18430ef127
Add empty talkreq command to dcli
2020-11-13 12:45:39 +01:00
kdeme
44637cdd8e
Remove support for discovery v5.0
2020-11-13 12:33:07 +01:00
Kim De Mey
71d6dbd1b4
Discv5 small adjustments ( #307 )
...
* Use checkedEnumAssign in discv5.1
* Some renaming according to discv5 spec nomenclature
2020-10-29 22:04:37 +01:00
Kim De Mey
3626755529
Improve discovery v5.1 logging ( #306 )
2020-10-23 16:41:44 +02:00
Kim De Mey
6bdf1b4b0f
Simplify UseDiscv51 compile flag ( #305 )
2020-10-19 21:04:53 +02:00
kdeme
cf586c363f
Random message size and message size checks
2020-10-16 21:20:47 +03:00
kdeme
9b971a0e14
Improve error logging messages
...
As we don't need to differentate between errors with an enum
anymore thanks to refactor.
2020-10-16 21:20:47 +03:00
kdeme
c28cba3589
Limit request id to maximum 8 bytes
2020-10-16 21:20:47 +03:00
kdeme
301067c869
Fix RequestId encoding/decoding and improved tests
...
- RequestId to variable rlp byte array
- Do encoding and decoding steps in the message tests
- Do sign and verify in the nonce sign test
2020-10-16 21:20:47 +03:00
kdeme
76c10c9b79
Minimum size of random message fix for interop
2020-10-16 21:20:47 +03:00
kdeme
17ef0b25e0
Update to support the latest discv5.1 specification
2020-10-16 21:20:47 +03:00
kdeme
820a73f96f
Store session secrets only on succesful decodeHandshakePacket
2020-10-16 21:20:47 +03:00
kdeme
a10ee4cc42
Fix topicquery value
2020-10-16 21:20:47 +03:00
kdeme
44b30ef0cb
Add all message types and a basic implementation of talkreq/talkresp
2020-10-16 21:20:47 +03:00
kdeme
ce2cd2323c
Support findnode with multiple distances in discv5.1
2020-10-16 21:20:47 +03:00
kdeme
8042d72711
Add discovery v5.1 implementation
2020-10-16 21:20:47 +03:00
Kim De Mey
6b17531d48
Improvements on dropping of challenges and handling of too large distance ( #296 )
...
- drop handshake challenge on invalid handshake
- send empty nodes reponse when distance is > 256
- misc
2020-09-30 09:43:51 +02:00
Kim De Mey
c9caafb2a4
Replace memory db with lrucache for temporary storage of sessions ( #292 )
2020-09-10 14:49:48 +02:00
kdeme
f0638eb3f1
Add rlp_decode fuzz test + some corpus generate code
2020-07-20 17:09:15 +02:00
kdeme
4e4836a0fe
Add discv5 fuzzing test targets
2020-07-20 14:17:44 +02:00
kdeme
ec260dcfe4
Add & update tests
2020-07-17 22:48:14 +02:00
kdeme
1eae8f93f9
Fix empty ENR list in auth-response properly + potentially request new ENR on revalidation
2020-07-17 16:18:50 +02:00
kdeme
84fd39a8f8
Update enrs in buckets and replacement caches and fix empty ENR list in AuthResponse
2020-07-17 11:14:08 +02:00
kdeme
c7ac9f54b3
Refactor the findNode code + add tests
2020-07-15 15:27:22 +02:00
kdeme
33f72e77bc
Add duplicate and distance checks in Nodes message
2020-07-15 11:15:50 +02:00
Kim De Mey
7febbec673
Use brHmacDrbgGenerate for all random operations in discovery ( #272 )
2020-07-13 14:34:53 +02:00
Kim De Mey
f3de959261
Discv5 readme ( #278 )
...
* Add discovery v5 readme + test_discv5 task
* Move hkdf tests to test file and add to nimble task
2020-07-12 23:53:27 +02:00
Kim De Mey
0888667ac0
Comments and cleanup ( #276 )
...
* Fix dcli + add more comments
* Fix pong enr sequence number + varia cleanup
* Send randomData in case no handshake was done yet. Fix #277
2020-07-12 17:25:18 +02:00
Kim De Mey
28a8d52308
Fix enr deserialization crash + more tests + fuzz test ( #274 )
...
* Fix enr deserialization crash + more tests + fuzz test
* CI: Install depsOnly
2020-07-11 01:28:53 +02:00
kdeme
eeb958e834
Add comments [skip ci]
2020-07-08 14:56:56 +02:00
kdeme
4f3df3c9b2
Change update back to use var parameter of Record
2020-07-08 14:28:54 +02:00
kdeme
d3db83fa0a
Extra test on newProtocol
2020-07-08 13:16:07 +02:00
kdeme
95a09fdf7f
Get rid of some duplicate code
2020-07-08 12:14:00 +02:00
kdeme
0fb21e72d7
Add updateEnr and allow for table constructor usage in newProtocol
2020-07-08 11:45:58 +02:00
kdeme
72420d7f17
Allow for passing in previous enr at discovery protocol creation
2020-07-07 23:39:32 +02:00