Skip to content

Latest commit

 

History

History
192 lines (148 loc) · 6.32 KB

File metadata and controls

192 lines (148 loc) · 6.32 KB
description Wallet Client actions reference.
sidebar_label Wallet Client actions
toc_max_heading_level 2
keywords
ERC-7715
Viem
wallet client
actions
reference
advanced permissions

import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; import GlossaryTerm from '@theme/GlossaryTerm';

Wallet Client actions reference

The following actions are related to the Viem Wallet Client used to execute on a MetaMask user's behalf.

:::info To use Advanced Permissions (ERC-7715) actions, the Viem Wallet Client must be extended with erc7715ProviderActions. :::

requestExecutionPermissions

Requests 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

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 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

{
  "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

[
  {
    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())