Skip to content
LogoLogo

Set Receive Policy

receivePolicy.set

Sets the receive policy for the calling account.

Unspecified fields reset to their defaults. Setting an identical policy still emits ReceivePolicyUpdated.

Usage

import {  } from './viem.config'
 
const { ,  } = await ..({
  : 'self',
  : 1n,
  : 'allow-all',
})
 
.('Account:', )
.('Transaction hash:', .)
Account: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Transaction hash: 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

Asynchronous Usage

The examples above use a *Sync variant of the action, that will wait for the transaction to be included before returning.

If you are optimizing for performance, you should use the non-sync receivePolicy.set action and wait for inclusion manually:

import {  } from 'viem/tempo'
import {  } from './viem.config'
 
const  = await ..({
  : 'self',
  : 1n,
  : 'allow-all',
})
const  = await ..({  }).
 
const {  } = ...(.)

Recipes

Accept Only Your Settlement Currencies

Combine policy.createSync with tokenPolicyId to limit a merchant account to the stablecoins it settles in. Transfers of any other token are blocked instead of credited.

import {  } from './viem.config'
 
const  = '0x20c0000000000000000000000000000000000000'
const  = '0x20c0000000000000000000000000000000000001'
 
// Whitelist of stablecoins the merchant settles in.
const {  } = await ..({
  : [, ],
  : ..,
  : 'whitelist',
})
 
const {  } = await ..({
  : 'self',
  : ,
})

Route Blocked Payments to an Operations Claimer

Pass an explicit address as claimer so a dedicated operations account, rather than each sender, recovers blocked payments with receivePolicy.claim.

import {  } from './viem.config'
 
const {  } = await ..({
  : '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
  : 2n,
})
 
.('Claimer:', )
Claimer: 0x8ba1f109551bD432803012645Ac136ddd64DBA72

Decommission a Deposit Address

Pass senderPolicyId: 'reject-all' to stop accepting transfers on a retired exchange deposit address. Unspecified fields reset to defaults, so claimer becomes 'sender' and late depositors can reclaim their own funds.

import {  } from './viem.config'
 
const {  } = await ..({
  : 'reject-all',
})

Return Value

type ReturnType = {
  account: Address
  recoveryAuthority: Address
  /** TIP-403 policy restricting which senders are allowed. */
  senderPolicyId: 'reject-all' | 'allow-all' | bigint
  /** TIP-403 policy restricting which tokens are allowed. */
  tokenPolicyId: 'reject-all' | 'allow-all' | bigint
  /** Who can reclaim funds blocked by this policy. */
  claimer: 'sender' | 'self' | Address
  /** Transaction receipt. */
  receipt: TransactionReceipt
}

The updated receive policy details and the transaction receipt.

Parameters

claimer

  • Type: 'sender' | 'self' | Address

Who can reclaim funds blocked by this policy. Defaults to sender.

senderPolicyId

  • Type: 'reject-all' | 'allow-all' | bigint

TIP-403 policy restricting which senders are allowed. Defaults to allow-all.

tokenPolicyId

  • Type: 'reject-all' | 'allow-all' | bigint

TIP-403 policy restricting which tokens are allowed. Defaults to allow-all.

account (optional)

  • Type: Account | Address

Account that will be used to send the transaction.

feePayer (optional)

  • Type: Account | boolean

Fee payer for the transaction (TIP-1 gas sponsorship).

Pass true to defer the fee token to an external fee payer (e.g. a relay), or a local Account to co-sign the transaction as the fee payer.

feeToken (optional)

  • Type: Address | bigint

Fee token for the transaction.

Can be an unpaused USD-denominated TIP-20 token address or ID.

gas (optional)

  • Type: bigint

Gas limit for the transaction.

keyAuthorization (optional)

  • Type: KeyAuthorization

Signed key authorization to include with the transaction, authorizing an access key to act for the sending account.

maxFeePerGas (optional)

  • Type: bigint

Max fee per gas for the transaction.

maxPriorityFeePerGas (optional)

  • Type: bigint

Max priority fee per gas for the transaction.

nonce (optional)

  • Type: number

Nonce for the transaction.

nonceKey (optional)

  • Type: 'expiring' | 'random' | bigint

Nonce key for the transaction (TIP-1009 2D nonces).

Use 'expiring' to select an expiring nonce, which enables concurrent transaction submission without nonce ordering. Use 'random' to select a random key.

throwOnReceiptRevert (optional)

  • Type: boolean
  • Default: true

Whether a Sync action throws when the receipt reports a revert.

validAfter (optional)

  • Type: number

Unix timestamp after which the transaction can be included.

validBefore (optional)

  • Type: number

Unix timestamp before which the transaction must be included.