如何解决从使用 onboard.js 查询钱包数据恢复异常错误
我使用的是 Onboard.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]
})
我收到此错误:
Error: call revert exception (method="balanceOf(address)",errorSignature=null,errorArgs=[null],reason=null,code=CALL_EXCEPTION,version=abi/5.1.0)
唯一的区别是我使用的是从外部获得的 erc20 abi 格式。我还检查了我的网络和地址是否正确。不知道为什么我会收到这个错误,所以任何帮助将不胜感激!
解决方法
当您的智能合约尚未部署时会发生此错误 (CALL_EXCEPTION)。
等待交易结束:
await contract.deployTransaction.wait()
只有在此之后,您才能通过合同做一些事情来获得它的平衡。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。