我正在尝试调用一个仅返回数据字符串的简单协定方法。我的代码基于可在docs => 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:
答案 0 :(得分:1)
对于任何因相同的初学者错误而绊倒的人,以下是解决方法:
使用contract()。at()代替getContract()
let contract = await tronWeb
.contract()
.at("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ")
在那之后,您可以很好地调用合同方法
let currentValue = await contract.getBadgeOwner('something is up').call();
答案 1 :(得分:0)
我之前在犯同样的错误。这对我有用
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()
答案 2 :(得分:0)
setTimeout(async () => {
this.myContractOb = await
this.tronWeb.contract(myContract).at(this.contractAddress);
},10000);
将上述代码与myContract一起用作具有相同问题的ABI json对象。