Why do pools hide stale shares from you?

15/02/2023

Kryptex does not hide the loss due to the rejected shares. Other pools may do this.
It’s quite funny sometimes to read And pool N has 0% rejects”.

It's funny because it can't be like that. Why not? Let's find out!

Types of shares and the differences

The graphics card processes the job → sends the shares → the pool checks the shares:

  1. Share accepted — all is good. The pool has received a share and will pay for it.
  2. Rejected share — something is wrong with the share, and the pool rejects it:
    • Invalid share — wrong solution. The graphics card has solved the problem wrongly (2+2=5). Usually, such a solution is rejected at the computer check stage and not sent to the pool. Therefore, there are practically no incorrect solutions on an adequately configured graphics card.
    • Stale share — "old," "late," or "irrelevant" solution. This solution came to the pool too late because the pool had already given out another task to search for another block.
    • Duplicate share — for some reason, the graphics card has counted twice and sent the same share. The pool will not accept two identical shares. A share that arrives at the pool later is a duplicate, and the pool will not pay for it.

Most often, Stale and Duplicate are the results of network delays and Internet connection problems.

Why does 0% Rejected shares is a lie?

As a result, the rejections from paragraph 2 cannot be avoided.

The pool gives all users tasks to find a solution for the same block, and the solution depends on random numbers (hash function). The coin's developers allocate a certain amount of time to find a cryptocurrency block.

When the graphics card finds a solution, it sends it to the pool. And then there are two possibilities:

  1. Your graphics card found the share in the given block searching period. Great, share accepted!
  2. Your graphics card found the share when somebody had already formed the block. Your graphics card could not find the solution in the allotted time, but after a couple of seconds, it found it and sent it to the pool. This share has a chance to generate an Uncle block. Share isn't entirely lost yet, but the pool must mark it stale.

A share that doesn't fit into the allotted Block time risks generating an Uncle Block.

The meaning Uncle Block is used only for Ethereum-based coins (ETH, ETHW, ETHF, ETC, UBQ). For other coins, such blocks are called Orphan Blocks — such blocks do not bring profit to either the pool or the miners at all.

So, you will have stale shares, and the bigger the network delays are (the later the graphics card gets work) — the more of them there will be.

Even if there is no network problem, the miner may send a share for the block after the block has been found. The share becomes stale and is suitable for an Uncle block at most.

As a result, we can't avoid the rejections from paragraph 2.

Block search and block reward

Let's look at the process using the Ethereum Classic ETC network as an example (the conditions will be different for different Ethereum-based coins).

Initial data:

  • The time to find the block is 13.3 seconds.
  • Reward per block (at the time of writing) — 2.56 ETC + Uncle block reward. According to the ETC coin protocol, the block reward is reduced by 20% for every 5,000,000 blocks. As of this writing, the reward for an Uncle block is about 0.08 ETC.
  • If a pool finds a block later than another, it becomes an Uncle block.
  • If a pool finds a block later than another, it becomes an Uncle block.

The calculation of the reward for the block and uncle block can be found in this article by the developers: https://ethereumclassic.org/blog/2018-02-22-rewards

Block time

The block time is the amount of time it takes to send a share and for the pool to accept it to form a block — the amount of time allotted for the share to become accepted.

Miners who have participated in block creation get an additional reward with Uncle blocks.

  • If the miner sends a share within the time given to find Block 1 (averaging 13.3 seconds) — it counts towards finding Block 1.
  • If the miner sends a share for Block 1 after the finding of Block 1 — it is not used but can participate in creating Uncle Block 1 of the first or second order.

13.3 s — average time to find a block. It means if the first block is found within 20 seconds, the second in 10 seconds, and the third in 9 seconds, then the average block time will be 13 seconds.

If the time of the share is more than 30 seconds with a probability close to 100%, it should become stale (rejected) because the pool will not be able to use such a share for block forming. It may be suitable for an Uncle block at most.

You can see the probability distribution of blocks in the picture below. The vertical scale is the probability of finding a block (0.0 — 0%, 1.0 — 100%), and the horizontal one is the block time in seconds.

The graph borrowed from the article https://github.com/rolandkofler/blocktime

The blockchain is one; there are many pools, and the miners are even more. Several pools and thousands of miners can mine one block simultaneously. A miner can connect anytime; even if the miner sends the share quickly (15ms), it has a chance to become part of the Uncle block. The block was already found, but the share was intended for that block.

The reward for the block goes to the pool and the miners who found the block.

The pool with more stale shares has fewer complete blocks and participates more in creating Uncle blocks, meaning the pool earns less, and the miners who mine on it also earn less.

Uncle Block Reward

Uncle blocks are actual blocks created by a miner at almost the same time another miner has already mined a successful block. Uncle blocks formed from stale shares and appear due to network latency.

The reward for an Uncle block depends on the number of Uncle blocks attached and the number of blocks themselves at the moment. Newly created blocks pay for Uncle blocks. Each new block may include up to two Uncle blocks. The reward for each Uncle block is 1/32 of the base reward per block or 3.125% of the reward per block.

Why do pools hide stale shares?

  1. The pool's reputation: the pool looks decently in miners' eyes. 1. If you don't see a problem — it doesn't exist.
  2. Pros for miners with bad connections: they get rewards despite network problems (essentially undeserved).
  3. Proses for miners with a good connection: None!

What's wrong with hiding a stale share?

There is nothing good about hiding stale or any other kind of share. Everyone suffers from it: the pool, miners with problems, and miners who don't have problems.

Hiding the stale shares deprives the pool of your honest earnings!

  1. Cons for the pools: total profitability decreases. Due to stale shares, the number of blocks falls, for which miners get 100% of the profit. Conversely, the number of Uncle blocks increases, for which miners receive only 3% of the profit.
  2. The cons for miners with a bad connection: they are unaware of the problem and do nothing about it. They unknowingly reduce the pool's overall profitability for themselves and others. The problem accumulates, and one day it will backfire.
  • The miners who don't have a problem suffer the most: Miners who don't have any issues mine "for themselves and a guy" — sharing their profit with those who mine with stales.
  • They don't do anything to change the situation — everything seems OK from their side.

What do miners lose? How much is it in money?

An increasing number of stale shares results in a proportional increase in the number of Uncle blocks and a decrease in standard blocks. There is a direct correlation between stale shares and Uncle blocks. If a user has 50% stale shares on their pool, they will have 50% of their reward from Uncle blocks, not standard blocks.

  • The reward for uncle block 1 is 3% of the normal.
  • The reward for uncle block 2 is 3% of the normal.

If we assume that the pool has 5% of miners that generate stale shares only (which generate uncle block), then the loss is

  • uncle block 1: (100-3)*0.05 = 4.85%
  • uncle block 2: (100-3)*0.05 = 4.85%

The total loss will be 9.7%

  • The pool continues to pay transaction fees, which also cost money.
  • The pool won't bear the losses so it will pass them on to the users.

Is it that bad?

There are pools where you can mine stale shares 24/7, and what's more — get paid! Often, such pools will not even look at what these stale shares are.

It is possible to create an artificial delay in the internet connection, let's say 120 seconds, and send the shares. Then, the pool will quietly mark them as accepted.

The block time is still the same, 13.3 seconds.

  • PPS pools that pay for each share found must mark such shares because any deviation from the norm (any shares except share accepted) will directly affect the miner's income.
  • PPLNS pools can hide the stale shares by covering up "low luck on the pool."

If you mine 100% stales in both cases, the pool knows about it and shows them. What's more — it pays money!

It means: the pool will cover the shortfall from the pockets of miners who are doing well.

There were two repairmen: Dan and John. Dan worked honestly, and John did nothing. The boss came to accept the work and paid them equally. The boss says he only sees the job done and what was so "undone," and he does not care. Did the two of them work together? Then it's two of you who get paid.

"How so? That's unfair!" — you are right. But, of course, it's not fair. That's payment for intentional or unintentional concealment of stales.

What do I do if I have a terrible Internet connection? Can I fix it?

  1. Unload the Internet channel. Downloading torrent? Reduce the speed and number of simultaneous connections. If that doesn't help, try closing the torrent. Watching YouTube? Lower the image quality? It will unload the channel and improve the connection.
  2. Turn off any antivirus or firewall restrictions you might have.
  3. Disable VPN or Proxy. Internet via VPN or Proxy is always worse than a direct connection.
  4. Replace your wireless connection with a direct wired LAN connection if you use a Wi-Fi router or mobile Internet. Wi-Fi will always be worse than wired Internet because it is affected by many factors: radio waves interference, channel overload, quality of Wi-Fi router, and quality of Wi-Fi receiver or even a working microwave (the microwave operates in the same frequency range as Wi-Fi; the difference is only in signal strength).

More tips in our article “How to get rid of rejected shares?

This article is available in other languages: