|
| 1 | +--- |
| 2 | +description: Learn about MetaMask ERC-7715 permissions. |
| 3 | +keywords: [ERC-7715, 7715, permissions, wallet, smart account] |
| 4 | +--- |
| 5 | + |
| 6 | +# ERC-7715 permissions |
| 7 | + |
| 8 | +The Delegation Toolkit 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. |
| 9 | +For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course of a month. |
| 10 | +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. |
| 11 | + |
| 12 | +ERC-7715 eliminates the need for users to approve every transaction, which is useful for highly interactive dapps. |
| 13 | +It also enables dapps to execute transactions for users without an active wallet connection. |
| 14 | + |
| 15 | +:::note |
| 16 | +This feature requires [MetaMask Flask 12.14.2](/snaps/get-started/install-flask) or later. |
| 17 | +::: |
| 18 | + |
| 19 | +## ERC-7715 technical overview |
| 20 | + |
| 21 | +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_grantPermissions`. |
| 22 | +Dapps can use this method to request a wallet to grant the dapp permission to execute transactions on a user's behalf. |
| 23 | +`wallet_grantPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission. |
| 24 | +Common signer implementations include wallet signers, single key and multisig signers, and account signers. |
| 25 | + |
| 26 | +The Delegation Toolkit 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. |
| 27 | +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. |
| 28 | +The session account can be granted with permissions and redeem them as specified in [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710). |
| 29 | +The session account can be a smart account or an externally owned account (EOA). |
| 30 | + |
| 31 | +The MetaMask user that the session account requests permissions from must be upgraded to a [MetaMask smart account](smart-accounts.md). |
| 32 | + |
| 33 | +## ERC-7715 vs. delegations |
| 34 | + |
| 35 | +ERC-7715 expands on regular [delegations](delegation/index.md) by enabling permission sharing *via the MetaMask browser extension*. |
| 36 | + |
| 37 | +With regular delegations, the dapp constructs a delegation and requests the user to sign it. |
| 38 | +These delegations are not human-readable, so it is the dapp's responsibility to provide context for the user. |
| 39 | +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. |
| 40 | + |
| 41 | +In contrast, ERC-7715 enables dapps (and AI agents) to request permissions from a user directly via the MetaMask extension. |
| 42 | +ERC-7715 requires a permission configuration which displays a human-readable confirmation for the MetaMask user. |
| 43 | +The user can modify the permission parameters if the request is configured to allow adjustments. |
| 44 | + |
| 45 | +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): |
| 46 | + |
| 47 | +<p align="center"> |
| 48 | +<img src={require("../assets/erc7715-request.png").default} alt="ERC-7715 request" width="450px" class="appScreen" /> |
| 49 | +</p> |
| 50 | + |
| 51 | +## ERC-7715 permissions lifecycle |
| 52 | + |
| 53 | +The ERC-7715 permissions lifecycle is as follows: |
| 54 | + |
| 55 | +1. **Set up a session account** - Set up a session account to execute transactions on behalf of the MetaMask user. |
| 56 | + It can be a [smart account](smart-accounts.md) or an externally owned account (EOA). |
| 57 | + |
| 58 | +2. **Request permissions** - Request permissions from the user. |
| 59 | + The Delegation Toolkit supports [ERC-20 token permissions](../guides/erc7715/use-permissions/erc20-token.md) and |
| 60 | + [native token permissions](../guides/erc7715/use-permissions/native-token.md). |
| 61 | + |
| 62 | +4. **Redeem permissions** - Once the permission is granted, the session account can redeem the permission, executing on the user's behalf. |
| 63 | + |
| 64 | +See [how to perform executions on a MetaMask user's behalf](../guides/erc7715/execute-on-metamask-user-behalf.md) to get started with the ERC-7715 lifecycle. |
0 commit comments