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

# skip_pow_validation applies only through the latest checkpoint. Set it to false to verify all
# historical proof of work yourself.
# skip_pow_validation = true
# disable_checkpoints = false

[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. Commenting it out does not open them: with no secret, both return 401 to every call except GET /v1/version and one plain get_status. See the node credential
foreign_api_secret_pathstring, optional.foreign_api_secret, relativeBasic auth secret for /v2/foreign. Create the file yourself. A node with it set cannot serve epic-wallet 4.1.0. See API authentication
foundation_pathstring, optional/usr/share/epic/foundation.json, or .\foundation.json on WindowsPre-generated foundation coinbase data. Omit the key, or leave it empty, to use the copy built into the binary
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 during sync for blocks inside the checkpointed range. Applies only through the latest checkpoint
disable_checkpointsbool, optionalfalseOn a test network, extends the skipping past the latest checkpoint for blocks more than 1,000 below the tip. Has effect only when skip_pow_validation is true. Ignored on mainnet
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

On mainnet only skip_pow_validation matters. Left at true, proof of work is skipped for blocks up to the last checkpoint, at height 3,710,000, and fully verified for every block above it. disable_checkpoints widens that only on a test network. 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. Also caps how many inbound handshakes can be pending at once, one per IP address
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:273):

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​