Skip to content

Cannot sign a UserOperation for gasless approve + swap with MetaMask Stateless7702 #9970

Description

@ctb0k33

Hi MetaMask team,

I try to build a gasless atomic approve + swap flow for a MetaMask EOA that has already delegated to the Stateless7702 implementation.

The intended flow is:

User signs a UserOperation
→ External bundler submits it
→ External paymaster sponsors the gas
→ EntryPoint executes approve + swap

Using @metamask/smart-accounts-kit, the canonical EIP-712 payload sets verifyingContract to the delegated user EOA. This appears correct because the Stateless7702 implementation executes in the EOA's context.

However, MetaMask rejects eth_signTypedData_v4 with this error:

"External signature requests cannot use internal accounts as the verifying contract."

Using the Stateless7702 implementation address instead allows signing, but produces an invalid UserOperation signature because it changes the EIP-712 digest.

I found the related restriction here:

#5470

Could you please clarify:

  1. Is raw UserOperation signing for a MetaMask-managed EIP-7702 EOA intentionally unsupported for external dapps?

  2. What security risk is this restriction designed to prevent?

  3. What is the supported integration route for a dapp to implement gasless approve + swap using its own bundler and paymaster?

  4. If wallet_sendCalls is required, how can the dapp specify an external paymaster?

Thanks !

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions