I have noticed a lot of confusion in these forums regarding the "fairness" of mining pool payouts, and I'd like to clarify some points. I don't have the time to write a long post that aspires to convince anyone; I'll just explain some facts for the benefit of those who will take my word for it.
If you mine solo at 500MH/s for a month, you will receive, on average, 223 BTC. This does not mean you're guaranteed to gain exactly 223 BTC, it could easily be 100 or 300 BTC. The exact amount you'll receive is a
random variable, a quantity affected by chance which is not known in advance. The most important things to know about a random variable are its
expectation and
variance. The expectation is the average value of the variable, while the variance is a measure of how far it will tend to deviate from this average. If you were, in fact, guaranteed a 223 BTC payout, your expectation would be 223 BTC and your variance would be 0. In reality, for the mining scenario described, the expectation is 223 BTC and the variance is 11100 BTC^2.
Generally speaking, variance is bad, and solo mining with little capacity has huge variance. It is a general principle that variance can be reduced by joining forces, and this is exactly what a mining pool does - brings many miners together to reduce the variance of all without a significant impact on their expectation. Usually the pool operator takes a small fee for his service, which reduces the expectation for the participants - but this is worth it for the greatly reduced variance.
It is very important to realize that most pools still have some variance. If your payout from a pool is low, you don't generally know if it's because of a flaw of the pool (such as cheating) or because the pool just had an unlucky day. You can however reach some conclusions by examining the payout over a long period of time, preferably with some statistical know-how.
Generally, pools work by rewarding participants for submitting "shares", hashes for a block which satisfy the requirements for difficulty 1. These prove that some work was done. Occasionally, a submitted share will satisfy the real difficulty requirement, and the pool will benefit.
Several methods of determining pool payouts are in existence:
- Pay per share: Every share submitted receives a fixed BTC reward known in advance. This has virtually 0 variance and is thus good for beginners. However, the operator is subject to enormous variance, and will thus take a large fee to cover his risk. This means the expectation for participants is low, so it's not an attractive long-term solution.
- (Fixed-weight) Share-based: Every time a block is found, its reward is split between participants according to the number of shares they submitted. This method is vulnerable to a form of cheating known as "pool-hopping". There is strong evidence, yet no conclusive proof, that such cheating actively takes place in pools which still use this method. Cheating can reduce the payout for honest participants by up to 30%, and trying to prevent it requires obscuring pool statistics, so this method should be avoided.
- Score-based: Each share submitted receives a score based on its age, and the block reward is split between participants according to their score. A controllable, mathematically sound implementation of the idea, which is immune to pool-hopping, was
suggested by me; the methods currently used by slush and BTCmine are similar but slightly weaker. The variance of this method is slightly higher than share-based, but this is dwarfed by the risk of having your expectation greatly reduced by cheating. There is a myth that score-based is disadvantageous if you only mine several hours a day; in fact the expectation (which is the more important part) is exactly the same, and only the variance can slightly increase.
I hope this has helped some people to make sense of the arguments being thrown around. I'll be happy to hear feedback and questions.