Through a splash in the media, Purse and its in-house-built alternative Bitcoin implementation Bcoin recently presented their scaling proposal, dubbed “To the Moon.” Where Bitcoin XT, Bitcoin Classic and Bitcoin Unlimited all attempt to increase Bitcoin’s block size limit with a hard fork, and Bitcoin Core developers prefer a Segregated Witness soft fork (SegWit), Purse CEO Andrew Lee announced a third approach: extension blocks.

Extension blocks were actually first proposed by Bitcoin Core developer Johnson Lau in 2013 (as “auxiliary blocks”), and again earlier this year. The solution generally shares many of the virtues of hard forks: extension blocks allow for almost any protocol change. But they share one significant benefit with soft forks: extension blocks are backward compatible.


Well, sort of …


Soft Forks


Soft forks are protocol changes that add new rules or tighten up existing ones. “Old nodes” — as we’ll call them for now — will consider a soft-forked chain valid because it doesn’t break any “old rules.” This makes soft forks backward compatible: they allow old nodes to coexist on the same network with “new nodes” that enforce the soft fork.

While soft forks can only add or tighten rules, they can be cleverly used to extend Bitcoin’s capabilities. To do this, soft forks typically utilize special Bitcoin addresses known as “anyonecanspend.” (They’re actually “outputs,” not addresses, but for simplicity’s sake ignore that for now.)


If these anyonecanspend addresses hold any bitcoins, it means that anyone can spend them; no cryptographic signature or anything else is required … or so it seems to old nodes.


But that’s not what new nodes, enforcing the new rules, see. The new rules prescribe that the bitcoins in these anyonecanspend addresses can only be spent under specific conditions, defined by the soft fork. These new rules can, for example, prescribe that a certain amount of time must have passed (CLTV) or that a signature must be included in a new part of a Bitcoin block (SegWit).


Extension Blocks


Extension blocks resemble soft forks, but quite literally take the concept to another level.


An extension block itself looks a lot like a normal Bitcoin block, which we’ll call a “base block.” Like a base block, an extension block mostly includes a bunch of transactions.


But there is a difference. A base block is cryptographically linked to the previous base block and to the next base block, chaining all base blocks chronologically to form Bitcoin’s blockchain. An extension block, on the other hand, links only to one corresponding base block. Extension blocks “peg along” base blocks.

When a transaction is sent from a base block to an extension block, an old node is tricked. From the perspective of the old node, the coins are sent to a typical anyonecanspend address on the base block. The coins never leave the base block as far as the old node is concerned, and in fact the old node doesn’t even see the extension block.


But from the perspective of a new node, the bitcoins are really sent to a whole new address on the extension block — an “extension address.” This extension address behaves more or less like a normal Bitcoin address.


Interestingly, these bitcoins can then even start to circulate from extension address to extension address, from one extension block to the next. As such, new nodes see the coins moving around and changing ownership. At the same time, old nodes do not see anything and think the bitcoins are still stuck in the original anyonecanspend address.


A new node can also send the bitcoins from their extension address back to a normal address on the base block. This is done by tricking old nodes again: from the perspective of the old node, the coins are finally moved from the anyonecanspend address. Only a new node knows where the coins really came from.