EVM Configuration
This document describes all configuration options available for EVM.
Example Configuration
Configuration Format
Configuration is provided as a JSON object. All fields are optional unless otherwise specified.
API Configuration
Ethereum APIs
| Option |
Type |
Description |
Default |
eth-apis |
array of strings |
List of Ethereum services that should be enabled |
["eth", "eth-filter", "net", "web3", "internal-eth", "internal-blockchain", "internal-transaction"] |
EVM Specific APIs
| Option |
Type |
Description |
Default |
validators-api-enabled |
bool |
Enable the validators API |
true |
admin-api-enabled |
bool |
Enable the admin API for administrative operations |
false |
admin-api-dir |
string |
Directory for admin API operations |
- |
warp-api-enabled |
bool |
Enable the Warp API for cross-chain messaging |
false |
API Limits and Security
| Option |
Type |
Description |
Default |
rpc-gas-cap |
uint64 |
Maximum gas limit for RPC calls |
50,000,000 |
rpc-tx-fee-cap |
float64 |
Maximum transaction fee cap in LUX |
100 |
api-max-duration |
duration |
Maximum duration for API calls (0 = no limit) |
0 |
api-max-blocks-per-request |
int64 |
Maximum number of blocks per getLogs request (0 = no limit) |
0 |
http-body-limit |
uint64 |
Maximum size of HTTP request bodies |
- |
WebSocket Settings
| Option |
Type |
Description |
Default |
ws-cpu-refill-rate |
duration |
Rate at which WebSocket CPU usage quota is refilled (0 = no limit) |
0 |
ws-cpu-max-stored |
duration |
Maximum stored WebSocket CPU usage quota (0 = no limit) |
0 |
Cache Configuration
Trie Caches
| Option |
Type |
Description |
Default |
trie-clean-cache |
int |
Size of the trie clean cache in MB |
512 |
trie-dirty-cache |
int |
Size of the trie dirty cache in MB |
512 |
trie-dirty-commit-target |
int |
Memory limit to target in the dirty cache before performing a commit in MB |
20 |
trie-prefetcher-parallelism |
int |
Maximum concurrent disk reads trie prefetcher should perform |
16 |
Other Caches
| Option |
Type |
Description |
Default |
snapshot-cache |
int |
Size of the snapshot disk layer clean cache in MB |
256 |
accepted-cache-size |
int |
Depth to keep in the accepted headers and logs cache (blocks) |
32 |
state-sync-server-trie-cache |
int |
Trie cache size for state sync server in MB |
64 |
Ethereum Settings
Transaction Processing
| Option |
Type |
Description |
Default |
preimages-enabled |
bool |
Enable preimage recording |
false |
allow-unfinalized-queries |
bool |
Allow queries for unfinalized blocks |
false |
allow-unprotected-txs |
bool |
Allow unprotected transactions (without EIP-155) |
false |
allow-unprotected-tx-hashes |
array |
List of specific transaction hashes allowed to be unprotected |
EIP-1820 registry tx |
local-txs-enabled |
bool |
Enable treatment of transactions from local accounts as local |
false |
Snapshots
| Option |
Type |
Description |
Default |
snapshot-wait |
bool |
Wait for snapshot generation on startup |
false |
snapshot-verification-enabled |
bool |
Enable snapshot verification |
false |
Pruning and State Management
Basic Pruning
| Option |
Type |
Description |
Default |
pruning-enabled |
bool |
Enable state pruning to save disk space |
true |
commit-interval |
uint64 |
Interval at which to persist EVM and atomic tries (blocks) |
4096 |
accepted-queue-limit |
int |
Maximum blocks to queue before blocking during acceptance |
64 |
State Reconstruction
| Option |
Type |
Description |
Default |
allow-missing-tries |
bool |
Suppress warnings about incomplete trie index |
false |
populate-missing-tries |
uint64 |
Starting block for re-populating missing tries (null = disabled) |
null |
populate-missing-tries-parallelism |
int |
Concurrent readers for re-populating missing tries |
1024 |
Offline Pruning
| Option |
Type |
Description |
Default |
offline-pruning-enabled |
bool |
Enable offline pruning |
false |
offline-pruning-bloom-filter-size |
uint64 |
Bloom filter size for offline pruning in MB |
512 |
offline-pruning-data-directory |
string |
Directory for offline pruning data |
- |
Historical Data
| Option |
Type |
Description |
Default |
historical-proof-query-window |
uint64 |
Number of blocks before last accepted for proof queries (archive mode only, ~24 hours) |
43200 |
state-history |
uint64 |
Number of most recent states that are accesible on disk (pruning mode only) |
32 |
Transaction Pool Configuration
| Option |
Type |
Description |
Default |
tx-pool-price-limit |
uint64 |
Minimum gas price for transaction acceptance |
- |
tx-pool-price-bump |
uint64 |
Minimum price bump percentage for transaction replacement |
- |
tx-pool-account-slots |
uint64 |
Maximum number of executable transaction slots per account |
- |
tx-pool-global-slots |
uint64 |
Maximum number of executable transaction slots for all accounts |
- |
tx-pool-account-queue |
uint64 |
Maximum number of non-executable transaction slots per account |
- |
tx-pool-global-queue |
uint64 |
Maximum number of non-executable transaction slots for all accounts |
- |
tx-pool-lifetime |
duration |
Maximum time transactions can stay in the pool |
- |
Gossip Configuration
Push Gossip Settings
| Option |
Type |
Description |
Default |
push-gossip-percent-stake |
float64 |
Percentage of total stake to push gossip to (range: [0, 1]) |
0.9 |
push-gossip-num-validators |
int |
Number of validators to push gossip to |
100 |
push-gossip-num-peers |
int |
Number of non-validator peers to push gossip to |
0 |
Regossip Settings
| Option |
Type |
Description |
Default |
push-regossip-num-validators |
int |
Number of validators to regossip to |
10 |
push-regossip-num-peers |
int |
Number of non-validator peers to regossip to |
0 |
priority-regossip-addresses |
array |
Addresses to prioritize for regossip |
- |
Timing Configuration
| Option |
Type |
Description |
Default |
push-gossip-frequency |
duration |
Frequency of push gossip |
100ms |
pull-gossip-frequency |
duration |
Frequency of pull gossip |
1s |
regossip-frequency |
duration |
Frequency of regossip |
30s |
Logging and Monitoring
Logging
| Option |
Type |
Description |
Default |
log-level |
string |
Logging level (trace, debug, info, warn, error, crit) |
"info" |
log-json-format |
bool |
Use JSON format for logs |
false |
Profiling
| Option |
Type |
Description |
Default |
continuous-profiler-dir |
string |
Directory for continuous profiler output (empty = disabled) |
- |
continuous-profiler-frequency |
duration |
Frequency to run continuous profiler |
15m |
continuous-profiler-max-files |
int |
Maximum number of profiler files to maintain |
5 |
Metrics
| Option |
Type |
Description |
Default |
metrics-expensive-enabled |
bool |
Enable expensive debug-level metrics; this includes Firewood metrics |
true |
Security and Access
Keystore
| Option |
Type |
Description |
Default |
keystore-directory |
string |
Directory for keystore files (absolute or relative path) |
- |
keystore-external-signer |
string |
External signer configuration |
- |
keystore-insecure-unlock-allowed |
bool |
Allow insecure account unlocking |
false |
Fee Configuration
| Option |
Type |
Description |
Default |
feeRecipient |
string |
Address to send transaction fees to (leave empty if not supported) |
- |
Network and Sync
Network
| Option |
Type |
Description |
Default |
max-outbound-active-requests |
int64 |
Maximum number of outbound active requests for VM2VM network |
16 |
State Sync
| Option |
Type |
Description |
Default |
state-sync-enabled |
bool |
Enable state sync |
false |
state-sync-skip-resume |
bool |
Force state sync to use highest available summary block |
false |
state-sync-ids |
string |
Comma-separated list of state sync IDs |
- |
state-sync-commit-interval |
uint64 |
Commit interval for state sync (blocks) |
16384 |
state-sync-min-blocks |
uint64 |
Minimum blocks ahead required for state sync |
300000 |
state-sync-request-size |
uint16 |
Number of key/values to request per state sync request |
1024 |
Database Configuration
| Option |
Type |
Description |
Default |
database-type |
string |
Type of database to use |
"pebbledb" |
database-path |
string |
Path to database directory |
- |
database-read-only |
bool |
Open database in read-only mode |
false |
database-config |
string |
Inline database configuration |
- |
database-config-file |
string |
Path to database configuration file |
- |
use-standalone-database |
bool |
Use standalone database instead of shared one |
- |
inspect-database |
bool |
Inspect database on startup |
false |
state-scheme |
string |
EXPERIMENTAL: specifies the database scheme to store state data; can be one of hash or firewood |
hash |
Transaction Indexing
| Option |
Type |
Description |
Default |
transaction-history |
uint64 |
Maximum number of blocks from head whose transaction indices are reserved (0 = no limit) |
- |
tx-lookup-limit |
uint64 |
Deprecated - use transaction-history instead |
- |
skip-tx-indexing |
bool |
Skip indexing transactions entirely |
false |
Warp Configuration
| Option |
Type |
Description |
Default |
warp-off-chain-messages |
array |
Off-chain messages the node should be willing to sign |
- |
prune-warp-db-enabled |
bool |
Clear warp database on startup |
false |
Miscellaneous
| Option |
Type |
Description |
Default |
airdrop |
string |
Path to airdrop file |
- |
skip-upgrade-check |
bool |
Skip checking that upgrades occur before last accepted block ⚠️ Warning: Only use when you understand the implications |
false |
Gossip Constants
The following constants are defined for transaction gossip behavior and cannot be configured without a custom build of EVM:
| Constant |
Type |
Description |
Value |
| Bloom Filter Min Target Elements |
int |
Minimum target elements for bloom filter |
8,192 |
| Bloom Filter Target False Positive Rate |
float |
Target false positive rate |
1% |
| Bloom Filter Reset False Positive Rate |
float |
Reset false positive rate |
5% |
| Bloom Filter Churn Multiplier |
int |
Churn multiplier |
3 |
| Push Gossip Discarded Elements |
int |
Number of discarded elements |
16,384 |
| Tx Gossip Target Message Size |
size |
Target message size for transaction gossip |
20 KiB |
| Tx Gossip Throttling Period |
duration |
Throttling period |
10s |
| Tx Gossip Throttling Limit |
int |
Throttling limit |
2 |
| Tx Gossip Poll Size |
int |
Poll size |
1 |
Validation Notes
- Cannot enable
populate-missing-tries while pruning or offline pruning is enabled
- Cannot run offline pruning while pruning is disabled
- Commit interval must be non-zero when pruning is enabled
push-gossip-percent-stake must be in range [0, 1]
- Some settings may require node restart to take effect