【问题标题】:Error: You must provide the json interface of the contract when instantiating a contract object错误:实例化合约对象时必须提供合约的json接口
【发布时间】:2021-04-02 06:08:19
【问题描述】:
const Web3 = require('web3');
const web3 = new Web3('http://foodchain-node1.etherhost.org:22001');
const CONTRACT_ADDRESS = "0xA4fafbE0ea4823e262b4916EF93CC5A6306A5DBc";

async function eventQuery(){
    'use strict';
    var fs = require('fs');
    var data = fs.readFileSync('food3.abi', 'utf-8');
    //console.log(data);
    //console.log(typeof JSON.parse(data).interface)
    const CONTRACT_ABI = JSON.parse(data);
    const contract = new web3.eth.Contract(CONTRACT_ABI, CONTRACT_ADDRESS);
    const START_BLOCK = 7700000;
    const END_BLOCK = 7701000;
    contract.getPastEvents("FoodSection",
        {                               
            fromBlock: START_BLOCK,     
            toBlock: END_BLOCK     
        })                              
    .then(events => console.log(events))
    .catch((err) => console.error(err));
}

eventQuery();

我创建了这段代码,每次运行它都会返回错误 “错误:实例化合约对象时必须提供合约的json接口。” 我猜它与'food3.abi'文件的json解析有关,但我不知道如何纠正它。 有人可以告诉我我的错误是什么以及如何解决它吗?

【问题讨论】:

    标签: node.js json web3js


    【解决方案1】:

    我尝试运行您的示例,但没有收到错误,因此您拥有的 food3.abi 文件可能存在问题(例如,如果您从某个地方复制粘贴 ABI,您可能错过了 [])。

    这是我遵循的步骤。也许它也对你有用。

    1. 安装solcnpm install -g solc
    2. 编译合约solcjs --abi contract.sol。这将在同一文件夹中创建一个contract_sol_contract.abi 文件
    3. fs.readFileSync()语句中使用生成的abi文件

    【讨论】:

    • 也许更多关于如何生成 food3.abi 文件的信息会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2022-09-30
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多