Updated 2019-10-02

Managing Peers

Limiting Peers

Limiting peers reduces the bandwidth used by Hyperledger Besu. It also reduces the CPU time and disk access used to manage and respond to peers.

Use the --max-peers command line option to reduce the maximum number of peers. The default is 25.

No Discovery

The --discovery-enabled command line option can be used to disable P2P peer discovery.

With discovery disabled, connections may be initiated by peers that have already discovered or are otherwise configured to connect to the local node (for example, using admin_addPeer). Connections can also be initiated by configuring static nodes.

Static Nodes

Static nodes are a configured set of trusted nodes. Static nodes are exempt from maximum peer and remote connection limits.

Besu attempts to maintain connections with static nodes by periodically initiating a connection to any static node that is not connected.

To configure a network of static nodes:

  1. List enode URLs of the nodes in the static-nodes.json file.

  2. Save the static-nodes.json file in the data directory of each node.

  3. Start Besu with discovery disabled using --discovery-enabled=false.

To modify the static peers at run time, use the admin_addPeer and admin_removePeer JSON-RPC API methods.

Note

Runtime modifications of static nodes are not persisted between runs. The static-nodes.json file is not updated by admin_addPeer and admin_removePeer methods.

Nodes outside of the static nodes are not prevented from connecting. To prevent nodes from connecting, use Permissioning.

Tip

If the added peer does not appear in the peer list (returned by admin_peers), check the supplied enode URL is correct, the node is running, and the node is listening for TCP connections on the endpoint.

static-nodes.json File

The static-nodes.json file must be located in the data directory (specified by --data-path) and contain a JSON array of enode URLs.

Example

[
"enode://cea71cb65a471037e01508cebcc178f176f9d5267bf29507ea1f6431eb6a5dc67[email protected]127.0.0.1:30303",
"enode://ca05e940488614402705a6b6836288ea902169ecc67a89e1bd5ef94bc0d1933f2[email protected]127.0.0.1:30304"    
]

Note

Each node has a static-nodes.json file. We recommend each node in the network has the same static-nodes.json file.

Monitoring Peer Connections

JSON-RPC API methods to monitor peer connections include:

Node Connections

The default logging configuration does not list node connection and disconnection messages.

To enable listing of node connection and disconnection messages, specify the --logging command line option --logging=DEBUG. For more verbosity, specify --logging=TRACE.

The console logs connection and disconnection events when the log level is DEBUG or higher.
If Successfully accepted connection from ... is displayed, connections are getting through the firewalls.

Example log output

2018-10-16 12:37:35.479-04:00 | nioEventLoopGroup-3-1 | INFO | NettyP2PNetwork | Successfully accepted connection from 0xa979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c

Limiting Remote Connections

In private networks with a level of trust between peers, enabling the remote connection limits is unnecessary and disabling may increase the speed at which nodes can join the network.