This "selfish mining attack" is based on withholding a mined block and only publishing it at a later point in time, right?
Being aware of the fact that each block contains a UTC
time stamp, here's my defense proposal against this attack:
Why shouldn't the miners simply make a tiny adjustment of their acceptance criterion for new blocks received from other miners? This would avoid the whole attack scenario from the start.
In detail the solution would look like this:
Each miner that considers itself "well connected" to the network (i.e. not in the initialization state) will NOT accept a new block if its timestamp upon arrival is older than
t_receive_time - t_delta,
where t_delta is hard-coded in the miner software as e.g. [30 seconds] (see e.g.
here).
Every
honest miner will publish its block immediately, so it should propagate to almost all other bitcoin miners within less than [30 sec].
A
selfish miner, acc. to this attack scenario, who withholds its block for some duration, will get its block rejected by the honest majority.
A further amendment could be:
If
t_timestamp < t_receive_time - t_delta,
then a miner will first reject the new block, but if it has not received any newer block after t_confidence, where
t_confidence = (t_receive_time - t_delta) - t_timestamp,
then it will accept it anyway.
PS: Side note: This defense mechanism against selfish mining only works properly if
avg. block propagation time << t_delta [30 sec] << block generation interval [10 min]This is just another reason why feathercoin or litecoin with their "unhealthy" short confirmation times are not eligible for this defense strategy. Satoshi had a good reason for choosing a confirmation time well above the block propagation time.