用一个 ENS 名字登录应用:ERC-1078 想让私钥和助记词都退出登录流程 图 1
用一个 ENS 名字登录应用:ERC-1078 想让私钥和助记词都退出登录流程 · 图 1

用一个 ENS 名字登录应用:ERC-1078 想让私钥和助记词都退出登录流程

大多数链上登录流程的第一步,是让用户签一条 EIP-191 消息证明自己持有某个地址。ERC-1078 想把这一步换掉:用户既不需要暴露私钥,也不需要记住助记词,只要提供一个 ENS 名字,登录就完成。这份标准创建于 2018 年 5 月 4 日,仓库记录的状态是 Stagnant,正文里对开发者的提醒写得比设想本身更有价值——它要求 dapp 换一种方式理解“交易”这件事。

身份不是地址,是一个合约

标准的第一个设计决定,是把用户身份定义为合约地址而不是外部账户。这个合约要同时满足两份标准:一份负责身份记录,一份负责执行签名过的意图。原文写得很清楚,用户不应该直接看到这个十六进制地址,看到的应该是它的 ENS 名字。也就是说,登录时你交出的是一串人名一样的字符串,地址由解析器查出来。

合约之所以能充当身份,是因为它背后可以挂着多把签名钥匙。设备不需要成为链上账户,只需要能签出一条被合约认可的消息:某把公钥现在是这把身份的有效签名者之一。这条“加钥匙”的意图由第三方(原文说可以由一个执行者网络)提交上链,谁付 Gas 与谁是用户被拆开了两件事。

用一个 ENS 名字登录应用:ERC-1078 想让私钥和助记词都退出登录流程 图 2
用一个 ENS 名字登录应用:ERC-1078 想让私钥和助记词都退出登录流程 · 图 2

登录一次要走几步

把原文的描述按顺序摆出来:本地设备生成一把临时私钥;构造一条把该公钥登记为身份合约签名者的意图消息;用户用已有的权威密钥(比如手机上的第二因子)签这条消息;执行者把它作为交易提交;合约更新签名者表,登录状态成立。整条链路里没有密码,也没有把助记词复制到另一台设备上的动作。

这套流程的妙处在于换设备:旧设备丢了,只要还能拿到那把权威密钥,就能把新设备加进来,同时把旧设备那把踢出去。这与今天通行密钥的多设备思路相当接近,区别是它的登记簿在链上,撤销也要走一笔交易。

依赖的三份标准各管什么

原文的 requires 字段列出了 ERC-191、ERC-681、ERC-725 与 ERC-1077。分工大致是:签名消息的统一编码由 191 负责;“一个网址代表一次调用”由 681 负责;身份记录与执行分离的通用键值存储由 725 负责;把签名的意图安全地变成链上交易则由 1077 承担。ERC-1078 本身几乎没有新增函数,它是把这些零件串成一条登录动线的说明书。读这类“流程型标准”要注意这一点:接口薄、约定厚,安全边界全在零件里。

为什么停在 Stagnant

原因可以从流程本身读出来。它假设存在一个愿意垫付 Gas 并接受签名意图的执行者网络,而 2018 年还没有成熟的账户抽象基础设施,代付与意图执行在各家都是私有实现;其次,它把身份绑在 ENS 上,而当时 ENS 的名字需要竞拍,一个只想登录的用户要先花一次钱;第三,合约即身份意味着每注册一个身份就部署一个合约,成本无法摊薄。后来这几块地基分别由 ERC-4337、Gas 代付与批量执行等方向补上,但登录场景已经由通行密钥和社交登录各自找到了更便宜的答案,这条路线自然就没被继续推进。

对读者的现实作用是防身:如果今天某个产品宣传“用名字登录,无需私钥”,你至少能问出四个具体问题——身份记录的合约地址是什么、谁有权往签名者表里加钥匙、加钥匙那笔交易由谁提交、旧设备丢失时撤销要不要用户自己付 Gas。四个问题里只要有一个回答是“由平台服务器处理”,那它实际是中心化账号系统套了个链上外壳,链上所有权和你以为的自持并不等价。

本文为机制说明,不构成任何投资建议。