This EIP proposes adding a 'temporal' replay protection to transactions, in the form of a valid-until
timestamp.
This EIP is very similar to https://github.com/ethereum/EIPs/pull/599 by Nick Johnson and Konrad Feldmeier, the main difference
being that this EIP is based on clock-time / walltime instead of block numbers.
There are a couple of different motivators for introducing a timebased transaction validity.
The roll-out would be performed in two phases, X
(hardfork), and Y
(softfork).
At block X
,
valid-until
to the RLP-encoded transaction, defined as a uint64
(same as nonce
). t
, thent
is only eligible for inclusion in a block if block.timestamp
< t.valid-until
. At block Y
,
- Make valid-until
mandatory, and consider any transaction without valid-until
to be invalid.
For the dust-account clearing usecase,
- This change is much less invasive in the consensus engine.
- No need to maintain a consensus-field of 'highest-known-nonce' or cap the number of transactions from a sender in a block.
- Only touches the transaction validation part of the consensus engine
- Other schemas which uses the nonce
can have unintended side-effects,
- such as inability to create contracts at certain addresses.
- more difficult to integrate with offline signers, since more elaborate nonce-schemes requires state access to determine.
- More intricate schemes like highest-nonce
are a lot more difficult, since highest-known-nonce will be a consensus-struct that is incremented and possibly reverted during transaction execution, requiring one more journalled field.
Why use walltime instead of block numbers, as proposed in https://github.com/ethereum/EIPs/pull/599 ?
This EIP means that all software/hardware that creates transactions need to add timestamps to the transactions, or will otherwise be incapable of signing transactions after block Y
. Note: this EIP does not introduce any maximum valid-until
date, so it would still be possible to create
transactions with near infinite validity.
todo
None yet
The most notable security impact is that pre-signed transactions stored on paper backups, will become invalid as of block Y
. There are a couple of cases where this might be used
- Pregenerated onetime 'bootstrap' transactions, e.g. to onboard a user into Ethereum. Instead of giving a user a giftcard with actual ether on it, someone may instead give the person a one-time pregenerated transaction that will only send those ether to the card once the
user actively wants to start using it.
- If a user has an offline paper-wallet, he may have pregenerated transactions to send value to e.g. an exchange. This is sometimes done to be able to send ether to an exchange without having to go through all the hoops of bringing the paper wallet back to 'life'.
Secondary security impacts are that the addition of a timestamp would make the transactions a little bit larger.
Copyright and related rights waived via CC0.