Preventing secretly mined chains In order to prevent attackers from secretly mining chains (which they could later publish to perform double-spending attacks), would it be possible to require some information to be included in the next block that can only be known if the last block in the chain was published to the network? Something like a random number that is only generated in response to the block being public.
That way, secretly mined side-chains can automatically be rejected by the network.
This is precisely what federated byzantine agreement algorithms like that used by XRP and Avalanche do. But this is a such a huge change that you can't really consider the algorithm to be proof-of-work anymore.
What happens is that a block is not accepted when it is mined but some subsequent process that can only happen once the block is public is required. So if the block is not made public, it will never be accepted.
The scheme Arthur Britto, Jed McCaleb and myself developed for the XRP Ledger in 2011 allows each participant to choose whose signatures they will require before they locally consider the block valid. Only when you collect sufficient signatures do you accept the block. There is no way to obtain the signatures unless the block is made public.
A somewhat complex algorithm handles the case where a chain is built privately and then revealed later. That chain may have more work but it will have fewer signatures in the intermediary blocks. There's &quot;preferred ledger by branch&quot; code that detects this and heavily discourages adoption of the one with the fewer intermediary signatures.
Again, this is such a radical change that the result is not really proof-of-work but a different algorithm. In the case of the XRP Ledger's algorithm, it doesn't use any proof-of-work at all. But you could use this &quot;preferred chain by branch&quot; logic and the signatures as proof of the chain being made public in connection with proof-of-work if you wanted to.