波场中前端调用合约主要有三种方法,在这方面与以太坊相比有了一些改进。在以太坊上ERC20代币的所有ABI都是相同的,所以可以与合约地址结合来调用任意的ERC20代币合约。在波场中稍做了些改动,ABI这个参数成为可选的,以致于衍生出了另外两种方法。具体方法如下所示:
//方法一
let abi = [...];
let instance = await tronWeb.contract(abi,'contractAddress')
let result = await instance.function_name(para1,para2,...).call()
let result2 = await instance.function_name(para1,para2,...).send()
//方法二
可以省略abi这个参数
let instance = await tronWeb.contract().at('contractAddress');
let result = await instance.function_name(para1,para2,...).call()
let result2 = await instance.function_name(para1,para2,...).send()
//方法三
tronWeb.transactionBuilder.triggerConstantContract(contractAddress,functions, options,parameter,issuerAddress)
eg1:
let parameter = []
let transaction = await tronWeb.transactionBuilder.triggerSmartContract("419e62be7f4f103c36507cb2a753418791b1cdc182", "name()", {},
parameter,"417946F66D0FC67924DA0AC9936183AB3B07C81126")
eg2:
let parameter1 = [{type:'uint256',value:100}]
let transaction = await tronWeb.transactionBuilder.triggerSmartContract("419896f9376893d4882fa2375ab1732a943d19f8c2", "getTrxToTokenInputPrice(uint256)", {},parameter1,"412692a1d44cc5a51eefdb8e11e8cd1c20d802e474")
方法二最简略直接,只要有合约的地址就可以调用合约的任意方法,这可方便很多。不过,还是习惯使用方法一,虽略显传统,但也没大错,用起来也顺手。