我试图调用一个只返回一串数据的简单契约方法。我的代码基于可以在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:
对于任何绊倒同一个初学者错误的人来说,以下是如何解决它:
使用contract()。at()而不是getContract()
let contract = await tronWeb
.contract()
.at("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ")
之后,您可以调用合同方法
let currentValue = await contract.getBadgeOwner('something is up').call();
我以前做过同样的错误。这适合我
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()