MetaMask 虽然产品受到了广泛的关注,但是一直饱受产品更新迭代慢、用户体验差的诟病,不过开发者团队对产品迭代的理解深度比普通用户是要强很多的,基于庞大的用户量 MetaMask 产品形态其实对现在的 web3 应用生态有一定的塑造作用,因此这就回到了「原罪」的主题,我们(MetaMask)做钱包的方向到底是不是对的?我们未来需要作出哪些改变?
MetaMask 开发团队认为当前钱包赛道仍有较大的可提升空间,一方面较高的使用、安装门槛阻拦了 web2 尝鲜加密的新用户,另一方面就是安全问题,即使是插件钱包也不能完全阻碍黑客钻空子的可能性。
另外,Web2 用户很难理解 web3 的产品,例如私钥的安全保管是个老生常谈的话题,不过用户对此敏感度依旧不是那么高,只有在私钥真正遗失后才追悔莫及,私钥意味着 web3 的入口,代表着 web3 世界所有权的证明。
因此,Web3 产品新的范式应该是怎么样的?Web2 用户不理解产品的情况下,也能顺利进入 web3,如果用户真正理解产品后才开始使用,这会极大增加用户的学习成本,MetaMask 给出了他们自己的思考,当前的 web3 产品很少能做到这几点。
能证明这就是我的
它不能被黑客入侵或盗窃
我可以完全控制、撤销、恢复账户
产品在我完全知情的情况下做交互
我可以自由选择和外界交互的方式
并且做钱包赛道最重要的一定是诚实,方案的优缺点一定能够让用户明晰,掩耳盗铃是对产品和用户的不负责,因此也就引入了今天的正题,账户抽象和智能钱包。
MetaMask 提出了三个非常重要的账户抽象提案:ERC-4337,「为钱包的设计打开创意之门」, 比如「多签和社交恢复」; EIP-3074,可以把 EOA 的权限委托给一个合约,允许用户在一次交易中批准转账、执行操作和撤销批准,相当于从 EOA 地址变成智能合约地址;EIP-5003,相当于 3074 的群体版本。
智能钱包本质上就是采用智能合约做钱包,智能合约钱包 (Smart Contract Wallet) 是当前以太坊支持的两种钱包形态之一,而另一种是大众所常用的 EOA(外部拥有地址)钱包,EOA 钱包是由私钥控制的区块链上的地址,即通过私钥,用户可以从所述地址签发交易,但是用户不能授权另一个密钥来为给定地址签名,也不能在其上编写自定义逻辑;相对的,智能钱包通过对代码的编写,可以实现任意逻辑。之前我画过一个加密货币钱包的分层图,最底层是密钥层,中间层是 provider,最上层是 wallet,密钥最主要的作用就是管理公钥私钥,密钥的导入和导出以及签名的生成,这些本质上都和链没有关系,说到底是数学的运算;中间层 provider 就跟是在哪条主链有关系,根据主链的格式生成地址;最上层主要对应资产的浏览、代币的收集和分发,所以说一个钱包基本上都可以拆成三层。
Ca 钱包一开始翻译过来就叫做内部钱包,更多的是为了和 EOA 外部钱包做对应,EOA 地址是没有办法承载任何资产的,凸现的是记账功能,资产实际上都是在 Ca 账户里面的,CA 中文叫做合约账户,我们常见的 ERC-20 代币合约、DeFi 业务合约等都有一个跟 EOA 长得很像的地址,这就是 CA。
Ca 可以用作智能钱包资产的管理,例如 gnosis safe 多签钱包其实也是智能钱包,但多签不是它的本质,而是用智能钱包的逻辑做多签。合约做钱包也是有很多优势的,其内部的逻辑是可以自定义、特别灵活,能实现传统钱包不能实现的功能。
例如我们一讲到合约钱包,大家第一反应是它的私钥是在哪儿的?其实这是 EOA 钱包的逻辑,私钥和公钥一一对应,这样的描述在 EOA 钱包里面是没有问题的,但是就像 gnosis safe 多签钱包,它实际上是通过一种「逻辑」实现的,比如 3/5 的多签钱包,权限的控制取决于五个地址中能不能得到三个以上的授权,因此合约钱包资产管理不是由私钥控制的,最主要的是逻辑执行,CA 也可以不设定任何密钥,而是由其他 CA 的逻辑决定是否可以解锁,比如 DeFi 的借贷合约,只要还了钱就能取回质押的资产。当然并不是说仅依靠逻辑就不需要公钥,只是说这样多了一层安全保障和操作逻辑。
账户抽象概念就是,改变目前大多数人都在使用 EOA 的现状,希望用户转向 SCW(Ca 作为地址的钱包解决方案,智能钱包),并且把生态对 EOA 的依赖完全去除。
当前很多链其实内置就有比较完善的账户抽象功能的,公钥集合、权限控制、合约逻辑等,其实从 eos 开始各种公链就有一定的账户抽象能力了,eos 的地址其实是一个字符串,它已经不是一个公钥了,有明显的内部结构,两个公钥,一个有高级权限属于 owner,另一个用于执行。而以太坊实际上是没有账户抽象这个概念的,最早可以追溯到 2015 年的一些讨论,当时 Vitalik 认为至少要让以太坊用来验证交易的密码学算法做到可替换,以及后面的第三方支付 gas、签名等等,但是以太坊基于历史原因很难进行「现代化改造」,很多东西都写死、固定住了,因此如果以太坊生态想要拓展账户抽象只能借助智能钱包、在应用层做弥补。
账户抽象在做的事情就是把账户层和密钥层抽象出来,用户可以自定义里面的逻辑,例如现实中机械锁(只能物理钥匙解锁)和电子锁(集成指纹、密码、面部特征等),抽象之后能带来多维的可拓展性。而智能钱包是当前实现以太坊账户抽象最有前途的方法,不需要从共识层、底层改进,ERC-4337 可以让应用层做账户抽象这个事情。
智能钱包和智能手机有很多的类比之处,智能手机因为集成了更多先进的能力,例如电容屏、陀螺仪、多点触控、gps 等等,这些能力的升级为上层应用的搭建带来了很大的想象空间,极大增强了用户体验,同时也会降低用户的进入门槛,让老年人、年轻人、儿童都能上手智能手机,因为智能手机的诞生让更多的用户进入了移动互联网;同时智能手机有很大的可拓展性,不局限于通信设备,更多的场景是听歌、视频、导航、游戏等等,可拓展性带来了范式转移,用户也习惯了这种认知转移,「默认」我们会拿智能手机做这些理所应当的场景。
智能钱包和 EOA 钱包的对比,通过智能手机总结下来的四点优势依旧适用,第一个就是更强的功能性,比如签名的内部逻辑、gas 费用的代付、批量交易等都可以通过智能钱包实现,这些其实是配合现有的场景方便大家理解,EOA 钱包是不支持批量交易的,同一笔交易只能干一件事情,但是智能钱包它可以做批量交易,它可以 approve and swap 一笔完成,所以每次你需要花多少钱你就 approve 多少钱,同时也保证了安全性。
第二点就是更好用,让用户的门槛降得很低,备份密钥这件事情可以使用社交恢复给替代,这都是能够带来的新的变革,包括 gas 支付也是如此,不用自己去专门去买各个链的,而是使用第三方的服务,这样就能让没有能力理解钱包、没有能力管理私钥、甚至是不想入金的一些人,能够通过智能钱包进入 web3。
第三就是更大的可扩展性,可以安装类似于装插件的操作,让功能变多,例如 nft 的交易需要授权 approve,如果不经过 approve 双方实际上是没有办法交易的,中间存在信任博弈的难题,但是可以通过第三方合约的方式,将 nft 打入合约账户并设定取出的逻辑,例如受到付款等等,然后就能完成交易,不需要第三方信任,智能钱包本质上就是个合约,因此本身是可扩展的。第四点就是范式转移,如同智能手机用户,以前默认状态是「断网」,当前默认的状态是「联网」,有了智能钱包之后,EOA 之前的很多传统观念会被覆盖,例如私钥公钥对应,需要付 gas,或者是需要不断 approve,这些场景都可以被打破,大家会慢慢习惯一些新的情况并默认。
这里举几个例子来展示一下智能合约钱包的扩展潜力:
Gnosis safe 利用智能合约钱包架构实现多签逻辑;
用户可以在一笔上链交易中同时给多个地址发送不同的 token,也可以在用 uniswap 时让 approve 和 swap 在一笔交易里完成,从而做到需要多少授权多少,避免因为过度授权造成安全隐患。
用户可以给不同资产设定不同的操作权限,比如给 PFP 设定比普通 ERC--20 token 更高的操作门槛(例如需要一把由硬件钱包管理的 admin key 才能转移),这样即便日常使用的环境发生密钥泄露,黑客也无法将高价值资产转走,在安全和便利中间取得平衡。
用户可以签署一个离线授权「谁能给我 100 ETH,就可以转走我的某个 BAYC」,这样不需要授权给第三方合约,用户就可以跟其他人 P2P 地完成原子交易。
我们发邮件的时候,类似于中世纪送信需要用蜡质封印,需要证明信息的真实性,电子邮件为例,发件服务器会进行签名,比如 G-mail 是 google 会在它的域名里面公布 D K M 公钥,用这个公钥的私钥给每一份邮件都签名,收件方接着验证 google 的 D K M 签名和哈希,都能通过收信。Uni-pass 的社交恢复流程一样的,只是在合约里面验一封邮件 D K M 的签名、哈希能否通过,这样能证明邮件的真实性,也能在合约里面换 key,加权重或则额外的逻辑也是可以的。
这也是为什么账号的社交恢复可以在 uni-pass 里面去做。我们是通过发邮件的方式验证用户是主动授权的,单单接受验证码意义不大,本质上是一个中心化的服务器发送的,发邮件和收邮件意味着用户授予服务器不同的权限,能更大限度保证安全性。
我们当前对接的客户非常广泛,包括 nft 平台、游戏公司、社交平台或者是想要通过 FT 做一定激励的组织,都可以通过我们的智能钱包提升用户体验提高转化率,同时降低成本。
说回 MetaMask,他们当前并没有躺平,而是将自己向着生态画的目标去努力,类似于小程序一个集大成的插件,对于用户来说不需要安装那么多的钱包和插件就能集成想要的功能,而这些 snap 不能依赖与官方开发,只能通过生态开发者一同搭建,MetaMask 提供流量、开发者提供技术,共赢的状态。
其实 uni-pass 也是这个思路,账户抽象的概念他们不会自己做,我们已经和 MetaMask 开展合作,当前已经交付了第二版的 Demo。其实这也不冲突,我们做合约层,他们做 EOA 层,合约钱包和 EOA 钱包不是竞争更倾向于合作、共存的关系,比如我们可以嵌在 EOA 钱包里面,如果新进来的用户注册钱包到私钥这一步的时候感觉麻烦不想做了,这时候就可以通过我们提供的电子邮件方式挽留用户,另外现存的用户也可以使用智能钱包的功能,用现在的地址一键控制智能钱包,能让流程更加顺畅。
Q:基于以太坊当前的逻辑,Ca 钱包一定会对应 EOA 地址完成逻辑触发吗?智能钱包 Gas 费用是不是需要 Layer2 呢?
A:实际上这种说法没错,但是还是有些窄的,最重要的还是看怎么控制钱包,我们既可以用验证签名的方式,也可以用其他的逻辑,比如 DeFi 中借贷合约执行的逻辑,是有一个前提的,即用户是不是完成了资金的使用和还款,之后才会依据合约完成资金的转移。可以看到这个过程是没有验证签名的,合约层也是没有验证签名的,而是依据用户的行为、逻辑验证,但是共识层会发生签名的验证。
共识层和合约层的交易处理都是会产生 Gas 费用的,当前我们接的客户也都是对接的大部分不是 eth 主链,而是 layer2 或者其他高性能公链上的项目,智能钱包实际上能很大的降低成本,尤其是批量处理无论是理论还是实践中都能减少费用,同时固定费用也大大降低。
Q:当前很多的 dapp 是不支持 Ca 钱包的,那么从场景拓展的角度来说智能钱包应该如何打破僵局呢?
A:不兼容的情况主要是 DeFi 机枪池和土狗币,防止被薅羊毛项目方采取一刀切的方式,第二个不兼容的情况是需要验证签名的场景,如果使用智能钱包需要实现 EIP-721,虽然有门槛但还是能够实现,opensea 就能够兼容该方面并实现挂单交易。
其实我们面向的客户,无论是做游戏还是做消费,都没有这方面的限制,也没有理由去限制使用智能钱包,和他们的目标是不冲突的,中期来讲兼容的问题就可以解决,因为智能钱包本身就是解决兼容的痛点。
Q:NFT 的合成、SBT 的发放智能钱包能够实现吗?
A:这个场景不需要钱包支持也可以实现,只要有签名授权就可以,这个逻辑也可以放在智能钱包中,类似于放一个小 app 插入到钱包中,这样就不需要传统钱包复杂的交互了,整个过程更便捷、高效。
Q:从 To B 的角度来说,客户需求主要集中在哪些方向,定制化的程度是否很高?
A:主要还是根据项目情况,如果是了解加密发展的历史,部分项目是非常重视客户安全层面的需求;对于体量比较大、资金雄厚的客户,从开始就开始做托管方案也是 make sense 的,也能给用户不错的体验,如果可以接受非托管的方案,并且想要大幅度降低使用门槛,找我们是完全可以做的。
定制化其实是从客户中搜集普遍需求,如果我们判断大部分的客户都需要这个层面的方案,我们就会去做,比如说一开始接的项目 SDK 大家没有 native 的需求,但是后来需求变得很普遍,大家都希望将 SDK 嵌入到自己的 app 里面,那么后来我们就开始做这个方案,做 SDK 就引入 stss,后来我们想了一下客户很多游戏都是用 unity 来做,我们直接用引擎级别的 SDK 可能会更合适,也就是我们会不断调整定制化的服务,另外我们 SDK 提供的灵活度也是足够的,能够满足定制化的需求。