知识备忘录：第一周（EIP6963、Typescript Version）

一、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 版本呢？ 期待有更好的解决方案。

相关资料