Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Behavior consistency detection of different client devp2p protocol implementations #8445

Open
1033309821 opened this issue Mar 20, 2025 · 3 comments
Assignees
Labels
bug Something isn't working P3 Medium (ex: JSON-RPC request not working with a specific client library due to loose spec assumtion)

Comments

@1033309821
Copy link

I'm working on a project to verify that four Ethereum client devp2p network protocol implementations (Geth, Erigon, Nethermind, Besu and Reth) behave consistently with each other.

While doing devp2p/eth68 experiments, I found that the Besu client's message processing functions are very different:
We repeatedly send the same correct data message to different clients through the developed tool and get their replies. Repeat the above operation over and over again, and the interval between sending data is also the same, such as 10ms, 100ms. However, under the above different time intervals, the other four clients can reply normally, but besu will break the connection (broken pipe) after replying about 100 packets. We are not sure whether this is due to the limitation of besu's own implementation or a real bug?

In addition, for the 'Getblockheaders' packet in the eth68 protocol, if I change the 'Amount' field to a large value, the upper limit of the reply of the other four clients is 1024, and besu is 512.

Versions (Add all that apply)

  • Software version: besu-25.2.0
  • Java version: jdk 21.0.6
  • OS Name & Version: Ubuntu 20.04.3 LTS

Additional Information (Add any of the following or anything else that may be relevant)

  • Geth v1.13.8
  • Reth v1.1.4
  • Erigon v2.60.10
  • Nethermind v1.30.3
@1033309821 1033309821 added the bug Something isn't working label Mar 20, 2025
@jflo
Copy link
Contributor

jflo commented Mar 25, 2025

Can you point us to the tooling used to reproduce this?

@jflo jflo added the P3 Medium (ex: JSON-RPC request not working with a specific client library due to loose spec assumtion) label Mar 25, 2025
@1033309821
Copy link
Author

1033309821 commented Mar 26, 2025

Can you point us to the tooling used to reproduce this?

Sure, You can use D2PFuzz to execute the command:
./D2PFuzz bench --protocol "eth" --target ./test/enode_besu.txt --chain ./test/ethdata-2 --count 1 --ptype "GetBlockHeaders"
You need to replace enode.txt with the correct test node enr or enode. ethdata We use the simulated data from etherum-package and import them into besu. D2PFuzz/fuzzer/config.go is some configuration parameters that can set the number and interval of packets sent by a bench.

@1033309821
Copy link
Author

By the way, the genesis of the besu client is different from other clients. It cannot be started directly using the file import in the program. In addition, there is a problem with the besu.json provided by ethereum-package. You need to use the corrected besu.json to start the node, and then import the data of ethdata-2/chain.rlp. We have reported this to ethereum-package.

besu.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working P3 Medium (ex: JSON-RPC request not working with a specific client library due to loose spec assumtion)
Projects
None yet
Development

No branches or pull requests

3 participants