题目
「连接钱包」按钮被快速点击两次时,第二次请求返回了 -32002,页面把它当成网络错误重试,用户随后看到了多个钱包弹窗。请说明这个错误码的含义、它与其他错误码的区别,以及前端应该如何避免与处理。
考察目标
- 理解 -32002 在 JSON-RPC 错误分类中的位置。
- 区分重复请求、未授权与断连三类失败的处理方式。
- 设计连接按钮与自动重连的互斥与去重。
解释 -32002 在错误码体系中的位置,给出按钮锁定、状态探测与重复请求防护的工程方案。
「连接钱包」按钮被快速点击两次时,第二次请求返回了 -32002,页面把它当成网络错误重试,用户随后看到了多个钱包弹窗。请说明这个错误码的含义、它与其他错误码的区别,以及前端应该如何避免与处理。
-32002 在 EIP-1474 的错误码分类中属于 Resource unavailable;request 失败时以 ProviderRpcError 拒绝,code 为整数、message 为人类可读文本。重复发起同一类请求是否会命中该码、在什么条件下命中,取决于钱包实现。实现差异与工程取舍见深入回答。
【协议保证】-32002 在 EIP-1474 的错误码列表里归类为 Resource unavailable(依据:EIP-1474 §Error codes)。
【协议保证】request 失败时拒绝值是 ProviderRpcError,其 code 为整数、message 为人类可读文本(依据:EIP-1193 §Provider Errors)。
【协议保证】读取当前已暴露账户可以借助 request 调用 eth_accounts 完成(依据:EIP-1193 §request)。
【工程经验】连接按钮在请求进行期间进入 pending 状态并锁定,入口处做去抖,避免一次用户操作发出多个请求(依据:工程经验,无规范依据)。
【工程经验】主动发起连接之前,先用 eth_accounts 探测当前授权状态:已授权时可以直接进入已连接界面,减少一次弹窗(依据:工程经验,无规范依据)。
【工程经验】收到 -32002 时不循环重试,而是提示用户先完成钱包中已弹出的请求,并在完成后重新读取状态(依据:工程经验,无规范依据)。
【工程经验】多标签页同时操作与自动重连并发时,用本地互斥或页面间协调避免重复发起(依据:工程经验,无规范依据)。
【工程经验】把 -32002 与断连(4900)、未授权(4100)分开处理,便于监控定位重复请求的来源(依据:工程经验,无规范依据)。
eth_accounts 探测授权状态,减少重复触发连接流程。发现这道题有问题? 反馈此题