Skip to content

Issues with bitcoin PoW anchoring through anyone-can-spend outputΒ #8

@adambor

Description

@adambor

Prime is supposed to be anchored to bitcoin with an anyone-can-spend single-use-seal that is spent, new block is committed in the spending transaction and new anyone-can-spend single-use-seal is created, if it so happens that there is not a proper commitment, a protocol reset happens through OP_RETURN announcement. Here are the problems I see along with possible solutions to them.

1. Selfish mining

Happens when a miner produces a valid commitment but doesn't release the prime block, instead he keeps the blocks for himself, and releases them at some point in the future causing a possibly massive re-org. With addition of secondary PoW (Prime PoW) this can be mitigated, but a party with >51% of Prime PoW would be able to cause massive re-orgs and double spends, so I don't see how this is necessary better than a separate blockchain with its own PoW.

A simple solution to this problem would be to publish whole prime blockheader on bitcoin, either through OP_RETURN or as a taproot inscription, then no miner can withold publishing of blockheader as it would be stored in the clear on bitcoin mainchain.

2. Replacement cycling attack

Anyone-can-spend outputs are prime candidates for attack via replacement cycling attack, as was recently discussed on the bitcoin mailing list, this would allow ANY malicous party to censor Prime blocks from being committed to bitcoin mainchain. You can find a good description of the attack here. Basically this is a way to evict any transaction trying to spend the anyone-can-spend output from the mempool, so it never gets mined.

Solution for this would be to change the output from anyone-can-spend to an output script which requires PoW to be spent, this can be done through signature grinding.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions