beacon-chain
The beacon-chain binary runs the Prysm beacon node. For the flags most people set, see Common flags and config file.
Generated from Prysm v7.3.1. Each flag name is a permalink you can share. Press / to filter.
General
- --accept-terms-of-use
Accepts Terms and Conditions (for non-interactive environments).
Without this flag the node prompts you to type
accepton first start, which fails in systemd, Docker and other non-interactive environments. Once accepted (by flag or prompt), Prysm writes an emptytosacceptedfile into--datadirand never asks again for that directory.--accept-terms-of-useSee also
--datadir- --config-file=<string>
Filepath to a yaml file with flag values.
Loads flag values from a YAML file whose keys are flag names without dashes (aliases also work). A flag passed on the command line always wins over the same key in the file. List flags such as
bootstrap-nodeorpeermust be written as YAML lists, and durations as strings like30s.A comma-separated string for a list flag (for example
peer: a,b) is rejected with a type error; use a YAML list instead.--config-file=/var/lib/ethereum/beacon/config.yaml
Beacon node and APIs
- --api-timeout=<duration>
Specifies the timeout value for API requests in seconds.
Wraps every Beacon API (HTTP) request in a timeout, except the
/eth/v1/eventsstream. By default there is no timeout. The value is a Go duration, so include a unit (30s,2m);0disables the timeout.--api-timeout=30sSee also
--http-portRead the guide- --chain-config-file=<string>
Path to a YAML file with chain config values.
Runs the node on a custom network defined by a consensus spec
config.yaml(the format published with every devnet and testnet). Keys you don't set fall back to mainnet values, or to minimal-preset values if the file declaresPRESET_BASE: minimal. Built-in bootnodes are cleared and the deposit contract deployment block is reset to 0, so pass--bootstrap-nodeand usually--genesis-statetoo.It can't be combined with a network flag (
--mainnet,--hoodi,--sepolia); the node exits withchain-config-file cannot be passed concurrently with network flag.--chain-config-file=/data/devnet/config.yamlSee also
--genesis-state,--bootstrap-node,--chain-idRead the guide- --e2e-config
Enables the E2E testing config, only for use within end-to-end testing.
Switches to the configuration used by Prysm's own end-to-end test suite (short epochs, test fork schedule). It has no use on a public network.
See also
--minimal-configRead the guide- --grpc-max-msg-size=<int>
WARNING: The gRPC API will remain the default and fully supported through v8 (expected in 2026) but will be eventually removed in favor of REST API.. Integer to define max receive message call size (in bytes). If serving a public gRPC server, set this to a more reasonable size to avoid resource exhaustion from large messages. Validators with as many as 10000 keys can be run with a max message size of less than 50Mb. The default here is set to a very high value for local users.
Maximum size in bytes of a single message the beacon node's gRPC server accepts from a client (receive side only). The default is 2147483647 bytes (about 2 GiB), which is fine when the validator client is local. Lower it, for example to 50 MB, if you expose gRPC to untrusted clients.
--grpc-max-msg-size=52428800See also
--rpc-host,--rpc-port- --minimal-config
Uses minimal config with parameters as defined in the spec.
Activates the spec's
minimalpreset (8-slot epochs, small committees) for local devnets and tests. Preset-dependent data structure sizes are fixed when the binary is compiled (theminimalGo build tag), so this flag is meant for binaries built for the minimal preset, not for release binaries on a public network.- --rpc-max-page-size=<int>
Max number of items returned per page in RPC responses for paginated endpoints.
Caps the
page_sizeaccepted by Prysm's paginated gRPC list methods (validators, blocks, attestations, assignments); larger requests fail withRequested page size ... can not be greater than max size. When unset the effective limit is 250, not the0shown.--historical-slasher-noderaises it to 4096 automatically.--rpc-max-page-size=1000- --tls-cert=<string>
Certificate for secure gRPC. Pass this and the tls-key flag in order to use gRPC securely.
PEM certificate for the gRPC server (port
--rpc-port). TLS is enabled only when both--tls-certand--tls-keyare set; otherwise the node logsYou are using an insecure gRPC serverand serves plaintext. It doesn't affect the HTTP Beacon API, which has no built-in TLS. Give the same certificate to the validator client's--tls-certso it trusts the server.--tls-cert=/var/lib/ethereum/beacon/tls/beacon.crtSee also
--tls-key,--rpc-host,--rpc-port- --chain-id=<uint64>
Sets the chain id of the beacon chain
Overrides the execution chain ID Prysm expects (1 on mainnet, 560048 on Hoodi, 11155111 on Sepolia). On connection the node calls
eth_chainIdand refuses the execution client withwanted chain ID X, got Yif they differ; the value is also reported by/eth/v1/config/deposit_contract. You only need it for custom networks, and it takes precedence overDEPOSIT_CHAIN_IDin--chain-config-file.--chain-id=560048See also
--network-id,--chain-config-file,--execution-endpoint- --disable-debug-rpc-endpoints
Disables the debug Beacon API namespace.
Removes the
/eth/*/debug/*Beacon API routes (full states, fork choice dump, heads, data column sidecars) and the Prysm debug gRPC service. These endpoints are enabled by default and can return very large responses, so disable them on nodes whose API is reachable by others.--disable-debug-rpc-endpointsSee also
--http-hostRead the guide- --http-cors-domain=<string>alias
--grpc-gateway-corsdomain Comma separated list of domains from which to accept cross origin requests.
Browser origins allowed to call the Beacon API, split on commas.
*allows any origin, and a single*inside an entry acts as a wildcard (https://*.example.com). Needed only for browser-based tools;curland the validator client ignore CORS. Alias:--grpc-gateway-corsdomain.Entries are not trimmed, so don't put spaces after the commas:
https://a.examplenever matches. The built-in default is joined with,, so only its first entry (http://localhost:3000) is effective.--http-cors-domain=http://localhost:3000,https://dashboard.example.comSee also
--http-host,--http-portRead the guide- --http-host=<string>alias
--grpc-gateway-host Host on which the HTTP server runs on.
Interface the Beacon API HTTP server binds to. The default
127.0.0.1accepts only local connections; use0.0.0.0to accept connections from other machines or containers, and protect the port with a firewall. Alias:--grpc-gateway-host.--http-host=0.0.0.0See also
--http-port,--http-cors-domain,--disable-debug-rpc-endpointsRead the guide- --http-port=<int>alias
--grpc-gateway-port Port on which the HTTP server runs on.
Port of the Beacon API (the standard REST API used by other validator clients, MEV tooling, dashboards and
curl). The Prysm validator client uses it when started with--enable-beacon-rest-api, pointing--beacon-rest-api-providerat it. Alias:--grpc-gateway-port.--http-port=3500See also
--http-host,--rpc-portRead the guide- --tls-key=<string>
Key for secure gRPC. Pass this and the tls-cert flag in order to use gRPC securely.
PEM private key matching
--tls-cert. If either file can't be loaded, the node exits at startup withCould not load TLS keys.--tls-key=/var/lib/ethereum/beacon/tls/beacon.keySee also
--tls-cert- --network-id=<uint64>
Sets the network id of the beacon chain.
Overrides the
DEPOSIT_NETWORK_IDconfig value (1 on mainnet, 560048 on Hoodi, 11155111 on Sepolia). Prysm doesn't use it to check the execution client or for anything else at runtime; it only shows up in/eth/v1/config/spec. Use--chain-idfor custom networks; this flag is cosmetic.--network-id=560048See also
--chain-id,--chain-config-file- --rpc-host=<string>
Host on which the RPC server should listen
Interface the gRPC server binds to. The Prysm validator client connects here by default (its
--beacon-rpc-provideris127.0.0.1:4000). Change it to0.0.0.0only when the validator client runs on another machine or container, and consider enabling TLS.--rpc-host=0.0.0.0See also
--rpc-port,--tls-cert,--tls-key- --rpc-port=<int>
RPC port exposed by a beacon node
Port of the Prysm gRPC API, used by the Prysm validator client unless it runs in REST mode. On startup the node logs
Beacon chain gRPC server listeningwith the address. Prysm plans to replace gRPC with the REST API, but it stays supported through v8.--rpc-port=4000See also
--rpc-host,--http-port- --batch-verifier-limit=<int>
Maximum number of signatures to batch verify at once for beacon attestation p2p gossip.
Gossip messages that carry signatures (mainly attestations) are queued and verified in one BLS batch, flushed when the queue reaches this size or every 5 ms, whichever comes first. If a batch fails, each signature is re-verified individually. The default suits nearly all nodes; lower it only when experimenting with verification latency.
--batch-verifier-limit=1000- --state-diff-exponents=<int list>
A comma-separated list of exponents (of 2) in decreasing order, defining the state diff hierarchy levels. The last exponent must be greater than or equal to 5.
Used only with
--enable-state-diff; otherwise it's ignored with a warning. Each exponentndefines a level of the historical-state tree that stores a state every 2^n slots: the first level holds full snapshots, the others hold diffs against the level above. Rules: 1 to 15 values, strictly decreasing, at most 30, last at least 5 (one epoch). The default21,18,16,13,11,9,5puts a full snapshot roughly every 291 days of slots.The exponents are stored in the database when it's created. Starting later with different values fails with
state-diff exponents changed; database incompatible, and the only fixes are the original values or a resync.--state-diff-exponents=21,18,16,13,11,9,5See also
--enable-state-diffRead the guide- --archive-origin-state=<path>
Path to an ssz-encoded beacon state at an epoch boundary slot, used as the oldest state an archive node will hold. Defaults to the genesis state. Requires
--enable-archive.Path to an SSZ-encoded beacon state to use as the oldest state of an archive node, instead of genesis. The state must be at the first slot of an epoch and belong to the network you run; it can't be newer than the checkpoint the node synced from. It's trusted like a checkpoint state, so take it from a source you trust. Requires
--enable-archive.The origin is stored in the database. Starting later with a different state makes the node refuse to start; delete the database to change it.
--archive-origin-state=/path/to/state.sszSee also
--enable-archiveRead the guide- --postpone-shutdown-for-proposals
On a graceful shutdown signal (SIGINT/SIGTERM, e.g. Ctrl-C on Linux), postpone shutdown if a connected validator client must propose a block in the next 2 epochs. Send the signal again to force the node to stop immediately.
On SIGINT or SIGTERM, the node checks whether any validator a connected validator client has subscribed has a proposal in the current or next epoch, and waits until that slot has passed, logging
Postponing shutdown: a connected validator client has an upcoming block proposal. A second signal stops it immediately. Useful for planned restarts and upgrades.Service managers kill processes that don't stop in time (systemd's default
TimeoutStopSecis 90 s, Docker's stop timeout is 10 s). Raise those timeouts, or the wait of up to two epochs (about 13 minutes) is cut short.--postpone-shutdown-for-proposals- --disable-graffiti-client-append
Disables appending consensus and execution client version information to the block graffiti
By default the beacon node appends short client identifiers after your graffiti when space allows: execution client code and commit plus
PMand the Prysm commit, for exampleSushi GEabcdPMe4f6, shortened as your text gets longer. The execution client information comes fromengine_getClientVersionV1. Set this flag to keep the graffiti exactly as the validator client sends it.--disable-graffiti-client-append
Peer-to-peer networking
- --bootstrap-node=<string list>
The enr/enode address of bootstrap node. Beacon node will connect for peer discovery via DHT. Multiple nodes can be passed by using the flag multiple times but not comma-separated. You can also pass YAML files containing multiple nodes.
Sets the discv5 bootnodes used to find the first peers. The default shown here is the mainnet list;
--hoodiand--sepoliaload their own lists automatically, so you only need this flag on custom networks or to use your own bootnodes. Passing it replaces the whole built-in list rather than adding to it. Onlyenr:andenode:records are used (multiaddrs are dropped), and a value ending in.yamlis read as a YAML list of records.Because the flag replaces the defaults, a single wrong or unreachable ENR leaves the node with no way to discover peers.
--bootstrap-node=enr:-Ku4Q... --bootstrap-node=/path/to/bootnodes.yamlSee also
--no-discovery,--peer- --enable-upnp
Enable the service (Beacon chain or Validator) to use UPnP when possible.
Asks your router, through UPnP/NAT-PMP, to forward the libp2p listening ports (TCP and QUIC) to this machine. Use it on a home network where you can't or don't want to set up manual port forwarding; the router must have UPnP turned on. It does not map the discv5 UDP port (
--p2p-udp-port), so forward that one yourself if you want to be discoverable.See also
--p2p-host-ip,--p2p-tcp-port,--p2p-quic-port,--p2p-udp-portRead the guide- --no-discovery
Enable only local network p2p and do not connect to cloud bootstrap nodes
Turns off discv5 entirely: the node doesn't open the discovery UDP socket, doesn't contact bootnodes, and only connects to peers you list with
--peer(and inbound connections from nodes that already know you). Use it for private devnets or a node that must only talk to your own nodes.On a public network without
--peerentries, the node ends up with no peers and can't sync.--no-discovery --peer=/ip4/10.0.0.5/tcp/13000/p2p/16Uiu2HAm...See also
--peer,--bootstrap-node- --p2p-allowlist=<string>
The CIDR subnet for allowing only certain peer connections. Using "public" would allow only public subnets. Example: 192.168.0.0/16 would permit connections to peers on your local network only. The default is to accept all connections.
Accepts a single CIDR, or the keywords
publicorprivate. With a CIDR (orprivate), the node only dials and accepts peers whose IP falls in that range and rejects everything else.publicworks differently: it adds the private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16) to the deny list, so only public addresses are allowed.A CIDR such as
192.168.0.0/16blocks every internet peer; only use it for a node that talks exclusively to nodes on your LAN.--p2p-allowlist=publicSee also
--p2p-denylistRead the guide- --p2p-denylist=<string list>
The CIDR subnets for denying certainty peer connections. Using "private" would deny all private subnets. Example: 192.168.0.0/16 would deny connections from peers on your local network only. The default is to accept all connections.
Rejects dials to and connections from peers in the given CIDR ranges; everything else is still allowed. The keyword
privatedenies all private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16), which cloud hosts often use to avoid abuse reports for scanning internal networks. Repeat the flag or separate values with commas; a deny rule that conflicts with an allow rule logsAddress ... is in conflict with previous rule.--p2p-denylist=privateSee also
--p2p-allowlistRead the guide- --p2p-colocation-whitelist=<string list>
CIDR addresses to exempt from gossip sub IP colocation restrictions. Can be specified multiple times. Example: 192.168.1.1/32 would exempt that specific IP from colocation restrictions.
Prysm treats many peer identities coming from one IP as suspicious: more than 5 peers from the same IP are marked bad, and gossipsub scoring penalizes IPs with more than 10 peers. Addresses in these CIDR ranges are exempt from both checks. Use it when you run several of your own nodes behind one public IP (or on one host) and they peer with each other.
--p2p-colocation-whitelist=10.0.0.0/24See also
--peerRead the guide- --p2p-host-ip=<string>
The IP address advertised by libp2p. This may be used to advertise an external IP.
Sets the public IP written into your node record (ENR) and advertised to libp2p peers. Without it, discv5 learns your external address from what other peers report, which works on most networks but can be slow or wrong behind NAT. When set, Prysm also tries a TCP connection to this IP and port at startup and logs
IP address is not accessibleif it fails, a quick way to spot missing port forwarding. The value must be a literal IPv4 or IPv6 address.--p2p-host-ip=203.0.113.10See also
--p2p-host-dns,--p2p-tcp-port,--enable-upnpRead the guide- --p2p-host-dns=<string>
The DNS address advertised by libp2p. This may be used to advertise an external DNS.
Advertises a DNS name instead of an IP, for hosts with a dynamic public IP. The name is resolved once at startup: the first returned IP goes into the ENR, and libp2p advertises
/dns4/<name>/tcp/<port>(TCP only). If the IP changes later, restart the node or rely on discv5's address detection.--p2p-host-dns=node.example.comSee also
--p2p-host-ipRead the guide- --p2p-local-ip=<string>
The local ip address to listen for incoming data.
Binds libp2p (TCP and QUIC) and the discv5 UDP socket to one local interface address. By default libp2p listens on the first non-loopback interface address the node finds (IPv4 first), and discv5 listens on all interfaces. Set it on machines with several network interfaces, or when the auto-picked address is the wrong one.
--p2p-local-ip=192.168.1.20See also
--p2p-host-ip,--p2p-tcp-port,--p2p-udp-portRead the guide- --p2p-max-peers=<int>
The max number of p2p peers to maintain.
Target number of connected peers; the node keeps looking for peers until it reaches it and refuses new ones above it. At most 80% of the slots go to inbound connections (with a small buffer of 20), so the rest are always outbound peers the node chose itself. Raise it for better subnet coverage on a well-connected server; lower it (for example to 30-50) to save bandwidth and CPU on a home connection.
--min-sync-peersis capped at this value.--p2p-max-peers=100See also
--min-sync-peers,--max-concurrent-dials,--peerRead the guide- --p2p-priv-key=<string>
The file containing the private key to use in communications with other peers.
Path to a file holding the node's secp256k1 network private key as a hex string. The key determines your peer ID and discv5 node ID (which, from Fulu, also decides which data columns you custody). Without this flag, Prysm uses
<datadir>/network-keysif it exists, and otherwise generates a key.Never share one key between two running nodes: they would claim the same peer ID.
--p2p-priv-key=/var/lib/ethereum/beacon/network-keysSee also
--p2p-static-id,--datadirRead the guide- --p2p-quic-port=<int>
The QUIC port used by libp2p.
UDP port for libp2p's QUIC transport. QUIC is on by default and advertised in the ENR alongside TCP; open this port as UDP in your firewall and router. It can be the same number as the TCP port because the protocols differ. Turn QUIC off with
--disable-quic.--p2p-quic-port=13000See also
--p2p-tcp-port,--p2p-udp-port,--disable-quicRead the guide- --p2p-static-id
Enables the peer id of the node to be fixed by saving the generated network key to the default key path.
Saves the generated network key to
<datadir>/network-keysso the peer ID survives restarts. On networks where Fulu is scheduled (mainnet, Hoodi, Sepolia) Prysm already does this by default, because a changing node ID would change which data columns the node custodies, so the flag only matters on networks without Fulu. To start with a new identity, stop the node and delete that file.See also
--p2p-priv-key,--datadirRead the guide- --p2p-tcp-port=<int>
The TCP port used by libp2p.
TCP port libp2p listens on for peer connections (gossip and req/resp). Forward it to this machine and allow it inbound in your firewall so other nodes can connect to you. If you change it, change your port forwarding to match; the port you set is also the one written into your ENR.
--p2p-tcp-port=13000See also
--p2p-quic-port,--p2p-udp-port,--p2p-host-ipRead the guide- --p2p-udp-port=<int>
The UDP port used by the discovery service discv5.
UDP port for discv5 peer discovery. Other nodes find you through this port, so forward and allow it (UDP) for good peer counts. UPnP (
--enable-upnp) does not open this port for you.--p2p-udp-port=12000See also
--p2p-tcp-port,--p2p-quic-port,--no-discoveryRead the guide- --pubsub-queue-size=<int>
The size of the pubsub validation and outbound queue for the node.
Sets both the gossipsub validation queue and the per-peer outbound queue sizes, in messages. When a queue is full, gossip messages are dropped, which shows up as missed attestations or blocks arriving late on busy machines. The default is fine for most setups; a value of 0 or less is replaced with 600 and logs
Invalid pubsub queue size.--pubsub-queue-size=1000See also
--batch-verifier-limit- --relay-node=<string>
The address of relay node. The beacon node will connect to the relay node and advertise their address via the relay node to other peers
Multiaddr of a libp2p circuit relay. Prysm connects to it at startup, keeps that connection alive, and additionally advertises
/p2p-circuitaddresses through it so peers that can't reach you directly can connect through the relay. Relaying is off when this flag is empty. Mostly useful for test setups; public networks don't run public relays for beacon nodes.--relay-node=/ip4/203.0.113.5/tcp/4001/p2p/16Uiu2HAm...See also
--peer- --peer=<string list>
Connect with this peer, this flag may be used multiple times. This peer is recognized as a trusted peer.Accepts enode, multiaddr, and enr formats.
Adds a trusted peer. Prysm dials it at startup, re-dials it whenever the connection drops, never disconnects or prunes it for a bad score, and treats it as a gossipsub direct peer. Repeat the flag or separate addresses with commas. Use it to pair your own nodes, or to always stay connected to a known-good node; the peer's host must also accept your connection (for example, add you as a peer too).
--peer=/ip4/10.0.0.5/tcp/13000/p2p/16Uiu2HAm...See also
--no-discovery,--p2p-colocation-whitelist,--p2p-max-peersRead the guide- --blob-batch-limit=<int>
The amount of blobs the local peer is bounded to request and respond to in a batch.
Rate limit for serving blob sidecars to peers: the node answers up to this many blobs per second per peer, with bursts up to this value times
--blob-batch-limit-burst-factor. It also caps how many blobs are returned for one by-root request. Only relevant for blob sidecars (Deneb and Electra); after Fulu, data columns replace them.--blob-batch-limit=384See also
--blob-batch-limit-burst-factor,--data-column-batch-limit,--block-batch-limit- --blob-batch-limit-burst-factor=<int>
The factor by which blob batch limit may increase on burst.
Multiplier on
--blob-batch-limitthat sets the burst capacity of the per-peer blob rate limiter, and the maximum number of blobs returned for one by-range request.--blob-batch-limit-burst-factor=3See also
--blob-batch-limit- --data-column-batch-limit=<int>
The amount of data columns the local peer is bounded to request and respond to in a batch.
Rate limit for serving PeerDAS data column sidecars: up to this many columns per second per peer, with bursts up to this value times
--data-column-batch-limit-burst-factor. It also caps the size of a by-root data column response. Lower it if serving columns to peers uses too much upload bandwidth.--data-column-batch-limit=4096See also
--data-column-batch-limit-burst-factor,--blob-batch-limit- --data-column-batch-limit-burst-factor=<int>
The factor by which data column batch limit may increase on burst.
Multiplier on
--data-column-batch-limitthat sets the burst capacity of the per-peer data column rate limiter.--data-column-batch-limit-burst-factor=4See also
--data-column-batch-limit- --disable-partial-data-columns
Disables cell-level dissemination for PeerDAS data columns, falling back to full column gossip.
Partial data columns are on by default: the node gossips PeerDAS data columns cell by cell instead of as whole columns, so it can send and receive the cells it has, and builds cells from blobs already in the execution client's mempool when the execution client supports it. This flag falls back to gossiping whole columns.
--partial-data-columns, which turned the feature on in earlier releases, is deprecated and has no effect.--disable-partial-data-columnsSee also
--supernode,--data-column-batch-limit- --block-batch-limit=<int>
The amount of blocks the local peer is bounded to request and respond to in a batch. Maximum 128
Blocks per request during initial sync, and the per-peer rate (blocks per second) at which the node serves blocks to others. Values above the protocol maximum (
MAX_REQUEST_BLOCKS_DENEB, 128) are lowered for requests. Raising it can speed up sync from fast peers at the cost of memory and more bursts of bandwidth.--block-batch-limit=64- --block-batch-limit-burst-factor=<int>
The factor by which block batch limit may increase on burst.
Multiplier on
--block-batch-limitthat sets the burst capacity of the block rate limiter, both for serving peers and for the node's own initial-sync fetcher.--block-batch-limit-burst-factor=2See also
--block-batch-limit- --max-concurrent-dials=<uint64>
Sets the maximum number of peers that a node will attempt to dial with from discovery. By default we will dials as many peers as possible.
Caps how many peers found through discovery the node dials at the same time. The default
0means no limit. Set a limit if a burst of outgoing connection attempts overwhelms a consumer router (NAT table) or triggers abuse detection at your provider.--max-concurrent-dials=10See also
--p2p-max-peersRead the guide- --minimum-peers-per-subnet=<uint64>
Sets the minimum number of peers that a node will attempt to peer with that are subscribed to a subnet.
For each attestation, sync committee or data column subnet the node needs, it searches discovery for more peers until at least this many connected peers are on the subnet. Raising it improves gossip reliability for your validators' duties but means more discovery work and peer churn; subnets short of peers are logged at debug level as
Not enough connected peers.--minimum-peers-per-subnet=6See also
--subscribe-all-subnets,--p2p-max-peersRead the guide- --min-sync-peers=<int>
The required number of valid peers to connect with before syncing.
Number of peers that must agree on the chain before initial sync starts, and the minimum number used when choosing which peers to sync from. It's capped at
--p2p-max-peersand, internally, at 15. Setting it to0skips initial sync and marks the node synced immediately, which only makes sense for a single-node devnet.--min-sync-peers=3- --subscribe-all-subnets
Subscribe to all possible attestation and sync subnets.
Subscribes to all 64 attestation subnets and all sync committee subnets, instead of the 2 long-lived subnets derived from your node ID plus those your validators need. It lets the node see (and aggregate from) every attestation, which helps large validator operators, relays and data collectors, but it uses much more bandwidth and CPU. It does not affect data column custody; use
--supernodefor that.Expect several times more gossip traffic; not recommended on home connections.
See also
--minimum-peers-per-subnet,--supernodeRead the guide- --supernode
Custodies all data. Cannot be used with
--semi-supernode.Custodies, stores and serves all 128 data column groups instead of the minimum for your validator count, and subscribes to every data column subnet. It's what you want for a node that serves full blob data (for example, an RPC provider or a node backing a rollup). It needs far more disk and bandwidth. Deprecated alias:
--subscribe-all-data-subnets.The choice is stored in the database: if you remove the flag later, the node logs a warning and keeps acting as a supernode. To go back to normal custody, resync with an empty database.
See also
--semi-supernode,--data-column-path,--subscribe-all-subnetsRead the guide- --semi-supernode
Custodies just enough data to serve the blobs and blob sidecars beacon API. Cannot be used with
--supernode.Custodies the minimum number of column groups needed to reconstruct all blobs (half of them: 64 of 128), so the Beacon API blob and blob sidecar endpoints can always answer, at roughly half the storage of
--supernode. Starting with both--supernodeand--semi-supernodefails withcannot set both.The custody group count stored in the database never decreases. Removing this flag doesn't reduce custody; resync with an empty database to do that.
See also
--supernode,--data-column-pathRead the guide
Database and storage
- --backfill-batch-size=<uint64>
Number of blocks per backfill batch. A larger number will request more blocks at once from peers, but also consume more system memory to hold batches in memory during processing. This has a multiplicative effect with backfill-worker-count.
Blocks requested from a peer per backfill batch. Memory use grows with
batch size × worker count × block size, so raise it only if backfill is slow and you have RAM to spare.--backfill-batch-size=64See also
--backfill-worker-count,--enable-backfillRead the guide- --backfill-worker-count=<int>
Number of concurrent backfill batch requests. A larger number will better utilize network resources, up to a system-dependent limit, but will also consume more system memory to hold batches in memory during processing. Multiply by backfill-batch-size and average block size (~2MB before deneb) to find the right number for your system. This has a multiplicative effect with backfill-batch-size.
Number of backfill batches downloaded in parallel. More workers use more bandwidth and memory; the effect multiplies with
--backfill-batch-size.--backfill-worker-count=4See also
--backfill-batch-size,--enable-backfillRead the guide- --enable-backfill
Backfill will only be enabled when this flag is specified on a node using checkpoint sync.
After a checkpoint sync, downloads the blocks older than the checkpoint (and the blobs and data columns still inside their retention window) in the background, so the node can serve them to peers. By default it goes back
MIN_EPOCHS_FOR_BLOCK_REQUESTS(33024 epochs, about 5 months on mainnet); it does nothing on a node synced from genesis. Deprecated alias:--enable-experimental-backfill.See also
--backfill-oldest-slot,--backfill-batch-size,--backfill-worker-count,--checkpoint-sync-urlRead the guide- --clear-db
Prompt for clearing any previously stored data at the data directory.
Asks for confirmation at startup, then deletes the beacon database, the saved genesis state file, blob storage, data column storage and (if
--slasheris set) the slasher database, and starts syncing from scratch. Files in thebackupsdirectory are kept. Remove the flag after the run you needed it for.See also
--force-clear-db,--datadir,--checkpoint-sync-urlRead the guide- --datadir=<string>
Data directory for the databases.
Root of everything the beacon node stores: the database in
beaconchaindata/beaconchain.db, the genesis state file (genesis-<time>-<root>.ssz), and by default theblobs/anddata-columns/directories. The default depends on the OS:~/.eth2on Linux,~/Library/Eth2on macOS,%LOCALAPPDATA%\Eth2on Windows.Use a separate
--datadirper network. Prysm refuses a database whose stored deposit contract differs from the selected network's (database contract is … but tried to run with …), but mainnet and Hoodi use the same address, so that check doesn't catch a mix-up between those two.--datadir=/var/lib/ethereum/beaconSee also
--blob-path,--data-column-path,--slasher-datadir,--clear-dbRead the guide- --force-clear-db
Clears any previously stored data at the data directory.
Same as
--clear-db, but deletes without asking. Use it in non-interactive setups (systemd, Docker) where there is no terminal to answer the prompt.If you leave this flag in a service definition, the node wipes its database and resyncs on every restart.
See also
--clear-db,--datadirRead the guide- --restore-source-file=<string>
Filepath to the backed-up database file which will be used to restore the database
Only read by the
beacon-chain db restoresubcommand; setting it on a normal beacon node run does nothing. Point it at a copy of abeaconchain.dbfile.See also
--restore-target-dir,--datadirRead the guide- --restore-target-dir=<string>
Target directory of the restored database
Only read by the
beacon-chain db restoresubcommand; setting it on a normal beacon node run does nothing. Use the same value you pass to--datadir.See also
--restore-source-file,--datadirRead the guide- --backfill-oldest-slot=<uint64>
Specifies the oldest slot that backfill should download. If this value is greater than current_slot - MIN_EPOCHS_FOR_BLOCK_REQUESTS, it will be ignored with a warning log.
Makes backfill go further back than the spec minimum, down to this slot (for example
1for the full history). A value newer thancurrent slot - MIN_EPOCHS_FOR_BLOCK_REQUESTSis ignored, with the warningIgnoring user-specified slot > MIN_EPOCHS_FOR_BLOCK_REQUESTS.--backfill-oldest-slot=1See also
--enable-backfillRead the guide- --blob-retention-epochs=<uint64>
Override the default blob retention period (measured in epochs). The node will exit with an error at startup if the value is less than the default of 4096 epochs.
How many epochs of blobs and data columns the node keeps before deleting them. The same value applies to both; the minimum is the spec value of 4096 epochs (about 18 days), and a lower value stops the node at startup. Raise it if you run an indexer or L2 tooling that needs older blob data. Deprecated alias:
--extend-blob-retention-epoch.--blob-retention-epochs=8192See also
--blob-path,--data-column-path,--supernodeRead the guide- --beacon-db-pruning
Enables pruning of beacon db beyond MIN_EPOCHS_FOR_BLOCK_REQUESTS duration. This is an opt-in feature, and should only be enabled if operators doesn't require historical data.
Starts a pruner that deletes blocks and states older than the retention window from the database, once per epoch (at mid-epoch), after initial sync and backfill have finished. Blobs and data columns are always pruned by their own retention setting, with or without this flag.
Pruned history is gone: the node can no longer answer API queries for blocks or states before the window. Don't enable it on a node that serves historical data.
See also
--pruner-retention-epochs,--enable-backfillRead the guide- --pruner-retention-epochs=<uint64>
Specifies the retention period for the pruner service in terms of epochs. If this value is less than MIN_EPOCHS_FOR_BLOCK_REQUESTS, it will be ignored.
How many epochs of blocks and states the pruner keeps. Only used with
--beacon-db-pruning. The minimum isMIN_EPOCHS_FOR_BLOCK_REQUESTS + 1(33025 epochs on mainnet); lower values are replaced by the minimum with the warningRetention period too low, ignoring and using minimum required value.--pruner-retention-epochs=50000See also
--beacon-db-pruningRead the guide- --slots-per-archive-point=<int>
The slot durations of when an archived state gets saved in the beaconDB.
How often a full finalized state is saved to the database (default every 2048 slots, 64 epochs). Any other historical state is regenerated by replaying blocks from the closest saved one, so a lower value makes historical state queries faster at the cost of much more disk. Not used when
--enable-state-diffis on, which stores history differently.An explicit value also overrides the 128 slots set by
--historical-slasher-node.--slots-per-archive-point=256See also
--historical-slasher-node,--enable-state-diff- --blob-storage-layout=<string>
Dictates how to organize the blob directory structure on disk, available options are: flat, by-epoch.
Only affects blob sidecars, which are stored for the Deneb and Electra forks; from Fulu on, data column sidecars are stored separately and this flag doesn't apply to them.
by-epochgroups blob files in per-epoch directories, which makes startup and pruning faster;flatis the old one-directory-per-block layout. Without the flag, Prysm detects the layout already on disk and warns if it isflat; set--blob-storage-layout=by-epochonce to migrate it on the next restart.--blob-storage-layout=by-epochSee also
--blob-pathRead the guide- --blob-path=<path>
Location for blob storage. Default location will be a 'blobs' directory next to the beacon db.
Directory for blob sidecars (Deneb to Electra); defaults to
<datadir>/blobs. Useful to put blobs on a different disk than the database. Since Fulu, new blob data is stored as data columns under--data-column-pathinstead.--blob-path=/mnt/bulk/prysm/blobsSee also
--data-column-path,--blob-storage-layout,--blob-retention-epochsRead the guide- --data-column-path=<path>
Location for data column storage. Default location will be a 'data-columns' directory next to the beacon db.
Directory for PeerDAS data column sidecars (Fulu onward); defaults to
<datadir>/data-columns. How much it holds depends on how many columns the node custodies: a--supernodestores all of them.--data-column-path=/mnt/bulk/prysm/data-columnsSee also
--blob-path,--blob-retention-epochs,--supernode,--semi-supernodeRead the guide
Block building and MEV
- --local-block-value-boost=<uint64>
A percentage boost for local block construction as a Uint64. This is used to prioritize local block construction over relay/builder block constructionBoost is an additional percentage to multiple local block value. Use builder block if: builder_bid_value * 100 > local_block_value * (local-block-value-boost + 100)
Handicaps builder bids against your locally built block. The beacon node picks the builder block only if
builder_bid_gwei * builder_boost_factor > local_value_gwei * (100 + local-block-value-boost), wherebuilder_boost_factoris the per-request value sent by the validator client (default 100). The check runs after--min-builder-bidand--min-builder-to-local-difference, and applies to blocks up to the Fulu fork.Set it to 0 if you want the builder block whenever it pays more, however slightly. If you also send a non-default
builder_boost_factorfrom the validator client, both boosts apply and the node logs a warning.--local-block-value-boost=20See also
--min-builder-bid,--min-builder-to-local-difference,--http-mev-relayRead the guide- --max-builder-consecutive-missed-slots=<int>
Number of consecutive skip slot to fallback from using relay/builder to local execution engine for block construction
First circuit breaker: if the gap between the proposal slot and the highest slot the node has received a block for reaches this number, the node stops asking the relay and builds the block locally. It protects chain liveness when relays fail. The node logs
Circuit breaker activated due to missing consecutive slotwhen it trips.--max-builder-consecutive-missed-slots=3See also
--max-builder-epoch-missed-slots,--http-mev-relayRead the guide- --max-builder-epoch-missed-slots=<int>
Number of total skip slot to fallback from using relay/builder to local execution engine for block construction in last epoch rolling window
Second circuit breaker: if the number of empty slots in the last 32 slots (a rolling epoch window) reaches this number, the node builds locally instead of using the relay. It logs
Circuit breaker activated due to missing enough slots last epochwhen it trips.--max-builder-epoch-missed-slots=5See also
--max-builder-consecutive-missed-slots,--http-mev-relayRead the guide- --http-mev-relay=<string>
A MEV builder relay string http endpoint, this will be used to interact MEV builder network using API defined in: https://ethereum.github.io/builder-specs/#/Builder
Point this at MEV-Boost (or another Builder API endpoint), not at an individual relay. With it set, the node asks the builder for a bid on proposals from validators that registered with the builder (validator client
--enable-builderor the builder section of the proposer settings file); other proposals, and proposals where the circuit breaker is tripped, use the local execution client.--http-mev-relay=http://127.0.0.1:18550See also
--disable-builder-ssz,--builder-header-timeout,--local-block-value-boost,--max-builder-consecutive-missed-slotsRead the guide- --min-builder-bid=<uint64>
An absolute value in Gwei that the builder bid has to have in order for this beacon node to use the builder's block. Anything less than this value and the beacon will revert to local building.
Floor for builder bids, in Gwei. If a bid is below this value the node uses the local payload and logs
Proposer: using local execution payload because min bid not attained. 1 ETH is1000000000Gwei. Applies to blocks up to the Fulu fork.--min-builder-bid=10000000See also
--min-builder-to-local-difference,--local-block-value-boostRead the guide- --min-builder-to-local-difference=<uint64>
An absolute value in Gwei that the builder bid has to have in order for this beacon node to use the builder's block. Anything less than this value and the beacon will revert to local building.
When the builder bid is below the local block value plus this many Gwei, the node builds locally and logs
Proposer: using local execution payload because min difference with local value was not attained. It is checked after--min-builder-bidand before--local-block-value-boost. Applies to blocks up to the Fulu fork.--min-builder-to-local-difference=5000000See also
--min-builder-bid,--local-block-value-boostRead the guide- --builder-header-timeout=<duration>
Timeout to use when fetching a block header from the builder API, as a duration (e.g. 1s, 2s, 2500ms). Must be greater than 0. Only effective up to the Fulu fork.
How long the node waits for the
getHeaderresponse from MEV-Boost before giving up and proposing the local block. Accepts Go durations (950ms,1s). Zero or negative values stop the node at startup, and any override logs a warning at startup.Raising it delays your block. The default already matches the builder spec's proposal delay tolerance of 1 second; a much higher value risks a missed or orphaned proposal.
--builder-header-timeout=1sSee also
--http-mev-relayRead the guide- --builder-bid-timeout=<duration>
Timeout to use when fetching execution payload bids from the builder API, as a duration (e.g. 600ms, 1s). Must be greater than 0. Only effective from the Gloas fork onward.
From the Gloas fork on, how long the node waits for execution payload bids from builders when it builds a block. Accepts Go durations (
600ms,1s). Must be greater than 0. Has no effect before Gloas;--builder-header-timeoutplays that role for MEV-Boost.Raising it delays your block, which risks a missed or orphaned proposal.
--builder-bid-timeout=600msSee also
--builder-header-timeout- --suggested-fee-recipient=<string>
Post bellatrix, this address will receive the transaction fees produced by any blocks from this node. Default to junk whilst bellatrix is in development state. Validator client can override this value through the preparebeaconproposer api.
Fallback fee recipient for blocks proposed through this node. A fee recipient sent by the validator client (from its
--suggested-fee-recipientor proposer settings file) takes precedence; this value is used when the validator client sends none or sends the zero address. Without it, the default is the burn address and the node logs a warning at startup; a non-checksummed address is accepted with a warning.An invalid address is ignored with only a warning (
... is not a valid fee recipient address), leaving the burn address as the fallback. Check theDefault fee recipient is set toline at startup.--suggested-fee-recipient=0x0000000000000000000000000000000000000000See also
--http-mev-relayRead the guide- --disable-builder-ssz
Disables SSZ encoding for Builder API requests and responses, using JSON instead.
By default the node talks SSZ to the Builder API and, if the builder answers 415 or 406, automatically retries in JSON and keeps using JSON for later requests. Use this flag only if your builder or MEV-Boost version misbehaves with SSZ in another way.
See also
--http-mev-relayRead the guide- --builder-allowed-failures=<uint64>
Number of payload delivery failures a builder is allowed before this node blacklists it.
From the Gloas fork on, the builder circuit breaker blacklists a builder that wins an auction but doesn't deliver its payload. This sets how many such failures a builder is allowed before it's blacklisted.
0(default) blacklists it on the first failure.--builder-allowed-failures=1See also
--builder-critical-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker- --builder-critical-failures=<uint64>
Failure count at which a builder earns the longer blacklist set by
--builder-critical-blacklist-period.From the Gloas fork on, the failure count at which a builder is blacklisted for the longer
--builder-critical-blacklist-periodinstead of--builder-blacklist-period.--builder-critical-failures=3See also
--builder-allowed-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker- --builder-blacklist-period=<uint64>
Number of epochs a builder stays blacklisted on its first offense. Must be greater than 0.
From the Gloas fork on, how many epochs a builder stays blacklisted after its first payload delivery failure. Must be greater than 0.
--builder-blacklist-period=2See also
--builder-allowed-failures,--builder-critical-failures,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker- --builder-critical-blacklist-period=<uint64>
Number of epochs a builder stays blacklisted once it reaches
--builder-critical-failures.From the Gloas fork on, how many epochs a builder stays blacklisted once it reaches
--builder-critical-failuresfailures. The default, 256 epochs, is a bit more than a day.--builder-critical-blacklist-period=512See also
--builder-allowed-failures,--builder-critical-failures,--builder-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker- --builder-relay-blacklist-period=<uint64>
Maximum number of epochs a direct connection endpoint stays banned for serving a builder that failed to reveal a payload. Never exceeds the offending builder's own blacklist.
From the Gloas fork on, the circuit breaker also bans the builder endpoints that served a builder which failed to deliver its payload. This sets the maximum number of epochs an endpoint stays banned; it never exceeds the failing builder's own blacklist.
--builder-relay-blacklist-period=16See also
--builder-allowed-failures,--builder-critical-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--disable-builder-relay-circuit-breaker- --builder-failure-backoff-period=<uint64>
Number of epochs without a failure after which a builder's failure counter resets to zero.
From the Gloas fork on, the number of epochs without a failure after which a builder's failure count goes back to zero.
--builder-failure-backoff-period=10See also
--builder-allowed-failures,--builder-critical-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-critical-failed-builders,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker- --builder-critical-failed-builders=<uint64>
Number of concurrently blacklisted builders that forces this node to fall back to self-building. Must be greater than 0.
From the Gloas fork on, when this many builders are blacklisted at the same time, the node stops using builders and builds every block locally. Must be greater than 0.
--builder-critical-failed-builders=5See also
--builder-allowed-failures,--builder-critical-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-relay-blacklist-period,--disable-builder-relay-circuit-breaker
Sync
- --checkpoint-block=<path>
Rather than syncing from genesis, you can start processing from a ssz-serialized BeaconState+Block. This flag allows you to specify a local file containing the checkpoint Block to load.
The block matching
--checkpoint-state, as a local SSZ file. Both files must be given together, and the block must be the one the state was built from.--checkpoint-block=/data/block_mainnet_fulu_12345678-0x….sszSee also
--checkpoint-state,--checkpoint-sync-urlRead the guide- --checkpoint-sync-url=<string>
URL of a synced beacon node to trust in obtaining checkpoint sync data. As an additional safety measure, it is strongly recommended to only use this option in conjunction with
--weak-subjectivity-checkpointflagDownloads the latest finalized state and its block from this Beacon API (
/eth/v2/debug/beacon/states/finalized) and starts from there, so the node is synced in minutes instead of days. It is only used on an empty database: if one already exists, the log showsOrigin checkpoint found in the database, ignoring checkpoint sync flags. When--genesis-beacon-api-urlis not set, the same URL is also used to fetch the genesis state.You trust this endpoint to give you the canonical chain. Use a provider you trust, and compare the finalized block root with a second source.
--checkpoint-sync-url=https://hoodi.beaconstate.ethstaker.ccSee also
--genesis-beacon-api-url,--weak-subjectivity-checkpoint,--enable-backfill,--checkpoint-stateRead the guide- --checkpoint-state=<path>
Rather than syncing from genesis, you can start processing from a ssz-serialized BeaconState+Block. This flag allows you to specify a local file containing the checkpoint BeaconState to load.
Starts from a finalized state stored in a local SSZ file instead of a URL, for example one saved with
prysmctl checkpoint-sync download. It needs--checkpoint-blocktoo; the node refuses to start with only one of the two. If--checkpoint-sync-urlis also set, the URL wins and the files are ignored.--checkpoint-state=/data/state_mainnet_fulu_12345678-0x….sszSee also
--checkpoint-block,--checkpoint-sync-url,--genesis-stateRead the guide- --weak-subjectivity-checkpoint=<string>
Input in `block_root:epoch_number` format. This guarantees that syncing leads to the given Weak Subjectivity Checkpoint along the canonical chain. If such a sync is not possible, the node will treat it as a critical and irrecoverable failure
A block root and epoch the chain must pass through. Once the node finalizes past that epoch, it checks that the block is in its database and finalized, and logs
Weak subjectivity check has passed!!; otherwise it exits withCould not verify weak subjectivity checkpoint. Use it with checkpoint sync to detect a dishonest checkpoint provider. A0xprefix on the root is accepted.--weak-subjectivity-checkpoint=0x<BLOCK_ROOT>:<EPOCH>See also
--checkpoint-sync-url,--genesis-beacon-api-urlRead the guide- --genesis-beacon-api-url=<string>
URL of a synced beacon node to trust for obtaining genesis state. As an additional safety measure, it is strongly recommended to only use this option in conjunction with
--weak-subjectivity-checkpointflagFetches the genesis state from this Beacon API (the debug state endpoint for
genesis) when there is none in the data directory. You rarely need it: it defaults to the value of--checkpoint-sync-url, and mainnet's genesis is embedded. Set it for a testnet you sync from genesis without a local genesis file.--genesis-beacon-api-url=https://hoodi.beaconstate.ethstaker.ccSee also
--genesis-state,--checkpoint-sync-url,--weak-subjectivity-checkpointRead the guide- --genesis-state=<path>
Load a genesis state from ssz file. Testnet genesis files can be found in the eth2-clients/eth2-testnets repository on github.
Loads the genesis state from a local SSZ file. Only mainnet's genesis state is built into Prysm; other networks get it from this flag,
--genesis-beacon-api-urlor--checkpoint-sync-url. It is only needed once: the state is saved in the data directory and reused. This flag takes priority over--genesis-beacon-api-url.--genesis-state=/data/hoodi/genesis.sszSee also
--genesis-beacon-api-url,--checkpoint-sync-url,--chain-config-fileRead the guide
Execution client connection
- --contract-deployment-block=<int>
The eth1 block in which the deposit contract was deployed.
Execution block number where Prysm starts reading deposit contract logs. The default shown is mainnet's; each network flag sets its own value (0 for Hoodi, 1273020 for Sepolia). Only needed for custom networks, and only until EIP-6110 deposit requests are active.
--contract-deployment-block=0See also
--deposit-contract,--eth1-header-req-limit- --deposit-contract=<string>
Deposit contract address. Beacon chain node will listen logs coming from the deposit contract to determine when validator is eligible to participate.
Overrides the deposit contract address of the selected network. The default shown is mainnet's; each network flag sets the right address for its network. The address is saved in the database, and the node refuses to start if it later differs (mainnet and Hoodi share the same address, so this doesn't tell those two apart). Only needed for custom networks.
--deposit-contract=0x0000000000000000000000000000000000000000See also
--contract-deployment-block,--chain-id,--chain-config-file- --engine-endpoint-timeout-seconds=<uint64>
Sets the execution engine timeout (seconds) for execution payload semantics (forkchoiceUpdated, newPayload)
Timeout, in seconds, for
engine_newPayloadandengine_forkchoiceUpdatedcalls. When not set, Prysm uses 8 seconds (the Engine API spec value); the0shown as default means "not set". Raise it only if a slow execution client times out while importing blocks.Explicitly setting
0means a zero timeout, so every call fails.--engine-endpoint-timeout-seconds=12See also
--execution-endpointRead the guide- --eth1-header-req-limit=<uint64>
Sets the maximum number of headers that a deposit log query can fetch.
Maximum block range per request when reading deposit contract logs and headers from the execution client; Prysm shrinks the range automatically when requests fail. Lower it if your execution client or provider rejects large log queries. It only matters until the chain uses EIP-6110 deposit requests (Electra): after that, Prysm stops reading deposit logs.
--eth1-header-req-limit=150See also
--contract-deployment-block,--execution-endpointRead the guide- --execution-endpoint=<string>
An execution client http endpoint. Can contain auth header as well in the format
Engine API endpoint of your execution client, normally its authenticated port 8551. Also accepts an IPC socket path (a plain path or
ipc://), which needs no JWT. If the endpoint is down, Prysm keeps retrying and logsConnected to new endpointonce it reconnects. AnAuthorizationsuffix after a comma (<URL>,Basic <USER:PASSWORD>) is a legacy option: with--jwt-secretset, Prysm replaces it with JWT authentication.--execution-endpoint=http://localhost:8551See also
--jwt-secret,--execution-headers,--engine-endpoint-timeout-secondsRead the guide- --execution-headers=<string>
A comma separated list of key value pairs to pass as HTTP headers for all execution client calls. Example:
--execution-headers=key1=value1,key2=value2Extra HTTP headers sent with every call to the execution client, for example an API key for an authenticating proxy or hosted endpoint. Pairs are split on
,and each key on the first=, so values can contain=but not commas. A pair without=is skipped with a warning. AnAuthorizationheader set here is overwritten by the JWT on every request when--jwt-secretis set.--execution-headers=X-Api-Key=<API_KEY>See also
--execution-endpointRead the guide- --jwt-secret=<string>
REQUIRED if connecting to an execution node via HTTP. Provides a path to a file containing a hex-encoded string representing a 32 byte secret used for authentication with an execution node via HTTP. If this is not set, all requests to execution nodes via HTTP for consensus-related calls will fail, which will prevent your validators from performing their duties. This is not required if using an IPC connection.
Path to the file with the shared secret the execution client also uses: 32 bytes as hex, with or without
0x. Whitespace around it is ignored; an empty, unreadable or wrong-length file stops the node at startup. On success it logsFinished reading JWT secret from <path>. Create one withbeacon-chain generate-auth-secretoropenssl rand -hex 32.Without it, HTTP calls to the execution client get
401 Unauthorized, and your validators can't do their duties.--jwt-secret=/var/lib/ethereum/jwt.hexSee also
--execution-endpoint,--jwt-idRead the guide- --jwt-id=<string>
JWT claims id. Could be used to identify the client
Sets the optional
idclaim in every JWT sent to the execution client. It doesn't change authentication; use it to tell several consensus clients apart in the execution client's logs.--jwt-id=prysm-node-1See also
--jwt-secretRead the guide
Monitoring
- --disable-monitoring
Disables monitoring service.
Turns off the Prometheus HTTP server on
--monitoring-host:--monitoring-port. That also removes/healthz,/goroutinezand/p2p, which are served on the same port, so don't use it if a health check or dashboard depends on them.- --enable-tracing
Enables OpenTelemetry tracing.
Starts an OpenTelemetry tracer that exports spans over OTLP/HTTP to
--tracing-endpointwith service namebeacon-chain. It adds CPU and network overhead, so enable it for debugging rather than permanently.--enable-tracingSee also
--tracing-endpoint,--trace-sample-fraction,--tracing-process-name- --monitoring-host=<string>
Host used for listening and responding metrics for prometheus.
Interface the metrics server binds to. The same server also serves
/healthz,/goroutinezand/p2p. Set0.0.0.0only if Prometheus runs on another machine or in another container, and firewall the port.--monitoring-host=0.0.0.0See also
--monitoring-port,--disable-monitoringRead the guide- --trace-sample-fraction=<float64>
Head-sampling ratio applied to every trace started by the process. 1.0 keeps all traces.
Fraction of traces kept, from
0to1. It is a head-based ratio sampler on the trace ID, so a trace is kept or dropped as a whole. Lower it on busy nodes to reduce overhead; only used with--enable-tracing.--trace-sample-fraction=0.05See also
--enable-tracing,--tracing-endpoint- --tracing-endpoint=<string>
OTLP/HTTP endpoint that traces are exported to (e.g. an OpenTelemetry Collector or a Tempo receiver).
Full URL, including the path, that spans are posted to with the OTLP/HTTP exporter. The default points at the old Jaeger collector path; for an OpenTelemetry Collector, Tempo or recent Jaeger, use the OTLP/HTTP receiver, usually port 4318 with path
/v1/traces.--tracing-endpoint=http://127.0.0.1:4318/v1/tracesSee also
--enable-tracing,--trace-sample-fraction,--tracing-process-name- --tracing-process-name=<string>
Name to apply to tracing tag `process_name`.
Adds a
process_nameresource attribute (and setsservice.instance.id) on every exported span, so you can tell several beacon nodes apart in the same tracing backend.--tracing-process-name=beacon-hoodi-1See also
--enable-tracing,--tracing-endpoint- --monitor-indices=<int list>
List of validator indices to track performance
Starts the validator monitor for these validator indices (not public keys). After initial sync the node logs events such as
Proposed beacon block was included,Attestation includedand a periodicAggregated performance since launch, and exportsmonitor_*Prometheus metrics labeled byvalidator_index. Pass a comma-separated list or repeat the flag.--monitor-indices=1234,5678See also
--monitoring-portRead the guide- --monitoring-port=<int>
Port used to listening and respond metrics for Prometheus.
Port of the metrics server. Prometheus scrapes
/metricshere; the same port serves/healthz(HTTP 503 if any service reports an error),/goroutinez(goroutine dump) and/p2p(peer summary). If the port is taken, the node keeps running without metrics and logsPort already in use; cannot start prometheus service.--monitoring-port=8080See also
--monitoring-host,--disable-monitoring,--healthz-max-goroutinesRead the guide
Slasher
- --historical-slasher-node
Enables required flags for serving historical data to a slasher client. Results in additional storage usage
Prepares a beacon node to feed historical data to a slasher: it saves a full state every 4 epochs (128 slots) instead of every 2048 slots, and raises the maximum API page size to 4096 items. This uses much more disk.
An explicit
--slots-per-archive-pointoverrides the 128-slot setting.See also
--slasher,--slots-per-archive-point,--rpc-max-page-sizeRead the guide- --slasher-datadir=<string>
Directory for the slasher database
Base directory for the slasher database, stored at
<dir>/beaconchaindata/slasher.db. Defaults to--datadir, so the slasher database sits next to the beacon database; set it to put the slasher on another disk.--slasher-datadir=/mnt/slasherSee also
--slasher,--datadirRead the guide- --slasher
Enables a slasher in the beacon node for detecting slashable offenses.
Runs a slasher inside the beacon node: it watches attestations and blocks from gossip, detects double votes, surround votes and double proposals, and adds the slashings to the pool so they get included in blocks. It starts detecting only after the node has synced (
Completed chain sync, starting slashing detection), and needs extra disk, memory and CPU. It is not required to protect your own validators; slashing protection lives in the validator client.See also
--slasher-datadir,--historical-slasher-node,--disable-broadcast-slashingsRead the guide
Logging
- --disable-log-colors
Disable color formatting for terminal logs.
Removes ANSI color codes from terminal output in the
textformat. Useful when stdout goes to a file or log collector that shows escape codes. Files written with--log-fileand the debug log file never contain colors.See also
--log-format,--log-fileRead the guide- --log-format=<string>
Specifies log formatting. Supports: text, json, fluentd, journald.
text(default) is the human-readable format and the only one that honors--log.vmodule.jsonandfluentdwrite one JSON object per line to stderr for log shippers.journaldsends entries straight to the systemd journal; it works only on Linux, and if the journal isn't reachable the node logs a warning and ignores the setting.--log-format=jsonSee also
--log-file,--verbosity,--disable-log-colorsRead the guide- --log-file=<string>
Specifies log file name, relative or absolute.
Also writes logs to this file, appending on restart and creating parent directories as needed. With
--log-format=textthe file gets uncolored Prysm text logs that honor--log.vmodule; with other formats the file is written in logrus's plainkey=valueformat rather than JSON. Prysm does not rotate this file, so use logrotate or similar.--log-file=/var/log/prysm/beacon.logSee also
--log-format,--disable-ephemeral-log-fileRead the guide- --verbosity=<string>
Logging verbosity. (trace, debug, info, warn, error, fatal, panic)
Minimum level printed to the terminal and to
--log-file.debugis useful for troubleshooting but very noisy;traceis for developers. Independently of this flag, the node keeps a debug-level log file in<datadir>/logs/unless you pass--disable-ephemeral-log-file.--verbosity=debugSee also
--log.vmodule,--log-format,--disable-ephemeral-log-fileRead the guide- --disable-ephemeral-log-file
Disables the creation of a debug log file that keeps 24 hours of logs.
By default the node writes a debug-level, uncolored copy of its logs to
<datadir>/logs/beacon-chain.log, whatever--verbosityis set to. The file rotates at 250 MB, keeps one backup, and removes files older than one day. Disable it to save disk writes, at the cost of losing the debug history support usually asks for.See also
--verbosity,--log-file,--datadirRead the guide- --log.vmodule=<string list>
Per-package log verbosity. packagePath=level entries separated by commas.
Overrides
--verbosityfor specific packages. Keys are Prysm package paths without the module prefix, as shown in thepackagefield of JSON logs (for examplebeacon-chain/sync). An entry also covers its subpackages, and the longest match wins. Wildcards, leading or trailing slashes and duplicates are rejected at startup. Only thetextlog format honors it.--log.vmodule=beacon-chain/sync=debug,beacon-chain/p2p=traceSee also
--verbosity,--log-formatRead the guide
Feature flags
- --save-invalid-block-temp
Writes invalid blocks to temp directory.
When a gossiped block fails validation, Prysm writes it as SSZ to the operating system's temp directory (
$TMPDIRor/tmpon Linux) asbeacon_block_<slot>.sszand logsWriting invalid block to disk at <path>. Use it to capture a block for a bug report; it is safe in production but files accumulate until you delete them.See also
--save-invalid-blob-temp- --save-invalid-blob-temp
Writes invalid blobs to temp directory.
When a gossiped blob sidecar fails validation, Prysm writes it as SSZ to the temp directory as
blob_sidecar_<block root>_<slot>_<index>.sszand logsWriting invalid blob sidecar to disk at <path>. A debugging aid for bug reports; files are never cleaned up automatically.See also
--save-invalid-block-temp- --disable-grpc-connection-logging
WARNING: The gRPC API will remain the default and fully supported through v8 (expected in 2026) but will be eventually removed in favor of REST API.. Disables displaying logs for newly connected grpc clients.
Suppresses the
gRPC client connected to beacon nodeinfo log that Prysm prints the first time each gRPC client address connects. Useful when many short-lived clients (or a load balancer) connect and the line floods your logs. It only affects logging.See also
--rpc-host,--rpc-port- --sepolia
Runs Prysm configured for the Sepolia test network.
Loads the Sepolia chain config, bootnodes and deposit contract (deployed at execution block 1273020) and logs
Running on the Sepolia Beacon Chain Testnet. Sepolia has a permissioned validator set, so it suits application testing rather than staking practice. Only mainnet's genesis state is embedded: also pass--checkpoint-sync-url,--genesis-beacon-api-urlor--genesis-state.--sepolia --checkpoint-sync-url=<SEPOLIA_BEACON_NODE_URL>See also
--hoodi,--checkpoint-sync-url,--genesis-stateRead the guide- --hoodi
Runs Prysm configured for the Hoodi test network.
Loads the Hoodi chain config (deposit chain ID 560048), its bootnodes and deposit contract, and logs
Running on the Hoodi Beacon Chain Testnet. Hoodi is the public testnet for practicing staking. Only mainnet's genesis state is embedded, so also pass--checkpoint-sync-url(which Prysm also uses to fetch genesis),--genesis-beacon-api-urlor--genesis-state. Use the same network flag on the beacon node and the validator client.--hoodi --checkpoint-sync-url=https://hoodi.beaconstate.ethstaker.ccSee also
--checkpoint-sync-url,--genesis-beacon-api-url,--genesis-state,--sepoliaRead the guide- --mainnet
Runs on Ethereum main network. This is the default and can be omitted.
Mainnet is what Prysm runs when no other network flag is given, so this flag changes nothing; it exists so scripts can name the network explicitly. Prysm refuses to start if you pass more than one network flag (for example
--mainnet --hoodi). Without a network flag but with--chain-config-file, Prysm runs a custom network and logs a warning instead.See also
--hoodi,--sepolia,--chain-config-fileRead the guide- --disable-peer-scorer
(Danger): Disables P2P peer scorer. Do NOT use this in production!
Turns off peer scoring: gossip scores no longer mark peers as bad, and peer pruning falls back to an older algorithm that ignores scores. Your node then keeps misbehaving peers connected. Only useful for isolating P2P bugs on devnets.
Never use this on mainnet or a public testnet; it removes your node's defense against spamming and faulty peers.
- --disable-broadcast-slashings
Disables broadcasting slashings submitted to the beacon node.
Stops the node from gossiping proposer and attester slashings, both those submitted through the Beacon API (or gRPC) and the proposer slashings it builds when it sees two blocks for the same slot. The slashings still go into the local pool, so your own proposals still include them. Use it on test setups where you don't want slashings to propagate; there is no reason to set it in production.
See also
--slasher- --disable-staking-contract-check
Disables checking of staking contract deposits when proposing blocks, useful for devnets.
When proposing, lets the node build
eth1_datawithout looking up the deposit block on the execution client if the chain has no deposit block hash yet (an all-zero hash), which happens on devnets without a deposit contract. On mainnet and public testnets it has no benefit.- --save-full-execution-payloads
Saves beacon blocks with full execution payloads instead of execution payload headers in the database.
By default Prysm stores blocks blinded (with only the execution payload header) and fetches payloads from the execution client when it needs them, which saves a lot of disk. This flag stores full payloads instead. It only works on a database created with the flag: an existing blinded database makes the node refuse to start, so resync from scratch (for example with checkpoint sync) if you need it.
Once a database stores blinded blocks it can't be switched to full payloads; the node exits with an error until you remove the flag or resync.
See also
--checkpoint-sync-url,--datadirRead the guide- --ignore-unviable-attestations
Ignores attestations whose target state is not viable with respect to the current head (avoid expensive state replay from lagging attesters).
Tightens which blocks fork choice accepts as attestation targets: without the flag, any block from the epoch before the checkpoint epoch counts as viable, which can force expensive state replays when lagging nodes attest to old targets. With it, those attestations are dropped. It replaced
--disable-last-epoch-targets; off by default and still considered an advanced tuning option.See also
--disable-last-epoch-targets- --disable-track-equivocations
Disables recording proposer equivocations observed on gossip into forkchoice.
Prysm records proposer equivocations (two blocks for the same slot and proposer) that arrive early in the slot and feeds them into fork choice. This flag turns that tracking off and returns to the older behavior. Leave it off unless the Prysm team asks you to disable it while diagnosing a problem.
- --enable-full-ssz-data-logging
Enables displaying logs for full ssz data on rejected gossip messages.
Adds the full hex-encoded message (field
message) to theGossip message was rejectedlog. That log is written at debug level, so this only has an effect with--verbosity=debugor a matching--log.vmoduleentry. Use it briefly to capture a bad message for a bug report.Messages can be large (blocks, blobs, data columns), so this can grow log files quickly.
See also
--verbosity,--log.vmodule- --disable-verbose-sig-verification
Disables identifying invalid signatures if batch verification fails when processing block.
By default, when the batched signature check of a block fails, Prysm checks each signature individually so the error says which one is invalid. This flag skips that step: invalid blocks are still rejected, but with a generic
batch block signature verification failederror. It saves a little CPU only when invalid blocks arrive, so most operators should leave the default.- --enable-proposer-preprocessing
Enables proposer pre-processing of blocks before proposing.
When the node computes the state root for a block it is about to propose, it also verifies the block's batched signatures (attestations, RANDAO, BLS-to-execution changes; not the proposer signature, which doesn't exist yet) and fails the proposal if one is invalid. Without the flag the state root is computed without any signature checks. It adds a little CPU work per proposal in exchange for never proposing a block with a bad signature in it.
- --prepare-all-payloads
Informs the engine to prepare all local payloads. Useful for relayers and builders.
Makes the beacon node send payload attributes to the execution client in every
forkchoiceUpdatedcall, so a payload is prepared for every slot, not only for proposers whose validator client is connected. For proposers it doesn't know, it uses--suggested-fee-recipient. It also fires thepayload_attributesevent stream every slot, which is what block builders and relays need; regular stakers don't need it, and it costs execution client work every slot.See also
--suggested-fee-recipient,--http-mev-relayRead the guide- --disable-resource-manager
Disables running the libp2p resource manager.
Replaces libp2p's resource manager, which caps connections, streams and memory used by peers, with a no-op manager that enforces no limits. Only try it if you see libp2p resource-limit errors that block legitimate peers, and watch memory afterwards.
Without resource limits, a flood of peer connections can exhaust memory or file descriptors.
See also
--p2p-max-peers- --enable-light-client
Enables the light client support in the beacon node
Turns on light client server support: the node builds light client updates for every block after Altair, serves the
/eth/v1/beacon/light_client/*Beacon API endpoints, answers the light client P2P requests (bootstrap, updates by range, finality and optimistic updates) and gossips the light client topics. Enable it if you want to serve light clients; it adds some CPU and storage.- --blob-save-fsync
Forces new blob files to be fysnc'd before continuing, ensuring durable blob writes.
Makes the node call
fsyncon each new blob file before it counts the blob as available, so a crash or power loss can't leave a blob that the node already considered stored. It applies to blob storage in--blob-pathand slows writes on slow disks. Use it where blob durability matters (for example nodes that serve blobs to others).- --disable-quic
Disables connecting using the QUIC protocol with peers.
QUIC is on by default: the node listens on UDP
--p2p-quic-portand advertises aquic-v1address in its ENR alongside TCP. This flag turns QUIC off so the node only uses TCP. Use it if your network drops or rate-limits UDP traffic on that port, or to rule QUIC out while debugging peering.See also
--p2p-quic-port,--p2p-tcp-port- --enable-discovery-reboot
Experimental: Enables the discovery listener to rebooted in the event of connectivity issues.
Every minute the node checks whether its outbound peer count is below target. With this flag, if that stays true for more than five consecutive checks, it restarts the discv5 listener and logs
Rebooting discovery listener, reached threshold.Experimental; try it if discovery stalls after network changes (for example a changed public IP) and peers don't recover.See also
--p2p-udp-port,--bootstrap-node- --enable-experimental-attestation-pool
Enables an experimental attestation pool design.
Replaces Prysm's separate aggregated and unaggregated attestation pools with a single new attestation cache used by gossip handling, fork choice, aggregation, the Beacon API pool endpoints and block packing. Experimental; run it on a testnet first and don't rely on it for production validators.
- --enable-fast-confirmation
Enables the fast confirmation rule (FCR) for rapid block confirmation under synchrony assumptions.
Runs the fast confirmation rule, which confirms blocks within a few slots when the network is behaving synchronously. The confirmed block becomes the
safeblock hash that Prysm sends to the execution client (instead of the unrealized justified block), and each run emits afast_confirmationevent on the Beacon API event stream. Experimental and off by default.- --enable-state-diff
Enables the state diff feature.
Stores finalized (cold) states as a hierarchy of snapshots and diffs, controlled by
--state-diff-exponents, instead of full states at archive points. It must be enabled on a fresh database: on an existing database created without it, the node logsDisabling state-diff featureand continues without it. Changing--state-diff-exponentslater makes the node refuse to start. Overrides--enable-historical-state-representation.The exponents are fixed when the database is created. To change them you must delete the database and resync.
See also
--state-diff-exponents,--enable-archive,--slots-per-archive-point,--enable-historical-state-representationRead the guide- --enable-archive
Turns the node into an archive node: backfills blocks down to the archive origin state (see
--archive-origin-state, genesis by default) and then regenerates every historical state into the state-diff tree. (Implies--enable-state-diffand--enable-backfill.)Turns the node into an archive node. Start it with checkpoint sync and an empty data directory: the node follows the chain within minutes, downloads every block back to the archive origin (genesis by default, see
--archive-origin-state), then rebuilds every historical state. Implies--enable-state-diffand--enable-backfill. Progress is logged asArchive state regeneration in progress, and a restart resumes where it stopped.It needs a database created with it, and it can't be combined with
--beacon-db-pruning: the node refuses to start.--enable-archiveSee also
--archive-origin-state,--enable-state-diff,--state-diff-exponents,--checkpoint-sync-urlRead the guide- --sync-from=<string>
Forces the head of the beacon chain to a specific block root. Values can be 'head' or a block root. The block root has to be known to the beacon node and correspond to a block newer than the current finalized checkpoint.
By default the node restarts with the justified checkpoint as its head.
--sync-from=headrestarts from the head block saved in the database instead, and--sync-from=<0x block root>from a specific known block, which helps during long periods of non-finality or to move off a bad fork. If the block is unknown or older than the finalized checkpoint, the node logs an error and starts from the finalized block. Remove the flag after the restart.--sync-from=head- --blacklist-roots=<string list>
A comma-separatted list of 0x-prefixed hexstrings. Declares blocks with the given blockroots to be invalid. It downscores peers that send these blocks.
Treats blocks with the given roots as invalid everywhere: gossip validation rejects them (downscoring the sending peer), initial sync discards them, and block processing refuses them. Use it during an incident to keep your node off a known-bad block. Entries must be 32-byte
0xhex; malformed entries are skipped with aFailed to parse blacklisted rootwarning.--blacklist-roots=0x<BLOCK_ROOT_1>,0x<BLOCK_ROOT_2>See also
--sync-from- --enable-hashtree
(Experimental): Enables the hashtree hashing library.
Switches Merkle hashing (hash tree roots of states and blocks) from the default
gohashtreelibrary to thehashtreelibrary, which Prysm builds from source. The results are identical; only speed differs by CPU. Experimental: benchmark it on a testnet node before you use it in production.- --disable-builder-relay-circuit-breaker
Stops the builder circuit breaker from tracking which builders each direct connection endpoint serves, so a failing builder no longer bans the endpoints serving it.
From the Gloas fork on, stops the circuit breaker from tracking which builders each builder endpoint serves, so a failing builder no longer gets the endpoints that served it banned. Builders themselves are still blacklisted.
See also
--builder-allowed-failures,--builder-critical-failures,--builder-blacklist-period,--builder-critical-blacklist-period,--builder-failure-backoff-period,--builder-critical-failed-builders,--builder-relay-blacklist-period- --disable-last-epoch-targetsdeprecated
Deprecated: disables processing of last epoch targets.
Deprecated and has no effect. Prysm still accepts it so existing configs don't break, and doesn't print a warning. Its replacement is
--ignore-unviable-attestations. Remove it from your config.See also
--ignore-unviable-attestations- --enable-historical-state-representation
Enables the beacon chain to save historical states in a space efficient manner. (Warning): Once enabled, this feature migrates your database in to a new schema and there is no going back. At worst, your entire database might get corrupted.
Migrates the database to store validator registries in a separate, deduplicated bucket so historical states take less space. This is a one-way schema migration: once it has run, the node behaves as if the flag is set, even if you remove it. It is pending deprecation (the node warns at startup that the node needs to be resynced after flag removal) and is ignored when
--enable-state-diffis set.The migration can't be undone, and the flag is scheduled for removal. Don't enable it on new nodes; consider
--enable-state-diffon a fresh database for space-efficient history.See also
--enable-state-diff,--slots-per-archive-point
deprecated
- --dev
Enables experimental features still in development. These features may not be stable.
A shortcut that turns on the feature flags Prysm's developers want tested before they become defaults. In this release it only sets
--enable-backfill(unless you set that flag yourself) and logsEnabling development mode flagsat startup. The set changes between releases, so don't use it in production; enable the individual flags you want instead. Deprecated: it still works, but will be removed.See also
--enable-backfill- --holesky
Runs Prysm configured for the Holesky test network.
Loads the Holesky chain config, bootnodes and deposit contract (
0x4242…4242, chain ID 17000), and logsRunning on the Holesky Beacon Chain Testnet. Only the mainnet genesis state is built in, so pass--genesis-state,--genesis-beacon-api-urlor--checkpoint-sync-urlas well. Deprecated: the Holesky testnet has been shut down. Use--hoodifor test setups.See also
--hoodi,--sepolia,--checkpoint-sync-urlRead the guide- --terminal-total-difficulty-override=<string>
Sets the total difficulty to manual overrides the default TERMINAL_TOTAL_DIFFICULTY value. WARNING: This flag should be used only if you have a clear understanding that community has decided to override the terminal difficulty. Incorrect usage will result in your node experience consensus failure.
Overrides
TERMINAL_TOTAL_DIFFICULTY, the proof-of-work difficulty at which the Merge happened. Mainnet and the public testnets are past the Merge, so this only matters for a devnet that starts before it. When set, Prysm logs the warningTerminal block difficult overridden. Deprecated, as the Merge is complete; it still works.A wrong value on a live network causes a consensus failure.
See also
--terminal-block-hash-override,--terminal-block-hash-epoch-override,--chain-config-fileRead the guide- --terminal-block-hash-override=<string>
Sets the block hash to manual overrides the default TERMINAL_BLOCK_HASH value. WARNING: This flag should be used only if you have a clear understanding that community has decided to override the terminal block hash. Incorrect usage will result in your node experience consensus failure.
Overrides
TERMINAL_BLOCK_HASH, which pins the Merge to a specific proof-of-work block, and logsTerminal block hash overridden. Only relevant to pre-Merge devnets; use it with--terminal-block-hash-epoch-override. Deprecated, as the Merge is complete; it still works.A wrong value on a live network causes a consensus failure.
See also
--terminal-block-hash-epoch-override,--terminal-total-difficulty-overrideRead the guide- --terminal-block-hash-epoch-override=<uint64>
Sets the block hash epoch to manual overrides the default TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH value. WARNING: This flag should be used only if you have a clear understanding that community has decided to override the terminal block hash activation epoch. Incorrect usage will result in your node experience consensus failure.
Overrides
TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH, the epoch from which the terminal block hash override applies, and logsTerminal block hash activation epoch overridden. Only relevant to pre-Merge devnets. Deprecated, as the Merge is complete; it still works.A wrong value on a live network causes a consensus failure.
See also
--terminal-block-hash-override,--terminal-total-difficulty-overrideRead the guide- --subscribe-all-data-subnetsdeprecated
Deprecated alias of
--supernode.Deprecated alias of
--supernode. It still works; use--supernodeinstead.See also
--supernode- --enable-experimental-backfilldeprecated
Deprecated alias of
--enable-backfill.Deprecated alias of
--enable-backfill. It still works; use--enable-backfillinstead.See also
--enable-backfill- --extend-blob-retention-epoch=<uint64>deprecated
Deprecated alias of
--blob-retention-epochs.Deprecated alias of
--blob-retention-epochs. It still works; use--blob-retention-epochsinstead.See also
--blob-retention-epochs- --max-goroutines=<int>deprecated
Deprecated alias of
--healthz-max-goroutines.Deprecated alias of
--healthz-max-goroutines. It still works; use--healthz-max-goroutinesinstead.See also
--healthz-max-goroutines
Debugging and profiling
- --healthz-max-goroutines=<int>
The /healthz endpoint reports the node as unhealthy if the average goroutine count during a 10 slots window exceeds this threshold.
Threshold for the blockchain service's health status. If the average goroutine count exceeds it, the service reports an error and
/healthzon the monitoring port returns HTTP 503. Raise it if your node is healthy but trips this check under heavy load.--max-goroutinesis a deprecated alias.--healthz-max-goroutines=10000See also
--monitoring-portRead the guide- --blockprofilerate=<int>
Turns on block profiling with the given rate.
Sets Go's
runtime.SetBlockProfileRate: about one blocking event is sampled per this many nanoseconds spent blocked (1records every event).0(default) leaves block profiling off. Read results from/debug/pprof/blockwith--pprof.--blockprofilerate=1See also
--pprof,--mutexprofilefraction- --memprofilerate=<int>
Turns on memory profiling with the given rate.
Sets Go's
runtime.MemProfileRate: one allocation sampled per this many bytes allocated. The default 524288 (512 KiB) is Go's own default. Lower values give more precise heap profiles at a CPU cost;0turns heap profiling off.See also
--pprof- --mutexprofilefraction=<int>
Turns on mutex profiling with the given rate.
Sets Go's
runtime.SetMutexProfileFraction: on average one in this many mutex contention events is recorded.0(default) leaves mutex profiling off. Read results from/debug/pprof/mutexwith--pprof.--mutexprofilefraction=5See also
--pprof,--blockprofilerate- --pprofaddr=<string>
pprof HTTP server listening interface.
Interface for the pprof server started by
--pprof. Keep the default127.0.0.1: the endpoints are unauthenticated and can be used to trigger expensive profiles.See also
--pprof,--pprofport- --pprof
Enables the pprof HTTP server.
Starts Go's standard pprof HTTP server at
http://<pprofaddr>:<pprofport>/debug/pprof/, for CPU, heap, goroutine, block and mutex profiles (go tool pprofreads them directly). The node logsStarting pprof serverwith the address. Overhead is negligible until you request a profile.--pprofSee also
--pprofaddr,--pprofport,--memprofilerate,--blockprofilerate,--mutexprofilefraction- --pprofport=<int>
pprof HTTP server listening port.
Port for the pprof server. Change it if 6060 is taken, for example when a validator client with
--pprofruns on the same host.--pprofport=6061See also
--pprof,--pprofaddr- --gc-percent=<int>
The percentage of freshly allocated data to live data on which the gc will be run again.
Sets Go's garbage collection target (the same as the
GOGCenvironment variable): a GC runs when new allocations reach this percentage of the live heap. Lower values reduce peak memory at the cost of CPU; higher values do the opposite. It is only applied when you set the flag.--gc-percent=50See also
--memprofilerate
Subcommands
beacon-chain db restore
restores a database from a backup file
- --restore-source-file=<altsrc.string>
Filepath to the backed-up database file which will be used to restore the database
Path to the database file to restore. The file is copied as is to
<restore-target-dir>/beaconchaindata/beaconchain.db; blobs and data columns are not part of it. Stop the beacon node before restoring.beacon-chain db restore --restore-source-file=/backups/beaconchain.db --restore-target-dir=/var/lib/ethereum/beacon- --restore-target-dir=<altsrc.string>
Target directory of the restored database
The beacon node data directory to restore into, the same value as
--datadir. If a database already exists there, the command asks before overwriting it.
beacon-chain generate-auth-secret
creates a random, 32 byte hex string in a plaintext file to be used for authenticating JSON-RPC requests. If no --output-file flag is defined, the file will be created in the current working directory
creates a random, 32 byte hex string in a plaintext file to be used for authenticating JSON-RPC requests. If no --output-file flag is defined, the file will be created in the current working directory
- --output-file=<altsrc.string>
Target file path for outputting a generated JWT secret to be used for JSON-RPC authentication
Where to write the new JWT secret: a
0x-prefixed 64-character hex string (32 random bytes), with0600permissions. Without this flag the file isjwt.hexin the current directory; missing parent directories are created. Give the same file to the beacon node (--jwt-secret) and the execution client.An existing file at that path is overwritten without asking. Restart both clients if the secret changes.
beacon-chain generate-auth-secret --output-file=/var/lib/ethereum/jwt.hex
No flags match. Try a shorter term, or search the whole site with the search bar.