From 68601e1b93f1e6b77aab27ff10743942d39de8a8 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 7 Aug 2025 16:52:17 +0200 Subject: [PATCH 01/22] 3.1 updates --- src/SUMMARY.md | 12 +- src/_introduction.md | 3 +- src/advanced/configuring.md | 481 ++++++++++++++++++----- src/advanced/optimizing-storage.md | 33 ++ src/advanced/options.md | 507 ++++++++++++------------- src/basic/disk-space.md | 44 --- src/basic/node.md | 4 +- src/basic/optimizing-storage.md | 32 -- src/getting-started/hw-requirements.md | 10 +- src/getting-started/sw-requirements.md | 2 +- src/nodes/ethereum.md | 2 +- src/nodes/gnosis.md | 2 +- src/nodes/polygon.md | 2 +- 13 files changed, 695 insertions(+), 439 deletions(-) create mode 100644 src/advanced/optimizing-storage.md delete mode 100644 src/basic/disk-space.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 93fbb5a..07b5c7b 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -18,8 +18,6 @@ - [Basic Usage](basic-usage.md) - [Type of Node](basic/node.md) - - [Disk Space Required](basic/disk-space.md) - - [Optimizing Storage](basic/optimizing-storage.md) - [Supported Networks](basic/networks.md) - [Default Ports and Firewalls](basic/ports.md) - [YAML/TOML Config](basic/yaml.md) @@ -38,6 +36,7 @@ - [Caplin](advanced/caplin.md) - [JWT secret](advanced/jwt.md) - [Options](advanced/options.md) + - [Optimizing Storage](advanced/optimizing-storage.md) - [RPC Daemon](advanced/JSONRPC-daemon.md) - [The trace Module](advanced/JSONRPC-trace-module.md) - [TxPool](advanced/txpool.md) @@ -45,20 +44,13 @@ - [Downloader](advanced/downloader.md) - [Running an Op-node](advanced/op-node.md) - [TLS Authentication](advanced/tls-authentication.md) + - [Otterscan](tools/otterscan.md) - [Performance Tricks](advanced/performance.md) - [Staking](staking.md) - [External CL](advanced/bp-ext.md) - [Caplin](advanced/bp-caplin.md) -- [Tools](tools.md) - - [Diagnostics Tool](tools/introduction.md) - - [Installation](tools/installation.md) - - [Setup](tools/setup.md) - - [Options](tools/options.md) - - [Browser Interface](tools/user_interface.md) - - [Otterscan](tools/otterscan.md) - - [About](about.md) - [License](about/license.md) - [Contributing](about/contributing.md) diff --git a/src/_introduction.md b/src/_introduction.md index e211c9e..de2abec 100644 --- a/src/_introduction.md +++ b/src/_introduction.md @@ -8,13 +8,12 @@ With Erigon 3 the default configuration shifts from archive node to full node, e # Topics -- Review the hardware and software requirements [get started](getting_started.md). +- Review the hardware and software requirements to [get started](getting_started.md). - Follow the [installation guide](installation.md) to set up Erigon. - Learn the [basic usage](basic-usage.md) of Erigon. - Quickly deploy your own Ethereum, Gnosis, or Polygon [node](quick_nodes.md). - Explore Erigon's [advanced features](advanced.md). - Discover the capabilities of the [RPC Daemon](advanced/JSONRPC-daemon.md). -- Utilize integrated [tools](tools.md) like Diagnostic Tools and Otterscan. # Additional Resources and Information diff --git a/src/advanced/configuring.md b/src/advanced/configuring.md index f372ac0..a72436e 100644 --- a/src/advanced/configuring.md +++ b/src/advanced/configuring.md @@ -1,89 +1,398 @@ -# Configuring Erigon +### Erigon 3.1 CLI Options The Erigon 3 CLI has a wide range of flags that can be used to customize its behavior. Here's a breakdown of some of the flags, see [Options](options.md) for the full list: -## Data Storage - -* `--datadir`: Set the data directory for the databases (default: `/home/usr/.local/share/erigon`) -* `--ethash.dagdir`: Set the directory to store the ethash mining DAGs (default: `/home/usr/.local/share/erigon-ethash`) -* `--database.verbosity` Enabling internal db logs. Very high verbosity levels may require recompile db. Default: 2, means warning. (default: `2`) - -## Logging - -* `--log.json`: Format console logs with JSON (default: `false`) -* `--log.console.json`: Format console logs with JSON (default: `false`) -* `--log.dir.json`: Format file logs with JSON (default: `false`) -* `--verbosity`: Set the log level for console logs (default: `info`) -* `--log.console.verbosity`: Set the log level for console logs (default: `info`) -* `--log.dir.disable`: Disable disk logging (default: `false`) -* `--log.dir.path`: Set the path to store user and error logs to disk -* `--log.dir.prefix`: Set the file name prefix for logs stored to disk -* `--log.dir.verbosity`: Set the log verbosity for logs stored to disk (default: `info`) -* `--log.delays`: Enable block delay logging (default: `false`) - -## Pruning Presets - -* `--prune.mode`: Choose a pruning preset: `archive`, `full`, or `minimal` (default: `full`) see also [Type of node](../basic/node.md) -* `--prune.distance`: Keep state history for the latest N blocks (default: everything) (default: `0`) -* `--prune.distance.blocks`: Keep block history for the latest N blocks (default: everything) (default: `0`) - -## Performance Optimization - -* `--batchSize`: Set the batch size for the execution stage (default: `512M`) -* `--bodies.cache`: Limit the cache for block bodies (default: `268435456`) -* `--private.api.addr`: Set the internal grpc API address (default: `127.0.0.1:9090`) -* `--private.api.ratelimit`: Set the amount of requests the server can handle simultaneously (default: `31872`) - -## Txpool - -* `--txpool.api.addr`: Set the txPool api network address (default: use value of `--private.api.addr`) -* `--txpool.disable` Experimental external pool and block producer, see `./cmd/txpool/readme.md` for more info. Disabling internal txpool and block producer. (default: `false`) -* `--txpool.pricebump` Price bump percentage to replace an already existing transaction (default: `10`) -* `--txpool.pricelimit` Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: `1`) -* `--txpool.locals`: Comma separated accounts to treat as locals (no flush, priority inclusion) -* `--txpool.nolocals`: Disables price exemptions for locally submitted transactions (default: `false`) -* `--txpool.accountslots`: Set the minimum number of executable transaction slots guaranteed per account (default: `16`) -* `--txpool.blobslots`: Set the max allowed total number of blobs (within type-3 txs) per account (default: `48`) -* `--txpool.blobpricebump`: Price bump percentage to replace existing (type-3) blob transaction (default: `100`) -* `--txpool.totalblobpoollimit`: Set the total limit of number of all blobs in txs within the txpool (default: `480`) -* `--txpool.globalslots`: Set the maximum number of executable transaction slots for all accounts (default: `10000`) -* `--txpool.globalbasefeeslots`: Set the maximum number of non-executable transactions where only not enough baseFee (default: `30000`) -* `--txpool.accountqueue`: Set the maximum number of non-executable transaction slots permitted per account (default: `64`) -* `--txpool.globalqueue`: Set the maximum number of non-executable transaction slots for all accounts (default: `30000`) -* `--txpool.lifetime`: Set the maximum amount of time non-executable transaction are queued (default: `3h0m0s`) -* `--txpool.trace.senders`: Set the comma-separated list of addresses, whose transactions will traced in transaction pool with debug printing -* `--txpool.commit.every`: Set the how often transactions should be committed to the storage (default: `15s`) - - ## Remote Procedure Call (RPC) - -* `--rpc.accessList`: Specify granular (method-by-method) API allowlist -* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: `false`) -* `--rpc.batch.concurrency`: Limit the amount of goroutines to process 1 batch request (default: `2`) -* `--rpc.streaming.disable`: Disable json streaming for some heavy endpoints -* `--rpc.accessList`: Specify granular (method-by-method) API allowlist -* `--rpc.gascap`: Set a cap on gas that can be used in eth_call/estimateGas (default: `50000000`) -* `--rpc.batch.limit`: Set the maximum number of requests in a batch (default: `100`) -* `--rpc.returndata.limit`: Set the maximum number of bytes returned from eth_call or similar invocations (default: `100000`) -* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: `false`) -* `--rpc.maxgetproofrewindblockcount.limit`: Set the max GetProof rewind block count (default: `100000`) -* `--rpc.txfeecap`: Set a cap on transaction fee (in ether) that can be sent via the RPC APIs (`0` = no cap) (default: `1`) - -## Network and Peers - -* `--chain`: Set the name of the network to join (default: `mainnet`) -* `--dev.period`: Set the block period to use in developer mode (0 = mine only if transaction pending) (default: `0`) -* `--maxpeers`: Set the maximum number of network peers (network disabled if set to 0) (default: `100`) -* `--nodiscover`: Disable the peer discovery mechanism (manual peer addition) (default: `false`) -* `--netrestrict`: Restrict network communication to the given IP networks (CIDR masks) -* `--trustedpeers`: Set the comma-separated enode URLs which are always allowed to connect, even above the peer limit - -## Miscellaneous - -* `--externalcl`: Enables the external consensus layer (default: `false`) -* `--override.prague`: Manually specify the Prague fork time, overriding the bundled setting (default: `0`) -* `--pprof`: Enable the pprof HTTP server (default: `false`) -* `--metrics`: Enable metrics collection and reporting (default: `false`) -* `--diagnostics`: Disable diagnostics (default: `false`) -* `--config`: Set erigon flags from YAML/TOML file -* `--help`: Show help -* `--version`: Print the version \ No newline at end of file +### General Options + +These flags cover the general behavior and configuration of the Erigon client. + +* `--datadir value`: Specifies the data directory for the databases. + * **Default:** `/home/usr/.local/share/erigon` +* `--ethash.dagdir value`: Sets the directory to store the ethash mining DAGs. + * **Default:** `/home/usr/.local/share/erigon-ethash` +* `--config value`: Sets Erigon flags using a [YAML/TOML](../basic/yaml.md) file. +* `--version, -v`: Prints the version information. +* `--help, -h`: Displays help information. +* `--chain value`: Sets the name of the [network](../basic/networks.html) to join. + * **Default:** `mainnet` +* `--networkid value`: Explicitly sets the network ID. + * **Default:** `1` +* `--identity value`: Sets a custom node name. +* `--externalcl`: Enables the external consensus layer. + * **Default:** `false`, means that [Caplin](#caplin-consensus-layer) is enabled. +* `--override.osaka value`: Manually specifies the Osaka fork time. + * **Default:** `0` +* `--vmdebug`: Records information for VM and contract debugging. + * **Default:** `false` +* `--gdbme`: Restarts Erigon under gdb for debugging. + * **Default:** `false` +* `--ethstats value`: The reporting URL for an ethstats service. +* `--trusted-setup-file value`: Absolute path to a `trusted_setup.json` file. +* `--persist.receipts, --experiment.persist.receipts.v2`: Downloads historical receipts. + * **Default:** `true` + +### Database and Caching + +These flags control database performance and memory usage. + +* `--db.pagesize value`: Sets the fixed page size for the database. + * **Default:** `16KB` +* `--db.size.limit value`: Sets a runtime limit on the chaindata database size. + * **Default:** `1TB` +* `--db.writemap`: Enables `WRITE_MAP` for fast database writes. + * **Default:** `true` +* `--db.read.concurrency value`: Limits the number of parallel database reads. + * **Default:** `1408` +* `--database.verbosity value`: Enables internal database logs. + * **Default:** `2` +* `--batchSize value`: Sets the batch size for the execution stage. + * **Default:** `512M` +* `--bodies.cache value`: Sets the size limit for the block bodies cache. + * **Default:** `268435456` +* `--state.cache value`: Sets the amount of data to store in the StateCache. + * **Default:** `0MB` +* `--sync.parallel-state-flushing`: Enables parallel state flushing. + * **Default:** `true` + +### Pruning and Snapshots + +Flags for managing how old chain data is handled and stored. + +* `--prune.mode value`: Selects a pruning preset (`full`, `archive`, `minimal`, `blocks`). + * **Default:** `"full"` +* `--prune.distance value`: Keeps state history for the latest `N` blocks. + * **Default:** `0` +* `--prune.distance.blocks value`: Keeps block history for the latest `N` blocks. + * **Default:** `0` +* `--prune.experimental.include-commitment-history, --experimental.commitment-history`: Enables faster `eth_getProof` for executed blocks. + * **Default:** `false` +* `--snap.keepblocks`: Keeps ancient blocks in the database for debugging. + * **Default:** `false` +* `--snap.stop`: Stops generating new snapshots. + * **Default:** `false` +* `--snap.state.stop`: Stops generating new state files. + * **Default:** `false` +* `--snap.skip-state-snapshot-download`: Skips state download and starts from genesis. + * **Default:** `false` + +### Transaction Pool (TxPool) + +Options for configuring the transaction pool. + +* `--txpool.api.addr value`: The TxPool API network address. + * **Default:** Uses the value of `--private.api.addr` +* `--txpool.disable`: Disables the internal transaction pool. + * **Default:** `false` +* `--txpool.pricelimit value`: Sets the minimum gas price for acceptance into the pool. + * **Default:** `1` +* `--txpool.pricebump value`: Sets the price bump percentage to replace a transaction. + * **Default:** `10` +* `--txpool.blobpricebump value`: Sets the price bump percentage for replacing a type-3 blob transaction. + * **Default:** `100` +* `--txpool.accountslots value`: Sets the number of executable transaction slots per account. + * **Default:** `16` +* `--txpool.blobslots value`: Sets the maximum number of blobs per account. + * **Default:** `540` +* `--txpool.totalblobpoollimit value`: Sets the total limit on the number of all blobs in the pool. + * **Default:** `5400` +* `--txpool.globalslots value`: Sets the maximum number of executable transaction slots for all accounts. + * **Default:** `10000` +* `--txpool.globalbasefeeslots value`: Sets the maximum number of non-executable transactions with insufficient base fees. + * **Default:** `30000` +* `--txpool.globalqueue value`: Sets the maximum number of non-executable transaction slots for all accounts. + * **Default:** `30000` +* `--txpool.trace.senders value`: A comma-separated list of addresses whose transactions will be traced. +* `--txpool.commit.every value`: Sets how often transactions are committed to storage. + * **Default:** `15s` +* `--txpool.gossip.disable`: Disables P2P gossip of transactions. + * **Default:** `false` + +### Network and Peers + +These flags manage network connectivity, peer discovery, and traffic control. + +* `--port value`: The main network listening port. + * **Default:** `30303` +* `--p2p.protocol value`: The version of the `eth` P2P protocol. + * **Default:** `68`, `67` +* `--p2p.allowed-ports value`: A comma-separated list of allowed ports for different P2P protocols. + * **Default:** `30303, 30304, 30305, 30306, 30307` +* `--nat value`: The NAT port mapping mechanism. +* `--nodiscover`: Disables peer discovery. + * **Default:** `false` +* `--v5disc`: Enables the experimental RLPx V5 (Topic Discovery) mechanism. + * **Default:** `false` +* `--netrestrict value`: Restricts network communication to specific IP networks. +* `--nodekey value`: The P2P node key file. +* `--nodekeyhex value`: The P2P node key as a hexadecimal string. +* `--discovery.dns value`: Sets DNS discovery entry points. +* `--bootnodes value`: Comma-separated enode URLs for P2P discovery bootstrap. +* `--staticpeers value`: Comma-separated enode URLs to connect to. +* `--trustedpeers value`: Comma-separated enode URLs for trusted peers. +* `--maxpeers value`: The maximum number of network peers. + * **Default:** `32` + +### RPC & API + +Flags for configuring various RPC servers and their behavior. + +* `--private.api.addr value`: The internal gRPC API address for Erigon's components. + * **Default:** `127.0.0.1:9090` +* `--private.api.ratelimit value`: Limits the number of simultaneous internal API requests. + * **Default:** `31872` +* `--http`: Enables the JSON-RPC HTTP server. + * **Default:** `true` +* `--http.enabled`: An alternative flag to enable the HTTP server. + * **Default:** `true` +* `--graphql`: Enables the GraphQL endpoint. + * **Default:** `false` +* `--http.addr value`: The HTTP-RPC server listening interface. + * **Default:** `localhost` +* `--http.port value`: The HTTP-RPC server listening port. + * **Default:** `8545` +* `--authrpc.addr value`: The HTTP-RPC server listening interface for the Engine API. + * **Default:** `localhost` +* `--authrpc.port value`: The HTTP-RPC server listening port for the Engine API. + * **Default:** `8551` +* `--authrpc.jwtsecret value`: The path to the JWT secret file for the consensus layer. +* `--http.compression`: Enables compression over HTTP-RPC. + * **Default:** `true` +* `--http.corsdomain value`: A comma-separated list of domains for cross-origin requests. +* `--http.vhosts value`: A comma-separated list of virtual hostnames. + * **Default:** `localhost` +* `--authrpc.vhosts value`: A comma-separated list of virtual hostnames for the Engine API. + * **Default:** `localhost` +* `--http.api value`: The APIs offered over the HTTP-RPC interface. + * **Default:** `eth,erigon,engine` +* `--ws`: Enables the WS-RPC server. + * **Default:** `false` +* `--ws.port value`: The WS-RPC server listening port. + * **Default:** `8546` +* `--ws.compression`: Enables compression over WebSocket. + * **Default:** `true` +* `--rpc.batch.concurrency value`: Limits the number of goroutines for batch requests. + * **Default:** `2` +* `--rpc.streaming.disable`: Disables JSON streaming for heavy endpoints. + * **Default:** `false` +* `--rpc.accessList value`: Specifies a granular API allowlist. +* `--rpc.gascap value`: Sets a cap on gas usage for `eth_call`/`estimateGas`. + * **Default:** `50000000` +* `--rpc.batch.limit value`: Sets the maximum number of requests in a batch. + * **Default:** `100` +* `--rpc.returndata.limit value`: Sets the maximum return data size for `eth_call`. + * **Default:** `100000` +* `--rpc.allow-unprotected-txs`: Allows unprotected transactions via RPC. + * **Default:** `false` +* `--rpc.txfeecap value`: Sets a cap on transaction fees in ether. + * **Default:** `1` +* `--rpc.slow value`: Logs RPC requests slower than the specified threshold. + * **Default:** `0s` +* `--rpc.evmtimeout value`: The maximum time to wait for an EVM call. + * **Default:** `5m0s` +* `--rpc.overlay.getlogstimeout value`: The maximum time to wait for `overlay_getLogs`. + * **Default:** `5m0s` +* `--rpc.overlay.replayblocktimeout value`: The maximum time to wait to replay a single block. + * **Default:** `10s` +* `--rpc.subscription.filters.maxlogs value`: Maximum logs to store per subscription. + * **Default:** `0` +* `--rpc.subscription.filters.maxheaders value`: Maximum block headers to store per subscription. + * **Default:** `0` +* `--rpc.subscription.filters.maxtxs value`: Maximum transactions to store per subscription. + * **Default:** `0` +* `--rpc.subscription.filters.maxaddresses value`: Maximum addresses per subscription to filter logs by. + * **Default:** `0` +* `--rpc.subscription.filters.maxtopics value`: Maximum topics per subscription to filter logs by. + * **Default:** `0` +* `--http.timeouts.read value`: Maximum duration for reading a request. + * **Default:** `30s` +* `--http.timeouts.write value`: Maximum duration before timing out a response write. + * **Default:** `30m0s` +* `--http.timeouts.idle value`: Maximum idle time for a connection with keep-alives enabled. + * **Default:** `2m0s` +* `--authrpc.timeouts.read value`: Maximum read duration for an Engine API request. + * **Default:** `30s` +* `--authrpc.timeouts.write value`: Maximum write duration for an Engine API response. + * **Default:** `30m0s` +* `--authrpc.timeouts.idle value`: Maximum idle time for an Engine API connection. + * **Default:** `2m0s` +* `--healthcheck`: Enables gRPC health checks. + * **Default:** `false` + +### Logging and Profiling + +Flags for controlling logging and performance profiling. + +* `--log.json`: Formats console logs with JSON. + * **Default:** `false` +* `--log.console.json`: Formats console logs with JSON. + * **Default:** `false` +* `--log.dir.json`: Formats file logs with JSON. + * **Default:** `false` +* `--verbosity value`: Sets the log level for console logs. + * **Default:** `info` +* `--log.console.verbosity value`: Sets the log level for console logs. + * **Default:** `info` +* `--log.dir.disable`: Disables disk logging. + * **Default:** `false` +* `--log.dir.path value`: The path to store user and error logs. +* `--log.dir.prefix value`: The file name prefix for logs stored on disk. +* `--log.dir.verbosity value`: Sets the log verbosity for disk logs. + * **Default:** `info` +* `--log.delays`: Enables block delay logging. + * **Default:** `false` +* `--pprof`: Enables the pprof HTTP server. + * **Default:** `false` +* `--pprof.addr value`: The pprof HTTP server listening interface. + * **Default:** `127.0.0.1` +* `--pprof.port value`: The pprof HTTP server listening port. + * **Default:** `6060` +* `--pprof.cpuprofile value`: Writes a CPU profile to a file. +* `--trace value`: Writes an execution trace to a file. +* `--vmtrace value`: Sets the provider tracer. +* `--vmtrace.jsonconfig value`: Sets the tracer's configuration. +* `--metrics`: Enables metrics collection and reporting. + * **Default:** `false` +* `--metrics.addr value`: The stand-alone metrics HTTP server listening interface. + * **Default:** `127.0.0.1` +* `--metrics.port value`: The metrics HTTP server listening port. + * **Default:** `6061` + +### Consensus and Forks + +Flags related to consensus mechanisms and network forks. + +* `--clique.checkpoint value`: The number of blocks after which to save the vote snapshot. + * **Default:** `10` +* `--clique.snapshots value`: The number of recent vote snapshots to keep in memory. + * **Default:** `1024` +* `--clique.signatures value`: The number of recent block signatures to keep in memory. + * **Default:** `16384` +* `--clique.datadir value`: The path to the clique database folder. +* `--fakepow`: Disables proof-of-work verification. + * **Default:** `false` +* `--gpo.blocks value`: The number of recent blocks to check for gas prices. + * **Default:** `20` +* `--gpo.percentile value`: The percentile of recent transaction gas prices to use for a suggested gas price. + * **Default:** `60` +* `--proposer.disable`: Disables the PoS proposer. + * **Default:** `false` +* `--bor.heimdall value`: The URL of the Heimdall service. + * **Default:** `http://localhost:1317` +* `--bor.withoutheimdall`: Runs without the Heimdall service. + * **Default:** `false` +* `--bor.period`: Overrides the bor block period. + * **Default:** `false` +* `--bor.minblocksize`: Ignores the bor block period and waits for `blocksize` transactions. + * **Default:** `false` +* `--polygon.pos.ssf`: Enables Polygon PoS Single Slot Finality. + * **Default:** `false` +* `--polygon.pos.ssf.block value`: Enables Polygon PoS Single Slot Finality from a specific block. + * **Default:** `0` + +### Sentry + +Flags for configuring the Sentry component. + +* `--sentry.api.addr value`: A comma-separated list of sentry addresses. +* `--sentry.log-peer-info`: Logs detailed peer info when a peer connects or disconnects. + * **Default:** `false` +* `--sentinel.addr value`: The address for the sentinel component. + * **Default:** `localhost` +* `--sentinel.port value`: The port for the sentinel component. + * **Default:** `7777` +* `--sentinel.bootnodes value`: Comma-separated enode URLs for P2P discovery bootstrap for the sentinel. +* `--sentinel.staticpeers value`: Connects to comma-separated consensus static peers. + +### Downloader + +Flags for controlling the downloader component. + +* `--downloader.api.addr value`: The downloader address. +* `--downloader.disable.ipv4`: Disables IPv4 for the downloader. + * **Default:** `false` +* `--downloader.disable.ipv6`: Disables IPv6 for the downloader. + * **Default:** `false` +* `--no-downloader`: Disables the downloader component. + * **Default:** `false` +* `--downloader.verify`: Verifies snapshots on startup. + * **Default:** `false` +* `--sync.loop.throttle value`: Sets the minimum time between sync loop starts. +* `--sync.loop.block.limit value`: Sets the maximum number of blocks to process per loop iteration. + * **Default:** `5000` +* `--sync.loop.break.after value`: Sets the last stage of the sync loop to run. +* `--bad.block value`: Marks a block as bad and forces a reorg. +* `--webseed value`: Comma-separated URLs for network support infrastructure. + +### Caplin (Consensus Layer) + +Flags for configuring the Caplin consensus layer. + +* `--caplin.discovery.addr value`: The address for the Caplin DISCV5 protocol. + * **Default:** `0.0.0.0` +* `--caplin.discovery.port value`: The port for the Caplin DISCV5 protocol. + * **Default:** `4000` +* `--caplin.discovery.tcpport value`: The TCP port for the Caplin DISCV5 protocol. + * **Default:** `4001` +* `--caplin.checkpoint-sync-url value`: The checkpoint sync endpoint. +* `--caplin.subscribe-all-topics`: Subscribes to all gossip topics. + * **Default:** `false` +* `--caplin.max-peer-count value`: The maximum number of peers to connect to. + * **Default:** `128` +* `--caplin.enable-upnp`: Enables NAT porting for Caplin. + * **Default:** `false` +* `--caplin.max-inbound-traffic-per-peer value`: The maximum inbound traffic per second per peer. + * **Default:** `1MB` +* `--caplin.max-outbound-traffic-per-peer value`: The maximum outbound traffic per second per peer. + * **Default:** `1MB` +* `--caplin.adaptable-maximum-traffic-requirements`: Makes the node adaptable to traffic based on the number of validators. + * **Default:** `true` +* `--caplin.blocks-archive`: Enables backfilling for blocks. + * **Default:** `false` +* `--caplin.blobs-archive`: Enables backfilling for blobs. + * **Default:** `false` +* `--caplin.states-archive`: Enables the archival node for historical states. + * **Default:** `false` +* `--caplin.blobs-immediate-backfill`: Tells Caplin to immediately backfill blobs. + * **Default:** `false` +* `--caplin.blobs-no-pruning`: Disables blob pruning. + * **Default:** `false` +* `--caplin.checkpoint-sync.disable`: Disables checkpoint sync. + * **Default:** `false` +* `--caplin.snapgen`: Enables snapshot generation. + * **Default:** `false` +* `--caplin.mev-relay-url value`: The MEV relay endpoint. +* `--caplin.validator-monitor`: Enables Caplin validator monitoring metrics. + * **Default:** `false` +* `--caplin.custom-config value`: Sets a custom config for Caplin. +* `--caplin.custom-genesis value`: Sets a custom genesis for Caplin. +* `--caplin.use-engine-api`: Uses the Engine API for internal Caplin. + * **Default:** `false` + +### Shutter Network Encrypted Transactions + +Flags for configuring the Shutter Network encrypted transactions mempool. + +* `--shutter`: Enables the Shutter encrypted transactions mempool. + * **Default:** `false` +* `--shutter.p2p.bootstrap.nodes value`: Overrides the default P2P bootstrap nodes. +* `--shutter.p2p.listen.port value`: Overrides the default P2P listen port. + * **Default:** `0` + +### Downloader + +Flags for managing the Downloader for data synchronization. + +* `--torrent.port value`: The port to listen for the BitTorrent protocol. + * **Default:** `42069` +* `--torrent.maxpeers value`: An unused parameter. + * **Default:** `100` +* `--torrent.conns.perfile value`: The number of connections per file. + * **Default:** `10` +* `--torrent.trackers.disable`: Disables conventional BitTorrent trackers. + * **Default:** `false` +* `--torrent.upload.rate value`: The upload rate in bytes per second. + * **Default:** `32mb` +* `--torrent.download.rate value`: The download rate in bytes per second. +* `--torrent.webseed.download.rate value`: The download rate for webseeds. +* `--torrent.verbosity value`: Sets the verbosity level for BitTorrent logs. + * **Default:** `1` \ No newline at end of file diff --git a/src/advanced/optimizing-storage.md b/src/advanced/optimizing-storage.md new file mode 100644 index 0000000..1b8a5b7 --- /dev/null +++ b/src/advanced/optimizing-storage.md @@ -0,0 +1,33 @@ +# Optimizing Storage +*Using fast disks and cheap disks* + +For optimal performance, it's recommended to store the datadir on a fast NVMe-RAID disk. However, if this is not feasible, you can store the history on a cheaper disk and still achieve good performance. + +## Step 1: Store datadir on the slow disk + +Place the `datadir` on the slower disk. Then, create symbolic links (using `ln -s`) to the **fast disk** for the following sub-folders: + +- `chaindata` +- `snapshots/domain` + +This will speed up the execution of E3. + +On the **slow disk** place `datadir` folder with the following structure: + - `chaindata` (linked to fast disk) + - `snapshots` + - `domain` (linked to fast disk) + - `history` + - `idx` + - `accessor` + - `temp` + + +## Step 2: Speed Up History Access (Optional) + +If you need to further improve performance try the following improvements step by step: + +1. Store the `snapshots/accessor` folder on the fast disk. This should provide a noticeable speed boost. +2. If the speed is still not satisfactory, move the `snapshots/idx` folder to the fast disk. +3. If performance is still an issue, consider moving the entire `snapshots/history` folder to the fast disk. + +By following these steps, you can optimize your Erigon 3 storage setup to achieve a good balance between performance and cost. \ No newline at end of file diff --git a/src/advanced/options.md b/src/advanced/options.md index 649cdf8..5d00d9c 100644 --- a/src/advanced/options.md +++ b/src/advanced/options.md @@ -22,262 +22,261 @@ USAGE: erigon [command] [flags] VERSION: - 3.0.12-39c6a6ff + 3.1.0-816f2232 COMMANDS: - init Bootstrap and initialize a new genesis block - import Import a blockchain file - seg, snapshots, segments Managing historical data segments (partitions) - support Connect Erigon instance to a diagnostics system for support - help, h Shows a list of commands or help for one command + init Bootstrap and initialize a new genesis block + import Import a blockchain file + snapshots, seg, snapshot, segments, segment Managing historical data segments (partitions) + support Connect Erigon instance to a diagnostics system for support + help, h Shows a list of commands or help for one command GLOBAL OPTIONS: - --datadir value Data directory for the databases (default: /home/bloxster/.local/share/erigon) - --ethash.dagdir value Directory to store the ethash mining DAGs (default: /home/bloxster/.local/share/erigon-ethash) - --externalcl Enables the external consensus layer (default: false) - --txpool.disable External pool and block producer, see ./cmd/txpool/readme.md for more info. Disabling internal txpool and block producer. (default: false) - --txpool.pricelimit value Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: 1) - --txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10) - --txpool.blobpricebump value Price bump percentage to replace existing (type-3) blob transaction (default: 100) - --txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16) - --txpool.blobslots value Max allowed total number of blobs (within type-3 txs) per account (default: 48) - --txpool.totalblobpoollimit value Total limit of number of all blobs in txs within the txpool (default: 480) - --txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 10000) - --txpool.globalbasefeeslots value Maximum number of non-executable transactions where only not enough baseFee (default: 30000) - --txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 30000) - --txpool.trace.senders value Comma separated list of addresses, whose transactions will traced in transaction pool with debug printing - --txpool.commit.every value How often transactions should be committed to the storage (default: 15s) - --prune.distance value Keep state history for the latest N blocks (default: everything) (default: 0) - --prune.distance.blocks value Keep block history for the latest N blocks (default: everything) (default: 0) - --prune.mode value Choose a pruning preset to run onto. Available values: "full", "archive", "minimal", "blocks". - full: Keep only necessary blocks and latest state, - blocks: Keep all blocks but not the state history, - archive: Keep the entire state history and all blocks, - minimal: Keep only latest state (default: "full") - --batchSize value Batch size for the execution stage (default: "512M") - --bodies.cache value Limit on the cache for block bodies (default: "268435456") - --database.verbosity value Enabling internal db logs. Very high verbosity levels may require recompile db. Default: 2, means warning. (default: 2) - --private.api.addr value Erigon's components (txpool, rpcdaemon, sentry, downloader, ...) can be deployed as independent Processes on same/another server. Then components will connect to erigon by this internal grpc API. example: 127.0.0.1:9090, empty string means not to start the listener. do not expose to public network. serves remote database interface (default: "127.0.0.1:9090") - --private.api.ratelimit value Amount of requests server handle simultaneously - requests over this limit will wait. Increase it - if clients see 'request timeout' while server load is low - it means your 'hot data' is small or have much RAM. (default: 31872) - --etl.bufferSize value Buffer size for ETL operations. (default: "256MB") - --tls Enable TLS handshake (default: false) - --tls.cert value Specify certificate - --tls.key value Specify key file - --tls.cacert value Specify certificate authority - --state.stream.disable Disable streaming of state changes from core to RPC daemon (default: false) - --sync.loop.throttle value Sets the minimum time between sync loop starts (e.g. 1h30m, default is none) - --bad.block value Marks block with given hex string as bad and forces initial reorg before normal staged sync - --http JSON-RPC server (enabled by default). Use --http=false to disable it (default: true) - --http.enabled JSON-RPC HTTP server (enabled by default). Use --http.enabled=false to disable it (default: true) - --graphql Enable the graphql endpoint (default: false) - --http.addr value HTTP-RPC server listening interface (default: "localhost") - --http.port value HTTP-RPC server listening port (default: 8545) - --authrpc.addr value HTTP-RPC server listening interface for the Engine API (default: "localhost") - --authrpc.port value HTTP-RPC server listening port for the Engine API (default: 8551) - --authrpc.jwtsecret value Path to the token that ensures safe connection between CL and EL - --http.compression Enable compression over HTTP-RPC (default: false) - --http.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) - --http.vhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts 'any' or '*' as wildcard. (default: "localhost") - --authrpc.vhosts value Comma separated list of virtual hostnames from which to accept Engine API requests (server enforced). Accepts 'any' or '*' as wildcard. (default: "localhost") - --http.api value API's offered over the HTTP-RPC interface (default: "eth,erigon,engine") - --ws.port value WS-RPC server listening port (default: 8546) - --ws Enable the WS-RPC server (default: false) - --ws.compression Enable compression over WebSocket (default: false) - --http.trace Print all HTTP requests to logs with INFO level (default: false) - --http.dbg.single Allow pass HTTP header 'dbg: true' to printt more detailed logs - how this request was executed (default: false) - --state.cache value Amount of data to store in StateCache (enabled if no --datadir set). Set 0 to disable StateCache. Defaults to 0MB (default: "0MB") - --rpc.batch.concurrency value Does limit amount of goroutines to process 1 batch request. Means 1 bach request can't overload server. 1 batch still can have unlimited amount of request (default: 2) - --rpc.streaming.disable Erigon has enabled json streaming for some heavy endpoints (like trace_*). It's a trade-off: greatly reduce amount of RAM (in some cases from 30GB to 30mb), but it produce invalid json format if error happened in the middle of streaming (because json is not streaming-friendly format) (default: false) - --db.read.concurrency value Does limit amount of parallel db reads. Default: equal to GOMAXPROCS (or number of CPU) (default: 1408) - --rpc.accessList value Specify granular (method-by-method) API allowlist - --trace.compat Bug for bug compatibility with OE for trace_ routines (default: false) - --rpc.gascap value Sets a cap on gas that can be used in eth_call/estimateGas (default: 50000000) - --rpc.batch.limit value Maximum number of requests in a batch (default: 100) - --rpc.returndata.limit value Maximum number of bytes returned from eth_call or similar invocations (default: 100000) - --rpc.allow-unprotected-txs Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: false) - --rpc.txfeecap value Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 1) - --txpool.api.addr value TxPool api network address, for example: 127.0.0.1:9090 (default: use value of --private.api.addr) - --trace.maxtraces value Sets a limit on traces that can be returned in trace_filter (default: 200) - --experimental.commitment-history Enables blazing fast eth_getProof for executed block (default: false) - --http.timeouts.read value Maximum duration for reading the entire request, including the body. (default: 30s) - --http.timeouts.write value Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read. (default: 30m0s) - --http.timeouts.idle value Maximum amount of time to wait for the next request when keep-alives are enabled. If http.timeouts.idle is zero, the value of http.timeouts.read is used. (default: 2m0s) - --authrpc.timeouts.read value Maximum duration for reading the entire request, including the body. (default: 30s) - --authrpc.timeouts.write value Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read. (default: 30m0s) - --authrpc.timeouts.idle value Maximum amount of time to wait for the next request when keep-alives are enabled. If authrpc.timeouts.idle is zero, the value of authrpc.timeouts.read is used. (default: 2m0s) - --rpc.evmtimeout value Maximum amount of time to wait for the answer from EVM call. (default: 5m0s) - --rpc.overlay.getlogstimeout value Maximum amount of time to wait for the answer from the overlay_getLogs call. (default: 5m0s) - --rpc.overlay.replayblocktimeout value Maximum amount of time to wait for the answer to replay a single block when called from an overlay_getLogs call. (default: 10s) - --rpc.subscription.filters.maxlogs value Maximum number of logs to store per subscription. (default: 0) - --rpc.subscription.filters.maxheaders value Maximum number of block headers to store per subscription. (default: 0) - --rpc.subscription.filters.maxtxs value Maximum number of transactions to store per subscription. (default: 0) - --rpc.subscription.filters.maxaddresses value Maximum number of addresses per subscription to filter logs by. (default: 0) - --rpc.subscription.filters.maxtopics value Maximum number of topics per subscription to filter logs by. (default: 0) - --snap.keepblocks Keep ancient blocks in db (useful for debug) (default: false) - --snap.stop Workaround to stop producing new snapshots, if you meet some snapshots-related critical bug. It will stop move historical data from DB to new immutable snapshots. DB will grow and may slightly slow-down - and removing this flag in future will not fix this effect (db size will not greatly reduce). (default: false) - --snap.state.stop Workaround to stop producing new state files, if you meet some state-related critical bug. It will stop aggregate DB history in a state files. DB will grow and may slightly slow-down - and removing this flag in future will not fix this effect (db size will not greatly reduce). (default: false) - --snap.skip-state-snapshot-download Skip state download and start from genesis block (default: false) - --db.pagesize value DB is splitted to 'pages' of fixed size. Can't change DB creation. Must be power of 2 and '256b <= pagesize <= 64kb'. Default: equal to OperationSystem's pageSize. Bigger pageSize causing: 1. More writes to disk during commit 2. Smaller b-tree high 3. Less fragmentation 4. Less overhead on 'free-pages list' maintainance (a bit faster Put/Commit) 5. If expecting DB-size > 8Tb then set pageSize >= 8Kb (default: "4KB") - --db.size.limit value Runtime limit of chaindata db size (can change at any time) (default: "1TB") - --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default: true) - --torrent.port value Port to listen and serve BitTorrent protocol (default: 42069) - --torrent.maxpeers value Unused parameter (reserved for future use) (default: 100) - --torrent.conns.perfile value Number of connections per file (default: 10) - --torrent.download.slots value Amount of files to download in parallel. (default: 32) - --torrent.staticpeers value Comma separated host:port to connect to - --torrent.upload.rate value Bytes per second, example: 32mb (default: "4mb") - --torrent.download.rate value Bytes per second, example: 32mb (default: "128mb") - --torrent.verbosity value 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (must set --verbosity to equal or higher level and has default: 2) (default: 2) - --port value Network listening port (default: 30303) - --p2p.protocol value [ --p2p.protocol value ] Version of eth p2p protocol (default: 68, 67) - --p2p.allowed-ports value [ --p2p.allowed-ports value ] Allowed ports to pick for different eth p2p protocol versions as follows ,,.., (default: 30303, 30304, 30305, 30306, 30307) - --nat value NAT port mapping mechanism (any|none|upnp|pmp|stun|extip:) - "" 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:" Uses STUN to detect an external IP using the given server (host:port) - --nodiscover Disables the peer discovery mechanism (manual peer addition) (default: false) - --v5disc Enables the experimental RLPx V5 (Topic Discovery) mechanism (default: false) - --netrestrict value Restricts network communication to the given IP networks (CIDR masks) - --nodekey value P2P node key file - --nodekeyhex value P2P node key as hex (for testing) - --discovery.dns value Sets DNS discovery entry points (use "" to disable DNS) - --bootnodes value Comma separated enode URLs for P2P discovery bootstrap - --staticpeers value Comma separated enode URLs to connect to - --trustedpeers value Comma separated enode URLs which are always allowed to connect, even above the peer limit - --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 32) - --chain value name of the network to join (default: "mainnet") - --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) - --vmdebug Record information useful for VM and contract debugging (default: false) - --networkid value Explicitly set network id (integer)(For testnets: use --chain instead) (default: 1) - --experiment.persist.receipts value Set > 0 to store receipts in chaindata db (only on chain-tip) - RPC for recent receit/logs will be faster. Values: 1_000 good starting point. 10_000 receitps it's ~1Gb (not much IO increase). Please test before go over 100_000 (default: 0) - --experiment.persist.receipts.v2 To store receipts in chaindata db (only on chain-tip) - RPC for recent receit/logs will be faster. Values: 1_000 good starting point. 10_000 receitps it's ~1Gb (not much IO increase). Please test before go over 100_000 (default: false) - --fakepow Disables proof-of-work verification (default: false) - --gpo.blocks value Number of recent blocks to check for gas prices (default: 20) - --gpo.percentile value Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60) - --allow-insecure-unlock Allow insecure account unlocking when account-related RPCs are exposed by http (default: false) - --identity value Custom node name - --clique.checkpoint value Number of blocks after which to save the vote snapshot to the database (default: 10) - --clique.snapshots value Number of recent vote snapshots to keep in memory (default: 1024) - --clique.signatures value Number of recent block signatures to keep in memory (default: 16384) - --clique.datadir value Path to clique db folder - --mine Enable mining (default: false) - --proposer.disable Disables PoS proposer (default: false) - --miner.notify value Comma separated HTTP URL list to notify of new work packages - --miner.gaslimit value Target gas limit for mined blocks (default: 0) - --miner.etherbase value Public address for block mining rewards (default: "0") - --miner.gasprice value Minimum gas price for mining a transaction (default: 0) - --miner.extradata value Block extra data set by the miner (default = client version) - --miner.noverify Disable remote sealing verification (default: false) - --miner.sigfile value Private key to sign blocks with - --miner.recommit value Time interval to recreate the block being mined (default: 3s) - --sentry.api.addr value Comma separated sentry addresses ':,:' - --sentry.log-peer-info Log detailed peer info when a peer connects or disconnects. Enable to integrate with observer. (default: false) - --downloader.api.addr value downloader address ':' - --downloader.disable.ipv4 Turns off ipv4 for the downloader (default: false) - --downloader.disable.ipv6 Turns off ipv6 for the downloader (default: false) - --no-downloader Disables downloader component (default: false) - --downloader.verify Verify snapshots on startup. It will not report problems found, but re-download broken pieces. (default: false) - --healthcheck Enable grpc health check (default: false) - --bor.heimdall value URL of Heimdall service (default: "http://localhost:1317") - --webseed value Comma-separated URL's, holding metadata about network-support infrastructure (like S3 buckets with snapshots, bootnodes, etc...) - --bor.withoutheimdall Run without Heimdall service (for testing purposes) (default: false) - --bor.period Override the bor block period (for testing purposes) (default: false) - --bor.minblocksize Ignore the bor block period and wait for 'blocksize' transactions (for testing purposes) (default: false) - --bor.milestone Enabling bor milestone processing (default: true) - --bor.waypoints Enabling bor waypont recording (default: false) - --polygon.sync Enabling syncing using the new polygon sync component (default: true) - --polygon.sync.stage Enabling syncing with a stage that uses the polygon sync component (default: false) - --polygon.logindex Workaround for incorrect logIndex in RPC (default: false) - --ethstats value Reporting URL of a ethstats service (nodename:secret@host:port) - --override.prague value Manually specify the Prague fork time, overriding the bundled setting (default: 0) - --caplin.discovery.addr value Address for Caplin DISCV5 protocol (default: "0.0.0.0") - --caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000) - --caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001) - --caplin.checkpoint-sync-url value [ --caplin.checkpoint-sync-url value ] checkpoint sync endpoint - --caplin.subscribe-all-topics Subscribe to all gossip topics (default: false) - --caplin.max-peer-count value Max number of peers to connect (default: 128) - --caplin.enable-upnp Enable NAT porting for Caplin (default: false) - --caplin.max-inbound-traffic-per-peer value Max inbound traffic per second per peer (default: "1MB") - --caplin.max-outbound-traffic-per-peer value Max outbound traffic per second per peer (default: "1MB") - --caplin.adaptable-maximum-traffic-requirements Make the node adaptable to the maximum traffic requirement based on how many validators are being ran (default: true) - --sentinel.addr value Address for sentinel (default: "localhost") - --sentinel.port value Port for sentinel (default: 7777) - --sentinel.bootnodes value [ --sentinel.bootnodes value ] Comma separated enode URLs for P2P discovery bootstrap - --sentinel.staticpeers value [ --sentinel.staticpeers value ] connect to comma-separated Consensus static peers - --ots.search.max.pagesize value Max allowed page size for search methods (default: 25) - --silkworm.exec Enable Silkworm block execution (default: false) - --silkworm.rpc Enable embedded Silkworm RPC service (default: false) - --silkworm.sentry Enable embedded Silkworm Sentry service (default: false) - --silkworm.verbosity value Set the log level for Silkworm console logs (default: "info") - --silkworm.contexts value Number of I/O contexts used in embedded Silkworm RPC and Sentry services (zero means use default in Silkworm) (default: 0) - --silkworm.rpc.log Enable interface log for embedded Silkworm RPC service (default: false) - --silkworm.rpc.log.maxsize value Max interface log file size in MB for embedded Silkworm RPC service (default: 1) - --silkworm.rpc.log.maxfiles value Max interface log files for embedded Silkworm RPC service (default: 100) - --silkworm.rpc.log.response Dump responses in interface logs for embedded Silkworm RPC service (default: false) - --silkworm.rpc.workers value Number of worker threads used in embedded Silkworm RPC service (zero means use default in Silkworm) (default: 0) - --silkworm.rpc.compatibility Preserve JSON-RPC compatibility using embedded Silkworm RPC service (default: true) - --beacon.api value [ --beacon.api value ] Enable beacon API (available endpoints: beacon, builder, config, debug, events, node, validator, lighthouse) - --beacon.api.addr value sets the host to listen for beacon api requests (default: "localhost") - --beacon.api.cors.allow-methods value [ --beacon.api.cors.allow-methods value ] set the cors' allow methods (default: "GET", "POST", "PUT", "DELETE", "OPTIONS") - --beacon.api.cors.allow-origins value [ --beacon.api.cors.allow-origins value ] set the cors' allow origins - --beacon.api.cors.allow-credentials set the cors' allow credentials (default: false) - --beacon.api.port value sets the port to listen for beacon api requests (default: 5555) - --beacon.api.read.timeout value Sets the seconds for a read time out in the beacon api (default: 5) - --beacon.api.write.timeout value Sets the seconds for a write time out in the beacon api (default: 31536000) - --beacon.api.protocol value Protocol for beacon API (default: "tcp") - --beacon.api.ide.timeout value Sets the seconds for a write time out in the beacon api (default: 25) - --caplin.blocks-archive sets whether backfilling is enabled for caplin (default: false) - --caplin.blobs-archive sets whether backfilling is enabled for caplin (default: false) - --caplin.states-archive enables archival node for historical states in caplin (it will enable block archival as well) (default: false) - --caplin.blobs-immediate-backfill sets whether caplin should immediatelly backfill blobs (4096 epochs) (default: false) - --caplin.blobs-no-pruning disable blob pruning in caplin (default: false) - --caplin.checkpoint-sync.disable disable checkpoint sync in caplin (default: false) - --caplin.snapgen enables snapshot generation in caplin (default: false) - --caplin.mev-relay-url value MEV relay endpoint. Caplin runs in builder mode if this is set - --caplin.validator-monitor Enable caplin validator monitoring metrics (default: false) - --caplin.custom-config value set the custom config for caplin - --caplin.custom-genesis value set the custom genesis for caplin - --caplin.use-engine-api Use engine API for internal Caplin. useful for testing and if CL network is degraded (default: false) - --trusted-setup-file value Absolute path to trusted_setup.json file - --rpc.slow value Print in logs RPC requests slower than given threshold: 100ms, 1s, 1m. Exluded methods: eth_getBlock,eth_getBlockByNumber,eth_getBlockByHash,eth_blockNumber,erigon_blockNumber,erigon_getHeaderByNumber,erigon_getHeaderByHash,erigon_getBlockByTimestamp,eth_call (default: 0s) - --txpool.gossip.disable Disabling p2p gossip of txs. Any txs received by p2p - will be dropped. Some networks like 'Optimism execution engine'/'Optimistic Rollup' - using it to protect against MEV attacks (default: false) - --sync.loop.block.limit value Sets the maximum number of blocks to process per loop iteration (default: 5000) - --sync.loop.break.after value Sets the last stage of the sync loop to run - --sync.parallel-state-flushing Enables parallel state flushing (default: true) - --chaos.monkey Enable 'chaos monkey' to generate spontaneous network/consensus/etc failures. Use ONLY for testing (default: false) - --shutter Enable the Shutter encrypted transactions mempool (defaults to false) (default: false) - --shutter.p2p.bootstrap.nodes value [ --shutter.p2p.bootstrap.nodes value ] Use to override the default p2p bootstrap nodes (defaults to using the values in the embedded config) - --shutter.p2p.listen.port value Use to override the default p2p listen port (defaults to 23102) (default: 0) - --polygon.pos.ssf Enabling Polygon PoS Single Slot Finality (default: false) - --polygon.pos.ssf.block value Enabling Polygon PoS Single Slot Finality since block (default: 0) - --pprof Enable the pprof HTTP server (default: false) - --pprof.addr value pprof HTTP server listening interface (default: "127.0.0.1") - --pprof.port value pprof HTTP server listening port (default: 6060) - --pprof.cpuprofile value Write CPU profile to the given file - --trace value Write execution trace to the given file - --metrics Enable metrics collection and reporting (default: false) - --metrics.addr value Enable stand-alone metrics HTTP server listening interface (default: "127.0.0.1") - --metrics.port value Metrics HTTP server listening port (default: 6061) - --diagnostics.disabled Disable diagnostics (default: true) - --diagnostics.endpoint.addr value Diagnostics HTTP server listening interface (default: "127.0.0.1") - --diagnostics.endpoint.port value Diagnostics HTTP server listening port (default: 6062) - --diagnostics.speedtest Enable speed test (default: false) - --log.json Format console logs with JSON (default: false) - --log.console.json Format console logs with JSON (default: false) - --log.dir.json Format file logs with JSON (default: false) - --verbosity value Set the log level for console logs (default: "info") - --log.console.verbosity value Set the log level for console logs (default: "info") - --log.dir.disable disable disk logging (default: false) - --log.dir.path value Path to store user and error logs to disk - --log.dir.prefix value The file name prefix for logs stored to disk - --log.dir.verbosity value Set the log verbosity for logs stored to disk (default: "info") - --log.delays Enable block delay logging (default: false) - --config value Sets erigon flags from YAML/TOML file - --help, -h show help - --version, -v print the version + --datadir value Data directory for the databases (default: /home/usr/.local/share/erigon) + --ethash.dagdir value Directory to store the ethash mining DAGs (default: /home/usr/.local/share/erigon-ethash) + --externalcl Enables the external consensus layer (default: false) + --txpool.disable External pool and block producer, see ./cmd/txpool/readme.md for more info. Disabling internal txpool and block producer. (default: false) + --txpool.pricelimit value Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: 1) + --txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10) + --txpool.blobpricebump value Price bump percentage to replace existing (type-3) blob transaction (default: 100) + --txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16) + --txpool.blobslots value Max allowed total number of blobs (within type-3 txs) per account (default: 540) + --txpool.totalblobpoollimit value Total limit of number of all blobs in txs within the txpool (default: 5400) + --txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 10000) + --txpool.globalbasefeeslots value Maximum number of non-executable transactions where only not enough baseFee (default: 30000) + --txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 30000) + --txpool.trace.senders value Comma separated list of addresses, whose transactions will traced in transaction pool with debug printing + --txpool.commit.every value How often transactions should be committed to the storage (default: 15s) + --prune.distance value Keep state history for the latest N blocks (default: everything) (default: 0) + --prune.distance.blocks value Keep block history for the latest N blocks (default: everything) (default: 0) + --prune.mode value Choose a pruning preset to run onto. Available values: "full", "archive", "minimal", "blocks". + full: Keep only necessary blocks and latest state, + blocks: Keep all blocks but not the state history, + archive: Keep the entire state history and all blocks, + minimal: Keep only latest state (default: "full") + --prune.experimental.include-commitment-history, --experimental.commitment-history Enables blazing fast eth_getProof for executed block (default: false) + --batchSize value Batch size for the execution stage (default: "512M") + --bodies.cache value Limit on the cache for block bodies (default: "268435456") + --database.verbosity value Enabling internal db logs. Very high verbosity levels may require recompile db. Default: 2, means warning. (default: 2) + --private.api.addr value Erigon's components (txpool, rpcdaemon, sentry, downloader, ...) can be deployed as independent Processes on same/another server. Then components will connect to erigon by this internal grpc API. example: 127.0.0.1:9090, empty string means not to start the listener. do not expose to public network. serves remote database interface (default: "127.0.0.1:9090") + --private.api.ratelimit value Amount of requests server handle simultaneously - requests over this limit will wait. Increase it - if clients see 'request timeout' while server load is low - it means your 'hot data' is small or have much RAM. (default: 31872) + --etl.bufferSize value Buffer size for ETL operations. (default: "256MB") + --tls Enable TLS handshake (default: false) + --tls.cert value Specify certificate + --tls.key value Specify key file + --tls.cacert value Specify certificate authority + --state.stream.disable Disable streaming of state changes from core to RPC daemon (default: false) + --sync.loop.throttle value Sets the minimum time between sync loop starts (e.g. 1h30m, default is none) + --bad.block value Marks block with given hex string as bad and forces initial reorg before normal staged sync + --http JSON-RPC server (enabled by default). Use --http=false to disable it (default: true) + --http.enabled JSON-RPC HTTP server (enabled by default). Use --http.enabled=false to disable it (default: true) + --graphql Enable the graphql endpoint (default: false) + --http.addr value HTTP-RPC server listening interface (default: "localhost") + --http.port value HTTP-RPC server listening port (default: 8545) + --authrpc.addr value HTTP-RPC server listening interface for the Engine API (default: "localhost") + --authrpc.port value HTTP-RPC server listening port for the Engine API (default: 8551) + --authrpc.jwtsecret value Path to the token that ensures safe connection between CL and EL + --http.compression Enable compression over HTTP-RPC. Use --http.compression=false to disable it (default: true) + --http.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) + --http.vhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts 'any' or '*' as wildcard. (default: "localhost") + --authrpc.vhosts value Comma separated list of virtual hostnames from which to accept Engine API requests (server enforced). Accepts 'any' or '*' as wildcard. (default: "localhost") + --http.api value API's offered over the HTTP-RPC interface (default: "eth,erigon,engine") + --ws.port value WS-RPC server listening port (default: 8546) + --ws Enable the WS-RPC server (default: false) + --ws.compression Enable compression over WebSocket (enabled by default in case WS-RPC is enabled). Use --ws.enabled=false to disable it (default: true) + --http.trace Print all HTTP requests to logs with INFO level (default: false) + --http.dbg.single Allow pass HTTP header 'dbg: true' to printt more detailed logs - how this request was executed (default: false) + --state.cache value Amount of data to store in StateCache (enabled if no --datadir set). Set 0 to disable StateCache. Defaults to 0MB (default: "0MB") + --rpc.batch.concurrency value Does limit amount of goroutines to process 1 batch request. Means 1 bach request can't overload server. 1 batch still can have unlimited amount of request (default: 2) + --rpc.streaming.disable Erigon has enabled json streaming for some heavy endpoints (like trace_*). It's a trade-off: greatly reduce amount of RAM (in some cases from 30GB to 30mb), but it produce invalid json format if error happened in the middle of streaming (because json is not streaming-friendly format) (default: false) + --db.read.concurrency value Does limit amount of parallel db reads. Default: equal to GOMAXPROCS (or number of CPU) (default: 1408) + --rpc.accessList value Specify granular (method-by-method) API allowlist + --trace.compat Bug for bug compatibility with OE for trace_ routines (default: false) + --rpc.gascap value Sets a cap on gas that can be used in eth_call/estimateGas (default: 50000000) + --rpc.batch.limit value Maximum number of requests in a batch (default: 100) + --rpc.returndata.limit value Maximum number of bytes returned from eth_call or similar invocations (default: 100000) + --rpc.allow-unprotected-txs Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: false) + --rpc.txfeecap value Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 1) + --txpool.api.addr value TxPool api network address, for example: 127.0.0.1:9090 (default: use value of --private.api.addr) + --trace.maxtraces value Sets a limit on traces that can be returned in trace_filter (default: 200) + --http.timeouts.read value Maximum duration for reading the entire request, including the body. (default: 30s) + --http.timeouts.write value Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read. (default: 30m0s) + --http.timeouts.idle value Maximum amount of time to wait for the next request when keep-alive connections are enabled. If http.timeouts.idle is zero, the value of http.timeouts.read is used. (default: 2m0s) + --authrpc.timeouts.read value Maximum duration for reading the entire request, including the body. (default: 30s) + --authrpc.timeouts.write value Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read. (default: 30m0s) + --authrpc.timeouts.idle value Maximum amount of time to wait for the next request when keep-alive connections are enabled. If authrpc.timeouts.idle is zero, the value of authrpc.timeouts.read is used. (default: 2m0s) + --rpc.evmtimeout value Maximum amount of time to wait for the answer from EVM call. (default: 5m0s) + --rpc.overlay.getlogstimeout value Maximum amount of time to wait for the answer from the overlay_getLogs call. (default: 5m0s) + --rpc.overlay.replayblocktimeout value Maximum amount of time to wait for the answer to replay a single block when called from an overlay_getLogs call. (default: 10s) + --rpc.subscription.filters.maxlogs value Maximum number of logs to store per subscription. (default: 0) + --rpc.subscription.filters.maxheaders value Maximum number of block headers to store per subscription. (default: 0) + --rpc.subscription.filters.maxtxs value Maximum number of transactions to store per subscription. (default: 0) + --rpc.subscription.filters.maxaddresses value Maximum number of addresses per subscription to filter logs by. (default: 0) + --rpc.subscription.filters.maxtopics value Maximum number of topics per subscription to filter logs by. (default: 0) + --snap.keepblocks Keep ancient blocks in db (useful for debug) (default: false) + --snap.stop Workaround to stop producing new snapshots, if you meet some snapshots-related critical bug. It will stop move historical data from DB to new immutable snapshots. DB will grow and may slightly slow-down - and removing this flag in future will not fix this effect (db size will not greatly reduce). (default: false) + --snap.state.stop Workaround to stop producing new state files, if you meet some state-related critical bug. It will stop aggregate DB history in a state files. DB will grow and may slightly slow-down - and removing this flag in future will not fix this effect (db size will not greatly reduce). (default: false) + --snap.skip-state-snapshot-download Skip state download and start from genesis block (default: false) + --db.pagesize value DB is splitted to 'pages' of fixed size. Can't change DB creation. Must be power of 2 and '256b <= pagesize <= 64kb'. Default: equal to OperationSystem's pageSize. Bigger pageSize causing: 1. More writes to disk during commit 2. Smaller b-tree high 3. Less fragmentation 4. Less overhead on 'free-pages list' maintainance (a bit faster Put/Commit) 5. If expecting DB-size > 8Tb then set pageSize >= 8Kb (default: "16KB") + --db.size.limit value Runtime limit of chaindata db size (can change at any time) (default: "1TB") + --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default: true) + --torrent.port value Port to listen and serve BitTorrent protocol (default: 42069) + --torrent.maxpeers value Unused parameter (reserved for future use) (default: 100) + --torrent.conns.perfile value Number of connections per file (default: 10) + --torrent.trackers.disable Disable conventional BitTorrent trackers (default: false) + --torrent.upload.rate value Bytes per second, example: 32mb (default: "32mb") + --torrent.download.rate value Bytes per second, example: 32mb. Shared with webseeds unless that rate is set separately. + --torrent.webseed.download.rate value Bytes per second for webseeds, example: 32mb. If not set, rate limit is shared with torrent.download.rate + --torrent.verbosity value 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (must set --verbosity to equal or higher level and has default: 2) (default: 1) + --port value Network listening port (default: 30303) + --p2p.protocol value [ --p2p.protocol value ] Version of eth p2p protocol (default: 68, 67) + --p2p.allowed-ports value [ --p2p.allowed-ports value ] Allowed ports to pick for different eth p2p protocol versions as follows ,,.., (default: 30303, 30304, 30305, 30306, 30307) + --nat value NAT port mapping mechanism (any|none|upnp|pmp|stun|extip:) + "" 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:" Uses STUN to detect an external IP using the given server (host:port) + --nodiscover Disables the peer discovery mechanism (manual peer addition) (default: false) + --v5disc Enables the experimental RLPx V5 (Topic Discovery) mechanism (default: false) + --netrestrict value Restricts network communication to the given IP networks (CIDR masks) + --nodekey value P2P node key file + --nodekeyhex value P2P node key as hex (for testing) + --discovery.dns value Sets DNS discovery entry points (use "" to disable DNS) + --bootnodes value Comma separated enode URLs for P2P discovery bootstrap + --staticpeers value Comma separated enode URLs to connect to + --trustedpeers value Comma separated enode URLs which are always allowed to connect, even above the peer limit + --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 32) + --chain value name of the network to join (default: "mainnet") + --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) + --vmdebug Record information useful for VM and contract debugging (default: false) + --networkid value Explicitly set network id (integer)(For testnets: use --chain instead) (default: 1) + --persist.receipts, --experiment.persist.receipts.v2 Download historical Receipts. If disabled: using state-history to re-exec transactions and generate Receipts - all RPC: eth_getLogs, eth_getBlockReceipts will work (just higher latency) (default: true) + --fakepow Disables proof-of-work verification (default: false) + --gpo.blocks value Number of recent blocks to check for gas prices (default: 20) + --gpo.percentile value Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60) + --allow-insecure-unlock Allow insecure account unlocking when account-related RPCs are exposed by http (default: false) + --identity value Custom node name + --clique.checkpoint value Number of blocks after which to save the vote snapshot to the database (default: 10) + --clique.snapshots value Number of recent vote snapshots to keep in memory (default: 1024) + --clique.signatures value Number of recent block signatures to keep in memory (default: 16384) + --clique.datadir value Path to clique db folder + --mine Enable mining (default: false) + --proposer.disable Disables PoS proposer (default: false) + --miner.notify value Comma separated HTTP URL list to notify of new work packages + --miner.gaslimit value Target gas limit for mined blocks (default: 0) + --miner.etherbase value Public address for block mining rewards (default: "0") + --miner.gasprice value Minimum gas price for mining a transaction (default: 0) + --miner.extradata value Block extra data set by the miner (default = client version) + --miner.noverify Disable remote sealing verification (default: false) + --miner.sigfile value Private key to sign blocks with + --miner.recommit value Time interval to recreate the block being mined (default: 3s) + --sentry.api.addr value Comma separated sentry addresses ':,:' + --sentry.log-peer-info Log detailed peer info when a peer connects or disconnects. Enable to integrate with observer. (default: false) + --downloader.api.addr value downloader address ':' + --downloader.disable.ipv4 Turns off ipv4 for the downloader (default: false) + --downloader.disable.ipv6 Turns off ipv6 for the downloader (default: false) + --no-downloader Disables downloader component (default: false) + --downloader.verify Verify snapshots on startup. It will not report problems found, but re-download broken pieces. (default: false) + --healthcheck Enable grpc health check (default: false) + --bor.heimdall value URL of Heimdall service (default: "http://localhost:1317") + --webseed value Comma-separated URL's, holding metadata about network-support infrastructure (like S3 buckets with snapshots, bootnodes, etc...) + --bor.withoutheimdall Run without Heimdall service (for testing purposes) (default: false) + --bor.period Override the bor block period (for testing purposes) (default: false) + --bor.minblocksize Ignore the bor block period and wait for 'blocksize' transactions (for testing purposes) (default: false) + --aa Enable AA transactions (default: false) + --ethstats value Reporting URL of a ethstats service (nodename:secret@host:port) + --override.osaka value Manually specify the Osaka fork time, overriding the bundled setting (default: 0) + --caplin.discovery.addr value Address for Caplin DISCV5 protocol (default: "0.0.0.0") + --caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000) + --caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001) + --caplin.checkpoint-sync-url value [ --caplin.checkpoint-sync-url value ] checkpoint sync endpoint + --caplin.subscribe-all-topics Subscribe to all gossip topics (default: false) + --caplin.max-peer-count value Max number of peers to connect (default: 128) + --caplin.enable-upnp Enable NAT porting for Caplin (default: false) + --caplin.max-inbound-traffic-per-peer value Max inbound traffic per second per peer (default: "1MB") + --caplin.max-outbound-traffic-per-peer value Max outbound traffic per second per peer (default: "1MB") + --caplin.adaptable-maximum-traffic-requirements Make the node adaptable to the maximum traffic requirement based on how many validators are being ran (default: true) + --sentinel.addr value Address for sentinel (default: "localhost") + --sentinel.port value Port for sentinel (default: 7777) + --sentinel.bootnodes value [ --sentinel.bootnodes value ] Comma separated enode URLs for P2P discovery bootstrap + --sentinel.staticpeers value [ --sentinel.staticpeers value ] connect to comma-separated Consensus static peers + --ots.search.max.pagesize value Max allowed page size for search methods (default: 25) + --silkworm.exec Enable Silkworm block execution (default: false) + --silkworm.rpc Enable embedded Silkworm RPC service (default: false) + --silkworm.sentry Enable embedded Silkworm Sentry service (default: false) + --silkworm.verbosity value Set the log level for Silkworm console logs (default: "info") + --silkworm.contexts value Number of I/O contexts used in embedded Silkworm RPC and Sentry services (zero means use default in Silkworm) (default: 0) + --silkworm.rpc.log Enable interface log for embedded Silkworm RPC service (default: false) + --silkworm.rpc.log.maxsize value Max interface log file size in MB for embedded Silkworm RPC service (default: 1) + --silkworm.rpc.log.maxfiles value Max interface log files for embedded Silkworm RPC service (default: 100) + --silkworm.rpc.log.response Dump responses in interface logs for embedded Silkworm RPC service (default: false) + --silkworm.rpc.workers value Number of worker threads used in embedded Silkworm RPC service (zero means use default in Silkworm) (default: 0) + --silkworm.rpc.compatibility Preserve JSON-RPC compatibility using embedded Silkworm RPC service (default: true) + --beacon.api value [ --beacon.api value ] Enable beacon API (available endpoints: beacon, builder, config, debug, events, node, validator, lighthouse) + --beacon.api.addr value sets the host to listen for beacon api requests (default: "localhost") + --beacon.api.cors.allow-methods value [ --beacon.api.cors.allow-methods value ] set the cors' allow methods (default: "GET", "POST", "PUT", "DELETE", "OPTIONS") + --beacon.api.cors.allow-origins value [ --beacon.api.cors.allow-origins value ] set the cors' allow origins + --beacon.api.cors.allow-credentials set the cors' allow credentials (default: false) + --beacon.api.port value sets the port to listen for beacon api requests (default: 5555) + --beacon.api.read.timeout value Sets the seconds for a read time out in the beacon api (default: 5) + --beacon.api.write.timeout value Sets the seconds for a write time out in the beacon api (default: 31536000) + --beacon.api.protocol value Protocol for beacon API (default: "tcp") + --beacon.api.ide.timeout value Sets the seconds for a write time out in the beacon api (default: 25) + --caplin.blocks-archive sets whether backfilling is enabled for caplin (default: false) + --caplin.blobs-archive sets whether backfilling is enabled for caplin (default: false) + --caplin.states-archive enables archival node for historical states in caplin (it will enable block archival as well) (default: false) + --caplin.blobs-immediate-backfill sets whether caplin should immediatelly backfill blobs (4096 epochs) (default: false) + --caplin.blobs-no-pruning disable blob pruning in caplin (default: false) + --caplin.checkpoint-sync.disable disable checkpoint sync in caplin (default: false) + --caplin.snapgen enables snapshot generation in caplin (default: false) + --caplin.mev-relay-url value MEV relay endpoint. Caplin runs in builder mode if this is set + --caplin.validator-monitor Enable caplin validator monitoring metrics (default: false) + --caplin.custom-config value set the custom config for caplin + --caplin.custom-genesis value set the custom genesis for caplin + --caplin.use-engine-api Use engine API for internal Caplin. useful for testing and if CL network is degraded (default: false) + --trusted-setup-file value Absolute path to trusted_setup.json file + --rpc.slow value Print in logs RPC requests slower than given threshold: 100ms, 1s, 1m. Exluded methods: eth_getBlock,eth_getBlockByNumber,eth_getBlockByHash,eth_blockNumber,erigon_blockNumber,erigon_getHeaderByNumber,erigon_getHeaderByHash,erigon_getBlockByTimestamp,eth_call (default: 0s) + --txpool.gossip.disable Disabling p2p gossip of txs. Any txs received by p2p - will be dropped. Some networks like 'Optimism execution engine'/'Optimistic Rollup' - using it to protect against MEV attacks (default: false) + --sync.loop.block.limit value Sets the maximum number of blocks to process per loop iteration (default: 5000) + --sync.loop.break.after value Sets the last stage of the sync loop to run + --sync.parallel-state-flushing Enables parallel state flushing (default: true) + --chaos.monkey Enable 'chaos monkey' to generate spontaneous network/consensus/etc failures. Use ONLY for testing (default: false) + --shutter Enable the Shutter encrypted transactions mempool (defaults to false) (default: false) + --shutter.p2p.bootstrap.nodes value [ --shutter.p2p.bootstrap.nodes value ] Use to override the default p2p bootstrap nodes (defaults to using the values in the embedded config) + --shutter.p2p.listen.port value Use to override the default p2p listen port (defaults to 23102) (default: 0) + --polygon.pos.ssf Enabling Polygon PoS Single Slot Finality (default: false) + --polygon.pos.ssf.block value Enabling Polygon PoS Single Slot Finality since block (default: 0) + --gdbme restart erigon under gdb for debug purposes (default: false) + --experimental.concurrent-commitment EXPERIMENTAL: enables concurrent trie for commitment (default: false) + --pprof Enable the pprof HTTP server (default: false) + --pprof.addr value pprof HTTP server listening interface (default: "127.0.0.1") + --pprof.port value pprof HTTP server listening port (default: 6060) + --pprof.cpuprofile value Write CPU profile to the given file + --trace value Write execution trace to the given file + --vmtrace value Set the provider tracer + --vmtrace.jsonconfig value Set the config of the tracer + --metrics Enable metrics collection and reporting (default: false) + --metrics.addr value Enable stand-alone metrics HTTP server listening interface (default: "127.0.0.1") + --metrics.port value Metrics HTTP server listening port (default: 6061) + --diagnostics.disabled Disable diagnostics (default: true) + --diagnostics.endpoint.addr value Diagnostics HTTP server listening interface (default: "127.0.0.1") + --diagnostics.endpoint.port value Diagnostics HTTP server listening port (default: 6062) + --diagnostics.speedtest Enable speed test (default: false) + --log.json Format console logs with JSON (default: false) + --log.console.json Format console logs with JSON (default: false) + --log.dir.json Format file logs with JSON (default: false) + --verbosity value Set the log level for console logs (default: "info") + --log.console.verbosity value Set the log level for console logs (default: "info") + --log.dir.disable disable disk logging (default: false) + --log.dir.path value Path to store user and error logs to disk + --log.dir.prefix value The file name prefix for logs stored to disk + --log.dir.verbosity value Set the log verbosity for logs stored to disk (default: "info") + --log.delays Enable block delay logging (default: false) + --config value Sets erigon flags from YAML/TOML file + --help, -h show help + --version, -v print the version ``` diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md deleted file mode 100644 index 1c3fcb9..0000000 --- a/src/basic/disk-space.md +++ /dev/null @@ -1,44 +0,0 @@ -# Disk Space Required -*How much space your Erigon node will take* - -# Mainnets - -Below is the size of the `--datadir` used by Erigon. - -## Erigon with Caplin - -| Network | Archive Node | Full Node | Minimal Node | -|----------|--------------|-----------|--------------| -| Ethereum | 2.2 TB | 1.1 TB | 370 GB | -| Gnosis | 566 GB | 312 GB | 108 GB | -| Polygon | 4.3 TB | 2.6 TB | 1.1 TB | - -See also [sync times](https://github.com/erigontech/erigon?tab=readme-ov-file#sync-times). - - - -# Testnets -## Erigon with Caplin - -| Network | Archive Node | Full Node | Minimal Node | -|----------|--------------|-----------|--------------| -| Holesky | 268 GB | 187 GB | 117 GB | -| Sepolia | 708 GB | 510 GB | 122 GB | -| Hoodi | 16 GB | 16 GB | 15 GB | -| Chiado | 25 GB | 18 GB | 14 GB | - -See also hints on [optimizing storage](optimizing-storage.md). diff --git a/src/basic/node.md b/src/basic/node.md index 3613659..4e0ae19 100644 --- a/src/basic/node.md +++ b/src/basic/node.md @@ -21,13 +21,13 @@ Minimal node is suitable for users with constrained hardware who wants to achiev ## Full node -Erigon 3 is full node by default (`--prune.mode=full`). This configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](disk-space.md) requirements of Erigon 3, the full node configuration is suitable for the majority of users. +Erigon 3 is full node by default (`--prune.mode=full`). This configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) requirements of Erigon 3, the full node configuration is suitable for the majority of users. ## Archive node Ethereum's state refers to account balances, contracts, and consensus data. Archive nodes store every historical state, making it easier to access past data, but requiring more disk space. They provide comprehensive historical data, making them optimal for conducting extensive **research** on the chain, ranging from searching for old states of the EVM to implementing advanced block explorers, such as Otterscan, and undertaking **development** activities. -Erigon 3 has consistently reduced the [disk space](disk-space.md) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. To run a archive node use the flag `--prune.mode=archive`. +Erigon 3 has consistently reduced the [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. To run a archive node use the flag `--prune.mode=archive`.
diff --git a/src/basic/optimizing-storage.md b/src/basic/optimizing-storage.md index 1b8a5b7..99c4c47 100644 --- a/src/basic/optimizing-storage.md +++ b/src/basic/optimizing-storage.md @@ -1,33 +1 @@ # Optimizing Storage -*Using fast disks and cheap disks* - -For optimal performance, it's recommended to store the datadir on a fast NVMe-RAID disk. However, if this is not feasible, you can store the history on a cheaper disk and still achieve good performance. - -## Step 1: Store datadir on the slow disk - -Place the `datadir` on the slower disk. Then, create symbolic links (using `ln -s`) to the **fast disk** for the following sub-folders: - -- `chaindata` -- `snapshots/domain` - -This will speed up the execution of E3. - -On the **slow disk** place `datadir` folder with the following structure: - - `chaindata` (linked to fast disk) - - `snapshots` - - `domain` (linked to fast disk) - - `history` - - `idx` - - `accessor` - - `temp` - - -## Step 2: Speed Up History Access (Optional) - -If you need to further improve performance try the following improvements step by step: - -1. Store the `snapshots/accessor` folder on the fast disk. This should provide a noticeable speed boost. -2. If the speed is still not satisfactory, move the `snapshots/idx` folder to the fast disk. -3. If performance is still an issue, consider moving the entire `snapshots/history` folder to the fast disk. - -By following these steps, you can optimize your Erigon 3 storage setup to achieve a good balance between performance and cost. \ No newline at end of file diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index f1becc6..e52e9d5 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -6,7 +6,7 @@ A locally mounted **SSD** (Solid-State Drive) or **NVMe** (Non-Volatile Memory E Additionally, SSDs may experience performance degradation when nearing full capacity. -See here how you can [optimize storage](../basic/optimizing-storage.md). +See here how you can [optimize storage](../advanced/optimizing-storage.md). Here is the outline of the hardware requirements for running Erigon on the following networks: @@ -54,9 +54,9 @@ Archive nodes retain **all** historical state and require significantly more dis | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|--------------------------|----------------|-------------------| -| Mainnet | 2 TB | 4 TB | 32 GB | 64 GB | -| Polygon | 4.3 TB | 6 TB | 64 GB | 128 GB | -| Gnosis | 1 TB | 2 TB | 16 GB | 32 GB | +| Mainnet | 1.8 TB | 4 TB | 32 GB | 64 GB | +| Polygon | 4 TB | 6 TB | 64 GB | 128 GB | +| Gnosis | 0.6 TB | 2 TB | 16 GB | 32 GB | @@ -67,4 +67,4 @@ Your internet bandwidth is also an important factor, particularly for sync speed | Node Type | Bandwidth (Required) | Bandwidth (Recommended) | |---------------|----------------------|--------------------------| | Staking/Mining | 10 Mbps | 50 Mbps | -| Non-Staking | 5 Mbps | 25 Mbps | +| Non-Staking | 5 Mbps | 25 Mbps | \ No newline at end of file diff --git a/src/getting-started/sw-requirements.md b/src/getting-started/sw-requirements.md index cbbace4..b4ab17d 100644 --- a/src/getting-started/sw-requirements.md +++ b/src/getting-started/sw-requirements.md @@ -24,7 +24,7 @@ sudo apt install build-essential cmake -y ### Go Programming Language -Erigon utilizes Go (also known as Golang) version 1.23 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the /usr/local/go folder (you may need to use sudo) and re-extract the new version in its place. +Erigon utilizes Go (also known as Golang) version 1.24 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the /usr/local/go folder (you may need to use sudo) and re-extract the new version in its place. To install the latest Go version, visit the official documentation at [https://golang.org/doc/install](https://golang.org/doc/install). diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index 401842c..cd4f403 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -3,7 +3,7 @@ ## Prerequisites - Check the [hardware](../getting-started/hw-requirements.md) prerequisites; -- Check which [type of node](../basic/node.md) you want to run and the [disk space](../basic/disk-space.md) required. +- Check which [type of node](../basic/node.md) you want to run and the [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) required. ## Install Erigon​ diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index 9fbc0e6..4dc7f6a 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -3,7 +3,7 @@ ## Prerequisites - Check the [hardware](../getting-started/hw-requirements.md) prerequisites; -- Check which [type of node](../basic/node.md) you want to run and the [disk space](../basic/disk-space.md) required. +- Check which [type of node](../basic/node.md) you want to run and the [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) required. ## Install Erigon​ diff --git a/src/nodes/polygon.md b/src/nodes/polygon.md index ec3754f..6c3434d 100644 --- a/src/nodes/polygon.md +++ b/src/nodes/polygon.md @@ -3,7 +3,7 @@ ## Prerequisites - Check the [hardware](../getting-started/hw-requirements.md) prerequisites; -- Check which [type of node](../basic/node.md) you want to run and the [disk space](../basic/disk-space.md) required. +- Check which [type of node](../basic/node.md) you want to run and the [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) required. ## Install Erigon​ From f30e4334131b7ce3b73a363444f0bed821e91e09 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 8 Aug 2025 08:47:40 +0200 Subject: [PATCH 02/22] fixed disk size for mainnet --- src/getting-started/hw-requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index e52e9d5..c690d2e 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -54,7 +54,7 @@ Archive nodes retain **all** historical state and require significantly more dis | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|--------------------------|----------------|-------------------| -| Mainnet | 1.8 TB | 4 TB | 32 GB | 64 GB | +| Mainnet | 1.5 TB | 4 TB | 32 GB | 64 GB | | Polygon | 4 TB | 6 TB | 64 GB | 128 GB | | Gnosis | 0.6 TB | 2 TB | 16 GB | 32 GB | From db618eeb062321ce384555fe3e6bd78a6bc352d8 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Tue, 12 Aug 2025 18:08:53 +0200 Subject: [PATCH 03/22] updated disk sizes and upgrading --- src/getting-started/hw-requirements.md | 34 +++++------ src/installation/upgrading.md | 82 ++++++++++++++++++-------- 2 files changed, 76 insertions(+), 40 deletions(-) diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index c690d2e..44cb9aa 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -30,11 +30,11 @@ General recommendations for all node types include: Minimal nodes are suitable for light operation with pruned state and minimal historical data retention. (`--prune.mode=minimal`) -| Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | -|-----------|----------------------|--------------------------|----------------|-------------------| -| Mainnet | 500 GB | 500 GB | 16 GB | 64 GB | -| Polygon | 2 TB | 2 TB | 32 GB | 64 GB | -| Gnosis | 250 GB | 500 GB | 8 GB | 16 GB | +| Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | +|-----------|-----------------------|-------------------------|----------------|-------------------| +| Mainnet | 370 GB | 500 GB | 16 GB | 64 GB | +| Polygon | 2 TB | 2 TB | 32 GB | 64 GB | +| Gnosis | 250 GB | 500 GB | 8 GB | 16 GB | ## Full Node Requirements @@ -42,10 +42,10 @@ Minimal nodes are suitable for light operation with pruned state and minimal his Full nodes maintain full state with standard pruning and all recent data. (`--prune.mode=full`) | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | -|-----------|----------------------|--------------------------|----------------|-------------------| -| Mainnet | 1 TB | 2 TB | 16 GB | 64 GB | -| Polygon | 2 TB | 4 TB | 16 GB | 32 GB | -| Gnosis | 500 GB | 1 TB | 8 GB | 16 GB | +|-----------|----------------------|-------------------------|----------------|-------------------| +| Mainnet | 1.5 TB | 2 TB | 16 GB | 64 GB | +| Polygon | 2 TB | 4 TB | 16 GB | 32 GB | +| Gnosis | 640 GB | 1 TB | 8 GB | 16 GB | ## Archive Node Requirements @@ -53,10 +53,10 @@ Full nodes maintain full state with standard pruning and all recent data. (`--p Archive nodes retain **all** historical state and require significantly more disk space. These are typically used for block explorers or deep analytical queries. (`--prune.mode=archive`) | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | -|-----------|----------------------|--------------------------|----------------|-------------------| -| Mainnet | 1.5 TB | 4 TB | 32 GB | 64 GB | -| Polygon | 4 TB | 6 TB | 64 GB | 128 GB | -| Gnosis | 0.6 TB | 2 TB | 16 GB | 32 GB | +|-----------|----------------------|-------------------------|----------------|-------------------| +| Mainnet | 3.2 TB | 4 TB | 32 GB | 64 GB | +| Polygon | 4.1 TB | 6 TB | 64 GB | 128 GB | +| Gnosis | 1.2 TB | 2 TB | 16 GB | 32 GB | @@ -64,7 +64,7 @@ Archive nodes retain **all** historical state and require significantly more dis Your internet bandwidth is also an important factor, particularly for sync speed and validator performance. -| Node Type | Bandwidth (Required) | Bandwidth (Recommended) | -|---------------|----------------------|--------------------------| -| Staking/Mining | 10 Mbps | 50 Mbps | -| Non-Staking | 5 Mbps | 25 Mbps | \ No newline at end of file +| Node Type | Bandwidth (Required) | Bandwidth (Recommended) | +|----------------|----------------------|-------------------------| +| Staking/Mining | 10 Mbps | 50 Mbps | +| Non-Staking | 5 Mbps | 25 Mbps | \ No newline at end of file diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 7653ead..1555e8f 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -1,43 +1,45 @@ # Upgrading from a previous version -To upgrade Erigon to a newer version when you've originally installed it via Git and manual compilation, you should follow these steps without needing to delete the entire folder: +Updating to the latest version of Erigon gives you access to the latest features and ensures optimal performance and stability. -* **Terminate your Erigon** session by pressing CTRL+C +## General Recommendations Before Upgrade -* **Navigate to your Erigon directory** +- **Read Release Notes**: Carefully review the [Release Notes](https://github.com/erigontech/erigon/releases) for breaking changes and new features relevant to your setup. +- **Terminate your Erigon**: End your current Erigon session by pressing `CTRL+C`. +- **Backup**: Always back up your `datadir` before performing major upgrades. -* **Fetch the latest changes from the repository**: You need to make sure your local repository is up-to-date with the main GitHub repository. Run: +## Snapshots Format - ```bash - git fetch --tags - ``` +As of Erigon 3.1 Pebble Paws, the snapshot format has been updated so that you will no longer need to perform data upgrades or re-sync from scratch with future releases. -* **Check out** the [latest version](https://github.com/ledgerwatch/erigon/releases) and switch to it using: +When upgrading from 3.0.x to 3.1.x, Erigon will automatically update the data format upon launch. To speed up this process, you can also perform the update manually using the flags below: +> This operation is **OPTIONAL**. - ```bash - git checkout - ``` +1. Backup your datadir. +2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. +3. Upgrade snapshot files: + 1. Run `erigon snapshots update-to-new-ver-format --datadir /your/datadir`. + 2. Reset your datadir so that Erigon will sync to a newer snapshot by running command `erigon snapshots reset --datadir /your/datadir`. +4. Run Erigon. +## Upgrading your Erigon Installation - Replace `` with the version tag of the new release, for example: +Follow the below instructions depending on your installation method: - ```bash - git checkout v3.0.0 - ``` +- [Pre-built binaries](#pre-built-binaries) +- [Docker](#docker) +- [Compiled source code](#compiled-from-source) -* **Rebuild Erigon**: Since the codebase has changed, you need to compile the new version. Run: +## Pre-built Binaries - ```bash - make erigon - ``` +Download the latest binary file from , do the [checksum](../installation/prebuilt.md#checksums) and reinstall it, no other operation needed. -This process updates your installation to the latest version you specify, while maintaining your existing data and configuration settings in the Erigon folder. You're essentially just replacing the executable with a newer version. +## Docker -# Docker If you're using Docker to run Erigon, the process to upgrade to a newer version of the software is straightforward and revolves around pulling the latest Docker image and then running it. Here's how you can upgrade Erigon using Docker: -* **Pull the Latest Docker Image**: First, find out the tag of the new release from the Erigon Docker Hub page. Once you know the tag, pull the new image: +* **Pull the Latest Docker Image**: First, find out the tag of the new release from the [Erigon Docker Hub](https://hub.docker.com/r/erigontech/erigon). Once you know the tag, pull the new image: ```bash docker pull erigontech/erigon: @@ -86,4 +88,38 @@ If you're using Docker to run Erigon, the process to upgrade to a newer version * **Verify Operation**: Ensure that Erigon starts correctly and connects to the desired network, verifying the logs for any initial errors. -By following these steps, you'll keep your Docker setup clean and up-to-date with the latest Erigon version without needing to manually clean up or reconfigure your environment. Docker's ability to encapsulate software in containers simplifies upgrades and reduces conflicts with existing software on your machine. \ No newline at end of file +By following these steps, you'll keep your Docker setup clean and up-to-date with the latest Erigon version without needing to manually clean up or reconfigure your environment. + +## Compiled from source + +To upgrade Erigon to a newer version when you've originally installed it via Git and manual compilation, you should follow these steps without needing to delete the entire folder: + +* **Navigate to your Erigon directory** + +* **Fetch the latest changes from the repository**: You need to make sure your local repository is up-to-date with the main GitHub repository. Run: + + ```bash + git fetch --tags + ``` + +* **Check out** the [latest version](https://github.com/erigontech/erigon/releases) and switch to it using: + + + ```bash + git checkout + ``` + + + Replace `` with the version tag of the new release, for example: + + ```bash + git checkout v3.1.0 + ``` + +* **Rebuild Erigon**: Since the codebase has changed, you need to compile the new version. Run: + + ```bash + make erigon + ``` + +This process updates your installation to the latest version you specify, while maintaining your existing data and configuration settings in the Erigon folder. You're essentially just replacing the executable with a newer version. \ No newline at end of file From 80b9220b3ae107037ebe599deedf76db7281b61c Mon Sep 17 00:00:00 2001 From: Bloxster Date: Wed, 13 Aug 2025 16:21:52 +0200 Subject: [PATCH 04/22] updated upgrading, compiling, ver., sizes --- .gitignore | 7 ++ src/SUMMARY.md | 3 +- src/advanced/configuring.md | 2 +- src/advanced/shutter.md | 68 +++++++++++++++ src/getting-started/hw-requirements.md | 10 +-- src/installation/build.md | 17 +++- src/installation/build_exec_win.md | 2 +- src/installation/prebuilt.md | 11 +-- src/installation/upgrading.md | 19 ++--- src/tools/installation.md | 16 ---- src/tools/introduction.md | 13 --- src/tools/options.md | 49 ----------- src/tools/setup.md | 112 ------------------------- src/tools/user_interface.md | 20 ----- 14 files changed, 112 insertions(+), 237 deletions(-) create mode 100644 src/advanced/shutter.md delete mode 100644 src/tools/installation.md delete mode 100644 src/tools/introduction.md delete mode 100644 src/tools/options.md delete mode 100644 src/tools/setup.md delete mode 100644 src/tools/user_interface.md diff --git a/.gitignore b/.gitignore index 7585238..9bb971b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,8 @@ book +/tools/installation.md +/tools/introduction.md +/tools/options.md +/tools/setup.md +/tools/user_interface.md + + diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 07b5c7b..2786e0d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -42,14 +42,15 @@ - [TxPool](advanced/txpool.md) - [Sentry](advanced/sentry.md) - [Downloader](advanced/downloader.md) - - [Running an Op-node](advanced/op-node.md) - [TLS Authentication](advanced/tls-authentication.md) + - [Running an Op-node](advanced/op-node.md) - [Otterscan](tools/otterscan.md) - [Performance Tricks](advanced/performance.md) - [Staking](staking.md) - [External CL](advanced/bp-ext.md) - [Caplin](advanced/bp-caplin.md) + - [Shutter Network](advanced/shutter.md) - [About](about.md) - [License](about/license.md) diff --git a/src/advanced/configuring.md b/src/advanced/configuring.md index a72436e..1e07b20 100644 --- a/src/advanced/configuring.md +++ b/src/advanced/configuring.md @@ -29,7 +29,7 @@ These flags cover the general behavior and configuration of the Erigon client. * `--ethstats value`: The reporting URL for an ethstats service. * `--trusted-setup-file value`: Absolute path to a `trusted_setup.json` file. * `--persist.receipts, --experiment.persist.receipts.v2`: Downloads historical receipts. - * **Default:** `true` + * **Default:** `true` for minimal and full nodes, `false` for archive nodes ### Database and Caching diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md new file mode 100644 index 0000000..2cc5bf2 --- /dev/null +++ b/src/advanced/shutter.md @@ -0,0 +1,68 @@ +# Shutter Network + +## What is Shutter Network? + +[Shutter Network](https://www.shutter.network) is a privacy-focused protocol that provides encrypted transaction pools using threshold encryption. The main objective is to protect users from malicious MEV (Miner Extractable Value) attacks such as front-running and sandwich attacks by encrypting transactions until they are included in a block. + +The key advantages of Shutter Network are: +- **Protection against MEV attacks:** By encrypting transactions, the network prevents malicious actors from exploiting transaction ordering. +- **Threshold encryption:** Transactions are only decrypted when enough key holders (keypers) participate, ensuring security and decentralization. +- **Support on Gnosis Chain:** Shutter encrypted transaction pools are currently available on [Gnosis Chain](https://docs.gnosischain.com/shutterized-gc/), with plans for Ethereum support. + +### Why Use Shutter? + +- **Access to Extra Transactions:** Shutterized validators can include shielded transactions not available in the public transaction pool, leading to potentially higher block rewards. +- **User Protection:** Help protect users against MEV attacks, improving the fairness of the chain. + +## How to Run Erigon as a Shutterized Validator + +To participate in the Shutter encrypted transaction pool as a validator using Erigon, follow these steps: + +1. **Set Up Your Validator** + + Deposit your stake and register your validator on Gnosis Chain. + Reference: [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) + +2. **Register as a Shutterized Validator** + + Complete validator registration for Shutter using the provided tool: + Reference: [Shutter Validator Registration Guide](https://github.com/NethermindEth/shutter-validator-registration) + +3. **Verify Registration** + + Use the Erigon CLI command to verify that your registration was successful: + ```bash + erigon shutter-validator-reg-check --chain --el-url --validator-info-file + ``` + - `` is the file generated during registration. + +4. **Run Erigon with Shutter Support** + + Start Erigon as usual, but add the `--shutter` flag to enable Shutterized Validator mode: + ```bash + erigon --shutter [other options...] + ``` + This works with Erigon's internal CL Caplin (enabled by default) or with an external CL client using `--externalcl`. + +## Options + +Below are relevant CLI options and configuration settings for Shutter functionality in Erigon: + +| Option | Description | +|-----------------------------------------------|----------------------------------------------------------------| +| `--shutter` | Enables Shutterized Validator mode. | +| `--externalcl` | Use an external Consensus Layer client instead of Caplin. | +| `shutter-validator-reg-check` | Command to verify Shutter validator registration. | +| `--chain ` | Specifies the chain (e.g., Gnosis). | +| `--el-url ` | Sets the execution layer RPC endpoint. | +| `--validator-info-file ` | Path to validator info JSON file produced during registration. | + +**Shutter Network Default Port:** +- `23102` (TCP) — Peering port for Shutter. + +**Reference Documentation:** +- [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) +- [Shutter Validator Registration](https://github.com/NethermindEth/shutter-validator-registration) +- [Shutter Specs](https://github.com/gnosischain/specs/tree/master/shutter) +- [System Overview Dashboard](https://explorer.shutter.network/system-overview) + diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 44cb9aa..ac25411 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -34,7 +34,7 @@ Minimal nodes are suitable for light operation with pruned state and minimal his |-----------|-----------------------|-------------------------|----------------|-------------------| | Mainnet | 370 GB | 500 GB | 16 GB | 64 GB | | Polygon | 2 TB | 2 TB | 32 GB | 64 GB | -| Gnosis | 250 GB | 500 GB | 8 GB | 16 GB | +| Gnosis | 135 GB | 500 GB | 8 GB | 16 GB | ## Full Node Requirements @@ -43,7 +43,7 @@ Full nodes maintain full state with standard pruning and all recent data. (`--p | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 1.5 TB | 2 TB | 16 GB | 64 GB | +| Mainnet | 360 GB | 1 TB | 16 GB | 64 GB | | Polygon | 2 TB | 4 TB | 16 GB | 32 GB | | Gnosis | 640 GB | 1 TB | 8 GB | 16 GB | @@ -54,9 +54,9 @@ Archive nodes retain **all** historical state and require significantly more dis | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 3.2 TB | 4 TB | 32 GB | 64 GB | -| Polygon | 4.1 TB | 6 TB | 64 GB | 128 GB | -| Gnosis | 1.2 TB | 2 TB | 16 GB | 32 GB | +| Mainnet | 1.6 TB | 4 TB | 32 GB | 64 GB | +| Polygon | 4.6 TB | 6 TB | 64 GB | 128 GB | +| Gnosis | 550 GB | 2 TB | 16 GB | 32 GB | diff --git a/src/installation/build.md b/src/installation/build.md index 873904e..d6bef63 100644 --- a/src/installation/build.md +++ b/src/installation/build.md @@ -1,12 +1,23 @@ # Build Erigon from source *How to build Erigon in Linux and MacOS from source* -The basic Erigon configuration is suitable for most users just wanting to run a node. For building the latest stable release use the following command: +The basic Erigon configuration is suitable for most users who simply want to run a node. To build the latest stable release, use the following command: ```bash -git clone --branch release/3.0 --single-branch https://github.com/erigontech/erigon.git +git clone --branch release/3.1 --single-branch https://github.com/erigontech/erigon.git cd erigon +``` + +Next, compile the software using: + +```bash make erigon ``` -This should create the binary at `./build/bin/erigon`. \ No newline at end of file +To speed up the compilation process, you can specify the number of processors to use with the `-j` option, where `` is the number of processors you want to utilize. For example, if your machine has 22 processors and you want to use 20 of them, you can run: + +```bash +make -j20 erigon +``` + +This will create the binary at `./build/bin/erigon`. \ No newline at end of file diff --git a/src/installation/build_exec_win.md b/src/installation/build_exec_win.md index 55517f4..b5e1c09 100644 --- a/src/installation/build_exec_win.md +++ b/src/installation/build_exec_win.md @@ -55,7 +55,7 @@ Then click on the "**New**" button and paste the following path: Open the Command Prompt and type the following: ```bash -git clone --branch release/3.0 --single-branch https://github.com/erigontech/erigon.git +git clone --branch release/3.1 --single-branch https://github.com/erigontech/erigon.git ``` You might need to change the `ExecutionPolicy` to allow scripts created locally or signed by a trusted publisher to run. Open a Powershell session as Administrator and type: diff --git a/src/installation/prebuilt.md b/src/installation/prebuilt.md index 531972f..caafdc5 100644 --- a/src/installation/prebuilt.md +++ b/src/installation/prebuilt.md @@ -1,15 +1,15 @@ # Install Erigon with Pre-built Binaries -You can download and install Erigon v3.0.2 (or whatever the latest is) directly from our GitHub releases page. +You can download and install the latest version of Erigon (e.g., v3.1.0) directly from our GitHub releases page. -## 1. Pick your platform & download +## 1. Select Your Platform and Download -Go at the [Erigon releases page](https://github.com/erigontech/erigon/releases) and select the latest version (or whichever you'd like). +Go to the [Erigon releases page](https://github.com/erigontech/erigon/releases) and select the latest version (or whichever version you prefer). +Erigon Releases -Erigon 3 +Then, download the appropriate binary for your system: -then download the appropriate binary for your system. as shown above. - For **Linux**: - `erigon_3.x.x_amd64.deb` for 64-bit Intel/AMD processors - `erigon_3.x.x_arm64.deb` for 64-bit ARM processors @@ -18,6 +18,7 @@ then download the appropriate binary for your system. as shown above. - For **MacOS**: - `erigon_3.x.x_darwin_amd64.tar.gz` for 64-bit Intel/AMD processors - `erigon_3.x.x_darwin_arm64.tar.gz` for 64-bit ARM processors + ### Checksums To verify the integrity of the downloaded file, you can use the checksums provided in the `erigon_v3.x.x_checksums.txt` file. This file contains SHA256 checksums for all Erigon binaries. diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 1555e8f..6773e53 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -10,18 +10,16 @@ Updating to the latest version of Erigon gives you access to the latest features ## Snapshots Format -As of Erigon 3.1 Pebble Paws, the snapshot format has been updated so that you will no longer need to perform data upgrades or re-sync from scratch with future releases. - -When upgrading from 3.0.x to 3.1.x, Erigon will automatically update the data format upon launch. To speed up this process, you can also perform the update manually using the flags below: - -> This operation is **OPTIONAL**. +As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgrading from version 3.0.x, you need to manually perform the following steps: 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. 3. Upgrade snapshot files: - 1. Run `erigon snapshots update-to-new-ver-format --datadir /your/datadir`. - 2. Reset your datadir so that Erigon will sync to a newer snapshot by running command `erigon snapshots reset --datadir /your/datadir`. -4. Run Erigon. + 1. Navigate to the Erigon directory in your terminal + 2. Reset your datadir so that Erigon will change old data by running command `./build/bin/erigon snapshots reset --datadir /your/datadir`. +4. Run Erigon, it will reuse existing data and sync only to newer snapshots. + +> If you skip these steps, you may need to re-sync from scratch. ## Upgrading your Erigon Installation @@ -109,7 +107,6 @@ To upgrade Erigon to a newer version when you've originally installed it via Git git checkout ``` - Replace `` with the version tag of the new release, for example: ```bash @@ -121,5 +118,5 @@ To upgrade Erigon to a newer version when you've originally installed it via Git ```bash make erigon ``` - -This process updates your installation to the latest version you specify, while maintaining your existing data and configuration settings in the Erigon folder. You're essentially just replacing the executable with a newer version. \ No newline at end of file + +This process updates your installation to the latest version you specify, while maintaining your existing data. You're essentially just replacing the executable with a newer version. \ No newline at end of file diff --git a/src/tools/installation.md b/src/tools/installation.md deleted file mode 100644 index 3371a0a..0000000 --- a/src/tools/installation.md +++ /dev/null @@ -1,16 +0,0 @@ -# Installation - -## Pre-requisites - -- Erigon Node running locally; -- Ngrok, in case you are planning to monitor a remote node, see installation at . - -## Diagnostics Tool Set Up - -```bash -git clone https://github.com/erigontech/diagnostics.git -cd diagnostics -make build -``` - -You are now ready to run the Diagnostic Tool. \ No newline at end of file diff --git a/src/tools/introduction.md b/src/tools/introduction.md deleted file mode 100644 index 6509cf8..0000000 --- a/src/tools/introduction.md +++ /dev/null @@ -1,13 +0,0 @@ -# Diagnostics Tool - -As the Erigon ecosystem expands, the demand for an effective system to diagnose and resolve user issues grows. The Erigon Diagnostics Tool is designed to offer a simplified approach to pinpointing the underlying reasons for problems faced by Erigon users. - -## Key Features - -The Erigon Diagnostics tool offers the following features: - -- **Automated Data Collection**: The tool can gather essential information about the user's Erigon node, including the Erigon version, system parameters, and recent console output, without requiring extensive manual input from the user. - -- **Interactive Diagnostics**: When additional data is needed to pinpoint the issue, the tool facilitates an interactive process, guiding the user through targeted data collection to optimize the troubleshooting process. - -- **Diagnostic Reporting**: The tool generates comprehensive diagnostic reports, making it easier to analyze the issues. \ No newline at end of file diff --git a/src/tools/options.md b/src/tools/options.md deleted file mode 100644 index 32d517c..0000000 --- a/src/tools/options.md +++ /dev/null @@ -1,49 +0,0 @@ -# Options - -The following flags can be used to configure various parameters of the Diagnostics Tool. - -## Configuration File: - -- `--config` : Specify a configuration file (default is `$HOME/.cobra.yaml`). - -## Network Settings: - -- `--addr` : Network interface to listen on (default is `localhost`). -- `--port` : Port to listen on (default is `8080`). - -## Session Management: - -- `--node.sessions` : Maximum number of node sessions to allow (default is `5000`). -- `--ui.sessions` : Maximum number of UI sessions to allow (default is `5000`). - -## Logging Configuration: - -- `--log.dir.path` : Directory path to store log data (default is `./logs`). -- `--log.file.name` : Name of the log file (default is `diagnostics.log`). -- `--log.file.size.max` : Maximum size of log file in megabytes (default is `100`). -- `--log.file.age.max` : Maximum age in days a log file can persist in the system (default is `28`). -- `--log.max.backup` : Maximum number of log files that can persist (default is `5`). -- `--log.compress` : Whether to compress historical log files (default is `false`). - - -# Other options - -To display other available options for Diagnostics Tool digit: - -```bash -cd erigon -./build/bin/erigon support --help -``` - -The `--help` flag listing is reproduced below for your convenience. - -- `--diagnostics.addr [value]`: By default, the diagnostics address is `localhost:8080`. You may tunnel it to connect to a remote node, you must specify it for this flag. -- `--debug.addrs [value]`: Comma separated list of URLs to the debug endpoints thats are being diagnosed [`15sk` ] (default: "localhost:6062") -- `--diagnostics.addr [value]`: Address of the diagnostics system provided by the support team, include unique session PIN (default: "`localhost:8080`") -- `--diagnostics.sessions [value]`: Comma separated list of session PINs to connect to -- `--pprof`: Enable the pprof HTTP server (default: false) -- `--pprof.addr [value]`: pprof HTTP server listening interface (default: "`127.0.0.1`") -- `--pprof.port [value]`: pprof HTTP server listening port (default: `6060`) -- `--pprof.cpuprofile [value]`: Write CPU profile to the given file -- `--trace [value]`: Write execution trace to the given file -- `--help`, `-h`: show help \ No newline at end of file diff --git a/src/tools/setup.md b/src/tools/setup.md deleted file mode 100644 index 9b55c3d..0000000 --- a/src/tools/setup.md +++ /dev/null @@ -1,112 +0,0 @@ -# Setup -*How to connect the Diagnostics Tool to your Erigon node* - -To monitor your node using the Diagnostic Tool, you must first establish a connection. The necessary steps to connect are: - -1. Run your Erigon node -2. Run the Diagnostic Tool -3. Create a new session in the Diagnostic Tool -4. Connect the Diagnostic Tool to your node -5. Refresh the Diagnostic Tool - -## 1. Run your Erigon node - -If you are not sure what to run, start from a testnet with Caplin as the Consensus Engine. - -``` -./build/bin/erigon --chain=holesky -``` - -## 2. Run the Diagnostics Tool - -Run the Diagnostic Tool application from the machine where you intend to monitor your node. - -```bash -cd diagnostics -make run-self-signed -``` - -The Diagnostics Tool page will automatically be available in your browser at the address . - -> Leaving the terminal session will close the Diagnostics Tool interface. - -## 3. Create a new session in the Diagnostics Tool - -The Diagnostics Tool is now operational, but to access the data, it must be connected to the Erigon node. Proceed to the **Admin** section in the left navigation menu and select **Create Session**. - - - -Assign a name to your session and click **Create** to proceed. - - - -Upon successful creation of a new session, a unique 8-digit code, referred to as `YOUR SESSION PIN`, will be generated. You can find this PIN displayed next to the session name in the list of created sessions. - -To copy the Session PIN or the support command, click on the copy button next to it. This will copy the information to your clipboard for easy reference or use. - - - -In this example, we created a session named "Holesky", and it was assigned the PIN 34424089. The corresponding support command is displayed beside the PIN: - -```bash -./build/bin/erigon support --Diagnostics.sessions 34424089. -``` - -## 4. Connect the Diagnosticss Tool to your node - -### 4.1 Local Node - -If your Erigon node is running on your local machine, open a new console window in the Erigon folder and run the following command: - -```bash -cd erigon -./build/bin/erigon support --diagnostics.sessions YOUR_SESSION_PIN -``` -Replace `YOUR_SESSION_PIN` with the 8-digit PIN allocated to your session during the previous step, or use the suggested support command: - -```bash -./build/bin/erigon support --diagnostics.sessions 34424089 -``` - -This will attach the Diagnostics Tool to the Erigon node using the provided session PIN. - -See also other [options](options.md). - -### 4.2 Remote Node - -If your Erigon node is running on a Virtual Private Server (VPS) such as Amazon AWS, you can connect the Diagnostics Tool on your local machine with [ngrok](https://ngrok.com/docs/getting-started/) utility. - -> **ngrok** was chosen because of its easy of use and because the free version is useful for our scope. It is possible to use any other similar tool. - -You can run ngrok on your local machine in order to tunnel `localhost:8080`: - -```bash -ngrok http http://localhost:8080 -``` - -The ngrok utility will start and return a page similar to the below example: - - - -Your diagnostic address is in the Forwarding field. Copy only the part of the address after the URL prefix https://, in this case `8ac3-79-56-45-3.ngrok-free.app`. - -In the machine hosting your Erigon node, go to the Erigon directory and run this command to attach the Diagnostics Tool to the Erigon node: - -```bash -./build/bin/erigon support --diagnostics.addr YOUR_DIAGNOSTIC_ADDRESS --diagnostics.sessions YOUR_SESSION_PIN -``` - -Replace `YOUR_DIAGNOSTIC_ADDRESS` with the address obtained with ngrok amd `YOUR_SESSION_PIN` with your session PIN from point 3. For example: - -```bash -./build/bin/erigon support --diagnostics.addr 8ac3-79-56-45-3.ngrok-free.app --diagnostics.sessions 34424089 -``` - -By following these steps, you can establish a connection between the Diagnostic Tool on your local machine and the Erigon node running on the VPS, enabling you to monitor and diagnose the node's performance. - -More information about the Erigon support command can be find here. - -## 5. Refresh the Diagnostic Tool - -Once the Diagnostics Tool is successfully connected to the Erigon node, return to your web browser and reload the page. -This step is necessary to query data from the connected node. \ No newline at end of file diff --git a/src/tools/user_interface.md b/src/tools/user_interface.md deleted file mode 100644 index c0bef78..0000000 --- a/src/tools/user_interface.md +++ /dev/null @@ -1,20 +0,0 @@ -# Browser Interface - -By navigating to in your browser, you can access the Diagnostics Tool and explore its various sections. These sections provide a comprehensive overview of your Erigon node's status and activity, covering aspects such as session details, node configuration, network interactions, download status, log files, and more. - -1. **Status Bar**: Displays essential information about the current session and operating Erigon node. -2. **Process Tab**: - * **Command**: Inspect the command line arguments used to launch the Erigon node. - * **Flags**: Examine the flags set in the CLI context by the user when launching the node. - * **Node info**: Contains detailed information about the Erigon node. -3. **Network Tab**: - * **Peers Data**: Collect and view information about network peers, including active peers, static peers, and total seen peers. - * **Downloader**: Provides detailed information about the progress, download status, estimated time, and resource allocation for "Snapshots" download. -4. **Logs Tab**: View and download logs from the Erigon node, with log rotation and filtering capabilities. -5. **Data Tab**: Inspect databases and their tables. -6. **Admin Tab**: - * **Session Management**: View active sessions, create new sessions, and obtain session PINs for connections. - * **Data Management**: Clear all sessions and data . -7. **Available Flags**: Configure various parameters of the diagnostics UI, including network settings, session management, logging configuration, and more. - -See currently implemented diagnostics [here](https://github.com/erigontech/diagnostics/blob/main/README.md#currently-implemented-diagnostics). \ No newline at end of file From efe875130bfeaeeeb8453221350738c004f5b84c Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 14 Aug 2025 16:23:00 +0200 Subject: [PATCH 05/22] updated shutter and persist.receipts in nodes --- src/advanced/shutter.md | 17 +++++++++++------ src/basic/node.md | 23 +++++++++-------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index 2cc5bf2..63ad4dc 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -9,6 +9,8 @@ The key advantages of Shutter Network are: - **Threshold encryption:** Transactions are only decrypted when enough key holders (keypers) participate, ensuring security and decentralization. - **Support on Gnosis Chain:** Shutter encrypted transaction pools are currently available on [Gnosis Chain](https://docs.gnosischain.com/shutterized-gc/), with plans for Ethereum support. +> Shutter Network is now available only for Gnosis Network and Chiado. + ### Why Use Shutter? - **Access to Extra Transactions:** Shutterized validators can include shielded transactions not available in the public transaction pool, leading to potentially higher block rewards. @@ -20,28 +22,31 @@ To participate in the Shutter encrypted transaction pool as a validator using Er 1. **Set Up Your Validator** - Deposit your stake and register your validator on Gnosis Chain. - Reference: [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) + Deposit your stake and register your validator on Gnosis Chain reby following the [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit). 2. **Register as a Shutterized Validator** - Complete validator registration for Shutter using the provided tool: - Reference: [Shutter Validator Registration Guide](https://github.com/NethermindEth/shutter-validator-registration) + Complete the validator registration for Shutter using the tool provided in the [Shutter Validator Registration Guide](https://github.com/NethermindEth/shutter-validator-registration). 3. **Verify Registration** Use the Erigon CLI command to verify that your registration was successful: + ```bash erigon shutter-validator-reg-check --chain --el-url --validator-info-file ``` + - `--chain` valid values are `gnosis` or `chiado` + - `--el-url` - `` is the file generated during registration. 4. **Run Erigon with Shutter Support** Start Erigon as usual, but add the `--shutter` flag to enable Shutterized Validator mode: + ```bash erigon --shutter [other options...] ``` + This works with Erigon's internal CL Caplin (enabled by default) or with an external CL client using `--externalcl`. ## Options @@ -50,9 +55,9 @@ Below are relevant CLI options and configuration settings for Shutter functional | Option | Description | |-----------------------------------------------|----------------------------------------------------------------| -| `--shutter` | Enables Shutterized Validator mode. | +| `--shutter` | Enables Shutterized Validator mode in Erigon. | | `--externalcl` | Use an external Consensus Layer client instead of Caplin. | -| `shutter-validator-reg-check` | Command to verify Shutter validator registration. | +| `shutter-validator-reg-check` | Erigon command to verify Shutter validator registration. | | `--chain ` | Specifies the chain (e.g., Gnosis). | | `--el-url ` | Sets the execution layer RPC endpoint. | | `--validator-info-file ` | Path to validator info JSON file produced during registration. | diff --git a/src/basic/node.md b/src/basic/node.md index 4e0ae19..b600c1e 100644 --- a/src/basic/node.md +++ b/src/basic/node.md @@ -9,30 +9,25 @@ Erigon 3 introduces a flexible approach to node configuration, offering three di | Research | No | No | **Yes** | | Staking | **Yes** | **Yes** | **Yes** | +In order to switch type of node, you must first delete the ```/chaindata``` folder in the chosen ```--datadir``` directory. + +> Persisting receipts, which are pre-calculated receipts, are enabled by default for minimal and full node. To disable them and use the flag `--persist.receipts=false`. + ## Minimal node -Erigon 3 implements support for [EIP-4444](https://eips.ethereum.org/EIPS/eip-4444) through its *Minimal Node configuration*, enabled by the flag `--prune.mode=minimal`. For example: +Erigon 3 implements support for [EIP-4444](https://eips.ethereum.org/EIPS/eip-4444) through its minimal node configuration, enabled by the flag `--prune.mode=minimal`. For example: ```bash ./build/bin/erigon --prune.mode=minimal ``` - -Minimal node is suitable for users with constrained hardware who wants to achieve more **privacy** during their interaction with EVM, like for example sending transactions with your node. Minimal node is also suitable for staking. +Minimal node is suitable for users with constrained [hardware](../getting-started/hw-requirements.md#minimal-node-requirements) who wants to achieve more **privacy** during their interaction with EVM, like for example sending transactions with your node. Minimal node is also suitable for staking. ## Full node -Erigon 3 is full node by default (`--prune.mode=full`). This configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) requirements of Erigon 3, the full node configuration is suitable for the majority of users. +Erigon 3 is full node by default (`--prune.mode=full`). This configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](../getting-started/hw-requirements.md#full-node-requirements) requirements of Erigon 3, the full node configuration is suitable for the majority of users. ## Archive node -Ethereum's state refers to account balances, contracts, and consensus data. Archive nodes store every historical state, making it easier to access past data, but requiring more disk space. They provide comprehensive historical data, making them optimal for conducting extensive **research** on the chain, ranging from searching for old states of the EVM to implementing advanced block explorers, such as Otterscan, and undertaking **development** activities. - -Erigon 3 has consistently reduced the [disk space](../getting-started/hw-requirements.md#minimal-node-requirements) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. To run a archive node use the flag `--prune.mode=archive`. - -
- -**Information** - -In order to switch type of node, you must first delete the ```/chaindata``` folder in the chosen ```--datadir``` directory. +Ethereum's state refers to account balances, contracts, and consensus data. Archive nodes retain all historical state and require significantly more [disk space](../getting-started/hw-requirements.md#archive-node-requirements). They are typically used for block explorers or deep analytical queries. They provide comprehensive historical data, making them optimal for conducting extensive research on the chain, ranging from searching for old states of the EVM to implementing advanced block explorers, such as [Otterscan](../tools/otterscan.md), and undertaking development activities. -
+Erigon 3 has consistently reduced the disk space requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. To run an archive node use the flag `--prune.mode=archive`. \ No newline at end of file From 79f94ab7c29a822fdf63164871339d3d15119be8 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 14 Aug 2025 16:23:20 +0200 Subject: [PATCH 06/22] updated size for gno and eth minimal node --- src/getting-started/hw-requirements.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index ac25411..0654417 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -25,41 +25,42 @@ General recommendations for all node types include: - **Linux**: kernel version > v4 - When using multiple disks, consider implementing a **RAID 0** configuration to maximize performance and utilize space efficiently. RAID ZFS is not recommended. +## Disk Size and RAM Requirements -## Minimal Node Requirements +The amount of disk space recommended and RAM you need depends on the [type of node](../basic/node.md) you want to run. The "Disk Size (Required)" values listed below are obtained using the standard Erigon configuration, with the sole exception of the `--prune.mode` flag. + +### Minimal Node Requirements Minimal nodes are suitable for light operation with pruned state and minimal historical data retention. (`--prune.mode=minimal`) | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|-----------------------|-------------------------|----------------|-------------------| -| Mainnet | 370 GB | 500 GB | 16 GB | 64 GB | -| Polygon | 2 TB | 2 TB | 32 GB | 64 GB | -| Gnosis | 135 GB | 500 GB | 8 GB | 16 GB | +| Mainnet | 350 GB | 1 TB | 16 GB | 64 GB | +| Polygon | 1.1 TB | 2 TB | 32 GB | 64 GB | +| Gnosis | 128 GB | 500 GB | 8 GB | 16 GB | -## Full Node Requirements +### Full Node Requirements Full nodes maintain full state with standard pruning and all recent data. (`--prune.mode=full`) | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 360 GB | 1 TB | 16 GB | 64 GB | -| Polygon | 2 TB | 4 TB | 16 GB | 32 GB | -| Gnosis | 640 GB | 1 TB | 8 GB | 16 GB | +| Mainnet | 360 GB | 1 TB | 16 GB | 32 GB | +| Polygon | 3.3 TB | 4 TB | 16 GB | 32 GB | +| Gnosis | 260 GB | 1 TB | 8 GB | 16 GB | -## Archive Node Requirements +### Archive Node Requirements Archive nodes retain **all** historical state and require significantly more disk space. These are typically used for block explorers or deep analytical queries. (`--prune.mode=archive`) | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| | Mainnet | 1.6 TB | 4 TB | 32 GB | 64 GB | -| Polygon | 4.6 TB | 6 TB | 64 GB | 128 GB | +| Polygon | 4.6 TB | 8 TB | 64 GB | 128 GB | | Gnosis | 550 GB | 2 TB | 16 GB | 32 GB | - - ## Bandwidth Requirements Your internet bandwidth is also an important factor, particularly for sync speed and validator performance. From a6423df77f673fa512d2732276d4a39232032428 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 14 Aug 2025 16:45:52 +0200 Subject: [PATCH 07/22] cleared instructions --- src/advanced/shutter.md | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index 63ad4dc..c4277fa 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -9,7 +9,7 @@ The key advantages of Shutter Network are: - **Threshold encryption:** Transactions are only decrypted when enough key holders (keypers) participate, ensuring security and decentralization. - **Support on Gnosis Chain:** Shutter encrypted transaction pools are currently available on [Gnosis Chain](https://docs.gnosischain.com/shutterized-gc/), with plans for Ethereum support. -> Shutter Network is now available only for Gnosis Network and Chiado. +> Shutter Network is now available only for Gnosis Network and Chiado testnet. ### Why Use Shutter? @@ -35,10 +35,17 @@ To participate in the Shutter encrypted transaction pool as a validator using Er ```bash erigon shutter-validator-reg-check --chain --el-url --validator-info-file ``` + - `--chain` valid values are `gnosis` or `chiado` - - `--el-url` + - `--el-url`, in case you are using Erigon default ports is `http://localhost:8545` - `` is the file generated during registration. + for example: + + ```bash + erigon shutter-validator-reg-check --chain gnosis --el-url http://localhost:8545 --validator-info-file /path/validatorInfo.json + ``` + 4. **Run Erigon with Shutter Support** Start Erigon as usual, but add the `--shutter` flag to enable Shutterized Validator mode: @@ -49,21 +56,9 @@ To participate in the Shutter encrypted transaction pool as a validator using Er This works with Erigon's internal CL Caplin (enabled by default) or with an external CL client using `--externalcl`. -## Options - -Below are relevant CLI options and configuration settings for Shutter functionality in Erigon: - -| Option | Description | -|-----------------------------------------------|----------------------------------------------------------------| -| `--shutter` | Enables Shutterized Validator mode in Erigon. | -| `--externalcl` | Use an external Consensus Layer client instead of Caplin. | -| `shutter-validator-reg-check` | Erigon command to verify Shutter validator registration. | -| `--chain ` | Specifies the chain (e.g., Gnosis). | -| `--el-url ` | Sets the execution layer RPC endpoint. | -| `--validator-info-file ` | Path to validator info JSON file produced during registration. | +### Shutter Network Default Port -**Shutter Network Default Port:** -- `23102` (TCP) — Peering port for Shutter. +The default peering port for Shutter is `23102` (TCP). **Reference Documentation:** - [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) From 5d22311483904202dd37023dfd9b4c170a588163 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 14 Aug 2025 17:12:16 +0200 Subject: [PATCH 08/22] updated with port flags --- src/advanced/shutter.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index c4277fa..706824b 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -56,9 +56,11 @@ To participate in the Shutter encrypted transaction pool as a validator using Er This works with Erigon's internal CL Caplin (enabled by default) or with an external CL client using `--externalcl`. -### Shutter Network Default Port +### Shutter Network Default Ports -The default peering port for Shutter is `23102` (TCP). +The default peering port for Shutter is `23102` (TCP), to change it use `--shutter.p2p.listen.port `. + +Bootstrap nodes are used to help new nodes discover other nodes in the network. By default, the embedded configuration values are used, but these can be overridden with `--shutter.p2p.bootstrap.nodes `. **Reference Documentation:** - [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) From e221a55e920ca692584eb3c85b970c9c8e648613 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 14 Aug 2025 17:14:15 +0200 Subject: [PATCH 09/22] updated formatting --- src/advanced/shutter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index 706824b..30115ad 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -56,13 +56,13 @@ To participate in the Shutter encrypted transaction pool as a validator using Er This works with Erigon's internal CL Caplin (enabled by default) or with an external CL client using `--externalcl`. -### Shutter Network Default Ports +## Shutter Network Default Ports The default peering port for Shutter is `23102` (TCP), to change it use `--shutter.p2p.listen.port `. Bootstrap nodes are used to help new nodes discover other nodes in the network. By default, the embedded configuration values are used, but these can be overridden with `--shutter.p2p.bootstrap.nodes `. -**Reference Documentation:** +## Reference Documentation - [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit) - [Shutter Validator Registration](https://github.com/NethermindEth/shutter-validator-registration) - [Shutter Specs](https://github.com/gnosischain/specs/tree/master/shutter) From 996b9761402e8d7c9dfa1306873270b1cd94c029 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 19 Aug 2025 15:35:45 +0700 Subject: [PATCH 10/22] save --- src/advanced.md | 4 ++-- src/installation/upgrading.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/advanced.md b/src/advanced.md index 5daa33d..e9fe1cd 100644 --- a/src/advanced.md +++ b/src/advanced.md @@ -2,10 +2,10 @@ Erigon is by default an "all-in-one" binary solution, but it's possible start any internal component as a separated processes: -- [RPCDaemon](./advanced/JSONRPC-daemon.md), the JSON RPC layer +- [RPCDaemon](./advanced/JSONRPC-daemon.md), the JSON RPC layer. (Most battle-tested external component) - [TxPool](./advanced/txpool.md), the transaction pool - [Sentry](./advanced/sentry.md), the p2p layer -- [Downloader](./advanced/downloader.md), the history download layer +- [Downloader](./advanced/downloader.md), the history download layer (we don't recommend run it externally) - [Caplin](./advanced/caplin.md), the novel Consensus Layer This may be for security, scalability, decentralisation, resource limitation, custom implementation, or any other reason you/your team deems appropriate. See the appropriate section to understand how to start each service separately. diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 6773e53..06855a0 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -14,10 +14,10 @@ As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgradi 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. -3. Upgrade snapshot files: - 1. Navigate to the Erigon directory in your terminal - 2. Reset your datadir so that Erigon will change old data by running command `./build/bin/erigon snapshots reset --datadir /your/datadir`. -4. Run Erigon, it will reuse existing data and sync only to newer snapshots. +3. Upgrade data (to get data-fixes made by Erigon team): + 1. Upgrading data is optional - new version of erigon binary will work on old data. + 2. Command to trigger data upgrade: `./build/bin/erigon snapshots reset --datadir /your/datadir` - after this command Erigon will sync newer snapshots (but keep unchanged files). +4. Run Erigon, it will reuse existing data and sync only newer snapshots. > If you skip these steps, you may need to re-sync from scratch. From bb2c9dc89b3793352c879342366316201a87204d Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 19 Aug 2025 15:36:59 +0700 Subject: [PATCH 11/22] save --- src/installation/upgrading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 06855a0..89661ac 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -15,7 +15,7 @@ As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgradi 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. 3. Upgrade data (to get data-fixes made by Erigon team): - 1. Upgrading data is optional - new version of erigon binary will work on old data. + 1. Upgrading data is optional - new version of erigon binary will work on old data. Upgrading data will fix known data-related issues. 2. Command to trigger data upgrade: `./build/bin/erigon snapshots reset --datadir /your/datadir` - after this command Erigon will sync newer snapshots (but keep unchanged files). 4. Run Erigon, it will reuse existing data and sync only newer snapshots. From df79e166281c1e0ca1997864904b600ebcb612ab Mon Sep 17 00:00:00 2001 From: Bloxster Date: Tue, 19 Aug 2025 15:58:15 +0200 Subject: [PATCH 12/22] HW requirements, downloader and RPC, upgrading --- src/advanced/JSONRPC-daemon.md | 2 +- src/advanced/downloader.md | 8 +------- src/getting-started/hw-requirements.md | 6 +++--- src/installation/upgrading.md | 11 ++++------- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/advanced/JSONRPC-daemon.md b/src/advanced/JSONRPC-daemon.md index 3b3b049..53e3efb 100644 --- a/src/advanced/JSONRPC-daemon.md +++ b/src/advanced/JSONRPC-daemon.md @@ -2,7 +2,7 @@ # RPC Daemon *Remote Procedure Call* -The RPC daemon is a crucial component of Erigon, enabling JSON remote procedure calls and providing access to various APIs. +The RPC daemon is a crucial component of Erigon, enabling JSON remote procedure calls and providing access to various APIs. It is designed to operate effectively both as an internal or as an external component. For detailed instructions on running it remotely, refer to the documentation [here](https://github.com/erigontech/erigon/blob/main/cmd/rpcdaemon/README.md#running-remotely). ## Erigon RPC Method Guidelines diff --git a/src/advanced/downloader.md b/src/advanced/downloader.md index 03c535f..727aa06 100644 --- a/src/advanced/downloader.md +++ b/src/advanced/downloader.md @@ -3,13 +3,7 @@ The Downloader is a service responsible for seeding and downloading historical data using the BitTorrent protocol. Data is stored in the form of immutable `.seg` files, known as **snapshots**. The Ethereum core instructs the Downloader to download specific files, identified by their unique info hashes, which include both block headers and block bodies. The Downloader then communicates with the BitTorrent network to retrieve the necessary files, as specified by the Ethereum core. -
- -**Information**: - -While all Erigon components are separable and can be run on different machines, the Downloader must run on the same machine as Erigon to be able to share downloaded and seeded files. - -
+> **Warning**: While all Erigon components are separable and can be run on different machines, the Downloader must run on the same machine as Erigon to be able to share downloaded and seeded files. For a comprehensive understanding of the Downloader's functionality, configuration, and usage, please refer to [./cmd/downloader/README.md](https://github.com/erigontech/erigon/blob/main/cmd/downloader/readme.md) with the following key topics: diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 0654417..4f6d75c 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -36,7 +36,7 @@ Minimal nodes are suitable for light operation with pruned state and minimal his | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|-----------------------|-------------------------|----------------|-------------------| | Mainnet | 350 GB | 1 TB | 16 GB | 64 GB | -| Polygon | 1.1 TB | 2 TB | 32 GB | 64 GB | +| Polygon | 1.2 TB | 2 TB | 32 GB | 64 GB | | Gnosis | 128 GB | 500 GB | 8 GB | 16 GB | @@ -46,9 +46,9 @@ Full nodes maintain full state with standard pruning and all recent data. (`--p | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 360 GB | 1 TB | 16 GB | 32 GB | +| Mainnet | 920 GB | 1 TB | 16 GB | 32 GB | | Polygon | 3.3 TB | 4 TB | 16 GB | 32 GB | -| Gnosis | 260 GB | 1 TB | 8 GB | 16 GB | +| Gnosis | 462 GB | 1 TB | 8 GB | 16 GB | ### Archive Node Requirements diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 89661ac..6d18515 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -8,19 +8,16 @@ Updating to the latest version of Erigon gives you access to the latest features - **Terminate your Erigon**: End your current Erigon session by pressing `CTRL+C`. - **Backup**: Always back up your `datadir` before performing major upgrades. -## Snapshots Format +## Upgrading your Data -As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgrading from version 3.0.x, you need to manually perform the following steps: +As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgrading from version 3.0.x, follow these steps: 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. -3. Upgrade data (to get data-fixes made by Erigon team): - 1. Upgrading data is optional - new version of erigon binary will work on old data. Upgrading data will fix known data-related issues. - 2. Command to trigger data upgrade: `./build/bin/erigon snapshots reset --datadir /your/datadir` - after this command Erigon will sync newer snapshots (but keep unchanged files). +3. **OPTIONAL**: Upgrading your data is not mandatory, since the new version of the Erigon binary can function with older data. However, upgrading will resolve known data-related issues. + 1. To initiate the data upgrade, use the following command: `./build/bin/erigon snapshots reset --datadir /your/datadir`. After executing this command, Erigon will sync with newer snapshots while preserving unchanged files. 4. Run Erigon, it will reuse existing data and sync only newer snapshots. -> If you skip these steps, you may need to re-sync from scratch. - ## Upgrading your Erigon Installation Follow the below instructions depending on your installation method: From 6c9e45b15aa5821c8be3fa9375a7dc08a247514c Mon Sep 17 00:00:00 2001 From: Bloxster Date: Wed, 20 Aug 2025 11:28:20 +0200 Subject: [PATCH 13/22] removed duplicate info --- src/installation/upgrading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index 6d18515..a8ca995 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -15,7 +15,7 @@ As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgradi 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. 3. **OPTIONAL**: Upgrading your data is not mandatory, since the new version of the Erigon binary can function with older data. However, upgrading will resolve known data-related issues. - 1. To initiate the data upgrade, use the following command: `./build/bin/erigon snapshots reset --datadir /your/datadir`. After executing this command, Erigon will sync with newer snapshots while preserving unchanged files. + 1. To initiate the data upgrade, use the following command: `./build/bin/erigon snapshots reset --datadir /your/datadir`. 4. Run Erigon, it will reuse existing data and sync only newer snapshots. ## Upgrading your Erigon Installation From 7dc7a09c9d16dd3dadd311eafadeb1fda1fceed3 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Sat, 23 Aug 2025 09:58:07 +0200 Subject: [PATCH 14/22] updated data managing --- src/installation/upgrading.md | 68 +++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/src/installation/upgrading.md b/src/installation/upgrading.md index a8ca995..8f0a48e 100644 --- a/src/installation/upgrading.md +++ b/src/installation/upgrading.md @@ -8,16 +8,36 @@ Updating to the latest version of Erigon gives you access to the latest features - **Terminate your Erigon**: End your current Erigon session by pressing `CTRL+C`. - **Backup**: Always back up your `datadir` before performing major upgrades. -## Upgrading your Data +## Managing your Data -As of Erigon 3.1 Pebble Paws, the snapshot format has been updated. When upgrading from version 3.0.x, follow these steps: +Erigon 3.1 introduces a new snapshot format while continuing to support the old one. This means that new releases are fully compatible with your existing data. However, users who want the latest data files and data-specific fixes can perform an **optional** manual data upgrade: 1. Backup your datadir. 2. [Upgrade your Erigon installation](#upgrading-your-erigon-installation) whether from a binary, compiled source code, or Docker. -3. **OPTIONAL**: Upgrading your data is not mandatory, since the new version of the Erigon binary can function with older data. However, upgrading will resolve known data-related issues. - 1. To initiate the data upgrade, use the following command: `./build/bin/erigon snapshots reset --datadir /your/datadir`. +3. To initiate the data upgrade, use the following command: `./build/bin/erigon snapshots reset --datadir /your/datadir`. 4. Run Erigon, it will reuse existing data and sync only newer snapshots. +### Snapshots Upgrade Options + +* `erigon update-to-new-ver-format --datadir /your/datadir`: this option updates snapshots to be compatible with latest version, but you will not get the full benefits of the new snapshots. +* `erigon snapshots reset --datadir /your/datadir`: this command removes all old snapshots that have had performance improvements. + +Choose `upgrade` for a quicker process, or `reset` for maximum performance. If you choose `reset`, you'll need to wait for the new snapshots to download once Erigon starts. + +> For more information see also [Why Upgrading Erigon Doesn't Always Fix Your Data](#why-upgrading-erigon-doesnt-always-fix-your-data). + +### Snapshots Downgrade Options + +If upgrading snapshots(`3.0`to `3.1`) now happens automatically, you should follow these instructions for downgrading: + +> **WARNING**: This algorithm will remove incompatible `3.1` snapshot files because they are not backward-compatible. + +1. Make sure that you're running erigon on 3.1.x version, use `erigon --version`. +2. Run `erigon --datadir ../your/datadir reset-to-old-ver-format` to reset your snapshots to old format. +3. `git checkout v3.0.x` to checkout to preferred `3.0` version. For example now latest: `git checkout v3.0.15` +4. Run your old version of Erigon. + + ## Upgrading your Erigon Installation Follow the below instructions depending on your installation method: @@ -26,11 +46,11 @@ Follow the below instructions depending on your installation method: - [Docker](#docker) - [Compiled source code](#compiled-from-source) -## Pre-built Binaries +### Pre-built Binaries Download the latest binary file from , do the [checksum](../installation/prebuilt.md#checksums) and reinstall it, no other operation needed. -## Docker +### Docker If you're using Docker to run Erigon, the process to upgrade to a newer version of the software is straightforward and revolves around pulling the latest Docker image and then running it. Here's how you can upgrade Erigon using Docker: @@ -40,10 +60,10 @@ If you're using Docker to run Erigon, the process to upgrade to a newer version docker pull erigontech/erigon: ``` - Replace `` with the actual version tag you wish to use. For example: - + Replace with the actual version tag you wish to use. For example: + ```bash - docker pull erigontech/erigon:v3.0.0-beta2 + docker pull erigontech/erigon:v3.1.0-rc1 ``` @@ -60,7 +80,6 @@ If you're using Docker to run Erigon, the process to upgrade to a newer version docker ps ``` - Then stop the container using: ```bash @@ -78,18 +97,24 @@ If you're using Docker to run Erigon, the process to upgrade to a newer version * **Run the New Image**: Now you can start a new container with the new Erigon version using the new image ID: ```bash - docker run -it + docker run -it [options] ``` * **Verify Operation**: Ensure that Erigon starts correctly and connects to the desired network, verifying the logs for any initial errors. By following these steps, you'll keep your Docker setup clean and up-to-date with the latest Erigon version without needing to manually clean up or reconfigure your environment. -## Compiled from source +### Compiled from source To upgrade Erigon to a newer version when you've originally installed it via Git and manual compilation, you should follow these steps without needing to delete the entire folder: -* **Navigate to your Erigon directory** +* **Navigate to your Erigon directory**: + + For example: + + ```bash + cd erigon + ``` * **Fetch the latest changes from the repository**: You need to make sure your local repository is up-to-date with the main GitHub repository. Run: @@ -116,4 +141,19 @@ To upgrade Erigon to a newer version when you've originally installed it via Git make erigon ``` -This process updates your installation to the latest version you specify, while maintaining your existing data. You're essentially just replacing the executable with a newer version. \ No newline at end of file +This process updates your installation to the latest version you specify, while maintaining your existing data. You're essentially just replacing the executable with a newer version. + +## Why Upgrading Erigon Doesn't Always Fix Your Data + +Upgrading Erigon involves a key distinction between its core software and its data files, which are managed separately. This approach is rooted in practicality and user control. + +The Erigon **software** is the application that processes and interacts with blockchain data. However, the majority of the data itself, including the state of the network, exists in **data files** that you download and store locally. + +If a bug is discovered, it is often in the data itself rather than a flaw in the Erigon code. In such a case, simply updating the Erigon binary won't resolve the issue because the faulty data remains on your disk. This is because Erigon upgrades do not normally alter the data files. You must reset and re-download the data snapshots to get the corrected files. + +This separation prevents unnecessary and time-consuming processes. The Erigon team cannot regenerate months of data for every minor bug fix, and users shouldn't have to re-download terabytes of information with every new weekly software release. + +This design also provides flexibility. A user might need a specific data fix but prefer to remain on an older software version due to a known bug or regression in the latest release. Similarly, a user might be satisfied with their current data set and only need to update the Erigon binary. + +While this dual-versioning system may seem complex, it is a deliberate design choice that optimizes for both efficiency and user autonomy. + From eb7dd8ff20a0ebccefa60a3932d8a953a0ef7c6c Mon Sep 17 00:00:00 2001 From: Bloxster Date: Wed, 3 Sep 2025 13:55:13 +0200 Subject: [PATCH 15/22] small corrections --- src/getting-started/hw-requirements.md | 4 ++-- src/installation/docker.md | 2 +- src/staking.md | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 4f6d75c..4646df4 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -46,7 +46,7 @@ Full nodes maintain full state with standard pruning and all recent data. (`--p | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 920 GB | 1 TB | 16 GB | 32 GB | +| Mainnet | 920 GB | 2 TB | 16 GB | 32 GB | | Polygon | 3.3 TB | 4 TB | 16 GB | 32 GB | | Gnosis | 462 GB | 1 TB | 8 GB | 16 GB | @@ -59,7 +59,7 @@ Archive nodes retain **all** historical state and require significantly more dis |-----------|----------------------|-------------------------|----------------|-------------------| | Mainnet | 1.6 TB | 4 TB | 32 GB | 64 GB | | Polygon | 4.6 TB | 8 TB | 64 GB | 128 GB | -| Gnosis | 550 GB | 2 TB | 16 GB | 32 GB | +| Gnosis | 550 GB | 1 TB | 16 GB | 32 GB | ## Bandwidth Requirements diff --git a/src/installation/docker.md b/src/installation/docker.md index 94a53d8..f969abe 100644 --- a/src/installation/docker.md +++ b/src/installation/docker.md @@ -24,7 +24,7 @@ Here are the steps to download and start Erigon in Docker: 1. Download the latest version: ```bash -docker pull erigontech/erigon +docker pull erigontech/erigon: ``` 2. List the downloaded images to get the IMAGE ID: diff --git a/src/staking.md b/src/staking.md index ca2439d..d5b567e 100644 --- a/src/staking.md +++ b/src/staking.md @@ -7,3 +7,5 @@ Erigon is a comprehensive execution and consensus layer that also supports staki - Using a [external consensus client as validator](advanced/bp-ext.md); - Using [Caplin as validator](advanced/bp-caplin.md). + +Additionally, you can configure Erigon to work with [Shutter Network](../advanced/shutter.md).i \ No newline at end of file From f1baa4cf06462346a330f5fe12a3b6b24dd97fd5 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 11 Sep 2025 18:35:09 +0200 Subject: [PATCH 16/22] repetitions cleaning --- src/advanced/shutter.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index 30115ad..c5d4543 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -5,16 +5,12 @@ [Shutter Network](https://www.shutter.network) is a privacy-focused protocol that provides encrypted transaction pools using threshold encryption. The main objective is to protect users from malicious MEV (Miner Extractable Value) attacks such as front-running and sandwich attacks by encrypting transactions until they are included in a block. The key advantages of Shutter Network are: -- **Protection against MEV attacks:** By encrypting transactions, the network prevents malicious actors from exploiting transaction ordering. -- **Threshold encryption:** Transactions are only decrypted when enough key holders (keypers) participate, ensuring security and decentralization. -- **Support on Gnosis Chain:** Shutter encrypted transaction pools are currently available on [Gnosis Chain](https://docs.gnosischain.com/shutterized-gc/), with plans for Ethereum support. - -> Shutter Network is now available only for Gnosis Network and Chiado testnet. - -### Why Use Shutter? - +- **Protection against MEV attacks**: By encrypting transactions, the network prevents malicious actors from exploiting transaction ordering. +- **Threshold encryption**: Transactions are only decrypted when enough key holders (keypers) participate, ensuring security and decentralization. +- **Censorship resistance**: Threshold encryption prevents censorship and manipulation, ensuring fair and transparent transactions in a decentralized system. - **Access to Extra Transactions:** Shutterized validators can include shielded transactions not available in the public transaction pool, leading to potentially higher block rewards. -- **User Protection:** Help protect users against MEV attacks, improving the fairness of the chain. + +> Shutter encrypted mempool is currently available on [Gnosis Chain](https://docs.gnosischain.com/shutterized-gc/), with plans for Ethereum support. ## How to Run Erigon as a Shutterized Validator @@ -22,7 +18,7 @@ To participate in the Shutter encrypted transaction pool as a validator using Er 1. **Set Up Your Validator** - Deposit your stake and register your validator on Gnosis Chain reby following the [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit). + Deposit your stake and register your validator on Gnosis Chain by following the [Gnosis Chain Validator Setup](https://docs.gnosischain.com/node/manual/validator/deposit). 2. **Register as a Shutterized Validator** From 1570b4ec800dc9d51b60e7414de78fa442355535 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 12 Sep 2025 10:14:08 +0200 Subject: [PATCH 17/22] Revert "save" This reverts commit 996b9761402e8d7c9dfa1306873270b1cd94c029. --- src/advanced.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advanced.md b/src/advanced.md index e9fe1cd..5daa33d 100644 --- a/src/advanced.md +++ b/src/advanced.md @@ -2,10 +2,10 @@ Erigon is by default an "all-in-one" binary solution, but it's possible start any internal component as a separated processes: -- [RPCDaemon](./advanced/JSONRPC-daemon.md), the JSON RPC layer. (Most battle-tested external component) +- [RPCDaemon](./advanced/JSONRPC-daemon.md), the JSON RPC layer - [TxPool](./advanced/txpool.md), the transaction pool - [Sentry](./advanced/sentry.md), the p2p layer -- [Downloader](./advanced/downloader.md), the history download layer (we don't recommend run it externally) +- [Downloader](./advanced/downloader.md), the history download layer - [Caplin](./advanced/caplin.md), the novel Consensus Layer This may be for security, scalability, decentralisation, resource limitation, custom implementation, or any other reason you/your team deems appropriate. See the appropriate section to understand how to start each service separately. From 53d6b04eee02719abe9c8bbbdf86021e0c10812c Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 12 Sep 2025 10:17:19 +0200 Subject: [PATCH 18/22] clr shutter's encrypted mempool for consistency --- src/advanced/shutter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/advanced/shutter.md b/src/advanced/shutter.md index c5d4543..8166bbb 100644 --- a/src/advanced/shutter.md +++ b/src/advanced/shutter.md @@ -14,7 +14,7 @@ The key advantages of Shutter Network are: ## How to Run Erigon as a Shutterized Validator -To participate in the Shutter encrypted transaction pool as a validator using Erigon, follow these steps: +To participate in the Shutter encrypted mempool as a validator using Erigon, follow these steps: 1. **Set Up Your Validator** From 0fe49db107cff4400f923ed852c2b65822930ce6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:53:16 +0200 Subject: [PATCH 19/22] Bump actions/checkout from 4 to 5 (#33) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pages-deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages-deployment.yaml b/.github/workflows/pages-deployment.yaml index 4cb296a..4d63ade 100644 --- a/.github/workflows/pages-deployment.yaml +++ b/.github/workflows/pages-deployment.yaml @@ -16,7 +16,7 @@ jobs: environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'preview' }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install mdbook and run build Book run: | # This assumes your book is in the root of your repository. From a14636a07f9e1f8a027566f0d31f8c1c618bf5a1 Mon Sep 17 00:00:00 2001 From: Alex Sharov Date: Fri, 12 Sep 2025 14:32:00 +0700 Subject: [PATCH 20/22] remove `batchSize` from `performance.md` recommendations (#34) --- src/advanced/performance.md | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/advanced/performance.md b/src/advanced/performance.md index d3124b7..ab1b000 100644 --- a/src/advanced/performance.md +++ b/src/advanced/performance.md @@ -1,47 +1,30 @@ # Performance Tricks - These instructions are designed to improve the performance of Erigon 3, particularly for synchronization and memory management, on cloud drives and other systems with specific performance characteristics. - ## Increase Sync Speed -* Set `--sync.loop.block.limit=10_000` and `--batchSize=2g` to speed up the synchronization process. -```bash ---sync.loop.block.limit=10_000 --batchSize=2g -``` * Increase download speed with flag ```--torrent.download.rate=[value]``` setting your max speed (default value is 128MB). For example: ```bash --torrent.download.rate=512mb ``` -## Optimize for Cloud Drives - -* Set `SNAPSHOT_MADV_RND=false` to enable the operating system's cache prefetching for better performance on cloud drives with good throughput but bad latency. -```bash -SNAPSHOT_MADV_RND=false -``` - ## Lock Latest State in RAM -* Use `vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt` to lock the latest state in RAM, preventing it from being evicted due to high historical RPC traffic. +* Use `vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt` to lock the "latest state indices" in RAM, preventing it from being evicted due to high historical RPC traffic. ```bash vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt ``` -* Run `ls /mnt/erigon/snapshots/domain/*.kv | parallel vmtouch -vdlw` to apply the same locking to all relevant files. - -## Handle Memory Allocation Issues - -* If you encounter issues with memory allocation, run the following to flush any pending write operations and free up memory: +* Or same for "whole latest sate": `ls /mnt/erigon/snapshots/domain/*.kv | parallel vmtouch -vdlw` +* If you encounter "cannot allocate memory" issues with above commands, then free memory by next command and re-try: ```bash -sync && sudo sysctl vm.drop_caches=3 +sync && sudo sysctl vm.drop_caches=3 && echo 1 > /proc/sys/vm/compact_memory ``` -* Alternatively, set: +## Optimize for Cloud Drives +* Cloud Drives (gp3, pd-ssd) have good throughput but bad latency. So, we don't recommend them to Erigon. But still can set `SNAPSHOT_MADV_RND=false` to enable the operating system's cache prefetching - but it will lead to huge IO if RAM is small. ```bash -echo 1 > /proc/sys/vm/compact_memory +SNAPSHOT_MADV_RND=false ``` - -to help with memory allocation. From 6034dba7301c298af070eb504e6e1dd64c917594 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 12 Sep 2025 12:14:49 +0200 Subject: [PATCH 21/22] correction on docker cli --- src/installation/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installation/docker.md b/src/installation/docker.md index f969abe..94a53d8 100644 --- a/src/installation/docker.md +++ b/src/installation/docker.md @@ -24,7 +24,7 @@ Here are the steps to download and start Erigon in Docker: 1. Download the latest version: ```bash -docker pull erigontech/erigon: +docker pull erigontech/erigon ``` 2. List the downloaded images to get the IMAGE ID: From de4154b2ecfc78e6b31f75f7b6bddba8758dbb06 Mon Sep 17 00:00:00 2001 From: bloxster Date: Tue, 16 Sep 2025 08:32:16 +0200 Subject: [PATCH 22/22] updated disk size for archive node --- src/getting-started/hw-requirements.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 4646df4..94a4a85 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -57,9 +57,9 @@ Archive nodes retain **all** historical state and require significantly more dis | Network | Disk Size (Required) | Disk Size (Recommended) | RAM (Required) | RAM (Recommended) | |-----------|----------------------|-------------------------|----------------|-------------------| -| Mainnet | 1.6 TB | 4 TB | 32 GB | 64 GB | -| Polygon | 4.6 TB | 8 TB | 64 GB | 128 GB | -| Gnosis | 550 GB | 1 TB | 16 GB | 32 GB | +| Mainnet | 1.77 TB | 4 TB | 32 GB | 64 GB | +| Polygon | 4.85 TB | 8 TB | 64 GB | 128 GB | +| Gnosis | 539 GB | 1 TB | 16 GB | 32 GB | ## Bandwidth Requirements