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

React,Hardhat 前端智能合约方法调用,怎么做?

如何解决React,Hardhat 前端智能合约方法调用,怎么做?

我在本地使用安全帽并启动并运行了 React 前端,但我无法毫无错误调用这些方法

ethers.js 和 web3 都试过了。

这是我的代码和尝试。如果您发现我做错了什么,请告诉我。

我正在尝试通过 web3 与部署在本地安全帽环境中的合约进行交互

我无法从合同中取回数据,这是信息

我有

var list = await contract.methods.getList();
console.log("list ",list );

这让我着迷

list {arguments: Array(0),call: ƒ,send: ƒ,encodeABI: ƒ,estimateGas: ƒ, …}

当我这样做

var list = await contract.methods.getList().call();
console.log("list ",list );

我在浏览器中收到此错误

返回的值无效,是否耗尽了 Gas?如果您没有为从中检索数据的合约使用正确的 ABI、从不存在的块号请求数据或查询未完全同步的节点,您也可能会看到此错误

我愿意:

在控制台中设置:

npx hardhat node
>Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
>Accounts
>========
>...
npx hardhat compile
> nothing to compile
npx hardhat run scripts/deploy.js --network hardhat    

注意:在deploy.js文件中,我做了一个

const list = await contract.getList();
console.log("list",list ); // correctly outputs ["string","string"]

方法

mapping(uint256 => address) internal list;
uint256 internal listCount;

function getList() public override view returns (address[] memory) {
    address[] memory assets = new address[](listCount);

    for (uint256 i = 0; i < listCount; i++) {
      assets[i] = list[i];
    }
    return assets;
}

在响应 App.js 中:

import Contract_from './data/abi/Contract_.json'; // Contract_ is a placer

var contract = new web3.eth.Contract(Contract_,address_given_on_deploy);
var contractAddress = await contract .options.address; // correctly outputs


var list= await contract.methods.getList().call();
console.log("list",list);

如您所见,这不会从方法返回值。我在这里做错了什么?

出于任何原因,可能是问题所在,这是我的配置:

require("@nomiclabs/hardhat-waffle");

// openzeppelin adds
require("@nomiclabs/hardhat-ethers");
require('@openzeppelin/hardhat-upgrades');

//abi
require('hardhat-abi-exporter');



// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts","Prints the list of accounts",async () => {
  const accounts = await ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  networks: {
    hardhat: {
      gas: 12000000,blockGasLimit: 0x1fffffffffffff,allowUnlimitedContractSize: true,timeout: 1800000,chainId: 1337
    }
  },solidity: {
    compilers: [
      {
        version: "0.8.0",settings: {
          optimizer: {
            enabled: true,runs: 1000
          }
        }
      },{
        version: "0.8.2",],},abiExporter: {
    path: './frontend/src/data/abi',clear: true,flat: true,only: [],spacing: 2
  }
}

__

我想也许我会尝试 ethers.js,因为那是我测试的内容,但同样的问题。

无论出于何种原因,我都可以“获取”合约,打印属于它们的方法,但我实际上无法调用这些方法

这是我的 ethers.js 简短说明:

provider = new ethers.providers.Web3Provider(window.ethereum);
if(provider != null){
    const _contract = new ethers.Contract(address,_Contract,provider);
    var list= await _contract.getList().call();
    console.log("list",list);
}

我从中得到的错误是:

Error: call revert exception (method="getList()",errorArgs=null,errorName=null,errorSignature=null,reason=null,code=CALL_EXCEPTION,version=abi/5.4.0)

我在协议中尝试了很多合同,每个合同都是一样的

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?