Skip to content

Latest commit

 

History

History
221 lines (169 loc) · 11.1 KB

File metadata and controls

221 lines (169 loc) · 11.1 KB
description Wallet Client actions reference.
sidebar_label Wallet Client actions
toc_max_heading_level 2
keywords
ERC-7710
Viem
wallet client
actions
reference
advanced permissions
redeem delegation
redelegate permission context

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

Wallet Client actions reference

These actions extend the Viem Wallet Client to support ERC-7710 utilities.

sendTransactionWithDelegation

Sends a transaction to redeem delegated permissions according to the ERC-7710 specifications.

:::info To use sendTransactionWithDelegation, the Viem Wallet Client must be extended with erc7710WalletActions. :::

Parameters

See the Viem sendTransaction parameters. This function has the same parameters, and it also requires the following parameters:

Name Type Required Description
delegationManager Address Yes The address of the .
permissionContext PermissionContext Yes An encoded delegation chain (Hex) or a decoded delegation chain (Delegation[]) for redeeming delegations.

Example

import { walletClient, publicClient } from './client.ts'

// These properties must be extracted from the permission response. See
// `grantPermissions` action to learn how to request permissions.
const permissionContext = permissionsResponse[0].context
const delegationManager = permissionsResponse[0].signerMeta.delegationManager

const hash = walletClient.sendTransactionWithDelegation({
  chain,
  to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
  value: 1n,
  permissionContext,
  delegationManager,
})
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/actions'

export const publicClient = createPublicClient({
  chain,
  transport: http(),
})

// Your session account for requesting and redeeming should be the same.
const privateKey = '0x...'
const account = privateKeyToAccount(privateKey)

const walletClient = createWalletClient({
  account,
  transport: http(),
  chain,
}).extend(erc7710WalletActions())

redelegatePermissionContext

Creates a redelegation to a specific delegate from a delegation chain encoded as Hex or decoded as Delegation[].

The action returns RedelegatePermissionContextReturnType.

Parameters

Name Type Required Description
environment SmartAccountsEnvironment Yes Contract addresses for the on the target chain.
permissionContext PermissionContext Yes Encoded delegation chain (Hex) or decoded chain (Delegation[]), leaf first.
chainId number No Chain ID used when signing the delegation.
account Account | Address No Account that signs the redelegation. The default is the Wallet Client's configured account.
scope ScopeConfig No Delegation scope to restrict the authority of the redelegation.
caveats Caveats No Additional caveats to restrict the authority of the redelegation. See caveats reference.
salt Hex No Salt for redelegation.
to Address Yes Address of the delegate for the redelegation.

Example

import { walletClient, publicClient, environment } from './client.ts'

// These properties must be extracted from the permission response. See
// `grantPermissions` action to learn how to request permissions.
const permissionContext = permissionsResponse[0].context

const { permissionContext: redelegatedPermissionContext } =
  walletClient.redelegatePermissionContext({
    to: 'DELEGATE_ADDRESS',
    environment,
    permissionContext: permissionContext,
  })
import { http, createWalletClient } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { sepolia as chain } from 'viem/chains'
import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit'
import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions'

// Your session account for requesting and redelegating should be the same.
const privateKey = '0x...'
const account = privateKeyToAccount(privateKey)

export const environment = getSmartAccountsEnvironment(chain.id)

const walletClient = createWalletClient({
  account,
  transport: http(),
  chain,
}).extend(erc7710WalletActions())

redelegatePermissionContextOpen

Creates an open redelegation from a delegation chain encoded as Hex or decoded as Delegation[]. This allows any account to redeem the inherited permissions.

The action returns RedelegatePermissionContextReturnType.

Parameters

Name Type Required Description
environment SmartAccountsEnvironment Yes Contract addresses for the on the target chain.
permissionContext PermissionContext Yes Encoded delegation chain (Hex) or decoded chain (Delegation[]), leaf first.
chainId number No Chain ID used when signing the delegation.
account Account | Address No Account that signs the redelegation. The default is the Wallet Client's configured account.
scope ScopeConfig No Delegation scope to restrict the authority of the redelegation.
caveats Caveats No Additional caveats to restrict the authority of the redelegation. See caveats reference.
salt Hex No Salt for redelegation.

Example

import { walletClient, publicClient, environment } from './client.ts'

// These properties must be extracted from the permission response. See
// `grantPermissions` action to learn how to request permissions.
const permissionContext = permissionsResponse[0].context

const { permissionContext: redelegatedPermissionContext } =
  walletClient.redelegatePermissionContextOpen({
    environment,
    permissionContext: permissionContext,
  })
import { http, createWalletClient } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { sepolia as chain } from 'viem/chains'
import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit'
import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions'

// Your session account for requesting and redelegating should be the same.
const privateKey = '0x...'
const account = privateKeyToAccount(privateKey)

export const environment = getSmartAccountsEnvironment(chain.id)

const walletClient = createWalletClient({
  account,
  transport: http(),
  chain,
}).extend(erc7710WalletActions())