EIP-7523: Empty accounts deprecation

Seems like much ado about nothing.

This is an understatement. The EELS team reckon about half of the weird edgecases in the EVM are related to empty account clearing. The spec contains a permanent kludge just to deal with the time every client implemented an edgecase wrong and the wrong behavior got permanently embedded in the chain. Far too much time has been expended on pointless historical legacy.

As my favourite example I present this line from REVM:

// Set all storages to default value. They need to be present to act as accessed slots in access list.
// it shouldn't be possible for them to have different values then zero as code is not existing for this account,
// but because tests can change that assumption we are doing it.
let empty = StorageSlot::default();
account
    .storage
    .iter_mut()
    .for_each(|(_, slot)| *slot = empty.clone());

This is handling the case were a pre-Spurious Dragon CREATE leaves and empty account with storage and someone CREATEs a different account at the same address (requires a full KECCAK collision) after Spurious Dragon. The only reason we know what happens in this case is because someone wrote a test. Both EELS and REVM now have special case code just for that test.

1 Like