I've seen a lot of methods hard forked chains use to provide both strong and opt-in replay protection so that transactions are only valid on one of the chains. Examples of such rules include using a transaction-invalidating output, and using a specific OP_RETURN
string.
My question is why are any of these mechanisms neccessary to protect a holder from replay attack? More specifically, why can't a person who holds coins pre-fork protect themselves simply by spending a pair of coin-splitting transactions on each chain like this:
- Alice has sole knowledge of the private key needed to spend UTXO
A
which is valued at 1 "LegacyCoin" before the hard fork. - Hard fork creates a new coin called "NewCoin" based on the blockchain history of LegacyCoin.
- UTXO
A
now contains 1 LegacyCoin according to the LegacyCoin network and 1 NewCoin according to the NewCoin network because that's how hard forks work.
- UTXO
- Alice creates and signs two transactions: one that spends
A
toB
and one that spendsA
toC
(both of which Alice also has sole knowlege of the priavte key). - Alice then simultaneously broadcasts these signed transactions on the two networks: broadcasting the transaction
A->B
only on the LegacyCoin network and the transactionA->C
only on the NewCoin network. - Both transactions get confirmed on their respective networks and now Alice has effectively split the original value of UTXO
A
into the two blockchains in complete absence of any replay protection mechanisms implemented by NewCoin. The coins can now be concidered split because even if she spendsB
, no one else can spendC
(and vice versa) becuase they are different UTXOs and require different signatures to spend. Also, obviously no one can spendA
because it is already spent on both chains.
Why is statement in step 5 not true? Where does this logic break down requiring actual replay protection mechanism to be implemented by hard-forked chains?