LithosDocs
ProtocolPayoutsTokenStatsDocs
Start mining
Documentation home
Protocol
  • Lithos Protocol
  • LFSM
    • Rollups
    • NISPs
    • Emissions
    • Mining on Lithos
    • Candidate building
    • Ergo Voting
  • LithosDex
    • Trading with orders
    • Providing liquidity
Run Lithos
  • Startup guide
    • Setting up an Ergo testnet node
  • Configuration
    • Node connection and security
    • Stratum and difficulty
    • Block packages
    • Batching and orders
    • Collateral and emission
    • Wallet and consolidation
    • Statistics and web panels
    • Synchronization and storage
    • Tasks and dispatchers
    • Failure modes
    • Reporting issues
Client API
  • Overview
    • getLithos client information
    • getList UTXO ids for blocks
    • getUTXO ids by block height
    • getBlock info by UTXO id
    • postBlock info for multiple UTXO ids
    • getGet a block's miner set
    • getList all pool blocks
    • getGet Lithos payouts
    • getStatistics overview
    • getMining and payment totals
    • getMining statistics by hour or day
    • getEstimate Lithos hashrate
    • getNetwork difficulty by epoch
    • getThis client's own hashrate
    • getThis client's hashrate over time
    • getThis client's payouts and claims
    • getCollateral inventory
    • getLocal mining activity
    • getCollateral market snapshot
    • getList queue boxes
    • getList the active set
    • getPermit price history
    • getYour locked block rewards
    • postClaim unlocked block rewards
    • postQuote joining the queue
    • postJoin the collateral queue
    • getLithosDex pool state
    • getLithosDex fee vault state
    • getList your outstanding orders
    • postQuote a swap order
    • postPlace a swap order
    • postQuote a deposit order
    • postPlace a deposit order
    • postQuote a redeem order
    • postPlace a redeem order
    • postCancel an order
    • postQuote a swap
    • postQuote a swap by desired output
    • postExecute a swap
    • postQuote a liquidity deposit
    • postDeposit liquidity
    • postQuote a liquidity redemption
    • postRedeem liquidity
    • getList liquidity provisions
    • postClaim settled fees for a provision
    • postQuote a provision resize
    • postResize a provision
    • postCheck a pending fee flush
    • postFlush pending fees to the vault
    • getPool-wide fee history
    • getPool price history
    • getRecent pool activity
    • getFee history for one provision
    • getWallet balances and lending status
    • getGet Stratum information
    • getGet candidate settings
    • getGet difficulty commitment
    • postCommit a difficulty
    • getGet best NISP at height
Lithos

A decentralized mining pool protocol on Ergo. Miners build their own blocks; contracts pay them for proven work.

Live on Ergo mainnet
Protocol
  • How Lithos works
  • Mining on Lithos
  • NISPs
  • Emissions
  • LFSM contracts
Run Lithos
  • Startup guide
  • Configuration
  • LithosDex
  • Client API
  • Failure modes
Network
  • Live stats
  • Public stats API
  • Ergo Platform↗
  • SOAT Miner↗
Community
  • Telegram↗
  • X / Twitter↗
  • GitHub↗
Lithos
© 2026 Lithos Protocol. Open source under the MIT licence.λίθος — stone
Docs/Run Lithos

Configuration overview

How the Lithos client reads its configuration, and how startup validation reports mistakes.

Standard4 min readFor anyone running the Lithos client. No Ergo or smart contract experience needed.

The Lithos client reads one configuration file at startup. This page covers where that file lives, how it inherits the shipped defaults, how to keep secrets out of it, and what the client does when a value is wrong. The pages after it document every setting, grouped by what it controls.

It does not cover installing the client. For that, read the startup guide.

The two files#

The client ships with conf/application.conf, which contains every setting at its default. Do not edit that file. Upgrading replaces it, and any change you made goes with it.

Instead you write your own file, lithos.conf, in lithos-client/bin, and pull in the defaults on its first line:

lithos-client/bin/lithos.conf
hocon
{
  include file("../conf/application.conf")
 
  # Your settings here override the defaults above.
}

Anything you set after the include overrides the shipped value. Anything you leave out keeps it. The start script passes this file to the client automatically, so there is nothing to point at it.

The format is HOCON↗, which is JSON with comments, unquoted keys and dotted paths. These three are equivalent:

hocon
node { url = "http://127.0.0.1" }
node.url = "http://127.0.0.1"
node { url : "http://127.0.0.1" }

Reading the reference pages#

Every setting is listed with the value it ships with and the range the client accepts:

ColumnMeaning
SettingThe full dotted key, as you would write it in lithos.conf
DefaultWhat the shipped application.conf sets, which is what you get if you leave the key out
RangeWhat startup validation accepts. Not validated means the client checks nothing beyond the value's type

A range is not a recommendation. Most of them are far wider than any sensible value, because their job is to catch a typo or a misplaced decimal point rather than to tune your client. Where a setting has a value worth choosing deliberately, the page says so in prose rather than in the table.

What happens when a value is wrong#

The client validates the whole file before it starts anything, and it reports every problem at once rather than failing on the first one. A run with three mistakes prints three problems, so one editing session fixes all of them:

The client found 2 configuration problems and cannot start safely:
 
  stratum.stratumPort
      70000 is outside 1..65535 (a TCP port)
 
  emission.maxLenderKeys
      64 exceeds node.numAddresses (32). Addresses past index 31 would receive funds this
      client cannot sign for. Raise node.numAddresses to at least 64
 
Fix these in conf/application.conf and restart.

The client then exits. It does not start with a bad value and warn about it.

Three kinds of problem are reported:

  • A missing required key. Most settings fall back to a default, but some cannot be guessed and the client refuses to start without them. Each reference page marks these.
  • A value of the wrong type, such as text where a number belongs.
  • A value outside its range, or one that contradicts another setting.

Some settings are checked against each other#

Most validation looks at one key at a time. The following pairs are not, because a value that is fine alone breaks something when combined:

PairRuleWhy
emission.maxLenderKeys and node.numAddressesKeys must not exceed addressesA lender key past the prover's last index receives permit returns and coinbases the client cannot sign for
wallet.max-optional-inputs and wallet.max-wallet-inputsOptional must not exceed the totalOtherwise a saturated background queue leaves nothing for a NISP submission or fraud proof to fund itself with
wallet.consolidation.attempt-timeout-ms and wallet.inventory-walk-timeout-msThe attempt must be longer than the walkA pass whose wallet walk uses the whole budget expires before it can send anything
Each staleAfterMs under stats and its refreshIntervalMsStale must be longer than the refreshOtherwise every reading is labelled stale the moment it arrives

Keeping secrets out of the file#

lithos.conf holds your node API key and wallet password in plain text. To read them from environment variables instead, add these lines at the end of the file:

lithos-client/bin/lithos.conf
hocon
  node.key = ${?NODE_KEY_ENV}
  node.pass = ${?NODE_PASS_ENV}
  play.http.secret.key = ${?PLAY_ENV}

The ${?NAME} form overrides the value above it when the variable is set, and is ignored when it is not. That means the file still works unchanged if the variables are missing.

Settings you should change before running#

Four shipped values are placeholders. Three of them are secrets that are published in this documentation, so anyone can reproduce them:

SettingWhy it must change
node.keyEmpty. Your node's API key
node.passEmpty. Your node wallet's password
lithos.apiKeyHashThe hash of the string hello, which is public
play.http.secret.keyThe literal string changethissecret

node.storagePath is also empty and has no sensible default, since it is a path on your machine.

Danger
Change the two shipped secrets

The default lithos.apiKeyHash is the hash of hello. Anyone who reaches your client's API with that key can move funds. See Node connection and security.

The setting groups#

PageCoversLevel
Node connection and securitynode, lithos.apiKeyHash, play.http.secret.keyStandard
Stratum and difficultystratum, excluding stratum.candidateStandard
Block packagesstratum.candidate, including the transaction sourcesAdvanced
Batching and ordersbatching, lithosdex.ordersAdvanced
Collateral and emissionemissionAdvanced
Wallet and consolidationwalletAdvanced
Statistics and web panelsstatsAdvanced
Synchronization and storagesyncExpert
Tasks and dispatchersstate, lithos-tasks, lithos-contextsExpert

Next steps#

  • Node connection and security: the settings every client must have.
  • Startup guide: installing and first run.
Edit this page on GitHubsynced from e0ca86a
← PreviousSetting up an Ergo testnet nodeNext →Node connection and security
On this page
  • The two files
  • Reading the reference pages
  • What happens when a value is wrong
  • Some settings are checked against each other
  • Keeping secrets out of the file
  • Settings you should change before running
  • The setting groups
  • Next steps