Update (April 2026): A formal EIP draft has been submitted as EIP-XXXX. This thread serves as the official discussion forum per the EIP preamble discussions-to field.
I have been researching Ethereum’s post-quantum landscape and identified a structural gap that I have not seen addressed in any existing proposal. I am posting here to gather technical feedback alongside a formal EIP draft.
The gap
The Ethereum community is making strong progress on post-quantum security:
-
EIP-8141 — flexible signature schemes via frame transactions
-
EIP-7932 — post-quantum algorithm registry and precompiles
-
EIP-7864 — unified binary state tree using quantum-safe hash functions
Each of these proposals changes how you sign, verify, or store.
None of them change how the address is derived.
After all three proposals are fully deployed, the Ethereum address derivation formula remains:
address = keccak256(public_key)[12:]
The public key is still the seed of every EOA identity. The first transaction permanently exposes that key on-chain via ecrecover. A Cryptographically Relevant Quantum Computer running Shor’s algorithm needs only that exposed public key to recover the private key.
This is not a signature problem. It is a commitment problem.
The address derivation layer is the only layer in Ethereum’s post-quantum roadmap without a quantum-safe upgrade path.
The concept — Hash-Committed Account (HCA)
A new Ethereum account type where the address commits to an authentication policy tree — not a public key:
auth_root = merkle_root([leaf_0, leaf_1, ..., leaf_n])
address = keccak256(tagged_hash("HCAAddr", auth_root))[12:]
leaf_n = version_byte || EVM bytecode spending condition
No public key enters the address derivation or commitment chain at any point. A quantum computer observing the address learns nothing — there is no algebraic structure to attack.
Spending flow
When sending a transaction from an HCA account, the witness contains:
witness = {
leaf_script, // the spending condition being used
merkle_proof, // proof that leaf_script ∈ auth_root
witness_data // signature or other data the leaf requires
}
Verification:
-
Hash
leaf_script→leaf_hash -
Walk
merkle_prooffromleaf_hash→ recomputed root -
Assert recomputed root ==
authRootstored in account state -
Execute
leaf_scriptin restricted EVM context (read-only, gas-capped) -
If valid, execute the transaction.
msg.sender= HCA address.
No ecrecover. No public key recovery. Sender address is an explicit field in the transaction body — consistent with EIP-8141’s frame transactions.
Signature-scheme agnostic
HCA does not mandate a signature scheme. Leaf version 0x01 uses ECDSA and works today. Leaf version 0x02 dispatches to EIP-7932’s algorithm registry — Falcon, Dilithium, SPHINCS+ work when standardized. HCA defines the commitment structure. The signature scheme is a leaf-level concern.
How HCA differs from Account Abstraction
I want to address this directly because it is the most common question.
Account abstraction (EIP-8141, ERC-4337, EIP-7702) changes how transactions are validated — it decouples signature verification from ECDSA. HCA changes what the address itself commits to — it decouples address derivation from public keys.
These are orthogonal layers:
EIP-7864 → quantum-safe state storage (how data is stored)
EIP-7932 → quantum-safe algorithm registry (which algorithms exist)
EIP-8141 → quantum-safe validation (how you sign)
HCA → quantum-safe address derivation (what your address commits to)
Even with EIP-8141 fully deployed, a new EOA’s address remains keccak256(pubkey)[12:]. The public key is still baked into identity at birth. HCA eliminates this residual dependency.
The analogy: BIP-360’s P2MR exists in Bitcoin alongside Taproot. Taproot enabled script-path spends. P2MR provides the purpose-built quantum-safe output type that commits only to a Merkle root with no key-path spend. HCA is to EIP-8141 what P2MR is to Taproot.
What HCA solves and what it does not
Solves: Long-exposure quantum attacks — eliminated by design. No public key is ever committed to the address or exposed on-chain through address derivation. A CRQC has no key to run Shor’s algorithm against.
Does not solve: Short-exposure attacks (breaking a key during the ~12 second mempool window). Full protection against short-exposure attacks requires post-quantum signature schemes inside leaf scripts, which HCA is explicitly designed to support.
Does not require: Forced migration of existing EOAs. HCA is opt-in. All existing accounts are completely unaffected.
Urgency
This is not speculative. Government mandates exist:
-
CNSA 2.0 (NSA, 2022) — PQ migration for software by 2030, full upgrade by 2033
-
NIST IR 8547 (2024) — ECDSA deprecated after 2030, disallowed after 2035
-
Google Quantum AI (March 30, 2026) — ECDLP-256 breakable with fewer than 500,000 physical qubits in minutes. 20x reduction from prior estimates. 2029 internal migration deadline.
-
Ethereum Foundation (pq.ethereum.org, 2026) — “The work must begin well before the threat arrives.”
HCA’s migration across wallets, DeFi protocols, exchanges, and L2s will itself take years. Starting now is not early.
Design summary
| Element | Design |
|---|---|
| Account state | One new 32-byte authRoot field alongside nonce, balance, codeHash |
| Address length | 20 bytes (keccak256(tagged_hash("HCAAddr", auth_root))[12:]) for EVM compatibility |
| Domain separation | BIP-340 tagged hash convention: `keccak256(SHA256(tag) |
| Leaf versioning | 1-byte prefix per leaf for forward compatibility with PQ opcodes |
| authRoot rotation | Via dedicated rotation leaf type — a leaf whose sole purpose is authorizing a new authRoot |
| Transaction type | New EIP-2718 envelope with explicit from, leaf_script, merkle_proof, witness_data |
| Leaf execution | Restricted EVM context: read-only, MAX_LEAF_GAS = 100,000, no state mutation |
| Gas cost | Merkle proof: ~80 gas/level + 200 base. Depth-3 tree: ~440 gas (vs 3,000 for ecrecover) |
Open questions for the community
-
Does the community recognize this gap? Is there a reason the commitment structure should remain at the application layer (via CREATE2 + smart contract wallets) rather than the protocol layer (via a native account type)?
-
authRoot rotation: Is a dedicated rotation leaf the right mechanism, or should HCA define a protocol-level
SET_AUTH_ROOTopcode? -
EIP-7864 interaction: How should
authRootbe stored given the state tree hash function is still TBD between BLAKE3 and Poseidon2? HCA’s internal tree uses keccak256 — the two trees are independent, but should they align? -
Timing: Is this appropriate for Hegota (H2 2026) or should HCA target a later fork?
-
Prior art: Have I missed any proposal that addresses public key removal at the address derivation level specifically?
Resources
-
EIP draft: Submitted to ethereum/EIPs (link TBD after editor assigns number)
-
Concept definition: eth-hca/research
-
Organization: github.com/eth-hca
I welcome all technical objections, alternative approaches, and prior art references. Looking forward to the discussion.