Apologies if this question is basic.

I seek clarification regarding the following paragraph in the ETH design rationale:

One weakness of the account paradigm is that in order to prevent replay attacks, every transaction must have a “nonce”, such that the account keeps track of the nonces used and only accepts a transaction if its nonce is 1 after the last nonce used. This means that even no-longer-used accounts can never be pruned from the account state. A simple solution to this problem is to require transactions to contain a block number, making them un-replayable after some period of time, and reset nonces once every period. Miners or other users will need to “ping” unused accounts in order to delete them from the state, as it would be too expensive to do a full sweep as part of the blockchain protocol itself. We did not go with this mechanism only to speed up development for 1.0; 1.1 and beyond will likely use such a system.

My questions are as follows:

  1. Why can't unused, empty accounts be pruned? If each account has its own nonce (series of transactions), I don't get why a dormant account can't be pruned.

  2. Can someone please explain the proposed solution in different, maybe plainer terms?

thank you

1 Answer 1

  1. If an account is pruned then the old transactions will be valid again because the blockchain will not have a the last nonce used. A malicious user can replay those transactions.

  2. The idea is that every transaction is valid at most for one or two epochs, with one epoch being 1 week it seems reasonable. Then if an account is empty after several epochs it could be discarded safely, since old transactions no longer can be replayed.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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