W3
EIP-1193EIP接口Final(2018-08-13)

以太坊 Provider JavaScript API

规定 window.ethereum 的请求方法与事件模型,是 dApp 与钱包之间的标准契约。

适用链:全部 EVM 链(浏览器钱包统一接口)

为什么重要:所有连接钱包的代码最终都落到 request()。不遵守它的钱包会在 dApp 里直接不可用。

函数签名与选择器

选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。

签名 / 字段选择器 / topic0说明
request({ method, params })唯一的请求入口,返回 Promise。
on(eventName, handler)订阅事件;removeListener 取消订阅。
connect / disconnect与底层节点建立或断开连接时触发。
chainChanged切链后必须重新加载全部链上数据。
accountsChanged账户数组变化;空数组表示用户断开了连接。
4001 / 4902 错误码4001 用户拒绝,4902 未添加该网络,是最常见的两个分支。

实现与使用时的常见陷阱

  • chainChanged 与 accountsChanged 之后要重新初始化 provider 与合约实例,缓存的对象会失效。
  • 不要把 window.ethereum 的引用缓存到模块作用域:多钱包环境下它可能在运行时被替换。
  • eth_accounts 不弹窗、eth_requestAccounts 弹窗,页面加载时用前者做静默恢复。

相关标准

同属「接口」的其他标准
想把这个标准用起来?开发者路径的第 1–2 阶段讲了怎么把它写进项目;合约 IDE里有对应的可编辑模板与静态自检;链上 API 参考则给出前端调用它的三种写法。