Cannot sign a UserOperation for gasless approve + swap with MetaMask Stateless7702
- 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