GOMTU Crypto
guidePart 25 of 25 in this guide

ERC-6492 Counterfactual Signatures: Verify Smart Wallets Before Deployment

ERC-6492 lets apps verify a smart-account signature before its contract is deployed. Learn the wrapper format, verification order, and security risks.

GOMTU
GOMTU
Crypto Research · September 14, 2026 · 8 min read
Share𝕏in
ERC-6492 Counterfactual Signatures: Verify Smart Wallets Before Deployment

A smart wallet can have an address before its contract exists on-chain. That is useful for smoother onboarding, but it creates an awkward question: how can an app verify a signature by code that has not been deployed yet? ERC-6492 counterfactual signatures provide the missing envelope. They extend the signature tools covered in our crypto wallet security hub without making an undeployed account automatically trustworthy.

This guide explains what the standard wraps, the order a verifier must follow, and the failure modes users and developers should recognize. It is educational, not financial advice (NFA). Smart-account factories, validators, and signed permissions can contain bugs or be abused, so verify the current implementation and do your own research (DYOR).

What Problem Does ERC-6492 Solve?

Advertisement

Many smart accounts are created counterfactually. Their future address can be calculated in advance, often with CREATE2, while the account contract is deployed only when the first transaction needs it. A dApp can display that address, receive assets for it, or ask it to sign in before deployment.

Ordinary verification then reaches a dead end. An externally owned account (EOA) can be checked with elliptic-curve signature recovery. A deployed smart account can answer through ERC-1271 smart contract signature verification. An undeployed smart account has no code at its address, so there is nothing to call.

Think of the address as a reserved storefront whose building has not opened. The owner can show a signed lease, but a visitor cannot ask the staff to confirm it because no staff are present. ERC-6492 packages the construction instructions with the approval proof, allowing a verifier to simulate opening the storefront and then ask its rules whether the proof is valid.

The ERC-6492 specification is a Final Standards Track ERC. It does not replace ERC-1271. It adds a recognizable wrapper for the period before a contract account is ready to answer ERC-1271 directly.

How a Counterfactual Smart Account Gets an Address

Counterfactual does not mean imaginary or random. It means the account's address is derived before the deployment transaction occurs. EIP-1014 (CREATE2) calculates a contract address from a deployer address, a salt, and the initialization-code hash. If those inputs stay the same, the future address is predictable.

That property is valuable for account abstraction and smart-wallet onboarding. A wallet provider can prepare an account address without forcing a new user to fund gas and deploy immediately. The provider may defer deployment until the user's first bundled or sponsored action.

Predictability is not proof of authorization, though. A verifier still needs to establish that the factory call creates the expected account and that the account's own validation policy accepts the original signature.

What the ERC-6492 Wrapper Contains

Before deployment, the signer wraps three values:

  1. create2Factory: the factory address that can create or prepare the account.
  2. factoryCalldata: the exact call data the factory needs.
  3. originalERC1271Signature: the proof the account should evaluate after it exists.

The encoded tuple ends with a fixed 32-byte detection suffix, often called the magic bytes:

0x6492649264926492649264926492649264926492649264926492649264926492

The repeated value is a type marker, not evidence that the signature is valid. Its final byte cannot be a valid v value for a traditional 65-byte ECDSA signature, helping a verifier distinguish the wrapper before trying EOA recovery.

If the smart account is already deployed, it normally produces an ordinary ERC-1271 signature. The standard also permits a wrapped preparation call when deployed code needs a migration or update before it can validate. That is one reason a verifier cannot assume every wrapped signature belongs only to an empty address.

The Required Verification Order

The standard defines the order because changing it can create incorrect results:

  1. Check the ERC-6492 suffix first. If it is present, decode the factory, call data, and inner signature.
  2. Prepare or deploy in the validation context. The verifier calls the factory when needed, then asks the resulting account to validate the inner proof.
  3. Use ERC-1271 when contract code exists. The account must return the expected 0x1626ba7e value for the hash and signature.
  4. Try EOA recovery only when there is no contract path. A verifier must not let a recoverable-looking byte string bypass contract-defined rules.

For an off-chain check, a universal validator can execute this sequence inside an eth_call. The reference design returns the result while undoing simulated deployment side effects. That does not mean every custom verifier is side-effect-free. On-chain validation that performs an external factory CALL has a different security surface, including reentrancy concerns.

Current Viem verifyMessage documentation lists pre-deployed ERC-6492 accounts among its supported signer types. Using maintained tooling is generally safer than manually detecting a suffix, stripping bytes, and guessing which signature method to run.

Where ERC-6492 Appears in Practice

Sign-in before the first transaction

A new smart-wallet user may want to authenticate before paying gas or submitting a UserOperation. ERC-6492 lets a service validate the prepared account's proof instead of rejecting it merely because eth_getCode currently returns empty. The login message still needs the origin, chain, nonce, issued time, and expiry protections described in Sign-In with Ethereum.

Off-chain orders, claims, and attestations

An app may collect a signature now and settle it later. Supporting the wrapper allows a not-yet-deployed smart account to participate. The application must revalidate at the relevant time because owners, modules, or implementation logic may change after deployment.

Lazy smart-account deployment

Wallet platforms can postpone deployment cost until the account performs a meaningful action. Alchemy's current smart-wallet signing documentation says an undeployed smart wallet returns an ERC-6492-wrapped signature, while a deployed wallet uses ERC-1271-compatible validation.

Risks and Common Integration Mistakes

Treating the magic suffix as a validity stamp

Anyone can append recognizable bytes. The verifier must safely decode the wrapper, execute the correct validation flow, and require the account's ERC-1271 success value. A matching suffix alone proves nothing about the signer, factory, or message.

Calling untrusted factory data carelessly

The wrapper contains a target and call data supplied with the signature. Validation therefore involves an external call. The ERC's reference implementation isolates side effects for read-style checks and warns about reentrancy in side-effecting validation. Applications should use an audited, context-appropriate validator rather than sending arbitrary deployment calls from a privileged or asset-holding contract.

Verifying the right signature for the wrong message

ERC-6492 proves only that the prepared account accepts a particular digest under its rules. It does not add a domain, chain ID, purpose, nonce, deadline, spending limit, or human-readable prompt. Those properties belong in the signed message, commonly through EIP-712 typed data.

Cross-chain replay and changing authorization

The specification explicitly calls out replay risk across networks. A signature that stopped working after owners changed on one chain might still validate where the same factory and account can be deployed with older authorization. Bind approvals to their intended chain and application, and recheck the current contract state when settlement happens.

Assuming simulation makes the action safe

A successful eth_call says the validator accepted the proof in a simulated state. It does not audit the factory, certify the dApp, or guarantee that a later transaction has the same state and outcome. Users still need to understand the action they are signing.

Caution

Reject an ERC-6492 request you cannot explain in plain language. A valid counterfactual signature can still authorize a malicious login, order, token permission, or deployment configuration.

Practical Verification Checklist

For users:

  1. Confirm the dApp domain and selected chain independently.
  2. Read the action, account address, assets, limits, nonce, and expiry before signing.
  3. Treat “gasless” or “not deployed yet” as implementation details, not safety guarantees.
  4. Reject blind prompts and unexpected requests to initialize or migrate an account.
  5. Recheck pending signatures after changing owners, guardians, devices, or modules.

For developers:

  1. Use a maintained validator that supports EOA, ERC-1271, and ERC-6492 paths.
  2. Detect the ERC-6492 suffix before ERC-1271 or EOA recovery, as the standard requires.
  3. Bind the digest to the domain, chain, account, purpose, nonce, and deadline.
  4. Fail closed on malformed wrappers, factory reverts, wrong magic values, and unavailable chain state.
  5. Model reentrancy and side effects for on-chain validation; never execute untrusted factory calls from a privileged context without a deliberate design.
  6. Test signatures before deployment, after deployment, after owner rotation, and on unintended chains.

Frequently Asked Questions

Is ERC-6492 the same as ERC-1271?

No. ERC-1271 lets deployed contracts answer whether a signature is valid. ERC-6492 wraps deployment or preparation data around an ERC-1271-compatible proof so verification can work before the account is deployed or ready.

Does verification permanently deploy the smart wallet?

Not necessarily. Off-chain verification can simulate deployment inside eth_call and discard the state changes. An on-chain or side-effecting implementation may behave differently, so check the validator and transaction being used.

Why not use ecrecover on the owner's signature?

The smart account—not the app—defines authorization. It may require multiple owners, passkeys, modules, or changing policies. Recovering one EOA can bypass those contract rules and identify the wrong authority.

Is ERC-6492 only for CREATE2 accounts?

The standard recommends CREATE2 because it provides predictable contract addresses, but the wrapper carries factory call data rather than prescribing one factory interface. The verifier still starts with the expected account address and must validate the resulting account rules.

Can an old counterfactual signature remain valid?

Possibly, depending on its message scope, account policy, chain, and state. Use nonces and deadlines, bind the intended chain and application, and revalidate rather than assuming a cached result is permanent.

The Practical Takeaway

ERC-6492 bridges a precise gap: a smart account can have a known address and a valid authorization policy before code exists at that address. The wrapper gives a verifier enough information to simulate or prepare the account, then apply ERC-1271 instead of incorrectly treating it as an EOA.

That interoperability is useful, but it expands the validation surface. Factory calls, replay protection, current account state, exact message construction, and readable consent all matter. Verify both the signature and the action it authorizes. This article is educational and not financial advice; smart-contract use can lead to total loss, so use only funds you can afford to lose and always DYOR.

Advertisement

Keep learning

Explore related topics

More from GOMTU