@qso-soft/shared
Version:
Shared library for QSO-soft
60 lines • 2.15 kB
JavaScript
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