网页找钱包的三条路
dapp 想连上用户的钱包,最常见的是往页面注入一个 provider 对象,多钱包抢同一个入口的乱象由此而来;EIP-6963 改用事件广播解决以太坊系的抢入口问题(网页怎么在一堆钱包扩展里找对的那个:EIP-6963 与多钱包共存 拆过),iframe 内嵌钱包则走 postMessage 通道(网页把钱包装进小框里怎么对话:CAIP-295 的 iframe 钱包消息通道 拆过 CAIP-295)。CAIP-294(状态 Draft,2024 年起草)走的是第三条:不注入任何对象,浏览器扩展钱包与区块链库都用页面事件总线互相打招呼——钱包发 announce 自报家门,库发 prompt 点名询问,双方都是事件总线的过客,谁也不占谁的名词空间。

底座:CustomEvent 加 JSON-RPC
技术选型非常克制:发布用 window.dispatchEvent,监听用 window.addEventListener,载荷套在 CustomEvent 的 detail 里,而 detail 的内容是一条 JSON-RPC 2.0 请求。事件名带前缀防碰撞:caip294:wallet_prompt 和 caip294:wallet_announce。选择这套通用事件 API 而非扩展专属的消息通道,是为了覆盖面——同一套代码不仅覆盖浏览器扩展,也覆盖内嵌框架、Service Worker、Shared Worker 这些都能收发 postMessage 与事件的环境。机器可读的强标识用 UUID 与反向域名,人可读的部分留给名字和图标。
和邻近规范怎么分工
这条发现总线不孤立:CAIP-25 规范建立会话的 wallet_create_session,CAIP-27 规范调用链上方法的 wallet_invokeMethod,CAIP-217 定义授权范围 scopes 的写法,CAIP-282 用 window.postMessage 定义浏览器钱包发现接口,CAIP-294 专注扩展环境的 CustomEvent 事件通道,CAIP-341 则补上 Extension ID 这种只存在于扩展生态的目标类型。把它们混着记最容易出错,实际排查时按环境选文档:普通以太坊网页先看 EIP-6963,走 postMessage 通道的内嵌钱包框架看 CAIP-295 或 CAIP-282,确认扩展事件机制才轮到 CAIP-294。一个实用的判断法:控制台里看到 caip294 前缀的事件在飞,说明站上的钱包库已经实现了这条总线,钱包没反应多半是钱包端未实现或扩展权限受限,而不是网络问题。
时序问题:为什么两边都要又播又听
浏览器里脚本加载顺序是不确定的:钱包可能比页面库先初始化,也可能晚一步。所以规范让两边都做两件事——初始化时广播自己的消息,同时监听对方的消息。区块链库初始化时播一条 wallet_prompt 问有没有钱包在,钱包收到 prompt 就把自己的 announce 再播一遍;钱包初始化时播的 announce,晚启动的库靠全程监听照样接得住。库把收到的钱包按 info.uuid 存进一张映射表,路由全靠 UUID——反向域名适合人读,但同一扩展在不同页面环境可能重复出现,消息配对必须靠一次性 UUID。
载荷里能谈什么
wallet_prompt 的参数是可选的:chains 数组可以按 CAIP-2 链标识筛选,只唤起支持目标链的钱包;authName 字段对接 CAIP-275 的域名钱包登录。wallet_announce 的参数里,钱包信息对象由 CAIP-372 定义,scopes 字段按 CAIP-217 授权规范声明支持哪些链、方法与通知,库可以在连接前就按能力过滤;targets 则接受 CAIP-341 定义的 Extension ID 作为连接目标类型。对以太坊生态,规范要求这套发现与既有的 window.ethereum 及 EIP-6963 事件并行兼容,Solana、比特币等其他生态同理接入。
用户侧能观察到的差别
这套机制落到体验上有几个可感知的点:连接弹窗出现前,网页其实已经知道装了哪些钱包,选择列表可以提前渲染而不是点了才转圈;钱包更新版本后能力声明(支持哪些链与方法)能直接进列表副标题,不用装探测脚本;多个钱包扩展并存时不再靠加载顺序赌谁抢到注入权。反过来说,普通用户不需要为此做任何设置——它是给开发者生态铺的路,你只会发现连接钱包这一步越来越顺,而如果某站点了连接毫无反应,前面给的开发侧排查线同样值得让用户知道:那多半是发现层没打通,不是你的钱包坏了。
指纹、隐私与现状
被反复追问的问题是钱包指纹化:恶意网页可以扫 announce 消息拼出装了哪些钱包的用户画像。规范的折中是允许钱包不在每次页面加载时都播 announce,安静等着库先发 prompt,代价是连接变慢且仍可能被主动探测。清醒认知有三条:第一,CAIP-294 仍是 Draft,落地程度以各钱包公告为准;第二,它解决发现与传输,授权与签名语义仍由下层规范管;第三,发现机制再多,最终按不按连接键仍是用户在钱包端决定,屏幕上看到的域名和权限才是判断依据。
风险提示
本文为钱包接口机制科普,不构成投资建议。任何自动同意连接、跳过钱包端确认的连接流程都放大钓鱼风险;连接前核对站点域名与请求的方法列表,是最便宜的自保动作。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。