diff --git a/.env.production b/.env.production index 650be63..ba50e11 100644 --- a/.env.production +++ b/.env.production @@ -1,22 +1,23 @@ -REACT_APP_CHAIN_ID = "56" -REACT_APP_GTAG = "GTM-TLF66T4" +REACT_APP_CHAIN_ID = "97" +REACT_APP_GTAG = "GTM-PXLD3XW" # 10+ nodes balanced, US/EU -REACT_APP_NODE_1 = "https://bsc-dataseed1.ninicoin.io" +REACT_APP_NODE_1 = "https://data-seed-prebsc-1-s1.binance.org:8545" # 10+ nodes balanced, US/EU -REACT_APP_NODE_2 = "https://bsc-dataseed1.defibit.io" +REACT_APP_NODE_2 = "https://data-seed-prebsc-1-s1.binance.org:8545" # 10+ nodes balanced in each region, global -REACT_APP_NODE_3 = "https://bsc-dataseed.binance.org" +REACT_APP_NODE_3 = "https://data-seed-prebsc-1-s1.binance.org:8545" REACT_APP_GRAPH_API_PROFILE = "https://api.thegraph.com/subgraphs/name/pancakeswap/profile" REACT_APP_GRAPH_API_PREDICTION = "https://api.thegraph.com/subgraphs/name/pancakeswap/prediction" REACT_APP_GRAPH_API_LOTTERY = "https://api.thegraph.com/subgraphs/name/pancakeswap/lottery" -REACT_APP_SNAPSHOT_BASE_URL = "https://hub.snapshot.page" -REACT_APP_SNAPSHOT_VOTING_API = "https://voting-api.pancakeswap.info/api" +REACT_APP_SNAPSHOT_BASE_URL = "https://testnet.snapshot.org" +REACT_APP_SNAPSHOT_VOTING_API = "https://xtjyd0liqe.execute-api.ap-northeast-1.amazonaws.com/dev/api" + REACT_APP_REQUEST_URL = 'http://101.35.117.69:9090' -# REACT_APP_REQUEST_URL = 'http://192.168.2.210:8080' \ No newline at end of file +# REACT_APP_REQUEST_URL = 'http://192.168.2.210:8080' diff --git a/src/state/boards/fetchBoardsUser.ts b/src/state/boards/fetchBoardsUser.ts index 13e833c..85178a5 100644 --- a/src/state/boards/fetchBoardsUser.ts +++ b/src/state/boards/fetchBoardsUser.ts @@ -9,8 +9,8 @@ import { getBalanceAmount } from 'utils/formatBalance' export const fetchBoardUserAllowances = async (account: string) => { const calls = boardsConfig.map((board) => { const tokenAddresses = getAddress(board.tokenAddresses) - const boardChefAdress = getAddress(board.contractAddress) - return { address: tokenAddresses, name: 'allowance', params: [account, boardChefAdress] } + const boardChefAddress = getAddress(board.contractAddress) + return { address: tokenAddresses, name: 'allowance', params: [account, boardChefAddress] } }) const rawLpAllowances = await multicall(erc20ABI, calls) @@ -40,15 +40,15 @@ export const fetchBoardUserTokenBalances = async (account: string) => { export const fetchBoardUserInfo = async (account: string) => { const data = await Promise.all( boardsConfig.map(async (board) => { - const boardChefAdress = getAddress(board.contractAddress) + const boardChefAddress = getAddress(board.contractAddress) const calls = [ { - address: boardChefAdress, + address: boardChefAddress, name: 'userInfo', params: [account], }, { - address: boardChefAdress, + address: boardChefAddress, name: 'pendingHCC', params: [account], }, diff --git a/src/types/referral.ts b/src/types/referral.ts index 43cecd0..1aa1ea1 100644 --- a/src/types/referral.ts +++ b/src/types/referral.ts @@ -8,7 +8,14 @@ export interface ReferralConfigInfo { dividendSecond?: number receiveLimit?: number id?: number - properties?: Record + properties?: { + cover?: string + name?: string + price?: { + HCC: string + USDT: string + } + } type?: string } diff --git a/src/utils/calls/boards.ts b/src/utils/calls/boards.ts index db16f3b..f4b1e39 100644 --- a/src/utils/calls/boards.ts +++ b/src/utils/calls/boards.ts @@ -18,8 +18,8 @@ export const unstakeBoard = async (masterChefContract) => { return receipt.status } -export const harvestBoard = async (masterChefContract, pid) => { - const tx = await masterChefContract.harvest(pid, '0', options) +export const harvestBoard = async (masterChefContract) => { + const tx = await masterChefContract.harvest(options) const receipt = await tx.wait() return receipt.status } diff --git a/src/views/Board/components/BoardCard/CardActionsContainer.tsx b/src/views/Board/components/BoardCard/CardActionsContainer.tsx index 8a9de5f..cf28182 100644 --- a/src/views/Board/components/BoardCard/CardActionsContainer.tsx +++ b/src/views/Board/components/BoardCard/CardActionsContainer.tsx @@ -13,6 +13,7 @@ import { useERC20 } from 'hooks/useContract' import UnlockButton from 'components/UnlockButton' import useApproveBoard from '../../hooks/useApproveBoard' import StakeAction from './StakeAction' +import HarvestAction from './HarvestAction' const Action = styled.div` padding-top: 16px; @@ -57,14 +58,10 @@ const CardActions: React.FC = ({ board, account }) => { - - - {t('TotalProfit')} - - - - {getBalanceNumber(new BigNumber(estimatedProfit))} + + {t('TotalProfit')} + ) : ( diff --git a/src/views/Board/components/BoardCard/HarvestAction.tsx b/src/views/Board/components/BoardCard/HarvestAction.tsx new file mode 100644 index 0000000..4bd79e6 --- /dev/null +++ b/src/views/Board/components/BoardCard/HarvestAction.tsx @@ -0,0 +1,69 @@ +import React, { useState } from 'react' +import BigNumber from 'bignumber.js' +import { Button, Flex, Heading } from '@pancakeswap/uikit' +import { useTranslation } from 'contexts/Localization' +import { useAppDispatch } from 'state' +import { fetchFarmUserDataAsync } from 'state/farms' +import useToast from 'hooks/useToast' +import { getBalanceAmount } from 'utils/formatBalance' +import { BIG_ZERO } from 'utils/bigNumber' +import { useWeb3React } from '@web3-react/core' +import { usePriceCakeBusd } from 'state/hooks' +import Balance from 'components/Balance' +import { TOKEN_SYMBOL } from 'config/index' +import useHarvestBoard from '../../hooks/useHarvestBoard' + +interface FarmCardActionsProps { + earnings?: BigNumber + pid?: number +} + +const HarvestAction: React.FC = ({ earnings, pid }) => { + const { account } = useWeb3React() + const { toastSuccess, toastError } = useToast() + const { t } = useTranslation() + const [pendingTx, setPendingTx] = useState(false) + const { onReward } = useHarvestBoard(pid) + const cakePrice = usePriceCakeBusd() + const dispatch = useAppDispatch() + const rawEarningsBalance = account ? getBalanceAmount(earnings) : BIG_ZERO + const displayBalance = rawEarningsBalance.toFixed(3, BigNumber.ROUND_DOWN) + const earningsBusd = rawEarningsBalance ? rawEarningsBalance.multipliedBy(cakePrice).toNumber() : 0 + + return ( + + + {displayBalance} + {earningsBusd > 0 && ( + + )} + + + + ) +} + +export default HarvestAction diff --git a/src/views/Board/hooks/useHarvestBoard.ts b/src/views/Board/hooks/useHarvestBoard.ts index 5c003fe..bb80117 100644 --- a/src/views/Board/hooks/useHarvestBoard.ts +++ b/src/views/Board/hooks/useHarvestBoard.ts @@ -6,7 +6,7 @@ const useHarvestBoard = (boardPid: number) => { const boardChefContract = useBoardchef(boardPid) const handleHarvest = useCallback(async () => { - await harvestBoard(boardChefContract, boardPid) + await harvestBoard(boardChefContract) }, [boardPid, boardChefContract]) return { onReward: handleHarvest } diff --git a/src/views/Referral/components/BuyActions.tsx b/src/views/Referral/components/BuyActions.tsx index 950f259..39dae44 100644 --- a/src/views/Referral/components/BuyActions.tsx +++ b/src/views/Referral/components/BuyActions.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react' -import { Flex, Button, Modal, Image } from '@pancakeswap/uikit' +import { Flex, Button } from '@pancakeswap/uikit' import styled from 'styled-components' import { useTranslation } from 'contexts/Localization' import { useAccount } from 'state/userInfo/hooks' @@ -10,6 +10,7 @@ import useToast from 'hooks/useToast' import { checkBuyResult } from 'services/referral' import useRefresh from 'hooks/useRefresh' import tokens from 'config/constants/tokens' +import { useReferralCommanderConfigInfo } from 'state/referral/hooks' import { useCheckTokenBalance, useApproveReferral, useBuyTransaction } from '../hooks' const Btn = styled(Button)` @@ -22,6 +23,7 @@ const Btn = styled(Button)` const BuyActions: React.FC = () => { const { t } = useTranslation() const account = useAccount() + const referralCommanderConfigInfo = useReferralCommanderConfigInfo() const [allowanceList, setAllowanceList] = useState({ usdt: 0, hcc: 0 }) const usdtContract = useERC20(getAddress(tokens.usdt.address)) const [loading, setLoading] = useState(false) @@ -32,6 +34,7 @@ const BuyActions: React.FC = () => { const { onApprove: onUsdtApprove } = useApproveReferral(usdtContract) const { onApprove: onHccApprove } = useApproveReferral(hccContract) const buyTransaction = useBuyTransaction() + const [onCheckBalance] = useCheckTokenBalance() const handleApprove = async (approve) => { try { setLoading(true) @@ -52,8 +55,16 @@ const BuyActions: React.FC = () => { const handleBuy = async () => { setLoading(true) try { - const res = await buyTransaction() - setTxId(res.hash) + const enoughBalance = onCheckBalance( + referralCommanderConfigInfo.properties?.price?.HCC, + referralCommanderConfigInfo.properties?.price?.USDT, + ) + if (enoughBalance) { + const res = await buyTransaction() + setTxId(res.hash) + } else { + setLoading(false) + } } catch (e: any) { setLoading(false) toastError(e?.error?.message || e.message) diff --git a/src/views/Referral/components/Regimental.tsx b/src/views/Referral/components/Regimental.tsx index 5c3bc6b..7873fb6 100644 --- a/src/views/Referral/components/Regimental.tsx +++ b/src/views/Referral/components/Regimental.tsx @@ -88,10 +88,10 @@ const RegimentalCom: React.FC = () => { - {referralCommanderConfigInfo.properties.name} + {referralCommanderConfigInfo?.properties?.name} - + {/* */} diff --git a/src/views/Referral/hooks/index.ts b/src/views/Referral/hooks/index.ts index c30ef9d..4283a47 100644 --- a/src/views/Referral/hooks/index.ts +++ b/src/views/Referral/hooks/index.ts @@ -9,21 +9,20 @@ import { ethers, Contract } from 'ethers' import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance' import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral' -export const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => { +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 ( - (isHcc && getBalanceNumber(hccTokenBalance) === hccAmount) || - (isUsdt && getBalanceNumber(usdtTokenBalance) === usdtAmount) - ) { + if (getBalanceNumber(hccTokenBalance) <= hccAmount || getBalanceNumber(usdtTokenBalance) <= usdtAmount) { toastWarning(t('Insufficient Balance')) + return false } + return true }, - [isBnb, isHcc, isUsdt], + [usdtTokenBalance, hccTokenBalance], ) return [onCheck] } diff --git a/src/views/Referral/index.tsx b/src/views/Referral/index.tsx index 1eec00b..7484254 100644 --- a/src/views/Referral/index.tsx +++ b/src/views/Referral/index.tsx @@ -41,8 +41,6 @@ const Nft: React.FC = () => { const account = useAccount() const referralIsCommander = useReferralIsCommander() - // const referralIsCommander = false - console.log('referralIsCommander:', referralIsCommander) useEffect(() => { dispatch(fetchReferralInfoAsync(account)) }, [account])