First days of my new coin...

in #cryptonight4 years ago

My own cryptocurrency was launched on December 1st at midnight... During the first days, we found some issues that didn't happen during the testing period due to us not trying to be compatible with third-party mining pool software.

Essentially when we allowed daemon to return block templates that it would itself reject when solved, we revealed a serious bug in common mining pool backends, including forknote-pool and nodejs-pool.

Why would we want node daemon to return invalid block templates, people would ask... Simply, because it allows block explorer and mining pool software to detect which one of the alternate chains is the current one according to validation rules of node daemon.

When those backends decide that current block template must be discarded and a new block template has to be fetched from node daemon, they simply compare miner's stratum difficulty and block height of the two templates. Obviously this doesn't work as neither will change if just transactions are added to the transaction pool.

How we fixed this is pretty straight-forward, we discard any block template that gets rejected by the node daemon, whatever the reason is. In forknote-pool backend we also need to remove the test that returns empty block template if block height hasn't changed as that will cause miner to disconnect and pool to retarget stratum difficulty of that miner.