Как вызвать метод контракта с помощью 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()
Другие вопросы по тегам