Increasing address size from 20 to 32 bytes
<aside> 🔊 This possibility of attack means that if someone gives you an address that is not yet on-chain, and claims that the address has some property, they cannot prove that the address actually has that property, because they could have some second way of accessing that account. The properties of addresses become more complicated: you can trust an address if either (i) it is on chain, or (ii) you personally created it; for example, an organization cannot safely receive funds at a multisig unless that multisig has already been published on-chain, because whoever was the last to provide their public key could have chosen their private key in such a way as to make the address also a valid EOA controlled by themselves.
Not clear we absolutely want this property of trustlessness towards people sending us new addresses, though it is nice. </aside>
challenge: backward compatibility
make addresses 32 bytes, reserve first byte for version (≥ 1, address ≥ 2^160), 0 for old-style
new CREATE3 opcode for address creation, transaction type where msg.sender is 32 byte addr, new opcode BIGCALLER, returns 32 or 20 bytes address, CALLER always returns a 20 bytes address
challenge: interoperate with pre-existing contract
sha3(DOMAIN_SEPARATION_KEY + address)[12:]
(returned by CALLER)ASE (Address Space Extension) with Translation Map