Since
Eleuthria and
slush have both recently announced their own developed-behind-closed-doors mining protocols, I felt it appropriate to make a thread here for end-user discussion of the "getblocktemplate" standard which
they intend to compete with. As a poolserver author, a pool operator, a miner author, and a contributor to the reference client, my life is not improved by having yet another protocol to support, and what's bad for the authors of the infrastructure tools is also bad for all their users.
Getblocktemplate Features- Decentralized: the miners decide what they will mine, and make their own blocks - no more blindly giving up mining control to pool operators
- ASIC-ready: miners can produce as much work as they need with a single request
- Usable yesterday: Eligius has supported it since February, and more pools real soon
- Solo mining: just point your miner to bitcoind 0.7 and mine by yourself (no bitcoind load issues)
- Simple: the basic implementation requires only minimal block building
- Extensible: extensions are available today for miners who wish to take more control over their miners, and future improvements can easily be added later
DocumentationSee the new
Bitcoin Wiki page for getblocktemplate, with lots of useful resources including end user and developer documentation.
Technical specifications:
Supported by... (post or PM me to get yours added)
Poolservers (providing getblocktemplate to miners):
Mining software:
Libraries for mining software:
Mining pools:
History/BackgroundGetblocktemplate's origins trace back to forrestv's getmemorypool JSON-RPC method for bitcoind. He created it so that his pool (P2Pool) could piggy-back on bitcoind so as to avoid harming the Bitcoin network (up to this point, it mined only empty blocks that never confirmed transactions). Having been fighting with scalability problems in pushpool/bitcoind for months on my pool (Eligius), I set out to implement a fast pool server using getmemorypool to do its own block production (this became Eloipool, this first open source makes-its-own-blocks poolserver). Other poolservers also implemented block creation using getmemorypool over the months following.
At about the same time, interest in decentralizing pooled mining became a hot topic. While BitPenny had initially released its own decentralized mining proxy months prior, P2Pool's implementation became rapidly popular. Anyone involved in Bitcoin mining protocols could see the need to move control of block creation back into the hands of the miners. Unfortunately, both BitPenny and P2Pool had used very pool-specific proprietary protocols to implement their decentralization. On the other hand, getmemorypool was
almost a perfect fit for the task - it just lacked support for the now-ubiquitous pooled mining extensions that had developed around the getwork protocol over time.
In February, I implemented and
deployed a first draft of getmemorypool mining support in Eloipool (and on Eligius) along with a proof-of-concept getwork proxy (now known as gmp-proxy), adding revisions as needed to function as a general-purpose decentralized mining protocol. After I had confirmed it was working, I documented and proposed it on the Bitcoin development mailing list for review on February 28th, where discussion began on what was missing and what needed to be changed or clarified. During the following few months, a number of others, both developers and testers, provided constructive criticism and suggestions, which were integrated into the standard. I also actively encouraged participation in the development of the standard among pool operators and poolserver authors, especially as it became necessary to move forward into the ASIC "mining generation". Eventually, it was decided it would be best to rename it to the more appropriate "getblocktemplate" name and drop backward compatibility with getmemorypool for simplicity. The standard was split into two pieces and the technical specification can be found in
BIP 22 and
BIP 23.
Support for getblocktemplate mining was
announced for BFGMiner a week ago, and is currently functional (implementing the basics is quite easy) though not entirely optimized yet. A number of other software developers and pools have told me they intend to add getblocktemplate support soon.
(side note: all of this occurred before Eleuthria or slush made their protocols public, and neither of them chose to participate in the open development of the getblocktemplate standard)ContributeAll that being said, there is always room for improvement. Reception of the proprietary proposals strongly suggests getblocktemplate is in desperate need of good miner-side example documentation. If you have the time to help bring getblocktemplate to everyone sooner in any way, please get in touch
Thanks to... (in no particular order)
- Forrest Voight
- Pieter Wuille
- Jeff Garzik
- Gregory Maxwell
- Geir Harald Hansen
- Gavin Andresen
- Stefan Thomas
- Michael Grønager
- ...anyone else I forgot to mention