EDIT: This is all wrong. NevermindIntroductionProportional Payout (PP) pools can be easily cheated by only submitting shares early in the round (see section 1, below). Alternative schemes exist to address pool-hopping, but all come with disadvantages:
still exploitable by pool-hoppers (including PPLNS, slush's pool, see section 2)
increased BTC return variance for miners as compared to PP (PPLNS, slush's pool)
possible decreased returns (score-based systems)
increased risk for pools (PPS)
Pool complexity and obscurity - (all)
There is a miner-driven demand for PP pools, despite their ability to be exploited, likely due to distrust for pool complexity and obscurity. Many PP pools have resorted to delaying or falsifying statistics to fend off hoppers, although this does nothing to solve the crux of the situation. This game of cat-and-mouse will continue, perhaps with hoppers determining how to independently infer round_shares of pools (which is deserving of a discussion of its own). Fundamentally, there exists a demand for a pool payout scheme with identical payout to PP for honest miners while removing the ability to be exploited by hoppers. Here, I present a new payout scheme, dubbed normalized Proportional Payout (nPP), which is mathematically impossible to cheat with hopping, while offering
identical payout to miners which have a constant share submission rate. nPP requires no complex coding and pays out 100% (minus fees) of the generated BTC with every block (in other words, no BTC buffers) while not subjecting pools to variance risk. This work is based on statistics first formulated by Raulo.
1) Proportional Payout (PP) Pools In a proportional pool the expectation value of a submitted share is dependent on one and only one variable: the number of shares submitted previously. Define the normalized shares submitted, x, as the number of shares submitted divided by the current difficulty. Then the expectation value of a submitted share is how much the share is worth (in BTC) on average. When normalized to solo mining, it is equal to exp(x)*E1(x). E1 is a nonanalytic integral, but
wolfram alpha will compute it for you. The expectation value is shown in Figure 1. Notice the expectation value is is greater than one before x~0.428 and less than one after 0.428. This is where the magical 42.8% comes from: shares submitted to the pool when x<0.428 have an expectation value greater than one.
This is the essence of pool-hopping. Any payout system with an expectation value of 1 for all x is hopping-proof; conversely, any other system is subject to hopping-based exploitation.
Figure 1. Speedup vs normalized shares submitted (see above text)2) Other scoring methods[I misunderstood PPLNS as resetting shares after each new pool round]Many scoring systems are not statistically analyzed and hence still offer opportunity for hopping. For example, Pay-Per-Last-N-Shares is still quite hoppable (with typical N), as follows. Let's renormalize N by dividing by the difficulty, to give us the normalized last N shares, M. Using the same analysis as above, the speedup can be computed as shown below in Figure 3. PPLNS strongly deviates from PP only during rounds which pay (per share) below the statistical average. Because the hopper "suffers" from PPLNS only during sub-par rounds, the absolute difference between proportional and PPLNS is small. One can calculated the expectation values of PPLNS shares (as a function of x and M), with the following formula (
Wolfram link): exp(x) ( Gamma(0,x) - Gamma(0,M+x)) which is valid for x < M. As M is decreased, the ability to be exploited is slightly decreased, but BTC return variance is increased. As M is increased, PPLNS reduces variance although is more exploitable. In fact, M~0 corresponds to solo mining and M~Infinity corresponds to PP. Hence, PPLNS is an interpolation between two undesired schemes. Slush's pool uses a time-based (in lieu of shares-based, as previously) share decay which is also hoppable for identical reasons (one need only multiply by the shares/time to map one to the other).
Figure 3. Comparison of expectation value from share submission from proportional and PPNLS (M=0.5, see text) payout schemes. Notice the intersection with y=1, where share expectation value is equal to solo mining. These intersections are respectively equal to ~0.21 and ~0.428 for PPNLS and proportional. 3) A new pool-hopping countermeasure: normalized Proportional Payout(nPP)normalized Proportional Payout, nPP, is identical to PP, with one change: each share is normalized by dividing its expectation value (from above, exp(x)*E1(x), see Figure 1) such that instead of expectation value varying with x, one expects a constant amount of BTC, independent of x. Normalized shares at the beginning of the round would be worth less, shares at x=.428 would be equal to one, and shares late in the round would be worth more than one. When a block is found, all BTC are sent out proportionally, according to the amount of "normalized shares" submitted. For non-hoppers, this works out, as stated, IDENTICALLY to PP, with only distinction that nPP is hopper-proof. The calculated normalized expectation value per share is as follows in Figure 4. As you can see, miners could join and leave the pool arbitrarily, without garnering an advantage.
Figure 4. nPP has constant expectation value per share, in contrast to PP. normalized_expectation_value(y) = Integrate exp(y-x)/(x * exp(y) * E1(y)) from x=y to x=InfinityNormalizing algorithmDef ExpVal(x):
return exp(x) * E1(x)
On ShareSubmit:
x = round_shares / difficulty
your_normalized_shares += 1 / ExpVal(x)
Payout Algorithmyour_payment = your_normalized_shares / total_normalized_shares * (50 BTC - Fees)
4) ConclusionnPP offers all the benefits of PP system, with none of the obscurity of other payment systems. Additionally, it is rigorously hopping-proof and easily implementable.
Appendix 1) Numerical approximation of the exponential integral, E1(x) (maximum error less than 0.07%)u = input
y = 0.5772156649015328606
G = exp(-y)
b = sqrt( 2(1-G)/(G(2-G)) )
hi = (1-G)(G^2-6G+12)/(3G(2-G)^2b)
q = 20/47 * u ** sqrt( 31/(2b) )
h = 1/(1 + u * sqrt(u)) + hi*q/(1+q)
output = exp(-u) * ln(1 + G/u - (1-G)/(h+bu)^2)/( G + (1-G)exp(-u/(1-G)))
Cheers