微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Solidity - Web3 智能合约交互 ABI

如何解决Solidity - Web3 智能合约交互 ABI

目前我正在尝试使用 web3.js(GRAPH 令牌)从智能合约中读取基本信息:

https://etherscan.io/address/0xc944e90c64b2c07662a292be6244bdf05cda44a7#code

这是我的超级简单的 react web3.js 设置:

import Web3 from 'web3';

...

useEffect(() => {
    const start = async () => {
        const web3 = new Web3('https://bsc-dataseed1.binance.org:443')
        const abi = [{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"name":"spender",{"indexed":false,"internalType":"uint256","name":"value","name":"Approval","type":"event"},"name":"account","type":"address"}],"name":"Minteradded","name":"MinterRemoved","name":"from","name":"to","name":"NewOwnership","name":"NewPendingOwnership","name":"Transfer",{"inputs":[],"name":"acceptOwnership","outputs":[],"type":"function"},{"inputs":[{"internalType":"address","name":"_account","name":"addMinter",{"internalType":"address","name":"allowance","outputs":[{"internalType":"uint256","name":"","stateMutability":"view",{"internalType":"uint256","name":"amount","name":"approve","outputs":[{"internalType":"bool","type":"bool"}],"name":"balanceOf",{"inputs":[{"internalType":"uint256","name":"burn","name":"burnFrom","name":"decimals","outputs":[{"internalType":"uint8","type":"uint8"}],"name":"subtractedValue","name":"decreaseAllowance","name":"governor","outputs":[{"internalType":"address","name":"addedValue","name":"increaseAllowance","name":"isMinter","name":"_to","name":"_amount","name":"mint","name":"name","outputs":[{"internalType":"string","type":"string"}],"name":"nonces","name":"pendingGovernor","name":"_owner","name":"_spender","name":"_value","type":"uint256"},"name":"_deadline",{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},"name":"_s","type":"bytes32"}],"name":"permit","name":"removeMinter","name":"renounceMinter","name":"symbol","name":"totalSupply","name":"recipient","name":"transfer","name":"sender","name":"transferFrom","name":"_newGovernor","name":"transferOwnership","type":"function"}]
        const address = '0xc944E90C64B2c07662A292be6244BDf05Cda44a7'
        const contract = new web3.eth.Contract(abi,address)
        console.log(contract);
        const i = await contract.methods.getName().call()
        console.log(i); // => ERROR
    }
    start()
},[])

它抛出错误

Error: Returned values aren't valid,did it run Out of Gas? You might also see this error if you are not using the correct ABI for the contract you are retrieving data from,requesting data from a block number that does not exist,or querying a node which is not fully synced.

这是一个已知的误导性错误,通常意味着地址或合同 abi 无效,但我确认它是正确的。

我研究了这个错误两天,但没有设法解决这个问题......有什么建议吗?

谢谢!

解决方法

您正在尝试使用 BSC(币安智能链)Web3 提供商(在您的情况下为 https://bsc-dataseed1.binance.org:443)与以太坊合约进行交互。这导致尝试在 BSC address(不包含任何合约)上调用 getName() 函数。

以太坊和 BSC 是不同的网络,彼此无关。

解决方案:使用以太坊主网提供商(例如广泛使用的 Infura)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。