资讯动态

wagmi showCallsStatus 动作详解:请求钱包展示 EIP-5792 调用批次状态

发布时间:2026/9/17 20:58:39 来源:尧图企业网站定制
wagmi showCallsStatus 动作详解请求钱包展示 EIP-5792 调用批次状态【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi导读showCallsStatus是wagmi/core提供的一个核心 Action用于请求用户钱包在其 UI 中展示某个已通过sendCalls提交的调用批次call batch的状态信息。它对应以太坊 EIP-5792 中的wallet_showCallsStatusRPC 方法是「批量交易提交 → 状态查询 → 钱包内状态展示」这一完整链路中的最后一环。读完本文你将掌握showCallsStatus的导入方式、参数语义、返回类型、错误处理以及它与sendCalls、getCallsStatus的配合方式并了解其在 React 中的 Hook 封装与底层源码实现。什么是 showCallsStatusshowCallsStatus是一个异步 Action用于请求钱包显示某一调用批次的状态信息。这里的「调用批次」特指通过sendCalls提交的一组交易——EIP-5792 允许钱包把多笔交易打包成一个批次返回一个批次标识符id而showCallsStatus则把这个 id 交还给钱包让钱包在自身界面如浏览器扩展或移动端中弹出或定位到该批次的执行状态。import { showCallsStatus } from wagmi/core与同属 EIP-5792 家族的getCallsStatus不同getCallsStatus由 dApp 主动轮询、以编程方式获取批次的状态与收据返回{ status: PENDING | CONFIRMED, receipts: TransactionReceipt[] }而showCallsStatus是把展示动作交给钱包完成适用于用户希望「打开钱包看交易状态」的场景。基本用法最简单的调用方式是传入 config 与批次 idimport { showCallsStatus } from wagmi/core import { config } from ./config await showCallsStatus(config, { id: 0x1234567890abcdef, })其中config是由createConfig创建的应用级配置对象完整示例可参考仓库中的 config.tsimport { createConfig, http } from wagmi/core import { mainnet, sepolia } from wagmi/core/chains export const config createConfig({ chains: [mainnet, sepolia], transports: { [mainnet.id]: http(), [sepolia.id]: http(), }, })id来自sendCalls的返回值。sendCalls返回SendCallsReturnType即 viem 的SendCallsReturnType其中包含本次提交的批次标识符。在实际项目中典型链路是import { sendCalls, showCallsStatus } from wagmi/core const { id } await sendCalls(config, { calls: [ { to: 0x…, value: parseEther(1) }, { to: 0x…, value: parseEther(2) }, ], }) // 稍后请求钱包展示该批次状态 await showCallsStatus(config, { id })参数说明showCallsStatus接受两个参数类型为ShowCallsStatusParametersimport { type ShowCallsStatusParameters } from wagmi/coreconnector类型Connector | undefined含义指定用于展示调用状态的钱包连接器Connector。省略该参数时Action 会使用当前活动的连接config.state.connections中的当前连接。当存在多个连接、需要明确指定时可通过getConnections获取连接列表后取出目标 connectorimport { getConnections, showCallsStatus } from wagmi/core import { config } from ./config const connections getConnections(config) await showCallsStatus(config, { connector: connections[0]?.connector, id: 0x1234567890abcdef, })从源码看ShowCallsStatusParameters是 viem 同名参数类型与ConnectorParameter的交叉类型见 showCallsStatus.tsConnectorParameter即该可选connector字段因此它与 wagmi 其余 Action 的参数风格保持一致。id类型string含义要展示状态的调用批次标识符即sendCalls返回的id。import { showCallsStatus } from wagmi/core import { config } from ./config await showCallsStatus(config, { id: 0x1234567890abcdef, })返回类型showCallsStatus的返回类型为ShowCallsStatusReturnTypeimport { type ShowCallsStatusReturnType } from wagmi/core类型为bigint表示最近观察到的区块号Most recent block number seen。该返回类型直接继承自 viem 的ShowCallsStatusReturnType见 showCallsStatus.ts意味着调用成功后你可以拿到一个区块高度作为确认参照。错误处理showCallsStatus的错误类型为ShowCallsStatusErrorTypeimport { type ShowCallsStatusErrorType } from wagmi/core该类型同样继承自 viem 的ShowCallsStatusErrorType见 showCallsStatus.ts涵盖底层wallet_showCallsStatus可能抛出的各类错误。此外由于该 Action 在调用前需要先获取连接器客户端见下文「底层实现」它同样可能抛出与连接状态相关的错误包括ConnectorNotConnectedError未找到活动连接未连接钱包ConnectorChainMismatchError连接器的链 ID 与预期链不一致ConnectorAccountNotFoundError指定的账户不存在于连接器上ConnectorUnavailableReconnectingError处于reconnecting状态且连接器不支持读取账户/链信息时抛出。这些错误定义与抛出时机可在 getConnectorClient.ts 及其上游 config.ts 错误模块 中查看。生产环境建议用try/catch包裹调用并据此给用户友好提示。底层实现与调用链从源码结构看showCallsStatus的实现非常精简showCallsStatus.tsexport async function showCallsStatusconfig extends Config( config: config, parameters: ShowCallsStatusParameters, ): PromiseShowCallsStatusReturnType { const { connector, id } parameters const client await getConnectorClient(config, { connector }) return viem_showCallsStatus(client, { id }) }其内部调用链可以归纳为两步获取连接器客户端getConnectorClient(config, { connector })会从当前连接中取出账户、链信息与 provider。若显式传入connector则会调用该连接器的getAccounts()与getChainId()建立临时连接否则使用config.state.connections中的当前连接。若连接器实现了自定义getClient则直接复用否则用custom(provider)transport 创建一个以「Connector Client」命名的 viem 客户端详见 getConnectorClient.ts。委托给 viem将客户端与{ id }转发给 viem 的showCallsStatus由 viem 负责组装并发送 EIP-5792 的wallet_showCallsStatusRPC 请求。这也是 wagmi 核心 Action 的典型设计薄封装 复用 viem保证类型与行为与 viem 完全对齐。与 sendCalls / getCallsStatus 的组合实战showCallsStatus通常与 EIP-5792 的其他 Action 搭配使用形成完整流程。仓库中的测试用例showCallsStatus.test.ts完整演示了这一链路import { accounts, config, testClient } from wagmi/test import { parseEther } from viem const connector config.connectors[0]! await connect(config, { connector }) const { id } await sendCalls(config, { calls: [ { data: 0xdeadbeef, to: accounts[1], value: parseEther(1) }, { to: accounts[2], value: parseEther(2) }, { to: accounts[3], value: parseEther(3) }, ], }) await testClient.mainnet.mine({ blocks: 1 }) await showCallsStatus(config, { id }) await disconnect(config, { connector })可以看到connect建立连接 →sendCalls返回批次id→ 出块后showCallsStatus请求钱包展示状态。这也印证了showCallsStatus的使用前提必须先通过sendCalls提交批次并拿到id。若需要以编程方式轮询批次结果而非依赖钱包展示则应改用getCallsStatus(config, { id })它返回{ status: PENDING | CONFIRMED, receipts: TransactionReceipt[] }可与showCallsStatus搭配先查询确认再引导用户到钱包查看详情。React 中的 useShowCallsStatus Hook在wagmi/react中该 Action 被封装为useShowCallsStatusHookuseShowCallsStatus.ts底层基于 TanStack Query 的useMutation实现适合在组件中触发import { useShowCallsStatus } from wagmi function ShowStatusButton({ id }: { id: string }) { const { mutate, isPending } useShowCallsStatus() return ( button disabled{isPending} onClick{() mutate({ id })} 在钱包中查看状态 /button ) }Hook 返回标准的 mutation 对象mutate、mutateAsync、isPending、error等并额外暴露了已废弃的showCallsStatus/showCallsStatusAsync别名源码注释标记为deprecated建议改用mutate/mutateAsync。其底层通过 showCallsStatusMutationOptions 生成 mutation 配置mutationKey为[showCallsStatus]mutationFn直接调用 core 的showCallsStatus。core 包亦从wagmi/core/query导出该配置函数见 query 导出供其他框架Vue、Solid或自定义封装复用。常见问题与注意事项必须已连接钱包showCallsStatus需要基于连接器客户端发起请求未连接或当前连接失效时会抛出ConnectorNotConnectedError。id 必须真实有效id必须来自sendCalls的返回伪造或过期的 id 会导致钱包无法定位批次最终由底层 RPC 返回错误。依赖钱包支持 EIP-5792wallet_showCallsStatus是 EIP-5792 定义的可选方法只有实现了该标准的钱包才能响应展示请求对不支持的钱包调用会以错误结束建议先通过getCapabilities检测钱包能力再决定是否展示。返回值为区块号成功后返回最近观察到的区块号bigint可作为展示成功与否的判定依据。总结showCallsStatus是 EIP-5792 批量交易体系中的「展示」动作它接收sendCalls返回的批次id通过当前或指定 connector 的 viem 客户端向钱包发起wallet_showCallsStatus请求让钱包在自己的界面中呈现该批次的状态。它的参数仅有两个——connector可选与id返回类型继承自 viembigint区块号错误类型同样与 viem 对齐。配合sendCalls、getCallsStatus以及 React 侧的useShowCallsStatus即可在 dApp 中构建完整的批量交易提交与状态展示体验。【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价