手机点 dapp 链接为什么总开错应用:ERC-1710 的 dapp 协议头方案 图 1
手机点 dapp 链接为什么总开错应用:ERC-1710 的 dapp 协议头方案 · 图 1

手机点 dapp 链接为什么总开错应用:ERC-1710 的 dapp 协议头方案

在手机上点一个去中心化应用的链接,理想剧本是“装了支持的浏览器就自动打开”,现实剧本经常是弹出一个只会签名的钱包,页面永远加载不出来。ERC-1710 就是针对这个故障提出的方案:给需要内置网页 3 环境打开的链接单独一个协议头。文档创建于 2019 年 1 月 13 日,仓库记录状态为 Stagnant,属于长期无人推进的归档状态,文件头声明需要 ERC-155。

开错应用的技术根源

动机部分把病因写得具体。第一层:多数普通浏览器、尤其是移动端的,缺少网页 3 支持,去中心化应用在里面的体验不正常,所以这类页面本来就该用不同的链接格式去标识,而不是和 https 混在一起。第二层:当时各家移动端浏览器各自注册了自家私有协议头来做深度链接,推广方想用延迟深度链接引导用户安装指定浏览器,生态被切碎;这份提案的期待是,只要链接本身是标准格式,用户已经装了哪个支持该格式的浏览器,系统就会把链接递给哪个应用,推广方只在用户没装任何浏览器时才引导安装自家。第三层最要命:早在 ERC-831 里,ethereum: 这个 scheme 已经被钱包、身份管理等一大类应用共用,而原文点名 iOS 对同一 scheme 由多个应用处理时的行为不可预测——用户完全可能把一条本来要开去中心化应用的链接,送进一个没有浏览器内核的签名钱包,然后对着一个处理失败的弹窗发呆。ERC-1710 的答案是把“要开网页”这一类意图从 ethereum: 的杂烩里拆出来。

手机点 dapp 链接为什么总开错应用:ERC-1710 的 dapp 协议头方案 图 2
手机点 dapp 链接为什么总开错应用:ERC-1710 的 dapp 协议头方案 · 图 2

语法与链号

规范给的构造只有一行:request = "dapp" ":" [ chain_id "@" ] dapp_url,协议头固定是 dapp,链标识段可选,主体是一个普通网址。链号那段是可选参数,作用是让浏览器在打开应用前自动选中对应链号,编号含义遵循它依赖的 ERC-155——那是一份推荐用单个数字标识链的标准,以太坊主网是 1。规范给的完整例子是 dapp:1@peepeth.com/brunobar79?utm_source=github:浏览器打开后先按 chain_id 选中主网,再导航到对应的 https 地址。不写链号时不隐含任何特殊含义,具体链的上下文交给打开它的浏览器按自身设置处理。语义上还有一条:目标必须是符合 RFC3986 的合法 URI,协议头后面直接跟域名、端口、路径,链接本身不携带任何资产操作意图——这正是它和 ERC-831 那类“负载里全是交易参数”的设计分野:一条 dapp 链接最多决定你打开哪个站点,不决定你签名什么。理由部分总结这套格式的三合一目标:解决各厂商私有协议头问题、避开已被占用的 ethereum: scheme,并把链选择从终端用户身上拿走。整份文档没有单列安全考虑章节,结合它“链接只负责打开网站”的定位,这条边界应当读成:格式层干净,不代表目标网址干净。

这份标准止步于哪里

值得先说清楚:ERC-1710 状态是 Stagnant,方案没有成为主流,今天主流移动端钱包走的仍是内置浏览器直接打开 https 页面加注入脚本的路线,或者各家自己的深度链接。读这份归档文档的价值在故障排查思路。如果你今天仍然用某个带独立浏览器入口的应用,点链接总是错开、错链,可以先核对三件事:链接协议头是不是目标应用登记的格式;带 @数字 的链号和你以为的链是否一致,注意 ERC-155 的数字和某些旧工具里的十六进制链号写法不是一套表示法;目标应用的官方文档到底支持哪种深度链接语法。任何声称“标准格式”却要求你在弹窗里授权资金、或者链接里塞着合约调用参数的,都不属于这份标准描述的“打开网站”范畴,应当视为可疑。本文为机制说明,不构成任何投资建议。