钱包主动说话的标准姿势:CAIP-319 wallet_notify 的双标签与四步校验 图 1
钱包主动说话的标准姿势:CAIP-319 wallet_notify 的双标签与四步校验 · 图 1

连接建立之后,钱包也得有嘴

常规叙事里信息流是单向的:应用发请求、钱包弹确认、回执回去。但真实的去中心化应用体验经常需要反方向的信号:你订阅的链上事件有了结果、某个地址的余额变动、节点推送了新块信息。这些消息由钱包转达给页面时,用什么格式?在多链并存的连接里,不同命名空间的方法名还可能撞车。编号 319 的链无关协议(CAIP-319)给出统一答案:一个名为 wallet_notify 的 JSON-RPC 方法,作为钱包主动通知的标准封装。按仓库原文核验,它目前是 Draft(草案)状态,依赖会话握手与作用域语法等前置文档。

钱包主动说话的标准姿势:CAIP-319 wallet_notify 的双标签与四步校验 图 2
钱包主动说话的标准姿势:CAIP-319 wallet_notify 的双标签与四步校验 · 图 2

请求结构:一条通知加两个标签

结构是一层套一层的信封。外层方法名固定为 wallet_notify,内层带两个必填字段:scope,一条符合链标识规范的字符串,标明这条通知属于哪条链;notification,本身又是一个标准的 JSON-RPC 通知对象,内含它自己的 method(如订阅推送 eth_subscription)与 params(载荷数据)。另有可选的 sessionId,用于把通知钉在某个已知会话上。规范给的示例是三层套娃:外层 wallet_notify 声明作用域 eip155:1,中层通知方法是 eth_subscription,载荷里带着区块高度、交易哈希和日志索引。这两个标签——作用域加内层方法名——就是标题里说的”双标签”:接收方靠它们把消息投递到正确的监听器。

验证清单:先对账再处理

规范给应用写了四步校验纪律,语气分层明确。第一步是硬性要求(MUST):处理之前必须把 scope 与已识别的会话对象对照——这条通知声称来自哪条链,而那条链在不在 一份 JSON 说清「哪条链、哪些方法、哪几个账户」:CAIP-217 授权作用域语法 定义的授权作用域清单里,对不上就不该进业务逻辑。第二步是强烈建议(SHOULD):核对内层 method 是否是该作用域下应用预期会收到的通知,也就是建会话时 notifications 数组里约定过的那批名字。第三步允许(MAY)自行加逻辑验证载荷内容。第四步允许忽略:认不出或认为无效的通知可以直接丢弃。这套清单同时是给用户的透明度线索——一个把消息来源、所属链和事件名分得清清楚楚的前端,通常是把校验写实在了的应用;什么都往一个提示框里塞的,至少没落实这套纪律。

与账户变化事件、状态变更事件的区别

钱包往网页方向说话的东西不止这一种,分清三者能避免大量混淆。第一类是连接状态类事件(如账户变化、链切换),它们报告的是”你和钱包的关系变了”,随页面环境全局广播,不挂在具体链作用域下。第二类是会话授权变更事件(你在钱包里改了权限,网站凭什么知道:CAIP-311 的会话变更广播事件),报告”授权清单被用户改了”,方向同样由钱包发出但内容与权限有关。第三类才是 319 管的:关系没变、权限没变,纯粹是那条链上发生了你订阅的链上事件,需要转述。三者的共同前提是第一类之外的授权留痕:会话建立时 notifications 字段里没有点名的通知类型,理论上就不该出现在这条通道里。用户侧的直觉表述是——前两类变化应当让你看见并确认,第三类只是数据到货,不该打断你。

多链并发下的串话防线

提案动机段落账很清楚:多链连接里,同名方法与通知可能在不同命名空间同时存在。设想一个应用同时连着以太坊系与另一生态,两边都推来一个方法名相仿的订阅事件——没有作用域标签,前端只能靠运气路由。scope 字段把这份运气变成硬规则:每条通知自带户口,越界即弃。会话编号标签进一步把消息钉到具体一次连接上,防止同一站点的多个会话窗口互抢消息。这套”带户口投递”的设计与命令路由协议(同一族文档的反方向通道)正好互为镜像:出向命令靠作用域选路进网络,入向通知靠作用域选路进监听器,一进一出共享同一份权限账本,也就共享同一份安全边界。

用户视角的检查与现状提醒

普通用户和这个协议的交集主要有三处。第一处,事件订阅类应用(链上监控、多签协作面板、跨链进度页)依赖这类推送通道,如果你发现某监控页在明明该报警的时刻沉默了,先核对该应用在你钱包会话里的 notifications 授权是否是空数组——监控类应用常在这里被最小权限原则误伤,这是权限配置问题而不是链故障。第二处,任何以”钱包通知”名义弹出要你立即操作(尤其涉及转账、授权)的界面,都不属于本协议描述的转述型通知:通知只带数据、不带指令,规范也明确这类通知不要求接收方回应、钱包不应等待回应再继续,凡”通知”引导你点确认按钮的都要按钓鱼直觉处理。第三处,草案阶段的落地参差,钱包是否发 wallet_notify、事件是否走各自私有通道,各家实现不一,排查”订阅不响”时把这一层实现差异列入候选原因。所有涉及资产的处置决策应以链上事实与你自己的核验为准,本文仅描述机制,不构成任何投资建议。