MetaMask / MetaMask/core

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

Open
#9,970 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
413
Forks
308
Avg merge
1d 4h
Merged PRs (30d)
253

Description

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:

https://github.com/MetaMask/core/pull/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 !

Contributor guide

No contributing guide indexed for this repository

Research direction

Review the restriction referenced in core PR 5470 and trace how @metamask/smart-accounts-kit forms the EIP-712 payload for eth_signTypedData_v4. Compare the delegated EOA and Stateless7702 implementation cases, then examine wallet_sendCalls and the external bundler/paymaster questions. Done means documenting the supported integration route and the security rationale, or identifying the required product change.

Written by the indexing model from the issue text.

Assessment

Tech stack
blockchain, typescript
Domain
api, blockchain, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.