Blockchain 使用onboard.js查询钱包数据时还原异常错误

Blockchain 使用onboard.js查询钱包数据时还原异常错误,blockchain,ethereum,metamask,erc20,Blockchain,Ethereum,Metamask,Erc20,我正在使用board.js中的代码: import ethers from 'ethers' import erc20 from './erc20' function tokenBalance({ tokenAddress, minimumBalance, tokenName }) { let ethersProvider; let tokenContract; return async stateAndHelpers => { const { wall

我正在使用board.js中的代码:

import ethers from 'ethers'
import erc20 from './erc20'

function tokenBalance({ tokenAddress, minimumBalance, tokenName }) {
  let ethersProvider;
  let tokenContract;

  return async stateAndHelpers => {
    const {
      wallet: { provider },
      address,
      BigNumber
    } = stateAndHelpers;

    if (!tokenContract) {
      ethersProvider = new ethers.providers.Web3Provider(provider);
      tokenContract = new ethers.Contract(tokenAddress, erc20, ethersProvider);
    }

    const tokenDecimals = await tokenContract.decimals();
    const divideBy = new BigNumber(10).pow(tokenDecimals);
    const tokenBalanceResult = await tokenContract
      .balanceOf(address)
      .then(res => res.toString());
    const tokenBalance = new BigNumber(tokenBalanceResult).div(divideBy);

    if (tokenBalance.lt(minimumBalance)) {
      return {
        heading: `Get Some ${tokenName}`,
        description: `You need to have at least ${minimumBalance} ${tokenName} to interact with this Dapp. Send some more ${tokenName} to this address or switch to another address that has a higher ${tokenName} balance.`,
        eventCode: "tokenBalance",
        icon: `
            <svg 
                height="18" 
                viewBox="0 0 429 695" 
                width="18" xmlns="http://www.w3.org/2000/svg"
            >
                <g 
                    fill="currentColor" 
                    fill-rule="evenodd"
            >
                 <path d="m0 394 213 126.228516 214-126.228516-214 301z"/>
             <path d="m0 353.962264 213.5-353.962264 213.5 353.962264-213.5 126.037736z"/>
            </g>
           </svg>
        `
      };
    }
  };
}

const defaultWalletChecks = [
    { checkName: 'connect' },
    { checkName: 'network' },
    { checkName: 'balance', minimumBalance: '100000' }
]

const tokenBalanceCheck = tokenBalance({tokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f', tokenName: 'Dai', minimumBalance: 5})

const onboard = Onboard({
    //... other options
    walletCheck: [...defaultWalletChecks, tokenBalanceCheck]
})
从“以太网”导入以太网
从“/erc20”导入erc20
函数tokenBalance({tokenAddress,minimumBalance,tokenName}){
让以太提供;
让我们来谈谈合同;
返回异步状态和帮助程序=>{
常数{
钱包:{provider},
地址:,
大数字
}=州和助手;
如果(!合同){
ethersProvider=新的ethers.providers.Web3Provider(提供程序);
tokenContract=新的ethers.Contract(tokenAddress,erc20,ethersProvider);
}
const tokenDecimals=等待tokenContract.decimals();
const divideBy=新的大数(10).pow(小数);
const tokenBalanceResult=等待令牌契约
.余额(地址)
.然后(res=>res.toString());
const tokenBalance=新的BigNumber(tokenBalanceResult).div(divideBy);
if(tokenBalance.lt(最小余额)){
返回{
标题:`Getsome${tokenName}`,
描述:`您至少需要${minimumBalance}${tokenName}才能与此Dapp交互。请向此地址发送更多${tokenName}或切换到另一个${tokenName}余额更高的地址。`,
事件代码:“令牌余额”,
图标:`
`
};
}
};
}
const defaultWalletChecks=[
{checkName:'connect'},
{checkName:'网络'},
{checkName:'余额',minimumBalance:'100000'}
]
const tokenBalanceCheck=tokenBalance({tokenAddress:'0x6b175474e89094c44da98b954eedeac495271d0f',tokenName:'Dai',最小余额:5})
船上常数=船上常数({
//……其他选择
walletCheck:[…默认Walletchecks,tokenBalanceCheck]
})
我得到一个错误:
错误:调用还原异常(method=“balanceOf(address)”,errorSignature=null,errorArgs=[null],reason=null,code=call\u异常,version=abi/5.1.0)

唯一的区别是,我使用的是我从外部获得的erc20 abi格式。我还检查了我的网络和地址是否正确。不知道为什么我会犯这样的错误,所以任何帮助都将不胜感激

当您的智能合约尚未部署时,会发生此错误(CALL_异常)

等待事务结束:

await contract.deployTransaction.wait()

只有在这之后,您才能使用contract做一些事情,以获得它的平衡。

当被调用的地址以意外的格式响应或根本没有响应时,会发生调用异常(通常是因为此地址上没有任何contract)。您能检查一下您在与
0x6b175…
合同存在的同一网络上执行呼叫吗?@PetrHejda谢谢!我在科万测试网络上再次测试,它似乎起了作用。它在主网上不工作。我正在使用DAI在kovan网络上的kovan合同地址和DAI在mainnet上的mainnet合同地址。是的,合同应该存在于各自的网络上。