48 Commits

Author SHA1 Message Date
andri lim
ac1be3135a
Move p2p code to execution client (#777)
* Move p2p code to execution client

Since consensus layer have it's own networking code and not
sharing from nim-eth anymore, better move it to execution
client repo. From there, maintenance and development can
be easier to suit execution client needs.

* Move fuzz test code

* Restore fuzzing_helpers.nim
2025-03-02 17:21:39 +07:00
Jacek Sieka
dcfbc4291d
update version to 0.5.0 (#764)
1.0.0 was never an intentional release and the nim-eth repo is not yet
stable in terms of API, thus we start at 0.5.0 and go from there for the
first tagged release.

Most of the eth code in this repo now is aligned with various specs
meaning that most API can be considered "mostly" stable, but there are
still aspects being worked on as well as a potential future
reorganisation of the code turning nim-eth into a more "pure"
spec-driven core ethereum infrastructure repo, removing in the process
application-level stuff that happens to be common between nimbus-eth1
and eth2 and ended up in here for convenience.
2024-12-04 12:40:44 +01:00
Jacek Sieka
5d78c6a879
discv4: prefer ipv6 (#751)
This allows bonding with ipv4-mapped nodes above all, which fixes a
bunch of warnings
2024-10-29 10:03:13 +01:00
Jacek Sieka
6bd6bae86c
Align core types with execution spec (#733)
Since these types were written, we've gained an executable spec:

https://github.com/ethereum/execution-specs

This PR aligns some of the types we use with this spec to simplify
comparisons and cross-referencing.

Using a `distinct` type is a tradeoff between nim ergonomics, type
safety and the ability to work around nim quirks and stdlib weaknesses.

In particular, it allows us to overload common functions such as `hash`
with correct and performant versions as well as maintain control over
string conversions etc at the cost of a little bit of ceremony when
instantiating them.

Apart from distinct byte types, `Hash32`, is introduced in lieu of the
existing `Hash256`, again aligning this commonly used type with the spec
which picks bytes rather than bits in the name.
2024-09-29 10:52:19 +02:00
andri lim
b9c40e1380
Use asyncraises in p2p (#675)
* Use asyncraises in p2p

* Fix capture error in async proc

* Remove gcsafe from async procs
2024-02-14 15:59:13 +07:00
andri lim
b75ee36576
Refactor p2pProtocol internals (#657)
* Refactor p2pProtocol internals

* Attempt to fix rlp crash with Nim v2 (#658)

* Attempt to fix rlp crash with Nim v2
* Fix test_ecies for nim v2
* Reduce compiler warnings
* Resolve ambiquity in testutils

* Disable nim devel continue-on-error
2024-01-22 16:47:46 +07:00
Kim De Mey
700360fde2
Rename routing_table_nodes metric for discv4 routing table (#646) 2023-10-31 18:28:21 +01:00
Kim De Mey
d57a1094b1
Remove all Defect raises to avoid unnecessary warnings (#607)
As this module dropped support for Nim versions < 1.6, all Defect
raises can be removed to avoid unnecessary warnings
2023-05-10 15:50:04 +02:00
Kim De Mey
25b0da0280
Fix JSON writer for logging in devp2p code (#597) 2023-04-18 13:51:02 +02:00
Kim De Mey
d2ba753792
Add rlpx metrics and avoid immediate peer reconnections (#585)
* Add metrics related to devp2p peer connections

* Avoid reconnecting to peers that just failed connection

- Add SeenTable to avoid reconnecting to peers immediately after
a failed connect. Depending on the failure, the amount of time is
different. This is similar to what is done in nimbus-eth2.
- Attempt to rework rlpxConnect at the same time, in order to
make sure that errors are properly handled. The current structure
is far from ideal, but it is hopefully a small step in the right
direction. To many oddities in there right now to really rework
rlpxConnect properply.

* Fix rlpx thunk fuzzer
2023-03-16 16:45:12 +01:00
Lorenzo Delgado
5c46220e72
add eth topic to all the logs scope (#568) 2022-12-06 14:54:03 +01:00
Justin Traglia
e7d3de6ebf
Fix some typos (#557) 2022-11-16 17:44:00 +01:00
Kim De Mey
9b0f054b04
Tackle some Nim warnings new since Nim 1.4 & 1.6 (#553) 2022-11-10 16:32:57 +01:00
Kim De Mey
64b56d866c
Add own node checks before sending ping (#548)
Seems there are two occasions possible where we try to ping the
own local node which causes an assert

- One via the bounding
- One via a received ping, which is strange in the first place but
notice in a stack trace
2022-11-07 14:25:11 +01:00
Jacek Sieka
2734ed6bda
kad: remove unnecessary randomize call (#535)
* kad: remove unnecessary randomize call

* use `rng.sample`
2022-09-19 10:47:30 +02:00
jangko
5885f638e4
discv4: fix ping pong time removal algorithm 2022-09-07 21:19:05 +07:00
jangko
84e60c6930
fix discovery v4 ping pong handler 2022-09-07 11:48:59 +07:00
Jacek Sieka
1b516682bd
bearssl: use split api (#510) 2022-06-17 22:45:37 +02: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
Ștefan Talpalaru
2088d7568d
CI: test with multiple Nim version (#429)
* CI: test with multiple Nim version

* clean up the testing tree a little

* replace "unittest" with "unittest2"
2021-12-11 19:12:55 +01:00
kdeme
e10ef19f81
Move push raises to top and add/update license info where needed 2021-04-28 16:20:05 +02:00
kdeme
a1da5d5e59
Use asyncSpawn instead of asyncCheck so chronos strict makes sense
And additional cleanup:
- Push raises Defect at top
- remove inlines
- remove unneeded gcsafe
- remove usage of deprecated calls
2021-04-27 11:30:08 +02:00
kdeme
9fed10de88
Allow for discv4 chronos strict usage
And group p2p tests that can be run with strict usage along the way.
2021-04-27 10:09:54 +02:00
Jamie Lokier
209171d97d
discv4: Refactor findNode so it can be called directly from a test
Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-04-06 18:41:47 +01: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
Jamie Lokier
e4b4b7f4af
discv4: Fix Kademlia crash when trying to sync (#342)
Fixes status-im/nim-eth#341, status-im/nimbus-eth1#489.

When using discv4 (Kademlia) to find peers, there is a crash after a few
minutes.  It occurs for most of us on Eth1 mainnet, and everyone on Ropsten.

The cause is `findNodes` being called twice in succession to the same peer,
within about 5 seconds of each other.  ("About" 5 seconds, because Chronos does
not guarantee to run the timeout branch at a particular time, due to queuing
and clock reading delays.)

Then `findNodes` sends a duplicate message to the peer and calls
`waitNeighbours` to listen for the reply.  There's already a `waitNeighbours`
callback in a shared table, so that function hits an assert failure.

Ignoring the assert would be wrong as it would break timeout logic, and sending
`FindNodes` twice in rapid succession also makes us a bad peer.

As a simple workaround, just skip `findNodes` in this state and return a fake
empty `Neighbours` reply.  This is a bit of a hack as `findNodes` should not be
called like this; there's a logic error at a higher level.  But it works.

Tested for about 4 days constant operation on Ropsten.  The crash which occured
every few minutes no longer occurs, and discv4 keeps working.

Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-04-02 23:29:02 +02:00
Jacek Sieka
484fbcab1b
use bearssl rng throughout (#265)
* use bearssl rng throughout

* seeder can fail

* imports and exports

* modules, sigh

* one more try

* move var

* even fewer thread vars

* remove out-of-date genrated files
2020-07-07 10:56:26 +02:00
Miran
0424a66aa2
fix deprecated 'rand' (#259) 2020-06-24 16:06:07 +02:00
Jacek Sieka
1646d78d83
cleanups (#226) 2020-04-18 10:17:59 +02:00
Jacek Sieka
0b110f3287
Secp more refactor (#211)
* simplify some modules

* mark several modules with raises
* fix clearing of keys in auth.nim
* fix keyfile case dropping off
* fix keyfile stream storage
* uuid should be output in lowercase

* enode: simplify API
2020-04-06 18:24:15 +02:00
Jacek Sieka
ac5bbe4d3d
keys: get rid of deprecated calls (#213) 2020-04-04 18:44:01 +02:00
Zahary Karadjov
2b7a25175b Prepare for Nim 1.2 2020-03-24 14:05:30 +02:00
kdeme
f81a87f31b Add lookupLoop and other fixes
- add lookupLoop
- protocol close / closeWait
- randomize randomNodes
- Use lookupRequestLimit
- Remove invalid check in neighbours proc
- Add lookup test
2020-02-29 14:00:58 +01:00
Zahary Karadjov
74d0247e6b
Tweak some retry limits and timeouts 2020-02-22 20:49:14 +02:00
Ștefan Talpalaru
12f2a87de3
kademlia: turn exception into warning 2019-04-25 01:17:11 +02:00
Ștefan Talpalaru
c5e564d771
more gcsafe pragmas for Nim HEAD 2019-04-23 17:03:32 +02:00
Yuriy Glukhov
f295418f75
Lower bonding failed msg verbosity 2019-04-15 12:50:00 +03:00
Yuriy Glukhov
2c12746c03
Use chronos durations 2019-04-10 20:03:58 +03:00
Yuriy Glukhov
bc23b68c95
Comments addressed 2019-04-10 10:04:48 +03:00
Yuriy Glukhov
02843c0013
Fixed discovery busyloop when no bootnodes provided 2019-04-09 11:06:32 +03:00
Yuriy Glukhov
b84c228364 Retry bootstrapping in case of failure 2019-04-08 15:39:03 +03:00
Yuriy Glukhov
dcb82f6a96 Tone down annoying discovery messages 2019-03-28 23:11:00 +02:00
Zahary Karadjov
d678762c50 Cosmetic change 2019-03-28 20:21:35 +02:00
Zahary Karadjov
f0bf0570d1 Support compiling with json logging; Drop package_visible_types 2019-03-25 02:10:09 +02:00
Ștefan Talpalaru
9146e8e2f0
assert() -> doAssert() 2019-03-13 23:15:26 +01:00
Yuriy Glukhov
07a0c5443f Fixed PeerPool error when no bootnodes given 2019-02-26 23:47:20 +02:00
Mamy Ratsimbazafy
07cf801b97
Rebrand asyncdispatch2 to chronos (#2)
* Rebrand asyncdispatch2 to chronos

* fix nimble path to chronos
2019-02-06 17:01:04 +01:00
Yuriy Glukhov
e75a00f86e Moved eth-p2p to eth 2019-02-05 17:40:29 +02:00