Skip to content
LogoLogo

Prepare Quote Token Update

token.prepareUpdateQuoteToken

Prepares a quote token update for a TIP-20 token. Requires the token's admin role.

Quote token updates are a two-step flow: this action stages the next quote token, then token.updateQuoteToken completes the update.

Usage

import {  } from './viem.config'
 
const { ,  } = await ..({
  : '0x20c0000000000000000000000000000000000002',
  : '0x20c0000000000000000000000000000000000001',
})
 
.('Next quote token:', )
Next quote token: 0x20C0000000000000000000000000000000000002

Asynchronous Usage

The example above uses 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 token.prepareUpdateQuoteToken action and wait for inclusion manually:

import {  } from 'viem/tempo'
import {  } from './viem.config'
 
const  = await ..({
  : '0x20c0000000000000000000000000000000000002',
  : '0x20c0000000000000000000000000000000000001',
})
const  = await ..({  }).
 
const {  } = ...(.)

Recipes

Migrate a Token's Quote Token in Two Steps

Stage the new quote token, then complete the switch with token.updateQuoteTokenSync once your change window opens.

import {  } from './viem.config'
 
const  = '0x20c0000000000000000000000000000000000001'
 
await ..({
  : '0x20c0000000000000000000000000000000000002',
  ,
})
 
const {  } = await ..({
  ,
})
 
.('New quote token:', )
New quote token: 0x20C0000000000000000000000000000000000002

Skip Staging When the Quote Token Already Matches

Read the live value with token.getMetadata and stage only when it differs from your target, so migration scripts stay safe to re-run.

import {  } from './viem.config'
 
const  = '0x20c0000000000000000000000000000000000002'
const  = '0x20c0000000000000000000000000000000000001'
 
const {  } = await ..({  })
 
if (?.() !== .()) {
  const {  } = await ..({
    : ,
    ,
  })
  .('Staged:', )
Staged: 0x20C0000000000000000000000000000000000002
}

Return Value

type ReturnType = {
  /** Account that prepared the quote token update. */
  updater: Address
  /** Quote token to use after the update is completed. */
  nextQuoteToken: Address
  /** Transaction receipt. */
  receipt: TransactionReceipt
}

Parameters

quoteToken

  • Type: Address | bigint

New quote token: a TIP-20 token id or a contract address.

token

  • Type: Address | bigint

Token to operate on: a TIP-20 token id or a contract address.

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.