Sentry

P2P network management

Sentry connects Erigon to the Ethereum P2P network, enabling the discovery of other participants across the Internet and secure communication with them. It performs these main functions:

  • Peer discovery via the following:

    • Kademlia DHT

    • DNS lookup

    • Configured static peers

    • Node info saved in the database

    • Boot nodes pre-configured in the source code

  • Peer management:

    • handshakes

    • holding p2p connection even if Erigon is restarted

The ETH core interacts with the Ethereum p2p network through the Sentry component. Sentry provides a simple interface to the core, with functions to download data, receive notifications about gossip messages, upload data on request from peers, and broadcast gossip messages either to a selected set of peers or to all peers.

Running with an external Sentry or multiple Sentries

It is possible to have multiple Sentry to increase connectivity to the network or to obscure the location of the core computer. In this case it is necessary to define address and port of each Sentry that should be connected to the Core.

Before using the Sentry component the executable must be built. Head over to /erigon directory and type:

make sentry

Then it can be launched as an independent component with the command:

./build/bin/sentry

Example

In this example we will run an instance of Erigon and Sentry on the same machine.

Following is the Sentry client running separately:

screen ./build/bin/sentry --datadir=~/.local/share/erigon

And here is Erigon attaching to it

./build/bin/erigon --internalcl --snapshots=true --sentry.api.addr=127.0.0.1:9091

Erigon might be attached to several Sentry instances running across different machines. As per Erigon help:

  --sentry.api.addr value

where value is comma separated sentry addresses '<host>:<port>,<host>:<port>'

Command line options

To display available options for sentry digit:

./build/bin/sentry --help

Commands

Run p2p sentry

Usage:
  sentry [flags]

Flags:
      --datadir string                 Data directory for the databases (default "/home/admin/.local/share/erigon")
      --discovery.dns strings          Sets DNS discovery entry points (use "" to disable DNS)
      --healthcheck                    Enabling grpc health check
  -h, --help                           help for sentry
      --log.console.json               Format console logs with JSON
      --log.console.verbosity string   Set the log level for console logs (default "info")
      --log.dir.json                   Format file logs with JSON
      --log.dir.path string            Path to store user and error logs to disk
      --log.dir.prefix string          The file name prefix for logs stored to disk
      --log.dir.verbosity string       Set the log verbosity for logs stored to disk (default "info")
      --log.json                       Format console logs with JSON
      --maxpeers int                   Maximum number of network peers (network disabled if set to 0) (default 100)
      --maxpendpeers int               Maximum number of TCP connections pending to become connected peers (default 1000)
      --metrics                        Enable metrics collection and reporting
      --metrics.addr string            Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1")
      --metrics.port int               Metrics HTTP server listening port (default 6060)
      --nat string                     NAT port mapping mechanism (any|none|upnp|pmp|stun|extip:<IP>)
                                       	     "" or "none"         default - do not nat
                                       	     "extip:77.12.33.4"   will assume the local machine is reachable on the given IP
                                       	     "any"                uses the first auto-detected mechanism
                                       	     "upnp"               uses the Universal Plug and Play protocol
                                       	     "pmp"                uses NAT-PMP with an auto-detected gateway address
                                       	     "pmp:192.168.0.1"    uses NAT-PMP with the given gateway address
                                       	     "stun"               uses STUN to detect an external IP using a default server
                                       	     "stun:<server>"      uses STUN to detect an external IP using the given server (host:port)
                                       
      --netrestrict string             Restricts network communication to the given IP networks (CIDR masks)
      --nodiscover                     Disables the peer discovery mechanism (manual peer addition)
      --p2p.allowed-ports uints        Allowed ports to pick for different eth p2p protocol versions as follows <porta>,<portb>,..,<porti> (default [30303,30304,30305,30306,30307])
      --p2p.protocol uint              Version of eth p2p protocol (default 68)
      --port int                       Network listening port (default 30303)
      --pprof                          Enable the pprof HTTP server
      --pprof.addr string              pprof HTTP server listening interface (default "127.0.0.1")
      --pprof.cpuprofile string        Write CPU profile to the given file
      --pprof.port int                 pprof HTTP server listening port (default 6060)
      --sentry.api.addr string         grpc addresses (default "localhost:9091")
      --staticpeers strings            Comma separated enode URLs to connect to
      --trace string                   Write execution trace to the given file
      --trustedpeers strings           Comma separated enode URLs which are always allowed to connect, even above the peer limit
      --verbosity string               Set the log level for console logs (default "info")

Last updated