The other coinbase (AuxPoW)

If you’re running a mining pool, please make sure you read the note about mining at the end!

This week has primarily been spent on:

  • Debugging issues with coinbase transactions.
  • Clarifying that I don’t mean Coinbase the company, but the first transaction in each block, which generates the coins for the miner.

Patrick flagged up that sometimes he was seeing AuxPoW blocks being rejected because they had a transaction whose ID collided with an existing transaction, and we’ve spent a lot of time tracing down how this happens. The main confusion here was that AuxPoW blocks are not mined by the mining hardware, but by the wallet software, leading both of us on a very long wild goose chase through code. Once I’d identified where the AuxPoW blocks are built, it became clear that the input script for the coinbase transactions was being built to a very old standard.

I’ve modified the script generation to to include block height and a unique value for each block at the same height. This means the  transaction ID derived from hashing the transaction is unique, and blocks are now correctly accepted each time.

Beyond that, I’ve been doing cleanup and release preparation. The checkpoints have been updated to include more recent blocks, which should help anyone doing initial sync. The safe mode triggers have been tweaked (and I’ll talk more about this in  a moment) to not be quite so hair-trigger on Dogecoin. I’ve updated wallet logo to reflect the 1.8 version. Essentially lots of general housekeeping and tests.

On mining: Please note that there are safety features in the Dogecoin client which detect forks and similar issues. It will pick up the AuxPoW fork and stop unless you explicitly tell it not to, and that means you won’t be able to mine until you stop and disable the safe mode. So, when you upgrade to 1.8, you will need to run it with the “-disablesafemode” command line option. This should be done at least for a day before the fork and 2-3 days after. I’ll remind everyone with the release notes.

Lastly, target block for the fork is still not set yet. We will update everyone as soon as we have a specific target.