What is PPLNS - The-GNTL-Project/Documentation GitHub Wiki

A simplified guide to PPLNS

PPLNS stands for Pay Per Last N Shares. The goal of PPLNS is to prevent pool hopping and reward people who continually mine. Each result that is accepted by the pool has a difficulty associated with it and a number of shares that the result is worth. In order to mine a block, a result must be submitted to the pool that has a difficulty that is higher than the specified difficulty of the coin's network. Network difficulty is adjusted for each new block based on the current network hashrate to ensure a regular flow of blocks. For instance, Monero uses a 2 minute block time, meaning the network difficulty will be adjusted to ensure a block is found in approximately 2 minutes.

The payout for each user on PPLNS is determined as follows:

  1. While mining, all submitted results are tabulated in a continual list.
  2. A block is found by a miner with a difficulty of x and confirmed by the network.
  3. The mined difficulty is multiplied by N to determine a limit, x*N=Difficulty Limit.
  4. The difficulty of the most recent results are then summed until reaching the limit.
  5. When the limit is reached, you are paid a portion of the block reward based on the amount of shares for each result used in the difficulty summation.

The PPLNS Window defines the approximate amount of time before earlier shares have no value (it is only an indicator). This window constantly changes based on the pool's hashrate. It can be found on each coin's dashboard.

Can this be used for a more accurate payment estimate?

Not easily. The first issue is that the mined block difficulty is unknown until it happens. There is no way to calculate a difficulty limit without estimating a value for it, which is inherently inaccurate. The second issue is that the value would change for every submitted result and need to be recalculated for each miner that is within the PPLNS window (which, as noted previously, is also a moving target). In the end, there becomes excessive calculations and a bloat of the database trying to keep track of everything constantly changing.