* directs types we generate fuzz tests for to a method that is more
restrictive in the traits each input type should implement, so if any
type does not implement the test-fuzz required traits it will fail to
compile instead of fail to autogenerate a fuzz test at runtime.
* add trace in DisconnectReason Decodable impl
* add trace for decoding p2p hello
* add traces to p2p and eth stream
* refactor P2PMessage decoding
* improve disconnect tracing
* s/Hello/first
* add geth disconnect test
* add disconnectreason test cases
* add known failing disconnect messages
* add trace when disconnect reason decoding fails
* cargo fmt
* add more examples
* adding more as they appear in traces
* will add the rest since they can be exhaustively enumerated
* add every other possible encoding
* fix disconnect decoding
* the four possible formats for a disconnect message (rlp list (y/n) x
snappy (y/n)):
* encoded as a single rlp byte
* with snappy
* without snappy
* encoded as a rlp list
* with snappy
* without snappy
* fix the type for decoding in the test_decode_known_reasons test
* sort reasons by length in test
* remove printlns
* use one call to advance
* simplify decode impl to strip last byte
* todo: comment explaining the different formats being parsed?
* explicitly remove geth as a peer
* style: traces
* add another disconnect code from geth
* fix: add check for DisconnectRequested
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
* Add tracing to ProtocolMessage::decode errors
* Change trace message formatting
Now it prints the bytes as a hex string.
Also changed trace level to WARN and added 'handshake' to one of the traces to differentiate between them
* Add prefix to raw message bytes
* Specify 'eth' in trace message
to differentiate it from other handshakes
Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>
Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>
* move hello to separate file
* cargo fmt
* wip: actual fuzz test
* should probably also take advantage of test-fuzz to generate
benchmarks like impl_fuzzer_with_input
* impl generic roundtrip method
* generate test with macro
* change testname to fuzzname
* add reth-eth-wire to fuzz in ci
* add other message types to fuzz
* remove unused_crate_dependencies
* was causing test issues, may want to revisit whether or not we can
include this warning and still use test_fuzz
* more afl debugging ci
* use more explicit imports in fuzz_rlp
* impl Default for types and fuzz ping/pong
* Default is necessary for test-fuzz to auto generate a corpus for each
type we are fuzz testing
* enable AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES
* not sure if we should do this in the workflow instead:
echo core >/proc/sys/kernel/core_pattern
we may miss crashes if we keep this enabled?
* remove reth-interfaces from fuzzing
* add secp256k1 to reth-db dev deps
* wip: start adding serde to stuff
* add serde traits to NewBlockHashes
* derive serde traits for the rest of the types
* derive serde traits for p2p subprotocol messages
* cargo fmt
* fix disconnect reason encoding
* move disconnect to own file
* add encoding test for 0x80 in list
* rlp([0u8]) is a good test case to have because it is the RLP encoding
of a DisconnectRequested p2p message
* fix disconnect encoding and decoding
* directly decode the disconnect id to handle the 0x80 case of
DisconnectRequested
* the previous manual snappy encoding / decoding was incorrect - a
snappy encoded disconnect message is 4 bytes, not 3 bytes. The tests
and implementation are changed to reflect this.
* fix p2p message decoding
* had a similar issue to disconnect reason decoding where it would not
handle a 0x80 message id
* make invalid rlp header case more explicit
* cargo fmt
* chore: clean up `.gitignore`
* fix: make RO cursors `Send + Sync`
* feat(wip): bodies stage
* driveby: improve docs
* chore: don't panic if we're the first stage
* chore: use `Vec` for ommers
* feat: error handling in bodies downloader
* chore: remove stale comment
* chore: pascal-case stage id
* refactor: remove unused new fns
* refactor: distinguish downloaders with prefix
* refactor: move downloader errs to own module
* refactor: `stream_bodies` -> `bodies_stream`
* test: fix borked imports in header stage
* test: clean up header tests
* test: add basic body stage tests
* test: add 2 more body stage test skeletons
* test: move generator test utils to own module
* refactor: move proof functions to primitives crate
* feat: add block generator test utils
* test: more body stage tests
* chore: fix typo (`Cannonical*` -> `Canonical`)
* docs: document `bodies_to_download`
* test: more body stage tests
* test: more body stage tests
* refactor: clean up body stage tests a bit
* test: fix broken tests
* refactor: clean up body stage tests
* test: more body stage tests
* Switch stream type of ActiveSession to EthStream
* Start `StatusBuilder` for initializing the `Status` message required
for the handshake
* Add `Hardfork` for `Status` default forkid
* Add `MAINNET_GENESIS` constant
* finish `StatusBuilder`
* initialize eth streams in session
* add status, hello, and fork filter to session manager
* fix status builder example
* add status and hello to network config
* will probably remove
* removing status and hello from networkconfig
* move forkid to primitives
* change imports for forkid
* add hardfork to primitives
* remove hardfork and forkid from eth-wire
* fix remaining eth-wire forkid references
* put mainnet genesis in constants, remove NodeId
* replace NodeId with PeerId
* the only NodeId remaining is inherited from enr
* PeerId still needs to be documented
* also run cargo fmt
* replace loop with iter().any()
* ignore missing docs for hardforks
* use correct PeerId for Discv4::bind example test
* document PeerId as secp256k1 public key
* cargo fmt
* temporarily allow too_many_arguments
* the authenticate and start_pending_incoming_session methods have many
arguments, we can reconsider the lint or fix the methods at a later
point
* feat(consensus): Signer recovery and tx validation
* Signature hash and use seckp256k1 over k256
* use deref_more for transactions
* cleanup and fix for eip1559 hash
* fix hash calculation on decoding
* Create UnauthedEthStream
* remove authed flag from EthStream
* encode and decode in status handshake
* update test to assert the proper status is communicated
* cargo fmt
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>