Lithos Protocol is a decentralized mining pool protocol which uses smart contracts to evaluate miner's work and pay them accordingly. Lithos uses Non-Interactive Share Proofs (NISPs) to efficiently prove a miner's work.
In order to run Lithos, you must have a working Ergo node. To mine on the Lithos pool, you may use any mining software which supports Ergo's Autolykos 2 algorithm. We recommend using SOAT Miner, as it is open-source with 0 dev fee and built-in Lithos support. Lithos releases require a working Java 11 installation.
- 6-8GB of RAM
- An Ergo node (versions 6.0.7/6.1.7 and above)
- ~30GB of storage (for the Ergo node)
- Java 11
The GPU you use to mine does not need to be on the same machine as the client. Whichever GPU you use, make sure its compatible with Autolykos 2 VRAM requirements.
We recommend using Lithos Launcher to set up the Lithos Client and Ergo Node. Follow the instructions there to get set up.
If you prefer to set things up separately, use the instructions below.
Before running the Lithos client, you will need a fully synced, indexed node.
For setting up a node, follow the node guide, which gives instructions for testnet and mainnet
nodes: Node Tutorial
Once your node is set up, you can download the latest release .zip file here:
Lithos Releases
To run the client, download a release .zip file. Unzip the file,
and navigate to lithos-client/bin. Create a new file called lithos.conf and input the following
into it:
{
include file("../conf/application.conf")
node {
url = "127.0.0.1"
key = "NODE_API_KEY_HERE"
storagePath = "path/to/nodefolder/.ergo/wallet/keystore/keyfile.json"
pass = "NODE_WALLET_PASS_HERE"
networkType = "MAINNET"
explorerURL = "default"
numAddresses = 32
}
# Change this value to a secret key
play.http.secret.key="changethissecret"
# Hash of "hello"
lithos.apiKeyHash="324dcf027dd4a30a932c441f365a25e86b173defa4b8e58948253471b81b72cf"
}After setting up your config file, ensure that your node is running before executing the start script in
lithos-client/bin. This script will start the Lithos Client.
Make sure to add them before the final closing bracket } in your config file.
Once your Lithos Client starts, you will likely want to wait before mining. The Lithos Client will start
synchronizing from the startHeight set in application.conf. You can also override
it in your own conf by placing state.startHeight = NEW_START_HEIGHT_HERE.
Additionally, you will not be able to receive mining rewards until you make a difficulty commitment on the blockchain.
You can think of a difficulty commitment as a promise to mine at a certain hashrate. You will be able to make
a difficulty commitment when your client has fully synced the MinerDictionary to the current
state of the blockchain. Once a commitment is made, you should wait 65 blocks(2 hours on mainnet) before starting to mine.
You will get paid for any blocks found 125 blocks after your commitment (4 hours on mainnet). It is recommended
to start mining at 65 blocks so that you can build up your super shares.
Once your difficulty is committed, it can take up to 28 hours for subsequent changes to take effect. Make sure you have the right value before committing!
When mining, you will get messages relating to super shares. Super shares are used to evaluate how much
work you performed. As a Lithos miner, your goal is to create 10 super shares within
a 2-hour (45 minutes on testnet) window before the block was mined. The amount of super shares you create is directly related to your
chosen diff value and your hashrate.
Increasing your diff value will decrease the amount of super shares you create.
Likewise, decreasing your diff value will allow you to create more super shares. On the testnet, we recommend trying
different values for your diff to see how super share creation functions with your hardware. All super shares you mine
will be stored in the .lithos folder, which is generated when you mine your first super share.
More super-shares does not mean higher payouts! The amount you are paid is controlled
entirely by your diff, higher values pay you out more. However, if you set your diff too
high, you may not create enough super-shares within the window. Your goal as a miner is to balance
these two variables, and find the right proportion of risk and reward.
To calculate the right difficulty, the webpanel provides a difficulty calculator you can
use to find the right value for your hashrate. The calculator is found at localhost:9000/assets/mining/difficulty
Input your hashrate, and select the start difficulty. Leave Account for network difficulty ticked:
it sizes the recommendations to how long windows actually last on the network, rather than a flat 2 hours.

In the image above, at 100 MH/s, it is 4.24M. Once you've obtained your starting difficulty,
you have two options to commit it onto the blockchain.
Go to localhost:9000/assets/mining/difficulty/commitment. There you can see the commitment
page, which lets you set your difficulty commitment via the API. Input your diff and Lithos API Key
in order send a transaction which commits your difficulty onto the blockchain.

To make your difficulty commitment, set stratum.diff to the appropriate value,
and then set state.autoCommit = true.
For both options the wallet associated with your node and Lithos Client must have some ERG to send the commitment transaction. We recommend a minimum of 0.05 ERG to start. This should cover commitments and NISP bonds which are needed for submissions. Miners with higher hashrate amounts may need a bit more ERG.
A good way to check if things are working properly is to view the Super Shares panel.
You can view this panel at localhost:9000/assets/mining
When you first start mining, the panel will look like this:

Once you've found 10 super shares, your panel will look like this:

If you used the start diff, you should see "ready" most of the time. If the panel is not showing "ready" often or at all, you should consider lowering your difficulty.
The Lithos Client will run a local stratum server at stratum.stratumPort (4444 by default).
It listens on every network interface unless stratum.bindAddress names one address, e.g. 127.0.0.1
for rigs on the same machine.
If you are using SOAT Miner, you can use the --lithos option to set up your miner to mine to your Lithos Client.
Lithos works with all mining software. However, we cannot strictly recommend other mining software due to having dev fees and being closed source. The Lithos Client has been tested and known to work with Rigel Miner.
rigel.exe -a autolykos2 -o stratum+tcp://127.0.0.1:4444 -u YOUR_ERG_WALLET -w my_rig --log-file logs/miner.log
Keep in mind that the ERG_WALLET and Worker name have no effect on Lithos, and can be set to any valid String.
The Lithos Testnet release accesses your node's secret keys via it's keystore in order to sign and generate transactions. We heavily recommend that you generate a new secret key for testnet which is not related to any mainnet wallets you own. This may change on future releases.
Lithos uses your node's wallet and api keys to interact with the blockchain and create transactions for you. It is not recommended to directly expose your Lithos Client's API outside your local network.
If you would like to avoid storing private information such as your node's api key and wallet password in the plaintext config file, you can use environment variables for better security.
node.key = ${?NODE_KEY_ENV}
node.pass = ${?NODE_PASS_ENV}
play.http.secret.key=${?PLAY_ENV}
Placing these lines at the bottom of your config will read your node key, wallet pass, and play secret from the
NODE_KEY_ENV, NODE_PASS_ENV, and PLAY_ENV environment variables.
Big thanks to the creator of Rigel Miner for helping me with some Stratum issues initially. Also, big thanks to SOAT Miner for creating an open-source, no dev-fee miner for Ergo with built-in Lithos support. Also thanks to Satergo for creating the stratum4ergo repo which the Lithos stratum implementation heavily takes from.