Let’s start with the definition of pool mining:
A Mining Pool is a protocol for a group of miners to work together, in order to smooth out their mined coins.
Pooled mining is a mining approach where multiple generating clients contribute to the generation of a block, and then split the block reward according the contributed processing power. Pooled mining effectively reduces the granularity of the block generation reward, spreading it out more smoothly over time.
So, bitcoin mining pools are a way for Bitcoin miners to pool their resources together and share their hashing power while splitting the reward equally according to the amount of shares they contributed to solving a block.
The mining pool coordinates the workers. It’s just like a lottery pool. Your odds of winning a lottery are very low, so you team up with a bunch of other people and agree to split the winning. This makes your odds of winning much higher, but the amount you win much lower.
What a mining pool does is function as a coordinator for all the pool participants doing:
- Taking the pool members hashes
- Looking for block rewards
- Recording how much work all the participants are doing
- Assigning block rewards proportionally to participants
Miners mine differently by running pool software instead of the bitcoin client and just performing hashes for the pool.
The pool operator randomly verifies a small portion of the work submitted by each member of the pool. The member miners don’t know which of their submissions will get verified so they can’t cheat. If they cheat once in a while they might get away with it but not for long enough to matter.
Traditionally, pools gave miners work units covering the entire nonce range 0-4,294,967,295. When the miner finishes work, he requests a new work unit with a different extraNonce (or payout address). Different miners also get work units with different details.
To reduce load, pools are now moving on to a setting where the miner can himself change details of the generation transaction and compute the Merkle root, so he can do as much work as he pleases without needing new assignment from the pool.
How do I get paid in Pool?
Broadly speaking, there are two ways of paying pool miners. The first way is to have a wallet and send payments to miners through that when they ask for them.
The second way, which both eligius.st and p2pool use, is to keep track of how many shares people get, and set the coinbase transaction to pay the block reward directly to them once a block is found. This has the advantage that you never have any Bitcoins to steal on your pool server.
Common payout schemes include:
- PPS – Pay Per Share. Each submitted share is worth certain amount of BTC. Since finding a block requires shares on average, a PPS method with 0% fee would be 50 BTC divided by . It is risky for pool operators, hence the fee is highest.
- SMPPS – Shared Maximum Pay Per Share. Like Pay Per Share, but never pays more than the pool earns.
- ESMPPS – Equalized Shared Maximum Pay Per Share. Like SMPPS, but equalizes payments fairly among all those who are owed.
- CPPSRB – Capped Pay Per Share with Recent Backpay.
- Prop. – Proportional. When block is found, the reward is distributed among all workers proportionally to how much shares each of them has found.
- PPLNS – Pay Per Last N Shares. Similar to proportional, but instead of looking at the number of shares in the round, instead looks at the last N shares, regardless of round boundaries.
- Score – Score based system: a proportional reward, but weighed by time submitted. Each submitted share is worth more in the function of time t since start of current round. For each share score is updated by: score += exp(t/C). This makes later shares worth much more than earlier shares, thus the miner’s score quickly diminishes when they stop mining on the pool. Rewards are calculated proportionally to scores (and not to shares). (at slush’s pool C=300 seconds, and every hour scores are normalized)
What is a Share?
A share is a hash smaller than the target for difficulty of 1* (see clarification at end). Every hash created has a 1 in ~4 billion (2^32) chance of being a valid share. In comparison if the difficulty of network is 2,000,000 then a share is 2 million times “easier” to find than a valid hash for the block, and on average it will take 2 million shares (8 quadrillion hashes) to find a valid hash for the block.
Shares have no actual “value”. To the bitcoin network they are worthless. The only hash with any value is the one that is smaller than the target (determined by difficulty).