Как вызвать метод контракта с помощью tron-web
Я пытаюсь вызвать простой метод контракта, который просто возвращает строку данных. Я основал свой код на примере, который можно найти в docs => https://developers.tron.network/reference
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
который, кажется, относится к аби как-то:
1 ответ
Для тех, кто споткнулся о ту же ошибку новичка, вот как ее решить:
Используйте contract(). At () вместо getContract()
let contract = await tronWeb
.contract()
.at("TFWbGYFVjUMKrHALdU4MnFWNYY9Uc5W9SZ")
После этого вы можете нормально вызывать методы контракта.
let currentValue = await contract.getBadgeOwner('something is up').call();
setTimeout(async () => {
this.myContractOb = await
this.tronWeb.contract(myContract).at(this.contractAddress);
},10000);
Использование приведенного выше кода с myContract в качестве объекта ABI json, имеющего ту же проблему.
Я делал ту же ошибку раньше. Это работает для меня
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()