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 弹窗,页面加载时用前者做静默恢复。
相关标准
同属「接口」的其他标准