Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
0b79037
SDK new structure PoC
alexandratran Sep 23, 2025
44a6248
edits
alexandratran Sep 24, 2025
f234baf
remove custom reference component
alexandratran Sep 24, 2025
f331654
edits
alexandratran Sep 25, 2025
e2f4b8b
Merge branch 'main' into sdk-new-structure
alexandratran Sep 30, 2025
ef20ee1
fix links, update redirects, "metamask wallet sdk"
alexandratran Sep 30, 2025
39b9b16
Merge branch 'main' into sdk-new-structure
alexandratran Oct 16, 2025
905d9a8
add simplified api reference with two examples
alexandratran Oct 18, 2025
549887c
missing files
alexandratran Oct 18, 2025
1b97b2c
Merge branch 'main' into sdk-new-structure
alexandratran Oct 20, 2025
bb103fb
remove starknet docs
alexandratran Oct 21, 2025
8216d8b
copy over solana docs
alexandratran Oct 21, 2025
34aed2c
Merge branch 'main' into sdk-new-structure
alexandratran Oct 22, 2025
d64e8a4
Merge branch 'main' into sdk-new-structure
alexandratran Oct 23, 2025
e02092a
Update terminology and restructure EVM docs
alexandratran Oct 23, 2025
956c09a
fix broken links
alexandratran Oct 23, 2025
86d2dfc
Merge branch 'main' into sdk-new-structure
alexandratran Nov 4, 2025
f70f940
fix broken links
alexandratran Nov 4, 2025
e1e0008
Add/update Solana Wallet Adapter docs (#2443)
alexandratran Nov 7, 2025
37a4d06
Merge branch 'main' into sdk-new-structure
alexandratran Nov 10, 2025
30d0439
Update mobile products menu
alexandratran Nov 10, 2025
3db005f
Update MM Connect EVM JS code samples with potential new usage (#2454)
alexandratran Nov 12, 2025
d122361
Merge branch 'main' into sdk-new-structure
alexandratran Nov 13, 2025
360383d
Remove ParserOpenRPC component and replace usage in Linea services
alexandratran Nov 14, 2025
98476fe
Merge branch 'main' into sdk-new-structure
alexandratran Nov 18, 2025
c04fb6d
fix broken link
alexandratran Nov 18, 2025
b034e01
Add more multichain info (#2479)
alexandratran Nov 18, 2025
77bb9a9
Merge branch 'main' into sdk-new-structure
alexandratran Nov 27, 2025
b4716d6
Enhance JS section {WIP} (#2450)
shahbaz17 Nov 27, 2025
2a6e4ab
Add view & wagmi options
shahbaz17 Nov 27, 2025
6cf2880
Merge branch 'main' into sdk-new-structure
alexandratran Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge branch 'main' into sdk-new-structure
# Conflicts:
#	sdk/index.md
#	wallet/concepts/wallet-interoperability.md
#	wallet/how-to/connect-extension.md
#	wallet/how-to/manage-networks/add-network.md
#	wallet/how-to/use-non-evm-networks/starknet/send-starknet-transactions.md
#	wallet/reference/non-evm-apis/starknet-snap-api.md
  • Loading branch information
alexandratran committed Nov 10, 2025
commit 37a4d061fa70ce5511a89badf56d4f10a3597fce
7 changes: 7 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@ Fixes #

- [ ] If this PR updates or adds documentation content that changes or adds technical meaning, it has received an approval from an engineer or DevRel from the relevant team.
- [ ] If this PR updates or adds documentation content, it has received an approval from a technical writer.

## External contributor checklist

<!-- If you are an external contributor (outside of the MetaMask organization), complete the following checklist. -->

- [ ] I've read the [contribution guidelines](https://github.com/MetaMask/metamask-docs/blob/main/CONTRIBUTING.md).
- [ ] I've created a new issue (or assigned myself to an existing issue) describing what this PR addresses.
21 changes: 9 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,12 @@ jobs:
with:
FILEPATHS: 'snaps,services,wallet,developer-tools,docs'

# linkCheck:
# name: Link Checking
# runs-on: ubuntu-latest
# strategy:
# matrix:
# file-extensions: ['.md', '.mdx']
# steps:
# - uses: actions/checkout@v5
# - name: LinkCheck
# uses: ConsenSys/github-actions/docs-link-check@main
# with:
# FILE_EXTENSION: ${{ matrix.file-extensions }}
linkCheck:
name: Link Checking
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: LinkCheck
uses: ConsenSys/github-actions/docs-link-check@main
with:
CONFIG_FILE: '.linkspector.yml'
35 changes: 17 additions & 18 deletions .github/workflows/trivy.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
# ---
# name: Trivy
#
# on:
# pull_request:
# branches:
# - main
#
# jobs:
# trivy:
# name: Run trivy scanner
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v5
# - name: Trivy
# uses: ConsenSys/github-actions/trivy@main
# with:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
---
name: Trivy
on:
pull_request:
branches:
- main

jobs:
trivy:
name: Run trivy scanner
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Trivy
uses: ConsenSys/github-actions/trivy@main
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39 changes: 39 additions & 0 deletions .linkspector.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
dirs:
- ./delegation-toolkit
- ./developer-tools
- ./embedded-wallets
- ./sdk
- ./services
- ./snaps
- ./wallet
excludedDirs:
- ./build
- ./.vercel
- ./.docusaurus
- ./node_modules
useGitIgnore: true

ignorePatterns:
- pattern: '^http(s)?://localhost'
- pattern: '^http(s)?://127.0.0.1'
- pattern: '^http(s)?://gitlab.com/ConsenSys/'
- pattern: '^http(s)?://consensys.net'
- pattern: '^http(s)?://.+.zendesk.com'
- pattern: '^http(s)?://.+.etherscan.io'
- pattern: '^http(s)?://help.figma.com'
- pattern: '^http(s)?://metamask.io'
- pattern: '^http(s)?://rivet.cloud'
- pattern: '^/img/'
- pattern: '^/delegation-toolkit/'
- pattern: '^/developer-tools/'
- pattern: '^/embedded-wallets/'
- pattern: '^/sdk/'
- pattern: '^/services/'
- pattern: '^/snaps/'
- pattern: '^/wallet/'
- pattern: '^/tutorials/'
aliveStatusCodes:
- 200
- 206
- 400
- 403
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: Learn about MetaMask ERC-7715 permissions.
description: Learn about MetaMask Advanced Permissions (ERC-7715).
keywords: [ERC-7715, 7715, permissions, wallet, smart account]
---

# ERC-7715 permissions
# Advanced Permissions (ERC-7715)

The Smart Accounts Kit supports [ERC-7715](https://eips.ethereum.org/EIPS/eip-7715), which lets you request fine-grained permissions from a MetaMask user to execute transactions on their behalf.
The Smart Accounts Kit supports Advanced Permissions ([ERC-7715](https://eips.ethereum.org/EIPS/eip-7715)), which lets you request fine-grained permissions from a MetaMask user to execute transactions on their behalf.
For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course of a month.
Once the permission is granted, your dapp can use the allocated 10 USDC each day to purchase ETH directly from the MetaMask user's account.

ERC-7715 eliminates the need for users to approve every transaction, which is useful for highly interactive dapps.
Advanced Permissions eliminate the need for users to approve every transaction, which is useful for highly interactive dapps.
It also enables dapps to execute transactions for users without an active wallet connection.

:::note
Expand All @@ -23,42 +23,42 @@ Dapps can use this method to request a wallet to grant the dapp permission to ex
`wallet_grantPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission.
Common signer implementations include wallet signers, single key and multisig signers, and account signers.

The Smart Accounts Kit supports multiple types of signers, but [an account signer is used in this documentation's examples](../guides/erc7715/execute-on-metamask-users-behalf.md) as a common implementation.
With an account signer, a session account is created and used for the single purpose of requesting and redeeming ERC-7715 permissions, and does not contain tokens.
Smart Accounts Kit supports multiple signer types. The documentation uses [an account signer](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) as a common implementation example.
When you use an account signer, a session account is created solely to request and redeem Advanced Permissions, and doesn't contain tokens.
The session account can be granted with permissions and redeem them as specified in [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710).
The session account can be a smart account or an externally owned account (EOA).

The MetaMask user that the session account requests permissions from must be upgraded to a [MetaMask smart account](smart-accounts.md).

## ERC-7715 vs. delegations
## Advanced Permissions vs. delegations

ERC-7715 expands on regular [delegations](delegation/index.md) by enabling permission sharing *via the MetaMask browser extension*.
Advanced Permissions expand on regular [delegations](delegation/index.md) by enabling permission sharing *via the MetaMask browser extension*.

With regular delegations, the dapp constructs a delegation and requests the user to sign it.
These delegations are not human-readable, so it is the dapp's responsibility to provide context for the user.
Regular delegations cannot be signed through the MetaMask extension, because if a dapp requests a delegation without constraints, the whole wallet can be exposed to the dapp.

In contrast, ERC-7715 enables dapps (and AI agents) to request permissions from a user directly via the MetaMask extension.
ERC-7715 requires a permission configuration which displays a human-readable confirmation for the MetaMask user.
In contrast, Advanced Permissions enable dapps (and AI agents) to request permissions from a user directly via the MetaMask extension.
Advanced Permissions require a permission configuration which displays a human-readable confirmation for the MetaMask user.
The user can modify the permission parameters if the request is configured to allow adjustments.

For example, the following ERC-7715 permission request displays a rich UI including the start time, amount, and period duration for an [ERC-20 token periodic transfer](../guides/erc7715/use-permissions/erc20-token.md#erc-20-periodic-permission):
For example, the following Advanced Permissions request displays a rich UI including the start time, amount, and period duration for an [ERC-20 token periodic transfer](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission):

<p align="center">
<img src={require("../assets/erc7715-request.png").default} alt="ERC-7715 request" width="450px" class="appScreen" />
</p>

## ERC-7715 permissions lifecycle
## Advanced Permissions lifecycle

The ERC-7715 permissions lifecycle is as follows:
The Advanced Permissions lifecycle is as follows:

1. **Set up a session account** - Set up a session account to execute transactions on behalf of the MetaMask user.
It can be a [smart account](smart-accounts.md) or an externally owned account (EOA).

2. **Request permissions** - Request permissions from the user.
The Smart Accounts Kit supports [ERC-20 token permissions](../guides/erc7715/use-permissions/erc20-token.md) and
[native token permissions](../guides/erc7715/use-permissions/native-token.md).
The Smart Accounts Kit supports [ERC-20 token permissions](../guides/advanced-permissions/use-permissions/erc20-token.md) and
[native token permissions](../guides/advanced-permissions/use-permissions/native-token.md).

4. **Redeem permissions** - Once the permission is granted, the session account can redeem the permission, executing on the user's behalf.

See [how to perform executions on a MetaMask user's behalf](../guides/erc7715/execute-on-metamask-users-behalf.md) to get started with the ERC-7715 lifecycle.
See [how to perform executions on a MetaMask user's behalf](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) to get started with the Advanced Permissions lifecycle.
10 changes: 5 additions & 5 deletions delegation-toolkit/experimental/erc-7710-redeem-delegations.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ This data encodes the authority that lets the delegate redeem the permission.
### Security considerations for `accountMeta`

When a user grants a permission, they can provide `accountMeta` which is an array of `factory` and `factoryData` values.
These calls must be executed before redeeming the permission (this is handled for you in [`sendUserOperationWithDelegation`](../reference/erc7715/bundler-client.md#senduseroperationwithdelegation)).
These calls must be executed before redeeming the permission (this is handled for you in [`sendUserOperationWithDelegation`](../reference/advanced-permissions/bundler-client.md#senduseroperationwithdelegation)).

Because each `accountMeta` is an arbitrary call specified by the granter, it is important that these are executed carefully.
We recommend taking the following precautions:
Expand All @@ -86,7 +86,7 @@ Redeem a delegation with a [MetaMask smart account](#redeem-with-a-metamask-smar
To redeem a delegation with a MetaMask smart account, [create a smart account](../guides/smart-accounts/create-smart-account.md)
and a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler).

After setting up your Bundler Client, you can extend its functionality with `erc7710BundlerActions` actions to support ERC-7710. Once extended, use [`sendUserOperationWithDelegation`](../reference/erc7715/bundler-client.md#senduseroperationwithdelegation) to redeem the permission.
After setting up your Bundler Client, you can extend its functionality with `erc7710BundlerActions` actions to support ERC-7710. Once extended, use [`sendUserOperationWithDelegation`](../reference/advanced-permissions/bundler-client.md#senduseroperationwithdelegation) to redeem the permission.

<Tabs>
<TabItem value="example.ts">
Expand Down Expand Up @@ -128,7 +128,7 @@ import { createPublicClient, http, createBundlerClient } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { sepolia as chain } from "viem/chains";
import { createBundlerClient } from "viem/account-abstraction";
import { erc7710BundlerActions } from "@metamask/smart-accounts-kit/experimental";
import { erc7710BundlerActions } from "@metamask/smart-accounts-kit/actions";
import { toMetaMaskSmartAccount, Implementation } from "@metamask/smart-accounts-kit";

export const publicClient = createPublicClient({
Expand Down Expand Up @@ -168,7 +168,7 @@ export const bundlerClient = createBundlerClient({

To redeem a delegation with an EOA, create a [Viem Wallet Client](https://viem.sh/docs/clients/wallet).

After creating your Wallet Client, you can extend its functionality with `erc7710WalletActions` actions to support ERC-7710. Once extended, use [`sendTransactionWithDelegation`](../reference/erc7715/wallet-client.md#sendtransactionwithdelegation) to redeem the permission.
After creating your Wallet Client, you can extend its functionality with `erc7710WalletActions` actions to support ERC-7710. Once extended, use [`sendTransactionWithDelegation`](../reference/advanced-permissions/wallet-client.md#sendtransactionwithdelegation) to redeem the permission.

<Tabs>
<TabItem value="example.ts">
Expand Down Expand Up @@ -212,7 +212,7 @@ const hash = walletClient.sendTransactionWithDelegation({
import { http, createPublicClient, createWalletClient } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { sepolia as chain } from "viem/chains";
import { erc7710WalletActions } from "@metamask/smart-accounts-kit/experimental";
import { erc7710WalletActions } from "@metamask/smart-accounts-kit/actions";

export const publicClient = createPublicClient({
chain,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ const grantedPermissions = await walletClient.grantPermissions([{
import { createWalletClient, custom, createPublicClient, http } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { sepolia as chain } from "viem/chains";
import { erc7715ProviderActions } from "@metamask/smart-accounts-kit/experimental";
import { erc7715ProviderActions } from "@metamask/smart-accounts-kit/actions";
import { toMetaMaskSmartAccount, Implementation } from "@metamask/smart-accounts-kit";

const publicClient = createPublicClient({
Expand Down Expand Up @@ -165,7 +165,7 @@ You should always verify the granted permissions and adjust your dapp's behavior
## Security considerations for `accountMeta`

When a user grants a permission, they can provide [`accountMeta`](erc-7710-redeem-delegations.md#extract-relevant-data) which is an array of `factory` and `factoryData` values.
These calls must be executed before redeeming the permission (this is handled for you in [`sendUserOperationWithDelegation`](../reference/erc7715/bundler-client.md#senduseroperationwithdelegation)).
These calls must be executed before redeeming the permission (this is handled for you in [`sendUserOperationWithDelegation`](../reference/advanced-permissions/bundler-client.md#senduseroperationwithdelegation)).

Because each `accountMeta` is an arbitrary call specified by the granter, it is important that these are executed carefully.
We recommend taking the following precautions:
Expand Down
110 changes: 77 additions & 33 deletions delegation-toolkit/get-started/supported-networks.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,80 @@ The following tables display the networks supported by each version of the Smart

If you don't see the network you're looking for, you can request support by emailing [email protected].

## Mainnet networks

| Network Name | v0.11.0 | v0.12.0 | v0.13.0 |
| ------------------- | ------- | ------- | ------- |
| Ethereum | ✅ | ✅ | ✅ |
| Polygon | ✅ | ✅ | ✅ |
| Binance Smart Chain | ✅ | ✅ | ✅ |
| Optimism | ✅ | ✅ | ✅ |
| Arbitrum One | ✅ | ✅ | ✅ |
| Base | ✅ | ✅ | ✅ |
| Gnosis Chain | ✅ | ✅ | ✅ |
| Unichain | ❌ | ✅ | ✅ |
| Arbitrum Nova | ❌ | ✅ | ✅ |
| Berachain | ❌ | ✅ | ✅ |
| Ink | ❌ | ❌ | ✅ |

## Testnet networks

| Network Name | v0.11.0 | v0.12.0 | v0.13.0 |
| --------------------------- | ------- | ------- | ------- |
| Ethereum Sepolia | ✅ | ✅ | ✅ |
| Base Sepolia | ✅ | ✅ | ✅ |
| MegaEth | ✅ | ✅ | ✅ |
| Gnosis Chiado | ✅ | ✅ | ✅ |
| Arbitrum Sepolia | ❌ | ✅ | ✅ |
| Unichain Sepolia | ❌ | ✅ | ✅ |
| Berachain Bepolia | ❌ | ✅ | ✅ |
| Optimism Sepolia | ❌ | ✅ | ✅ |
| Binance Smart Chain | ❌ | ✅ | ✅ |
| Polygon Amoy | ❌ | ✅ | ✅ |
| Monad | ❌ | ✅ | ✅ |
| Ink Sepolia | ❌ | ❌ | ✅ |
| Citrea | ❌ | ❌ | ✅ |
## MetaMask Smart Accounts

### Mainnet networks

| Network Name | v0.1.0 |
| ------------------- | -------|
| Arbitrum Nova | ✅ |
| Arbitrum One | ✅ |
| Base | ✅ |
| Berachain | ✅ |
| Binance Smart Chain | ✅ |
| Ethereum | ✅ |
| Gnosis Chain | ✅ |
| Ink | ✅ |
| Linea | ✅ |
| Optimism | ✅ |
| Polygon | ✅ |
| Sonic | ✅ |
| Unichain | ✅ |

### Testnet networks

| Network Name | v0.1.0 |
| --------------------------- | -------|
| Arbitrum Sepolia | ✅ |
| Base Sepolia | ✅ |
| Berachain Bepolia | ✅ |
| Binance Smart Chain | ✅ |
| Citrea | ✅ |
| Ethereum Sepolia | ✅ |
| Gnosis Chiado | ✅ |
| Hoodi | ✅ |
| Ink Sepolia | ✅ |
| Linea Sepolia | ✅ |
| MegaEth | ✅ |
| Monad | ✅ |
| Optimism Sepolia | ✅ |
| Polygon Amoy | ✅ |
| Sei | ✅ |
| Sonic | ✅ |
| Unichain Sepolia | ✅ |

## Advanced Permissions (ERC-7715)

### Mainnet networks

| Network Name | v0.1.0 |
| ------------------- | -------|
| Arbitrum Nova | ✅ |
| Arbitrum One | ✅ |
| Base | ✅ |
| Berachain | ✅ |
| Binance Smart Chain | ✅ |
| Ethereum | ✅ |
| Gnosis | ✅ |
| Optimism | ✅ |
| Polygon | ✅ |
| Sonic | ✅ |
| Unichain | ✅ |

### Testnet networks

| Network Name | v0.1.0 |
| ------------------- | -------|
| Arbitrum Sepolia | ✅ |
| Base Sepolia | ✅ |
| Berachain Bepolia | ✅ |
| Binance Smart Chain | ✅ |
| Chiado | ✅ |
| Citrea | ✅ |
| Hoodi | ✅ |
| MegaEth | ✅ |
| Optimism Sepolia | ✅ |
| Polygon Amoy | ✅ |
| Sepolia | ✅ |
| Sonic | ✅ |
| Unichain Sepolia | ✅ |
Loading
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.