Why Your Wallet Identity Should Be a Contract, Not a Key
There's a design decision buried so deep in Ethereum that most people never notice it's a decision at all. They think it's just a law of nature. It isn't, and unwinding it turns out to fix a surprising number of problems at once.
The decision is this: on Ethereum, your identity is your key.
That sounds almost too obvious to question. Of course your wallet is your key — what else would it be? But sit with it for a minute, because that single piece of coupling is responsible for a startling amount of pain, and it's the first thing QP2 takes apart.
How a normal Ethereum account actually works
When you create an EOA (externally-owned account), here's the chain of events: you generate a private key, the public key is derived from it, and your address is derived from the public key. Three things, one rigid lineage. The address at the end is just a fingerprint of the key at the beginning.
This has one elegant property — you can generate an address offline, with no on-chain transaction, just by making a key. But it comes with a brutal constraint that we've all silently accepted: the key and the address are the same object. You cannot have one without the other. You cannot change one without destroying the other.
Almost every frustrating thing about self-custody traces back to that constraint.
Everything that breaks because of it
You can't rotate your key. In any sane security system, if you suspect a credential is compromised, you rotate it — issue a new one, revoke the old. You can't do that with an EOA. Your key is your identity, so "rotating" it just means making a different identity. There's no rotation, only relocation.
You can't upgrade your cryptography. Want to move from ECDSA to something stronger? You can't, not for an existing address. The address is mathematically wedded to ECDSA. A different scheme produces a different address — a different account entirely.
You can't change your security model. Maybe you want a single key today and a multisig tomorrow, or a hardware key for big transfers and a hot key for small ones. On a raw EOA, every one of those is a different address, because every one is a different key arrangement.
One leak is terminal. If your key is exposed, there is no recovery path that keeps your identity intact. The account is simply done. Everything tied to that address — reputation, positions, history — is now attached to a compromised credential you can't detach.
Notice the pattern. Every one of these is really the same problem wearing different clothes: your security and your identity are the same thing, so you can never change your security without changing who you are.
The fix: separate identity from authentication
Here's the conceptual move that QP2 is built on. It's small, and it changes everything downstream.
Your identity — your address, the thing the world knows you by — should be permanent and independent. Your authentication — how you prove you're allowed to act — should be a separate, replaceable component sitting underneath that identity.
In other words: stop deriving your address from your key. Derive it from something neutral, and let the key (or whatever cryptography you're using) be a swappable part inside the account rather than the root of the account.
Once you do that, all four problems above evaporate. Rotate the credential? Sure — the identity doesn't care. Upgrade the cryptography? Swap the component, keep the address. Change your security model? Same. Key leaked? Replace the authenticator, and the old credential controls nothing, while your address and everything attached to it stay exactly as they were.
How QP2 implements it
QP2 makes your identity a contract account, with an address derived deterministically using CREATE2 rather than from any signing key. There's no permanent cryptographic umbilical cord between your address and any particular algorithm.
Inside that contract is a slot that holds your verifier — the module that defines what a valid signature looks like for your account. The verifier is the authentication layer, cleanly separated from the identity layer. Your account points at one verifier at a time, and swapping it is a single function call: switchVerifier().
That's the entire architecture, and it's deliberately boring in the best way. Identity on top, permanent. Authentication underneath, replaceable. A clean seam between the two where Ethereum welded them together.
Because the verifier is just a module, it can be anything that can validate a signature on-chain — a one-time-address scheme, a commit-reveal vault, and eventually post-quantum schemes like ML-DSA or FALCON as they're standardized and added to QP2's registry. Your address doesn't know or care which one is active. It just knows it has a verifier, and that you can change it.
Why this matters beyond quantum
We talk about QP2 mostly in the context of quantum, because that's the most urgent reason this seam needs to exist — you will, eventually, have to change your cryptography, and today you can't. But honestly, separating identity from authentication is just better account design, full stop.
It's how you get real key rotation. It's how you get graceful recovery instead of catastrophic loss. It's how a single address can grow with you — hot wallet today, institutional custody later — without you fragmenting your on-chain life across a dozen addresses.
Quantum is the forcing function. But a permanent identity with replaceable security is something Ethereum should arguably have had all along.
Your address stays. Your security evolves.
QP2 — Quantum Proof Protocol. We're shipping to Ethereum mainnet — follow along. -> qp2.org
Informational, not investment advice.