Mining on Lithos
How Lithos measures your work, and how the difficulty you choose trades payout size against how often you are paid.
Lithos is a decentralized mining pool, so it works differently from a pool you connect to over the
internet. The stratum server runs locally from your own client, and your payout is decided by one
number you choose yourself: diff.
This page explains how Lithos measures your work and how to choose that number. It stays at the level a miner needs. For the proof format, the statistics and the contracts behind them, read NISPs.
How Lithos measures your work#
A normal pool counts your shares. Pay-Per-Share and Pay-Per-Last-N-Shares both work out what you are owed from how many shares you sent.
Counting shares does not work on a blockchain. Storing hundreds of thousands of shares on chain costs far more space than a block reward is worth, and cutting the count by raising the target just makes payouts wildly uneven.
Lithos measures work a different way. Instead of counting shares, it asks you to prove that your mining had the shape it would have if you really were hashing at the rate you claim. You do that by submitting a Non-Interactive Share Proof (NISP): exactly 10 super shares, which are rare, high-difficulty shares found while mining normally.
Ten super shares is enough evidence. You do not send the rest, and the rest do not count for anything.
What diff decides#
The diff in your config becomes your score on chain, and score is the only input to your payout:
your payout = the block's reward × your score ÷ the total score of everyone who submittedSo a higher diff is a larger slice of every block you get paid for. That sounds like it should be
maximized, but in reality this is a trap. This is because of what else diff controls.
Your diff also sets how rare a super share is. Raising it makes each one harder to find. Since
you need ten of them inside a fixed window, and your hardware can only produce so many hashes in that
window, raising diff eventually means you do not reach ten.
The window#
You have 60 blocks to find your ten super shares, counted back from the block you are being paid for. That is about 45 minutes on testnet and about 2 hours on mainnet, because testnet blocks arrive roughly every 45 seconds against mainnet's 2 minutes.
The block count is the same on both networks, so testnet gives you less real time than mainnet
will. A diff that works on testnet is conservative for mainnet at the same hardware.
Sixty blocks is an average length, not a fixed one. Blocks arrive early or late around Ergo's target time, so some windows give you far less time than others. The following shows how long windows lasted from August to October 2026:
| Network | Target length | 9 windows in 10 lasted |
|---|---|---|
| Mainnet | 2 hours | 97 to 154 minutes |
| Testnet | 45 minutes | 31 to 63 minutes |
A short window cuts the super shares of every miner at the same time. The numbers on this page count both sides of that. You are paid less often in short windows. But when other miners fall short in the same window, the miners still paid take a larger share of it.
The trade#
Everything about choosing diff is one trade: how much you are paid, against how often you are paid
at all.
The clearest way to see it is in terms of how many super shares your diff makes you average per
window. You need ten to be paid, so the question is how far above ten you want your average to sit.
The following shows the trade on mainnet at a range of averages, so you can find the row that matches
your own appetite for risk:
| Super shares you average | Chance a window pays you | Your score | Expected earnings |
|---|---|---|---|
| 5 | 4.4% | 200% | 12% |
| 7 | 19.9% | 143% | 45% |
| 10 | 55.7% | 100% | 100% |
| 11 | 66.3% | 91% | 112% |
| 12 | 75.2% | 83% | 120% |
| 13 | 82.3% | 77% | 124% |
| 14 | 87.6% | 71% | 125% |
| 15 | 91.5% | 67% | 125% |
| 16 | 94.3% | 63% | 122% |
| 17 | 96.2% | 59% | 119% |
| 18 | 97.5% | 56% | 116% |
| 20 | 99.0% | 50% | 108% |
Score and expected earnings are both relative to averaging 10. Expected earnings is your score multiplied by the chance of being paid, plus the larger share you take when a short window stops other miners. It assumes 5 miners of similar size submit to each rollup, as on mainnet in October 2026.
The ideal diff#
Your ideal diff is one that averages between 12 and 17 super shares per window. It is not a single
number a formula hands you. It is the range where miners converge, because it is where consistency and
pay balance out.
The expected earnings column shows why. It peaks at averages of 14 and 15, which differ by less than 1%, and stays within about 7% of that peak from 12 to 17. Across most of the range you give up very little expected income whichever point you choose. The choice comes down to how steady you want your payouts:
- Toward 12: a higher score, paid about 75% of the time. Larger payouts with more gaps between them, at roughly 5% below the peak in expected earnings.
- Toward 17: a lower score, paid about 96% of the time. Smaller payouts, rarely a gap.
Between 14 and 15, choose 15. The two earn the same, and averaging 15 pays in about 92% of windows against 88% at 14. The web panel marks 15 as the peak for that reason.
Twelve is the floor of the range, not a target to push past.
Outside the range#
Leaving the range costs you in both directions, and the two directions are not equally forgiving.
Below 12, your earnings fall quickly. Averaging 10 pays you in only about 56% of windows. Averaging 7 gives you 43% more score than 10, and you are paid about a fifth of the time, so you earn less than half as much. At 5 you double your score and earn about an eighth. This is the direction that looks tempting and is not.
Above 17, your earnings fade slowly. Averaging 20 halves your score and pays you almost every window, and you still earn 8% more than you would at 10. Nothing is lost by staying there briefly, but it earns less than the range once you know your hashrate.
Choosing a starting point#
To find the diff that averages a given number of super shares:
diff = (hashrate in H/s × window in seconds) ÷ (10,000 × super shares you want to average)The window is 60 blocks: 2,700 seconds on testnet and 7,200 seconds on mainnet. The following gives the floor of the ideal range at averaging 12, the peak at averaging 15, and the recommended start at averaging 17:
| Hashrate | Testnet, 12 | Testnet, 15 | Testnet, 17 | Mainnet, 12 | Mainnet, 15 | Mainnet, 17 |
|---|---|---|---|---|---|---|
| 100 MH/s | 2.25M | 1.8M | 1.59M | 6M | 4.8M | 4.24M |
| 250 MH/s | 5.63M | 4.5M | 3.97M | 15M | 12M | 10.6M |
| 500 MH/s | 11.3M | 9M | 7.94M | 30M | 24M | 21.2M |
| 1 GH/s | 22.5M | 18M | 15.9M | 60M | 48M | 42.4M |
| 4 GH/s | 90M | 72M | 63.5M | 240M | 192M | 169M |
A lower diff averages more super shares, so the averaging-17 column is always the smaller number.
Start at the averaging-17 value, then raise diff slowly. Averaging 17 pays in about 96% of
mainnet windows and about 93% of testnet windows, and a hashrate up to 29% lower than you estimated
still averages 12. Follow these steps:
- Commit the averaging-17
difffor your hashrate. - Watch how many super shares you produce per window until the commitment may be replaced, 845 blocks after the client sent it.
- If your windows pay reliably, raise
diffso it averages one super share fewer, for example from averaging 17 to averaging 16. - Repeat, and stop at averaging 15 or wherever payouts start to skip windows.
Each step is a new difficulty commitment. It binds 125 blocks after the client sends it, and the next step can follow 845 blocks after that send, about 10 hours 30 minutes on testnet and about 28 hours on mainnet. The next section explains both rules. The Difficulty page of the client's web panel works out these values from your hashrate.
Changing diff later is slow#
Your difficulty is a commitment made in advance, on chain. That is what stops anyone waiting to see which shares they found and then claiming whatever difficulty those shares happen to justify.
It also means you cannot tune it freely. Both rules below count from when the client sends a commitment:
| Rule | Blocks | On testnet | On mainnet |
|---|---|---|---|
| Before the commitment takes effect | 125 | about 1 hour 35 minutes | about 4 hours 10 minutes |
| Before you may replace the commitment | 845 | about 10 hours 30 minutes | about 28 hours |
When you raise diff, the client starts mining at the new value 62 blocks before it takes effect. The
first rollups judged against the new value take super shares from the 60 blocks before them, so those
shares are already found at the new value. A super share found at the higher value also counts toward
the old one. When you lower diff, the client keeps mining at the old value until the new one takes
effect, because super shares at the old, higher value count toward both.
Test before you commit. Nothing is committed until you commit from the Commitment tab of the
web panel or turn on state.autoCommit, which ships off. Until then, stratum.forceConfigDiff = true
lets you measure super share rates at several values without writing any of them on chain. The
startup guide covers how.
What each submission costs#
Submitting a NISP posts a refundable bond from your node wallet, priced from the difficulty you claimed:
bond = max(0.002 ERG, your diff ÷ 25)You get it back in full when the rollup pays out. You lose it only if someone proves your submission fraudulent.
This is the one way a higher diff costs you something up front rather than only in risk: at 1.0G you
post 0.04 ERG per submission, and rollups open on every Lithos block, so several can be in flight at
once. Keep enough ERG in the node wallet to cover them.
Next steps#
- NISPs: the proof format, the statistics, and the full analysis of difficulty choice.
- Startup guide: setting
diffin your config. - Lithos Protocol: where the reward you are dividing comes from.