作者
|
Vitalik Buterin
编译
|
深潮 TechFlow
以太坊基础设施堆栈的一个关键层是钱包,但经常被核心 L1 研究人员和开发人员低估。钱包是用户和以太坊世界之间的窗口,用户只能从以太坊及其应用程序提供的任何去中心化、审查阻力、安全、隐私或其他属性中受益,前提是钱包本身也具有这些属性。
最近,我们看到以太坊钱包在改善用户体验、安全性和功能方面取得了很大进展。这篇文章的目的是给出我自己对理想的以太坊钱包应具备的一些特性的看法。这并不是一个完整的列表;它反映了我的密码朋克倾向,它专注于安全和隐私,并且几乎可以肯定它在用户体验方面是不完整的。然而,我认为愿望清单在优化用户体验方面不如简单地根据反馈进行部署和迭代有效,因此我认为关注安全和隐私属性是最有价值的。
跨 L2 交易的用户体验
现在有一个越来越详细的改善跨 L2 用户体验的路线图,该路线图有短期部分和长期部分。在这里,我将谈论短期部分:即使在今天理论上仍然可以实施的想法。
核心思想是(i)内置跨 L2 发送,以及(ii)链特定地址和支付请求。您的钱包应该能够为您提供一个地址(遵循本 ERC 草案的风格),如下所示:
当某人(或某些应用程序)向您提供这种格式的地址时,您应该能够将其粘贴到钱包的「收件人」字段中,然后单击「发送」。钱包应该以任何可能的方式自动处理发送的数据:
· 如果您在目标链上已经有足够的所需类型的代币,请直接发送代币;
· 如果您在另一条链上有所需类型的代币(或 多个其他链),使用 ERC-7683 等协议(实际上是一个跨链 DEX)发送代币;
· 如果您在同一链或其他链上有不同类型的代币,使用去中心化交易所将它们转换为正确链上正确类型的货币并发送。这应该需要用户的明确许可:用户将看到他们支付了多少费用,以及接收者收到了多少费用。
具有跨链地址支持的可能钱包接口的模型
上面的内容适用于「您复制粘贴地址(或 ENS,例如,vitalik.eth @ optimism.eth)有人向您付款」用例。如果 dapp 请求押金(例如,参见 这个 Polymarket 示例)那么理想的流程是扩展 web3 API 并允许 dapp 发出特定于链的支付请求。然后,您的钱包将能够以任何需要的方式满足该请求。要使用户体验良好,还需要标准化 getAvailableBalance 请求,并且钱包需要认真考虑默认将用户资产存储在哪些链上,以最大程度地提高安全性和转账便利性。
特定于链的支付请求也可以放入二维码中,移动钱包可以扫描二维码。在面对面(或在线)消费者支付场景中,接收者将发出 QR 码或 web3 API 调用,表示「我想要链上 X 单位的代币 Y Z,带有参考 ID 或回调 W」,钱包将可以以任何方式自由满足该请求。另一种选择是 claim 链接协议,其中用户的钱包生成包含索赔授权的 QR 代码或 URL 从他们的链上合约中获取一定数量的资金,接收者的工作就是弄清楚如何将这些资金转移到他们自己的钱包中。
另一个相关主题是 gas 支付。如果您在还没有 ETH 的 L2 上收到资产,并且需要在该 L2 上发送交易,钱包应该能够自动使用协议(例如 RIP-7755)来支付链上的 Gas 你有 ETH 的地方。如果钱包希望你将来在 L2 上进行更多交易,它也应该只使用 DEX 来发送,例如。价值几百万 Gas 的 ETH,以便未来的交易可以直接在那里花费 Gas(因为这样更便宜)。
账户安全
我对账户安全挑战的概念化的一种方式是,一个好的钱包应该同时在两个方面发挥作用:(i)保护用户免受钱包开发人员的黑客攻击或恶意攻击,以及(ii)保护用户免受自己的错误的影响。
左边的「错误」是无意的。然而,当我看到它时,我意识到它非常适合上下文,所以我决定保留它。
我对此的首选解决方案,超过十年来,一直是社交恢复和多重签名钱包,具有分级访问控制。用户的帐户有两层密钥:主密钥和 N 个监护人(例如 N = 5)。主键是能够进行低价值和非财务操作。大多数监护人需要执行 (i) 高价值操作,例如发送帐户中的全部价值,或 (ii) 更改主密钥或任何监护人。如果需要,可以允许主键通过时间锁执行高价值操作。
以上是基本设计,可以进行扩展。会话密钥和 ERC-7715 等权限机制可以帮助支持不同应用程序的便利性和安全性之间的不同平衡。更复杂的监护人架构,例如在不同阈值下具有多个时间锁定持续时间,可以帮助最大限度地提高成功恢复合法帐户的机会,同时最大限度地降低盗窃风险。
以上是基本设计,可以进行扩展。会话密钥和 ERC-7715 等权限机制可以帮助支持不同应用程序的便利性和安全性之间的不同平衡。更复杂的监护人架构,例如在不同阈值下具有多个时间锁定持续时间,可以帮助最大限度地提高成功恢复合法帐户的机会,同时最大限度地降低盗窃风险。
监护人应该是谁或什么?
对于经验丰富的加密货币用户社区中的经验丰富的加密用户来说,一个可行的选择是您的朋友和家人的密钥。如果您要求每个人为您提供一个新的地址,那么没有人需要知道他们是谁 - 事实上,您的监护人甚至不需要知道彼此是谁。如果他们没有向你通风报信,他们串通一气的可能性很小。然而,对于大多数新用户来说,此选项不可用。
第二种选择是机构监护人:专门提供仅在收到您的请求的其他确认信息时才签署交易的服务的公司:例如。确认码,或者针对高价值用户的视频通话。人们长期以来一直试图制造这些,例如。我在 2013 年对 CryptoCorp 进行了介绍。然而,到目前为止,这些公司还不是很成功。
第三种选择是多个个人设备(例如电话、台式机、硬件钱包)。这可以工作,但对于没有经验的用户来说也很难设置和管理。还存在设备同时丢失或被盗的风险,尤其是当它们位于同一位置时。
最近,我们开始看到更多基于 万能钥匙。密钥只能备份在您的设备上,使其成为一种个人设备解决方案,也可以备份在云中,使其安全性依赖于复杂的混合 密码安全、机构和可信硬件假设。实际上,密钥对于普通用户来说是一种宝贵的安全增益,但仅靠它们还不足以保护用户的毕生积蓄。
幸运的是,有了 ZK-SNARK,我们还有第四种选择:ZK 包裹的中心化 ID。这种类型包括 zk-email 、 Anon Aadhaar 、 Myna Wallet 等等。基本上,您可以采用多种形式(公司或政府)中心化 ID,并将其转换为以太坊地址,您只能通过生成证明拥有中心化 ID 的 ZK-SNARK 来发送交易。
有了这个补充,我们现在有了广泛的选择,并且 ZK 包装的中心化 ID 具有独特的「新手友好性」。
为此,它需要通过简化且集成的 UI 来实现:您应该能够仅指定您想要「[email protected]」作为监护人,并且它应该自动生成相应的 zk-email 以太坊地址在引擎盖下。高级用户应该能够将他们的电子邮件(以及可能保存在该电子邮件中的隐私盐值)输入到开源第三方应用程序中,并确认生成的地址是正确的。对于任何其他受支持的监护人类型也应该如此。
请注意,如今 zk-email 面临的一个实际挑战是它依赖于 DKIM 签名,该签名使用每隔几个月轮换一次的密钥,并且这些密钥本身并未由任何其他机构签名。这意味着如今的 zk-email 具有超出提供商本身的某种程度的信任要求;如果 zk-email 在受信任的硬件内使用 TLSNotary 来验证更新的密钥,则可以减少这种情况,但这并不理想。希望电子邮件提供商能够开始直接签署其 DKIM 密钥。今天,我建议一位监护人使用 zk-email,但不建议大多数监护人使用:不要将资金存储在 zk-email 损坏意味着您无法使用资金的设置中。
新用户和应用内钱包
新用户实际上不希望在第一次注册时输入大量监护人。因此,钱包应该为他们提供一个非常简单的选择。一种自然的途径是在其电子邮件地址上使用 zk-email、本地存储在用户设备上的密钥(可能是万能密钥)以及提供商持有的备份密钥,进行 2-of-3 的选择。随着用户变得更有经验或积累更多资产,在某些时候应该提示他们添加更多监护人。
钱包集成到应用程序中是不可避免的,因为试图吸引非加密用户的应用程序不希望用户同时下载两个新应用程序(应用程序本身,加上以太坊钱包)带来混乱的用户体验。然而,许多应用程序钱包的用户应该能够将他们的所有钱包链接在一起,这样他们就只需担心一个「访问控制问题」。最简单的方法是采用分层方案,其中有一个快速的「链接」过程,允许用户将其主钱包设置为所有应用内钱包的监护人。Farcaster 客户端 Warpcast 已经支持这一点:
默认情况下,您的 Warpcast 帐户的恢复由 Warpcast 团队控制。但是,您可以「接管」您的 Farcaster 帐户,并将恢复更改为您自己的地址。
保护用户免受诈骗和其他外部威胁
除了帐户安全之外,当今的钱包还做了很多工作来识别虚假地址、网络钓鱼、诈骗和其他外部威胁,并尽力保护用户免受此类威胁。与此同时,许多对策仍然相当原始:例如,要求点击才能将 ETH 或其他代币发送到任何新地址,无论您发送的是 100 美元还是 100,000 美元。在这里,不存在单一的灵丹妙药。这是针对不同类别威胁的一系列缓慢的持续修复和改进。然而,继续努力改进这里有很多价值。
隐私
现在是时候开始更加认真地对待以太坊的隐私了。ZK-SNARK 技术现在已经非常先进,不依赖后门来降低监管风险的隐私技术(例如隐私池)越来越成熟,而像 Waku 和 ERC-4337 mempools 这样的二级基础设施也慢慢变得更加稳定。然而,到目前为止,在以太坊上进行私人转账需要用户明确下载并使用「隐私钱包」,例如 Railway(或用于隐形地址的 Umbra)。这增加了极大的不便并减少了数量 愿意进行私人转账的人。解决办法是 私人转账需要直接集成到钱包中。
一个简单的实现如下。钱包可以将用户资产的一部分作为「私人余额」存储在隐私池中。用户进行转账时,会先自动退出隐私池。如果用户需要接收资金,钱包可以自动生成一个隐形地址。
此外,钱包可以自动为用户参与的每个应用程序生成一个新地址(例如,defi 协议)。存款将来自隐私池,提款将直接进入隐私池。这允许用户在任何一个应用程序中的活动与其在其他应用程序中的活动取消链接。
这项技术的一个优点是,它不仅是保护隐私的资产转移的自然途径,也是保护隐私的身份的自然途径。身份已经发生在链上:任何使用身份证明门控的应用程序(例如 Gitcoin Grants)、任何代币门控聊天、以太坊遵循协议等等都是链上身份。我们希望这个生态系统也能保护隐私。这意味着用户的链上活动不应收集在一个地方:每个项目都应单独存储,并且用户的钱包应该是唯一具有「全局视图」的东西,可以同时看到您的所有证明。每个用户拥有多个账户的原生生态系统有助于实现这一目标,EAS 和 Zupass 等链下证明协议也是如此。