一、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 版本#
問題介紹#
打開一個新項目的時候,經常會遇到明明依賴已經安裝完畢,但是還是有 ts 報錯的情況。這種情況一般有兩種可能:一種是 ts 沒反應過來,直接 reload project 就可以。還有一種是 ts 版本號不對,默認使用了 vscode 的版本號。切換一下就可以。能否通過配置避免這種情況呢?
解決方案#
- vscode 有個很迷惑的配置 "typescript.tsdk",它在第一次打開的時候不會生效。但是後續加載會生效。
- vscode 還有個配置 "typescript.enablePromptUseWorkspaceTsdk",可將它設置為 true,這樣每次打開項目右下角都會有個 Prompt 提示 讓你切換到 工作區的 ts 版本。如果沒切,每次打開項目都會彈。
其實這樣也沒有根本性的解決問題,既然 vscode 都有信任工作區的功能了,為什麼信任工作區的工程不能自動加載工程文件的 ts 版本呢? 期待有更好的解決方案。