Skip to main content

epic-server.toml

Complete reference for the node's configuration file. Defaults shown are what a fresh mainnet install writes.

Every key requires a restart to take effect. The file is read once at startup and there is no reload signal.

Where the file lives

The node looks for configuration in this order:

  1. --config_file <path>, if given. A missing file at an explicit path is fatal.
  2. ./epic-server.toml in the current working directory.
  3. ~/.epic/<network>/epic-server.toml, created with defaults if absent.

<network> is main, floo, user or auto.

epic server config writes a fresh epic-server.toml into the current directory with its paths pointed at that directory. It refuses to overwrite an existing file.

A hardened starting point

The generated file contains every key with defaults. A minimal hardened configuration differs from those defaults in these keys:

epic-server.toml
[server]
# Loopback only. Front it with an authenticating proxy to reach it from another host.
api_http_addr = "127.0.0.1:3413"
api_secret_path = "/home/you/.epic/main/.api_secret"

# Optional, and created by hand: the node does not write this file.
foreign_api_secret_path = "/home/you/.epic/main/.foreign_api_secret"

# Keep full block history rather than pruning.
archive_mode = true

# Set these to false only to verify all historical proof of work yourself.
# skip_pow_validation = true
# disable_checkpoints = true

[server.p2p_config]
host = "0.0.0.0"
port = 3414

[logging]
log_to_file = true
file_log_level = "Info"

See authentication and TLS for the foreign secret, and node and wallet setup to get started.

[server]

KeyTypeDefaultPurpose
db_rootstring~/.epic/main/chain_dataDirectory holding chain and peer databases
api_http_addrhost:port127.0.0.1:3413Listen address for the HTTP APIs
api_secret_pathstring, optional~/.epic/main/.api_secretBasic auth secret for /v1 and /v2/owner. Comment out to run without one
foreign_api_secret_pathstring, optional.foreign_api_secret, relativeBasic auth secret for /v2/foreign. Create the file yourself. See API authentication
foundation_pathstring/usr/share/epic/foundation.json, or .\foundation.json on WindowsPre-generated foundation coinbase data
tls_certificate_filestring, optionalunsetPEM certificate chain. Setting it switches the API to HTTPS
tls_certificate_keystring, optionalunsetPEM private key. Required if the certificate is set
chain_typeenumMainnetMainnet, Floonet, UserTesting, AutomatedTesting
chain_validation_modeenumDisabledEveryBlock runs a full chain validation after each block
archive_modebool, optionalfalsetrue keeps full block history instead of pruning
skip_pow_validationbool, optionaltrueSkip proof-of-work validation for historical blocks during sync
disable_checkpointsbool, optionaltrueAllow skipping proof of work past the checkpointed range. Has effect only when skip_pow_validation is true
skip_sync_waitbool, optionalfalseSkip the startup sync wait
header_sync_timeoutseconds10Timeout waiting for confirmation more headers exist. Zero or negative becomes 10
run_tuibool, optionalfalseRun the terminal interface. Enabling it disables stdout logging
only_randomxbool, optionalfalseForce a RandomX-only block policy on a test network. See the block policy
no_progpowbool, optionalfalseRemove ProgPow from the block policy on a test network. See the block policy
run_test_minerbool, optionalfalseBuilt-in miner, Cuckoo only. Mining a chain takes Stratum and an external miner. See run a local network
test_miner_wallet_urlstring, optionalunsetWallet listener that receives the test miner's coinbase. Unset falls back to http://127.0.0.1:13415

Both sync validation keys default to true and speed up initial sync. Within 1,000 blocks of the chain tip, proof of work is fully verified whatever they are set to. See node and wallet setup for what each one skips.

[server.p2p_config]

KeyTypeDefaultPurpose
hostIP0.0.0.0Interface to listen on. 127.0.0.1 restricts to local
portu163414, 13414 floonet, 23414 usernetP2P listen port
seeding_typeenumDNSSeed, None on usernetNone, List, DNSSeed, Programmatic. DNSSeed queries node.epiccash.com:3414 on mainnet and floonet.epiccash.com:13414 on floonet. See networks for when to use List
seedsarray of ip:port, optionalunset in code, four addresses in the generated fileUsed when seeding_type = "List". Startup fails if that type is set with no list
capabilitiesu32 flags31What the node advertises. See the bit table below
peer_min_preferred_outbound_countu32, optional4Outbound peers the node keeps trying to reach, and the count it must reach before the sync state leaves AwaitingPeers. Absent from the generated file. Set 0 on a private chain, where the Stratum server otherwise refuses work
peers_allowarray, optionalunsetConnect only to these peers
peers_denyarray, optionalunsetNever connect to these peers
peers_preferredarray, optionalunsetPreferred peers, actively dialled
ban_windowseconds, optional10800How long a banned peer stays banned
peer_max_inbound_countu32, optional128Maximum inbound peers
peer_max_outbound_countu32, optional128Maximum outbound peers
peer_listener_buffer_countu32, optional8Slack above the inbound limit, to help bootstrapping
dandelion_peerip:port, optionalunsetPinned Dandelion relay
my_onion_addrstring, optionalunsetThis node's own onion address

The four addresses the generated file writes (config/src/comments.rs:272):

epic-server.toml, p2p seeds
seeds = ["95.217.197.180:3414","5.161.127.56:3414","5.75.242.4:3414","5.78.71.29:3414"]

Capability bits:

BitValueMeaning
HEADER_HIST1Serves header history
TXHASHSET_HIST2Serves txhashset history
PEER_LIST4Serves peer lists
TX_KERNEL_HASH8Serves kernel hashes
HEADER_FASTSYNC16Supports fast header sync
ONIONSTEM32Supports stem transactions over an onion route

The default of 31 is every bit except ONIONSTEM.

[server.pool_config]

KeyTypeDefaultPurpose
accept_fee_baseu64100000Minimum fee per unit of transaction weight for pool acceptance
max_pool_sizeusize50000Maximum transactions in the main pool
max_stempool_sizeusize50000Maximum transactions in the stempool
mineable_max_weightusize40000, 150 on usernet and automated testingMaximum total weight a miner packs into a block

[server.dandelion_config]

KeyTypeDefaultPurpose
epoch_secsu16600Length of one Dandelion epoch
embargo_secsu16180Fluff a stemmed transaction if it is not seen before this expires
aggregation_secsu1630Aggregation window before relaying
stem_probabilityu8 percent90Probability of stem mode for an epoch
always_stem_our_txsbooltrueAlways stem transactions submitted through our own API

[server.stratum_mining_config]

KeyTypeDefaultPurpose
enable_stratum_serverbool, optionalfalse on every networkRun the Stratum server. A generated config carries false whichever network it is for
stratum_server_addrstring, optional127.0.0.1:3416Stratum listen address
attempt_time_per_blockseconds15How long to mine one header before rebuilding it
cuckatoo_minimum_share_difficultyu643Minimum share difficulty for Cuckatoo workers
randomx_minimum_share_difficultyu644000, 1 on usertestingMinimum share difficulty for RandomX workers
progpow_minimum_share_difficultyu64200000Minimum share difficulty for ProgPow workers
wallet_listener_urlstringhttp://127.0.0.1:3415Wallet listener that receives coinbase rewards
burn_rewardboolfalseDiscard the block reward instead of paying a wallet. Test only

Keep the [server.stratum_mining_config] section present and set enable_stratum_server = false to disable mining. See Stratum for the protocol.

[server.webhook_config]

KeyTypeDefaultPurpose
tx_received_urlstring, optionalunsetPOST target when a transaction arrives from a peer
header_received_urlstring, optionalunsetPOST target when a header arrives
block_received_urlstring, optionalunsetPOST target when a block arrives
block_accepted_urlstring, optionalunsetPOST target when this node accepts a block, including reorgs
nthreadsu164Worker threads for webhook delivery
timeoutseconds10HTTP request timeout

[server.tor]

KeyTypeDefaultPurpose
socks_proxy_addrstring127.0.0.1:9050SOCKS proxy address, written into the generated torrc
send_config_dirstring.Directory for torrc, data/ and onion service addresses

Onion stem routing also needs capabilities to include the ONIONSTEM bit, value 32, which the default of 31 excludes.

[logging]

KeyTypeDefaultPurpose
log_to_stdoutbooltrueLog to stdout
stdout_log_levelenumInfoError, Warning, Info, Debug, Trace
log_to_fileboolfalseLog to a file
file_log_levelenumDebugLevel for the file log
log_file_pathstring~/.epic/main/epic-server.logLog file path
log_file_appendbooltrueAppend rather than truncate on each run
log_max_sizebytes, optional16777216Rotate above this size. Comment out to disable rotation
log_max_filesu32, optional32How many rotated files to keep
tui_runningbool, optionalunsetSet from run_tui at startup

A fresh node writes no log file, because log_to_file is false while log_file_path is populated. Set log_to_file = true for a log on disk.

Source

These values come from the configuration structs and their defaults:

Next