Let's say I deploy a contract with a simple function that accepts some value, and deploy this to the forked chain. The contract will end up on an unpredictable address U. Then people start sending some transactions carrying ETH value to the contract, calling the function at the same time. All fine.

But all these incoming transactions are replayable, and probably in fact replayed, on the ETC chain (provided there is ETC balance on the sender address, which can happen at any time in the future, eg. by some 3rd party accidentally sending funds there). The trouble here is that on the ETC chain, there is no contract at address U (even if I deploy the same contract on this chain it will end up on another address), so address U is treated as an externally controlled account so the value will be transferred and no function will be called (it seems the data field in the transaction is ignored for transactions to externally controlled accounts). So the ETC value went into the void and is not recoverable.

Is this true or am I getting something wrong? It seems this could happen very often.

I'm not saying this can lead to obvious ways of loss of value, but it could be a potential attack vector, or just create a mess.


The answer is no. The contract address is created deterministically so eg. if the contract deployment transaction is replayed on the other chain, the contract will have the same address U on both chains.

  • Not really because the nonce won't (always) be the same. So, deterministic, yes, but not identical for both chains. – bortzmeyer Jul 29 '16 at 19:36
  • @bortzmeyer Address will be the same if the tx is replayed (as in replay attacks). It will also be the same if we make sure the deploying address and its nonce is the same. – mazi Jul 30 '16 at 5:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.