Thanks for the careful read — the two judgments you raise, that “slow-moving” standards are essential to Ethereum’s sustainable evolution, and that DApps should verify rather than guess, are valuable in themselves, and I agree with that broader framing.
One clarification, though: ERC-7962 (Key Hash Based Tokens) has nothing to do with capability declaration or account abstraction. It replaces the address with keyHash = keccak256(publicKey) as the ownership identifier for ERC-721/ERC-20-style tokens, with two goals: first, privacy — ownerOf/balanceOf return a bytes32 keyHash instead of an address, so ownership is no longer bound to a publicly indexable address; second, decoupling ownership from transaction origination — authorization comes from an EIP-712 signature based on the key, so any address can submit the transaction and pay the gas without gaining control of the token. There is no approve, and leftKeyHash enforces UTXO-style change rotation.
What you describe — wallets explicitly declaring their capabilities, with DApps verifying rather than assuming — is much closer to ERC-5792 (wallet_getCapabilities), or to the modular account line of work in ERC-6900 / ERC-7579. You may have the EIP number mixed up.
ore design: ownership is keyed by keyHash = keccak256(key) rather than an
address; EIP-712 signatures over the key let any address submit the transaction
and pay gas without gaining control of the token; and strict leftKeyHash
rotation provides UTXO-style change.
Feedback is welcome, especially on the two points that have drawn the most
discussion so far:
Privacy boundaries. A public key can be recovered from any signature, so
unlinkability degrades once a transfer occurs. Worth noting that asset
control is unaffected — only linkability is. Implementers can also salt the
hash (keccak256(key || salt)), which weakens the mapping from a recovered
public key back to a specific on-chain keyHash.
The cost of strict leftKeyHash. Three SSTOREs per transfer instead of two,
and a fresh key is required even when the change is zero. This is the price
of making change rotation mandatory rather than advisory.