As usage of the Ethereum network for DeFi has increased, more and more transactions are time sensitive. That is, there are transactions for which, if they are not executed in a timely manner users would prefer that they not be executed at all.
For example, consider a simple trade on UNIv3 ETH/USDC. If it executes quickly, then users get a reasonable price and they are happy. If it executes slowly however, it may become stale, users may get a worse price or get sandwiched because their slippage tolerance is no longer set correctly. If is not executed quickly, users might prefer it be automatically canceled so they can submit another transaction.
It is possible to get this kind of behavior currently; however, it requires costly on chain operations, and the transaction may be included on chain anyway, meaning that even though the transaction has been killed, the user still pays gas.
To accommodate these preferences, I suggest adding a new field to ethereum transactions fillBy
. fillBy
is an optional field where a user can choose a slot which if specified would make a transaction invalid after a certain slot has passed in the same way it would be invalid if the signature didn’t check out or if a transaction with the same nonce from the same user had already landed on chain.
This would be extremely useful for searchers particularly in preventing low carb crusader attacks over multiple blocks, which could eliminate the attack even without single slot finality.