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

Wagmi Tempo `token.useRevokeRoles` Hook 实战指南:TIP-20 代币角色撤销的同步与异步用法

Wagmi Tempotoken.useRevokeRolesHook 实战指南TIP-20 代币角色撤销的同步与异步用法【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmitoken.useRevokeRoles是 Wagmi Tempo 体系中专用于 TIP-20 代币角色管理RBAC的 React Hook。本指南以 site/tempo/hooks/token.useRevokeRoles.md 为骨架结合仓库中 Hook 实现 与 底层 Action 实现 展开帮助你掌握useRevokeRoles/useRevokeRolesSync的调用方式、参数含义、返回结构与权限要求并在实际 DApp 中正确实现角色收回流程。前置背景Tempo 角色体系与 TIP-20Tempo 链上的 TIP-20 代币采用基于角色的访问控制RBAC角色role是代币能力的授权单位。从token.revokeRoles的参数类型见 site/tempo/actions/token.revokeRoles.md可以看出Tempo 预置了 5 个标准角色角色名含义defaultAdmin默认管理员通常拥有对其它角色的管理权pause暂停代币转移等操作的权限unpause解除暂停的权限issuer发行铸造权限本文示例中的常用角色burnBlocked控制地址是否被禁止销毁burntoken.revokeRoles的核心语义是从一个地址撤销一个或多个角色且要求调用者对每个被撤销的角色持有 admin 角色admin role。也就是说撤销不是任意地址可以发起的调用者必须具备被撤销角色对应的管理权限否则交易会被链上逻辑拒绝。Hook 概览useRevokeRoles与useRevokeRolesSync仓库在 packages/react/src/tempo/hooks/token.ts 中同时导出了两个 HookuseRevokeRoles()返回交易哈希不等待交易上链。适合对性能敏感、需要自行处理确认流程的场景。useRevokeRolesSync()等待交易被打包进区块后才返回返回交易回执receipt与事件数据适合需要立即拿到结果展示给用户的场景。两者都基于 TanStack Query 的useMutation封装mutationKey分别为[revokeRoles]与[revokeRolesSync]见 token.ts 与 token.ts。从源码结构看useRevokeRolesSync在 Hook 层与useRevokeRoles完全同构差异仅在底层调用Actions.token.revokeRolesSync其等待上链的行为由 Action 层完成。两者都暴露标准的 mutation 能力包括mutate、mutateAsync、isPending、isSuccess、data、error等ReturnType即UseMutationResult见 token.ts。建议在按钮点击、表单提交等用户动作中触发mutate并通过isPending禁用按钮避免重复提交。同步用法useRevokeRolesSync当需要提交后立即拿到交易回执时使用同步变体。原文档示例token.useRevokeRoles.md如下import { Hooks } from wagmi/tempo const revokeRolesSync Hooks.token.useRevokeRolesSync() // 在用户动作按钮点击、表单提交中调用 mutate revokeRolesSync.mutate({ from: 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEbb, roles: [issuer], token: 0x20c0000000000000000000000000000000000000, }) console.log(Transaction hash:, revokeRolesSync.data?.receipt.transactionHash) // log: Transaction hash: 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdefdata中同时包含receipt.transactionHash与撤销事件的解析结果value因此可以在mutate回调或isSuccess分支中直接读取。代码片段中引用的 config.ts 给出了配套的 Tempo 配置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(), }, })在 React 组件中使用时需要将配置通过WagmiProvider提供给组件树Hook 会从最近的WagmiProvider中自动获取Config。异步用法useRevokeRoles如果正在优化性能、希望将交易提交与等待确认两个阶段解耦应使用非同步的token.revokeRoles并手动等待上链。原文档示例token.useRevokeRoles.mdimport { Hooks } from wagmi/tempo import { Actions } from viem/tempo import { useWaitForTransactionReceipt } from wagmi const revokeRoles Hooks.token.useRevokeRoles() const { data: receipt } useWaitForTransactionReceipt({ hash: revokeRoles.data }) // 在用户动作按钮点击、表单提交中调用 mutate revokeRoles.mutate({ from: 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEbb, roles: [issuer], token: 0x20c0000000000000000000000000000000000000, }) if (receipt) { const events Actions.token.revokeRoles.extractEvents(receipt.logs) }这里的模式是mutate先提交交易并返回哈希revokeRoles.data为哈希随后useWaitForTransactionReceipt({ hash })监听该哈希对应的回执回执到达后调用Actions.token.revokeRoles.extractEvents(receipt.logs)从日志中解析出角色更新事件。两个 Hook 通过revokeRoles.data这一哈希桥接实现了提交与确认的异步编排。返回类型回执与角色更新事件token.revokeRoles的返回类型site/tempo/actions/token.revokeRoles.md在同步变体中表现为type ReturnType { /** Transaction receipt */ receipt: TransactionReceipt /** Array of role membership update events */ value: readonly { /** Role identifier */ role: Hex /** Address that had role revoked */ account: Address /** Address that revoked the role */ sender: Address /** Whether the role was granted (true) or revoked (false) */ hasRole: boolean }[] }各字段含义receipt交易回执包含transactionHash、blockNumber、status等标准字段value本次撤销产生的角色成员更新事件数组。由于一次revokeRoles可撤销多个角色value中会为每个被影响的角色, 账户组合生成一条事件记录其中hasRole为false表示撤销true表示授予。对应地非同步useRevokeRoles的data是交易哈希需通过useWaitForTransactionReceipt拿到回执后再extractEvents才能获得同样的事件结构。参数详解核心参数mutate/mutateAsync的入参即Actions.token.revokeRoles.Parameters包含三个必填字段参数类型说明fromAddress被撤销角色的目标地址roles(defaultAdmin \| pause \| unpause \| issuer \| burnBlocked)[]要撤销的角色列表可一次撤销多个tokenAddress \| bigintTIP-20 代币的地址或 ID交易覆盖参数可选除上述三个核心参数外OptionalTransactionOverrides由 token.ts 中的UnionLooseOmit组合而来还支持 site/shared/tempo-write-parameters.md 中定义的一组可选覆盖参数参数类型默认值说明accountAccount \| Address已连接的 Wagmi 账户发送交易的账户feeTokenAddress \| bigint—交易手续费代币可为 TIP-20 地址或 IDfeePayerAccount \| true—手续费支付方传true表示使用 Fee Payer Servicegasbigint—交易 gas 上限maxFeePerGasbigint—每单位 gas 的最高费用maxPriorityFeePerGasbigint—每单位 gas 的最高优先费noncenumber—交易 noncenonceKeyexpiring \| bigint—交易 nonce keyvalidBeforenumber—交易必须被打包的最晚 Unix 时间戳validAfternumber—交易可被打包的最早 Unix 时间戳throwOnReceiptRevertbooleantrue回执显示 revert 时是否抛错仅对*SyncAction 生效Hook 级参数Hook 本身接收{ mutation?, config? }形式的参数对象见 token.tsconfigConfig | undefined指定要使用的配置不传时从最近的WagmiProvider自动获取mutation透传给 TanStack QueryuseMutation的选项例如onSuccess、onError、onMutate等回调。权限要求与执行前提token.revokeRoles要求调用者持有每个被撤销角色的 admin 角色。这意味着在真实 DApp 中发起撤销的账户必须事先通过token.setRoleAdmin/token.grantRoles等流程获得对应角色的管理权限撤销操作属于链上写交易调用前需确保账户已通过useConnect完成连接底层 Action 通过getConnectorClient获取客户端见 token.ts若账户不具备权限交易会在链上 revert使用*Sync变体时默认throwOnReceiptRevert: true会直接抛错便于及时捕获失败。仓库测试 packages/react/src/tempo/hooks/token.test.ts 完整演示了该流程先useCreateSync创建代币再用useGrantRolesSync把issuer角色授予account2最后调用useRevokeRolesSync从account2撤销该角色并断言返回的data.receipt与data.value均已定义、isSuccess为真。这组测试可以作为你集成撤销功能时的验收参考。使用建议与常见问题同步还是异步需要立即反馈已撤销成功用useRevokeRolesSync需要精细控制加载态如提交后展示等待确认用useRevokeRolesuseWaitForTransactionReceipt。一次撤销多个角色roles是数组可将多个角色一次性传入减少交易次数value会返回对应的事件数组。错误处理通过 mutation 的error字段或onError回调捕获权限不足、余额不足等异常isPending期间应禁用提交按钮。配置来源确保WagmiProvider已注入含tempo链与tempoWallet连接器的config参考 config-tempo.ts否则 Hook 无法解析到正确的客户端。延伸阅读底层 Action 完整说明与返回类型site/tempo/actions/token.revokeRoles.mdHook 源码实现packages/react/src/tempo/hooks/token.tsAction 源码实现与测试packages/core/src/tempo/actions/token.ts、packages/core/src/tempo/actions/token.test.ts通用写交易覆盖参数site/shared/tempo-write-parameters.mdTempo 相关文档索引site/tempo/hooks/index.md【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

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

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