70 lines
2.5 KiB
TypeScript
70 lines
2.5 KiB
TypeScript
import { useState, useCallback } from 'react'
|
|
import { useReferralchef, useReferralRewardchef } from 'hooks/useContract'
|
|
import useTokenBalance from 'hooks/useTokenBalance'
|
|
import { getAddress, getReferralAddress } from 'utils/addressHelpers'
|
|
import tokensList from 'config/constants/tokens'
|
|
import useToast from 'hooks/useToast'
|
|
import { useTranslation } from 'contexts/Localization'
|
|
import { ethers, Contract } from 'ethers'
|
|
import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance'
|
|
import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral'
|
|
|
|
export const useCheckTokenBalance = () => {
|
|
const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address))
|
|
const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address))
|
|
const { toastWarning } = useToast()
|
|
const { t } = useTranslation()
|
|
const onCheck = useCallback(
|
|
(hccAmount, usdtAmount) => {
|
|
if (getBalanceNumber(hccTokenBalance) <= hccAmount || getBalanceNumber(usdtTokenBalance) <= usdtAmount) {
|
|
toastWarning(t('Insufficient Balance'))
|
|
return false
|
|
}
|
|
return true
|
|
},
|
|
[usdtTokenBalance, hccTokenBalance],
|
|
)
|
|
return [onCheck]
|
|
}
|
|
|
|
export const useBuyTransaction = () => {
|
|
const referralContract = useReferralchef()
|
|
const transaction = async () => {
|
|
const data = await getBuyReferralParams()
|
|
const { to, hccPrice, otherPaymentPrice, timestamp, code, sign } = data
|
|
const params = [to, hccPrice, otherPaymentPrice, timestamp, code, sign]
|
|
const res = await referralContract.mint(...params)
|
|
return res
|
|
}
|
|
return transaction
|
|
}
|
|
|
|
export const useWithdraw = () => {
|
|
const referralRewardContract = useReferralRewardchef()
|
|
const transaction = async () => {
|
|
const data = await getWithdrawRewardParams()
|
|
const { address, receive, timestamp, sign } = data
|
|
const params = [address, receive, timestamp, sign]
|
|
const price = getDecimalAmountNumber(receive)
|
|
const res = await referralRewardContract.withDrawReward(...params, { value: price })
|
|
return res
|
|
}
|
|
return transaction
|
|
}
|
|
|
|
export const useApproveReferral = (tokenContract: Contract) => {
|
|
const handleApprove = useCallback(async () => {
|
|
try {
|
|
const tx = await tokenContract.approve(getReferralAddress(), ethers.constants.MaxUint256)
|
|
const receipt = await tx.wait()
|
|
return receipt.status
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
}, [tokenContract])
|
|
|
|
return { onApprove: handleApprove }
|
|
}
|
|
|
|
export default useCheckTokenBalance
|