5
I've been looking at selfish mining and empty blocks. In all cases, the selfish miner profits by keeping block solutions private until their value to his own pool is maximized, rather than releasing them ASAP which is the honest way to do it.
If the protocol were changed to make holding back a block far riskier than it is currently, I think this would go a long way to solving the problem presented by selfish mining. A selfish pool holds a solved block until someone else solves a block at the same height. The selfish pool then releases its pre-solved block (having had time to privately seed the global network so that as many honest miners as possible will see the selfish block first) to orphan the honest miner's block. Currently, the risk is that enough honest miners might choose the honest block with the result that the selfish miner loses both the reward for having solved it first and the advantage of being one block ahead. The papers on selfish mining show that this risk is not great enough to prevent selfish mining.
The protocol currently expects a miner to use the first block that adds to the chain. If this rule (actually a suggestion) were changed to expect a miner to use the block that destroys the most bitcoin days, selfish miners would risk far more by holding back their solutions. It would still be relatively easy for a selfish miner who has gotten ahead to exploit his position by saving the solution until it can be used (if it destroys more bitcoin days) to orphan someone else's solution, but the risk that the other solution might destroy more bitcoin days would be significant. Even if the selfish miner seeded his solution with his own very old UTXOs, he would be wasting some of his ammunition (bitcoin days).
Additionally, the rule that a miner use the first seen block or any other rule to resolve conflicts when two blocks show up as possible extensions to the current chain is not enforceable. So perhaps what is needed is not for the protocol to change, but for miners (who would like to prevent the selfish mining attack) trying to decide between two new block heads to use bitcoin days destroyed to decide. Publishing this idea, however, is not warranted until it has been criticized for flaws.
So have at it!
My first impression is that it would be very easy to game for a mining pool with ~20% of the total hask power to dominate mining in general, by seeding transactions with old coins they hold. – Murch – 2015-08-24T22:20:57.760
Sure. It's the same as it is now, except that they'd also have to have old coins and eat through them with each attempt. So most-btc-days-destroyed discourages selfish mining more than pick-one-at-random and also better than first-seen. It is improvement that I seek, not perfection. – Dave Scotese – 2015-08-25T05:08:37.117
Simplified to illustrate my point: Say there is two mining pools, A has old coins, B doesn't, they have each about 50% of the total mining power. A can create transactions that he mines, but doesn't broadcast, and thus oust any competing block B produces, unless B gets two blocks before A gets one. That seems broken to me. Also, (Nick pointed out to me) if neither would create extra transactions, any later block would always supercede an earlier block, because a single transaction more would give a greater figure of Bitcoin Days Distroyed. – Murch – 2015-08-25T20:53:06.493
@DaveScotese, this is actually what ziftrCOIN does, using the # of coin-days-destroyed as a tie breaker.
– morsecoder – 2015-08-31T19:50:07.410@StephenM347, I assume there is no code to enforce that, but that it is the default behavior of the code. I don't know how it can be enforced, and I guess it doesn't need to me. Just a culture thing. – Dave Scotese – 2015-09-02T01:18:27.557
@DaveScotese, right, it's not enforced, just the default. – morsecoder – 2015-09-02T01:51:35.547