Set Token Role Admin
token.setRoleAdmin
Sets the admin role for a specific role in a TIP-20 token. Requires the current admin role for the target role. Learn more about token roles
Usage
import { } from './viem.config'
const { } = await ..({
: 'pause',
: 'issuer',
: '0x20c0000000000000000000000000000000000001',
})
.('Transaction hash:', .)
Transaction hash: 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdefimport { , } from 'viem/tempo'
export const = .({
: .('0x...'),
})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.setRoleAdmin action and wait for inclusion manually:
import { } from 'viem/tempo'
import { } from './viem.config'
const = await ..({
: 'pause',
: 'issuer',
: '0x20c0000000000000000000000000000000000001',
})
const = await ..({ }).
const { } = ...(.)Recipes
Let the Issuer Team Manage Its Own Roster
Set issuer as its own admin so senior minting keys onboard new keys directly with token.grantRolesSync, without routing every change through defaultAdmin.
import { } from './viem.config'
const = '0x20c0000000000000000000000000000000000001'
await ..({
: 'issuer',
: 'issuer',
,
})
const { } = await ..({
: ['issuer'],
: '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
,
})
.('New issuer key active:', [0].)
New issuer key active: trueimport { , } from 'viem/tempo'
export const = .({
: .('0x...'),
})Move Pause Control Under Incident Response
Assign pause as the admin of both pause roles so the incident-response lead manages the on-call roster that can halt and resume transfers.
import { } from './viem.config'
const = '0x20c0000000000000000000000000000000000001'
await ..({
: 'pause',
: 'pause',
,
})
await ..({
: 'pause',
: 'unpause',
,
})import { , } from 'viem/tempo'
export const = .({
: .('0x...'),
})Return Value
type ReturnType = {
/** Role whose admin role was updated. */
role: Hex
/** New admin role. */
newAdminRole: Hex
/** Address that updated the admin role. */
sender: Address
/** Transaction receipt. */
receipt: TransactionReceipt
}Parameters
adminRole
- Type:
"defaultAdmin" | "pause" | "unpause" | "issuer" | "burnBlocked"
New admin role.
role
- Type:
"defaultAdmin" | "pause" | "unpause" | "issuer" | "burnBlocked"
Role to set admin for.
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.