Blocks on the Bitcoin blockchain have a maximum size of 1 MB. Proof of work difficulty is calibrated so 1 block is created every 10 minutes. It is generally accepted a miner would want to maximise the number of transactions it includes in a block as it collects the transaction fees. Logically, with the growing popularity of Bitcoin, the average block size is getting closer to its limit.
In this environment, it is surprising to see a number of empty blocks being mined. An empty block is not entirely empty, it has 1 transaction : the coinbase transaction which allocates the mining reward to the miner (12.5 bitcoins at the time of writing). It is important to know, that empty blocks are not easier, cheaper or quicker to mine than full blocks. The ratio of empty blocks varies considerably from one mining pool to the other. For instance, Bitfury, BitClub Network and Kano CKPool do not mine empty blocks.
Why are there empty blocks?
When a mining pool receives a new block from a competitor, it needs to perform a few actions: download the full block, validate its transactions and define a new block to mine on. During this - albeit short -interval, so as not to waste hashing power, they start mining a new block. Only the coinbase transaction is included, so the previous block does not invalidate theirs with a duplicate transaction.
This validationless mining (or SPV mining) phenomenon can be seen on the Kaiko blockchain page, with empty blocks being mined just after a normal block, when the mempool is far from empty.
The number of empty blocks is dropping
The share of empty blocks has fallen across the board over the past few months, although the timing has not been quite the same for all pools. The main theory behind this is the improvements made in the mining software, especially Bitcoin Core 0.12, which reduces the time between the validation of a block mined by another pool and the mining of a new non-empty block.
These improvements included (but were not limited to):
- Improvement which allowed for pre-calculation of some of the work required for a miner to validate all the transactions in the block (rather than doing it at block creation time)
- Relay Network configuration improvements which includes a technically simplified (and quicker) prioritisation of transactions to help miners decide which transactions to include in a block
- Bitcoin Core GetBlockTemplate - improvement by which the individual miner requests the composition of the block to mine- optimizations. More details are available here: https://bitcoincore.org/en/2016/02/23/release-0.12.0/
Is it bad?
The whole point of the Bitcoin network is to process transactions. Therefore, empty blocks are often criticised as “bad behaviour” as creating very little value for the network by accelerating disinflation and stealing from “honest” miners.
However, it can also be considered as counter-balancing the centralisation tendency of the network: a pool which wins a block can start mining the next block immediately since they already know which transactions were included in the block. Whereas other miners first have to download the transactions, and then generate a new block which doesn’t include any of them. The ability to mine with just the header, could be considered to limit the benefits of centralisation.
Technically, it could be easily prevented by including, for example, a hash of the current coinbase concatenated with all the previous transactions in the block header. The recent fall in the number of empty blocks shows that the issue can be contained through improvements in the protocol which make mining empty blocks less interesting. Additionally, the gradual decrease of the block reward and the increased reliance on transaction fees will likely make mining empty blocks unprofitable over time.