钱包唤起时的混乱
连接钱包是进入 Web3 世界的关键一步,Web3 用户经常需要在一些 DApp 网站上连接钱包。但是,仅仅是这个简单的动作,也可能对用户造成严重的不便。
想象一下这样一个场景:一位新入门的 Web3 用户(出于好奇,他安装了许多个插件钱包),访问了某个 DApp 网站,并且想要使用自己的浏览器插件钱包来连接它,但是当他们点击网站提供的“Connect Wallet”按钮,并选择某个钱包以便想使用它来连接 DApp 时,可能会发现弹出的钱包并不是自己选择的。这很可能会让他感到慌乱和窒息,以为是自己的电脑中了病毒,所以才执行了自己意料之外的操作。
在当前的浏览器钱包实现逻辑中,都有通过向浏览器注入全局变量来暴露钱包提供的功能(例如以太坊平台的钱包会将其提供的功能注入到「 window.ethereum 」上),以便 DApp 可以调用钱包提供的方法来与之交互。
为了脱离上述的两难困境,社区中有两个相似的标准。
以太坊的解决方案:EIP-6963
以太坊社区在 2023 年 5 月份提出了 EIP-6963 提案。
其中的基本逻辑很简单,就是舍弃全局变量,转而使用约定的事件,来解决钱包注册与发现的问题。
社区标准:Wallet Standard
EIP-6963 是以太坊生态标准,但是不止以太坊,其他链平台也会有类似的问题。例如 Solana 链的钱包,普遍会将自己注入到「 window.solana 」变量上,同样会造成竞争情况。
Wallet Standard 所做的核心工作,在于提供了两个函数:「 registerWallet 」和「 getWallets 」,前者用于钱包,后者用于 DApp。
除了最基本的获取 Wallet 对象外,Wallet Standard 也定义了一些 Features 格式。
目前实现了 Wallet Standard 标准的项目实际上并不多,值得一提的有 Solana 和 Sui。
各区块链生态的实现
目前各个区块链平台对 Wallet Standard(或 EIP-6963)标准的态度并不相同,这里举几个例子:
Bitcoin
比特币目前为止似乎没有类似的标准,有一个实现了 Wallet Standard 标准的项目,但是并没有引起太多关注,现在也很久没有提交新的代码。
Ethereum
以太坊平台已经有了 EIP-6963 标准,相关库和钱包也大多提供了支持。
Solana
如上文,官方提供了实现:https://github.com/solana-labs/wallet-standard
Sui
Sui 目前已经对 Wallet Standard 提供了实现,在官方文档上可以找到使用方法:https://docs.sui.io/standards/wallet-standard
DApps 开发库的支持
wagmi
RainbowKit
Ant Design Web3
总结
EIP-6963 和 Wallet Standard 可以极大改善用户连接钱包的体验,降低新钱包供应商的准入门槛。希望以后能有更多链平台以及钱包、DApp 开发者可以提供或实现相关标准,这有利于 Web3 向着更好的方向发展。