EIP-7039: 钱包的 Scheme-Handler 发现选项
使用自定义协议处理程序来启动网页和钱包之间的连接。
| Authors | Sam Wilson (@SamWilsn) |
|---|---|
| Created | 2023-05-15 |
| Discussion Link | https://ethereum-magicians.org/t/shadow-a-scheme-handler-discovery-option-for-wallets/14330 |
| Requires | EIP-1193 |
摘要
本提案(亲切地称为 SHADOW)是 EIP-1193 的替代方案,用于在 Web 浏览器中发现钱包,而无需特殊权限。 旨在打开与钱包的连接的网页注入一个指向已知 scheme 的 iframe 标签。页面和钱包之间的通讯使用 postMessage API。
动机
当前的钱包发现方法(例如 window.ethereum)一次仅支持一个活动的钱包,并且需要浏览器扩展程序请求广泛的权限才能修改网页。
理想情况下,用户应该能够拥有多个活动的钱包,并在运行时在它们之间进行选择。 这不仅可以改善用户体验,还可以减少新浏览器扩展程序的进入门槛,因为用户不再被迫一次只安装一个浏览器扩展程序。
使用 SHADOW,与其他最新提案不同,浏览器扩展程序根本不需要 blanket content_scripts 或任何 permissions。 此外,任何网页(而不仅仅是浏览器扩展程序)都可以注册协议的处理程序。 这意味着更好地支持纯 Web 钱包、原生可执行钱包和硬件钱包。 只要钱包可以安全地提供页面,它就可以将自己注册为处理程序。
规范
本文档中使用的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“NOT RECOMMENDED”、“MAY”和“OPTIONAL”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。
启动连接
要启动与提供程序的连接,网页 SHOULD:
- 向
window添加"message"事件的事件侦听器(或设置window.onmessage。) - 创建一个
iframe标签,其src属性值为web+evm://;然后 - 将
iframe连接到 DOM。 - 等待
"message"事件,该事件的非空source等于iframe的contentWindow。 - 保存消息事件中的第一个端口,以供进一步通讯。 这被称为“主端口”。
步骤 4 中收到的事件 MAY 包含有关提供程序的其他信息。 如果存在,则事件数据 SHALL 满足以下 TypeScript 接口:
interface ProviderInfo {
name: string;
icon: string;
}
其中:
name是提供程序的人工可读名称;并且icon是指向图像的 URI。 请参阅 图标图像。
在已建立的连接上通讯
网页和钱包 MAY 相互请求。 发出请求的一方称为请求者,回复方称为响应者。
请求者 MAY 通过在主端口上发送消息(使用 postMessage)来向响应者发出请求。 该消息 MAY 将 MessagePort 作为消息传输列表的第一项,以接收回复。 此端口称为“回复端口”。 消息的数据 MUST 满足 EIP-1193 的 RequestArguments 接口,并且 SHALL 按照其中的描述进行解释。
如果传输了回复端口,则响应者 SHALL 通过向回复端口发布单个消息来响应。 消息的数据 SHALL 满足以下 TypeScript 接口,其中 ProviderRpcError 在 EIP-1193 中定义:
interface Response {
result?: unknown;
error?: ProviderRpcError;
}
result 或 error 这两个必须恰好有一个出现在响应中。
如果存在,则 result SHALL 等效于命名的 JSON-RPC 方法的响应的 result 字段。
错误对象 SHOULD 遵循 EIP-1193 中规定的建议。
没有传输的回复端口的请求 SHALL NOT 被视为错误,即使会发送回复。
图标图像
理由
SHADOW 不是直接使用 iframe.contentWindow 的消息端口,而是在第一条消息中传输一个消息端口。 这允许 iframe 在某些特定情况下完全移交通信,因此网页和提供程序直接通信,而无需在 iframe 中进行任何代理。
向后兼容性
虽然与 EIP-1193 不向后兼容,但此提案使用极其相似的数据结构,以使转换尽可能轻松。
可以使用此提案实现与 EIP-1193 兼容的提供程序,如下所示:
安全考虑
提供程序和网页都 MUST 在信任消息之前验证消息的来源。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Sam Wilson (@SamWilsn), "EIP-7039: 钱包的 Scheme-Handler 发现选项 [DRAFT]," Ethereum Improvement Proposals, no. 7039, May 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7039.