通过web3,solidity,truffle中的call调用视图函数时出错

问题描述

我创建了一个简单的具有getter和setter函数solidity文件。为了通过本地eth区块链[ganache-cli]与智能合约进行交互,我在index.js文件中创建了一个web3和一个合约实例。

我已经测试了两种情况 1]设定资料 2]获取数据。

当我设置数据时,由于它修改函数,因此我使用了send()方法,并且可以正常工作[json响应]。但是,当我与同一合约进行交互以通过call()方法获取数据[视图功能]时,它将无法正常工作。并引发以下错误。我已经浏览了Web3的官方文档,不确定我缺少什么。

感谢任何帮助。

版本 web3@1.3.0 松露@ 5.1.52 solidity@0.6.9

下面是两个文件代码

1] index.js

const Web3 = require('web3');
const MyContract  = require('./build/contracts/MyContract.json');

const somethingBig = async function()   {
    const web3 = new Web3('http://localhost:9545');

    const addr = await web3.eth.getAccounts();
    const defaultAccount = addr[6];

    //This did not work,for some odd reason.
    /* const id = await web3.eth.net.getId();
    const deployednetwork = MyContract.networks[id]; */

    const contract = new web3.eth.Contract(
        MyContract.abi,/* deployednetwork.adddress // Did not work */
        '0x0Aa90eB640104BeCc2ed7f060B043dC18c1A87AD'
    
    );
    
    let sData = await contract.methods.setData(33).send({
        from: defaultAccount,gasPrice: 10000
    });

    let gData = await contract.methods.getData().call({
        from: defaultAccount 
    });
    return gData;
    
};

somethingBig()
    .then((gData) => { console.log(gData); })
    .catch((err) => { console.log('ERROR bro',err.message)});


---- OUTPUT [node index.js]

// ERROR bro 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.

2] MyContract.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.9 <0.8.0;

contract MyContract {
  uint data;
  
  function setData(uint _data) public {
    data = _data;
  }
  function setDataPrivate(uint _data) private {
    data = _data+10;
  }
  function getData() public view  returns(uint)  {
    return data;
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...