diff --git a/delegation-toolkit/assets/erc7715-request.png b/delegation-toolkit/assets/erc7715-request.png new file mode 100644 index 00000000000..01eef3bda26 Binary files /dev/null and b/delegation-toolkit/assets/erc7715-request.png differ diff --git a/delegation-toolkit/concepts/erc7715.md b/delegation-toolkit/concepts/erc7715.md new file mode 100644 index 00000000000..03f4f8f4f9a --- /dev/null +++ b/delegation-toolkit/concepts/erc7715.md @@ -0,0 +1,64 @@ +--- +description: Learn about MetaMask ERC-7715 permissions. +keywords: [ERC-7715, 7715, permissions, wallet, smart account] +--- + +# ERC-7715 permissions + +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. +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. +It also enables dapps to execute transactions for users without an active wallet connection. + +:::note +This feature requires [MetaMask Flask 12.14.2](/snaps/get-started/install-flask) or later. +::: + +## ERC-7715 technical overview + +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_grantPermissions`. +Dapps can use this method to request a wallet to grant the dapp permission to execute transactions on a user's behalf. +`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 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. +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. +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 + +ERC-7715 expands 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. +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): + +

+ERC-7715 request +

+ +## ERC-7715 permissions lifecycle + +The ERC-7715 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 Delegation Toolkit supports [ERC-20 token permissions](../guides/erc7715/use-permissions/erc20-token.md) and + [native token permissions](../guides/erc7715/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-user-behalf.md) to get started with the ERC-7715 lifecycle. diff --git a/delegation-toolkit/guides/erc7715/execute-on-metamask-users-behalf.md b/delegation-toolkit/guides/erc7715/execute-on-metamask-users-behalf.md index 209d234808c..b6df326ea5e 100644 --- a/delegation-toolkit/guides/erc7715/execute-on-metamask-users-behalf.md +++ b/delegation-toolkit/guides/erc7715/execute-on-metamask-users-behalf.md @@ -9,7 +9,7 @@ import TabItem from "@theme/TabItem"; # Perform executions on a MetaMask user's behalf -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 +[ERC-7715 permissions](../../concepts/erc7715.md) are fine-grained permissions that your dapp can request 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. @@ -41,7 +41,7 @@ const walletClient = createWalletClient({ ### 2. Set up a Public Client Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. -This client will help you query the account state and interact with blockchain network. +This client will help you query the account state and interact with the blockchain network. ```typescript import { createPublicClient, http } from "viem"; @@ -60,7 +60,7 @@ to request ERC-7715 permissions. This account is responsible for executing trans on behalf of the user. - + ```typescript import { privateKeyToAccount } from "viem/accounts"; @@ -97,8 +97,9 @@ const sessionAccount = privateKeyToAccount("0x..."); ### 4. Request ERC-7715 permissions -Request ERC-7715 permissions from the user. In this example, you'll request an ERC-20 periodic -permission using the Wallet Client's [`requestExecutionPermissions`](../../reference/erc7715/wallet-client.md#requestexecutionpermissions) action. +Request ERC-7715 permissions from the user. In this example, you'll request an +[ERC-20 periodic permission](use-permissions/erc20-token.md#erc-20-periodic-permission) using the Wallet Client's +[`requestExecutionPermissions`](../../reference/erc7715/wallet-client.md#requestexecutionpermissions) action. ```typescript import { sepolia as chain } from "viem/chains"; @@ -261,4 +262,9 @@ export const calldata = encodeFunctionData({ ``` - \ No newline at end of file + + +## Next steps + +See how to configure different [ERC-20 token permissions](use-permissions/erc20-token.md) and +[native token permissions](use-permissions/native-token.md). diff --git a/delegation-toolkit/index.md b/delegation-toolkit/index.md index 26179dc79cc..91e49731929 100644 --- a/delegation-toolkit/index.md +++ b/delegation-toolkit/index.md @@ -7,7 +7,7 @@ keywords: [MetaMask, delegation toolkit, smart accounts] import CardList from "@site/src/components/CardList" -# Embed MetaMask Smart Accounts using the Delegation Toolkit +# Create MetaMask Smart Accounts using the Delegation Toolkit The MetaMask Delegation Toolkit is a [Viem](https://viem.sh/)-based collection of tools for embedding [MetaMask Smart Accounts](concepts/smart-accounts.md) into dapps. Smart accounts support programmable account behavior and advanced features like delegated permissions, multi-signature approvals, and gas abstraction. @@ -16,6 +16,8 @@ Smart accounts support programmable account behavior and advanced features like Delegation is powered by the toolkit's Delegation Framework, which defines how permissions are created, shared, and enforced. +MetaMask Smart Accounts also support [ERC-7715 permissions](concepts/erc7715.md), which are fine-grained permissions dapps can request from users directly via the MetaMask browser extension. + ## Why use the toolkit? The toolkit enables developers to create frictionless new experiences based on programmable account behavior and granular permission diff --git a/gator-sidebar.js b/gator-sidebar.js index 5a0d248f896..098ce026d40 100644 --- a/gator-sidebar.js +++ b/gator-sidebar.js @@ -43,6 +43,7 @@ const sidebar = { 'concepts/delegation/caveat-enforcers', ], }, + 'concepts/erc7715', ], }, {