diff --git a/src/hooks/actionHooks/useAddCollateral.ts b/src/hooks/actionHooks/useAddCollateral.ts index a7a289cbd..a0893c950 100644 --- a/src/hooks/actionHooks/useAddCollateral.ts +++ b/src/hooks/actionHooks/useAddCollateral.ts @@ -35,7 +35,7 @@ export const useAddCollateral = () => { const { wrapAsset } = useWrapUnwrapAsset(); const { addEth } = useAddRemoveEth(); - const {isActionAllowed} = useAllowAction(); + const { isActionAllowed } = useAllowAction(); const { refetch: refetchBaseBal } = useBalance({ address: account, @@ -48,7 +48,8 @@ export const useAddCollateral = () => { const addCollateral = async (vault: IVault | undefined, input: string) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.ADD_COLLATERAL)) return; // return if action is not allowed + if (!selectedSeries) return console.error('No series selected'); + if (!isActionAllowed(ActionCodes.ADD_COLLATERAL, selectedSeries)) return; // return if action is not allowed /* use the vault id provided OR 0 if new/ not provided */ const vaultId = vault?.id || BLANK_VAULT; @@ -143,9 +144,10 @@ export const useAddCollateral = () => { ]; /* TRANSACT */ - // await transact(calls, txCode); - toast.warn('Transactions via the UI have been paused due to a reported issue. All funds are safe. Please follow our Twitter account for more information.') - + // await transact(calls, txCode); + toast.warn( + 'Transactions via the UI have been paused due to a reported issue. All funds are safe. Please follow our Twitter account for more information.' + ); /* then update UI */ refetchBaseBal(); diff --git a/src/hooks/actionHooks/useAddLiquidity.ts b/src/hooks/actionHooks/useAddLiquidity.ts index 19c652888..b0c38e216 100644 --- a/src/hooks/actionHooks/useAddLiquidity.ts +++ b/src/hooks/actionHooks/useAddLiquidity.ts @@ -51,7 +51,7 @@ export const useAddLiquidity = () => { historyActions: { updateStrategyHistory }, } = useContext(HistoryContext); - const {isActionAllowed} = useAllowAction(); + const { isActionAllowed } = useAllowAction(); const { addEth } = useAddRemoveEth(); const { getTimeTillMaturity } = useTimeTillMaturity(); @@ -71,7 +71,8 @@ export const useAddLiquidity = () => { matchingVault: IVault | undefined = undefined ) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.ADD_LIQUIDITY)) return; // return if action is not allowed + if (!strategy.currentSeries) return console.error('No current series for strategy', strategy.id); + if (!isActionAllowed(ActionCodes.ADD_LIQUIDITY, strategy.currentSeries)) return; // return if action is not allowed const txCode = getTxCode(ActionCodes.ADD_LIQUIDITY, strategy.id); diff --git a/src/hooks/actionHooks/useBorrow.ts b/src/hooks/actionHooks/useBorrow.ts index a9104bce1..459d6feb5 100644 --- a/src/hooks/actionHooks/useBorrow.ts +++ b/src/hooks/actionHooks/useBorrow.ts @@ -48,12 +48,12 @@ export const useBorrow = () => { const { sign, transact } = useChain(); const { getTimeTillMaturity } = useTimeTillMaturity(); - const {isActionAllowed} = useAllowAction(); + const { isActionAllowed } = useAllowAction(); const borrow = async (vault: IVault | undefined, input: string | undefined, collInput: string | undefined) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.BORROW)) return; // return if action is not allowed - + if (!selectedSeries) return console.error('No series selected'); + if (!isActionAllowed(ActionCodes.BORROW, selectedSeries)) return; // return if action is not allowed /* generate the reproducible txCode for tx tracking and tracing */ const txCode = getTxCode(ActionCodes.BORROW, selectedSeries?.id!); diff --git a/src/hooks/actionHooks/useClaimRewards.ts b/src/hooks/actionHooks/useClaimRewards.ts index 5911c0b8d..525dd68c8 100644 --- a/src/hooks/actionHooks/useClaimRewards.ts +++ b/src/hooks/actionHooks/useClaimRewards.ts @@ -2,17 +2,16 @@ import { formatUnits } from 'ethers/lib/utils'; import { useCallback, useContext, useEffect, useState } from 'react'; import { TxContext } from '../../contexts/TxContext'; import { UserContext } from '../../contexts/UserContext'; -import { ActionCodes, IAsset, IStrategy} from '../../types'; +import { ActionCodes, IAsset, IStrategy } from '../../types'; import { useSigner, useAccount } from 'wagmi'; import useAccountPlus from '../useAccountPlus'; import useAllowAction from '../useAllowAction'; const useClaimRewards = (strategy: IStrategy | undefined) => { - const { data: signer, isError, isLoading } = useSigner(); - const { address:account } = useAccountPlus(); - const {isActionAllowed} = useAllowAction(); + const { address: account } = useAccountPlus(); + const { isActionAllowed } = useAllowAction(); const { userState, userActions } = useContext(UserContext); const { assetMap } = userState; @@ -27,13 +26,11 @@ const useClaimRewards = (strategy: IStrategy | undefined) => { const [rewardsToken, setRewardsToken] = useState(); const claimRewards = async () => { - if (!account) throw new Error('no account detected when claiming rewards'); if (!signer) throw new Error('no signer detected when claiming rewards'); if (!strategy) throw new Error('no strategy detected when claiming rewards'); - - if (!isActionAllowed(ActionCodes.CLAIM_REWARDS)) return; // return if action is not allowed - + if (!strategy.currentSeries) return console.error('No series selected'); + if (!isActionAllowed(ActionCodes.CLAIM_REWARDS, strategy.currentSeries)) return; // return if action is not allowed const claim = async () => await strategy.strategyContract.connect(signer).claim(account); diff --git a/src/hooks/actionHooks/useClosePosition.ts b/src/hooks/actionHooks/useClosePosition.ts index 6afd29ef7..7f6f560db 100644 --- a/src/hooks/actionHooks/useClosePosition.ts +++ b/src/hooks/actionHooks/useClosePosition.ts @@ -53,7 +53,7 @@ export const useClosePosition = () => { getValuesFromNetwork: boolean = true // get market values by network call or offline calc (default: NETWORK) ) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.CLOSE_POSITION)) return; // return if action is not allowed + if (!isActionAllowed(ActionCodes.CLOSE_POSITION, series)) return; // return if action is not allowed const txCode = getTxCode(ActionCodes.CLOSE_POSITION, series.id); const base = assetMap?.get(series.baseId)!; diff --git a/src/hooks/actionHooks/useLend.ts b/src/hooks/actionHooks/useLend.ts index 18aaf4c24..8f5572f9d 100644 --- a/src/hooks/actionHooks/useLend.ts +++ b/src/hooks/actionHooks/useLend.ts @@ -48,8 +48,7 @@ export const useLend = () => { const lend = async (input: string | undefined, series: ISeries) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.LEND)) return; // return if action is not allowed - + if (!isActionAllowed(ActionCodes.LEND, series)) return; // return if action is not allowed /* generate the reproducible txCode for tx tracking and tracing */ const txCode = getTxCode(ActionCodes.LEND, series.id); diff --git a/src/hooks/actionHooks/useRemoveCollateral.ts b/src/hooks/actionHooks/useRemoveCollateral.ts index 5b61bebab..d73e27668 100644 --- a/src/hooks/actionHooks/useRemoveCollateral.ts +++ b/src/hooks/actionHooks/useRemoveCollateral.ts @@ -18,7 +18,7 @@ import useAllowAction from '../useAllowAction'; export const useRemoveCollateral = () => { const { userState, userActions } = useContext(UserContext); - const { selectedIlk, assetMap } = userState; + const { selectedIlk, assetMap, selectedSeries } = userState; const { address: account } = useAccountPlus(); const { chain } = useNetwork(); const provider = useProvider(); @@ -40,8 +40,8 @@ export const useRemoveCollateral = () => { const removeCollateral = async (vault: IVault, input: string, unwrapOnRemove: boolean = true) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.REMOVE_COLLATERAL)) return; // return if action is not allowed - + if (!selectedSeries) return console.error('No selected series'); + if (!isActionAllowed(ActionCodes.REMOVE_COLLATERAL, selectedSeries)) return; // return if action is not allowed /* generate the txCode for tx tracking and tracing */ const txCode = getTxCode(ActionCodes.REMOVE_COLLATERAL, vault.id); diff --git a/src/hooks/actionHooks/useRepayDebt.ts b/src/hooks/actionHooks/useRepayDebt.ts index eaca59a12..495accb4a 100644 --- a/src/hooks/actionHooks/useRepayDebt.ts +++ b/src/hooks/actionHooks/useRepayDebt.ts @@ -47,7 +47,7 @@ export const useRepayDebt = () => { const { getTimeTillMaturity, isMature } = useTimeTillMaturity(); const chainId = useChainId(); - const {isActionAllowed} = useAllowAction(); + const { isActionAllowed } = useAllowAction(); /** * REPAY FN @@ -56,17 +56,17 @@ export const useRepayDebt = () => { * @param reclaimCollateral */ const repay = async (vault: IVault, input: string | undefined, reclaimCollateral: boolean) => { - if (!contracts) return; - + const txCode = getTxCode(ActionCodes.REPAY, vault.id); const ladleAddress = contracts.get(ContractNames.LADLE)?.address; - const series: ISeries = seriesMap?.get(vault.seriesId)!; + const series = seriesMap?.get(vault.seriesId); + if (!series) return console.error('Series not found'); const base: IAsset = assetMap?.get(vault.baseId)!; const ilk: IAsset = assetMap?.get(vault.ilkId)!; - if (!isActionAllowed(ActionCodes.REPAY, series )) return; // return if action is not allowed + if (!isActionAllowed(ActionCodes.REPAY, series)) return; // return if action is not allowed const isEthCollateral = ETH_BASED_ASSETS.includes(vault.ilkId); const isEthBase = ETH_BASED_ASSETS.includes(series.baseId); @@ -79,22 +79,23 @@ export const useRepayDebt = () => { const cleanInput = cleanValue(input, base.decimals); const _input = input ? ethers.utils.parseUnits(cleanInput, base.decimals) : ethers.constants.Zero; - const _maxSharesIn = series.sharesReserves.eq(ZERO_BN) ? ZERO_BN - : maxBaseIn( - series.sharesReserves, - series.fyTokenReserves, - getTimeTillMaturity(series.maturity), - series.ts, - series.g1, - series.decimals, - series.c, - series.mu - ); + const _maxSharesIn = series.sharesReserves.eq(ZERO_BN) + ? ZERO_BN + : maxBaseIn( + series.sharesReserves, + series.fyTokenReserves, + getTimeTillMaturity(series.maturity), + series.ts, + series.g1, + series.decimals, + series.c, + series.mu + ); /* Check if the trade of that size is possible */ - const tradeIsNotPossible = series.getShares(_input).gt(_maxSharesIn); + const tradeIsNotPossible = series.getShares(_input).gt(_maxSharesIn); - diagnostics && tradeIsNotPossible ? console.log('Trade is not possible:'): console.log('Trade is possible:') + diagnostics && tradeIsNotPossible ? console.log('Trade is not possible:') : console.log('Trade is possible:'); diagnostics && tradeIsNotPossible && console.log('Trade input', _input.toString()); diagnostics && tradeIsNotPossible && console.log('TradeMax base in:', _maxSharesIn.toString()); @@ -221,7 +222,6 @@ export const useRepayDebt = () => { ...removeEthCallData, ...unwrapAssetCallData, - ]; await transact(calls, txCode); diff --git a/src/hooks/actionHooks/useRollDebt.ts b/src/hooks/actionHooks/useRollDebt.ts index d45ac07a8..8d2ae8cdc 100644 --- a/src/hooks/actionHooks/useRollDebt.ts +++ b/src/hooks/actionHooks/useRollDebt.ts @@ -21,13 +21,13 @@ export const useRollDebt = () => { const { isActionAllowed } = useAllowAction(); const rollDebt = async (vault: IVault, toSeries: ISeries) => { - - if (!isActionAllowed(ActionCodes.ROLL_DEBT)) return; // return if action is not allowed + const fromSeries = seriesMap?.get(vault.seriesId); + if (!fromSeries) return console.error('No series selected'); + if (!isActionAllowed(ActionCodes.ROLL_DEBT, fromSeries)) return; // return if action is not allowed const txCode = getTxCode(ActionCodes.ROLL_DEBT, vault.id); const base = assetMap?.get(vault.baseId); const hasDebt = vault.accruedArt.gt(ZERO_BN); - const fromSeries = seriesMap?.get(vault.seriesId); const calls: ICallData[] = [ { diff --git a/src/hooks/actionHooks/useRollPosition.ts b/src/hooks/actionHooks/useRollPosition.ts index fcfc6cf81..10be6e1f0 100644 --- a/src/hooks/actionHooks/useRollPosition.ts +++ b/src/hooks/actionHooks/useRollPosition.ts @@ -46,7 +46,7 @@ export const useRollPosition = () => { */ const rollPosition = async (input: string | undefined, fromSeries: ISeries, toSeries: ISeries) => { if (!contracts) return; - if (!isActionAllowed(ActionCodes.ROLL_POSITION)) return; // return if action is not allowed + if (!isActionAllowed(ActionCodes.ROLL_POSITION, fromSeries)) return; // return if action is not allowed /* generate the reproducible txCode for tx tracking and tracing */ const txCode = getTxCode(ActionCodes.ROLL_POSITION, fromSeries.id); diff --git a/src/hooks/useAllowAction.ts b/src/hooks/useAllowAction.ts index 3aaaaf903..dac3aa106 100644 --- a/src/hooks/useAllowAction.ts +++ b/src/hooks/useAllowAction.ts @@ -10,19 +10,11 @@ import { ActionCodes, ISeries } from '../types'; * @returns boolean */ const useAllowAction = () => { - const { userState } = useContext(UserContext); + const isActionAllowed = (action: ActionCodes, series: ISeries) => { + if (series.allowActions.includes('allow_all') || series.allowActions.includes(action)) return true; - const isActionAllowed = (action: ActionCodes, series?: ISeries): boolean => { - const seriesToUse = series || userState.selectedSeries; - - if (seriesToUse) { - if (seriesToUse.allowActions.includes('allow_all') || seriesToUse.allowActions.includes(action)) {return true} - else { - toast.warn(`Action temporarily not allowed on this series.`); - return false; - } - } - return false; // deny action by default if conditions are not met + toast.warn(`Action temporarily not allowed on this series.`); + return false; }; return { isActionAllowed };