Wallet Client actions reference
The following actions are related to the Viem Wallet Client used to execute on a MetaMask user's behalf.
To use Advanced Permissions (ERC-7715) actions, the Viem Wallet Client must be extended with erc7715ProviderActions.
requestExecutionPermissions
Requests Advanced Permissions from the MetaMask extension account according to the ERC-7715 specification. Returns a RequestExecutionPermissionsReturnType.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
chainId | number | Yes | The chain ID on which the permission is being requested. |
from | Address | No | The wallet address to request the permission from. |
expiry | number | Yes | The timestamp (in seconds) by which the permission must expire. |
permission | SupportedPermissionParams | Yes | The permission to request. The toolkit supports multiple Advanced Permissions types. Set isAdjustmentAllowed to define whether the user can modify the requested permission. |
to | Address | Yes | The account to which the permission will be assigned. |
Example
- example.ts
- client.ts
import { sepolia as chain } from "viem/chains";
import { parseUnits } from "viem";
import { walletClient } from "./client.ts";
const currentTime = Math.floor(Date.now() / 1000);
const expiry = currentTime + 604800;
const grantedPermissions = await walletClient.requestExecutionPermissions([{
chainId: chain.id,
expiry,
// The requested permissions will be granted to the
// session account.
to: sessionAccount.address,
permission: {
type: "erc20-token-periodic",
data: {
tokenAddress: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
periodAmount: parseUnits("10", 6),
periodDuration: 86400,
justification: "Permission to transfer 10 USDC every day",
},
isAdjustmentAllowed: true,
},
}]);
import { createWalletClient, custom } from "viem";
import { erc7715ProviderActions } from "@metamask/smart-accounts-kit/actions";
export const walletClient = createWalletClient({
transport: custom(window.ethereum),
}).extend(erc7715ProviderActions());
getSupportedExecutionPermissions
Returns the Advanced Permissions types that the wallet supports, according to the ERC-7715 specification. Use this to verify the available permission types and supported chains before requesting permissions.
This action takes no parameters and returns a GetSupportedExecutionPermissionsResult.
Example
- response.ts
- example.ts
- client.ts
// Example response:
// {
// "native-token-stream": {
// "chainIds": [1, 10],
// "ruleTypes": ["expiry"]
// },
// "erc20-token-periodic": {
// "chainIds": [1, 137],
// "ruleTypes": ["expiry"]
// },
// // ...
// }
import { walletClient } from "./client.ts";
const supportedPermissions = await walletClient.getSupportedExecutionPermissions();
import { createWalletClient, custom } from "viem";
import { erc7715ProviderActions } from "@metamask/smart-accounts-kit/actions";
export const walletClient = createWalletClient({
transport: custom(window.ethereum),
}).extend(erc7715ProviderActions());
getGrantedExecutionPermissions
Returns all previously granted permissions for the connected wallet, according to the ERC-7715 specification.
This action takes no parameters and returns a GetGrantedExecutionPermissionsResult.
Example
- response.ts
- example.ts
- client.ts
// Example response:
// [
// {
// chainId: 84532,
// context: "0x0000...0000",
// delegationManager: "0xdb9B...7dB3",
// dependencies: [],
// from: "0x993f...7f31",
// permission: {
// type: "erc20-token-periodic",
// isAdjustmentAllowed: false,
// data: { ... },
// },
// rules: [
// { type: "expiry", data: { ... } },
// ],
// to: "0xAB57...7F1f",
// },
// // ...
// ]
import { walletClient } from "./client.ts";
const grantedPermissions = await walletClient.getGrantedExecutionPermissions();
import { createWalletClient, custom } from "viem";
import { erc7715ProviderActions } from "@metamask/smart-accounts-kit/actions";
export const walletClient = createWalletClient({
transport: custom(window.ethereum),
}).extend(erc7715ProviderActions());