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.
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).
Why do pools use a different difficulty than the blockchain difficulty?
Because the goal is to track work attempted in a verifable manner. If a pool used a difficulty equal to the block difficulty then only one share would be found per block and it would be found by the miner who solves the block. All rewards would go to the single share holder and essentially you invented a long complex round about way of solo mining.
Contrary to popular belief, mining is not something where there is progress. Each hash has the same probability of being a valid block hash. You could get lucky and find a valid hash with your next hash, or you could not. There is no progress that is made.
When you mine on a lower difficulty, the target that your hash must be under is much higher than that of the networks. With enough hashes, someone will eventually find a hash that is lower than the network target, and that hash would also be lower than their pool target. The higher target (thus lower difficulty) is only for tracking who is actually doing work and how much work they are doing so that they can be paid appropriately.
What is stopping miners from cheating in Pool Mining?
The pool sends you the template of the block that you ought to be working on. Should you really find a block it is bound to the block template you received from the pool, i.e., the nonce that satisfies the proof-of-work difficulty is only valid because it is valid in combination with the template. Since the block template also includes the coinbase transaction, transferring the reward to the pool operator, you cannot steal the reward. Read More...