accounts.upgradeSync
Upgrades an existing account to a configurable account in place (TIP-1113), waits for confirmation, and returns the installed configuration with the receipt.
The account's root key must sign the upgrade, and the upgrade must be the transaction's only call.
After the upgrade, the root key can no longer sign for the account. Use
accounts.upgrade when you do not want to wait.
Usage
import { Account } from 'viem/tempo'
import { client } from './viem.config'
const root = Account.fromSecp256k1(
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
)
const owner = Account.fromSecp256k1(
'0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d'
)
const result = await client.accounts.upgradeSync({
account: root,
owners: [{ owner: owner.address, weight: 1 }],
threshold: 1,
})
{
account: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
commitment: '0x...',
config: { owners: [...], salt: '0x...', threshold: 1, version: 1n },
receipt: { ... },
}import { Account, createClient } from 'viem/tempo'
export const client = createClient({
account: Account.fromSecp256k1('0x...'),
})Return Value
{ account: Address; commitment: Hex; config: AccountConfig.Config; receipt: TransactionReceipt } | { receipt: TransactionReceipt }
The upgraded account, the installed configuration and its commitment, and the transaction receipt. Only receipt is set when the transaction is pending, or reverted with throwOnReceiptRevert: false.
Parameters
owners
- Type:
readonly { owner: Address; weight: number }[]
The owners to install. Owners are normalized into canonical address order, and must use primitive signatures.
await client.accounts.upgradeSync({
owners: [{ owner: '0x...', weight: 1 }],
threshold: 1,
})threshold
- Type:
number
The approval weight required to authorize the upgraded account.
await client.accounts.upgradeSync({
owners: [{ owner: '0x...', weight: 1 }],
threshold: 1,
})account (optional)
- Type:
Account | Address
Account that sends the transaction. For a coordinated transaction, pass the configurable account.
feeToken (optional)
- Type:
Address | bigint
Fee token for the transaction.
Can be an unpaused USD-denominated TIP-20 token address or ID. Use client.fee.validateToken({ token }) to validate a token before submitting a transaction or setting it as a fee preference.
feePayer (optional)
- Type:
Account | true
Fee payer for the transaction.
Can be a Viem Account, or true if a Fee Payer Service will be used.
gas (optional)
- Type:
bigint
Gas limit for the transaction.
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' | bigint
Nonce key for the transaction. Use 'expiring' to use expiring nonces (TIP-1009), which enables concurrent transaction submission without nonce ordering.
owner (optional)
- Type:
Account | Address
Local owner that signs one coordinated approval.
validBefore (optional)
- Type:
number
Unix timestamp before which the transaction must be included.
validAfter (optional)
- Type:
number
Unix timestamp after which the transaction can be included.
throwOnReceiptRevert (optional)
- Type:
boolean - Default:
true
Whether to throw an error if the transaction receipt indicates a revert. Only applicable to *Sync actions.