From 7947cce20e1fa4b6ab510dc64809c262624fa465 Mon Sep 17 00:00:00 2001 From: Guifel Date: Thu, 21 Oct 2021 14:44:15 +0200 Subject: [PATCH 01/11] Fix min savior balance draft --- src/hooks/useSaviour.ts | 66 +++++++++++++---------------------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 1fd69439..2315f033 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -275,45 +275,22 @@ export function useMinSaviourBalance() { .mul(LIQUIDATION_POINT) .div(HUNDRED) : BigNumber.from('0') - - // Formula for min savior balance - // - // targetCRatio * RP * accumulatedRate * debt - collateralPrice * collateral - // Min savior balance = ---------------------------------------------------------------------------------------------------------------------- - // collateralPrice * (reserveETH / totalLPsupply) + RP * accumulatedRate * (reserveRAI / totalLPsupply) * targetCRatio - - // (All calculation are made in RAY) - const numerator = redemptionPrice - .mul(accumulatedRate) - .div(RAY) - .mul(generatedDebt.mul(WAD_COMPLEMENT)) - .div(RAY) - .mul(targetCRatio) - .div(100) - .sub( - liquidationPrice - .mul(lockedCollateral) - .mul(WAD_COMPLEMENT) - .div(RAY) - ) - - const denominator = liquidationPrice - .mul(ethReserve.mul(WAD_COMPLEMENT)) - .div(lpTotalSupply.mul(WAD_COMPLEMENT)) - .add( - redemptionPrice - .mul(accumulatedRate) - .div(RAY) - .mul(raiReserve.mul(WAD_COMPLEMENT)) - .div(lpTotalSupply.mul(WAD_COMPLEMENT)) - .mul(targetCRatio) - .div(100) - ) - - let balanceBN = !generatedDebt.isZero() - ? numerator.mul(RAY).div(denominator) - : BigNumber.from('0') - + + + // The calculation below refers to the formula described at: + // https://docs.reflexer.finance/liquidation-protection/uni-v2-rai-eth-savior-math + + const jVar = redemptionPrice.mul(accumulatedRate).div(RAY).mul(targetCRatio).div(HUNDRED).div(liquidationPrice) + + const currentRaiMarketPrice = BigNumber.from("3050000000000000000000000000") // TODO: Rai market price as RAY + + const pVar = currentRaiMarketPrice.mul(RAY).div(liquidationPrice) + + // Leave out sqrt(p) from the minimum bal equation because BignNumber doesn't do square root + const minSaviorBalanceRayWithoutSqrtP = lockedCollateral.mul(WAD_COMPLEMENT).sub(generatedDebt.mul(WAD_COMPLEMENT).mul(jVar).div(RAY)).div(jVar.add(pVar)) + // TODO: Find a better way doing square root if there is + const minSaviorBalanceNumber = = Math.sqrt(Number(pVar.toString()) / 1e27) * Number(minSaviorBalanceRayWithoutSqrtP.toString()) / 1e27 + // Price USD RAY price of a LP share // lpUsdPrice = (reserveETH * priceEth + reserveRAI * priceRAI) / lpTotalSupply const lpTokenUsdPrice = ethReserve @@ -331,13 +308,10 @@ export function useMinSaviourBalance() { .mul(WAD_COMPLEMENT) .mul(RAY) .div(lpTokenUsdPrice) - - balanceBN = !generatedDebt.isZero() - ? balanceBN.add(keeperPayoutInLP) - : BigNumber.from('0') - - const minSaviorBalance = parseInt(balanceBN.toString()) / 1e27 - return formatNumber(minSaviorBalance.toString(), 4, true) + + // Add the keeper balance + const minSaviorBalanceFinal = minSaviorBalanceNumber + Number(keeperPayoutInLP.toString()) + return formatNumber(minSaviorBalanceFinal.toString(), 4, true) }, [saviourData] ) From d7370795744f26d95593058aef45a50faeef742e Mon Sep 17 00:00:00 2001 From: mstfash Date: Thu, 21 Oct 2021 16:28:10 +0200 Subject: [PATCH 02/11] fix --- src/hooks/useSaviour.ts | 52 +++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 2315f033..6813e07a 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -202,7 +202,6 @@ export async function fetchSaviourData({ const uniPoolPrice = numeral(numerator) .divide(formattedCoinTotalSupply) .value() - return { safeId, hasSaviour: saviourAddress !== EMPTY_ADDRESS, @@ -275,22 +274,35 @@ export function useMinSaviourBalance() { .mul(LIQUIDATION_POINT) .div(HUNDRED) : BigNumber.from('0') - - - // The calculation below refers to the formula described at: + + // The calculation below refers to the formula described at: // https://docs.reflexer.finance/liquidation-protection/uni-v2-rai-eth-savior-math - - const jVar = redemptionPrice.mul(accumulatedRate).div(RAY).mul(targetCRatio).div(HUNDRED).div(liquidationPrice) - - const currentRaiMarketPrice = BigNumber.from("3050000000000000000000000000") // TODO: Rai market price as RAY - - const pVar = currentRaiMarketPrice.mul(RAY).div(liquidationPrice) - + + const jVar = redemptionPrice + .mul(accumulatedRate) + .div(RAY) + .mul(targetCRatio) + .div(HUNDRED) + .div(liquidationPrice) + + // TODO: Rai market price as RAY + // const currentRaiMarketPrice = BigNumber.from( + // '3050000000000000000000000000' + // ) + + const pVar = redemptionPrice.mul(RAY).div(liquidationPrice) + // Leave out sqrt(p) from the minimum bal equation because BignNumber doesn't do square root - const minSaviorBalanceRayWithoutSqrtP = lockedCollateral.mul(WAD_COMPLEMENT).sub(generatedDebt.mul(WAD_COMPLEMENT).mul(jVar).div(RAY)).div(jVar.add(pVar)) + const minSaviorBalanceRayWithoutSqrtP = lockedCollateral + .mul(WAD_COMPLEMENT) + .sub(generatedDebt.mul(WAD_COMPLEMENT).mul(jVar).div(RAY)) + .div(jVar.add(pVar)) // TODO: Find a better way doing square root if there is - const minSaviorBalanceNumber = = Math.sqrt(Number(pVar.toString()) / 1e27) * Number(minSaviorBalanceRayWithoutSqrtP.toString()) / 1e27 - + const minSaviorBalanceNumber = + (Math.sqrt(Number(pVar.toString()) / 1e27) * + Number(minSaviorBalanceRayWithoutSqrtP.toString())) / + 1e27 + // Price USD RAY price of a LP share // lpUsdPrice = (reserveETH * priceEth + reserveRAI * priceRAI) / lpTotalSupply const lpTokenUsdPrice = ethReserve @@ -308,10 +320,16 @@ export function useMinSaviourBalance() { .mul(WAD_COMPLEMENT) .mul(RAY) .div(lpTokenUsdPrice) - + // Add the keeper balance - const minSaviorBalanceFinal = minSaviorBalanceNumber + Number(keeperPayoutInLP.toString()) - return formatNumber(minSaviorBalanceFinal.toString(), 4, true) + const minSaviorBalanceFinal = + minSaviorBalanceNumber + Number(keeperPayoutInLP.toString()) + + return formatNumber( + (minSaviorBalanceFinal / 1e27).toString(), + 4, + true + ) }, [saviourData] ) From 248561582d33769b1c1c356609a6b6122d691956 Mon Sep 17 00:00:00 2001 From: mstfash Date: Thu, 21 Oct 2021 19:22:52 +0200 Subject: [PATCH 03/11] changing node version --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 1a2f5bd2..996c1856 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/* \ No newline at end of file +16.12.0 \ No newline at end of file From fa472413e31faa91f1bf0e461148e709d867da8b Mon Sep 17 00:00:00 2001 From: mstfash Date: Thu, 21 Oct 2021 19:35:20 +0200 Subject: [PATCH 04/11] update walletconnect version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index abb103f1..9936f478 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@walletconnect/web3-provider": "1.1.1-alpha.0", "@web3-react/core": "^6.0.9", "@web3-react/injected-connector": "^6.0.7", - "@web3-react/walletconnect-connector": "^6.1.1", + "@web3-react/walletconnect-connector": "^6.2.6", "@web3-react/walletlink-connector": "^6.0.9", "async-retry": "^1.3.1", "axios": "^0.20.0", From 7b033df3006723ae11798918717ccbc31965eac8 Mon Sep 17 00:00:00 2001 From: mstfash Date: Thu, 21 Oct 2021 20:00:27 +0200 Subject: [PATCH 05/11] fix --- .nvmrc | 2 +- package.json | 4 ++-- src/containers/OnBoarding/SafeDetails.tsx | 8 +++----- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.nvmrc b/.nvmrc index 996c1856..1a2f5bd2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16.12.0 \ No newline at end of file +lts/* \ No newline at end of file diff --git a/package.json b/package.json index 9936f478..56f309f9 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@walletconnect/web3-provider": "1.1.1-alpha.0", "@web3-react/core": "^6.0.9", "@web3-react/injected-connector": "^6.0.7", - "@web3-react/walletconnect-connector": "^6.2.6", - "@web3-react/walletlink-connector": "^6.0.9", + "@web3-react/walletconnect-connector": "6.2.4", + "@web3-react/walletlink-connector": "6.2.3", "async-retry": "^1.3.1", "axios": "^0.20.0", "classnames": "^2.2.6", diff --git a/src/containers/OnBoarding/SafeDetails.tsx b/src/containers/OnBoarding/SafeDetails.tsx index 9b12e619..fea44f21 100644 --- a/src/containers/OnBoarding/SafeDetails.tsx +++ b/src/containers/OnBoarding/SafeDetails.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react' import { Link2 } from 'react-feather' import { useTranslation } from 'react-i18next' -import { useHistory } from 'react-router' +import { useHistory } from 'react-router-dom' import styled from 'styled-components' import AlertLabel from '../../components/AlertLabel' import Button from '../../components/Button' @@ -25,10 +25,8 @@ const SafeDetails = ({ ...props }) => { const { account, library } = useActiveWeb3React() const [loading, setIsLoading] = useState(false) const geb = useGeb() - const { - safeModel: safeActions, - popupsModel: popupsActions, - } = useStoreActions((state) => state) + const { safeModel: safeActions, popupsModel: popupsActions } = + useStoreActions((state) => state) const { safeModel: safeState } = useStoreState((state) => state) const safeId = props.match.params.id as string From e7042b579cc8a2a235bc9fb4bcb1c42d6685985a Mon Sep 17 00:00:00 2001 From: mstfash Date: Fri, 22 Oct 2021 13:19:16 +0200 Subject: [PATCH 06/11] fix calculations --- src/hooks/useSaviour.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 6813e07a..81a4ab50 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -236,13 +236,18 @@ export function useSaviourData(): SaviourData | undefined { return saviourData } +export function useTargetedCRatio(): number { + const { safeModel: safeState } = useStoreState((state) => state) + const { targetedCRatio } = safeState + return targetedCRatio +} + // minSaviourBalance export function useMinSaviourBalance() { const HUNDRED = 100 const saviourData = useSaviourData() - const getMinSaviourBalance = useCallback( (targetCRatio: number) => { const WAD_COMPLEMENT = BigNumber.from(10 ** 9) @@ -261,7 +266,7 @@ export function useMinSaviourBalance() { // Liquidation price formula // - // debt * accumulatedRate * targetCRatio * RP + // debt * accumulatedRate * RP // liquidationPrice = ----------------------------------------------- // collateral @@ -269,20 +274,23 @@ export function useMinSaviourBalance() { ? redemptionPrice .mul(generatedDebt.mul(WAD_COMPLEMENT)) .mul(accumulatedRate) - .div(lockedCollateral.mul(WAD_COMPLEMENT)) - .div(RAY) .mul(LIQUIDATION_POINT) .div(HUNDRED) + .div(lockedCollateral.mul(WAD_COMPLEMENT)) + .div(RAY) : BigNumber.from('0') // The calculation below refers to the formula described at: // https://docs.reflexer.finance/liquidation-protection/uni-v2-rai-eth-savior-math + // console.log(targetCRatio) + const jVar = redemptionPrice .mul(accumulatedRate) .div(RAY) .mul(targetCRatio) .div(HUNDRED) + .mul(RAY) .div(liquidationPrice) // TODO: Rai market price as RAY @@ -299,9 +307,8 @@ export function useMinSaviourBalance() { .div(jVar.add(pVar)) // TODO: Find a better way doing square root if there is const minSaviorBalanceNumber = - (Math.sqrt(Number(pVar.toString()) / 1e27) * - Number(minSaviorBalanceRayWithoutSqrtP.toString())) / - 1e27 + Math.sqrt(Number(pVar.toString()) / 1e27) * + Number(minSaviorBalanceRayWithoutSqrtP.toString()) // Price USD RAY price of a LP share // lpUsdPrice = (reserveETH * priceEth + reserveRAI * priceRAI) / lpTotalSupply @@ -323,13 +330,10 @@ export function useMinSaviourBalance() { // Add the keeper balance const minSaviorBalanceFinal = - minSaviorBalanceNumber + Number(keeperPayoutInLP.toString()) + minSaviorBalanceNumber + + Number(keeperPayoutInLP.toString()) / 1e27 - return formatNumber( - (minSaviorBalanceFinal / 1e27).toString(), - 4, - true - ) + return formatNumber(minSaviorBalanceFinal.toString(), 4, true) }, [saviourData] ) From 39050cd4c2d139448c4be54b120eef519f52e339 Mon Sep 17 00:00:00 2001 From: mstfash Date: Fri, 22 Oct 2021 13:38:16 +0200 Subject: [PATCH 07/11] fix nevative min balance --- src/hooks/useSaviour.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 81a4ab50..68c0651b 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -330,7 +330,7 @@ export function useMinSaviourBalance() { // Add the keeper balance const minSaviorBalanceFinal = - minSaviorBalanceNumber + + Math.abs(minSaviorBalanceNumber) + Number(keeperPayoutInLP.toString()) / 1e27 return formatNumber(minSaviorBalanceFinal.toString(), 4, true) From 8fce7f08eda6a2ff1ef1321984b022d15feb81f1 Mon Sep 17 00:00:00 2001 From: mstfash Date: Fri, 22 Oct 2021 15:48:03 +0200 Subject: [PATCH 08/11] fix saviour keeper fees --- src/hooks/useSaviour.ts | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 68c0651b..88ca7933 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -18,6 +18,7 @@ import { BigNumber } from '@ethersproject/bignumber' import { formatNumber } from '../utils/helper' export const LIQUIDATION_POINT = 125 // percent +export const LIQUIDATION_CRATIO = 135 // percent export type SaviourData = { safeId: string @@ -258,9 +259,6 @@ export function useMinSaviourBalance() { generatedDebt, accumulatedRate, lockedCollateral, - reserveETH: ethReserve, - reserveRAI: raiReserve, - coinTotalSupply: lpTotalSupply, keeperPayOut, } = saviourData @@ -283,8 +281,6 @@ export function useMinSaviourBalance() { // The calculation below refers to the formula described at: // https://docs.reflexer.finance/liquidation-protection/uni-v2-rai-eth-savior-math - // console.log(targetCRatio) - const jVar = redemptionPrice .mul(accumulatedRate) .div(RAY) @@ -310,28 +306,17 @@ export function useMinSaviourBalance() { Math.sqrt(Number(pVar.toString()) / 1e27) * Number(minSaviorBalanceRayWithoutSqrtP.toString()) - // Price USD RAY price of a LP share - // lpUsdPrice = (reserveETH * priceEth + reserveRAI * priceRAI) / lpTotalSupply - const lpTokenUsdPrice = ethReserve - .mul(WAD_COMPLEMENT) - .mul(liquidationPrice) - .div(RAY) - .add( - raiReserve.mul(WAD_COMPLEMENT).mul(redemptionPrice).div(RAY) - ) - .mul(RAY) - .div(lpTotalSupply.mul(WAD_COMPLEMENT)) - - // Calculate keeper fee and add it to the min balance - const keeperPayoutInLP = keeperPayOut - .mul(WAD_COMPLEMENT) - .mul(RAY) - .div(lpTokenUsdPrice) + const keeperPayoutInLP = + Number(keeperPayOut.mul(WAD_COMPLEMENT).toString()) / + (Math.sqrt( + Number(liquidationPrice.mul(redemptionPrice).toString()) + ) * + 2) // Add the keeper balance const minSaviorBalanceFinal = Math.abs(minSaviorBalanceNumber) + - Number(keeperPayoutInLP.toString()) / 1e27 + Number(keeperPayoutInLP.toString()) return formatNumber(minSaviorBalanceFinal.toString(), 4, true) }, From de98f3a11bd16e557829a9c8f9658ddcbc58ce23 Mon Sep 17 00:00:00 2001 From: mstfash Date: Fri, 22 Oct 2021 18:26:15 +0200 Subject: [PATCH 09/11] adding saviour label in modifying debt/collateral modal --- src/components/SafeOperations/SafeBody.tsx | 40 +++++++++++++++++++++- src/containers/OnBoarding/SafeDetails.tsx | 22 ++++++++++-- src/hooks/useSaviour.ts | 23 ++++++++++--- 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/src/components/SafeOperations/SafeBody.tsx b/src/components/SafeOperations/SafeBody.tsx index 19f3f665..c0a10e95 100644 --- a/src/components/SafeOperations/SafeBody.tsx +++ b/src/components/SafeOperations/SafeBody.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState, useCallback } from 'react' import { useTranslation } from 'react-i18next' import { BigNumber } from 'ethers' import { utils as gebUtils } from 'geb.js' @@ -26,6 +26,8 @@ import { DEFAULT_SAFE_STATE, COIN_TICKER } from '../../utils/constants' import { Info } from 'react-feather' import ReactTooltip from 'react-tooltip' import { useIsOwner, useProxyAddress } from '../../hooks/useGeb' +import { useMinSaviourBalance, useSaviourData } from '../../hooks/useSaviour' +import AlertLabel from '../AlertLabel' export const LIQUIDATION_RATIO = 135 // percent interface Props { @@ -35,6 +37,8 @@ interface Props { const SafeBody = ({ isChecked }: Props) => { const { t } = useTranslation() const proxyAddress = useProxyAddress() + const { getMinSaviourBalance } = useMinSaviourBalance() + const saviourData = useSaviourData() // eslint-disable-next-line @typescript-eslint/no-unused-vars const [checkUniSwapPool, setCheckUniSwapPool] = useState(isChecked || false) const [error, setError] = useState('') @@ -487,9 +491,36 @@ const SafeBody = ({ isChecked }: Props) => { setUniSwapVal(uniSwapPool) }, [safeData, uniSwapPool]) + const returnStatus = useCallback(() => { + if (!saviourData) return 'none' + const minimumBalance = getMinSaviourBalance( + saviourData.saviourRescueRatio, + totalDebt, + totalCollateral + ) as number + if (Number(saviourData.saviourBalance) >= minimumBalance) { + return 'Protected' + } + return 'Unprotected' + }, [getMinSaviourBalance, saviourData, totalCollateral, totalDebt]) + return ( <> + {saviourData && saviourData.hasSaviour ? ( + + + + ) : null} @@ -790,6 +821,7 @@ const Value = styled.div` const Body = styled.div` padding: 20px; + position: relative; ` const Footer = styled.div` @@ -833,3 +865,9 @@ const Note = styled.div` font-size: ${(props) => props.theme.font.extraSmall}; margin-top: 5px; ` + +const SaviourLabel = styled.div` + position: absolute; + top: -53px; + right: 20px; +` diff --git a/src/containers/OnBoarding/SafeDetails.tsx b/src/containers/OnBoarding/SafeDetails.tsx index fea44f21..657e5bc9 100644 --- a/src/containers/OnBoarding/SafeDetails.tsx +++ b/src/containers/OnBoarding/SafeDetails.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useCallback, useEffect, useState } from 'react' import { Link2 } from 'react-feather' import { useTranslation } from 'react-i18next' import { useHistory } from 'react-router-dom' @@ -27,7 +27,11 @@ const SafeDetails = ({ ...props }) => { const geb = useGeb() const { safeModel: safeActions, popupsModel: popupsActions } = useStoreActions((state) => state) - const { safeModel: safeState } = useStoreState((state) => state) + const { safeModel: safeState, connectWalletModel: connectWalletState } = + useStoreState((state) => state) + + const { fiatPrice: ethPrice } = connectWalletState + const safeId = props.match.params.id as string const hasSaviour = useHasSaviour( @@ -104,6 +108,20 @@ const SafeDetails = ({ ...props }) => { safeId, ]) + const fetchSaviourDataCallback = useCallback(() => { + if (!account || !geb || !safeId) return + safeActions.fetchSaviourData({ + account, + geb, + safeId, + ethPrice, + }) + }, [account, ethPrice, geb, safeActions, safeId]) + + useEffect(() => { + fetchSaviourDataCallback() + }, [fetchSaviourDataCallback]) + const handleSaviourBtnClick = async (data: { status: boolean saviourAddress: string diff --git a/src/hooks/useSaviour.ts b/src/hooks/useSaviour.ts index 88ca7933..c9b22701 100644 --- a/src/hooks/useSaviour.ts +++ b/src/hooks/useSaviour.ts @@ -15,7 +15,7 @@ import { SaviourWithdrawPayload, } from '../utils/interfaces' import { BigNumber } from '@ethersproject/bignumber' -import { formatNumber } from '../utils/helper' +import { formatNumber, toFixedString } from '../utils/helper' export const LIQUIDATION_POINT = 125 // percent export const LIQUIDATION_CRATIO = 135 // percent @@ -247,21 +247,34 @@ export function useTargetedCRatio(): number { export function useMinSaviourBalance() { const HUNDRED = 100 - const saviourData = useSaviourData() const getMinSaviourBalance = useCallback( - (targetCRatio: number) => { + ( + targetCRatio?: number, + totalDebt?: string, + totalCollateral?: string + ) => { const WAD_COMPLEMENT = BigNumber.from(10 ** 9) if (!saviourData || !targetCRatio) return '0' const { RAY } = gebUtils const { redemptionPrice, - generatedDebt, + generatedDebt: safeDebt, accumulatedRate, - lockedCollateral, + lockedCollateral: safeCollateral, keeperPayOut, } = saviourData + const generatedDebt = totalDebt + ? BigNumber.from(toFixedString(totalDebt, 'WAD')) + .mul(RAY) + .div(accumulatedRate) + : safeDebt + + const lockedCollateral = totalCollateral + ? BigNumber.from(toFixedString(totalCollateral, 'WAD')) + : safeCollateral + // Liquidation price formula // // debt * accumulatedRate * RP From a98cf7203cc1d01b592fcb2cde4a340717fa075a Mon Sep 17 00:00:00 2001 From: mstfash Date: Mon, 25 Oct 2021 10:57:44 +0200 Subject: [PATCH 10/11] adding USD amount to borrow/deposit --- src/components/SafeOperations/SafeBody.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/SafeOperations/SafeBody.tsx b/src/components/SafeOperations/SafeBody.tsx index c0a10e95..7c759380 100644 --- a/src/components/SafeOperations/SafeBody.tsx +++ b/src/components/SafeOperations/SafeBody.tsx @@ -68,6 +68,10 @@ const SafeBody = ({ isChecked }: Props) => { globalDebtCeiling, } = safeState.liquidationData + const raiPrice = singleSafe + ? (formatNumber(currentRedemptionPrice, 3) as number) + : 0 + const isOwner = useIsOwner(singleSafe?.id as string) const raiBalance = connectWalletState.raiBalance[NETWORK_ID].toString() @@ -164,6 +168,13 @@ const SafeBody = ({ isChecked }: Props) => { Number(getAvailableRai()) > 0.01 ? formatNumber(getAvailableRai(), 2) : '< 0.01' + } ${ + isCreate + ? '' + : `≃ $${formatNumber( + String(Number(getAvailableRai()) * raiPrice), + 2 + )}` })` } if (type === 'repay_withdraw' && isLeft) { From e849d04f16e239e35256bc561d05d5b890ad9746 Mon Sep 17 00:00:00 2001 From: mstfash Date: Mon, 25 Oct 2021 15:34:42 +0200 Subject: [PATCH 11/11] rebase --- src/components/SafeOperations/SafeBody.tsx | 50 +--------------------- 1 file changed, 1 insertion(+), 49 deletions(-) diff --git a/src/components/SafeOperations/SafeBody.tsx b/src/components/SafeOperations/SafeBody.tsx index 7c759380..d48b5206 100644 --- a/src/components/SafeOperations/SafeBody.tsx +++ b/src/components/SafeOperations/SafeBody.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useCallback } from 'react' +import React, { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { BigNumber } from 'ethers' import { utils as gebUtils } from 'geb.js' @@ -26,8 +26,6 @@ import { DEFAULT_SAFE_STATE, COIN_TICKER } from '../../utils/constants' import { Info } from 'react-feather' import ReactTooltip from 'react-tooltip' import { useIsOwner, useProxyAddress } from '../../hooks/useGeb' -import { useMinSaviourBalance, useSaviourData } from '../../hooks/useSaviour' -import AlertLabel from '../AlertLabel' export const LIQUIDATION_RATIO = 135 // percent interface Props { @@ -37,8 +35,6 @@ interface Props { const SafeBody = ({ isChecked }: Props) => { const { t } = useTranslation() const proxyAddress = useProxyAddress() - const { getMinSaviourBalance } = useMinSaviourBalance() - const saviourData = useSaviourData() // eslint-disable-next-line @typescript-eslint/no-unused-vars const [checkUniSwapPool, setCheckUniSwapPool] = useState(isChecked || false) const [error, setError] = useState('') @@ -68,10 +64,6 @@ const SafeBody = ({ isChecked }: Props) => { globalDebtCeiling, } = safeState.liquidationData - const raiPrice = singleSafe - ? (formatNumber(currentRedemptionPrice, 3) as number) - : 0 - const isOwner = useIsOwner(singleSafe?.id as string) const raiBalance = connectWalletState.raiBalance[NETWORK_ID].toString() @@ -168,13 +160,6 @@ const SafeBody = ({ isChecked }: Props) => { Number(getAvailableRai()) > 0.01 ? formatNumber(getAvailableRai(), 2) : '< 0.01' - } ${ - isCreate - ? '' - : `≃ $${formatNumber( - String(Number(getAvailableRai()) * raiPrice), - 2 - )}` })` } if (type === 'repay_withdraw' && isLeft) { @@ -502,36 +487,9 @@ const SafeBody = ({ isChecked }: Props) => { setUniSwapVal(uniSwapPool) }, [safeData, uniSwapPool]) - const returnStatus = useCallback(() => { - if (!saviourData) return 'none' - const minimumBalance = getMinSaviourBalance( - saviourData.saviourRescueRatio, - totalDebt, - totalCollateral - ) as number - if (Number(saviourData.saviourBalance) >= minimumBalance) { - return 'Protected' - } - return 'Unprotected' - }, [getMinSaviourBalance, saviourData, totalCollateral, totalDebt]) - return ( <> - {saviourData && saviourData.hasSaviour ? ( - - - - ) : null} @@ -876,9 +834,3 @@ const Note = styled.div` font-size: ${(props) => props.theme.font.extraSmall}; margin-top: 5px; ` - -const SaviourLabel = styled.div` - position: absolute; - top: -53px; - right: 20px; -`