一、EIP6963#
问题介绍#
我们在连接某些网站的时候,明明点击的是 Metamask 登录,弹出来的却是 OKX Wallet 或者其他钱包的登录框。这是因为当前网站是基于老的 EIP-1193 获取到的全局 window.ethereum 对象进行链上操作。实际上不同的浏览器钱包插件会存在一个加载顺序的问题,往往是最后一个加载的钱包劫持了 window.ethereum 对象。
解决方案:#
2023 年 5 月的时候推出了 EIP-6963 解决方案,基于 EIP-6963 可以实现获取到每个钱包独立的 EIP1193Provider。避免互相影响。
那么我们如何接入呢?
- 使用 WAGMI 2.x, 原生支持 EIP-6963。我看了下 xlog 平台的钱包登录也是用的 wagmi,但是登录 metamask 的时候还是会被 okx 拦截,看了下代码,使用的还是 wagmi 1.x,应该是那个版本不支持 EIP6963 。
- 使用 mipd 库获得对应钱包的 EIP1193Provider。然后使用 ethers 接入
window.ethereum 被劫持了以后,有良心的,比如 OKX Wallet,还会给用户一个选择 Metamask 的入口。更多的是直接取而代之了。对于用户来说,就是,点击了 Metamask 登录,弹出的是其他钱包。这是一个很迷惑的使用体验,也可以说是 bug。建议做升级。
相关资料#
- https://metamask.io/news/developers/how-to-implement-eip-6963-support-in-your-web-3-dapp/
- https://github.com/MetaMask/vite-react-ts-eip-6963
二、Typescript Version#
问题介绍#
打开一个新项目的时候,经常会遇到明明依赖已经安装完毕,但是还是有 ts 报错的情况。这种情况一般有两种可能:一种是 ts 没反应过来,直接 reload project 就可以。还有一种是 ts 版本号不对,默认使用了 vscode 的 版本号。切换一下就可以。能否通过配置避免这种情况呢?
解决方案#
- vscode 有个很迷惑的配置 "typescript.tsdk",它在第一次打开的时候不会生效。但是后续加载会生效。
- vscode 还有个配置 "typescript.enablePromptUseWorkspaceTsdk",可将它设置为 true,这样每次打开项目右下角都会有个 Prompt 提示 让你切换到 工作区的 ts 版本。如果没切,每次打开项目都会弹。
其实这样也没有根本性的解决问题,既然 vscode 都有信任工作区的功能了,为什么信任工作区的工程不能自动加载工程文件的 ts 版本呢? 期待有更好的解决方案。