import { TronWeb, providers } from 'tronweb'
import getBridgeConfigs from './getBridgeConfigs'
export const callTronBridgeContract = async (
{
token,
amount,
commitmentId,
tronWalletAddress
}) => {
// See API Integration -> Fetch Bridge Configs for the full implementation
const configs = await getBridgeConfigs()
const chainConfig = configs[chain]
// Replace with your wallet implementation
const tronWeb = new TronWeb({
fullHost: new providers.HttpProvider('https://api.shasta.trongrid.io'),
// headers: { "TRON-PRO-API-KEY": 'your api key' }, -- if using a custom RPC
privateKey: TRON_PRIVATE_KEY
})
const tokenConfig = chainConfig.tokens[token]
const amountWithDecimals = +amount * 10 ** tokenConfig.decimals
const tokenAddress = tokenConfig.address
const bridgeContractAddress = chainConfig.contractAddress
const {
abi
} = await tronWeb.trx.getContract(tokenAddress);
const trc20Contract = tronWeb.contract(abi.entrys, tokenAddress);
const allowance = await trc20Contract.allowance(tronWalletAddress, bridgeContractAddress).call();
const formattedAllowance = parseInt(allowance, 10) / 10 ** tokenConfig.decimals;
if (formattedAllowance < parseFloat(amount)) {
await trc20Contract.approve(bridgeContractAddress, amountWithDecimals).send()
}
const {
abi: bridgeAbi
} = await tronWeb.trx.getContract(bridgeContractAddress);
const contract = tronWeb.contract(bridgeAbi, bridgeContractAddress)
const tx = await contract.depositWithId(tokenAddress, amountWithDecimals, `0x${commitmentId}`).send({shouldPollResponse: true})
return tx
}