4

我正在尝试调用一个简单的合同方法,它只返回一串数据。我的代码基于文档 => https://developers.tron.network/reference#methodcall中的示例

tronWeb.trx.getContract("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ").then(async contract => {
    console.log(contract);
    let abi = contract.abi;
    console.log(abi);
    let c = await tronWeb.contract({
        abi
    });
    let result = await c.getBadgeOwner('something is up').call();
    console.log(result);
});

与文档中可以找到的不同之处在于,我正在从加载的合同中加载 abi,​​而不是像示例中那样对其进行硬编码。

我得到的错误index.js:105 Uncaught (in promise) TypeError: e.forEach is not a function似乎以某种方式引用了 abi:

在此处输入图像描述

4

3 回答 3

5

对于任何因同样的初学者错误而绊倒的人,以下是解决方法:

使用 contract().at() 而不是 getContract()

let contract = await tronWeb
        .contract()
        .at("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ")

之后,你可以调用你的合约方法就好了

let currentValue = await contract.getBadgeOwner('something is up').call();
于 2019-01-30T09:22:21.917 回答
0
setTimeout(async () => {
   this.myContractOb = await 
   this.tronWeb.contract(myContract).at(this.contractAddress);
},10000);

使用上面的代码和 myContract 作为 ABI json 对象有同样的问题。

于 2020-10-29T05:20:14.577 回答
-1

我以前也犯过同样的错误。这对我有用

async function a (){
        let contract = await tronWeb.contract().at("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ")
        //console.log(contract);
        let currentValue = await contract.getBadgeOwner('something is up').call();
        console.log(currentValue);
}

a()
于 2019-03-12T06:53:46.943 回答