walletconnect v1 升级到v2 问题汇总

umi + react 17

初始项目

公司有关web3 项目,初期只支持 MetaMask 和 WalletConnect v1 的钱包关联,随着日积月累,项目越来越大,链接钱包的方式越来越多,前期联调完之后,大部分时间使用的Metamask,由于它是一个比较稳定的钱包,操作也比较简单。最新的功能添加了其他的钱包登录,突然发现WalletConnect 已经升级到v2,且v1 当前时间已经关闭,赶紧找官网拔文档。

注意 : "@walletconnect/modal": "^2.6.1", "@walletconnect/ethereum-provider": "^2.8.4", [email protected] [email protected] [email protected] [email protected]

walletconnect 官网

通过walletconnect官网上文档

根据 官网文档,打算使用@walletconnect/ethereum-provider--> 申请projectId, 使用ethereum-provider 直接将代码改为如下

typescript 复制代码
// import WalletConnectProvider from '@walletconnect/web3-provider';
import { EthereumProvider } from '@walletconnect/ethereum-provider'
...
const [wcProvider, setWcProvider] = useState<any>();
...
const connectWcProvider = async () => {
  // console.log('===provie=', wcProvider)
  if(wcProvider) {
    return wcProvider;
  }
  console.log('===provie=2', wcProvider)
  const newProvider = await EthereumProvider.init({
    projectId: static_wc_projectId, // required
    chains: [1], // required
    showQrModal: true, // requires @walletconnect/modal
    methods: [
      "eth_sign",
      "personal_sign",
      "eth_chainId"
    ]
  });
  setWcProvider(newProvider);
  return newProvider;
};

const connectWallet = (type: string) => {

    let newProvider: any = wcProvider;
    if (!newProvider) {
      newProvider = await connectWcProvider();
    }
    const newWeb3 = new Web3(newProvider);
    try {
      await newProvider.connect();
      // const accounts = await newProvider.enable();
      const accounts = newProvider.accounts;
      console.log('provei---accounts, ', accounts, newWeb3, web3)
    } catch (e) {
      console.error(e)
      setWalletType(userInfo.walletType);
    }
}

问题汇总

启动报错

通过网上各种查找资料,

  • 解决方案一: 添加 file-loader

.umijs.ts 文件中,添加配置

ruby 复制代码
chainWebpack: (config) => {
  config.module
    .rule('js')
    .test(//@walletconnect/ethereum-provider/dist/*.(js)$/)
    .use('file-loader')
    .loader(require.resolve('file-loader'))
},

结果:

最终解决方案:在.umijs.tsconfig.ts 添加 babel-loader, 我用的是[email protected]

less 复制代码
config.module
  .rule('walletconnect')
  .test(/node_modules[\/]@walletconnect/)
  .use('babel-loader')
  .loader('babel-loader')
  .options({
    presets: [
      ['@babel/preset-env', { modules: false }]
    ]
  });

问题二 Connot find module 'webpack/lib/ModuleFilenameHelper.js'

webpack 版本 4.42.1

解决方案:

由于使用的是全局的 webpack,找不到某些目录,将全局的指向自己当前的项目即可, 在当前项目下执行 npm link webpack

问题三 Module parse failed: Unexpected token

解决方案: babel-loader or 其他的版本不对,升级or降低版本

问题四 npm run build

想起来我本地没开代理, walletConnect 必须要外网才可以

javascript 复制代码
chainWebpack: NODE_ENV === 'development' ? (config) => {
  config.module
    .rule('walletconnect')
    .test(/node_modules[\/]@walletconnect/)
    .use('babel-loader')
    .loader('babel-loader')
    .options({
      presets: [
        ['@babel/preset-env', { modules: false }]
      ]
    });
  // config.module
  //   .rule('web3')
  //   .test(/node_modules[\/]web3[\/]dist/)
  //   // .exclude.add(/node_modules[\/]web3[\/]dist[\/]web3.min.js/).end()
  //   .use('babel-loader')
  //   .loader('babel-loader')
  //   .options({
  //     presets: [
  //       ['@babel/preset-env', { modules: false }]
  //     ]
  //   })
  // config.module.rules.push({
  //   test: /.es.js$/,
  //   loader: 'babel-loader',
  //   exclude: /(node_modules)/
  // })
} : webpackPlugin

问题五 Connot convert undefined or null to object at Function.getPrototypeOf

解决方案参考:WalletConnect/walletconnect-monorepo Issues

将localStorage 清空 , session 清空, cookie 清空,就可以。降低版本应该也可以,但是我没有试

相关推荐
穗余4 小时前
WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
javascript·node.js·web3
寻月隐君5 小时前
探索Web3新速度:Sonic高性能Layer-1上的BlindAuction智能合约实践
后端·web3·github
区块链蓝海18 小时前
Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
web3·区块链
寻月隐君2 天前
Web3实战:Solana CPI全解析,从Anchor封装到PDA转账
后端·web3·github
电报号dapp1192 天前
加密货币钱包开发指南:多链资产管理与非托管安全范式
安全·web3·去中心化·区块链·智能合约
穗余2 天前
NodeJS全栈WEB3面试题——P2智能合约与 Solidity
web3·区块链·智能合约
Verin3 天前
Next.js+Wagmi+rainbowkit构建以太坊合约交互模版
前端·web3·以太坊
dingzd953 天前
Web3如何重塑数据隐私的未来
web3·facebook·tiktok·instagram·clonbrowser
ClonBrowser3 天前
Web3时代的数据保护挑战与应对策略
web3·facebook·tiktok·instagram·clonbrowser
全干engineer3 天前
web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界
金融·web3·去中心化