拓冰建站拓冰建站
首页 / 资讯中心 / 正文

wagmi Tempo 指南:使用 `token.setRoleAdmin` 管理 TIP20 代币的角色管理员

wagmi Tempo 指南使用token.setRoleAdmin管理 TIP20 代币的角色管理员【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmitoken.setRoleAdmin是 wagmi Tempo 模块中用于管理 TIP20 代币权限体系的写操作write action它可以将某个角色的管理员admin权限转移给另一个角色且调用者必须持有目标角色的当前管理员权限。本文以 token.setRoleAdmin.md 为核心结合 wagmi 仓库中 core、react 的源码实现与测试用例系统讲解该动作的同步/异步两种调用方式、参数与返回类型以及它在角色权限治理中的实际用法。读完本文你将能在 React 或纯核心core场景中熟练完成修改角色管理员这一链上操作。角色管理员机制概述在 TIP20 代币标准中defaultAdmin、pause、unpause、issuer、burnBlocked等角色构成了权限控制体系其中每个角色都可以拥有一个管理员角色。拥有某个角色管理员权限的地址可以对该角色执行授予token.grantRoles、撤销token.revokeRoles等管理操作。token.setRoleAdmin的作用正是重新指定某个角色的管理员——例如将issuer角色的管理员从defaultAdmin换成pause。使用该动作有两个关键前提调用者必须持有目标角色当前的管理员角色权限否则交易会被链上合约拒绝操作结果会改变后续角色管理的授权路径因此通常只应授权给受信任的治理角色。前置条件Tempo 配置无论是核心动作还是 React Hooks都需要先创建连接 Tempo 链的 wagmi 配置。官方文档通过 config-tempo.ts 给出标准配置import { createConfig, http } from wagmi import { tempo } from wagmi/chains import { tempoWallet } from wagmi/tempo export const config createConfig({ connectors: [tempoWallet()], chains: [tempo], multiInjectedProviderDiscovery: false, transports: { [tempo.id]: http(), }, })配置要点通过tempoWallet()注入 Tempo 钱包连接器通过wagmi/chains引入tempo链定义为tempo.id配置http()传输层。基本用法同步变体文档推荐的最直接用法是*Sync变体token.setRoleAdminSync它会在交易被打包进区块后才返回调用方无需自己等待确认import { Actions } from wagmi/tempo import { config } from ./config const { receipt } await Actions.token.setRoleAdminSync(config, { adminRole: defaultAdmin, role: issuer, token: 0x20c0000000000000000000000000000000000000, }) console.log(Transaction hash:, receipt.transactionHash) // log: Transaction hash: 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef示例说明role: issuer表示要修改的是issuer角色的管理员adminRole: defaultAdmin表示将issuer的管理员设为defaultAdmintoken传入 TIP20 代币合约地址或代币 ID返回的receipt中可直接读取transactionHash用于后续展示与追溯。从源码看setRoleAdminSync与setRoleAdmin在 wagmi 核心层均通过getConnectorClient获取连接器客户端后转发给 viem 的 Tempo 动作实现见 packages/core/src/tempo/actions/token.tsexport async function setRoleAdminSyncconfig extends Config( config: config, parameters: setRoleAdminSync.Parametersconfig, ): PromiseActions.token.setRoleAdminSync.ReturnValue { const { account, chainId, connector } parameters const client await getConnectorClient(config, { account, assertChainId: false, chainId, connector, }) return Actions.token.setRoleAdminSync(client, parameters as never) }也就是说动作本身依赖当前连接的账户account、指定的链chainId与连接器connector未显式传入时默认使用 wagmi 配置中的连接状态。异步用法性能优先*Sync变体虽然方便但会阻塞直到交易确认。如果追求更低的延迟、希望自己控制确认流程应使用非同步的token.setRoleAdmin它只返回交易哈希然后配合waitForTransactionReceipt手动等待并可通过extractEvent从回执日志中提取事件参数import { Actions as viem_Actions } from viem/tempo import { Actions } from wagmi/tempo import { waitForTransactionReceipt } from wagmi/actions const hash await Actions.token.setRoleAdmin(config, { adminRole: defaultAdmin, role: issuer, token: 0x20c0000000000000000000000000000000000000, }) const receipt await waitForTransactionReceipt(config, { hash }) const { args } viem_Actions.token.setRoleAdmin.extractEvent(receipt.logs)这种提交哈希 → 等待回执 → 解析事件的分步模式适合需要并行发送多笔交易、或在后台批量治理的场景。两种变体的选择原则需要确定性的返回结果选*Sync需要控制确认时机与吞吐量选异步版本。返回类型token.setRoleAdmin的成功返回结构如下文档原始定义type ReturnType { /** New admin role identifier */ newAdminRole: Hex /** Transaction receipt */ receipt: TransactionReceipt /** Role identifier that had its admin updated */ role: Hex /** Address that updated the role admin */ sender: Address }各字段含义newAdminRole被设置的新管理员角色标识16 进制编码receipt交易回执包含transactionHash、logs、status等字段role被修改管理员的那一个角色标识sender实际发起本次管理员变更的地址。注意非同步变体直接返回hash字符串同步变体才返回上述结构化结果——这与测试用例中的断言一致见 packages/core/src/tempo/actions/token.test.ts异步版断言hash为字符串同步版则解构出receipt、role、newAdminRole并逐一校验。参数详解adminRole必填类型defaultAdmin | pause | unpause | issuer | burnBlocked为role指定的新管理员角色。role必填类型defaultAdmin | pause | unpause | issuer | burnBlocked需要更新管理员的那个角色。adminRole与role都是上述五个内置角色之一两者可以相同吗从角色治理语义看一般不会将角色设为自身的管理员典型用法如测试用例所示将issuer的管理员设为pause见 token.test.ts。token必填类型Address | bigintTIP20 代币的合约地址或代币 ID。在 Anvil 测试环境中通常先用token.createSync创建代币并拿到tokenAddr再传入见 token.test.ts。通用写操作参数可选以下参数与 Tempo 模块其他写动作共用详见 tempo-write-parameters.md参数类型说明accountAccount \| Address发送交易的账户默认使用当前连接的 wagmi 账户feeTokenAddress \| bigint手续费代币可为 TIP-20 代币地址或 IDfeePayerAccount \| true手续费支付方可为 Viem Account或true表示使用 Fee Payer Servicegasbigint交易 Gas 上限maxFeePerGasbigint每单位 Gas 的最大费用maxPriorityFeePerGasbigint每单位 Gas 的最大优先费用noncenumber交易 NoncenonceKeyexpiring \| bigint交易 Nonce 键validBeforenumber交易必须被打包的时间戳上限UnixvalidAfternumber交易可被打包的时间戳下限UnixthrowOnReceiptRevertboolean默认true回执显示回滚时是否抛错仅对*Sync动作生效这些参数让setRoleAdmin可以精细控制交易的费用策略、有效期窗口与手续费代付方式适配企业级治理与批量操作需求。在 React 中使用 Hooks除核心Actions外wagmi 还为 React 提供了对应的 mutation HooksHooks.token.useSetRoleAdmin与Hooks.token.useSetRoleAdminSync实现见 packages/react/src/tempo/hooks/token.ts。它们内部直接调用核心层的同名动作并暴露 TanStack Query 风格的 mutation 结果mutate、isPending、isError等import { Hooks } from wagmi/tempo function App() { const { mutate, isPending } Hooks.token.useSetRoleAdminSync() return ( button onClick{() mutate({ token: 0x..., role: issuer, adminRole: pause })} disabled{isPending} Set Role Admin /button ) }两个 Hooks 的差异与核心动作一致useSetRoleAdminSyncmutation 完成时返回包含回执的结构化结果适合点按钮 → 等待上链 → 展示结果的交互useSetRoleAdmin仅返回交易哈希适合配合waitForTransactionReceipt自行处理确认与事件解析。源码中两个 Hooks 分别以[setRoleAdmin]与[setRoleAdminSync]作为 mutationKey见 token.ts 与 token.ts便于在缓存与去重场景中区分两种变体。与角色管理动作的关系token.setRoleAdmin属于 Tempo 代币角色治理动作族的一部分与token.grantRoles授予角色、token.revokeRoles撤销角色共同构成完整的权限管理闭环相关文档见 token.grantRoles.mdgrantRoles/revokeRoles决定谁能拥有某个角色setRoleAdmin决定谁能管理某个角色即角色管理权的归属。治理实践中通常先用setRoleAdmin将各业务角色的管理员收敛到少数治理角色如defaultAdmin或pause再通过管理员角色执行日常的授权与撤销从而降低单一账户权限过大的风险。总结token.setRoleAdmin为 TIP20 代币的角色治理提供了关键的管理权转移能力同步变体setRoleAdminSync直接返回回执适合确定性交互异步变体setRoleAdmin返回哈希适合高性能与自定义确认流程核心层通过getConnectorClient复用当前连接状态React 层通过useSetRoleAdmin/useSetRoleAdminSync以 mutation 形式暴露结合account、feeToken、validBefore等通用写参数可精确控制交易行为调用前提是持有目标角色的当前管理员权限使用时需注意权限边界。【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门