【问题标题】:No result is happening for this Web3.js call此 Web3.js 调用没有结果
【发布时间】:2021-05-29 07:24:22
【问题描述】:
const fs = require('fs')
const web3 = new Web3("ws://localhost:7545");


const contract_address = "0x7484d32e8911817702c5d7c764dBF7e592000b415";


async function web3Contract() {
    const contract_abi = fs.readFileSync('./build/contracts/Bottle.json', 'utf8')
    const abi = JSON.parse(contract_abi).abi;
    // console.log(abi);
    const Bottle = await new web3.eth.Contract(abi, contract_address);
    const accounts = await web3.eth.getAccounts();
    await Bottle.methods.setName("Palm").send({from:accounts[0]});
    const greeting = await Bottle.methods.getGreeting().call();

    console.log(greeting);
    });
}

async function run() {
    try {
        await web3Contract();
    } catch (err) {
        console.log('Your error is this - ' , err);
    } finally {
        console.log('finally');
    }
}

run(); 

getGreeting().call() 给了我这个错误。我尝试了许多不同的方法并在这里停留了几个小时。不知道该怎么做。 https://gyazo.com/81970d03c1380cd513998f25deef9e40

【问题讨论】:

    标签: javascript solidity web3js


    【解决方案1】:

    您错误地组合了 await 和回调函数(在您的情况下为 function(result) {})。

    由于你使用await,它永远不会到达回调函数,返回的Promiseawait语句解析。

    在您的代码上下文中,从await 返回值然后打印它更有意义。

    // remove the callback function
    const greeting = await Bottle.methods.getGreeting.call();
    console.log(greeting);
    

    【讨论】:

    • 嘿,谢谢您的宝贵时间。我编辑了我的代码,现在它给了我这个新错误。
    • 新错误与原始问题无关(不打印输出)。调用可能会因多种原因而恢复,包括:1)被调用地址上没有合约,2)ABI 不正确(无法解析返回值),3)合约抛出异常(require() 语句失败,不允许的算术运算,由于任何原因 1-3 导致对其他合约的内部调用失败,...)。请提出一个单独的问题,在其中显示重现问题的步骤,包括合同源代码的相关部分,并验证您在正确的地址上调用它等。
    • 我在 ganache 中进行了验证,它显示了正在处理的交易。地址也是正确的。 ABI 也是正确的,因为我可以 console.log 它就好了,它会显示 json。此外,如果我只使用 getGreeting.call() 而不是 getGreeting().call() 它将返回合同的一个大对象。
    猜你喜欢
    • 2017-10-18
    • 2019-08-27
    • 2018-08-18
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多