如何通过调用编码函数来获取智能合约的返回值

时间:2019-12-17 07:39:29

标签: javascript node.js ethereum web3js

我已经对智能合约的功能进行了编码,该功能具有方法ID和参数,即0xf7ea7a3d4000000000000000000015000000000000000000ff7f0000b200000000f7ea7a..............。假设在此编码函数中,还有两个参数,一个是uint,另一个是字符串。这个编码的函数实际上是我的合约的获取者(未更改状态)(在ABI中,其stateMutability = view),并且还返回一个值,即totalSupply。现在,我想通过web3js / nodejs调用此函数,如下所示。如预期的那样,该代码为我提供了交易收据/哈希,但是我有兴趣检索getter函数的返回值,即totalSupply;

try {
    await web3.eth.sendTransaction(
        {
            from: account1,
            to: myContAddr,
            data: myFunc
        }).then(function (res) {
            console.log("Normal Getter", res);
        });
} catch (error) {
    console.log(" Normal Getters: ERROR !");
}

一种可能的解决方案是从给定的编码函数及其参数(但我不知道如何解码参数)中提取函数Signature / methodID(对我来说很简单),然后调用该函数像这样..即

try {
    res = await myContractInstance.methods[myFuncID](????).call({ from: account1 })  // without parameters
    console.log("Getter output", res);
} catch (error) {
    console.log("Getter output: ERROR !", error);
}

所以,我的问题是

  1. 如何从上述编码函数解码参数,以按照我提到的解决方案进行操作(如果我的解决方案正确的话)?
  2. 或者还有其他可行/容易的过程来调用这样的编码(getter)函数吗?

0 个答案:

没有答案