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.