OTA Key Rotation — Per Transaction
masterSeed (stored in secure enclave)
│
├─ derive addr_0 ← current auth
├─ derive addr_1 ← next auth
└─ derive addr_2 ← future
TXN 1: execute(target, data, addr_1, sig_0)
│
├─ ecrecover(sig_0) == addr_0 ✓
├─ execute call to target
└─ store addr_1 as new auth
addr_0 pubkey now exposed (~2 sec)
Break of addr_0, however fast: too late
addr_0 already retired. Controls nothing.
TXN 2: execute(target, data, addr_2, sig_1)
└─ addr_1 now retired, addr_2 active
Proxy address: 0xABCD... NEVER CHANGES
keccak(factory, salt, initcode)
same on all EVM chains