You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Wagmi调用合约遇类型错误及CALL_EXCEPTION问题求助

解决方案

1. 优先修复链不匹配问题

你提到App.tsx里没配置Polygon Mumbai测试链,这是触发call revert exception的核心原因——Wagmi默认连接的链和合约部署链不一致,合约调用必然失败。

  • 给Wagmi配置添加Mumbai链:
    导入mumbai链配置后,在createConfig的chains数组中加入该链,示例代码:
    import { mumbai } from '@wagmi/chains';
    import { createConfig, configureChains } from '@wagmi/core';
    import { publicProvider } from '@wagmi/core/providers/public';
    
    const { chains, publicClient, webSocketPublicClient } = configureChains(
      [mumbai],
      [publicProvider()],
    );
    
    const config = createConfig({
      autoConnect: true,
      publicClient,
      webSocketPublicClient,
    });
    
  • 同时确保钱包已切换到Polygon Mumbai测试链,钱包链与配置链不匹配也会导致调用失败。

2. 参数类型问题的正确处理

IDE提示Type 'number' is not assignable to type 'BigNumber',是因为Solidity合约中uint类型参数对应Ethers/Wagmi里的BigNumber类型,直接传number会类型不兼容。

  • 用Ethers.js的BigNumber.from()转换参数是正确的,调用合约时明确指定链ID避免歧义:
    import { BigNumber } from 'ethers';
    import { useReadContract } from 'wagmi';
    
    const { data: isClaimedResult } = useReadContract({
      address: '你的合约地址',
      abi: ['function isClaimed(uint256 tokenId) view returns (bool)'],
      functionName: 'isClaimed',
      args: [BigNumber.from(1)],
      chainId: mumbai.id, // 强制指定Mumbai链ID
    });
    

3. 额外排查项

如果上述操作后仍触发revert,检查以下内容:

  • 确认合约地址是Polygon Mumbai链上的正确部署地址,不要混淆主网或其他测试链地址。
  • 去PolygonScan Mumbai区块浏览器直接调用合约的isClaimed函数,验证合约本身是否存在问题。
  • 核对Wagmi版本,若使用v2版本,确保useReadContract的参数格式符合当前版本要求。

内容的提问来源于stack exchange,提问作者MrOwl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:21