UNPKG

@qso-soft/shared

Version:

Shared library for QSO-soft

60 lines 2.15 kB
import { defaultTokenAbi } from '../../clients/abi'; import { MIN_TOKEN_BALANCE_ERROR, SECOND_ADDRESS_EMPTY_ERROR } from '../../constants'; import { calculateAmount, getCurrentBalanceByContract, getFeePerGasOptions, transactionWorker, } from '../../helpers'; export const makeTransferToken = async (params) => { const { gweiRange, minAndMaxAmount, usePercentBalance, wallet, client, contractAddress, logger, minTokenBalance } = params; const { walletClient, explorerLink } = client; const { secondAddress } = wallet; if (!secondAddress) { return { status: 'error', message: SECOND_ADDRESS_EMPTY_ERROR, }; } logger.info(`Transfer tokens to secondAddress [${secondAddress}]`); const { wei: weiBalance, int: intBalance, decimals, isNativeContract, } = await getCurrentBalanceByContract({ client, contractAddress }); const amount = calculateAmount({ balance: weiBalance, minAndMaxAmount, usePercentBalance, decimals, isBigInt: true, }); if (intBalance < minTokenBalance) { return { status: 'warning', message: MIN_TOKEN_BALANCE_ERROR, }; } let txHash; const feeOptions = getFeePerGasOptions(gweiRange); if (isNativeContract) { txHash = await walletClient.sendTransaction({ to: secondAddress, value: amount, data: '0x', ...feeOptions, }); } else { txHash = await walletClient.writeContract({ address: contractAddress, abi: defaultTokenAbi, functionName: 'transfer', args: [secondAddress, amount], ...feeOptions, }); } await client.waitTxReceipt(txHash); return { txHash, explorerLink, status: 'success', }; }; export const execMakeTransferToken = async (params) => transactionWorker({ ...params, startLogMessage: `Execute make transfer tokens by contract [${params.contractAddress}]...`, transactionCallback: makeTransferToken, }); //# sourceMappingURL=transfer-token.js.map