题目
一个 DApp 把钱包返回的各种错误统一提示为「交易失败」:用户拒绝、方法不支持、链未连接在界面上看起来一模一样,用户不知道下一步该做什么。请给出一份错误码到处理动作的映射,并说明哪些差异来自规范、哪些来自钱包实现。
考察目标
- 掌握 EIP-1193 与 EIP-1474 的错误码分类。
- 区分「用户行为」「能力缺失」「连接状态」「参数错误」四类失败。
- 设计错误分类与界面动作的对应关系。
把 EIP-1193 与 EIP-1474 定义的错误码映射为可执行的界面动作,并区分规范错误与实现差异。
一个 DApp 把钱包返回的各种错误统一提示为「交易失败」:用户拒绝、方法不支持、链未连接在界面上看起来一模一样,用户不知道下一步该做什么。请给出一份错误码到处理动作的映射,并说明哪些差异来自规范、哪些来自钱包实现。
钱包侧错误码由 EIP-1193 定义:4001 用户拒绝,4100 未授权,4200 不支持该方法,4900 与链断开连接,4901 目标链未连接;JSON-RPC 侧错误由 EIP-1474 定义,包括 -32601 方法不存在、-32602 参数无效、-32603 内部错误。错误对象包含整数 code、人类可读 message 与可选 data。实现差异与工程取舍见深入回答。
【协议保证】ProviderRpcError 包含整数 code、人类可读的 message 与可选的 data(依据:EIP-1193 §Provider Errors)。
【协议保证】4001 表示用户拒绝了这次请求,属于用户行为而不是系统故障(依据:EIP-1193 §Provider Errors)。
【协议保证】4100 表示请求的方法或账户未经用户授权,需要先走授权流程(依据:EIP-1193 §Provider Errors)。
【协议保证】4200 表示钱包不支持该方法,属于能力缺失(依据:EIP-1193 §Provider Errors)。
【协议保证】4900 表示与链的连接已断开,4901 表示请求的目标链未连接(依据:EIP-1193 §Provider Errors)。
【协议保证】JSON-RPC 层错误包括 -32601 方法不存在、-32602 参数无效、-32603 内部错误(依据:EIP-1474 §Error codes)。
【协议保证】规范以整数 code 区分错误类别,message 用于向人展示(依据:EIP-1193 §Provider Errors)。
【工程经验】遇到不在 EIP-1193 错误列表中的错误码时,先按对应钱包文档确认含义再处理,并保留兜底分支(依据:工程经验,无规范依据)。
【工程经验】跨钱包的判别逻辑应为未知错误码保留兜底分支,避免把单一实现的分支当作通用行为(依据:工程经验,无规范依据)。
【工程经验】按类别设计界面动作:用户可以取消的动作不自动重试;能力缺失进入降级路径;连接类错误提示恢复方式;参数类错误提示修改输入(依据:工程经验,无规范依据)。
【工程经验】message 不进入程序判别逻辑,日志对地址与参数做脱敏处理(依据:工程经验,无规范依据)。
code 之外依赖 message 文案匹配错误类型。code 与 message。发现这道题有问题? 反馈此题