如何使用tron-web调用契约方法

问题描述 投票:0回答:2

我试图调用一个只返回一串数据的简单契约方法。我的代码基于可以在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:

enter image description here

web3 tron tronweb
2个回答
2
投票

对于任何绊倒同一个初学者错误的人来说,以下是如何解决它:

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

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

之后,您可以调用合同方法

let currentValue = await contract.getBadgeOwner('something is up').call();


-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()
© www.soinside.com 2019 - 2024. All rights reserved.