收款不想暴露地址:ERC-6538 隐匿元地址注册表怎么公开收款身份 图 1
收款不想暴露地址:ERC-6538 隐匿元地址注册表怎么公开收款身份 · 图 1

收款不想暴露地址:ERC-6538 隐匿元地址注册表怎么公开收款身份

ERC-5564 隐匿地址解决了“每次收款用一个新地址”的机制:付款方拿你的公开资料,在链外生成一个只有你能识别和花费的一次性地址。但它留下一个部署问题——这张“生成名片”(stealth meta-address,元地址)放哪里,才能让任何付款工具自动找到?ERC-6538 隐匿元地址注册表(Stealth Meta-Address Registry)给出的答案是:每条链一份的单例公共合约。标准状态为 Final,创建于 2023 年 1 月 24 日,依赖 ERC-712、ERC-1271 与 ERC-5564,文档作者名单里能看到多位以太坊核心贡献者。

一个映射、一个 nonce、两条注册路

合约结构非常小。主映射 stealthMetaAddressOf 把“注册者”映射到“schemeId 到元地址字节串”的两层表。schemeId 用一字节整数区分不同隐匿方案,标准指定 schemeId 1 为 ERC-5564 描述的带视图标签的 SECP256k1 曲线方案。注册者的身份不限于普通地址——文档写明可以是地址、ENS 名或其他标识符。第二条映射 nonceOf 给每个注册者维护递增计数,专门服务于代注册路径。

注册有两条路。自己注册:registerKeys(schemeId, stealthMetaAddress),直接调用、自己付 gas。代注册:registerKeysOnBehalf(...),把注册数据做成 ERC-712 类型化消息由注册者签名,任何中继都可提交上链并代付 gas;签名与当前 nonce 绑定,每成功注册一次 nonce 递增,保证一份签名只能用一次,签名无效则抛出 ERC6538Registry__InvalidSignature。合约还有 incrementNonce 供用户在不注册时主动烧掉一份已泄露的签名额度;对合约钱包,注册校验走 ERC-1271 的 isValidSignature,让多签也能挂元地址。每条链应当只有一个实例,钱包与支付工具因此可以硬编码一个地址查所有人——这是“可发现性”的全部来源。

收款不想暴露地址:ERC-6538 隐匿元地址注册表怎么公开收款身份 图 2
收款不想暴露地址:ERC-6538 隐匿元地址注册表怎么公开收款身份 · 图 2

“公开注册”和“隐私收款”矛盾吗

这是最常见的疑问。答案是:注册表公开的是你的生成公钥组合(元地址),不是你的收款历史。隐匿地址方案的性质在于,外人即使拿你的元地址推算“下一个一次性地址”,也无法从公开数据里把它和你对应上——只有掌握对应私钥的你和选择生成地址的付款方能识别这笔钱进了哪里。所以元地址上链与地址复用是两个不同的隐私命题:上了元地址不等于放弃隐私,反而是让“不用复用主地址收钱”变得可行。当然,若钱包把元地址和你的 ENS、社交标识绑定展示,泄露的是另一层信息——那是产品选择,不是协议强迫。

对 NFT 场景的实际意义

对个人卖家,最直接的应用是公开挂单页、社交简介里不再贴主地址:对方用支持 ERC-5564 的钱包从注册表取元地址即可付款,你的主地址不出现在任何公开页面。对平台,批量结算(版税分成、活动返佣)可以逐个收款人生成独立地址,账目在链上依然可对账,但公开的是一张“地址网”而不是参与者的主地址清单。要划清的边界是:这套机制处理的是地址层面的关联隐私,不解决链上金额、时间戳与业务事件的关联分析,更不构成任何合规豁免——执法路径与地址隐私是两条平行线。

操作侧的核验习惯:注册是一次性的,改元地址等于换一把“生成钥匙”——旧付款人若仍按旧元地址生成新收款地址,你会以为钱丢了,实际是钱进了一个你不再扫描的范围。所以在更换密钥方案前,先用新的 registerKeys 调用覆盖注册表记录,再通知常用付款方。查询自己是否注册过也很简单:stealthMetaAddressOf(你的地址, 1) 返回非空即已挂载。

顺带一个实操细节:registerKeysOnBehalf 的签名绑定当前 nonce,任何人成功代注册一次 nonce 就递增——如果怀疑一份注册签名泄露但还没被使用,可以直接调用 incrementNonce 烧掉这个号,让旧签名永久失效,而不必注册任何新内容。 最后提醒:本文讲隐私协议机制,不构成投资建议;使用任何钱包功能前请核实钱包版本与注册表合约地址的官方来源。