From 3e68e0a4738dd3b827ba09f507da8928fa68887a Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Wed, 19 Jun 2024 20:26:02 +0200 Subject: [PATCH 01/33] feat: start implementing token native yield --- src/hooks/pool/useTokenNativeYield.ts | 27 ++++ src/hooks/pool/useUserYield.ts | 6 + src/services/TokenNativeYieldService.ts | 161 +++++++++++++++++++ src/ui-config/SharedDependenciesProvider.tsx | 5 + src/ui-config/queries.ts | 6 + 5 files changed, 205 insertions(+) create mode 100644 src/hooks/pool/useTokenNativeYield.ts create mode 100644 src/services/TokenNativeYieldService.ts diff --git a/src/hooks/pool/useTokenNativeYield.ts b/src/hooks/pool/useTokenNativeYield.ts new file mode 100644 index 0000000000..adfa8fb7bc --- /dev/null +++ b/src/hooks/pool/useTokenNativeYield.ts @@ -0,0 +1,27 @@ +import { useQueries } from '@tanstack/react-query'; +import { MarketDataType } from 'src/ui-config/marketsConfig'; +import { POLLING_INTERVAL, queryKeysFactory } from 'src/ui-config/queries'; +import { useSharedDependencies } from 'src/ui-config/SharedDependenciesProvider'; + +// type TokenNativeYieldData = Map; + +export const useTokensNativeYield = (marketsData: MarketDataType[]) => { + // marketsData[0].market + const { tokenNativeYieldService } = useSharedDependencies(); + return useQueries({ + queries: marketsData.map((marketData) => ({ + queryKey: queryKeysFactory.tokensNativeYield(marketData), + queryFn: () => { + console.log('queryFn', marketData); + tokenNativeYieldService.getTokensNativeYield(marketData.chainId); + return null; + }, + enabled: !!marketData.v3, + refetchInterval: POLLING_INTERVAL, + })), + }); +}; + +export const useTokenNativeYield = (marketData: MarketDataType) => { + return useTokensNativeYield([marketData])[0]; +}; diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index fc34927031..16ad4ffcc8 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -13,6 +13,7 @@ import { FormattedReservesAndIncentives, usePoolsFormattedReserves, } from './usePoolFormattedReserves'; +import { useTokensNativeYield } from './useTokenNativeYield'; import { useUserGhoPoolsFormattedReserve } from './useUserGhoPoolFormattedReserve'; import { useUserSummariesAndIncentives } from './useUserSummaryAndIncentives'; import { combineQueries, SimplifiedUseQueryResult } from './utils'; @@ -31,6 +32,7 @@ const formatUserYield = memoize( user: FormatUserSummaryAndIncentivesResponse, currentMarket: string ) => { + // integrate LstsApy here const proportions = user.userReservesData.reduce( (acc, value) => { const reserve = formattedPoolReserves.find( @@ -137,6 +139,9 @@ export const useUserYields = ( const ghoPoolsFormattedReserveQuery = useGhoPoolsFormattedReserve(marketsData); const userGhoPoolsFormattedReserveQuery = useUserGhoPoolsFormattedReserve(marketsData); const userSummaryQuery = useUserSummariesAndIncentives(marketsData); + const tokenNativeYield = useTokensNativeYield(marketsData); + console.log('tokenNativeYield', tokenNativeYield); + // getNativeLstsApy return poolsFormattedReservesQuery.map((elem, index) => { const marketData = marketsData[index]; @@ -152,6 +157,7 @@ export const useUserYields = ( formattedGhoUserData, user, marketData.market + // nativeLstsApy ); }; const ghoSelector = ( diff --git a/src/services/TokenNativeYieldService.ts b/src/services/TokenNativeYieldService.ts new file mode 100644 index 0000000000..695dd10fb5 --- /dev/null +++ b/src/services/TokenNativeYieldService.ts @@ -0,0 +1,161 @@ +import { Provider } from '@ethersproject/providers'; +import { BigNumber, Contract } from 'ethers'; +import { formatUnits } from 'ethers/lib/utils'; + +// export interface TokenDelegationPower { +// address: string; +// votingPower: FixedPointDecimal; +// propositionPower: FixedPointDecimal; +// } + +export class TokensNativeYieldService { + constructor(private readonly getProvider: (chainId: number) => Provider) {} + + // private getDelegationTokenService(tokenAddress: string, chainId: number) { + // const provider = this.getProvider(chainId); + // return new AaveTokenV3Service(tokenAddress, provider); + // } + + // async getTokenPowers( + // user: string, + // token: string, + // chainId: number + // ): Promise { + // const service = this.getDelegationTokenService(token, chainId); + // const result = await service.getPowers(user); + // return { + // address: token, + // votingPower: new FixedPointDecimal(result.votingPower, 18), + // propositionPower: new FixedPointDecimal(result.propositionPower, 18), + // }; + // } + + async getTokensNativeYield(chainId: number) { + return this.getWSTETHNativeYield(chainId); + } + + getWSTETHNativeYield = async (chainId: number) => { + // type TokenRebasedEvent = { + // reportTimestamp: BigNumber; + // timeElapsed: BigNumber; + // preTotalEther: BigNumber; + // preTotalShares: BigNumber; + // postTotalEther: BigNumber; + // postTotalShares: BigNumber; + // sharesMintedAsFees: BigNumber; + // }; + const computeStEthAPR = ( + preTotalEther: BigNumber, + preTotalShares: BigNumber, + postTotalEther: BigNumber, + postTotalShares: BigNumber, + timeElapsed: BigNumber + ) => { + // console.log('preTotalEther', preTotalEther.toString()); + // console.log('preTotalShares', preTotalShares.toString()); + const eighteenDecimals = BigNumber.from(10).pow(18); + const secondsInYear = BigNumber.from(60 * 60 * 24 * 365); + const preShareRate = preTotalEther.mul(BigNumber.from(10).pow(27)).div(preTotalShares); + const postShareRate = postTotalEther.mul(BigNumber.from(10).pow(27)).div(postTotalShares); + console.log('preShareRate', preShareRate.toString()); + console.log('postShareRate', postShareRate.toString()); + console.log('test', postShareRate.sub(preShareRate).div(preShareRate).toString()); + console.log('test2', postShareRate.sub(preShareRate).toString()); + console.log( + 'test3', + postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18)).toString() + ); + console.log( + 'test35', + secondsInYear + .mul(postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18))) + .div(timeElapsed) + .toString() + ); + console.log( + 'test36', + secondsInYear + .mul(postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18))) + .div(timeElapsed) + .div(BigNumber.from(10).pow(18)) + .toString() + ); + // console.log( + // 'test3', + // postShareRate + // .sub(preShareRate) + // .mul(10 ** 18) + // .div(preShareRate) + // .toString() + // ); + // console.log('test3', postShareRate.sub(preShareRate).toNumber()); + // console.log('test3', postShareRate.sub(preShareRate).toNumber() * 1000); + console.log( + 'test4', + BigNumber.from('111985298517642957633010') + .mul(10 ** 10) + .div(BigNumber.from('1168819034657415652473133')) + ); + console.log('test5'); + + // * 10 ** 18 because otherwise the division will be 0 + const pendingUserApr = secondsInYear + .mul(postShareRate.sub(preShareRate).mul(eighteenDecimals).div(preShareRate)) + .div(timeElapsed); + + const userApr = formatUnits(pendingUserApr, 18); + const userAprFormated = Number(userApr) * 100; + + console.log('pendingUserApr', pendingUserApr.toString()); + console.log('userApr', pendingUserApr.toString()); + console.log('userAprFormated', userAprFormated.toString()); + return userAprFormated; + }; + const abi = [ + { + anonymous: false, + inputs: [ + { indexed: true, name: 'reportTimestamp', type: 'uint256' }, + { indexed: false, name: 'timeElapsed', type: 'uint256' }, + { indexed: false, name: 'preTotalShares', type: 'uint256' }, + { indexed: false, name: 'preTotalEther', type: 'uint256' }, + { indexed: false, name: 'postTotalShares', type: 'uint256' }, + { indexed: false, name: 'postTotalEther', type: 'uint256' }, + { indexed: false, name: 'sharesMintedAsFees', type: 'uint256' }, + ], + name: 'TokenRebased', + type: 'event', + }, + ]; + + const provider = this.getProvider(chainId); + const contract = new Contract('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', abi); + const connectedContract = contract.connect(provider); + const currentBlockNumber = await provider.getBlockNumber(); + const daysInSeconds = 60 * 60 * 24 * 7; + const blocksInDays = daysInSeconds / 12; + const events = await connectedContract.queryFilter( + connectedContract.filters.TokenRebased(), + currentBlockNumber - blocksInDays * 2, // 1 week + currentBlockNumber + ); + const event = events[events.length - 1].args; + if (!event) return null; + console.log('event', event); + // const preTotalEther = event['preTotalEther']; + // const preTotalShares = event['preTotalShares']; + // const postTotalEther = event['postTotalEther']; + // const postTotalShares = event['postTotalShares']; + // const timeElapsed = event['timeElapsed']; + const apr = computeStEthAPR( + event['preTotalEther'], + event['preTotalShares'], + event['postTotalEther'], + event['postTotalShares'], + event['timeElapsed'] + ); + console.log('apr', apr.toString()); + return null; + // return connectedContract(addresses) as Promise; + }; +} diff --git a/src/ui-config/SharedDependenciesProvider.tsx b/src/ui-config/SharedDependenciesProvider.tsx index 0e4c0c5708..eedc8718fe 100644 --- a/src/ui-config/SharedDependenciesProvider.tsx +++ b/src/ui-config/SharedDependenciesProvider.tsx @@ -6,6 +6,7 @@ import { GovernanceService } from 'src/services/GovernanceService'; import { GovernanceV3Service } from 'src/services/GovernanceV3Service'; import { MigrationService } from 'src/services/MigrationService'; import { StkAbptMigrationService } from 'src/services/StkAbptMigrationService'; +import { TokensNativeYieldService } from 'src/services/TokenNativeYieldService'; import { TokenWrapperService } from 'src/services/TokenWrapperService'; import { UiGhoService } from 'src/services/UiGhoService'; import { UiIncentivesService } from 'src/services/UIIncentivesService'; @@ -36,6 +37,7 @@ interface SharedDependenciesContext { stkAbptMigrationService: StkAbptMigrationService; migrationService: MigrationService; erc20Service: ERC20Service; + tokenNativeYieldService: TokensNativeYieldService; } const SharedDependenciesContext = createContext(null); @@ -78,6 +80,8 @@ export const SharedDependenciesProvider: React.FC = ({ children }) => { const uiGhoService = new UiGhoService(getProvider); + const tokenNativeYieldService = new TokensNativeYieldService(getProvider); + return ( { stkAbptMigrationService, migrationService, erc20Service, + tokenNativeYieldService, }} > {children} diff --git a/src/ui-config/queries.ts b/src/ui-config/queries.ts index c9f58bdb09..2484b999ef 100644 --- a/src/ui-config/queries.ts +++ b/src/ui-config/queries.ts @@ -161,6 +161,12 @@ export const queryKeysFactory = { chainId, 'tokensBalance', ], + tokensNativeYield: (marketData: MarketDataType) => [ + ...queryKeysFactory.pool, + ...queryKeysFactory.incentives, + ...queryKeysFactory.market(marketData), + 'tokensNativeYield', + ], }; export const POLLING_INTERVAL = 60000; From d0390b083797bc0ceca5faa3eb5c41ae0027c5ca Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Thu, 20 Jun 2024 12:38:51 +0200 Subject: [PATCH 02/33] feat: implement native steth yield in "Net APY" & "APY" box + compute apy --- src/hooks/pool/useTokenNativeYield.ts | 31 ++-- src/hooks/pool/useUserYield.ts | 41 +++-- src/services/TokenNativeYieldService.ts | 192 +++++++++--------------- src/ui-config/queries.ts | 3 +- 4 files changed, 119 insertions(+), 148 deletions(-) diff --git a/src/hooks/pool/useTokenNativeYield.ts b/src/hooks/pool/useTokenNativeYield.ts index adfa8fb7bc..f62935f0fb 100644 --- a/src/hooks/pool/useTokenNativeYield.ts +++ b/src/hooks/pool/useTokenNativeYield.ts @@ -1,27 +1,18 @@ -import { useQueries } from '@tanstack/react-query'; -import { MarketDataType } from 'src/ui-config/marketsConfig'; +import { useQuery } from '@tanstack/react-query'; +import { TokenNativeYield } from 'src/services/TokenNativeYieldService'; import { POLLING_INTERVAL, queryKeysFactory } from 'src/ui-config/queries'; import { useSharedDependencies } from 'src/ui-config/SharedDependenciesProvider'; -// type TokenNativeYieldData = Map; +import { SimplifiedUseQueryResult } from './utils'; -export const useTokensNativeYield = (marketsData: MarketDataType[]) => { - // marketsData[0].market +export const useTokensNativeYield = (): SimplifiedUseQueryResult => { const { tokenNativeYieldService } = useSharedDependencies(); - return useQueries({ - queries: marketsData.map((marketData) => ({ - queryKey: queryKeysFactory.tokensNativeYield(marketData), - queryFn: () => { - console.log('queryFn', marketData); - tokenNativeYieldService.getTokensNativeYield(marketData.chainId); - return null; - }, - enabled: !!marketData.v3, - refetchInterval: POLLING_INTERVAL, - })), + return useQuery({ + queryKey: queryKeysFactory.tokensNativeYield(), + queryFn: () => { + const aprs = tokenNativeYieldService.getTokensNativeYield(); + return aprs; + }, + refetchInterval: POLLING_INTERVAL, }); }; - -export const useTokenNativeYield = (marketData: MarketDataType) => { - return useTokensNativeYield([marketData])[0]; -}; diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index 16ad4ffcc8..eecfa51e49 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -4,7 +4,9 @@ import { FormatUserSummaryAndIncentivesResponse, } from '@aave/math-utils'; import BigNumber from 'bignumber.js'; +import { getAddress } from 'ethers/lib/utils'; import memoize from 'micro-memoize'; +import { TokenNativeYield } from 'src/services/TokenNativeYieldService'; import { MarketDataType } from 'src/ui-config/marketsConfig'; import { displayGho, weightedAverageAPY } from 'src/utils/ghoUtilities'; @@ -30,9 +32,10 @@ const formatUserYield = memoize( formattedGhoReserveData: FormattedGhoReserveData | undefined, formattedGhoUserData: FormattedGhoUserData | undefined, user: FormatUserSummaryAndIncentivesResponse, + tokensNativeApy: TokenNativeYield, currentMarket: string ) => { - // integrate LstsApy here + console.log('---tokensNativeApy', tokensNativeApy); const proportions = user.userReservesData.reduce( (acc, value) => { const reserve = formattedPoolReserves.find( @@ -40,10 +43,21 @@ const formatUserYield = memoize( ); if (reserve) { + // console.log('reserve', reserve); if (value.underlyingBalanceUSD !== '0') { acc.positiveProportion = acc.positiveProportion.plus( new BigNumber(reserve.supplyAPY).multipliedBy(value.underlyingBalanceUSD) ); + + console.log('---reserve', reserve.supplyAPY); + const nativeAPR = tokensNativeApy[getAddress(reserve.underlyingAsset)]; + console.log('---nativeAPR', nativeAPR); + + if (nativeAPR) { + acc.positiveProportion = acc.positiveProportion.plus( + new BigNumber(nativeAPR).multipliedBy(value.underlyingBalanceUSD) + ); + } if (reserve.aIncentivesData) { reserve.aIncentivesData.forEach((incentive) => { acc.positiveProportion = acc.positiveProportion.plus( @@ -128,6 +142,7 @@ const formatUserYield = memoize( earnedAPY, debtAPY, netAPY, + tokensNativeAPY: tokensNativeApy, }; } ); @@ -139,9 +154,7 @@ export const useUserYields = ( const ghoPoolsFormattedReserveQuery = useGhoPoolsFormattedReserve(marketsData); const userGhoPoolsFormattedReserveQuery = useUserGhoPoolsFormattedReserve(marketsData); const userSummaryQuery = useUserSummariesAndIncentives(marketsData); - const tokenNativeYield = useTokensNativeYield(marketsData); - console.log('tokenNativeYield', tokenNativeYield); - // getNativeLstsApy + const tokensNativeApy = useTokensNativeYield(); return poolsFormattedReservesQuery.map((elem, index) => { const marketData = marketsData[index]; @@ -149,22 +162,31 @@ export const useUserYields = ( formattedPoolReserves: FormattedReservesAndIncentives[], formattedGhoReserveData: FormattedGhoReserveData, formattedGhoUserData: FormattedGhoUserData, - user: FormatUserSummaryAndIncentivesResponse + user: FormatUserSummaryAndIncentivesResponse, + tokensNativeApy: TokenNativeYield ) => { return formatUserYield( formattedPoolReserves, formattedGhoReserveData, formattedGhoUserData, user, + tokensNativeApy, marketData.market - // nativeLstsApy ); }; const ghoSelector = ( formattedPoolReserves: FormattedReservesAndIncentives[], - user: FormatUserSummaryAndIncentivesResponse + user: FormatUserSummaryAndIncentivesResponse, + tokensNativeApy: TokenNativeYield ) => { - return formatUserYield(formattedPoolReserves, undefined, undefined, user, marketData.market); + return formatUserYield( + formattedPoolReserves, + undefined, + undefined, + user, + tokensNativeApy, + marketData.market + ); }; if (marketData.addresses.GHO_TOKEN_ADDRESS) return combineQueries( @@ -173,10 +195,11 @@ export const useUserYields = ( ghoPoolsFormattedReserveQuery[index], userGhoPoolsFormattedReserveQuery[index], userSummaryQuery[index], + tokensNativeApy, ] as const, selector ); - return combineQueries([elem, userSummaryQuery[index]] as const, ghoSelector); + return combineQueries([elem, userSummaryQuery[index], tokensNativeApy] as const, ghoSelector); }); }; diff --git a/src/services/TokenNativeYieldService.ts b/src/services/TokenNativeYieldService.ts index 695dd10fb5..8c22940f7a 100644 --- a/src/services/TokenNativeYieldService.ts +++ b/src/services/TokenNativeYieldService.ts @@ -1,116 +1,62 @@ +import { AaveV3Ethereum } from '@bgd-labs/aave-address-book'; import { Provider } from '@ethersproject/providers'; import { BigNumber, Contract } from 'ethers'; import { formatUnits } from 'ethers/lib/utils'; -// export interface TokenDelegationPower { -// address: string; -// votingPower: FixedPointDecimal; -// propositionPower: FixedPointDecimal; -// } +export interface TokenNativeYield { + [key: string]: number | null; +} + +const DAYS_IN_SECONDS = 60 * 60 * 24; export class TokensNativeYieldService { constructor(private readonly getProvider: (chainId: number) => Provider) {} - // private getDelegationTokenService(tokenAddress: string, chainId: number) { - // const provider = this.getProvider(chainId); - // return new AaveTokenV3Service(tokenAddress, provider); - // } - - // async getTokenPowers( - // user: string, - // token: string, - // chainId: number - // ): Promise { - // const service = this.getDelegationTokenService(token, chainId); - // const result = await service.getPowers(user); - // return { - // address: token, - // votingPower: new FixedPointDecimal(result.votingPower, 18), - // propositionPower: new FixedPointDecimal(result.propositionPower, 18), - // }; - // } - - async getTokensNativeYield(chainId: number) { - return this.getWSTETHNativeYield(chainId); + async getTokensNativeYield(): Promise { + const wstethApr = await this.getWstethNativeYield(); + return { + [AaveV3Ethereum.ASSETS.wstETH.UNDERLYING]: wstethApr, + }; } - getWSTETHNativeYield = async (chainId: number) => { - // type TokenRebasedEvent = { - // reportTimestamp: BigNumber; - // timeElapsed: BigNumber; - // preTotalEther: BigNumber; - // preTotalShares: BigNumber; - // postTotalEther: BigNumber; - // postTotalShares: BigNumber; - // sharesMintedAsFees: BigNumber; - // }; - const computeStEthAPR = ( - preTotalEther: BigNumber, - preTotalShares: BigNumber, - postTotalEther: BigNumber, - postTotalShares: BigNumber, - timeElapsed: BigNumber - ) => { - // console.log('preTotalEther', preTotalEther.toString()); - // console.log('preTotalShares', preTotalShares.toString()); + getWstethNativeYield = async () => { + // computation formula: https://docs.lido.fi/integrations/api#last-lido-apr-for-steth + const computeStEthAPR = ({ + preTotalEther, + preTotalShares, + postTotalEther, + postTotalShares, + timeElapsed, + }: { + preTotalEther: BigNumber; + preTotalShares: BigNumber; + postTotalEther: BigNumber; + postTotalShares: BigNumber; + timeElapsed: BigNumber; + }) => { const eighteenDecimals = BigNumber.from(10).pow(18); - const secondsInYear = BigNumber.from(60 * 60 * 24 * 365); + const secondsInYear = BigNumber.from(DAYS_IN_SECONDS * 365); + const preShareRate = preTotalEther.mul(BigNumber.from(10).pow(27)).div(preTotalShares); const postShareRate = postTotalEther.mul(BigNumber.from(10).pow(27)).div(postTotalShares); - console.log('preShareRate', preShareRate.toString()); - console.log('postShareRate', postShareRate.toString()); - console.log('test', postShareRate.sub(preShareRate).div(preShareRate).toString()); - console.log('test2', postShareRate.sub(preShareRate).toString()); - console.log( - 'test3', - postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18)).toString() - ); - console.log( - 'test35', - secondsInYear - .mul(postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18))) - .div(timeElapsed) - .toString() - ); - console.log( - 'test36', - secondsInYear - .mul(postShareRate.sub(preShareRate).mul(BigNumber.from(10).pow(18))) - .div(timeElapsed) - .div(BigNumber.from(10).pow(18)) - .toString() - ); - // console.log( - // 'test3', - // postShareRate - // .sub(preShareRate) - // .mul(10 ** 18) - // .div(preShareRate) - // .toString() - // ); - // console.log('test3', postShareRate.sub(preShareRate).toNumber()); - // console.log('test3', postShareRate.sub(preShareRate).toNumber() * 1000); - console.log( - 'test4', - BigNumber.from('111985298517642957633010') - .mul(10 ** 10) - .div(BigNumber.from('1168819034657415652473133')) - ); - console.log('test5'); - - // * 10 ** 18 because otherwise the division will be 0 - const pendingUserApr = secondsInYear + + // need to mul by 10e18 because otherwise the division will be 0 (since the result is less than 1) + const pendingApr = secondsInYear .mul(postShareRate.sub(preShareRate).mul(eighteenDecimals).div(preShareRate)) .div(timeElapsed); - const userApr = formatUnits(pendingUserApr, 18); - const userAprFormated = Number(userApr) * 100; + // then format to 18 decimals + const apr = formatUnits(pendingApr, 18); + + // stEth rebased daily: https://help.lido.fi/en/articles/5230610-what-is-steth + const apy = (1 + Number(apr) / 365) ** 365 - 1; + const apyFormated = apy * 100; + console.log('apy', apy); + console.log('apyFormated', apyFormated); - console.log('pendingUserApr', pendingUserApr.toString()); - console.log('userApr', pendingUserApr.toString()); - console.log('userAprFormated', userAprFormated.toString()); - return userAprFormated; + return apy; }; + const abi = [ { anonymous: false, @@ -128,34 +74,46 @@ export class TokensNativeYieldService { }, ]; - const provider = this.getProvider(chainId); + const provider = this.getProvider(1); const contract = new Contract('0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', abi); const connectedContract = contract.connect(provider); + const currentBlockNumber = await provider.getBlockNumber(); - const daysInSeconds = 60 * 60 * 24 * 7; - const blocksInDays = daysInSeconds / 12; + const blocksInDay = DAYS_IN_SECONDS / 12; + const events = await connectedContract.queryFilter( connectedContract.filters.TokenRebased(), - currentBlockNumber - blocksInDays * 2, // 1 week + currentBlockNumber - blocksInDay * 7, // ~1 week currentBlockNumber ); - const event = events[events.length - 1].args; - if (!event) return null; - console.log('event', event); - // const preTotalEther = event['preTotalEther']; - // const preTotalShares = event['preTotalShares']; - // const postTotalEther = event['postTotalEther']; - // const postTotalShares = event['postTotalShares']; - // const timeElapsed = event['timeElapsed']; - const apr = computeStEthAPR( - event['preTotalEther'], - event['preTotalShares'], - event['postTotalEther'], - event['postTotalShares'], - event['timeElapsed'] - ); - console.log('apr', apr.toString()); - return null; - // return connectedContract(addresses) as Promise; + console.log('events', events); + + const latestEvent = events.length === 0 ? null : events[events.length - 1]; + + if (!latestEvent || !latestEvent.args) { + // in case there are no events in the last week + const res = await fetch('https://eth-api.lido.fi/v1/protocol/steth/apr/last'); + const resParsed: { + data: { + timeUnix: number; + apr: number; + }; + meta: { + symbol: string; + address: string; + chainId: number; + }; + } = await res.json(); + // data.apr is the apy + return resParsed.data.apr; + } else { + return computeStEthAPR({ + preTotalEther: latestEvent.args['preTotalEther'], + preTotalShares: latestEvent.args['preTotalShares'], + postTotalEther: latestEvent.args['postTotalEther'], + postTotalShares: latestEvent.args['postTotalShares'], + timeElapsed: latestEvent.args['timeElapsed'], + }); + } }; } diff --git a/src/ui-config/queries.ts b/src/ui-config/queries.ts index 2484b999ef..5c5a726ab1 100644 --- a/src/ui-config/queries.ts +++ b/src/ui-config/queries.ts @@ -161,10 +161,9 @@ export const queryKeysFactory = { chainId, 'tokensBalance', ], - tokensNativeYield: (marketData: MarketDataType) => [ + tokensNativeYield: () => [ ...queryKeysFactory.pool, ...queryKeysFactory.incentives, - ...queryKeysFactory.market(marketData), 'tokensNativeYield', ], }; From a64d87d2b709368e21757c9d7910639d5ad98a47 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Thu, 20 Jun 2024 15:47:42 +0200 Subject: [PATCH 03/33] feat: add native apy in asset apy --- .../app-data-provider/useAppDataProvider.tsx | 6 ++++-- .../useExtendedUserSummaryAndIncentives.ts | 14 ++++++++++--- src/hooks/pool/usePoolFormattedReserves.ts | 4 +++- src/hooks/pool/useUserYield.ts | 3 ++- src/locales/en/messages.js | 2 +- src/locales/en/messages.po | 8 +++++++ .../SuppliedPositionsList.tsx | 8 +++++++ .../SuppliedPositionsListItem.tsx | 21 ++++++++++++++++++- 8 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/hooks/app-data-provider/useAppDataProvider.tsx b/src/hooks/app-data-provider/useAppDataProvider.tsx index 94c24aa137..a73aa27edc 100644 --- a/src/hooks/app-data-provider/useAppDataProvider.tsx +++ b/src/hooks/app-data-provider/useAppDataProvider.tsx @@ -76,15 +76,17 @@ export const AppDataProvider: React.FC = ({ children }) => { const currentMarketData = useRootStore((state) => state.currentMarketData); const currentMarket = useRootStore((state) => state.currentMarket); - // pool hooks + // console.log('currentMarketData', currentMarketData); + + // pool hooks const { data: reservesData, isLoading: reservesDataLoading } = usePoolReservesHumanized(currentMarketData); const { data: formattedPoolReserves, isLoading: formattedPoolReservesLoading } = usePoolFormattedReserves(currentMarketData); const baseCurrencyData = reservesData?.baseCurrencyData; - // user hooks + // user hooks const eModes = reservesData?.reservesData ? formatEmodes(reservesData.reservesData) : {}; const { data: userReservesData, isLoading: userReservesDataLoading } = diff --git a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts index 6dbfefbbcb..1882d19d0f 100644 --- a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts +++ b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts @@ -1,4 +1,5 @@ import { FormatUserSummaryAndIncentivesResponse } from '@aave/math-utils'; +import { getAddress } from 'ethers/lib/utils'; import { UserReservesDataHumanized } from 'src/services/UIPoolService'; import { reserveSortFn } from 'src/store/poolSelectors'; import { MarketDataType } from 'src/ui-config/marketsConfig'; @@ -17,6 +18,7 @@ export type ExtendedFormattedUser = earnedAPY: number; debtAPY: number; netAPY: number; + // nativeYield: number; isInEmode: boolean; userEmodeCategoryId: number; }; @@ -30,12 +32,18 @@ const formatExtendedUserAndIncentives = ( ...userSummariesAndIncentives, userEmodeCategoryId: userReserves.userEmodeCategoryId, isInEmode: userReserves.userEmodeCategoryId !== 0, - userReservesData: userSummariesAndIncentives.userReservesData.sort((a, b) => - reserveSortFn(a.reserve, b.reserve) - ), + userReservesData: userSummariesAndIncentives.userReservesData + .sort((a, b) => reserveSortFn(a.reserve, b.reserve)) + .map((elem) => { + return { + ...elem, + underlyingApy: userYield.nativeAPY[getAddress(elem.reserve.underlyingAsset)], + }; + }), earnedAPY: userYield.earnedAPY, debtAPY: userYield.debtAPY, netAPY: userYield.netAPY, + // nativeYield: userYield.nativeAPY, }; }; diff --git a/src/hooks/pool/usePoolFormattedReserves.ts b/src/hooks/pool/usePoolFormattedReserves.ts index 2f80cb0239..bbf179aa62 100644 --- a/src/hooks/pool/usePoolFormattedReserves.ts +++ b/src/hooks/pool/usePoolFormattedReserves.ts @@ -22,7 +22,9 @@ export type FormattedReservesAndIncentives = ReturnType< IconMapInterface & { isEmodeEnabled: boolean; isWrappedBaseAsset: boolean; - } & ReserveDataHumanized; + } & ReserveDataHumanized & { + underlyingApy?: number; + }; const formatReserves = memoize( ( diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index eecfa51e49..1c8a79ccf2 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -24,6 +24,7 @@ export interface UserYield { earnedAPY: number; debtAPY: number; netAPY: number; + nativeAPY: TokenNativeYield; } const formatUserYield = memoize( @@ -142,7 +143,7 @@ const formatUserYield = memoize( earnedAPY, debtAPY, netAPY, - tokensNativeAPY: tokensNativeApy, + nativeAPY: tokensNativeApy, }; } ); diff --git a/src/locales/en/messages.js b/src/locales/en/messages.js index 76027d0092..745801f2bc 100644 --- a/src/locales/en/messages.js +++ b/src/locales/en/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"...":"...",".CSV":".CSV",".JSON":".JSON","<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)":"<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)","<0><1><2/>Add stkAAVE to see borrow rate with discount":"<0><1><2/>Add stkAAVE to see borrow rate with discount","<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.":"<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.","<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.":"<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.","<0>Slippage tolerance <1>{selectedSlippage}% <2>{0}":["<0>Slippage tolerance <1>",["selectedSlippage"],"% <2>",["0"],""],"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.":"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.","APR":"APR","APY":"APY","APY change":"APY change","APY type":"APY type","APY type change":"APY type change","APY with discount applied":"APY with discount applied","APY, borrow rate":"APY, borrow rate","APY, stable":"APY, stable","APY, variable":"APY, variable","AToken supply is not zero":"AToken supply is not zero","Aave Governance":"Aave Governance","Aave aToken":"Aave aToken","Aave debt token":"Aave debt token","Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance":"Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance","Aave per month":"Aave per month","About GHO":"About GHO","Account":"Account","Action cannot be performed because the reserve is frozen":"Action cannot be performed because the reserve is frozen","Action cannot be performed because the reserve is paused":"Action cannot be performed because the reserve is paused","Action requires an active reserve":"Action requires an active reserve","Activate Cooldown":"Activate Cooldown","Add stkAAVE to see borrow APY with the discount":"Add stkAAVE to see borrow APY with the discount","Add to wallet":"Add to wallet","Add {0} to wallet to track your balance.":["Add ",["0"]," to wallet to track your balance."],"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","Address is not a contract":"Address is not a contract","Addresses":"Addresses","Addresses ({0})":["Addresses (",["0"],")"],"All Assets":"All Assets","All done!":"All done!","All proposals":"All proposals","All transactions":"All transactions","Allowance required action":"Allowance required action","Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.":"Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.","Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.":"Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.","Amount":"Amount","Amount claimable":"Amount claimable","Amount in cooldown":"Amount in cooldown","Amount must be greater than 0":"Amount must be greater than 0","Amount to migrate":"Amount to migrate","Amount to unstake":"Amount to unstake","An error has occurred fetching the proposal.":"An error has occurred fetching the proposal.","Approve Confirmed":"Approve Confirmed","Approve with":"Approve with","Approve {symbol} to continue":["Approve ",["symbol"]," to continue"],"Approving {symbol}...":["Approving ",["symbol"],"..."],"Array parameters that should be equal length are not":"Array parameters that should be equal length are not","As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.":"As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.","Asset":"Asset","Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.":"Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.","Asset can only be used as collateral in isolation mode only.":"Asset can only be used as collateral in isolation mode only.","Asset cannot be migrated because you have isolated collateral in {marketName} v3 Market which limits borrowable assets. You can manage your collateral in <0>{marketName} V3 Dashboard":["Asset cannot be migrated because you have isolated collateral in ",["marketName"]," v3 Market which limits borrowable assets. You can manage your collateral in <0>",["marketName"]," V3 Dashboard"],"Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in {marketName} v3 market.":["Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in ",["marketName"]," v3 market."],"Asset cannot be migrated due to supply cap restriction in {marketName} v3 market.":["Asset cannot be migrated due to supply cap restriction in ",["marketName"]," v3 market."],"Asset cannot be migrated to {marketName} V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard":["Asset cannot be migrated to ",["marketName"]," V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard"],"Asset cannot be migrated to {marketName} v3 Market since collateral asset will enable isolation mode.":["Asset cannot be migrated to ",["marketName"]," v3 Market since collateral asset will enable isolation mode."],"Asset cannot be used as collateral.":"Asset cannot be used as collateral.","Asset category":"Asset category","Asset is frozen in {marketName} v3 market, hence this position cannot be migrated.":["Asset is frozen in ",["marketName"]," v3 market, hence this position cannot be migrated."],"Asset is not borrowable in isolation mode":"Asset is not borrowable in isolation mode","Asset is not listed":"Asset is not listed","Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.":"Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.","Assets":"Assets","Assets to borrow":"Assets to borrow","Assets to supply":"Assets to supply","Assets with zero LTV ({0}) must be withdrawn or disabled as collateral to perform this action":["Assets with zero LTV (",["0"],") must be withdrawn or disabled as collateral to perform this action"],"At a discount":"At a discount","Available":"Available","Available assets":"Available assets","Available liquidity":"Available liquidity","Available on":"Available on","Available rewards":"Available rewards","Available to borrow":"Available to borrow","Available to supply":"Available to supply","Back to Dashboard":"Back to Dashboard","Balance":"Balance","Balance to revoke":"Balance to revoke","Balancer Pool":"Balancer Pool","Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions":"Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions","Be mindful of the network congestion and gas prices.":"Be mindful of the network congestion and gas prices.","Because this asset is paused, no actions can be taken until further notice":"Because this asset is paused, no actions can be taken until further notice","Before supplying":"Before supplying","Blocked Address":"Blocked Address","Borrow":"Borrow","Borrow APY":"Borrow APY","Borrow APY rate":"Borrow APY rate","Borrow APY, variable":"Borrow APY, variable","Borrow amount to reach {0}% utilization":["Borrow amount to reach ",["0"],"% utilization"],"Borrow and repay in same block is not allowed":"Borrow and repay in same block is not allowed","Borrow apy":"Borrow apy","Borrow balance":"Borrow balance","Borrow balance after repay":"Borrow balance after repay","Borrow balance after switch":"Borrow balance after switch","Borrow cap":"Borrow cap","Borrow cap is exceeded":"Borrow cap is exceeded","Borrow info":"Borrow info","Borrow power used":"Borrow power used","Borrow rate change":"Borrow rate change","Borrow {symbol}":["Borrow ",["symbol"]],"Borrowed":"Borrowed","Borrowed asset amount":"Borrowed asset amount","Borrowed assets":"Borrowed assets","Borrowing is currently unavailable for {0}.":["Borrowing is currently unavailable for ",["0"],"."],"Borrowing is disabled due to an Aave community decision. <0>More details":"Borrowing is disabled due to an Aave community decision. <0>More details","Borrowing is not enabled":"Borrowing is not enabled","Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for {0} category. To manage E-Mode categories visit your <0>Dashboard.":["Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for ",["0"]," category. To manage E-Mode categories visit your <0>Dashboard."],"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.":"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.","Borrowing power and assets are limited due to Isolation mode.":"Borrowing power and assets are limited due to Isolation mode.","Borrowing this amount will reduce your health factor and increase risk of liquidation.":"Borrowing this amount will reduce your health factor and increase risk of liquidation.","Borrowing {symbol}":["Borrowing ",["symbol"]],"Both":"Both","Buy Crypto With Fiat":"Buy Crypto With Fiat","Buy Crypto with Fiat":"Buy Crypto with Fiat","Buy {cryptoSymbol} with Fiat":["Buy ",["cryptoSymbol"]," with Fiat"],"COPIED!":"COPIED!","COPY IMAGE":"COPY IMAGE","Can be collateral":"Can be collateral","Can be executed":"Can be executed","Can't validate the wallet address. Try again.":"Can't validate the wallet address. Try again.","Cancel":"Cancel","Cannot disable E-Mode":"Cannot disable E-Mode","Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.":"Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.","Choose one of the on-ramp services":"Choose one of the on-ramp services","Claim":"Claim","Claim all":"Claim all","Claim all rewards":"Claim all rewards","Claim {0}":["Claim ",["0"]],"Claim {symbol}":["Claim ",["symbol"]],"Claimable AAVE":"Claimable AAVE","Claimed":"Claimed","Claiming":"Claiming","Claiming {symbol}":["Claiming ",["symbol"]],"Close":"Close","Collateral":"Collateral","Collateral balance after repay":"Collateral balance after repay","Collateral change":"Collateral change","Collateral is (mostly) the same currency that is being borrowed":"Collateral is (mostly) the same currency that is being borrowed","Collateral to repay with":"Collateral to repay with","Collateral usage":"Collateral usage","Collateral usage is limited because of Isolation mode.":"Collateral usage is limited because of Isolation mode.","Collateral usage is limited because of isolation mode.":"Collateral usage is limited because of isolation mode.","Collateral usage is limited because of isolation mode. <0>Learn More":"Collateral usage is limited because of isolation mode. <0>Learn More","Collateralization":"Collateralization","Collector Contract":"Collector Contract","Collector Info":"Collector Info","Confirm transaction":"Confirm transaction","Confirming transaction":"Confirming transaction","Connect":"Connect","Connect wallet":"Connect wallet","Cooldown period":"Cooldown period","Cooldown period warning":"Cooldown period warning","Cooldown time left":"Cooldown time left","Cooldown to unstake":"Cooldown to unstake","Cooling down...":"Cooling down...","Copy address":"Copy address","Copy error message":"Copy error message","Copy error text":"Copy error text","Covered debt":"Covered debt","Current LTV":"Current LTV","Current differential":"Current differential","Current rewards":"Current rewards","Current v2 Balance":"Current v2 Balance","Current v2 balance":"Current v2 balance","Current votes":"Current votes","DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.":"DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.","Dark mode":"Dark mode","Dashboard":"Dashboard","Data couldn't be fetched, please reload graph.":"Data couldn't be fetched, please reload graph.","Debt":"Debt","Debt ceiling is exceeded":"Debt ceiling is exceeded","Debt ceiling is not zero":"Debt ceiling is not zero","Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.":"Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.","Delegated power":"Delegated power","Details":"Details","Developers":"Developers","Differential":"Differential","Disable E-Mode":"Disable E-Mode","Disable fork":"Disable fork","Disable testnet":"Disable testnet","Disable {symbol} as collateral":["Disable ",["symbol"]," as collateral"],"Disabled":"Disabled","Disabling E-Mode":"Disabling E-Mode","Disabling this asset as collateral affects your borrowing power and Health Factor.":"Disabling this asset as collateral affects your borrowing power and Health Factor.","Disconnect Wallet":"Disconnect Wallet","Discord channel":"Discord channel","Discount":"Discount","Discount applied for <0/> staking AAVE":"Discount applied for <0/> staking AAVE","Discount model parameters":"Discount model parameters","Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more":"Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more","Discountable amount":"Discountable amount","Docs":"Docs","Download":"Download","Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.":"Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.","Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.":"Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.","Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.":"Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.","During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.":"During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.","E-Mode":"E-Mode","E-Mode Category":"E-Mode Category","E-Mode category":"E-Mode category","E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more":"E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more","E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more":"E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more","E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.":"E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.","Edit":"Edit","Effective interest rate":"Effective interest rate","Efficiency mode (E-Mode)":"Efficiency mode (E-Mode)","Eligible for the merit program.":"Eligible for the merit program.","Email":"Email","Emode":"Emode","Enable E-Mode":"Enable E-Mode","Enable {symbol} as collateral":["Enable ",["symbol"]," as collateral"],"Enabled":"Enabled","Enabling E-Mode":"Enabling E-Mode","Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.":"Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.","Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.":"Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.","English":"English","Enter ETH address":"Enter ETH address","Enter an amount":"Enter an amount","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Estimated borrow rate":"Estimated borrow rate","Estimated compounding interest, including discount for Staking {0}AAVE in Safety Module.":["Estimated compounding interest, including discount for Staking ",["0"],"AAVE in Safety Module."],"Exceeds the discount":"Exceeds the discount","Exchange rate":"Exchange rate","Expected amount to repay":"Expected amount to repay","Expires":"Expires","Export data to":"Export data to","FAQ":"FAQ","FAQS":"FAQS","Failed to load proposal voters. Please refresh the page.":"Failed to load proposal voters. Please refresh the page.","Faucet":"Faucet","Faucet {0}":["Faucet ",["0"]],"Feedback":"Feedback","Fetching data...":"Fetching data...","Filter":"Filter","Fixed":"Fixed","Fixed rate":"Fixed rate","Flashloan is disabled for this asset, hence this position cannot be migrated.":"Flashloan is disabled for this asset, hence this position cannot be migrated.","For repayment of a specific type of debt, the user needs to have debt that type":"For repayment of a specific type of debt, the user needs to have debt that type","Fork mode is ON":"Fork mode is ON","Forum discussion":"Forum discussion","French":"French","Funds in the Safety Module":"Funds in the Safety Module","GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.":"GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.","Get ABP Token":"Get ABP Token","Get ABP v2 Token":"Get ABP v2 Token","Get GHO":"Get GHO","Global settings":"Global settings","Go Back":"Go Back","Go to Balancer Pool":"Go to Balancer Pool","Go to V3 Dashboard":"Go to V3 Dashboard","Governance":"Governance","Greek":"Greek","Health factor":"Health factor","Health factor is lesser than the liquidation threshold":"Health factor is lesser than the liquidation threshold","Health factor is not below the threshold":"Health factor is not below the threshold","Hide":"Hide","Holders of stkAAVE receive a discount on the GHO borrowing rate":"Holders of stkAAVE receive a discount on the GHO borrowing rate","I acknowledge the risks involved.":"I acknowledge the risks involved.","I fully understand the risks of migrating.":"I fully understand the risks of migrating.","I understand how cooldown ({0}) and unstaking ({1}) work":["I understand how cooldown (",["0"],") and unstaking (",["1"],") work"],"If the error continues to happen,<0/> you may report it to this":"If the error continues to happen,<0/> you may report it to this","If the health factor goes below 1, the liquidation of your collateral might be triggered.":"If the health factor goes below 1, the liquidation of your collateral might be triggered.","If you DO NOT unstake within {0} of unstake window, you will need to activate cooldown process again.":["If you DO NOT unstake within ",["0"]," of unstake window, you will need to activate cooldown process again."],"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.":"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.","In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets":"In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets","In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable {0} as collateral before borrowing another asset. Read more in our <0>FAQ":["In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable ",["0"]," as collateral before borrowing another asset. Read more in our <0>FAQ"],"Inconsistent flashloan parameters":"Inconsistent flashloan parameters","Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.":"Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.","Interest accrued":"Interest accrued","Interest rate rebalance conditions were not met":"Interest rate rebalance conditions were not met","Interest rate strategy":"Interest rate strategy","Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more":"Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more","Invalid amount to burn":"Invalid amount to burn","Invalid amount to mint":"Invalid amount to mint","Invalid bridge protocol fee":"Invalid bridge protocol fee","Invalid expiration":"Invalid expiration","Invalid flashloan premium":"Invalid flashloan premium","Invalid return value of the flashloan executor function":"Invalid return value of the flashloan executor function","Invalid signature":"Invalid signature","Isolated":"Isolated","Isolated Debt Ceiling":"Isolated Debt Ceiling","Isolated assets have limited borrowing power and other assets cannot be used as collateral.":"Isolated assets have limited borrowing power and other assets cannot be used as collateral.","Join the community discussion":"Join the community discussion","Language":"Language","Learn more":"Learn more","Learn more about risks involved":"Learn more about risks involved","Learn more in our <0>FAQ guide":"Learn more in our <0>FAQ guide","Learn more.":"Learn more.","Let us know how we can make the app better for you. For user support related inquiries please reach out on":"Let us know how we can make the app better for you. For user support related inquiries please reach out on","Linked addresses":"Linked addresses","Links":"Links","Liqudation":"Liqudation","Liquidated collateral":"Liquidated collateral","Liquidation":"Liquidation","Liquidation <0/> threshold":"Liquidation <0/> threshold","Liquidation Threshold":"Liquidation Threshold","Liquidation at":"Liquidation at","Liquidation penalty":"Liquidation penalty","Liquidation risk":"Liquidation risk","Liquidation risk parameters":"Liquidation risk parameters","Liquidation threshold":"Liquidation threshold","Liquidation value":"Liquidation value","Loading data...":"Loading data...","Ltv validation failed":"Ltv validation failed","MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details":"MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details","MAX":"MAX","Manage analytics":"Manage analytics","Market":"Market","Markets":"Markets","Max":"Max","Max LTV":"Max LTV","Max slashing":"Max slashing","Max slippage":"Max slippage","Maximum amount available to borrow against this asset is limited because debt ceiling is at {0}%.":["Maximum amount available to borrow against this asset is limited because debt ceiling is at ",["0"],"%."],"Maximum amount available to borrow is <0/> {0} (<1/>).":["Maximum amount available to borrow is <0/> ",["0"]," (<1/>)."],"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.":"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.","Maximum amount available to supply is <0/> {0} (<1/>).":["Maximum amount available to supply is <0/> ",["0"]," (<1/>)."],"Maximum amount available to supply is limited because protocol supply cap is at {0}%.":["Maximum amount available to supply is limited because protocol supply cap is at ",["0"],"%."],"Maximum amount received":"Maximum amount received","Maximum available to borrow":"Maximum available to borrow","Maximum collateral amount to use":"Maximum collateral amount to use","Maximum loan to value":"Maximum loan to value","Meet GHO":"Meet GHO","Menu":"Menu","Merit Program":"Merit Program","Migrate":"Migrate","Migrate to Aave V3":"Migrate to Aave V3","Migrate to V3":"Migrate to V3","Migrate to stkABPT v2":"Migrate to stkABPT v2","Migrate to v3":"Migrate to v3","Migrate to {0} v3 Market":["Migrate to ",["0"]," v3 Market"],"Migrate your assets":"Migrate your assets","Migrated":"Migrated","Migrating":"Migrating","Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.":"Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.","Migration risks":"Migration risks","Minimum GHO borrow amount":"Minimum GHO borrow amount","Minimum USD value received":"Minimum USD value received","Minimum amount of debt to be repaid":"Minimum amount of debt to be repaid","Minimum amount received":"Minimum amount received","Minimum staked Aave amount":"Minimum staked Aave amount","Minimum {0} received":["Minimum ",["0"]," received"],"More":"More","NAY":"NAY","Need help connecting a wallet? <0>Read our FAQ":"Need help connecting a wallet? <0>Read our FAQ","Net APR":"Net APR","Net APY":"Net APY","Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.":"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.","Net worth":"Net worth","Network":"Network","Network not supported for this wallet":"Network not supported for this wallet","New APY":"New APY","No assets selected to migrate.":"No assets selected to migrate.","No results found. You can import a custom token with a contract address":"No results found. You can import a custom token with a contract address","No rewards to claim":"No rewards to claim","No search results{0}":["No search results",["0"]],"No transactions yet.":"No transactions yet.","No voting power":"No voting power","None":"None","Not a valid address":"Not a valid address","Not enough balance on your wallet":"Not enough balance on your wallet","Not enough collateral to repay this amount of debt with":"Not enough collateral to repay this amount of debt with","Not enough staked balance":"Not enough staked balance","Not enough voting power to participate in this proposal":"Not enough voting power to participate in this proposal","Not reached":"Not reached","Nothing borrowed yet":"Nothing borrowed yet","Nothing found":"Nothing found","Nothing staked":"Nothing staked","Nothing supplied yet":"Nothing supplied yet","Ok, Close":"Ok, Close","Operation not supported":"Operation not supported","Oracle price":"Oracle price","Overview":"Overview","Page not found":"Page not found","Participating in this {symbol} reserve gives annualized rewards.":["Participating in this ",["symbol"]," reserve gives annualized rewards."],"Pending...":"Pending...","Per the community, the Fantom market has been frozen.":"Per the community, the Fantom market has been frozen.","Per the community, the V2 AMM market has been deprecated.":"Per the community, the V2 AMM market has been deprecated.","Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.":"Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.","Please connect a wallet to view your personal information here.":"Please connect a wallet to view your personal information here.","Please connect your wallet to be able to switch your tokens.":"Please connect your wallet to be able to switch your tokens.","Please connect your wallet to get free testnet assets.":"Please connect your wallet to get free testnet assets.","Please connect your wallet to see migration tool.":"Please connect your wallet to see migration tool.","Please connect your wallet to see your supplies, borrowings, and open positions.":"Please connect your wallet to see your supplies, borrowings, and open positions.","Please connect your wallet to view transaction history.":"Please connect your wallet to view transaction history.","Please enter a valid wallet address.":"Please enter a valid wallet address.","Please switch to {networkName}.":["Please switch to ",["networkName"],"."],"Please, connect your wallet":"Please, connect your wallet","Pool addresses provider is not registered":"Pool addresses provider is not registered","Powered by":"Powered by","Preview tx and migrate":"Preview tx and migrate","Price":"Price","Price data is not currently available for this reserve on the protocol subgraph":"Price data is not currently available for this reserve on the protocol subgraph","Price impact":"Price impact","Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.":"Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.","Price impact {0}%":["Price impact ",["0"],"%"],"Privacy":"Privacy","Proposal details":"Proposal details","Proposal overview":"Proposal overview","Proposals":"Proposals","Proposition":"Proposition","Protocol borrow cap at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap at 100% for this asset. Further borrowing unavailable.","Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.","Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.","Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.","Protocol supply cap at 100% for this asset. Further supply unavailable.":"Protocol supply cap at 100% for this asset. Further supply unavailable.","Protocol supply cap is at 100% for this asset. Further supply unavailable.":"Protocol supply cap is at 100% for this asset. Further supply unavailable.","Quorum":"Quorum","Rate change":"Rate change","Raw-Ipfs":"Raw-Ipfs","Reached":"Reached","Reactivate cooldown period to unstake {0} {stakedToken}":["Reactivate cooldown period to unstake ",["0"]," ",["stakedToken"]],"Read more here.":"Read more here.","Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.":"Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.","Read-only mode.":"Read-only mode.","Read-only mode. Connect to a wallet to perform transactions.":"Read-only mode. Connect to a wallet to perform transactions.","Receive (est.)":"Receive (est.)","Received":"Received","Recipient address":"Recipient address","Rejected connection request":"Rejected connection request","Reload":"Reload","Reload the page":"Reload the page","Remaining debt":"Remaining debt","Remaining supply":"Remaining supply","Remind me":"Remind me","Remove":"Remove","Repaid":"Repaid","Repay":"Repay","Repay with":"Repay with","Repay {symbol}":["Repay ",["symbol"]],"Repaying {symbol}":["Repaying ",["symbol"]],"Repayment amount to reach {0}% utilization":["Repayment amount to reach ",["0"],"% utilization"],"Representative smart contract wallet (ie. Safe) addresses on other chains.":"Representative smart contract wallet (ie. Safe) addresses on other chains.","Representing smart contract wallet (ie. Safe) addresses on other chains.":"Representing smart contract wallet (ie. Safe) addresses on other chains.","Reserve Size":"Reserve Size","Reserve factor":"Reserve factor","Reserve factor is a percentage of interest which goes to a {0} that is controlled by Aave governance to promote ecosystem growth.":["Reserve factor is a percentage of interest which goes to a ",["0"]," that is controlled by Aave governance to promote ecosystem growth."],"Reserve status & configuration":"Reserve status & configuration","Reset":"Reset","Restake":"Restake","Restake {symbol}":["Restake ",["symbol"]],"Restaked":"Restaked","Restaking {symbol}":["Restaking ",["symbol"]],"Review approval tx details":"Review approval tx details","Review tx":"Review tx","Review tx details":"Review tx details","Revoke power":"Revoke power","Reward(s) to claim":"Reward(s) to claim","Rewards APR":"Rewards APR","Risk details":"Risk details","SEE CHARTS":"SEE CHARTS","Safety of your deposited collateral against the borrowed assets and its underlying value.":"Safety of your deposited collateral against the borrowed assets and its underlying value.","Save and share":"Save and share","Seems like we can't switch the network automatically. Please check if you can change it from the wallet.":"Seems like we can't switch the network automatically. Please check if you can change it from the wallet.","Select":"Select","Select APY type to switch":"Select APY type to switch","Select an asset":"Select an asset","Select language":"Select language","Select slippage tolerance":"Select slippage tolerance","Selected assets have successfully migrated. Visit the Market Dashboard to see them.":"Selected assets have successfully migrated. Visit the Market Dashboard to see them.","Selected borrow assets":"Selected borrow assets","Selected supply assets":"Selected supply assets","Send Feedback":"Send Feedback","Send feedback":"Send feedback","Set up delegation":"Set up delegation","Share on Lens":"Share on Lens","Share on twitter":"Share on twitter","Show":"Show","Show Frozen or paused assets":"Show Frozen or paused assets","Show assets with 0 balance":"Show assets with 0 balance","Sign to continue":"Sign to continue","Signatures ready":"Signatures ready","Signing":"Signing","Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard":"Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard","Since this is a test network, you can get any of the assets if you have ETH on your wallet":"Since this is a test network, you can get any of the assets if you have ETH on your wallet","Slippage":"Slippage","Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.":"Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.","Some migrated assets will not be used as collateral due to enabled isolation mode in {marketName} V3 Market. Visit <0>{marketName} V3 Dashboard to manage isolation mode.":["Some migrated assets will not be used as collateral due to enabled isolation mode in ",["marketName"]," V3 Market. Visit <0>",["marketName"]," V3 Dashboard to manage isolation mode."],"Something went wrong":"Something went wrong","Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.":"Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.","Sorry, we couldn't find the page you were looking for.":"Sorry, we couldn't find the page you were looking for.","Spanish":"Spanish","Stable":"Stable","Stable Interest Type is disabled for this currency":"Stable Interest Type is disabled for this currency","Stable borrowing is enabled":"Stable borrowing is enabled","Stable borrowing is not enabled":"Stable borrowing is not enabled","Stable debt supply is not zero":"Stable debt supply is not zero","Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.":"Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.","Stablecoin":"Stablecoin","Stake":"Stake","Stake AAVE":"Stake AAVE","Stake ABPT":"Stake ABPT","Stake GHO":"Stake GHO","Stake cooldown activated":"Stake cooldown activated","Staked":"Staked","Staking":"Staking","Staking APR":"Staking APR","Staking Rewards":"Staking Rewards","Staking balance":"Staking balance","Staking discount":"Staking discount","State":"State","Submission did not work, please try again later or contact wecare@avara.xyz":"Submission did not work, please try again later or contact wecare@avara.xyz","Supplied":"Supplied","Supplied asset amount":"Supplied asset amount","Supplied assets":"Supplied assets","Supply":"Supply","Supply APY":"Supply APY","Supply apy":"Supply apy","Supply balance":"Supply balance","Supply balance after switch":"Supply balance after switch","Supply cap is exceeded":"Supply cap is exceeded","Supply cap on target reserve reached. Try lowering the amount.":"Supply cap on target reserve reached. Try lowering the amount.","Supply {symbol}":["Supply ",["symbol"]],"Supplying your":"Supplying your","Supplying {symbol}":["Supplying ",["symbol"]],"Switch":"Switch","Switch APY type":"Switch APY type","Switch E-Mode":"Switch E-Mode","Switch E-Mode category":"Switch E-Mode category","Switch Network":"Switch Network","Switch borrow position":"Switch borrow position","Switch rate":"Switch rate","Switch to":"Switch to","Switched":"Switched","Switching":"Switching","Switching E-Mode":"Switching E-Mode","Switching rate":"Switching rate","Techpaper":"Techpaper","Terms":"Terms","Test Assets":"Test Assets","Testnet mode":"Testnet mode","Testnet mode is ON":"Testnet mode is ON","Thank you for submitting feedback!":"Thank you for submitting feedback!","Thank you for voting!!":"Thank you for voting!!","The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.":"The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.","The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.":"The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.","The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.":"The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.","The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.":"The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.","The Stable Rate is not enabled for this currency":"The Stable Rate is not enabled for this currency","The address of the pool addresses provider is invalid":"The address of the pool addresses provider is invalid","The app is running in fork mode.":"The app is running in fork mode.","The app is running in testnet mode. Learn how it works in":"The app is running in testnet mode. Learn how it works in","The caller of the function is not an AToken":"The caller of the function is not an AToken","The caller of this function must be a pool":"The caller of this function must be a pool","The collateral balance is 0":"The collateral balance is 0","The collateral chosen cannot be liquidated":"The collateral chosen cannot be liquidated","The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more":"The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more","The cooldown period is {0}. After {1} of cooldown, you will enter unstake window of {2}. You will continue receiving rewards during cooldown and unstake window.":["The cooldown period is ",["0"],". After ",["1"]," of cooldown, you will enter unstake window of ",["2"],". You will continue receiving rewards during cooldown and unstake window."],"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.":"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.","The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.":"The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.","The requested amount is greater than the max loan size in stable rate mode":"The requested amount is greater than the max loan size in stable rate mode","The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.":"The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.","The underlying asset cannot be rescued":"The underlying asset cannot be rescued","The underlying balance needs to be greater than 0":"The underlying balance needs to be greater than 0","The weighted average of APY for all borrowed assets, including incentives.":"The weighted average of APY for all borrowed assets, including incentives.","The weighted average of APY for all supplied assets, including incentives.":"The weighted average of APY for all supplied assets, including incentives.","There are not enough funds in the{0}reserve to borrow":["There are not enough funds in the",["0"],"reserve to borrow"],"There is not enough collateral to cover a new borrow":"There is not enough collateral to cover a new borrow","There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.":"There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.","There was some error. Please try changing the parameters or <0><1>copy the error":"There was some error. Please try changing the parameters or <0><1>copy the error","These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.":"These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.","These funds have been borrowed and are not available for withdrawal at this time.":"These funds have been borrowed and are not available for withdrawal at this time.","This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.":"This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.","This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.":"This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.","This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.":"This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.","This address is blocked on app.aave.com because it is associated with one or more":"This address is blocked on app.aave.com because it is associated with one or more","This asset has almost reached its borrow cap. There is only {messageValue} available to be borrowed from this market.":["This asset has almost reached its borrow cap. There is only ",["messageValue"]," available to be borrowed from this market."],"This asset has almost reached its supply cap. There can only be {messageValue} supplied to this market.":["This asset has almost reached its supply cap. There can only be ",["messageValue"]," supplied to this market."],"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.":"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.","This asset has reached its borrow cap. Nothing is available to be borrowed from this market.":"This asset has reached its borrow cap. Nothing is available to be borrowed from this market.","This asset has reached its supply cap. Nothing is available to be supplied from this market.":"This asset has reached its supply cap. Nothing is available to be supplied from this market.","This asset is frozen due to an Aave Protocol Governance decision. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. <0>More details","This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details","This asset is frozen due to an Aave community decision. <0>More details":"This asset is frozen due to an Aave community decision. <0>More details","This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details":"This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details","This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.":"This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.","This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.":"This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.","This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.":"This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.","This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.":"This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.","Time left to unstake":"Time left to unstake","Time remaining until the 48 hour withdraw period starts.":"Time remaining until the 48 hour withdraw period starts.","Time remaining until the withdraw period ends.":"Time remaining until the withdraw period ends.","Tip: Try increasing slippage or reduce input amount":"Tip: Try increasing slippage or reduce input amount","To borrow you need to supply any asset to be used as collateral.":"To borrow you need to supply any asset to be used as collateral.","To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more":"To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more","To enable E-mode for the {0} category, all borrow positions outside of this category must be closed.":["To enable E-mode for the ",["0"]," category, all borrow positions outside of this category must be closed."],"To repay on behalf of a user an explicit amount to repay is needed":"To repay on behalf of a user an explicit amount to repay is needed","To request access for this permissioned market, please visit: <0>Acces Provider Name":"To request access for this permissioned market, please visit: <0>Acces Provider Name","To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.":"To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.","Top 10 addresses":"Top 10 addresses","Total available":"Total available","Total borrowed":"Total borrowed","Total borrows":"Total borrows","Total emission per day":"Total emission per day","Total interest accrued":"Total interest accrued","Total market size":"Total market size","Total supplied":"Total supplied","Total worth":"Total worth","Track wallet":"Track wallet","Track wallet balance in read-only mode":"Track wallet balance in read-only mode","Transaction failed":"Transaction failed","Transaction history":"Transaction history","Transaction history is not currently available for this market":"Transaction history is not currently available for this market","Transaction overview":"Transaction overview","Transactions":"Transactions","Unavailable":"Unavailable","Unbacked":"Unbacked","Unbacked mint cap is exceeded":"Unbacked mint cap is exceeded","Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated.":["Underlying asset does not exist in ",["marketName"]," v3 Market, hence this position cannot be migrated."],"Underlying token":"Underlying token","Unstake":"Unstake","Unstake now":"Unstake now","Unstake window":"Unstake window","Unstake {symbol}":["Unstake ",["symbol"]],"Unstaked":"Unstaked","Unstaking {symbol}":["Unstaking ",["symbol"]],"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.":"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.","Use it to vote for or against active proposals.":"Use it to vote for or against active proposals.","Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.":"Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.","Used as collateral":"Used as collateral","User cannot withdraw more than the available balance":"User cannot withdraw more than the available balance","User did not borrow the specified currency":"User did not borrow the specified currency","User does not have outstanding stable rate debt on this reserve":"User does not have outstanding stable rate debt on this reserve","User does not have outstanding variable rate debt on this reserve":"User does not have outstanding variable rate debt on this reserve","User is in isolation mode or LTV is zero":"User is in isolation mode or LTV is zero","User is trying to borrow multiple assets including a siloed one":"User is trying to borrow multiple assets including a siloed one","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.","Utilization Rate":"Utilization Rate","VIEW TX":"VIEW TX","VOTE NAY":"VOTE NAY","VOTE YAE":"VOTE YAE","Variable":"Variable","Variable debt supply is not zero":"Variable debt supply is not zero","Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.":"Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.","Variable rate":"Variable rate","Version 2":"Version 2","Version 3":"Version 3","View":"View","View Transactions":"View Transactions","View all votes":"View all votes","View contract":"View contract","View details":"View details","View on Explorer":"View on Explorer","Vote NAY":"Vote NAY","Vote YAE":"Vote YAE","Voted NAY":"Voted NAY","Voted YAE":"Voted YAE","Votes":"Votes","Voting":"Voting","Voting is on":"Voting is on","Voting power":"Voting power","Voting results":"Voting results","Wallet Balance":"Wallet Balance","Wallet balance":"Wallet balance","Wallet not detected. Connect or install wallet and retry":"Wallet not detected. Connect or install wallet and retry","Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.":"Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.","We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.":"We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.","We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.":"We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.","We couldn’t detect a wallet. Connect a wallet to stake and view your balance.":"We couldn’t detect a wallet. Connect a wallet to stake and view your balance.","We suggest you go back to the Dashboard.":"We suggest you go back to the Dashboard.","Website":"Website","When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.":"When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.","With a voting power of <0/>":"With a voting power of <0/>","With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more":"With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more","Withdraw":"Withdraw","Withdraw & Switch":"Withdraw & Switch","Withdraw and Switch":"Withdraw and Switch","Withdraw {symbol}":["Withdraw ",["symbol"]],"Withdrawing":"Withdrawing","Withdrawing and Switching":"Withdrawing and Switching","Withdrawing this amount will reduce your health factor and increase risk of liquidation.":"Withdrawing this amount will reduce your health factor and increase risk of liquidation.","Withdrawing {symbol}":["Withdrawing ",["symbol"]],"Wrong Network":"Wrong Network","YAE":"YAE","You are entering Isolation mode":"You are entering Isolation mode","You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.":"You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.","You can not change Interest Type to stable as your borrowings are higher than your collateral":"You can not change Interest Type to stable as your borrowings are higher than your collateral","You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.":"You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.","You can not switch usage as collateral mode for this currency, because it will cause collateral call":"You can not switch usage as collateral mode for this currency, because it will cause collateral call","You can not use this currency as collateral":"You can not use this currency as collateral","You can not withdraw this amount because it will cause collateral call":"You can not withdraw this amount because it will cause collateral call","You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.":"You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.","You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.":"You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.","You can report incident to our <0>Discord or<1>Github.":"You can report incident to our <0>Discord or<1>Github.","You cancelled the transaction.":"You cancelled the transaction.","You did not participate in this proposal":"You did not participate in this proposal","You do not have supplies in this currency":"You do not have supplies in this currency","You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.":"You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.","You have no AAVE/stkAAVE/aAave balance to delegate.":"You have no AAVE/stkAAVE/aAave balance to delegate.","You have not borrow yet using this currency":"You have not borrow yet using this currency","You may borrow up to <0/> GHO at <1/> (max discount)":"You may borrow up to <0/> GHO at <1/> (max discount)","You may enter a custom amount in the field.":"You may enter a custom amount in the field.","You switched to {0} rate":["You switched to ",["0"]," rate"],"You unstake here":"You unstake here","You voted {0}":["You voted ",["0"]],"You will exit isolation mode and other tokens can now be used as collateral":"You will exit isolation mode and other tokens can now be used as collateral","You {action} <0/> {symbol}":["You ",["action"]," <0/> ",["symbol"]],"You've successfully switched borrow position.":"You've successfully switched borrow position.","You've successfully switched tokens.":"You've successfully switched tokens.","You've successfully withdrew & switched tokens.":"You've successfully withdrew & switched tokens.","Your balance is lower than the selected amount.":"Your balance is lower than the selected amount.","Your borrows":"Your borrows","Your current loan to value based on your collateral supplied.":"Your current loan to value based on your collateral supplied.","Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.":"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.","Your info":"Your info","Your proposition power is based on your AAVE/stkAAVE balance and received delegations.":"Your proposition power is based on your AAVE/stkAAVE balance and received delegations.","Your reward balance is 0":"Your reward balance is 0","Your supplies":"Your supplies","Your voting info":"Your voting info","Your voting power is based on your AAVE/stkAAVE balance and received delegations.":"Your voting power is based on your AAVE/stkAAVE balance and received delegations.","Your {name} wallet is empty. Purchase or transfer assets or use <0>{0} to transfer your {network} assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets or use <0>",["0"]," to transfer your ",["network"]," assets."],"Your {name} wallet is empty. Purchase or transfer assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets."],"Your {networkName} wallet is empty. Get free test assets at":["Your ",["networkName"]," wallet is empty. Get free test assets at"],"Your {networkName} wallet is empty. Get free test {0} at":["Your ",["networkName"]," wallet is empty. Get free test ",["0"]," at"],"Zero address not valid":"Zero address not valid","assets":"assets","blocked activities":"blocked activities","copy the error":"copy the error","disabled":"disabled","documentation":"documentation","enabled":"enabled","ends":"ends","for":"for","of":"of","on":"on","please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.":"please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.","repaid":"repaid","stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.":"stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.","stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: {0}":["stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: ",["0"]],"staking view":"staking view","starts":"starts","stkAAVE holders get a discount on GHO borrow rate":"stkAAVE holders get a discount on GHO borrow rate","to":"to","tokens is not the same as staking them. If you wish to stake your":"tokens is not the same as staking them. If you wish to stake your","tokens, please go to the":"tokens, please go to the","withdrew":"withdrew","{0}":[["0"]],"{0} Balance":[["0"]," Balance"],"{0} Faucet":[["0"]," Faucet"],"{0} on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational.":[["0"]," on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational."],"{0}{name}":[["0"],["name"]],"{currentMethod}":[["currentMethod"]],"{d}d":[["d"],"d"],"{h}h":[["h"],"h"],"{m}m":[["m"],"m"],"{networkName} Faucet":[["networkName"]," Faucet"],"{notifyText}":[["notifyText"]],"{numSelected}/{numAvailable} assets selected":[["numSelected"],"/",["numAvailable"]," assets selected"],"{stepName}":[["stepName"]],"{s}s":[["s"],"s"],"{title}":[["title"]],"{tooltipText}":[["tooltipText"]]}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"...":"...",".CSV":".CSV",".JSON":".JSON","<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)":"<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)","<0><1><2/>Add stkAAVE to see borrow rate with discount":"<0><1><2/>Add stkAAVE to see borrow rate with discount","<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.":"<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.","<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.":"<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.","<0>Slippage tolerance <1>{selectedSlippage}% <2>{0}":["<0>Slippage tolerance <1>",["selectedSlippage"],"% <2>",["0"],""],"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.":"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.","APR":"APR","APY":"APY","APY change":"APY change","APY type":"APY type","APY type change":"APY type change","APY with discount applied":"APY with discount applied","APY, borrow rate":"APY, borrow rate","APY, stable":"APY, stable","APY, variable":"APY, variable","AToken supply is not zero":"AToken supply is not zero","Aave Governance":"Aave Governance","Aave aToken":"Aave aToken","Aave debt token":"Aave debt token","Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance":"Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance","Aave per month":"Aave per month","About GHO":"About GHO","Account":"Account","Action cannot be performed because the reserve is frozen":"Action cannot be performed because the reserve is frozen","Action cannot be performed because the reserve is paused":"Action cannot be performed because the reserve is paused","Action requires an active reserve":"Action requires an active reserve","Activate Cooldown":"Activate Cooldown","Add stkAAVE to see borrow APY with the discount":"Add stkAAVE to see borrow APY with the discount","Add to wallet":"Add to wallet","Add {0} to wallet to track your balance.":["Add ",["0"]," to wallet to track your balance."],"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","Address is not a contract":"Address is not a contract","Addresses":"Addresses","Addresses ({0})":["Addresses (",["0"],")"],"All Assets":"All Assets","All done!":"All done!","All proposals":"All proposals","All transactions":"All transactions","Allowance required action":"Allowance required action","Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.":"Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.","Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.":"Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.","Amount":"Amount","Amount claimable":"Amount claimable","Amount in cooldown":"Amount in cooldown","Amount must be greater than 0":"Amount must be greater than 0","Amount to migrate":"Amount to migrate","Amount to unstake":"Amount to unstake","An error has occurred fetching the proposal.":"An error has occurred fetching the proposal.","Approve Confirmed":"Approve Confirmed","Approve with":"Approve with","Approve {symbol} to continue":["Approve ",["symbol"]," to continue"],"Approving {symbol}...":["Approving ",["symbol"],"..."],"Array parameters that should be equal length are not":"Array parameters that should be equal length are not","As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.":"As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.","Asset":"Asset","Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.":"Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.","Asset can only be used as collateral in isolation mode only.":"Asset can only be used as collateral in isolation mode only.","Asset cannot be migrated because you have isolated collateral in {marketName} v3 Market which limits borrowable assets. You can manage your collateral in <0>{marketName} V3 Dashboard":["Asset cannot be migrated because you have isolated collateral in ",["marketName"]," v3 Market which limits borrowable assets. You can manage your collateral in <0>",["marketName"]," V3 Dashboard"],"Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in {marketName} v3 market.":["Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in ",["marketName"]," v3 market."],"Asset cannot be migrated due to supply cap restriction in {marketName} v3 market.":["Asset cannot be migrated due to supply cap restriction in ",["marketName"]," v3 market."],"Asset cannot be migrated to {marketName} V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard":["Asset cannot be migrated to ",["marketName"]," V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard"],"Asset cannot be migrated to {marketName} v3 Market since collateral asset will enable isolation mode.":["Asset cannot be migrated to ",["marketName"]," v3 Market since collateral asset will enable isolation mode."],"Asset cannot be used as collateral.":"Asset cannot be used as collateral.","Asset category":"Asset category","Asset is frozen in {marketName} v3 market, hence this position cannot be migrated.":["Asset is frozen in ",["marketName"]," v3 market, hence this position cannot be migrated."],"Asset is not borrowable in isolation mode":"Asset is not borrowable in isolation mode","Asset is not listed":"Asset is not listed","Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.":"Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.","Assets":"Assets","Assets to borrow":"Assets to borrow","Assets to supply":"Assets to supply","Assets with zero LTV ({0}) must be withdrawn or disabled as collateral to perform this action":["Assets with zero LTV (",["0"],") must be withdrawn or disabled as collateral to perform this action"],"At a discount":"At a discount","Available":"Available","Available assets":"Available assets","Available liquidity":"Available liquidity","Available on":"Available on","Available rewards":"Available rewards","Available to borrow":"Available to borrow","Available to supply":"Available to supply","Back to Dashboard":"Back to Dashboard","Balance":"Balance","Balance to revoke":"Balance to revoke","Balancer Pool":"Balancer Pool","Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions":"Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions","Be mindful of the network congestion and gas prices.":"Be mindful of the network congestion and gas prices.","Because this asset is paused, no actions can be taken until further notice":"Because this asset is paused, no actions can be taken until further notice","Before supplying":"Before supplying","Blocked Address":"Blocked Address","Borrow":"Borrow","Borrow APY":"Borrow APY","Borrow APY rate":"Borrow APY rate","Borrow APY, variable":"Borrow APY, variable","Borrow amount to reach {0}% utilization":["Borrow amount to reach ",["0"],"% utilization"],"Borrow and repay in same block is not allowed":"Borrow and repay in same block is not allowed","Borrow apy":"Borrow apy","Borrow balance":"Borrow balance","Borrow balance after repay":"Borrow balance after repay","Borrow balance after switch":"Borrow balance after switch","Borrow cap":"Borrow cap","Borrow cap is exceeded":"Borrow cap is exceeded","Borrow info":"Borrow info","Borrow power used":"Borrow power used","Borrow rate change":"Borrow rate change","Borrow {symbol}":["Borrow ",["symbol"]],"Borrowed":"Borrowed","Borrowed asset amount":"Borrowed asset amount","Borrowed assets":"Borrowed assets","Borrowing is currently unavailable for {0}.":["Borrowing is currently unavailable for ",["0"],"."],"Borrowing is disabled due to an Aave community decision. <0>More details":"Borrowing is disabled due to an Aave community decision. <0>More details","Borrowing is not enabled":"Borrowing is not enabled","Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for {0} category. To manage E-Mode categories visit your <0>Dashboard.":["Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for ",["0"]," category. To manage E-Mode categories visit your <0>Dashboard."],"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.":"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.","Borrowing power and assets are limited due to Isolation mode.":"Borrowing power and assets are limited due to Isolation mode.","Borrowing this amount will reduce your health factor and increase risk of liquidation.":"Borrowing this amount will reduce your health factor and increase risk of liquidation.","Borrowing {symbol}":["Borrowing ",["symbol"]],"Both":"Both","Buy Crypto With Fiat":"Buy Crypto With Fiat","Buy Crypto with Fiat":"Buy Crypto with Fiat","Buy {cryptoSymbol} with Fiat":["Buy ",["cryptoSymbol"]," with Fiat"],"COPIED!":"COPIED!","COPY IMAGE":"COPY IMAGE","Can be collateral":"Can be collateral","Can be executed":"Can be executed","Can't validate the wallet address. Try again.":"Can't validate the wallet address. Try again.","Cancel":"Cancel","Cannot disable E-Mode":"Cannot disable E-Mode","Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.":"Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.","Choose one of the on-ramp services":"Choose one of the on-ramp services","Claim":"Claim","Claim all":"Claim all","Claim all rewards":"Claim all rewards","Claim {0}":["Claim ",["0"]],"Claim {symbol}":["Claim ",["symbol"]],"Claimable AAVE":"Claimable AAVE","Claimed":"Claimed","Claiming":"Claiming","Claiming {symbol}":["Claiming ",["symbol"]],"Close":"Close","Collateral":"Collateral","Collateral balance after repay":"Collateral balance after repay","Collateral change":"Collateral change","Collateral is (mostly) the same currency that is being borrowed":"Collateral is (mostly) the same currency that is being borrowed","Collateral to repay with":"Collateral to repay with","Collateral usage":"Collateral usage","Collateral usage is limited because of Isolation mode.":"Collateral usage is limited because of Isolation mode.","Collateral usage is limited because of isolation mode.":"Collateral usage is limited because of isolation mode.","Collateral usage is limited because of isolation mode. <0>Learn More":"Collateral usage is limited because of isolation mode. <0>Learn More","Collateralization":"Collateralization","Collector Contract":"Collector Contract","Collector Info":"Collector Info","Confirm transaction":"Confirm transaction","Confirming transaction":"Confirming transaction","Connect":"Connect","Connect wallet":"Connect wallet","Cooldown period":"Cooldown period","Cooldown period warning":"Cooldown period warning","Cooldown time left":"Cooldown time left","Cooldown to unstake":"Cooldown to unstake","Cooling down...":"Cooling down...","Copy address":"Copy address","Copy error message":"Copy error message","Copy error text":"Copy error text","Covered debt":"Covered debt","Current LTV":"Current LTV","Current differential":"Current differential","Current rewards":"Current rewards","Current v2 Balance":"Current v2 Balance","Current v2 balance":"Current v2 balance","Current votes":"Current votes","DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.":"DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.","Dark mode":"Dark mode","Dashboard":"Dashboard","Data couldn't be fetched, please reload graph.":"Data couldn't be fetched, please reload graph.","Debt":"Debt","Debt ceiling is exceeded":"Debt ceiling is exceeded","Debt ceiling is not zero":"Debt ceiling is not zero","Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.":"Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.","Delegated power":"Delegated power","Details":"Details","Developers":"Developers","Differential":"Differential","Disable E-Mode":"Disable E-Mode","Disable fork":"Disable fork","Disable testnet":"Disable testnet","Disable {symbol} as collateral":["Disable ",["symbol"]," as collateral"],"Disabled":"Disabled","Disabling E-Mode":"Disabling E-Mode","Disabling this asset as collateral affects your borrowing power and Health Factor.":"Disabling this asset as collateral affects your borrowing power and Health Factor.","Disconnect Wallet":"Disconnect Wallet","Discord channel":"Discord channel","Discount":"Discount","Discount applied for <0/> staking AAVE":"Discount applied for <0/> staking AAVE","Discount model parameters":"Discount model parameters","Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more":"Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more","Discountable amount":"Discountable amount","Docs":"Docs","Download":"Download","Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.":"Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.","Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.":"Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.","Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.":"Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.","During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.":"During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.","E-Mode":"E-Mode","E-Mode Category":"E-Mode Category","E-Mode category":"E-Mode category","E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more":"E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more","E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more":"E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more","E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.":"E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.","Edit":"Edit","Effective interest rate":"Effective interest rate","Efficiency mode (E-Mode)":"Efficiency mode (E-Mode)","Eligible for the merit program.":"Eligible for the merit program.","Email":"Email","Emode":"Emode","Enable E-Mode":"Enable E-Mode","Enable {symbol} as collateral":["Enable ",["symbol"]," as collateral"],"Enabled":"Enabled","Enabling E-Mode":"Enabling E-Mode","Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.":"Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.","Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.":"Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.","English":"English","Enter ETH address":"Enter ETH address","Enter an amount":"Enter an amount","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Estimated borrow rate":"Estimated borrow rate","Estimated compounding interest, including discount for Staking {0}AAVE in Safety Module.":["Estimated compounding interest, including discount for Staking ",["0"],"AAVE in Safety Module."],"Exceeds the discount":"Exceeds the discount","Exchange rate":"Exchange rate","Expected amount to repay":"Expected amount to repay","Expires":"Expires","Export data to":"Export data to","FAQ":"FAQ","FAQS":"FAQS","Failed to load proposal voters. Please refresh the page.":"Failed to load proposal voters. Please refresh the page.","Faucet":"Faucet","Faucet {0}":["Faucet ",["0"]],"Feedback":"Feedback","Fetching data...":"Fetching data...","Filter":"Filter","Fixed":"Fixed","Fixed rate":"Fixed rate","Flashloan is disabled for this asset, hence this position cannot be migrated.":"Flashloan is disabled for this asset, hence this position cannot be migrated.","For repayment of a specific type of debt, the user needs to have debt that type":"For repayment of a specific type of debt, the user needs to have debt that type","Fork mode is ON":"Fork mode is ON","Forum discussion":"Forum discussion","French":"French","Funds in the Safety Module":"Funds in the Safety Module","GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.":"GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.","Get ABP Token":"Get ABP Token","Get ABP v2 Token":"Get ABP v2 Token","Get GHO":"Get GHO","Global settings":"Global settings","Go Back":"Go Back","Go to Balancer Pool":"Go to Balancer Pool","Go to V3 Dashboard":"Go to V3 Dashboard","Governance":"Governance","Greek":"Greek","Health factor":"Health factor","Health factor is lesser than the liquidation threshold":"Health factor is lesser than the liquidation threshold","Health factor is not below the threshold":"Health factor is not below the threshold","Hide":"Hide","Holders of stkAAVE receive a discount on the GHO borrowing rate":"Holders of stkAAVE receive a discount on the GHO borrowing rate","I acknowledge the risks involved.":"I acknowledge the risks involved.","I fully understand the risks of migrating.":"I fully understand the risks of migrating.","I understand how cooldown ({0}) and unstaking ({1}) work":["I understand how cooldown (",["0"],") and unstaking (",["1"],") work"],"If the error continues to happen,<0/> you may report it to this":"If the error continues to happen,<0/> you may report it to this","If the health factor goes below 1, the liquidation of your collateral might be triggered.":"If the health factor goes below 1, the liquidation of your collateral might be triggered.","If you DO NOT unstake within {0} of unstake window, you will need to activate cooldown process again.":["If you DO NOT unstake within ",["0"]," of unstake window, you will need to activate cooldown process again."],"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.":"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.","In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets":"In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets","In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable {0} as collateral before borrowing another asset. Read more in our <0>FAQ":["In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable ",["0"]," as collateral before borrowing another asset. Read more in our <0>FAQ"],"Inconsistent flashloan parameters":"Inconsistent flashloan parameters","Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.":"Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.","Interest accrued":"Interest accrued","Interest rate rebalance conditions were not met":"Interest rate rebalance conditions were not met","Interest rate strategy":"Interest rate strategy","Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more":"Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more","Invalid amount to burn":"Invalid amount to burn","Invalid amount to mint":"Invalid amount to mint","Invalid bridge protocol fee":"Invalid bridge protocol fee","Invalid expiration":"Invalid expiration","Invalid flashloan premium":"Invalid flashloan premium","Invalid return value of the flashloan executor function":"Invalid return value of the flashloan executor function","Invalid signature":"Invalid signature","Isolated":"Isolated","Isolated Debt Ceiling":"Isolated Debt Ceiling","Isolated assets have limited borrowing power and other assets cannot be used as collateral.":"Isolated assets have limited borrowing power and other assets cannot be used as collateral.","Join the community discussion":"Join the community discussion","Language":"Language","Learn more":"Learn more","Learn more about risks involved":"Learn more about risks involved","Learn more in our <0>FAQ guide":"Learn more in our <0>FAQ guide","Learn more.":"Learn more.","Let us know how we can make the app better for you. For user support related inquiries please reach out on":"Let us know how we can make the app better for you. For user support related inquiries please reach out on","Linked addresses":"Linked addresses","Links":"Links","Liqudation":"Liqudation","Liquidated collateral":"Liquidated collateral","Liquidation":"Liquidation","Liquidation <0/> threshold":"Liquidation <0/> threshold","Liquidation Threshold":"Liquidation Threshold","Liquidation at":"Liquidation at","Liquidation penalty":"Liquidation penalty","Liquidation risk":"Liquidation risk","Liquidation risk parameters":"Liquidation risk parameters","Liquidation threshold":"Liquidation threshold","Liquidation value":"Liquidation value","Loading data...":"Loading data...","Ltv validation failed":"Ltv validation failed","MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details":"MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details","MAX":"MAX","Manage analytics":"Manage analytics","Market":"Market","Markets":"Markets","Max":"Max","Max LTV":"Max LTV","Max slashing":"Max slashing","Max slippage":"Max slippage","Maximum amount available to borrow against this asset is limited because debt ceiling is at {0}%.":["Maximum amount available to borrow against this asset is limited because debt ceiling is at ",["0"],"%."],"Maximum amount available to borrow is <0/> {0} (<1/>).":["Maximum amount available to borrow is <0/> ",["0"]," (<1/>)."],"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.":"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.","Maximum amount available to supply is <0/> {0} (<1/>).":["Maximum amount available to supply is <0/> ",["0"]," (<1/>)."],"Maximum amount available to supply is limited because protocol supply cap is at {0}%.":["Maximum amount available to supply is limited because protocol supply cap is at ",["0"],"%."],"Maximum amount received":"Maximum amount received","Maximum available to borrow":"Maximum available to borrow","Maximum collateral amount to use":"Maximum collateral amount to use","Maximum loan to value":"Maximum loan to value","Meet GHO":"Meet GHO","Menu":"Menu","Merit Program":"Merit Program","Migrate":"Migrate","Migrate to Aave V3":"Migrate to Aave V3","Migrate to V3":"Migrate to V3","Migrate to stkABPT v2":"Migrate to stkABPT v2","Migrate to v3":"Migrate to v3","Migrate to {0} v3 Market":["Migrate to ",["0"]," v3 Market"],"Migrate your assets":"Migrate your assets","Migrated":"Migrated","Migrating":"Migrating","Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.":"Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.","Migration risks":"Migration risks","Minimum GHO borrow amount":"Minimum GHO borrow amount","Minimum USD value received":"Minimum USD value received","Minimum amount of debt to be repaid":"Minimum amount of debt to be repaid","Minimum amount received":"Minimum amount received","Minimum staked Aave amount":"Minimum staked Aave amount","Minimum {0} received":["Minimum ",["0"]," received"],"More":"More","NAY":"NAY","Need help connecting a wallet? <0>Read our FAQ":"Need help connecting a wallet? <0>Read our FAQ","Net APR":"Net APR","Net APY":"Net APY","Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.":"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.","Net worth":"Net worth","Network":"Network","Network not supported for this wallet":"Network not supported for this wallet","New APY":"New APY","No assets selected to migrate.":"No assets selected to migrate.","No results found. You can import a custom token with a contract address":"No results found. You can import a custom token with a contract address","No rewards to claim":"No rewards to claim","No search results{0}":["No search results",["0"]],"No transactions yet.":"No transactions yet.","No voting power":"No voting power","None":"None","Not a valid address":"Not a valid address","Not enough balance on your wallet":"Not enough balance on your wallet","Not enough collateral to repay this amount of debt with":"Not enough collateral to repay this amount of debt with","Not enough staked balance":"Not enough staked balance","Not enough voting power to participate in this proposal":"Not enough voting power to participate in this proposal","Not reached":"Not reached","Nothing borrowed yet":"Nothing borrowed yet","Nothing found":"Nothing found","Nothing staked":"Nothing staked","Nothing supplied yet":"Nothing supplied yet","Ok, Close":"Ok, Close","Operation not supported":"Operation not supported","Oracle price":"Oracle price","Overview":"Overview","Page not found":"Page not found","Participating in this {symbol} reserve gives annualized rewards.":["Participating in this ",["symbol"]," reserve gives annualized rewards."],"Pending...":"Pending...","Per the community, the Fantom market has been frozen.":"Per the community, the Fantom market has been frozen.","Per the community, the V2 AMM market has been deprecated.":"Per the community, the V2 AMM market has been deprecated.","Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.":"Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.","Please connect a wallet to view your personal information here.":"Please connect a wallet to view your personal information here.","Please connect your wallet to be able to switch your tokens.":"Please connect your wallet to be able to switch your tokens.","Please connect your wallet to get free testnet assets.":"Please connect your wallet to get free testnet assets.","Please connect your wallet to see migration tool.":"Please connect your wallet to see migration tool.","Please connect your wallet to see your supplies, borrowings, and open positions.":"Please connect your wallet to see your supplies, borrowings, and open positions.","Please connect your wallet to view transaction history.":"Please connect your wallet to view transaction history.","Please enter a valid wallet address.":"Please enter a valid wallet address.","Please switch to {networkName}.":["Please switch to ",["networkName"],"."],"Please, connect your wallet":"Please, connect your wallet","Pool addresses provider is not registered":"Pool addresses provider is not registered","Powered by":"Powered by","Preview tx and migrate":"Preview tx and migrate","Price":"Price","Price data is not currently available for this reserve on the protocol subgraph":"Price data is not currently available for this reserve on the protocol subgraph","Price impact":"Price impact","Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.":"Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.","Price impact {0}%":["Price impact ",["0"],"%"],"Privacy":"Privacy","Proposal details":"Proposal details","Proposal overview":"Proposal overview","Proposals":"Proposals","Proposition":"Proposition","Protocol borrow cap at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap at 100% for this asset. Further borrowing unavailable.","Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.","Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.","Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.","Protocol supply cap at 100% for this asset. Further supply unavailable.":"Protocol supply cap at 100% for this asset. Further supply unavailable.","Protocol supply cap is at 100% for this asset. Further supply unavailable.":"Protocol supply cap is at 100% for this asset. Further supply unavailable.","Quorum":"Quorum","Rate change":"Rate change","Raw-Ipfs":"Raw-Ipfs","Reached":"Reached","Reactivate cooldown period to unstake {0} {stakedToken}":["Reactivate cooldown period to unstake ",["0"]," ",["stakedToken"]],"Read more here.":"Read more here.","Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.":"Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.","Read-only mode.":"Read-only mode.","Read-only mode. Connect to a wallet to perform transactions.":"Read-only mode. Connect to a wallet to perform transactions.","Receive (est.)":"Receive (est.)","Received":"Received","Recipient address":"Recipient address","Rejected connection request":"Rejected connection request","Reload":"Reload","Reload the page":"Reload the page","Remaining debt":"Remaining debt","Remaining supply":"Remaining supply","Remind me":"Remind me","Remove":"Remove","Repaid":"Repaid","Repay":"Repay","Repay with":"Repay with","Repay {symbol}":["Repay ",["symbol"]],"Repaying {symbol}":["Repaying ",["symbol"]],"Repayment amount to reach {0}% utilization":["Repayment amount to reach ",["0"],"% utilization"],"Representative smart contract wallet (ie. Safe) addresses on other chains.":"Representative smart contract wallet (ie. Safe) addresses on other chains.","Representing smart contract wallet (ie. Safe) addresses on other chains.":"Representing smart contract wallet (ie. Safe) addresses on other chains.","Reserve Size":"Reserve Size","Reserve factor":"Reserve factor","Reserve factor is a percentage of interest which goes to a {0} that is controlled by Aave governance to promote ecosystem growth.":["Reserve factor is a percentage of interest which goes to a ",["0"]," that is controlled by Aave governance to promote ecosystem growth."],"Reserve status & configuration":"Reserve status & configuration","Reset":"Reset","Restake":"Restake","Restake {symbol}":["Restake ",["symbol"]],"Restaked":"Restaked","Restaking {symbol}":["Restaking ",["symbol"]],"Review approval tx details":"Review approval tx details","Review tx":"Review tx","Review tx details":"Review tx details","Revoke power":"Revoke power","Reward(s) to claim":"Reward(s) to claim","Rewards APR":"Rewards APR","Risk details":"Risk details","SEE CHARTS":"SEE CHARTS","Safety of your deposited collateral against the borrowed assets and its underlying value.":"Safety of your deposited collateral against the borrowed assets and its underlying value.","Save and share":"Save and share","Seems like we can't switch the network automatically. Please check if you can change it from the wallet.":"Seems like we can't switch the network automatically. Please check if you can change it from the wallet.","Select":"Select","Select APY type to switch":"Select APY type to switch","Select an asset":"Select an asset","Select language":"Select language","Select slippage tolerance":"Select slippage tolerance","Selected assets have successfully migrated. Visit the Market Dashboard to see them.":"Selected assets have successfully migrated. Visit the Market Dashboard to see them.","Selected borrow assets":"Selected borrow assets","Selected supply assets":"Selected supply assets","Send Feedback":"Send Feedback","Send feedback":"Send feedback","Set up delegation":"Set up delegation","Share on Lens":"Share on Lens","Share on twitter":"Share on twitter","Show":"Show","Show Frozen or paused assets":"Show Frozen or paused assets","Show assets with 0 balance":"Show assets with 0 balance","Sign to continue":"Sign to continue","Signatures ready":"Signatures ready","Signing":"Signing","Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard":"Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard","Since this is a test network, you can get any of the assets if you have ETH on your wallet":"Since this is a test network, you can get any of the assets if you have ETH on your wallet","Slippage":"Slippage","Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.":"Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.","Some migrated assets will not be used as collateral due to enabled isolation mode in {marketName} V3 Market. Visit <0>{marketName} V3 Dashboard to manage isolation mode.":["Some migrated assets will not be used as collateral due to enabled isolation mode in ",["marketName"]," V3 Market. Visit <0>",["marketName"]," V3 Dashboard to manage isolation mode."],"Something went wrong":"Something went wrong","Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.":"Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.","Sorry, we couldn't find the page you were looking for.":"Sorry, we couldn't find the page you were looking for.","Spanish":"Spanish","Stable":"Stable","Stable Interest Type is disabled for this currency":"Stable Interest Type is disabled for this currency","Stable borrowing is enabled":"Stable borrowing is enabled","Stable borrowing is not enabled":"Stable borrowing is not enabled","Stable debt supply is not zero":"Stable debt supply is not zero","Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.":"Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.","Stablecoin":"Stablecoin","Stake":"Stake","Stake AAVE":"Stake AAVE","Stake ABPT":"Stake ABPT","Stake GHO":"Stake GHO","Stake cooldown activated":"Stake cooldown activated","Staked":"Staked","Staking":"Staking","Staking APR":"Staking APR","Staking Rewards":"Staking Rewards","Staking balance":"Staking balance","Staking discount":"Staking discount","State":"State","Submission did not work, please try again later or contact wecare@avara.xyz":"Submission did not work, please try again later or contact wecare@avara.xyz","Supplied":"Supplied","Supplied asset amount":"Supplied asset amount","Supplied assets":"Supplied assets","Supply":"Supply","Supply APY":"Supply APY","Supply APY:":"Supply APY:","Supply apy":"Supply apy","Supply balance":"Supply balance","Supply balance after switch":"Supply balance after switch","Supply cap is exceeded":"Supply cap is exceeded","Supply cap on target reserve reached. Try lowering the amount.":"Supply cap on target reserve reached. Try lowering the amount.","Supply {symbol}":["Supply ",["symbol"]],"Supplying your":"Supplying your","Supplying {symbol}":["Supplying ",["symbol"]],"Switch":"Switch","Switch APY type":"Switch APY type","Switch E-Mode":"Switch E-Mode","Switch E-Mode category":"Switch E-Mode category","Switch Network":"Switch Network","Switch borrow position":"Switch borrow position","Switch rate":"Switch rate","Switch to":"Switch to","Switched":"Switched","Switching":"Switching","Switching E-Mode":"Switching E-Mode","Switching rate":"Switching rate","Techpaper":"Techpaper","Terms":"Terms","Test Assets":"Test Assets","Testnet mode":"Testnet mode","Testnet mode is ON":"Testnet mode is ON","Thank you for submitting feedback!":"Thank you for submitting feedback!","Thank you for voting!!":"Thank you for voting!!","The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.":"The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.","The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.":"The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.","The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.":"The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.","The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.":"The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.","The Stable Rate is not enabled for this currency":"The Stable Rate is not enabled for this currency","The address of the pool addresses provider is invalid":"The address of the pool addresses provider is invalid","The app is running in fork mode.":"The app is running in fork mode.","The app is running in testnet mode. Learn how it works in":"The app is running in testnet mode. Learn how it works in","The caller of the function is not an AToken":"The caller of the function is not an AToken","The caller of this function must be a pool":"The caller of this function must be a pool","The collateral balance is 0":"The collateral balance is 0","The collateral chosen cannot be liquidated":"The collateral chosen cannot be liquidated","The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more":"The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more","The cooldown period is {0}. After {1} of cooldown, you will enter unstake window of {2}. You will continue receiving rewards during cooldown and unstake window.":["The cooldown period is ",["0"],". After ",["1"]," of cooldown, you will enter unstake window of ",["2"],". You will continue receiving rewards during cooldown and unstake window."],"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.":"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.","The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.":"The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.","The requested amount is greater than the max loan size in stable rate mode":"The requested amount is greater than the max loan size in stable rate mode","The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.":"The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.","The underlying asset cannot be rescued":"The underlying asset cannot be rescued","The underlying balance needs to be greater than 0":"The underlying balance needs to be greater than 0","The weighted average of APY for all borrowed assets, including incentives.":"The weighted average of APY for all borrowed assets, including incentives.","The weighted average of APY for all supplied assets, including incentives.":"The weighted average of APY for all supplied assets, including incentives.","There are not enough funds in the{0}reserve to borrow":["There are not enough funds in the",["0"],"reserve to borrow"],"There is not enough collateral to cover a new borrow":"There is not enough collateral to cover a new borrow","There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.":"There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.","There was some error. Please try changing the parameters or <0><1>copy the error":"There was some error. Please try changing the parameters or <0><1>copy the error","These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.":"These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.","These funds have been borrowed and are not available for withdrawal at this time.":"These funds have been borrowed and are not available for withdrawal at this time.","This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.":"This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.","This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.":"This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.","This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.":"This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.","This address is blocked on app.aave.com because it is associated with one or more":"This address is blocked on app.aave.com because it is associated with one or more","This asset has almost reached its borrow cap. There is only {messageValue} available to be borrowed from this market.":["This asset has almost reached its borrow cap. There is only ",["messageValue"]," available to be borrowed from this market."],"This asset has almost reached its supply cap. There can only be {messageValue} supplied to this market.":["This asset has almost reached its supply cap. There can only be ",["messageValue"]," supplied to this market."],"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.":"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.","This asset has reached its borrow cap. Nothing is available to be borrowed from this market.":"This asset has reached its borrow cap. Nothing is available to be borrowed from this market.","This asset has reached its supply cap. Nothing is available to be supplied from this market.":"This asset has reached its supply cap. Nothing is available to be supplied from this market.","This asset is frozen due to an Aave Protocol Governance decision. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. <0>More details","This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details","This asset is frozen due to an Aave community decision. <0>More details":"This asset is frozen due to an Aave community decision. <0>More details","This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details":"This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details","This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.":"This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.","This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.":"This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.","This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.":"This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.","This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.":"This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.","Time left to unstake":"Time left to unstake","Time remaining until the 48 hour withdraw period starts.":"Time remaining until the 48 hour withdraw period starts.","Time remaining until the withdraw period ends.":"Time remaining until the withdraw period ends.","Tip: Try increasing slippage or reduce input amount":"Tip: Try increasing slippage or reduce input amount","To borrow you need to supply any asset to be used as collateral.":"To borrow you need to supply any asset to be used as collateral.","To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more":"To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more","To enable E-mode for the {0} category, all borrow positions outside of this category must be closed.":["To enable E-mode for the ",["0"]," category, all borrow positions outside of this category must be closed."],"To repay on behalf of a user an explicit amount to repay is needed":"To repay on behalf of a user an explicit amount to repay is needed","To request access for this permissioned market, please visit: <0>Acces Provider Name":"To request access for this permissioned market, please visit: <0>Acces Provider Name","To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.":"To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.","Top 10 addresses":"Top 10 addresses","Total available":"Total available","Total borrowed":"Total borrowed","Total borrows":"Total borrows","Total emission per day":"Total emission per day","Total interest accrued":"Total interest accrued","Total market size":"Total market size","Total supplied":"Total supplied","Total worth":"Total worth","Track wallet":"Track wallet","Track wallet balance in read-only mode":"Track wallet balance in read-only mode","Transaction failed":"Transaction failed","Transaction history":"Transaction history","Transaction history is not currently available for this market":"Transaction history is not currently available for this market","Transaction overview":"Transaction overview","Transactions":"Transactions","Unavailable":"Unavailable","Unbacked":"Unbacked","Unbacked mint cap is exceeded":"Unbacked mint cap is exceeded","Underlying APY:":"Underlying APY:","Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated.":["Underlying asset does not exist in ",["marketName"]," v3 Market, hence this position cannot be migrated."],"Underlying token":"Underlying token","Unstake":"Unstake","Unstake now":"Unstake now","Unstake window":"Unstake window","Unstake {symbol}":["Unstake ",["symbol"]],"Unstaked":"Unstaked","Unstaking {symbol}":["Unstaking ",["symbol"]],"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.":"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.","Use it to vote for or against active proposals.":"Use it to vote for or against active proposals.","Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.":"Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.","Used as collateral":"Used as collateral","User cannot withdraw more than the available balance":"User cannot withdraw more than the available balance","User did not borrow the specified currency":"User did not borrow the specified currency","User does not have outstanding stable rate debt on this reserve":"User does not have outstanding stable rate debt on this reserve","User does not have outstanding variable rate debt on this reserve":"User does not have outstanding variable rate debt on this reserve","User is in isolation mode or LTV is zero":"User is in isolation mode or LTV is zero","User is trying to borrow multiple assets including a siloed one":"User is trying to borrow multiple assets including a siloed one","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.","Utilization Rate":"Utilization Rate","VIEW TX":"VIEW TX","VOTE NAY":"VOTE NAY","VOTE YAE":"VOTE YAE","Variable":"Variable","Variable debt supply is not zero":"Variable debt supply is not zero","Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.":"Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.","Variable rate":"Variable rate","Version 2":"Version 2","Version 3":"Version 3","View":"View","View Transactions":"View Transactions","View all votes":"View all votes","View contract":"View contract","View details":"View details","View on Explorer":"View on Explorer","Vote NAY":"Vote NAY","Vote YAE":"Vote YAE","Voted NAY":"Voted NAY","Voted YAE":"Voted YAE","Votes":"Votes","Voting":"Voting","Voting is on":"Voting is on","Voting power":"Voting power","Voting results":"Voting results","Wallet Balance":"Wallet Balance","Wallet balance":"Wallet balance","Wallet not detected. Connect or install wallet and retry":"Wallet not detected. Connect or install wallet and retry","Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.":"Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.","We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.":"We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.","We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.":"We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.","We couldn’t detect a wallet. Connect a wallet to stake and view your balance.":"We couldn’t detect a wallet. Connect a wallet to stake and view your balance.","We suggest you go back to the Dashboard.":"We suggest you go back to the Dashboard.","Website":"Website","When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.":"When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.","With a voting power of <0/>":"With a voting power of <0/>","With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more":"With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more","Withdraw":"Withdraw","Withdraw & Switch":"Withdraw & Switch","Withdraw and Switch":"Withdraw and Switch","Withdraw {symbol}":["Withdraw ",["symbol"]],"Withdrawing":"Withdrawing","Withdrawing and Switching":"Withdrawing and Switching","Withdrawing this amount will reduce your health factor and increase risk of liquidation.":"Withdrawing this amount will reduce your health factor and increase risk of liquidation.","Withdrawing {symbol}":["Withdrawing ",["symbol"]],"Wrong Network":"Wrong Network","YAE":"YAE","You are entering Isolation mode":"You are entering Isolation mode","You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.":"You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.","You can not change Interest Type to stable as your borrowings are higher than your collateral":"You can not change Interest Type to stable as your borrowings are higher than your collateral","You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.":"You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.","You can not switch usage as collateral mode for this currency, because it will cause collateral call":"You can not switch usage as collateral mode for this currency, because it will cause collateral call","You can not use this currency as collateral":"You can not use this currency as collateral","You can not withdraw this amount because it will cause collateral call":"You can not withdraw this amount because it will cause collateral call","You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.":"You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.","You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.":"You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.","You can report incident to our <0>Discord or<1>Github.":"You can report incident to our <0>Discord or<1>Github.","You cancelled the transaction.":"You cancelled the transaction.","You did not participate in this proposal":"You did not participate in this proposal","You do not have supplies in this currency":"You do not have supplies in this currency","You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.":"You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.","You have no AAVE/stkAAVE/aAave balance to delegate.":"You have no AAVE/stkAAVE/aAave balance to delegate.","You have not borrow yet using this currency":"You have not borrow yet using this currency","You may borrow up to <0/> GHO at <1/> (max discount)":"You may borrow up to <0/> GHO at <1/> (max discount)","You may enter a custom amount in the field.":"You may enter a custom amount in the field.","You switched to {0} rate":["You switched to ",["0"]," rate"],"You unstake here":"You unstake here","You voted {0}":["You voted ",["0"]],"You will exit isolation mode and other tokens can now be used as collateral":"You will exit isolation mode and other tokens can now be used as collateral","You {action} <0/> {symbol}":["You ",["action"]," <0/> ",["symbol"]],"You've successfully switched borrow position.":"You've successfully switched borrow position.","You've successfully switched tokens.":"You've successfully switched tokens.","You've successfully withdrew & switched tokens.":"You've successfully withdrew & switched tokens.","Your balance is lower than the selected amount.":"Your balance is lower than the selected amount.","Your borrows":"Your borrows","Your current loan to value based on your collateral supplied.":"Your current loan to value based on your collateral supplied.","Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.":"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.","Your info":"Your info","Your proposition power is based on your AAVE/stkAAVE balance and received delegations.":"Your proposition power is based on your AAVE/stkAAVE balance and received delegations.","Your reward balance is 0":"Your reward balance is 0","Your supplies":"Your supplies","Your voting info":"Your voting info","Your voting power is based on your AAVE/stkAAVE balance and received delegations.":"Your voting power is based on your AAVE/stkAAVE balance and received delegations.","Your {name} wallet is empty. Purchase or transfer assets or use <0>{0} to transfer your {network} assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets or use <0>",["0"]," to transfer your ",["network"]," assets."],"Your {name} wallet is empty. Purchase or transfer assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets."],"Your {networkName} wallet is empty. Get free test assets at":["Your ",["networkName"]," wallet is empty. Get free test assets at"],"Your {networkName} wallet is empty. Get free test {0} at":["Your ",["networkName"]," wallet is empty. Get free test ",["0"]," at"],"Zero address not valid":"Zero address not valid","assets":"assets","blocked activities":"blocked activities","copy the error":"copy the error","disabled":"disabled","documentation":"documentation","enabled":"enabled","ends":"ends","for":"for","of":"of","on":"on","please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.":"please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.","repaid":"repaid","stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.":"stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.","stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: {0}":["stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: ",["0"]],"staking view":"staking view","starts":"starts","stkAAVE holders get a discount on GHO borrow rate":"stkAAVE holders get a discount on GHO borrow rate","to":"to","tokens is not the same as staking them. If you wish to stake your":"tokens is not the same as staking them. If you wish to stake your","tokens, please go to the":"tokens, please go to the","withdrew":"withdrew","{0}":[["0"]],"{0} Balance":[["0"]," Balance"],"{0} Faucet":[["0"]," Faucet"],"{0} on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational.":[["0"]," on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational."],"{0}{name}":[["0"],["name"]],"{currentMethod}":[["currentMethod"]],"{d}d":[["d"],"d"],"{h}h":[["h"],"h"],"{m}m":[["m"],"m"],"{networkName} Faucet":[["networkName"]," Faucet"],"{notifyText}":[["notifyText"]],"{numSelected}/{numAvailable} assets selected":[["numSelected"],"/",["numAvailable"]," assets selected"],"{stepName}":[["stepName"]],"{s}s":[["s"],"s"],"{title}":[["title"]],"{tooltipText}":[["tooltipText"]]}}; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index ddbff46cd8..04eb6b0dd2 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -2312,6 +2312,10 @@ msgstr "Supply" msgid "Supply APY" msgstr "Supply APY" +#: src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +msgid "Supply APY:" +msgstr "Supply APY:" + #: src/components/transactions/Swap/SwapModalDetails.tsx msgid "Supply apy" msgstr "Supply apy" @@ -2763,6 +2767,10 @@ msgstr "Unbacked" msgid "Unbacked mint cap is exceeded" msgstr "Unbacked mint cap is exceeded" +#: src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +msgid "Underlying APY:" +msgstr "Underlying APY:" + #: src/components/infoTooltips/MigrationDisabledTooltip.tsx msgid "Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated." msgstr "Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated." diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx index 010a1ee9af..d38f1b5331 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx @@ -71,6 +71,7 @@ export const SuppliedPositionsList = () => { .filter((userReserve) => userReserve.underlyingBalance !== '0') .map((userReserve) => ({ ...userReserve, + // nativeApy: userReserve.reserve., // Note: added only for table sort supplyAPY: userReserve.reserve.supplyAPY, // Note: added only for table sort reserve: { ...userReserve.reserve, @@ -83,6 +84,9 @@ export const SuppliedPositionsList = () => { }, })) || []; + console.log(user); + console.log('suppliedPositions', suppliedPositions); + // Transform to the DashboardReserve schema so the sort utils can work with it const preSortedReserves = suppliedPositions as DashboardReserve[]; const sortedReserves = handleSortDashboardReserves( @@ -121,7 +125,11 @@ export const SuppliedPositionsList = () => { if (loading) return Your supplies} head={head.map((col) => col.title)} />; + // console.log('sortedReserves', sortedReserves); + // console.log('user', user); + return ( + // <> { const { user } = useAppDataContext(); const { isIsolated, aIncentivesData, isFrozen, isActive, isPaused } = reserve; @@ -43,6 +46,8 @@ export const SuppliedPositionsListItem = ({ const disableWithdraw = !isActive || isPaused; const disableSupply = !isActive || isFrozen || isPaused; + console.log('x---reserve', reserve); + return ( +
+ {'Underlying APY:'} + + {'Supply APY:'} + +
+ + ) : null + } incentives={aIncentivesData} symbol={reserve.symbol} /> From f4905aceaa82e7120244872fe904590698ab5dd4 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Thu, 20 Jun 2024 17:33:04 +0200 Subject: [PATCH 04/33] refactor: use "underlying" instead of "token native" term + add new component --- .../app-data-provider/useAppDataProvider.tsx | 2 - .../useExtendedUserSummaryAndIncentives.ts | 4 +- src/hooks/pool/usePoolFormattedReserves.ts | 2 +- src/hooks/pool/useTokenNativeYield.ts | 18 -------- src/hooks/pool/useUnderlyingYield.ts | 15 ++++++ src/hooks/pool/useUserYield.ts | 36 +++++++-------- src/locales/en/messages.po | 4 +- .../dashboard/lists/ListAPYDetails.tsx | 46 +++++++++++++++++++ .../SuppliedPositionsList.tsx | 4 -- .../SuppliedPositionsListItem.tsx | 18 ++------ .../SuppliedPositionsListMobileItem.tsx | 9 +++- ...ldService.ts => UnderlyingYieldService.ts} | 16 +++---- src/ui-config/SharedDependenciesProvider.tsx | 8 ++-- src/ui-config/queries.ts | 4 +- 14 files changed, 110 insertions(+), 76 deletions(-) delete mode 100644 src/hooks/pool/useTokenNativeYield.ts create mode 100644 src/hooks/pool/useUnderlyingYield.ts create mode 100644 src/modules/dashboard/lists/ListAPYDetails.tsx rename src/services/{TokenNativeYieldService.ts => UnderlyingYieldService.ts} (91%) diff --git a/src/hooks/app-data-provider/useAppDataProvider.tsx b/src/hooks/app-data-provider/useAppDataProvider.tsx index a73aa27edc..8623776be7 100644 --- a/src/hooks/app-data-provider/useAppDataProvider.tsx +++ b/src/hooks/app-data-provider/useAppDataProvider.tsx @@ -77,8 +77,6 @@ export const AppDataProvider: React.FC = ({ children }) => { const currentMarketData = useRootStore((state) => state.currentMarketData); const currentMarket = useRootStore((state) => state.currentMarket); - // console.log('currentMarketData', currentMarketData); - // pool hooks const { data: reservesData, isLoading: reservesDataLoading } = usePoolReservesHumanized(currentMarketData); diff --git a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts index 1882d19d0f..35aaa775db 100644 --- a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts +++ b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts @@ -18,7 +18,6 @@ export type ExtendedFormattedUser = earnedAPY: number; debtAPY: number; netAPY: number; - // nativeYield: number; isInEmode: boolean; userEmodeCategoryId: number; }; @@ -37,13 +36,12 @@ const formatExtendedUserAndIncentives = ( .map((elem) => { return { ...elem, - underlyingApy: userYield.nativeAPY[getAddress(elem.reserve.underlyingAsset)], + underlyingAPY: userYield.underlyingAPYs[getAddress(elem.reserve.underlyingAsset)], }; }), earnedAPY: userYield.earnedAPY, debtAPY: userYield.debtAPY, netAPY: userYield.netAPY, - // nativeYield: userYield.nativeAPY, }; }; diff --git a/src/hooks/pool/usePoolFormattedReserves.ts b/src/hooks/pool/usePoolFormattedReserves.ts index bbf179aa62..fc4511556d 100644 --- a/src/hooks/pool/usePoolFormattedReserves.ts +++ b/src/hooks/pool/usePoolFormattedReserves.ts @@ -23,7 +23,7 @@ export type FormattedReservesAndIncentives = ReturnType< isEmodeEnabled: boolean; isWrappedBaseAsset: boolean; } & ReserveDataHumanized & { - underlyingApy?: number; + underlyingAPY?: number; }; const formatReserves = memoize( diff --git a/src/hooks/pool/useTokenNativeYield.ts b/src/hooks/pool/useTokenNativeYield.ts deleted file mode 100644 index f62935f0fb..0000000000 --- a/src/hooks/pool/useTokenNativeYield.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { TokenNativeYield } from 'src/services/TokenNativeYieldService'; -import { POLLING_INTERVAL, queryKeysFactory } from 'src/ui-config/queries'; -import { useSharedDependencies } from 'src/ui-config/SharedDependenciesProvider'; - -import { SimplifiedUseQueryResult } from './utils'; - -export const useTokensNativeYield = (): SimplifiedUseQueryResult => { - const { tokenNativeYieldService } = useSharedDependencies(); - return useQuery({ - queryKey: queryKeysFactory.tokensNativeYield(), - queryFn: () => { - const aprs = tokenNativeYieldService.getTokensNativeYield(); - return aprs; - }, - refetchInterval: POLLING_INTERVAL, - }); -}; diff --git a/src/hooks/pool/useUnderlyingYield.ts b/src/hooks/pool/useUnderlyingYield.ts new file mode 100644 index 0000000000..4281086234 --- /dev/null +++ b/src/hooks/pool/useUnderlyingYield.ts @@ -0,0 +1,15 @@ +import { useQuery } from '@tanstack/react-query'; +import { UnderlyingAPYs } from 'src/services/UnderlyingYieldService'; +import { POLLING_INTERVAL, queryKeysFactory } from 'src/ui-config/queries'; +import { useSharedDependencies } from 'src/ui-config/SharedDependenciesProvider'; + +import { SimplifiedUseQueryResult } from './utils'; + +export const useUnderlyingYields = (): SimplifiedUseQueryResult => { + const { underlyingYieldService } = useSharedDependencies(); + return useQuery({ + queryKey: queryKeysFactory.underlyingYields(), + queryFn: () => underlyingYieldService.getUnderlyingAPYs(), + refetchInterval: POLLING_INTERVAL, + }); +}; diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index 1c8a79ccf2..f6cb0d330b 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -6,7 +6,7 @@ import { import BigNumber from 'bignumber.js'; import { getAddress } from 'ethers/lib/utils'; import memoize from 'micro-memoize'; -import { TokenNativeYield } from 'src/services/TokenNativeYieldService'; +import { UnderlyingAPYs } from 'src/services/UnderlyingYieldService'; import { MarketDataType } from 'src/ui-config/marketsConfig'; import { displayGho, weightedAverageAPY } from 'src/utils/ghoUtilities'; @@ -15,7 +15,7 @@ import { FormattedReservesAndIncentives, usePoolsFormattedReserves, } from './usePoolFormattedReserves'; -import { useTokensNativeYield } from './useTokenNativeYield'; +import { useUnderlyingYields } from './useUnderlyingYield'; import { useUserGhoPoolsFormattedReserve } from './useUserGhoPoolFormattedReserve'; import { useUserSummariesAndIncentives } from './useUserSummaryAndIncentives'; import { combineQueries, SimplifiedUseQueryResult } from './utils'; @@ -24,7 +24,7 @@ export interface UserYield { earnedAPY: number; debtAPY: number; netAPY: number; - nativeAPY: TokenNativeYield; + underlyingAPYs: UnderlyingAPYs; } const formatUserYield = memoize( @@ -33,10 +33,10 @@ const formatUserYield = memoize( formattedGhoReserveData: FormattedGhoReserveData | undefined, formattedGhoUserData: FormattedGhoUserData | undefined, user: FormatUserSummaryAndIncentivesResponse, - tokensNativeApy: TokenNativeYield, + underlyingAPYs: UnderlyingAPYs, currentMarket: string - ) => { - console.log('---tokensNativeApy', tokensNativeApy); + ): UserYield => { + console.log('---underlyingAPYs', underlyingAPYs); const proportions = user.userReservesData.reduce( (acc, value) => { const reserve = formattedPoolReserves.find( @@ -51,12 +51,12 @@ const formatUserYield = memoize( ); console.log('---reserve', reserve.supplyAPY); - const nativeAPR = tokensNativeApy[getAddress(reserve.underlyingAsset)]; - console.log('---nativeAPR', nativeAPR); + const underlyingAPY = underlyingAPYs[getAddress(reserve.underlyingAsset)]; + console.log('---underlyingAPY', underlyingAPY); - if (nativeAPR) { + if (underlyingAPY) { acc.positiveProportion = acc.positiveProportion.plus( - new BigNumber(nativeAPR).multipliedBy(value.underlyingBalanceUSD) + new BigNumber(underlyingAPY).multipliedBy(value.underlyingBalanceUSD) ); } if (reserve.aIncentivesData) { @@ -143,7 +143,7 @@ const formatUserYield = memoize( earnedAPY, debtAPY, netAPY, - nativeAPY: tokensNativeApy, + underlyingAPYs, }; } ); @@ -155,7 +155,7 @@ export const useUserYields = ( const ghoPoolsFormattedReserveQuery = useGhoPoolsFormattedReserve(marketsData); const userGhoPoolsFormattedReserveQuery = useUserGhoPoolsFormattedReserve(marketsData); const userSummaryQuery = useUserSummariesAndIncentives(marketsData); - const tokensNativeApy = useTokensNativeYield(); + const underlyingAPY = useUnderlyingYields(); return poolsFormattedReservesQuery.map((elem, index) => { const marketData = marketsData[index]; @@ -164,28 +164,28 @@ export const useUserYields = ( formattedGhoReserveData: FormattedGhoReserveData, formattedGhoUserData: FormattedGhoUserData, user: FormatUserSummaryAndIncentivesResponse, - tokensNativeApy: TokenNativeYield + underlyingAPY: UnderlyingAPYs ) => { return formatUserYield( formattedPoolReserves, formattedGhoReserveData, formattedGhoUserData, user, - tokensNativeApy, + underlyingAPY, marketData.market ); }; const ghoSelector = ( formattedPoolReserves: FormattedReservesAndIncentives[], user: FormatUserSummaryAndIncentivesResponse, - tokensNativeApy: TokenNativeYield + underlyingAPY: UnderlyingAPYs ) => { return formatUserYield( formattedPoolReserves, undefined, undefined, user, - tokensNativeApy, + underlyingAPY, marketData.market ); }; @@ -196,11 +196,11 @@ export const useUserYields = ( ghoPoolsFormattedReserveQuery[index], userGhoPoolsFormattedReserveQuery[index], userSummaryQuery[index], - tokensNativeApy, + underlyingAPY, ] as const, selector ); - return combineQueries([elem, userSummaryQuery[index], tokensNativeApy] as const, ghoSelector); + return combineQueries([elem, userSummaryQuery[index], underlyingAPY] as const, ghoSelector); }); }; diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 04eb6b0dd2..ce591ed4c0 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -2312,7 +2312,7 @@ msgstr "Supply" msgid "Supply APY" msgstr "Supply APY" -#: src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +#: src/modules/dashboard/lists/ListAPYDetails.tsx msgid "Supply APY:" msgstr "Supply APY:" @@ -2767,7 +2767,7 @@ msgstr "Unbacked" msgid "Unbacked mint cap is exceeded" msgstr "Unbacked mint cap is exceeded" -#: src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +#: src/modules/dashboard/lists/ListAPYDetails.tsx msgid "Underlying APY:" msgstr "Underlying APY:" diff --git a/src/modules/dashboard/lists/ListAPYDetails.tsx b/src/modules/dashboard/lists/ListAPYDetails.tsx new file mode 100644 index 0000000000..d906f55b54 --- /dev/null +++ b/src/modules/dashboard/lists/ListAPYDetails.tsx @@ -0,0 +1,46 @@ +import { Trans } from '@lingui/macro'; +import { Box } from '@mui/material'; +import { IncentivesCard } from 'src/components/incentives/IncentivesCard'; +import { TextWithTooltip } from 'src/components/TextWithTooltip'; + +interface ListAPYDetailsProps { + supplyAPY: number; + underlyingAPY: number; +} + +export const ListAPYDetails = ({ supplyAPY, underlyingAPY }: ListAPYDetailsProps) => { + return ( + + + + {'Supply APY:'} + + + + {'Underlying APY:'} + {' '} + + + + ); +}; diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx index d38f1b5331..f7d91c8a53 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx @@ -125,11 +125,7 @@ export const SuppliedPositionsList = () => { if (loading) return Your supplies} head={head.map((col) => col.title)} />; - // console.log('sortedReserves', sortedReserves); - // console.log('user', user); - return ( - // <> { const { user } = useAppDataContext(); const { isIsolated, aIncentivesData, isFrozen, isActive, isPaused } = reserve; @@ -72,18 +71,11 @@ export const SuppliedPositionsListItem = ({ -
- {'Underlying APY:'} - - {'Supply APY:'} - -
- + underlyingAPY ? ( + ) : null } incentives={aIncentivesData} diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx index bc519855fa..319e56d067 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx @@ -9,6 +9,7 @@ import { Row } from '../../../../components/primitives/Row'; import { useModalContext } from '../../../../hooks/useModal'; import { useProtocolDataContext } from '../../../../hooks/useProtocolDataContext'; import { isFeatureEnabled } from '../../../../utils/marketsAndNetworksConfig'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListItemUsedAsCollateral } from '../ListItemUsedAsCollateral'; import { ListMobileItemWrapper } from '../ListMobileItemWrapper'; import { ListValueRow } from '../ListValueRow'; @@ -19,6 +20,7 @@ export const SuppliedPositionsListMobileItem = ({ underlyingBalanceUSD, usageAsCollateralEnabledOnUser, underlyingAsset, + underlyingAPY, }: DashboardReserve) => { const { user } = useAppDataContext(); const { currentMarketData, currentMarket } = useProtocolDataContext(); @@ -74,7 +76,12 @@ export const SuppliedPositionsListMobileItem = ({ mb={2} > + ) : null + } incentives={aIncentivesData} symbol={symbol} variant="secondary14" diff --git a/src/services/TokenNativeYieldService.ts b/src/services/UnderlyingYieldService.ts similarity index 91% rename from src/services/TokenNativeYieldService.ts rename to src/services/UnderlyingYieldService.ts index 8c22940f7a..e51c42aa30 100644 --- a/src/services/TokenNativeYieldService.ts +++ b/src/services/UnderlyingYieldService.ts @@ -3,25 +3,25 @@ import { Provider } from '@ethersproject/providers'; import { BigNumber, Contract } from 'ethers'; import { formatUnits } from 'ethers/lib/utils'; -export interface TokenNativeYield { +export interface UnderlyingAPYs { [key: string]: number | null; } const DAYS_IN_SECONDS = 60 * 60 * 24; -export class TokensNativeYieldService { +export class UnderlyingYieldService { constructor(private readonly getProvider: (chainId: number) => Provider) {} - async getTokensNativeYield(): Promise { - const wstethApr = await this.getWstethNativeYield(); + async getUnderlyingAPYs(): Promise { + const stethAPY = await this.getStethAPY(); return { - [AaveV3Ethereum.ASSETS.wstETH.UNDERLYING]: wstethApr, + [AaveV3Ethereum.ASSETS.wstETH.UNDERLYING]: stethAPY, }; } - getWstethNativeYield = async () => { + getStethAPY = async () => { // computation formula: https://docs.lido.fi/integrations/api#last-lido-apr-for-steth - const computeStEthAPR = ({ + const computeStethAPY = ({ preTotalEther, preTotalShares, postTotalEther, @@ -107,7 +107,7 @@ export class TokensNativeYieldService { // data.apr is the apy return resParsed.data.apr; } else { - return computeStEthAPR({ + return computeStethAPY({ preTotalEther: latestEvent.args['preTotalEther'], preTotalShares: latestEvent.args['preTotalShares'], postTotalEther: latestEvent.args['postTotalEther'], diff --git a/src/ui-config/SharedDependenciesProvider.tsx b/src/ui-config/SharedDependenciesProvider.tsx index eedc8718fe..b8ca94b01d 100644 --- a/src/ui-config/SharedDependenciesProvider.tsx +++ b/src/ui-config/SharedDependenciesProvider.tsx @@ -6,12 +6,12 @@ import { GovernanceService } from 'src/services/GovernanceService'; import { GovernanceV3Service } from 'src/services/GovernanceV3Service'; import { MigrationService } from 'src/services/MigrationService'; import { StkAbptMigrationService } from 'src/services/StkAbptMigrationService'; -import { TokensNativeYieldService } from 'src/services/TokenNativeYieldService'; import { TokenWrapperService } from 'src/services/TokenWrapperService'; import { UiGhoService } from 'src/services/UiGhoService'; import { UiIncentivesService } from 'src/services/UIIncentivesService'; import { UiPoolService } from 'src/services/UIPoolService'; import { UiStakeDataService } from 'src/services/UiStakeDataService'; +import { UnderlyingYieldService } from 'src/services/UnderlyingYieldService'; import { VotingMachineService } from 'src/services/VotingMachineService'; import { WalletBalanceService } from 'src/services/WalletBalanceService'; import { useRootStore } from 'src/store/root'; @@ -37,7 +37,7 @@ interface SharedDependenciesContext { stkAbptMigrationService: StkAbptMigrationService; migrationService: MigrationService; erc20Service: ERC20Service; - tokenNativeYieldService: TokensNativeYieldService; + underlyingYieldService: UnderlyingYieldService; } const SharedDependenciesContext = createContext(null); @@ -80,7 +80,7 @@ export const SharedDependenciesProvider: React.FC = ({ children }) => { const uiGhoService = new UiGhoService(getProvider); - const tokenNativeYieldService = new TokensNativeYieldService(getProvider); + const underlyingYieldService = new UnderlyingYieldService(getProvider); return ( { stkAbptMigrationService, migrationService, erc20Service, - tokenNativeYieldService, + underlyingYieldService, }} > {children} diff --git a/src/ui-config/queries.ts b/src/ui-config/queries.ts index 5c5a726ab1..e9dba8332e 100644 --- a/src/ui-config/queries.ts +++ b/src/ui-config/queries.ts @@ -161,10 +161,10 @@ export const queryKeysFactory = { chainId, 'tokensBalance', ], - tokensNativeYield: () => [ + underlyingYields: () => [ ...queryKeysFactory.pool, ...queryKeysFactory.incentives, - 'tokensNativeYield', + 'underlyingYield', ], }; From c7969b548b176b2bc08b67774b022380d0afe00b Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Thu, 20 Jun 2024 17:49:26 +0200 Subject: [PATCH 05/33] refactor: code cleaning --- src/hooks/pool/useUserYield.ts | 4 -- src/locales/en/messages.js | 2 +- src/locales/en/messages.po | 9 +---- .../dashboard/lists/ListAPYDetails.tsx | 40 +++++++++---------- .../SuppliedPositionsList.tsx | 4 -- .../SuppliedPositionsListItem.tsx | 2 - src/services/UnderlyingYieldService.ts | 4 -- 7 files changed, 20 insertions(+), 45 deletions(-) diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index f6cb0d330b..57039b9fbf 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -36,7 +36,6 @@ const formatUserYield = memoize( underlyingAPYs: UnderlyingAPYs, currentMarket: string ): UserYield => { - console.log('---underlyingAPYs', underlyingAPYs); const proportions = user.userReservesData.reduce( (acc, value) => { const reserve = formattedPoolReserves.find( @@ -44,15 +43,12 @@ const formatUserYield = memoize( ); if (reserve) { - // console.log('reserve', reserve); if (value.underlyingBalanceUSD !== '0') { acc.positiveProportion = acc.positiveProportion.plus( new BigNumber(reserve.supplyAPY).multipliedBy(value.underlyingBalanceUSD) ); - console.log('---reserve', reserve.supplyAPY); const underlyingAPY = underlyingAPYs[getAddress(reserve.underlyingAsset)]; - console.log('---underlyingAPY', underlyingAPY); if (underlyingAPY) { acc.positiveProportion = acc.positiveProportion.plus( diff --git a/src/locales/en/messages.js b/src/locales/en/messages.js index 745801f2bc..76027d0092 100644 --- a/src/locales/en/messages.js +++ b/src/locales/en/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"...":"...",".CSV":".CSV",".JSON":".JSON","<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)":"<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)","<0><1><2/>Add stkAAVE to see borrow rate with discount":"<0><1><2/>Add stkAAVE to see borrow rate with discount","<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.":"<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.","<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.":"<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.","<0>Slippage tolerance <1>{selectedSlippage}% <2>{0}":["<0>Slippage tolerance <1>",["selectedSlippage"],"% <2>",["0"],""],"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.":"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.","APR":"APR","APY":"APY","APY change":"APY change","APY type":"APY type","APY type change":"APY type change","APY with discount applied":"APY with discount applied","APY, borrow rate":"APY, borrow rate","APY, stable":"APY, stable","APY, variable":"APY, variable","AToken supply is not zero":"AToken supply is not zero","Aave Governance":"Aave Governance","Aave aToken":"Aave aToken","Aave debt token":"Aave debt token","Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance":"Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance","Aave per month":"Aave per month","About GHO":"About GHO","Account":"Account","Action cannot be performed because the reserve is frozen":"Action cannot be performed because the reserve is frozen","Action cannot be performed because the reserve is paused":"Action cannot be performed because the reserve is paused","Action requires an active reserve":"Action requires an active reserve","Activate Cooldown":"Activate Cooldown","Add stkAAVE to see borrow APY with the discount":"Add stkAAVE to see borrow APY with the discount","Add to wallet":"Add to wallet","Add {0} to wallet to track your balance.":["Add ",["0"]," to wallet to track your balance."],"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","Address is not a contract":"Address is not a contract","Addresses":"Addresses","Addresses ({0})":["Addresses (",["0"],")"],"All Assets":"All Assets","All done!":"All done!","All proposals":"All proposals","All transactions":"All transactions","Allowance required action":"Allowance required action","Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.":"Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.","Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.":"Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.","Amount":"Amount","Amount claimable":"Amount claimable","Amount in cooldown":"Amount in cooldown","Amount must be greater than 0":"Amount must be greater than 0","Amount to migrate":"Amount to migrate","Amount to unstake":"Amount to unstake","An error has occurred fetching the proposal.":"An error has occurred fetching the proposal.","Approve Confirmed":"Approve Confirmed","Approve with":"Approve with","Approve {symbol} to continue":["Approve ",["symbol"]," to continue"],"Approving {symbol}...":["Approving ",["symbol"],"..."],"Array parameters that should be equal length are not":"Array parameters that should be equal length are not","As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.":"As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.","Asset":"Asset","Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.":"Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.","Asset can only be used as collateral in isolation mode only.":"Asset can only be used as collateral in isolation mode only.","Asset cannot be migrated because you have isolated collateral in {marketName} v3 Market which limits borrowable assets. You can manage your collateral in <0>{marketName} V3 Dashboard":["Asset cannot be migrated because you have isolated collateral in ",["marketName"]," v3 Market which limits borrowable assets. You can manage your collateral in <0>",["marketName"]," V3 Dashboard"],"Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in {marketName} v3 market.":["Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in ",["marketName"]," v3 market."],"Asset cannot be migrated due to supply cap restriction in {marketName} v3 market.":["Asset cannot be migrated due to supply cap restriction in ",["marketName"]," v3 market."],"Asset cannot be migrated to {marketName} V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard":["Asset cannot be migrated to ",["marketName"]," V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard"],"Asset cannot be migrated to {marketName} v3 Market since collateral asset will enable isolation mode.":["Asset cannot be migrated to ",["marketName"]," v3 Market since collateral asset will enable isolation mode."],"Asset cannot be used as collateral.":"Asset cannot be used as collateral.","Asset category":"Asset category","Asset is frozen in {marketName} v3 market, hence this position cannot be migrated.":["Asset is frozen in ",["marketName"]," v3 market, hence this position cannot be migrated."],"Asset is not borrowable in isolation mode":"Asset is not borrowable in isolation mode","Asset is not listed":"Asset is not listed","Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.":"Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.","Assets":"Assets","Assets to borrow":"Assets to borrow","Assets to supply":"Assets to supply","Assets with zero LTV ({0}) must be withdrawn or disabled as collateral to perform this action":["Assets with zero LTV (",["0"],") must be withdrawn or disabled as collateral to perform this action"],"At a discount":"At a discount","Available":"Available","Available assets":"Available assets","Available liquidity":"Available liquidity","Available on":"Available on","Available rewards":"Available rewards","Available to borrow":"Available to borrow","Available to supply":"Available to supply","Back to Dashboard":"Back to Dashboard","Balance":"Balance","Balance to revoke":"Balance to revoke","Balancer Pool":"Balancer Pool","Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions":"Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions","Be mindful of the network congestion and gas prices.":"Be mindful of the network congestion and gas prices.","Because this asset is paused, no actions can be taken until further notice":"Because this asset is paused, no actions can be taken until further notice","Before supplying":"Before supplying","Blocked Address":"Blocked Address","Borrow":"Borrow","Borrow APY":"Borrow APY","Borrow APY rate":"Borrow APY rate","Borrow APY, variable":"Borrow APY, variable","Borrow amount to reach {0}% utilization":["Borrow amount to reach ",["0"],"% utilization"],"Borrow and repay in same block is not allowed":"Borrow and repay in same block is not allowed","Borrow apy":"Borrow apy","Borrow balance":"Borrow balance","Borrow balance after repay":"Borrow balance after repay","Borrow balance after switch":"Borrow balance after switch","Borrow cap":"Borrow cap","Borrow cap is exceeded":"Borrow cap is exceeded","Borrow info":"Borrow info","Borrow power used":"Borrow power used","Borrow rate change":"Borrow rate change","Borrow {symbol}":["Borrow ",["symbol"]],"Borrowed":"Borrowed","Borrowed asset amount":"Borrowed asset amount","Borrowed assets":"Borrowed assets","Borrowing is currently unavailable for {0}.":["Borrowing is currently unavailable for ",["0"],"."],"Borrowing is disabled due to an Aave community decision. <0>More details":"Borrowing is disabled due to an Aave community decision. <0>More details","Borrowing is not enabled":"Borrowing is not enabled","Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for {0} category. To manage E-Mode categories visit your <0>Dashboard.":["Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for ",["0"]," category. To manage E-Mode categories visit your <0>Dashboard."],"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.":"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.","Borrowing power and assets are limited due to Isolation mode.":"Borrowing power and assets are limited due to Isolation mode.","Borrowing this amount will reduce your health factor and increase risk of liquidation.":"Borrowing this amount will reduce your health factor and increase risk of liquidation.","Borrowing {symbol}":["Borrowing ",["symbol"]],"Both":"Both","Buy Crypto With Fiat":"Buy Crypto With Fiat","Buy Crypto with Fiat":"Buy Crypto with Fiat","Buy {cryptoSymbol} with Fiat":["Buy ",["cryptoSymbol"]," with Fiat"],"COPIED!":"COPIED!","COPY IMAGE":"COPY IMAGE","Can be collateral":"Can be collateral","Can be executed":"Can be executed","Can't validate the wallet address. Try again.":"Can't validate the wallet address. Try again.","Cancel":"Cancel","Cannot disable E-Mode":"Cannot disable E-Mode","Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.":"Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.","Choose one of the on-ramp services":"Choose one of the on-ramp services","Claim":"Claim","Claim all":"Claim all","Claim all rewards":"Claim all rewards","Claim {0}":["Claim ",["0"]],"Claim {symbol}":["Claim ",["symbol"]],"Claimable AAVE":"Claimable AAVE","Claimed":"Claimed","Claiming":"Claiming","Claiming {symbol}":["Claiming ",["symbol"]],"Close":"Close","Collateral":"Collateral","Collateral balance after repay":"Collateral balance after repay","Collateral change":"Collateral change","Collateral is (mostly) the same currency that is being borrowed":"Collateral is (mostly) the same currency that is being borrowed","Collateral to repay with":"Collateral to repay with","Collateral usage":"Collateral usage","Collateral usage is limited because of Isolation mode.":"Collateral usage is limited because of Isolation mode.","Collateral usage is limited because of isolation mode.":"Collateral usage is limited because of isolation mode.","Collateral usage is limited because of isolation mode. <0>Learn More":"Collateral usage is limited because of isolation mode. <0>Learn More","Collateralization":"Collateralization","Collector Contract":"Collector Contract","Collector Info":"Collector Info","Confirm transaction":"Confirm transaction","Confirming transaction":"Confirming transaction","Connect":"Connect","Connect wallet":"Connect wallet","Cooldown period":"Cooldown period","Cooldown period warning":"Cooldown period warning","Cooldown time left":"Cooldown time left","Cooldown to unstake":"Cooldown to unstake","Cooling down...":"Cooling down...","Copy address":"Copy address","Copy error message":"Copy error message","Copy error text":"Copy error text","Covered debt":"Covered debt","Current LTV":"Current LTV","Current differential":"Current differential","Current rewards":"Current rewards","Current v2 Balance":"Current v2 Balance","Current v2 balance":"Current v2 balance","Current votes":"Current votes","DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.":"DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.","Dark mode":"Dark mode","Dashboard":"Dashboard","Data couldn't be fetched, please reload graph.":"Data couldn't be fetched, please reload graph.","Debt":"Debt","Debt ceiling is exceeded":"Debt ceiling is exceeded","Debt ceiling is not zero":"Debt ceiling is not zero","Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.":"Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.","Delegated power":"Delegated power","Details":"Details","Developers":"Developers","Differential":"Differential","Disable E-Mode":"Disable E-Mode","Disable fork":"Disable fork","Disable testnet":"Disable testnet","Disable {symbol} as collateral":["Disable ",["symbol"]," as collateral"],"Disabled":"Disabled","Disabling E-Mode":"Disabling E-Mode","Disabling this asset as collateral affects your borrowing power and Health Factor.":"Disabling this asset as collateral affects your borrowing power and Health Factor.","Disconnect Wallet":"Disconnect Wallet","Discord channel":"Discord channel","Discount":"Discount","Discount applied for <0/> staking AAVE":"Discount applied for <0/> staking AAVE","Discount model parameters":"Discount model parameters","Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more":"Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more","Discountable amount":"Discountable amount","Docs":"Docs","Download":"Download","Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.":"Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.","Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.":"Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.","Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.":"Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.","During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.":"During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.","E-Mode":"E-Mode","E-Mode Category":"E-Mode Category","E-Mode category":"E-Mode category","E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more":"E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more","E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more":"E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more","E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.":"E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.","Edit":"Edit","Effective interest rate":"Effective interest rate","Efficiency mode (E-Mode)":"Efficiency mode (E-Mode)","Eligible for the merit program.":"Eligible for the merit program.","Email":"Email","Emode":"Emode","Enable E-Mode":"Enable E-Mode","Enable {symbol} as collateral":["Enable ",["symbol"]," as collateral"],"Enabled":"Enabled","Enabling E-Mode":"Enabling E-Mode","Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.":"Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.","Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.":"Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.","English":"English","Enter ETH address":"Enter ETH address","Enter an amount":"Enter an amount","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Estimated borrow rate":"Estimated borrow rate","Estimated compounding interest, including discount for Staking {0}AAVE in Safety Module.":["Estimated compounding interest, including discount for Staking ",["0"],"AAVE in Safety Module."],"Exceeds the discount":"Exceeds the discount","Exchange rate":"Exchange rate","Expected amount to repay":"Expected amount to repay","Expires":"Expires","Export data to":"Export data to","FAQ":"FAQ","FAQS":"FAQS","Failed to load proposal voters. Please refresh the page.":"Failed to load proposal voters. Please refresh the page.","Faucet":"Faucet","Faucet {0}":["Faucet ",["0"]],"Feedback":"Feedback","Fetching data...":"Fetching data...","Filter":"Filter","Fixed":"Fixed","Fixed rate":"Fixed rate","Flashloan is disabled for this asset, hence this position cannot be migrated.":"Flashloan is disabled for this asset, hence this position cannot be migrated.","For repayment of a specific type of debt, the user needs to have debt that type":"For repayment of a specific type of debt, the user needs to have debt that type","Fork mode is ON":"Fork mode is ON","Forum discussion":"Forum discussion","French":"French","Funds in the Safety Module":"Funds in the Safety Module","GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.":"GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.","Get ABP Token":"Get ABP Token","Get ABP v2 Token":"Get ABP v2 Token","Get GHO":"Get GHO","Global settings":"Global settings","Go Back":"Go Back","Go to Balancer Pool":"Go to Balancer Pool","Go to V3 Dashboard":"Go to V3 Dashboard","Governance":"Governance","Greek":"Greek","Health factor":"Health factor","Health factor is lesser than the liquidation threshold":"Health factor is lesser than the liquidation threshold","Health factor is not below the threshold":"Health factor is not below the threshold","Hide":"Hide","Holders of stkAAVE receive a discount on the GHO borrowing rate":"Holders of stkAAVE receive a discount on the GHO borrowing rate","I acknowledge the risks involved.":"I acknowledge the risks involved.","I fully understand the risks of migrating.":"I fully understand the risks of migrating.","I understand how cooldown ({0}) and unstaking ({1}) work":["I understand how cooldown (",["0"],") and unstaking (",["1"],") work"],"If the error continues to happen,<0/> you may report it to this":"If the error continues to happen,<0/> you may report it to this","If the health factor goes below 1, the liquidation of your collateral might be triggered.":"If the health factor goes below 1, the liquidation of your collateral might be triggered.","If you DO NOT unstake within {0} of unstake window, you will need to activate cooldown process again.":["If you DO NOT unstake within ",["0"]," of unstake window, you will need to activate cooldown process again."],"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.":"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.","In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets":"In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets","In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable {0} as collateral before borrowing another asset. Read more in our <0>FAQ":["In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable ",["0"]," as collateral before borrowing another asset. Read more in our <0>FAQ"],"Inconsistent flashloan parameters":"Inconsistent flashloan parameters","Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.":"Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.","Interest accrued":"Interest accrued","Interest rate rebalance conditions were not met":"Interest rate rebalance conditions were not met","Interest rate strategy":"Interest rate strategy","Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more":"Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more","Invalid amount to burn":"Invalid amount to burn","Invalid amount to mint":"Invalid amount to mint","Invalid bridge protocol fee":"Invalid bridge protocol fee","Invalid expiration":"Invalid expiration","Invalid flashloan premium":"Invalid flashloan premium","Invalid return value of the flashloan executor function":"Invalid return value of the flashloan executor function","Invalid signature":"Invalid signature","Isolated":"Isolated","Isolated Debt Ceiling":"Isolated Debt Ceiling","Isolated assets have limited borrowing power and other assets cannot be used as collateral.":"Isolated assets have limited borrowing power and other assets cannot be used as collateral.","Join the community discussion":"Join the community discussion","Language":"Language","Learn more":"Learn more","Learn more about risks involved":"Learn more about risks involved","Learn more in our <0>FAQ guide":"Learn more in our <0>FAQ guide","Learn more.":"Learn more.","Let us know how we can make the app better for you. For user support related inquiries please reach out on":"Let us know how we can make the app better for you. For user support related inquiries please reach out on","Linked addresses":"Linked addresses","Links":"Links","Liqudation":"Liqudation","Liquidated collateral":"Liquidated collateral","Liquidation":"Liquidation","Liquidation <0/> threshold":"Liquidation <0/> threshold","Liquidation Threshold":"Liquidation Threshold","Liquidation at":"Liquidation at","Liquidation penalty":"Liquidation penalty","Liquidation risk":"Liquidation risk","Liquidation risk parameters":"Liquidation risk parameters","Liquidation threshold":"Liquidation threshold","Liquidation value":"Liquidation value","Loading data...":"Loading data...","Ltv validation failed":"Ltv validation failed","MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details":"MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details","MAX":"MAX","Manage analytics":"Manage analytics","Market":"Market","Markets":"Markets","Max":"Max","Max LTV":"Max LTV","Max slashing":"Max slashing","Max slippage":"Max slippage","Maximum amount available to borrow against this asset is limited because debt ceiling is at {0}%.":["Maximum amount available to borrow against this asset is limited because debt ceiling is at ",["0"],"%."],"Maximum amount available to borrow is <0/> {0} (<1/>).":["Maximum amount available to borrow is <0/> ",["0"]," (<1/>)."],"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.":"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.","Maximum amount available to supply is <0/> {0} (<1/>).":["Maximum amount available to supply is <0/> ",["0"]," (<1/>)."],"Maximum amount available to supply is limited because protocol supply cap is at {0}%.":["Maximum amount available to supply is limited because protocol supply cap is at ",["0"],"%."],"Maximum amount received":"Maximum amount received","Maximum available to borrow":"Maximum available to borrow","Maximum collateral amount to use":"Maximum collateral amount to use","Maximum loan to value":"Maximum loan to value","Meet GHO":"Meet GHO","Menu":"Menu","Merit Program":"Merit Program","Migrate":"Migrate","Migrate to Aave V3":"Migrate to Aave V3","Migrate to V3":"Migrate to V3","Migrate to stkABPT v2":"Migrate to stkABPT v2","Migrate to v3":"Migrate to v3","Migrate to {0} v3 Market":["Migrate to ",["0"]," v3 Market"],"Migrate your assets":"Migrate your assets","Migrated":"Migrated","Migrating":"Migrating","Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.":"Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.","Migration risks":"Migration risks","Minimum GHO borrow amount":"Minimum GHO borrow amount","Minimum USD value received":"Minimum USD value received","Minimum amount of debt to be repaid":"Minimum amount of debt to be repaid","Minimum amount received":"Minimum amount received","Minimum staked Aave amount":"Minimum staked Aave amount","Minimum {0} received":["Minimum ",["0"]," received"],"More":"More","NAY":"NAY","Need help connecting a wallet? <0>Read our FAQ":"Need help connecting a wallet? <0>Read our FAQ","Net APR":"Net APR","Net APY":"Net APY","Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.":"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.","Net worth":"Net worth","Network":"Network","Network not supported for this wallet":"Network not supported for this wallet","New APY":"New APY","No assets selected to migrate.":"No assets selected to migrate.","No results found. You can import a custom token with a contract address":"No results found. You can import a custom token with a contract address","No rewards to claim":"No rewards to claim","No search results{0}":["No search results",["0"]],"No transactions yet.":"No transactions yet.","No voting power":"No voting power","None":"None","Not a valid address":"Not a valid address","Not enough balance on your wallet":"Not enough balance on your wallet","Not enough collateral to repay this amount of debt with":"Not enough collateral to repay this amount of debt with","Not enough staked balance":"Not enough staked balance","Not enough voting power to participate in this proposal":"Not enough voting power to participate in this proposal","Not reached":"Not reached","Nothing borrowed yet":"Nothing borrowed yet","Nothing found":"Nothing found","Nothing staked":"Nothing staked","Nothing supplied yet":"Nothing supplied yet","Ok, Close":"Ok, Close","Operation not supported":"Operation not supported","Oracle price":"Oracle price","Overview":"Overview","Page not found":"Page not found","Participating in this {symbol} reserve gives annualized rewards.":["Participating in this ",["symbol"]," reserve gives annualized rewards."],"Pending...":"Pending...","Per the community, the Fantom market has been frozen.":"Per the community, the Fantom market has been frozen.","Per the community, the V2 AMM market has been deprecated.":"Per the community, the V2 AMM market has been deprecated.","Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.":"Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.","Please connect a wallet to view your personal information here.":"Please connect a wallet to view your personal information here.","Please connect your wallet to be able to switch your tokens.":"Please connect your wallet to be able to switch your tokens.","Please connect your wallet to get free testnet assets.":"Please connect your wallet to get free testnet assets.","Please connect your wallet to see migration tool.":"Please connect your wallet to see migration tool.","Please connect your wallet to see your supplies, borrowings, and open positions.":"Please connect your wallet to see your supplies, borrowings, and open positions.","Please connect your wallet to view transaction history.":"Please connect your wallet to view transaction history.","Please enter a valid wallet address.":"Please enter a valid wallet address.","Please switch to {networkName}.":["Please switch to ",["networkName"],"."],"Please, connect your wallet":"Please, connect your wallet","Pool addresses provider is not registered":"Pool addresses provider is not registered","Powered by":"Powered by","Preview tx and migrate":"Preview tx and migrate","Price":"Price","Price data is not currently available for this reserve on the protocol subgraph":"Price data is not currently available for this reserve on the protocol subgraph","Price impact":"Price impact","Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.":"Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.","Price impact {0}%":["Price impact ",["0"],"%"],"Privacy":"Privacy","Proposal details":"Proposal details","Proposal overview":"Proposal overview","Proposals":"Proposals","Proposition":"Proposition","Protocol borrow cap at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap at 100% for this asset. Further borrowing unavailable.","Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.","Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.","Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.","Protocol supply cap at 100% for this asset. Further supply unavailable.":"Protocol supply cap at 100% for this asset. Further supply unavailable.","Protocol supply cap is at 100% for this asset. Further supply unavailable.":"Protocol supply cap is at 100% for this asset. Further supply unavailable.","Quorum":"Quorum","Rate change":"Rate change","Raw-Ipfs":"Raw-Ipfs","Reached":"Reached","Reactivate cooldown period to unstake {0} {stakedToken}":["Reactivate cooldown period to unstake ",["0"]," ",["stakedToken"]],"Read more here.":"Read more here.","Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.":"Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.","Read-only mode.":"Read-only mode.","Read-only mode. Connect to a wallet to perform transactions.":"Read-only mode. Connect to a wallet to perform transactions.","Receive (est.)":"Receive (est.)","Received":"Received","Recipient address":"Recipient address","Rejected connection request":"Rejected connection request","Reload":"Reload","Reload the page":"Reload the page","Remaining debt":"Remaining debt","Remaining supply":"Remaining supply","Remind me":"Remind me","Remove":"Remove","Repaid":"Repaid","Repay":"Repay","Repay with":"Repay with","Repay {symbol}":["Repay ",["symbol"]],"Repaying {symbol}":["Repaying ",["symbol"]],"Repayment amount to reach {0}% utilization":["Repayment amount to reach ",["0"],"% utilization"],"Representative smart contract wallet (ie. Safe) addresses on other chains.":"Representative smart contract wallet (ie. Safe) addresses on other chains.","Representing smart contract wallet (ie. Safe) addresses on other chains.":"Representing smart contract wallet (ie. Safe) addresses on other chains.","Reserve Size":"Reserve Size","Reserve factor":"Reserve factor","Reserve factor is a percentage of interest which goes to a {0} that is controlled by Aave governance to promote ecosystem growth.":["Reserve factor is a percentage of interest which goes to a ",["0"]," that is controlled by Aave governance to promote ecosystem growth."],"Reserve status & configuration":"Reserve status & configuration","Reset":"Reset","Restake":"Restake","Restake {symbol}":["Restake ",["symbol"]],"Restaked":"Restaked","Restaking {symbol}":["Restaking ",["symbol"]],"Review approval tx details":"Review approval tx details","Review tx":"Review tx","Review tx details":"Review tx details","Revoke power":"Revoke power","Reward(s) to claim":"Reward(s) to claim","Rewards APR":"Rewards APR","Risk details":"Risk details","SEE CHARTS":"SEE CHARTS","Safety of your deposited collateral against the borrowed assets and its underlying value.":"Safety of your deposited collateral against the borrowed assets and its underlying value.","Save and share":"Save and share","Seems like we can't switch the network automatically. Please check if you can change it from the wallet.":"Seems like we can't switch the network automatically. Please check if you can change it from the wallet.","Select":"Select","Select APY type to switch":"Select APY type to switch","Select an asset":"Select an asset","Select language":"Select language","Select slippage tolerance":"Select slippage tolerance","Selected assets have successfully migrated. Visit the Market Dashboard to see them.":"Selected assets have successfully migrated. Visit the Market Dashboard to see them.","Selected borrow assets":"Selected borrow assets","Selected supply assets":"Selected supply assets","Send Feedback":"Send Feedback","Send feedback":"Send feedback","Set up delegation":"Set up delegation","Share on Lens":"Share on Lens","Share on twitter":"Share on twitter","Show":"Show","Show Frozen or paused assets":"Show Frozen or paused assets","Show assets with 0 balance":"Show assets with 0 balance","Sign to continue":"Sign to continue","Signatures ready":"Signatures ready","Signing":"Signing","Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard":"Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard","Since this is a test network, you can get any of the assets if you have ETH on your wallet":"Since this is a test network, you can get any of the assets if you have ETH on your wallet","Slippage":"Slippage","Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.":"Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.","Some migrated assets will not be used as collateral due to enabled isolation mode in {marketName} V3 Market. Visit <0>{marketName} V3 Dashboard to manage isolation mode.":["Some migrated assets will not be used as collateral due to enabled isolation mode in ",["marketName"]," V3 Market. Visit <0>",["marketName"]," V3 Dashboard to manage isolation mode."],"Something went wrong":"Something went wrong","Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.":"Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.","Sorry, we couldn't find the page you were looking for.":"Sorry, we couldn't find the page you were looking for.","Spanish":"Spanish","Stable":"Stable","Stable Interest Type is disabled for this currency":"Stable Interest Type is disabled for this currency","Stable borrowing is enabled":"Stable borrowing is enabled","Stable borrowing is not enabled":"Stable borrowing is not enabled","Stable debt supply is not zero":"Stable debt supply is not zero","Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.":"Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.","Stablecoin":"Stablecoin","Stake":"Stake","Stake AAVE":"Stake AAVE","Stake ABPT":"Stake ABPT","Stake GHO":"Stake GHO","Stake cooldown activated":"Stake cooldown activated","Staked":"Staked","Staking":"Staking","Staking APR":"Staking APR","Staking Rewards":"Staking Rewards","Staking balance":"Staking balance","Staking discount":"Staking discount","State":"State","Submission did not work, please try again later or contact wecare@avara.xyz":"Submission did not work, please try again later or contact wecare@avara.xyz","Supplied":"Supplied","Supplied asset amount":"Supplied asset amount","Supplied assets":"Supplied assets","Supply":"Supply","Supply APY":"Supply APY","Supply APY:":"Supply APY:","Supply apy":"Supply apy","Supply balance":"Supply balance","Supply balance after switch":"Supply balance after switch","Supply cap is exceeded":"Supply cap is exceeded","Supply cap on target reserve reached. Try lowering the amount.":"Supply cap on target reserve reached. Try lowering the amount.","Supply {symbol}":["Supply ",["symbol"]],"Supplying your":"Supplying your","Supplying {symbol}":["Supplying ",["symbol"]],"Switch":"Switch","Switch APY type":"Switch APY type","Switch E-Mode":"Switch E-Mode","Switch E-Mode category":"Switch E-Mode category","Switch Network":"Switch Network","Switch borrow position":"Switch borrow position","Switch rate":"Switch rate","Switch to":"Switch to","Switched":"Switched","Switching":"Switching","Switching E-Mode":"Switching E-Mode","Switching rate":"Switching rate","Techpaper":"Techpaper","Terms":"Terms","Test Assets":"Test Assets","Testnet mode":"Testnet mode","Testnet mode is ON":"Testnet mode is ON","Thank you for submitting feedback!":"Thank you for submitting feedback!","Thank you for voting!!":"Thank you for voting!!","The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.":"The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.","The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.":"The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.","The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.":"The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.","The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.":"The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.","The Stable Rate is not enabled for this currency":"The Stable Rate is not enabled for this currency","The address of the pool addresses provider is invalid":"The address of the pool addresses provider is invalid","The app is running in fork mode.":"The app is running in fork mode.","The app is running in testnet mode. Learn how it works in":"The app is running in testnet mode. Learn how it works in","The caller of the function is not an AToken":"The caller of the function is not an AToken","The caller of this function must be a pool":"The caller of this function must be a pool","The collateral balance is 0":"The collateral balance is 0","The collateral chosen cannot be liquidated":"The collateral chosen cannot be liquidated","The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more":"The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more","The cooldown period is {0}. After {1} of cooldown, you will enter unstake window of {2}. You will continue receiving rewards during cooldown and unstake window.":["The cooldown period is ",["0"],". After ",["1"]," of cooldown, you will enter unstake window of ",["2"],". You will continue receiving rewards during cooldown and unstake window."],"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.":"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.","The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.":"The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.","The requested amount is greater than the max loan size in stable rate mode":"The requested amount is greater than the max loan size in stable rate mode","The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.":"The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.","The underlying asset cannot be rescued":"The underlying asset cannot be rescued","The underlying balance needs to be greater than 0":"The underlying balance needs to be greater than 0","The weighted average of APY for all borrowed assets, including incentives.":"The weighted average of APY for all borrowed assets, including incentives.","The weighted average of APY for all supplied assets, including incentives.":"The weighted average of APY for all supplied assets, including incentives.","There are not enough funds in the{0}reserve to borrow":["There are not enough funds in the",["0"],"reserve to borrow"],"There is not enough collateral to cover a new borrow":"There is not enough collateral to cover a new borrow","There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.":"There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.","There was some error. Please try changing the parameters or <0><1>copy the error":"There was some error. Please try changing the parameters or <0><1>copy the error","These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.":"These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.","These funds have been borrowed and are not available for withdrawal at this time.":"These funds have been borrowed and are not available for withdrawal at this time.","This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.":"This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.","This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.":"This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.","This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.":"This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.","This address is blocked on app.aave.com because it is associated with one or more":"This address is blocked on app.aave.com because it is associated with one or more","This asset has almost reached its borrow cap. There is only {messageValue} available to be borrowed from this market.":["This asset has almost reached its borrow cap. There is only ",["messageValue"]," available to be borrowed from this market."],"This asset has almost reached its supply cap. There can only be {messageValue} supplied to this market.":["This asset has almost reached its supply cap. There can only be ",["messageValue"]," supplied to this market."],"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.":"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.","This asset has reached its borrow cap. Nothing is available to be borrowed from this market.":"This asset has reached its borrow cap. Nothing is available to be borrowed from this market.","This asset has reached its supply cap. Nothing is available to be supplied from this market.":"This asset has reached its supply cap. Nothing is available to be supplied from this market.","This asset is frozen due to an Aave Protocol Governance decision. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. <0>More details","This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details","This asset is frozen due to an Aave community decision. <0>More details":"This asset is frozen due to an Aave community decision. <0>More details","This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details":"This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details","This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.":"This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.","This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.":"This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.","This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.":"This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.","This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.":"This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.","Time left to unstake":"Time left to unstake","Time remaining until the 48 hour withdraw period starts.":"Time remaining until the 48 hour withdraw period starts.","Time remaining until the withdraw period ends.":"Time remaining until the withdraw period ends.","Tip: Try increasing slippage or reduce input amount":"Tip: Try increasing slippage or reduce input amount","To borrow you need to supply any asset to be used as collateral.":"To borrow you need to supply any asset to be used as collateral.","To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more":"To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more","To enable E-mode for the {0} category, all borrow positions outside of this category must be closed.":["To enable E-mode for the ",["0"]," category, all borrow positions outside of this category must be closed."],"To repay on behalf of a user an explicit amount to repay is needed":"To repay on behalf of a user an explicit amount to repay is needed","To request access for this permissioned market, please visit: <0>Acces Provider Name":"To request access for this permissioned market, please visit: <0>Acces Provider Name","To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.":"To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.","Top 10 addresses":"Top 10 addresses","Total available":"Total available","Total borrowed":"Total borrowed","Total borrows":"Total borrows","Total emission per day":"Total emission per day","Total interest accrued":"Total interest accrued","Total market size":"Total market size","Total supplied":"Total supplied","Total worth":"Total worth","Track wallet":"Track wallet","Track wallet balance in read-only mode":"Track wallet balance in read-only mode","Transaction failed":"Transaction failed","Transaction history":"Transaction history","Transaction history is not currently available for this market":"Transaction history is not currently available for this market","Transaction overview":"Transaction overview","Transactions":"Transactions","Unavailable":"Unavailable","Unbacked":"Unbacked","Unbacked mint cap is exceeded":"Unbacked mint cap is exceeded","Underlying APY:":"Underlying APY:","Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated.":["Underlying asset does not exist in ",["marketName"]," v3 Market, hence this position cannot be migrated."],"Underlying token":"Underlying token","Unstake":"Unstake","Unstake now":"Unstake now","Unstake window":"Unstake window","Unstake {symbol}":["Unstake ",["symbol"]],"Unstaked":"Unstaked","Unstaking {symbol}":["Unstaking ",["symbol"]],"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.":"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.","Use it to vote for or against active proposals.":"Use it to vote for or against active proposals.","Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.":"Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.","Used as collateral":"Used as collateral","User cannot withdraw more than the available balance":"User cannot withdraw more than the available balance","User did not borrow the specified currency":"User did not borrow the specified currency","User does not have outstanding stable rate debt on this reserve":"User does not have outstanding stable rate debt on this reserve","User does not have outstanding variable rate debt on this reserve":"User does not have outstanding variable rate debt on this reserve","User is in isolation mode or LTV is zero":"User is in isolation mode or LTV is zero","User is trying to borrow multiple assets including a siloed one":"User is trying to borrow multiple assets including a siloed one","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.","Utilization Rate":"Utilization Rate","VIEW TX":"VIEW TX","VOTE NAY":"VOTE NAY","VOTE YAE":"VOTE YAE","Variable":"Variable","Variable debt supply is not zero":"Variable debt supply is not zero","Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.":"Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.","Variable rate":"Variable rate","Version 2":"Version 2","Version 3":"Version 3","View":"View","View Transactions":"View Transactions","View all votes":"View all votes","View contract":"View contract","View details":"View details","View on Explorer":"View on Explorer","Vote NAY":"Vote NAY","Vote YAE":"Vote YAE","Voted NAY":"Voted NAY","Voted YAE":"Voted YAE","Votes":"Votes","Voting":"Voting","Voting is on":"Voting is on","Voting power":"Voting power","Voting results":"Voting results","Wallet Balance":"Wallet Balance","Wallet balance":"Wallet balance","Wallet not detected. Connect or install wallet and retry":"Wallet not detected. Connect or install wallet and retry","Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.":"Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.","We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.":"We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.","We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.":"We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.","We couldn’t detect a wallet. Connect a wallet to stake and view your balance.":"We couldn’t detect a wallet. Connect a wallet to stake and view your balance.","We suggest you go back to the Dashboard.":"We suggest you go back to the Dashboard.","Website":"Website","When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.":"When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.","With a voting power of <0/>":"With a voting power of <0/>","With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more":"With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more","Withdraw":"Withdraw","Withdraw & Switch":"Withdraw & Switch","Withdraw and Switch":"Withdraw and Switch","Withdraw {symbol}":["Withdraw ",["symbol"]],"Withdrawing":"Withdrawing","Withdrawing and Switching":"Withdrawing and Switching","Withdrawing this amount will reduce your health factor and increase risk of liquidation.":"Withdrawing this amount will reduce your health factor and increase risk of liquidation.","Withdrawing {symbol}":["Withdrawing ",["symbol"]],"Wrong Network":"Wrong Network","YAE":"YAE","You are entering Isolation mode":"You are entering Isolation mode","You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.":"You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.","You can not change Interest Type to stable as your borrowings are higher than your collateral":"You can not change Interest Type to stable as your borrowings are higher than your collateral","You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.":"You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.","You can not switch usage as collateral mode for this currency, because it will cause collateral call":"You can not switch usage as collateral mode for this currency, because it will cause collateral call","You can not use this currency as collateral":"You can not use this currency as collateral","You can not withdraw this amount because it will cause collateral call":"You can not withdraw this amount because it will cause collateral call","You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.":"You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.","You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.":"You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.","You can report incident to our <0>Discord or<1>Github.":"You can report incident to our <0>Discord or<1>Github.","You cancelled the transaction.":"You cancelled the transaction.","You did not participate in this proposal":"You did not participate in this proposal","You do not have supplies in this currency":"You do not have supplies in this currency","You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.":"You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.","You have no AAVE/stkAAVE/aAave balance to delegate.":"You have no AAVE/stkAAVE/aAave balance to delegate.","You have not borrow yet using this currency":"You have not borrow yet using this currency","You may borrow up to <0/> GHO at <1/> (max discount)":"You may borrow up to <0/> GHO at <1/> (max discount)","You may enter a custom amount in the field.":"You may enter a custom amount in the field.","You switched to {0} rate":["You switched to ",["0"]," rate"],"You unstake here":"You unstake here","You voted {0}":["You voted ",["0"]],"You will exit isolation mode and other tokens can now be used as collateral":"You will exit isolation mode and other tokens can now be used as collateral","You {action} <0/> {symbol}":["You ",["action"]," <0/> ",["symbol"]],"You've successfully switched borrow position.":"You've successfully switched borrow position.","You've successfully switched tokens.":"You've successfully switched tokens.","You've successfully withdrew & switched tokens.":"You've successfully withdrew & switched tokens.","Your balance is lower than the selected amount.":"Your balance is lower than the selected amount.","Your borrows":"Your borrows","Your current loan to value based on your collateral supplied.":"Your current loan to value based on your collateral supplied.","Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.":"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.","Your info":"Your info","Your proposition power is based on your AAVE/stkAAVE balance and received delegations.":"Your proposition power is based on your AAVE/stkAAVE balance and received delegations.","Your reward balance is 0":"Your reward balance is 0","Your supplies":"Your supplies","Your voting info":"Your voting info","Your voting power is based on your AAVE/stkAAVE balance and received delegations.":"Your voting power is based on your AAVE/stkAAVE balance and received delegations.","Your {name} wallet is empty. Purchase or transfer assets or use <0>{0} to transfer your {network} assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets or use <0>",["0"]," to transfer your ",["network"]," assets."],"Your {name} wallet is empty. Purchase or transfer assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets."],"Your {networkName} wallet is empty. Get free test assets at":["Your ",["networkName"]," wallet is empty. Get free test assets at"],"Your {networkName} wallet is empty. Get free test {0} at":["Your ",["networkName"]," wallet is empty. Get free test ",["0"]," at"],"Zero address not valid":"Zero address not valid","assets":"assets","blocked activities":"blocked activities","copy the error":"copy the error","disabled":"disabled","documentation":"documentation","enabled":"enabled","ends":"ends","for":"for","of":"of","on":"on","please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.":"please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.","repaid":"repaid","stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.":"stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.","stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: {0}":["stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: ",["0"]],"staking view":"staking view","starts":"starts","stkAAVE holders get a discount on GHO borrow rate":"stkAAVE holders get a discount on GHO borrow rate","to":"to","tokens is not the same as staking them. If you wish to stake your":"tokens is not the same as staking them. If you wish to stake your","tokens, please go to the":"tokens, please go to the","withdrew":"withdrew","{0}":[["0"]],"{0} Balance":[["0"]," Balance"],"{0} Faucet":[["0"]," Faucet"],"{0} on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational.":[["0"]," on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational."],"{0}{name}":[["0"],["name"]],"{currentMethod}":[["currentMethod"]],"{d}d":[["d"],"d"],"{h}h":[["h"],"h"],"{m}m":[["m"],"m"],"{networkName} Faucet":[["networkName"]," Faucet"],"{notifyText}":[["notifyText"]],"{numSelected}/{numAvailable} assets selected":[["numSelected"],"/",["numAvailable"]," assets selected"],"{stepName}":[["stepName"]],"{s}s":[["s"],"s"],"{title}":[["title"]],"{tooltipText}":[["tooltipText"]]}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"...":"...",".CSV":".CSV",".JSON":".JSON","<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)":"<0><1><2/>Add <3/> stkAAVE to borrow at <4/> (max discount)","<0><1><2/>Add stkAAVE to see borrow rate with discount":"<0><1><2/>Add stkAAVE to see borrow rate with discount","<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.":"<0>Ampleforth is a rebasing asset. Visit the <1>documentation to learn more.","<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.":"<0>Attention: Parameter changes via governance can alter your account health factor and risk of liquidation. Follow the <1>Aave governance forum for updates.","<0>Slippage tolerance <1>{selectedSlippage}% <2>{0}":["<0>Slippage tolerance <1>",["selectedSlippage"],"% <2>",["0"],""],"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.":"AAVE, GHO, and ABPT holders (Ethereum network only) can stake their assets in the Safety Module to add more security to the protocol and earn Safety Incentives. In the case of a shortfall event, your stake can be slashed to cover the deficit, providing an additional layer of protection for the protocol.","APR":"APR","APY":"APY","APY change":"APY change","APY type":"APY type","APY type change":"APY type change","APY with discount applied":"APY with discount applied","APY, borrow rate":"APY, borrow rate","APY, stable":"APY, stable","APY, variable":"APY, variable","AToken supply is not zero":"AToken supply is not zero","Aave Governance":"Aave Governance","Aave aToken":"Aave aToken","Aave debt token":"Aave debt token","Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance":"Aave is a fully decentralized, community governed protocol by the AAVE token-holders. AAVE token-holders collectively discuss, propose, and vote on upgrades to the protocol. AAVE token-holders (Ethereum network only) can either vote themselves on new proposals or delagate to an address of choice. To learn more check out the Governance","Aave per month":"Aave per month","About GHO":"About GHO","Account":"Account","Action cannot be performed because the reserve is frozen":"Action cannot be performed because the reserve is frozen","Action cannot be performed because the reserve is paused":"Action cannot be performed because the reserve is paused","Action requires an active reserve":"Action requires an active reserve","Activate Cooldown":"Activate Cooldown","Add stkAAVE to see borrow APY with the discount":"Add stkAAVE to see borrow APY with the discount","Add to wallet":"Add to wallet","Add {0} to wallet to track your balance.":["Add ",["0"]," to wallet to track your balance."],"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"Additionally, GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","Address is not a contract":"Address is not a contract","Addresses":"Addresses","Addresses ({0})":["Addresses (",["0"],")"],"All Assets":"All Assets","All done!":"All done!","All proposals":"All proposals","All transactions":"All transactions","Allowance required action":"Allowance required action","Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.":"Allows you to decide whether to use a supplied asset as collateral. An asset used as collateral will affect your borrowing power and health factor.","Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.":"Allows you to switch between <0>variable and <1>stable interest rates, where variable rate can increase and decrease depending on the amount of liquidity in the reserve, and stable rate will stay the same for the duration of your loan.","Amount":"Amount","Amount claimable":"Amount claimable","Amount in cooldown":"Amount in cooldown","Amount must be greater than 0":"Amount must be greater than 0","Amount to migrate":"Amount to migrate","Amount to unstake":"Amount to unstake","An error has occurred fetching the proposal.":"An error has occurred fetching the proposal.","Approve Confirmed":"Approve Confirmed","Approve with":"Approve with","Approve {symbol} to continue":["Approve ",["symbol"]," to continue"],"Approving {symbol}...":["Approving ",["symbol"],"..."],"Array parameters that should be equal length are not":"Array parameters that should be equal length are not","As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.":"As a result of governance decisions, this ABPT staking pool is now deprecated. You have the flexibility to either migrate all of your tokens to v2 or unstake them without any cooldown period.","Asset":"Asset","Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.":"Asset can be only used as collateral in isolation mode with limited borrowing power. To enter isolation mode, disable all other collateral.","Asset can only be used as collateral in isolation mode only.":"Asset can only be used as collateral in isolation mode only.","Asset cannot be migrated because you have isolated collateral in {marketName} v3 Market which limits borrowable assets. You can manage your collateral in <0>{marketName} V3 Dashboard":["Asset cannot be migrated because you have isolated collateral in ",["marketName"]," v3 Market which limits borrowable assets. You can manage your collateral in <0>",["marketName"]," V3 Dashboard"],"Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in {marketName} v3 market.":["Asset cannot be migrated due to insufficient liquidity or borrow cap limitation in ",["marketName"]," v3 market."],"Asset cannot be migrated due to supply cap restriction in {marketName} v3 market.":["Asset cannot be migrated due to supply cap restriction in ",["marketName"]," v3 market."],"Asset cannot be migrated to {marketName} V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard":["Asset cannot be migrated to ",["marketName"]," V3 Market due to E-mode restrictions. You can disable or manage E-mode categories in your <0>V3 Dashboard"],"Asset cannot be migrated to {marketName} v3 Market since collateral asset will enable isolation mode.":["Asset cannot be migrated to ",["marketName"]," v3 Market since collateral asset will enable isolation mode."],"Asset cannot be used as collateral.":"Asset cannot be used as collateral.","Asset category":"Asset category","Asset is frozen in {marketName} v3 market, hence this position cannot be migrated.":["Asset is frozen in ",["marketName"]," v3 market, hence this position cannot be migrated."],"Asset is not borrowable in isolation mode":"Asset is not borrowable in isolation mode","Asset is not listed":"Asset is not listed","Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.":"Asset supply is limited to a certain amount to reduce protocol exposure to the asset and to help manage risks involved.","Assets":"Assets","Assets to borrow":"Assets to borrow","Assets to supply":"Assets to supply","Assets with zero LTV ({0}) must be withdrawn or disabled as collateral to perform this action":["Assets with zero LTV (",["0"],") must be withdrawn or disabled as collateral to perform this action"],"At a discount":"At a discount","Available":"Available","Available assets":"Available assets","Available liquidity":"Available liquidity","Available on":"Available on","Available rewards":"Available rewards","Available to borrow":"Available to borrow","Available to supply":"Available to supply","Back to Dashboard":"Back to Dashboard","Balance":"Balance","Balance to revoke":"Balance to revoke","Balancer Pool":"Balancer Pool","Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions":"Be careful - You are very close to liquidation. Consider depositing more collateral or paying down some of your borrowed positions","Be mindful of the network congestion and gas prices.":"Be mindful of the network congestion and gas prices.","Because this asset is paused, no actions can be taken until further notice":"Because this asset is paused, no actions can be taken until further notice","Before supplying":"Before supplying","Blocked Address":"Blocked Address","Borrow":"Borrow","Borrow APY":"Borrow APY","Borrow APY rate":"Borrow APY rate","Borrow APY, variable":"Borrow APY, variable","Borrow amount to reach {0}% utilization":["Borrow amount to reach ",["0"],"% utilization"],"Borrow and repay in same block is not allowed":"Borrow and repay in same block is not allowed","Borrow apy":"Borrow apy","Borrow balance":"Borrow balance","Borrow balance after repay":"Borrow balance after repay","Borrow balance after switch":"Borrow balance after switch","Borrow cap":"Borrow cap","Borrow cap is exceeded":"Borrow cap is exceeded","Borrow info":"Borrow info","Borrow power used":"Borrow power used","Borrow rate change":"Borrow rate change","Borrow {symbol}":["Borrow ",["symbol"]],"Borrowed":"Borrowed","Borrowed asset amount":"Borrowed asset amount","Borrowed assets":"Borrowed assets","Borrowing is currently unavailable for {0}.":["Borrowing is currently unavailable for ",["0"],"."],"Borrowing is disabled due to an Aave community decision. <0>More details":"Borrowing is disabled due to an Aave community decision. <0>More details","Borrowing is not enabled":"Borrowing is not enabled","Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’re using Isolation mode. To manage Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.":"Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) and Isolation mode. To manage E-Mode and Isolation mode visit your <0>Dashboard.","Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for {0} category. To manage E-Mode categories visit your <0>Dashboard.":["Borrowing is unavailable because you’ve enabled Efficiency Mode (E-Mode) for ",["0"]," category. To manage E-Mode categories visit your <0>Dashboard."],"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.":"Borrowing of this asset is limited to a certain amount to minimize liquidity pool insolvency.","Borrowing power and assets are limited due to Isolation mode.":"Borrowing power and assets are limited due to Isolation mode.","Borrowing this amount will reduce your health factor and increase risk of liquidation.":"Borrowing this amount will reduce your health factor and increase risk of liquidation.","Borrowing {symbol}":["Borrowing ",["symbol"]],"Both":"Both","Buy Crypto With Fiat":"Buy Crypto With Fiat","Buy Crypto with Fiat":"Buy Crypto with Fiat","Buy {cryptoSymbol} with Fiat":["Buy ",["cryptoSymbol"]," with Fiat"],"COPIED!":"COPIED!","COPY IMAGE":"COPY IMAGE","Can be collateral":"Can be collateral","Can be executed":"Can be executed","Can't validate the wallet address. Try again.":"Can't validate the wallet address. Try again.","Cancel":"Cancel","Cannot disable E-Mode":"Cannot disable E-Mode","Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.":"Choose how much voting/proposition power to give to someone else by delegating some of your AAVE, stkAAVE or aAave balance. Your tokens will remain in your account, but your delegate will be able to vote or propose on your behalf. If your AAVE, stkAAVE or aAave balance changes, your delegate's voting/proposition power will be automatically adjusted.","Choose one of the on-ramp services":"Choose one of the on-ramp services","Claim":"Claim","Claim all":"Claim all","Claim all rewards":"Claim all rewards","Claim {0}":["Claim ",["0"]],"Claim {symbol}":["Claim ",["symbol"]],"Claimable AAVE":"Claimable AAVE","Claimed":"Claimed","Claiming":"Claiming","Claiming {symbol}":["Claiming ",["symbol"]],"Close":"Close","Collateral":"Collateral","Collateral balance after repay":"Collateral balance after repay","Collateral change":"Collateral change","Collateral is (mostly) the same currency that is being borrowed":"Collateral is (mostly) the same currency that is being borrowed","Collateral to repay with":"Collateral to repay with","Collateral usage":"Collateral usage","Collateral usage is limited because of Isolation mode.":"Collateral usage is limited because of Isolation mode.","Collateral usage is limited because of isolation mode.":"Collateral usage is limited because of isolation mode.","Collateral usage is limited because of isolation mode. <0>Learn More":"Collateral usage is limited because of isolation mode. <0>Learn More","Collateralization":"Collateralization","Collector Contract":"Collector Contract","Collector Info":"Collector Info","Confirm transaction":"Confirm transaction","Confirming transaction":"Confirming transaction","Connect":"Connect","Connect wallet":"Connect wallet","Cooldown period":"Cooldown period","Cooldown period warning":"Cooldown period warning","Cooldown time left":"Cooldown time left","Cooldown to unstake":"Cooldown to unstake","Cooling down...":"Cooling down...","Copy address":"Copy address","Copy error message":"Copy error message","Copy error text":"Copy error text","Covered debt":"Covered debt","Current LTV":"Current LTV","Current differential":"Current differential","Current rewards":"Current rewards","Current v2 Balance":"Current v2 Balance","Current v2 balance":"Current v2 balance","Current votes":"Current votes","DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.":"DAI balance will be converted via DSR contracts and then supplied as sDAI. Switching incurs no additional costs and no slippage.","Dark mode":"Dark mode","Dashboard":"Dashboard","Data couldn't be fetched, please reload graph.":"Data couldn't be fetched, please reload graph.","Debt":"Debt","Debt ceiling is exceeded":"Debt ceiling is exceeded","Debt ceiling is not zero":"Debt ceiling is not zero","Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.":"Debt ceiling limits the amount possible to borrow against this asset by protocol users. Debt ceiling is specific to assets in isolation mode and is denoted in USD.","Delegated power":"Delegated power","Details":"Details","Developers":"Developers","Differential":"Differential","Disable E-Mode":"Disable E-Mode","Disable fork":"Disable fork","Disable testnet":"Disable testnet","Disable {symbol} as collateral":["Disable ",["symbol"]," as collateral"],"Disabled":"Disabled","Disabling E-Mode":"Disabling E-Mode","Disabling this asset as collateral affects your borrowing power and Health Factor.":"Disabling this asset as collateral affects your borrowing power and Health Factor.","Disconnect Wallet":"Disconnect Wallet","Discord channel":"Discord channel","Discount":"Discount","Discount applied for <0/> staking AAVE":"Discount applied for <0/> staking AAVE","Discount model parameters":"Discount model parameters","Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more":"Discount parameters are decided by the Aave community and may be changed over time. Check Governance for updates and vote to participate. <0>Learn more","Discountable amount":"Discountable amount","Docs":"Docs","Download":"Download","Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.":"Due to health factor impact, a flashloan is required to perform this transaction, but Aave Governance has disabled flashloan availability for this asset. Try lowering the amount or supplying additional collateral.","Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.":"Due to internal stETH mechanics required for rebasing support, it is not possible to perform a collateral switch where stETH is the source token.","Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.":"Due to the Horizon bridge exploit, certain assets on the Harmony network are not at parity with Ethereum, which affects the Aave V3 Harmony market.","During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.":"During the cooldown period, you will not earn any merit rewards. However, rewards earned up to this point will remain unaffected.","E-Mode":"E-Mode","E-Mode Category":"E-Mode Category","E-Mode category":"E-Mode category","E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more":"E-Mode increases your LTV for a selected category of assets up to 97%. <0>Learn more","E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more":"E-Mode increases your LTV for a selected category of assets up to<0/>. <1>Learn more","E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.":"E-Mode increases your LTV for a selected category of assets, meaning that when E-mode is enabled, you will have higher borrowing power over assets of the same E-mode category which are defined by Aave Governance. You can enter E-Mode from your <0>Dashboard. To learn more about E-Mode and applied restrictions in <1>FAQ or <2>Aave V3 Technical Paper.","Edit":"Edit","Effective interest rate":"Effective interest rate","Efficiency mode (E-Mode)":"Efficiency mode (E-Mode)","Eligible for the merit program.":"Eligible for the merit program.","Email":"Email","Emode":"Emode","Enable E-Mode":"Enable E-Mode","Enable {symbol} as collateral":["Enable ",["symbol"]," as collateral"],"Enabled":"Enabled","Enabling E-Mode":"Enabling E-Mode","Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.":"Enabling E-Mode only allows you to borrow assets belonging to the selected category. Please visit our <0>FAQ guide to learn more about how it works and the applied restrictions.","Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.":"Enabling this asset as collateral increases your borrowing power and Health Factor. However, it can get liquidated if your health factor drops below 1.","English":"English","Enter ETH address":"Enter ETH address","Enter an amount":"Enter an amount","Error connecting. Try refreshing the page.":"Error connecting. Try refreshing the page.","Estimated borrow rate":"Estimated borrow rate","Estimated compounding interest, including discount for Staking {0}AAVE in Safety Module.":["Estimated compounding interest, including discount for Staking ",["0"],"AAVE in Safety Module."],"Exceeds the discount":"Exceeds the discount","Exchange rate":"Exchange rate","Expected amount to repay":"Expected amount to repay","Expires":"Expires","Export data to":"Export data to","FAQ":"FAQ","FAQS":"FAQS","Failed to load proposal voters. Please refresh the page.":"Failed to load proposal voters. Please refresh the page.","Faucet":"Faucet","Faucet {0}":["Faucet ",["0"]],"Feedback":"Feedback","Fetching data...":"Fetching data...","Filter":"Filter","Fixed":"Fixed","Fixed rate":"Fixed rate","Flashloan is disabled for this asset, hence this position cannot be migrated.":"Flashloan is disabled for this asset, hence this position cannot be migrated.","For repayment of a specific type of debt, the user needs to have debt that type":"For repayment of a specific type of debt, the user needs to have debt that type","Fork mode is ON":"Fork mode is ON","Forum discussion":"Forum discussion","French":"French","Funds in the Safety Module":"Funds in the Safety Module","GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"GHO borrowers recieve periodic rewards through the Merit program. This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.":"GHO is a native decentralized, collateral-backed digital asset pegged to USD. It is created by users via borrowing against multiple collateral. When user repays their GHO borrow position, the protocol burns that user's GHO. All the interest payments accrued by minters of GHO would be directly transferred to the AaveDAO treasury.","Get ABP Token":"Get ABP Token","Get ABP v2 Token":"Get ABP v2 Token","Get GHO":"Get GHO","Global settings":"Global settings","Go Back":"Go Back","Go to Balancer Pool":"Go to Balancer Pool","Go to V3 Dashboard":"Go to V3 Dashboard","Governance":"Governance","Greek":"Greek","Health factor":"Health factor","Health factor is lesser than the liquidation threshold":"Health factor is lesser than the liquidation threshold","Health factor is not below the threshold":"Health factor is not below the threshold","Hide":"Hide","Holders of stkAAVE receive a discount on the GHO borrowing rate":"Holders of stkAAVE receive a discount on the GHO borrowing rate","I acknowledge the risks involved.":"I acknowledge the risks involved.","I fully understand the risks of migrating.":"I fully understand the risks of migrating.","I understand how cooldown ({0}) and unstaking ({1}) work":["I understand how cooldown (",["0"],") and unstaking (",["1"],") work"],"If the error continues to happen,<0/> you may report it to this":"If the error continues to happen,<0/> you may report it to this","If the health factor goes below 1, the liquidation of your collateral might be triggered.":"If the health factor goes below 1, the liquidation of your collateral might be triggered.","If you DO NOT unstake within {0} of unstake window, you will need to activate cooldown process again.":["If you DO NOT unstake within ",["0"]," of unstake window, you will need to activate cooldown process again."],"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.":"If your loan to value goes above the liquidation threshold your collateral supplied may be liquidated.","In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets":"In E-Mode some assets are not borrowable. Exit E-Mode to get access to all assets","In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable {0} as collateral before borrowing another asset. Read more in our <0>FAQ":["In Isolation mode, you cannot supply other assets as collateral. A global debt ceiling limits the borrowing power of the isolated asset. To exit isolation mode disable ",["0"]," as collateral before borrowing another asset. Read more in our <0>FAQ"],"Inconsistent flashloan parameters":"Inconsistent flashloan parameters","Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.":"Insufficient collateral to cover new borrow position. Wallet must have borrowing power remaining to perform debt switch.","Interest accrued":"Interest accrued","Interest rate rebalance conditions were not met":"Interest rate rebalance conditions were not met","Interest rate strategy":"Interest rate strategy","Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more":"Interest rate that is determined by Aave Governance. This rate may be changed over time depending on the need for the GHO supply to contract/expand. <0>Learn more","Invalid amount to burn":"Invalid amount to burn","Invalid amount to mint":"Invalid amount to mint","Invalid bridge protocol fee":"Invalid bridge protocol fee","Invalid expiration":"Invalid expiration","Invalid flashloan premium":"Invalid flashloan premium","Invalid return value of the flashloan executor function":"Invalid return value of the flashloan executor function","Invalid signature":"Invalid signature","Isolated":"Isolated","Isolated Debt Ceiling":"Isolated Debt Ceiling","Isolated assets have limited borrowing power and other assets cannot be used as collateral.":"Isolated assets have limited borrowing power and other assets cannot be used as collateral.","Join the community discussion":"Join the community discussion","Language":"Language","Learn more":"Learn more","Learn more about risks involved":"Learn more about risks involved","Learn more in our <0>FAQ guide":"Learn more in our <0>FAQ guide","Learn more.":"Learn more.","Let us know how we can make the app better for you. For user support related inquiries please reach out on":"Let us know how we can make the app better for you. For user support related inquiries please reach out on","Linked addresses":"Linked addresses","Links":"Links","Liqudation":"Liqudation","Liquidated collateral":"Liquidated collateral","Liquidation":"Liquidation","Liquidation <0/> threshold":"Liquidation <0/> threshold","Liquidation Threshold":"Liquidation Threshold","Liquidation at":"Liquidation at","Liquidation penalty":"Liquidation penalty","Liquidation risk":"Liquidation risk","Liquidation risk parameters":"Liquidation risk parameters","Liquidation threshold":"Liquidation threshold","Liquidation value":"Liquidation value","Loading data...":"Loading data...","Ltv validation failed":"Ltv validation failed","MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details":"MAI has been paused due to a community decision. Supply, borrows and repays are impacted. <0>More details","MAX":"MAX","Manage analytics":"Manage analytics","Market":"Market","Markets":"Markets","Max":"Max","Max LTV":"Max LTV","Max slashing":"Max slashing","Max slippage":"Max slippage","Maximum amount available to borrow against this asset is limited because debt ceiling is at {0}%.":["Maximum amount available to borrow against this asset is limited because debt ceiling is at ",["0"],"%."],"Maximum amount available to borrow is <0/> {0} (<1/>).":["Maximum amount available to borrow is <0/> ",["0"]," (<1/>)."],"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.":"Maximum amount available to borrow is limited because protocol borrow cap is nearly reached.","Maximum amount available to supply is <0/> {0} (<1/>).":["Maximum amount available to supply is <0/> ",["0"]," (<1/>)."],"Maximum amount available to supply is limited because protocol supply cap is at {0}%.":["Maximum amount available to supply is limited because protocol supply cap is at ",["0"],"%."],"Maximum amount received":"Maximum amount received","Maximum available to borrow":"Maximum available to borrow","Maximum collateral amount to use":"Maximum collateral amount to use","Maximum loan to value":"Maximum loan to value","Meet GHO":"Meet GHO","Menu":"Menu","Merit Program":"Merit Program","Migrate":"Migrate","Migrate to Aave V3":"Migrate to Aave V3","Migrate to V3":"Migrate to V3","Migrate to stkABPT v2":"Migrate to stkABPT v2","Migrate to v3":"Migrate to v3","Migrate to {0} v3 Market":["Migrate to ",["0"]," v3 Market"],"Migrate your assets":"Migrate your assets","Migrated":"Migrated","Migrating":"Migrating","Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.":"Migrating multiple collaterals and borrowed assets at the same time can be an expensive operation and might fail in certain situations.<0>Therefore it’s not recommended to migrate positions with more than 5 assets (deposited + borrowed) at the same time.","Migration risks":"Migration risks","Minimum GHO borrow amount":"Minimum GHO borrow amount","Minimum USD value received":"Minimum USD value received","Minimum amount of debt to be repaid":"Minimum amount of debt to be repaid","Minimum amount received":"Minimum amount received","Minimum staked Aave amount":"Minimum staked Aave amount","Minimum {0} received":["Minimum ",["0"]," received"],"More":"More","NAY":"NAY","Need help connecting a wallet? <0>Read our FAQ":"Need help connecting a wallet? <0>Read our FAQ","Net APR":"Net APR","Net APY":"Net APY","Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.":"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.","Net worth":"Net worth","Network":"Network","Network not supported for this wallet":"Network not supported for this wallet","New APY":"New APY","No assets selected to migrate.":"No assets selected to migrate.","No results found. You can import a custom token with a contract address":"No results found. You can import a custom token with a contract address","No rewards to claim":"No rewards to claim","No search results{0}":["No search results",["0"]],"No transactions yet.":"No transactions yet.","No voting power":"No voting power","None":"None","Not a valid address":"Not a valid address","Not enough balance on your wallet":"Not enough balance on your wallet","Not enough collateral to repay this amount of debt with":"Not enough collateral to repay this amount of debt with","Not enough staked balance":"Not enough staked balance","Not enough voting power to participate in this proposal":"Not enough voting power to participate in this proposal","Not reached":"Not reached","Nothing borrowed yet":"Nothing borrowed yet","Nothing found":"Nothing found","Nothing staked":"Nothing staked","Nothing supplied yet":"Nothing supplied yet","Ok, Close":"Ok, Close","Operation not supported":"Operation not supported","Oracle price":"Oracle price","Overview":"Overview","Page not found":"Page not found","Participating in this {symbol} reserve gives annualized rewards.":["Participating in this ",["symbol"]," reserve gives annualized rewards."],"Pending...":"Pending...","Per the community, the Fantom market has been frozen.":"Per the community, the Fantom market has been frozen.","Per the community, the V2 AMM market has been deprecated.":"Per the community, the V2 AMM market has been deprecated.","Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.":"Please always be aware of your <0>Health Factor (HF) when partially migrating a position and that your rates will be updated to V3 rates.","Please connect a wallet to view your personal information here.":"Please connect a wallet to view your personal information here.","Please connect your wallet to be able to switch your tokens.":"Please connect your wallet to be able to switch your tokens.","Please connect your wallet to get free testnet assets.":"Please connect your wallet to get free testnet assets.","Please connect your wallet to see migration tool.":"Please connect your wallet to see migration tool.","Please connect your wallet to see your supplies, borrowings, and open positions.":"Please connect your wallet to see your supplies, borrowings, and open positions.","Please connect your wallet to view transaction history.":"Please connect your wallet to view transaction history.","Please enter a valid wallet address.":"Please enter a valid wallet address.","Please switch to {networkName}.":["Please switch to ",["networkName"],"."],"Please, connect your wallet":"Please, connect your wallet","Pool addresses provider is not registered":"Pool addresses provider is not registered","Powered by":"Powered by","Preview tx and migrate":"Preview tx and migrate","Price":"Price","Price data is not currently available for this reserve on the protocol subgraph":"Price data is not currently available for this reserve on the protocol subgraph","Price impact":"Price impact","Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.":"Price impact is the spread between the total value of the entry tokens switched and the destination tokens obtained (in USD), which results from the limited liquidity of the trading pair.","Price impact {0}%":["Price impact ",["0"],"%"],"Privacy":"Privacy","Proposal details":"Proposal details","Proposal overview":"Proposal overview","Proposals":"Proposals","Proposition":"Proposition","Protocol borrow cap at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap at 100% for this asset. Further borrowing unavailable.","Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.":"Protocol borrow cap is at 100% for this asset. Further borrowing unavailable.","Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Further borrowing against this asset is unavailable.","Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.":"Protocol debt ceiling is at 100% for this asset. Futher borrowing against this asset is unavailable.","Protocol supply cap at 100% for this asset. Further supply unavailable.":"Protocol supply cap at 100% for this asset. Further supply unavailable.","Protocol supply cap is at 100% for this asset. Further supply unavailable.":"Protocol supply cap is at 100% for this asset. Further supply unavailable.","Quorum":"Quorum","Rate change":"Rate change","Raw-Ipfs":"Raw-Ipfs","Reached":"Reached","Reactivate cooldown period to unstake {0} {stakedToken}":["Reactivate cooldown period to unstake ",["0"]," ",["stakedToken"]],"Read more here.":"Read more here.","Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.":"Read-only mode allows to see address positions in Aave, but you won't be able to perform transactions.","Read-only mode.":"Read-only mode.","Read-only mode. Connect to a wallet to perform transactions.":"Read-only mode. Connect to a wallet to perform transactions.","Receive (est.)":"Receive (est.)","Received":"Received","Recipient address":"Recipient address","Rejected connection request":"Rejected connection request","Reload":"Reload","Reload the page":"Reload the page","Remaining debt":"Remaining debt","Remaining supply":"Remaining supply","Remind me":"Remind me","Remove":"Remove","Repaid":"Repaid","Repay":"Repay","Repay with":"Repay with","Repay {symbol}":["Repay ",["symbol"]],"Repaying {symbol}":["Repaying ",["symbol"]],"Repayment amount to reach {0}% utilization":["Repayment amount to reach ",["0"],"% utilization"],"Representative smart contract wallet (ie. Safe) addresses on other chains.":"Representative smart contract wallet (ie. Safe) addresses on other chains.","Representing smart contract wallet (ie. Safe) addresses on other chains.":"Representing smart contract wallet (ie. Safe) addresses on other chains.","Reserve Size":"Reserve Size","Reserve factor":"Reserve factor","Reserve factor is a percentage of interest which goes to a {0} that is controlled by Aave governance to promote ecosystem growth.":["Reserve factor is a percentage of interest which goes to a ",["0"]," that is controlled by Aave governance to promote ecosystem growth."],"Reserve status & configuration":"Reserve status & configuration","Reset":"Reset","Restake":"Restake","Restake {symbol}":["Restake ",["symbol"]],"Restaked":"Restaked","Restaking {symbol}":["Restaking ",["symbol"]],"Review approval tx details":"Review approval tx details","Review tx":"Review tx","Review tx details":"Review tx details","Revoke power":"Revoke power","Reward(s) to claim":"Reward(s) to claim","Rewards APR":"Rewards APR","Risk details":"Risk details","SEE CHARTS":"SEE CHARTS","Safety of your deposited collateral against the borrowed assets and its underlying value.":"Safety of your deposited collateral against the borrowed assets and its underlying value.","Save and share":"Save and share","Seems like we can't switch the network automatically. Please check if you can change it from the wallet.":"Seems like we can't switch the network automatically. Please check if you can change it from the wallet.","Select":"Select","Select APY type to switch":"Select APY type to switch","Select an asset":"Select an asset","Select language":"Select language","Select slippage tolerance":"Select slippage tolerance","Selected assets have successfully migrated. Visit the Market Dashboard to see them.":"Selected assets have successfully migrated. Visit the Market Dashboard to see them.","Selected borrow assets":"Selected borrow assets","Selected supply assets":"Selected supply assets","Send Feedback":"Send Feedback","Send feedback":"Send feedback","Set up delegation":"Set up delegation","Share on Lens":"Share on Lens","Share on twitter":"Share on twitter","Show":"Show","Show Frozen or paused assets":"Show Frozen or paused assets","Show assets with 0 balance":"Show assets with 0 balance","Sign to continue":"Sign to continue","Signatures ready":"Signatures ready","Signing":"Signing","Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard":"Since this asset is frozen, the only available actions are withdraw and repay which can be accessed from the <0>Dashboard","Since this is a test network, you can get any of the assets if you have ETH on your wallet":"Since this is a test network, you can get any of the assets if you have ETH on your wallet","Slippage":"Slippage","Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.":"Slippage is the difference between the quoted and received amounts from changing market conditions between the moment the transaction is submitted and its verification.","Some migrated assets will not be used as collateral due to enabled isolation mode in {marketName} V3 Market. Visit <0>{marketName} V3 Dashboard to manage isolation mode.":["Some migrated assets will not be used as collateral due to enabled isolation mode in ",["marketName"]," V3 Market. Visit <0>",["marketName"]," V3 Dashboard to manage isolation mode."],"Something went wrong":"Something went wrong","Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.":"Sorry, an unexpected error happened. In the meantime you may try reloading the page, or come back later.","Sorry, we couldn't find the page you were looking for.":"Sorry, we couldn't find the page you were looking for.","Spanish":"Spanish","Stable":"Stable","Stable Interest Type is disabled for this currency":"Stable Interest Type is disabled for this currency","Stable borrowing is enabled":"Stable borrowing is enabled","Stable borrowing is not enabled":"Stable borrowing is not enabled","Stable debt supply is not zero":"Stable debt supply is not zero","Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.":"Stable interest rate will <0>stay the same for the duration of your loan. Recommended for long-term loan periods and for users who prefer predictability.","Stablecoin":"Stablecoin","Stake":"Stake","Stake AAVE":"Stake AAVE","Stake ABPT":"Stake ABPT","Stake GHO":"Stake GHO","Stake cooldown activated":"Stake cooldown activated","Staked":"Staked","Staking":"Staking","Staking APR":"Staking APR","Staking Rewards":"Staking Rewards","Staking balance":"Staking balance","Staking discount":"Staking discount","State":"State","Submission did not work, please try again later or contact wecare@avara.xyz":"Submission did not work, please try again later or contact wecare@avara.xyz","Supplied":"Supplied","Supplied asset amount":"Supplied asset amount","Supplied assets":"Supplied assets","Supply":"Supply","Supply APY":"Supply APY","Supply apy":"Supply apy","Supply balance":"Supply balance","Supply balance after switch":"Supply balance after switch","Supply cap is exceeded":"Supply cap is exceeded","Supply cap on target reserve reached. Try lowering the amount.":"Supply cap on target reserve reached. Try lowering the amount.","Supply {symbol}":["Supply ",["symbol"]],"Supplying your":"Supplying your","Supplying {symbol}":["Supplying ",["symbol"]],"Switch":"Switch","Switch APY type":"Switch APY type","Switch E-Mode":"Switch E-Mode","Switch E-Mode category":"Switch E-Mode category","Switch Network":"Switch Network","Switch borrow position":"Switch borrow position","Switch rate":"Switch rate","Switch to":"Switch to","Switched":"Switched","Switching":"Switching","Switching E-Mode":"Switching E-Mode","Switching rate":"Switching rate","Techpaper":"Techpaper","Terms":"Terms","Test Assets":"Test Assets","Testnet mode":"Testnet mode","Testnet mode is ON":"Testnet mode is ON","Thank you for submitting feedback!":"Thank you for submitting feedback!","Thank you for voting!!":"Thank you for voting!!","The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.":"The % of your total borrowing power used. This is based on the amount of your collateral supplied and the total amount that you can borrow.","The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.":"The Aave Balancer Pool Token (ABPT) is a liquidity pool token. You can receive ABPT by depositing a combination of AAVE + wstETH in the Balancer liquidity pool. You can then stake your BPT in the Safety Module to secure the protocol and earn Safety Incentives.","The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.":"The Aave Protocol is programmed to always use the price of 1 GHO = $1. This is different from using market pricing via oracles for other crypto assets. This creates stabilizing arbitrage opportunities when the price of GHO fluctuates.","The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.":"The Maximum LTV ratio represents the maximum borrowing power of a specific collateral. For example, if a collateral has an LTV of 75%, the user can borrow up to 0.75 worth of ETH in the principal currency for every 1 ETH worth of collateral.","The Stable Rate is not enabled for this currency":"The Stable Rate is not enabled for this currency","The address of the pool addresses provider is invalid":"The address of the pool addresses provider is invalid","The app is running in fork mode.":"The app is running in fork mode.","The app is running in testnet mode. Learn how it works in":"The app is running in testnet mode. Learn how it works in","The caller of the function is not an AToken":"The caller of the function is not an AToken","The caller of this function must be a pool":"The caller of this function must be a pool","The collateral balance is 0":"The collateral balance is 0","The collateral chosen cannot be liquidated":"The collateral chosen cannot be liquidated","The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more":"The cooldown period is the time required prior to unstaking your tokens (20 days). You can only withdraw your assets from the Security Module after the cooldown period and within the unstake window.<0>Learn more","The cooldown period is {0}. After {1} of cooldown, you will enter unstake window of {2}. You will continue receiving rewards during cooldown and unstake window.":["The cooldown period is ",["0"],". After ",["1"]," of cooldown, you will enter unstake window of ",["2"],". You will continue receiving rewards during cooldown and unstake window."],"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.":"The current incentives period, decided on by the Aave community, has ended. Governance is in the process on renewing, check for updates. <0>Learn more.","The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.":"The loan to value of the migrated positions would cause liquidation. Increase migrated collateral or reduce migrated borrow to continue.","The requested amount is greater than the max loan size in stable rate mode":"The requested amount is greater than the max loan size in stable rate mode","The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.":"The total amount of your assets denominated in USD that can be used as collateral for borrowing assets.","The underlying asset cannot be rescued":"The underlying asset cannot be rescued","The underlying balance needs to be greater than 0":"The underlying balance needs to be greater than 0","The weighted average of APY for all borrowed assets, including incentives.":"The weighted average of APY for all borrowed assets, including incentives.","The weighted average of APY for all supplied assets, including incentives.":"The weighted average of APY for all supplied assets, including incentives.","There are not enough funds in the{0}reserve to borrow":["There are not enough funds in the",["0"],"reserve to borrow"],"There is not enough collateral to cover a new borrow":"There is not enough collateral to cover a new borrow","There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.":"There is not enough liquidity for the target asset to perform the switch. Try lowering the amount.","There was some error. Please try changing the parameters or <0><1>copy the error":"There was some error. Please try changing the parameters or <0><1>copy the error","These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.":"These assets are temporarily frozen or paused by Aave community decisions, meaning that further supply / borrow, or rate swap of these assets are unavailable. Withdrawals and debt repayments are allowed. Follow the <0>Aave governance forum for further updates.","These funds have been borrowed and are not available for withdrawal at this time.":"These funds have been borrowed and are not available for withdrawal at this time.","This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.":"This action will reduce V2 health factor below liquidation threshold. retain collateral or migrate borrow position to continue.","This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.":"This action will reduce health factor of V3 below liquidation threshold. Increase migrated collateral or reduce migrated borrow to continue.","This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.":"This action will reduce your health factor. Please be mindful of the increased risk of collateral liquidation.","This address is blocked on app.aave.com because it is associated with one or more":"This address is blocked on app.aave.com because it is associated with one or more","This asset has almost reached its borrow cap. There is only {messageValue} available to be borrowed from this market.":["This asset has almost reached its borrow cap. There is only ",["messageValue"]," available to be borrowed from this market."],"This asset has almost reached its supply cap. There can only be {messageValue} supplied to this market.":["This asset has almost reached its supply cap. There can only be ",["messageValue"]," supplied to this market."],"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.":"This asset has been paused due to a community decision. Supply, withdraw, borrows and repays are impacted.","This asset has reached its borrow cap. Nothing is available to be borrowed from this market.":"This asset has reached its borrow cap. Nothing is available to be borrowed from this market.","This asset has reached its supply cap. Nothing is available to be supplied from this market.":"This asset has reached its supply cap. Nothing is available to be supplied from this market.","This asset is frozen due to an Aave Protocol Governance decision. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. <0>More details","This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details":"This asset is frozen due to an Aave Protocol Governance decision. On the 20th of December 2022, renFIL will no longer be supported and cannot be bridged back to its native network. It is recommended to withdraw supply positions and repay borrow positions so that renFIL can be bridged back to FIL before the deadline. After this date, it will no longer be possible to convert renFIL to FIL. <0>More details","This asset is frozen due to an Aave community decision. <0>More details":"This asset is frozen due to an Aave community decision. <0>More details","This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details":"This asset is planned to be offboarded due to an Aave Protocol Governance decision. <0>More details","This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.":"This gas calculation is only an estimation. Your wallet will set the price of the transaction. You can modify the gas settings directly from your wallet provider.","This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.":"This is a program initiated and implemented by the decentralised Aave community. Aave Labs does not guarantee the program and accepts no liability.","This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.":"This is the total amount available for you to borrow. You can borrow based on your collateral and until the borrow cap is reached.","This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.":"This is the total amount that you are able to supply to in this reserve. You are able to supply your wallet balance up until the supply cap is reached.","This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.":"This represents the threshold at which a borrow position will be considered undercollateralized and subject to liquidation for each collateral. For example, if a collateral has a liquidation threshold of 80%, it means that the position will be liquidated when the debt value is worth 80% of the collateral value.","Time left to unstake":"Time left to unstake","Time remaining until the 48 hour withdraw period starts.":"Time remaining until the 48 hour withdraw period starts.","Time remaining until the withdraw period ends.":"Time remaining until the withdraw period ends.","Tip: Try increasing slippage or reduce input amount":"Tip: Try increasing slippage or reduce input amount","To borrow you need to supply any asset to be used as collateral.":"To borrow you need to supply any asset to be used as collateral.","To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more":"To continue, you need to grant Aave smart contracts permission to move your funds from your wallet. Depending on the asset and wallet you use, it is done by signing the permission message (gas free), or by submitting an approval transaction (requires gas). <0>Learn more","To enable E-mode for the {0} category, all borrow positions outside of this category must be closed.":["To enable E-mode for the ",["0"]," category, all borrow positions outside of this category must be closed."],"To repay on behalf of a user an explicit amount to repay is needed":"To repay on behalf of a user an explicit amount to repay is needed","To request access for this permissioned market, please visit: <0>Acces Provider Name":"To request access for this permissioned market, please visit: <0>Acces Provider Name","To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.":"To submit a proposal for minor changes to the protocol, you'll need at least 80.00K power. If you want to change the core code base, you'll need 320k power.<0>Learn more.","Top 10 addresses":"Top 10 addresses","Total available":"Total available","Total borrowed":"Total borrowed","Total borrows":"Total borrows","Total emission per day":"Total emission per day","Total interest accrued":"Total interest accrued","Total market size":"Total market size","Total supplied":"Total supplied","Total worth":"Total worth","Track wallet":"Track wallet","Track wallet balance in read-only mode":"Track wallet balance in read-only mode","Transaction failed":"Transaction failed","Transaction history":"Transaction history","Transaction history is not currently available for this market":"Transaction history is not currently available for this market","Transaction overview":"Transaction overview","Transactions":"Transactions","Unavailable":"Unavailable","Unbacked":"Unbacked","Unbacked mint cap is exceeded":"Unbacked mint cap is exceeded","Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated.":["Underlying asset does not exist in ",["marketName"]," v3 Market, hence this position cannot be migrated."],"Underlying token":"Underlying token","Unstake":"Unstake","Unstake now":"Unstake now","Unstake window":"Unstake window","Unstake {symbol}":["Unstake ",["symbol"]],"Unstaked":"Unstaked","Unstaking {symbol}":["Unstaking ",["symbol"]],"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.":"Update: Disruptions reported for WETH, WBTC, WMATIC, and USDT. AIP 230 will resolve the disruptions and the market will be operating as normal on ~26th May 13h00 UTC.","Use it to vote for or against active proposals.":"Use it to vote for or against active proposals.","Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.":"Use your AAVE, stkAAVE, or aAave balance to delegate your voting and proposition powers. You will not be sending any tokens, only the rights to vote and propose changes to the protocol. You can re-delegate or revoke power to self at any time.","Used as collateral":"Used as collateral","User cannot withdraw more than the available balance":"User cannot withdraw more than the available balance","User did not borrow the specified currency":"User did not borrow the specified currency","User does not have outstanding stable rate debt on this reserve":"User does not have outstanding stable rate debt on this reserve","User does not have outstanding variable rate debt on this reserve":"User does not have outstanding variable rate debt on this reserve","User is in isolation mode or LTV is zero":"User is in isolation mode or LTV is zero","User is trying to borrow multiple assets including a siloed one":"User is trying to borrow multiple assets including a siloed one","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate.","Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.":"Users who stake AAVE in Safety Module (i.e. stkAAVE holders) receive a discount on GHO borrow interest rate. The discount applies to 100 GHO for every 1 stkAAVE held. Use the calculator below to see GHO borrow rate with the discount applied.","Utilization Rate":"Utilization Rate","VIEW TX":"VIEW TX","VOTE NAY":"VOTE NAY","VOTE YAE":"VOTE YAE","Variable":"Variable","Variable debt supply is not zero":"Variable debt supply is not zero","Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.":"Variable interest rate will <0>fluctuate based on the market conditions. Recommended for short-term positions.","Variable rate":"Variable rate","Version 2":"Version 2","Version 3":"Version 3","View":"View","View Transactions":"View Transactions","View all votes":"View all votes","View contract":"View contract","View details":"View details","View on Explorer":"View on Explorer","Vote NAY":"Vote NAY","Vote YAE":"Vote YAE","Voted NAY":"Voted NAY","Voted YAE":"Voted YAE","Votes":"Votes","Voting":"Voting","Voting is on":"Voting is on","Voting power":"Voting power","Voting results":"Voting results","Wallet Balance":"Wallet Balance","Wallet balance":"Wallet balance","Wallet not detected. Connect or install wallet and retry":"Wallet not detected. Connect or install wallet and retry","Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.":"Wallets are provided by External Providers and by selecting you agree to Terms of those Providers. Your access to the wallet might be reliant on the External Provider being operational.","We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.":"We couldn't find any assets related to your search. Try again with a different asset name, symbol, or address.","We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.":"We couldn't find any transactions related to your search. Try again with a different asset name, or reset filters.","We couldn’t detect a wallet. Connect a wallet to stake and view your balance.":"We couldn’t detect a wallet. Connect a wallet to stake and view your balance.","We suggest you go back to the Dashboard.":"We suggest you go back to the Dashboard.","Website":"Website","When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.":"When a liquidation occurs, liquidators repay up to 50% of the outstanding borrowed amount on behalf of the borrower. In return, they can buy the collateral at a discount and keep the difference (liquidation penalty) as a bonus.","With a voting power of <0/>":"With a voting power of <0/>","With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more":"With testnet Faucet you can get free assets to test the Aave Protocol. Make sure to switch your wallet provider to the appropriate testnet network, select desired asset, and click ‘Faucet’ to get tokens transferred to your wallet. The assets on a testnet are not “real,” meaning they have no monetary value. <0>Learn more","Withdraw":"Withdraw","Withdraw & Switch":"Withdraw & Switch","Withdraw and Switch":"Withdraw and Switch","Withdraw {symbol}":["Withdraw ",["symbol"]],"Withdrawing":"Withdrawing","Withdrawing and Switching":"Withdrawing and Switching","Withdrawing this amount will reduce your health factor and increase risk of liquidation.":"Withdrawing this amount will reduce your health factor and increase risk of liquidation.","Withdrawing {symbol}":["Withdrawing ",["symbol"]],"Wrong Network":"Wrong Network","YAE":"YAE","You are entering Isolation mode":"You are entering Isolation mode","You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.":"You can borrow this asset with a stable rate only if you borrow more than the amount you are supplying as collateral.","You can not change Interest Type to stable as your borrowings are higher than your collateral":"You can not change Interest Type to stable as your borrowings are higher than your collateral","You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.":"You can not disable E-Mode as your current collateralization level is above 80%, disabling E-Mode can cause liquidation. To exit E-Mode supply or repay borrowed positions.","You can not switch usage as collateral mode for this currency, because it will cause collateral call":"You can not switch usage as collateral mode for this currency, because it will cause collateral call","You can not use this currency as collateral":"You can not use this currency as collateral","You can not withdraw this amount because it will cause collateral call":"You can not withdraw this amount because it will cause collateral call","You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.":"You can only switch to tokens with variable APY types. After this transaction, you may change the variable rate to a stable one if available.","You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.":"You can only withdraw your assets from the Security Module after the cooldown period ends and the unstake window is active.","You can report incident to our <0>Discord or<1>Github.":"You can report incident to our <0>Discord or<1>Github.","You cancelled the transaction.":"You cancelled the transaction.","You did not participate in this proposal":"You did not participate in this proposal","You do not have supplies in this currency":"You do not have supplies in this currency","You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.":"You don’t have enough funds in your wallet to repay the full amount. If you proceed to repay with your current amount of funds, you will still have a small borrowing position in your dashboard.","You have no AAVE/stkAAVE/aAave balance to delegate.":"You have no AAVE/stkAAVE/aAave balance to delegate.","You have not borrow yet using this currency":"You have not borrow yet using this currency","You may borrow up to <0/> GHO at <1/> (max discount)":"You may borrow up to <0/> GHO at <1/> (max discount)","You may enter a custom amount in the field.":"You may enter a custom amount in the field.","You switched to {0} rate":["You switched to ",["0"]," rate"],"You unstake here":"You unstake here","You voted {0}":["You voted ",["0"]],"You will exit isolation mode and other tokens can now be used as collateral":"You will exit isolation mode and other tokens can now be used as collateral","You {action} <0/> {symbol}":["You ",["action"]," <0/> ",["symbol"]],"You've successfully switched borrow position.":"You've successfully switched borrow position.","You've successfully switched tokens.":"You've successfully switched tokens.","You've successfully withdrew & switched tokens.":"You've successfully withdrew & switched tokens.","Your balance is lower than the selected amount.":"Your balance is lower than the selected amount.","Your borrows":"Your borrows","Your current loan to value based on your collateral supplied.":"Your current loan to value based on your collateral supplied.","Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.":"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can supply more collateral or repay borrow positions.","Your info":"Your info","Your proposition power is based on your AAVE/stkAAVE balance and received delegations.":"Your proposition power is based on your AAVE/stkAAVE balance and received delegations.","Your reward balance is 0":"Your reward balance is 0","Your supplies":"Your supplies","Your voting info":"Your voting info","Your voting power is based on your AAVE/stkAAVE balance and received delegations.":"Your voting power is based on your AAVE/stkAAVE balance and received delegations.","Your {name} wallet is empty. Purchase or transfer assets or use <0>{0} to transfer your {network} assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets or use <0>",["0"]," to transfer your ",["network"]," assets."],"Your {name} wallet is empty. Purchase or transfer assets.":["Your ",["name"]," wallet is empty. Purchase or transfer assets."],"Your {networkName} wallet is empty. Get free test assets at":["Your ",["networkName"]," wallet is empty. Get free test assets at"],"Your {networkName} wallet is empty. Get free test {0} at":["Your ",["networkName"]," wallet is empty. Get free test ",["0"]," at"],"Zero address not valid":"Zero address not valid","assets":"assets","blocked activities":"blocked activities","copy the error":"copy the error","disabled":"disabled","documentation":"documentation","enabled":"enabled","ends":"ends","for":"for","of":"of","on":"on","please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.":"please check that the amount you want to supply is not currently being used for staking. If it is being used for staking, your transaction might fail.","repaid":"repaid","stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.":"stETH supplied as collateral will continue to accrue staking rewards provided by daily rebases.","stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: {0}":["stETH tokens will be migrated to Wrapped stETH using Lido Protocol wrapper which leads to supply balance change after migration: ",["0"]],"staking view":"staking view","starts":"starts","stkAAVE holders get a discount on GHO borrow rate":"stkAAVE holders get a discount on GHO borrow rate","to":"to","tokens is not the same as staking them. If you wish to stake your":"tokens is not the same as staking them. If you wish to stake your","tokens, please go to the":"tokens, please go to the","withdrew":"withdrew","{0}":[["0"]],"{0} Balance":[["0"]," Balance"],"{0} Faucet":[["0"]," Faucet"],"{0} on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational.":[["0"]," on-ramp service is provided by External Provider and by selecting you agree to Terms of the Provider. Your access to the service might be reliant on the External Provider being operational."],"{0}{name}":[["0"],["name"]],"{currentMethod}":[["currentMethod"]],"{d}d":[["d"],"d"],"{h}h":[["h"],"h"],"{m}m":[["m"],"m"],"{networkName} Faucet":[["networkName"]," Faucet"],"{notifyText}":[["notifyText"]],"{numSelected}/{numAvailable} assets selected":[["numSelected"],"/",["numAvailable"]," assets selected"],"{stepName}":[["stepName"]],"{s}s":[["s"],"s"],"{title}":[["title"]],"{tooltipText}":[["tooltipText"]]}}; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index ce591ed4c0..66f39916e1 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -2312,10 +2312,6 @@ msgstr "Supply" msgid "Supply APY" msgstr "Supply APY" -#: src/modules/dashboard/lists/ListAPYDetails.tsx -msgid "Supply APY:" -msgstr "Supply APY:" - #: src/components/transactions/Swap/SwapModalDetails.tsx msgid "Supply apy" msgstr "Supply apy" @@ -2767,10 +2763,6 @@ msgstr "Unbacked" msgid "Unbacked mint cap is exceeded" msgstr "Unbacked mint cap is exceeded" -#: src/modules/dashboard/lists/ListAPYDetails.tsx -msgid "Underlying APY:" -msgstr "Underlying APY:" - #: src/components/infoTooltips/MigrationDisabledTooltip.tsx msgid "Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated." msgstr "Underlying asset does not exist in {marketName} v3 Market, hence this position cannot be migrated." @@ -3358,6 +3350,7 @@ msgstr "withdrew" #: src/layouts/TopBarNotify.tsx #: src/layouts/TopBarNotify.tsx #: src/modules/dashboard/DashboardEModeButton.tsx +#: src/modules/dashboard/lists/ListAPYDetails.tsx #: src/modules/reserve-overview/ReserveTopDetailsWrapper.tsx #: src/modules/staking/GhoDiscountProgram.tsx msgid "{0}" diff --git a/src/modules/dashboard/lists/ListAPYDetails.tsx b/src/modules/dashboard/lists/ListAPYDetails.tsx index d906f55b54..8dd676199b 100644 --- a/src/modules/dashboard/lists/ListAPYDetails.tsx +++ b/src/modules/dashboard/lists/ListAPYDetails.tsx @@ -8,6 +8,22 @@ interface ListAPYDetailsProps { underlyingAPY: number; } +const APYBox = ({ symbol, value }: { symbol: string; value: number }) => { + return ( + + {symbol + ':'} + + + ); +}; + export const ListAPYDetails = ({ supplyAPY, underlyingAPY }: ListAPYDetailsProps) => { return ( @@ -18,28 +34,8 @@ export const ListAPYDetails = ({ supplyAPY, underlyingAPY }: ListAPYDetailsProps gap: '4px', }} > - - {'Supply APY:'} - - - - {'Underlying APY:'} - {' '} - + + ); diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx index f7d91c8a53..010a1ee9af 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx @@ -71,7 +71,6 @@ export const SuppliedPositionsList = () => { .filter((userReserve) => userReserve.underlyingBalance !== '0') .map((userReserve) => ({ ...userReserve, - // nativeApy: userReserve.reserve., // Note: added only for table sort supplyAPY: userReserve.reserve.supplyAPY, // Note: added only for table sort reserve: { ...userReserve.reserve, @@ -84,9 +83,6 @@ export const SuppliedPositionsList = () => { }, })) || []; - console.log(user); - console.log('suppliedPositions', suppliedPositions); - // Transform to the DashboardReserve schema so the sort utils can work with it const preSortedReserves = suppliedPositions as DashboardReserve[]; const sortedReserves = handleSortDashboardReserves( diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx index bf3e294242..0dfacf4f73 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx @@ -45,8 +45,6 @@ export const SuppliedPositionsListItem = ({ const disableWithdraw = !isActive || isPaused; const disableSupply = !isActive || isFrozen || isPaused; - console.log('x---reserve', reserve); - return ( Date: Fri, 21 Jun 2024 10:08:19 +0200 Subject: [PATCH 06/33] feat: add underlying apr to borrow section --- .../BorrowedPositionsListItem.tsx | 21 +++++++++++++++++-- .../dashboard/lists/ListAPYDetails.tsx | 8 ++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx index e61fe5e8b5..0650ef6f9c 100644 --- a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx +++ b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx @@ -13,6 +13,7 @@ import { isFeatureEnabled } from 'src/utils/marketsAndNetworksConfig'; import { ListColumn } from '../../../../components/lists/ListColumn'; import { ListAPRColumn } from '../ListAPRColumn'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListButtonsColumn } from '../ListButtonsColumn'; import { ListItemAPYButton } from '../ListItemAPYButton'; import { ListItemWrapper } from '../ListItemWrapper'; @@ -113,6 +114,7 @@ const BorrowedPositionsListItemDesktop = ({ totalBorrowsUSD, borrowAPY, incentives, + underlyingAPY, onDetbSwitchClick, onOpenBorrow, onOpenRepay, @@ -137,7 +139,16 @@ const BorrowedPositionsListItemDesktop = ({ > - + + ) : null + } + incentives={incentives} + symbol={reserve.symbol} + /> APY} align="flex-start" captionVariant="description" mb={2}> + ) : null + } incentives={incentives} symbol={symbol} variant="secondary14" diff --git a/src/modules/dashboard/lists/ListAPYDetails.tsx b/src/modules/dashboard/lists/ListAPYDetails.tsx index 8dd676199b..efea35ae8e 100644 --- a/src/modules/dashboard/lists/ListAPYDetails.tsx +++ b/src/modules/dashboard/lists/ListAPYDetails.tsx @@ -4,8 +4,9 @@ import { IncentivesCard } from 'src/components/incentives/IncentivesCard'; import { TextWithTooltip } from 'src/components/TextWithTooltip'; interface ListAPYDetailsProps { - supplyAPY: number; underlyingAPY: number; + supplyAPY?: number; + borrowAPY?: number; } const APYBox = ({ symbol, value }: { symbol: string; value: number }) => { @@ -24,7 +25,7 @@ const APYBox = ({ symbol, value }: { symbol: string; value: number }) => { ); }; -export const ListAPYDetails = ({ supplyAPY, underlyingAPY }: ListAPYDetailsProps) => { +export const ListAPYDetails = ({ underlyingAPY, supplyAPY, borrowAPY }: ListAPYDetailsProps) => { return ( - + {supplyAPY && } + {borrowAPY && } From d23dd151bb98ccac8599d43dffc4d974aa153cc6 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Fri, 21 Jun 2024 10:50:00 +0200 Subject: [PATCH 07/33] refactor: use symbol instead of token address for mapping underlying apys --- src/hooks/pool/useExtendedUserSummaryAndIncentives.ts | 3 +-- src/services/UnderlyingYieldService.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts index 35aaa775db..00124e9141 100644 --- a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts +++ b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts @@ -1,5 +1,4 @@ import { FormatUserSummaryAndIncentivesResponse } from '@aave/math-utils'; -import { getAddress } from 'ethers/lib/utils'; import { UserReservesDataHumanized } from 'src/services/UIPoolService'; import { reserveSortFn } from 'src/store/poolSelectors'; import { MarketDataType } from 'src/ui-config/marketsConfig'; @@ -36,7 +35,7 @@ const formatExtendedUserAndIncentives = ( .map((elem) => { return { ...elem, - underlyingAPY: userYield.underlyingAPYs[getAddress(elem.reserve.underlyingAsset)], + underlyingAPY: userYield.underlyingAPYs[elem.reserve.symbol], }; }), earnedAPY: userYield.earnedAPY, diff --git a/src/services/UnderlyingYieldService.ts b/src/services/UnderlyingYieldService.ts index 7352dd8fde..6f387226c2 100644 --- a/src/services/UnderlyingYieldService.ts +++ b/src/services/UnderlyingYieldService.ts @@ -1,4 +1,3 @@ -import { AaveV3Ethereum } from '@bgd-labs/aave-address-book'; import { Provider } from '@ethersproject/providers'; import { BigNumber, Contract } from 'ethers'; import { formatUnits } from 'ethers/lib/utils'; @@ -15,7 +14,7 @@ export class UnderlyingYieldService { async getUnderlyingAPYs(): Promise { const stethAPY = await this.getStethAPY(); return { - [AaveV3Ethereum.ASSETS.wstETH.UNDERLYING]: stethAPY, + wstETH: stethAPY, }; } From cefcd393d6d6740a1501d1e7c574db1212bb5ee6 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Fri, 21 Jun 2024 15:03:54 +0200 Subject: [PATCH 08/33] feat: refactor get underlying yields + implement assets lists --- .../app-data-provider/useAppDataProvider.tsx | 1 + .../useExtendedUserSummaryAndIncentives.ts | 11 ++----- src/hooks/pool/usePoolFormattedReserves.ts | 19 ++++++++--- src/hooks/pool/useUserYield.ts | 32 ++++--------------- .../BorrowAssetsList/BorrowAssetsList.tsx | 14 ++++++++ .../BorrowAssetsList/BorrowAssetsListItem.tsx | 15 ++++++++- .../BorrowAssetsListMobileItem.tsx | 14 +++++++- .../BorrowedPositionsList.tsx | 4 +++ .../BorrowedPositionsListItem.tsx | 19 +++++++---- .../SuppliedPositionsList.tsx | 4 +++ .../SuppliedPositionsListItem.tsx | 15 ++++++--- .../SuppliedPositionsListMobileItem.tsx | 4 +-- .../SupplyAssetsList/SupplyAssetsListItem.tsx | 23 +++++++++++-- .../SupplyAssetsListMobileItem.tsx | 9 +++++- 14 files changed, 127 insertions(+), 57 deletions(-) diff --git a/src/hooks/app-data-provider/useAppDataProvider.tsx b/src/hooks/app-data-provider/useAppDataProvider.tsx index 8623776be7..6d6cc86a0b 100644 --- a/src/hooks/app-data-provider/useAppDataProvider.tsx +++ b/src/hooks/app-data-provider/useAppDataProvider.tsx @@ -80,6 +80,7 @@ export const AppDataProvider: React.FC = ({ children }) => { // pool hooks const { data: reservesData, isLoading: reservesDataLoading } = usePoolReservesHumanized(currentMarketData); + const { data: formattedPoolReserves, isLoading: formattedPoolReservesLoading } = usePoolFormattedReserves(currentMarketData); const baseCurrencyData = reservesData?.baseCurrencyData; diff --git a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts index 00124e9141..6dbfefbbcb 100644 --- a/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts +++ b/src/hooks/pool/useExtendedUserSummaryAndIncentives.ts @@ -30,14 +30,9 @@ const formatExtendedUserAndIncentives = ( ...userSummariesAndIncentives, userEmodeCategoryId: userReserves.userEmodeCategoryId, isInEmode: userReserves.userEmodeCategoryId !== 0, - userReservesData: userSummariesAndIncentives.userReservesData - .sort((a, b) => reserveSortFn(a.reserve, b.reserve)) - .map((elem) => { - return { - ...elem, - underlyingAPY: userYield.underlyingAPYs[elem.reserve.symbol], - }; - }), + userReservesData: userSummariesAndIncentives.userReservesData.sort((a, b) => + reserveSortFn(a.reserve, b.reserve) + ), earnedAPY: userYield.earnedAPY, debtAPY: userYield.debtAPY, netAPY: userYield.netAPY, diff --git a/src/hooks/pool/usePoolFormattedReserves.ts b/src/hooks/pool/usePoolFormattedReserves.ts index fc4511556d..e6ae6bf424 100644 --- a/src/hooks/pool/usePoolFormattedReserves.ts +++ b/src/hooks/pool/usePoolFormattedReserves.ts @@ -6,6 +6,7 @@ import { import { formatReservesAndIncentives } from '@aave/math-utils'; import dayjs from 'dayjs'; import memoize from 'micro-memoize'; +import { UnderlyingAPYs } from 'src/services/UnderlyingYieldService'; import { reserveSortFn } from 'src/store/poolSelectors'; import { MarketDataType } from 'src/ui-config/marketsConfig'; import { fetchIconSymbolAndName, IconMapInterface } from 'src/ui-config/reservePatches'; @@ -14,6 +15,7 @@ import { getNetworkConfig, NetworkConfig } from 'src/utils/marketsAndNetworksCon import { selectBaseCurrencyData, selectReserves } from './selectors'; import { usePoolsReservesHumanized } from './usePoolReserves'; import { usePoolsReservesIncentivesHumanized } from './usePoolReservesIncentives'; +import { useUnderlyingYields } from './useUnderlyingYield'; import { combineQueries, SimplifiedUseQueryResult } from './utils'; export type FormattedReservesAndIncentives = ReturnType< @@ -23,14 +25,15 @@ export type FormattedReservesAndIncentives = ReturnType< isEmodeEnabled: boolean; isWrappedBaseAsset: boolean; } & ReserveDataHumanized & { - underlyingAPY?: number; + underlyingAPY: number | null; }; const formatReserves = memoize( ( reservesData: ReservesDataHumanized, incentivesData: ReservesIncentiveDataHumanized[], - networkConfig: NetworkConfig + networkConfig: NetworkConfig, + underlyingAPYs: UnderlyingAPYs ) => { const reserves = selectReserves(reservesData); const baseCurrencyData = selectBaseCurrencyData(reservesData); @@ -47,6 +50,7 @@ const formatReserves = memoize( isEmodeEnabled: r.eModeCategoryId !== 0, isWrappedBaseAsset: r.symbol.toLowerCase() === networkConfig.wrappedBaseAssetSymbol?.toLowerCase(), + underlyingAPY: underlyingAPYs ? underlyingAPYs[r.symbol] : null, })) .sort(reserveSortFn); } @@ -57,6 +61,7 @@ export const usePoolsFormattedReserves = ( ): SimplifiedUseQueryResult[] => { const poolsReservesQueries = usePoolsReservesHumanized(marketsData); const poolsReservesIncentivesQueries = usePoolsReservesIncentivesHumanized(marketsData); + const underlyingAPYs = useUnderlyingYields(); return poolsReservesQueries.map((poolReservesQuery, index) => { const marketData = marketsData[index]; @@ -64,11 +69,15 @@ export const usePoolsFormattedReserves = ( const networkConfig = getNetworkConfig(marketData.chainId); const selector = ( reservesData: ReservesDataHumanized, - incentivesData: ReservesIncentiveDataHumanized[] + incentivesData: ReservesIncentiveDataHumanized[], + underlyingAPYs: UnderlyingAPYs ) => { - return formatReserves(reservesData, incentivesData, networkConfig); + return formatReserves(reservesData, incentivesData, networkConfig, underlyingAPYs); }; - return combineQueries([poolReservesQuery, poolReservesIncentivesQuery] as const, selector); + return combineQueries( + [poolReservesQuery, poolReservesIncentivesQuery, underlyingAPYs] as const, + selector + ); }); }; diff --git a/src/hooks/pool/useUserYield.ts b/src/hooks/pool/useUserYield.ts index 57039b9fbf..14b9a5cb51 100644 --- a/src/hooks/pool/useUserYield.ts +++ b/src/hooks/pool/useUserYield.ts @@ -4,9 +4,7 @@ import { FormatUserSummaryAndIncentivesResponse, } from '@aave/math-utils'; import BigNumber from 'bignumber.js'; -import { getAddress } from 'ethers/lib/utils'; import memoize from 'micro-memoize'; -import { UnderlyingAPYs } from 'src/services/UnderlyingYieldService'; import { MarketDataType } from 'src/ui-config/marketsConfig'; import { displayGho, weightedAverageAPY } from 'src/utils/ghoUtilities'; @@ -15,7 +13,6 @@ import { FormattedReservesAndIncentives, usePoolsFormattedReserves, } from './usePoolFormattedReserves'; -import { useUnderlyingYields } from './useUnderlyingYield'; import { useUserGhoPoolsFormattedReserve } from './useUserGhoPoolFormattedReserve'; import { useUserSummariesAndIncentives } from './useUserSummaryAndIncentives'; import { combineQueries, SimplifiedUseQueryResult } from './utils'; @@ -24,7 +21,6 @@ export interface UserYield { earnedAPY: number; debtAPY: number; netAPY: number; - underlyingAPYs: UnderlyingAPYs; } const formatUserYield = memoize( @@ -33,7 +29,6 @@ const formatUserYield = memoize( formattedGhoReserveData: FormattedGhoReserveData | undefined, formattedGhoUserData: FormattedGhoUserData | undefined, user: FormatUserSummaryAndIncentivesResponse, - underlyingAPYs: UnderlyingAPYs, currentMarket: string ): UserYield => { const proportions = user.userReservesData.reduce( @@ -48,11 +43,9 @@ const formatUserYield = memoize( new BigNumber(reserve.supplyAPY).multipliedBy(value.underlyingBalanceUSD) ); - const underlyingAPY = underlyingAPYs[getAddress(reserve.underlyingAsset)]; - - if (underlyingAPY) { + if (reserve.underlyingAPY) { acc.positiveProportion = acc.positiveProportion.plus( - new BigNumber(underlyingAPY).multipliedBy(value.underlyingBalanceUSD) + new BigNumber(reserve.underlyingAPY).multipliedBy(value.underlyingBalanceUSD) ); } if (reserve.aIncentivesData) { @@ -139,7 +132,6 @@ const formatUserYield = memoize( earnedAPY, debtAPY, netAPY, - underlyingAPYs, }; } ); @@ -151,7 +143,6 @@ export const useUserYields = ( const ghoPoolsFormattedReserveQuery = useGhoPoolsFormattedReserve(marketsData); const userGhoPoolsFormattedReserveQuery = useUserGhoPoolsFormattedReserve(marketsData); const userSummaryQuery = useUserSummariesAndIncentives(marketsData); - const underlyingAPY = useUnderlyingYields(); return poolsFormattedReservesQuery.map((elem, index) => { const marketData = marketsData[index]; @@ -159,31 +150,21 @@ export const useUserYields = ( formattedPoolReserves: FormattedReservesAndIncentives[], formattedGhoReserveData: FormattedGhoReserveData, formattedGhoUserData: FormattedGhoUserData, - user: FormatUserSummaryAndIncentivesResponse, - underlyingAPY: UnderlyingAPYs + user: FormatUserSummaryAndIncentivesResponse ) => { return formatUserYield( formattedPoolReserves, formattedGhoReserveData, formattedGhoUserData, user, - underlyingAPY, marketData.market ); }; const ghoSelector = ( formattedPoolReserves: FormattedReservesAndIncentives[], - user: FormatUserSummaryAndIncentivesResponse, - underlyingAPY: UnderlyingAPYs + user: FormatUserSummaryAndIncentivesResponse ) => { - return formatUserYield( - formattedPoolReserves, - undefined, - undefined, - user, - underlyingAPY, - marketData.market - ); + return formatUserYield(formattedPoolReserves, undefined, undefined, user, marketData.market); }; if (marketData.addresses.GHO_TOKEN_ADDRESS) return combineQueries( @@ -192,11 +173,10 @@ export const useUserYields = ( ghoPoolsFormattedReserveQuery[index], userGhoPoolsFormattedReserveQuery[index], userSummaryQuery[index], - underlyingAPY, ] as const, selector ); - return combineQueries([elem, userSummaryQuery[index], underlyingAPY] as const, ghoSelector); + return combineQueries([elem, userSummaryQuery[index]] as const, ghoSelector); }); }; diff --git a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx index 78e2211a6a..4a7ea5cf68 100644 --- a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx +++ b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx @@ -153,6 +153,10 @@ export const BorrowAssetsList = () => { return availableBorrowsInUSD !== '0.00' && totalLiquidityUSD !== '0'; }); + console.log('$$user', user); + console.log('$$reserves', reserves); + console.log('$$borrowReserves', borrowReserves); + console.log('$$tokensToBorrow', tokensToBorrow); const { value: ghoReserve, filtered: filteredReserves } = findAndFilterGhoReserve(borrowReserves); const sortedReserves = handleSortDashboardReserves( sortDesc, @@ -160,6 +164,16 @@ export const BorrowAssetsList = () => { 'asset', filteredReserves as unknown as DashboardReserve[] ); + // const sortedReserves = handleSortDashboardReserves( + // sortDesc, + // sortName, + // 'position', + // preSortedReserves + // ); + + // display sortedReserves + console.log('sortedReserves', sortedReserves); + console.log('user', user); const borrowDisabled = !sortedReserves.length && !ghoReserve; const RenderHeader: React.FC = () => { diff --git a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx index b88aeae1c9..e1813d87b0 100644 --- a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx +++ b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx @@ -10,6 +10,7 @@ import { CapsHint } from '../../../../components/caps/CapsHint'; import { CapType } from '../../../../components/caps/helper'; import { Link, ROUTES } from '../../../../components/primitives/Link'; import { ListAPRColumn } from '../ListAPRColumn'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListButtonsColumn } from '../ListButtonsColumn'; import { ListItemWrapper } from '../ListItemWrapper'; import { ListValueColumn } from '../ListValueColumn'; @@ -26,6 +27,7 @@ export const BorrowAssetsListItem = ({ vIncentivesData, underlyingAsset, isFreezed, + underlyingAPY, }: DashboardReserve) => { const { openBorrow } = useModalContext(); const { currentMarket } = useProtocolDataContext(); @@ -34,6 +36,9 @@ export const BorrowAssetsListItem = ({ const trackEvent = useRootStore((store) => store.trackEvent); + // console.log('symbol', symbol); + // console.log('underlyingAPY', underlyingAPY); + return ( + ) : null + } incentives={vIncentivesData} symbol={symbol} /> diff --git a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListMobileItem.tsx b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListMobileItem.tsx index 89357fe2fe..5689e89642 100644 --- a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListMobileItem.tsx +++ b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListMobileItem.tsx @@ -10,6 +10,7 @@ import { IncentivesCard } from '../../../../components/incentives/IncentivesCard import { Link, ROUTES } from '../../../../components/primitives/Link'; import { Row } from '../../../../components/primitives/Row'; import { useModalContext } from '../../../../hooks/useModal'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListMobileItemWrapper } from '../ListMobileItemWrapper'; import { ListValueRow } from '../ListValueRow'; @@ -25,6 +26,7 @@ export const BorrowAssetsListMobileItem = ({ vIncentivesData, underlyingAsset, isFreezed, + underlyingAPY, }: DashboardReserve) => { const { openBorrow } = useModalContext(); const { currentMarket } = useProtocolDataContext(); @@ -66,7 +68,17 @@ export const BorrowAssetsListMobileItem = ({ mb={2} > + ) : null + } incentives={vIncentivesData} symbol={symbol} variant="secondary14" diff --git a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsList.tsx b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsList.tsx index 1163c031ad..ee0ee4bbef 100644 --- a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsList.tsx +++ b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsList.tsx @@ -70,6 +70,8 @@ export const BorrowedPositionsList = () => { const showEModeButton = currentMarketData.v3 && Object.keys(eModes).length > 1; const [tooltipOpen, setTooltipOpen] = useState(false); + console.log('^^^ user', user); + let borrowPositions = user?.userReservesData.reduce((acc, userReserve) => { if (userReserve.variableBorrows !== '0') { @@ -105,6 +107,8 @@ export const BorrowedPositionsList = () => { return acc; }, [] as (ComputedUserReserveData & { borrowRateMode: InterestRate })[]) || []; + console.log('^^^ borrowPositions', borrowPositions); + // Move GHO to top of borrowed positions list const ghoReserve = borrowPositions.filter((pos) => pos.reserve.symbol === GHO_SYMBOL); if (ghoReserve.length > 0) { diff --git a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx index 0650ef6f9c..d0d691c573 100644 --- a/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx +++ b/src/modules/dashboard/lists/BorrowedPositionsList/BorrowedPositionsListItem.tsx @@ -42,6 +42,8 @@ export const BorrowedPositionsListItem = ({ item }: { item: DashboardReserve }) const showSwitchButton = isFeatureEnabled.debtSwitch(currentMarketData) || false; const disableSwitch = reserve.isPaused || !reserve.isActive || reserve.symbol == 'stETH'; + console.log('item', item); + const props: BorrowedPositionsListItemProps = { ...item, disableBorrow, @@ -124,6 +126,10 @@ const BorrowedPositionsListItemDesktop = ({ const { isActive, isFrozen, isPaused, stableBorrowRateEnabled, name } = reserve; + console.log('reserve', reserve); + console.log('borrowAPY', borrowAPY); + console.log('underlyingAPY', underlyingAPY); + return ( + reserve.underlyingAPY ? ( + ) : null } incentives={incentives} @@ -197,7 +203,6 @@ const BorrowedPositionsListItemMobile = ({ borrowAPY, incentives, disableRepay, - underlyingAPY, onDetbSwitchClick, onOpenBorrow, onOpenRepay, @@ -238,10 +243,10 @@ const BorrowedPositionsListItemMobile = ({ APY} align="flex-start" captionVariant="description" mb={2}> + reserve.underlyingAPY ? ( + ) : null } incentives={incentives} diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx index 010a1ee9af..2de2c3b467 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsList.tsx @@ -83,6 +83,8 @@ export const SuppliedPositionsList = () => { }, })) || []; + console.log('---suppliedPositions', suppliedPositions); + // Transform to the DashboardReserve schema so the sort utils can work with it const preSortedReserves = suppliedPositions as DashboardReserve[]; const sortedReserves = handleSortDashboardReserves( @@ -92,6 +94,8 @@ export const SuppliedPositionsList = () => { preSortedReserves ); + console.log('---sortedReserves', sortedReserves); + const RenderHeader: React.FC = () => { return ( diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx index 0dfacf4f73..1110919fcb 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx @@ -23,7 +23,6 @@ export const SuppliedPositionsListItem = ({ underlyingBalanceUSD, usageAsCollateralEnabledOnUser, underlyingAsset, - underlyingAPY, }: DashboardReserve) => { const { user } = useAppDataContext(); const { isIsolated, aIncentivesData, isFrozen, isActive, isPaused } = reserve; @@ -33,6 +32,9 @@ export const SuppliedPositionsListItem = ({ const isSwapButton = isFeatureEnabled.liquiditySwap(currentMarketData); const trackEvent = useRootStore((store) => store.trackEvent); + // console.log('XX underlyingAPY', underlyingAPY); + // console.log('XX supplyAPY', supplyAPY); + const canBeEnabledAsCollateral = user ? !debtCeiling.isMaxed && reserve.reserveLiquidationThreshold !== '0' && @@ -69,11 +71,16 @@ export const SuppliedPositionsListItem = ({ + reserve.underlyingAPY ? ( + ) : null } incentives={aIncentivesData} diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx index 319e56d067..b23938dbcc 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListMobileItem.tsx @@ -20,7 +20,6 @@ export const SuppliedPositionsListMobileItem = ({ underlyingBalanceUSD, usageAsCollateralEnabledOnUser, underlyingAsset, - underlyingAPY, }: DashboardReserve) => { const { user } = useAppDataContext(); const { currentMarketData, currentMarket } = useProtocolDataContext(); @@ -37,6 +36,7 @@ export const SuppliedPositionsListMobileItem = ({ isFrozen, isActive, isPaused, + underlyingAPY, } = reserve; const canBeEnabledAsCollateral = user @@ -79,7 +79,7 @@ export const SuppliedPositionsListMobileItem = ({ value={underlyingAPY ? Number(supplyAPY) + underlyingAPY : Number(supplyAPY)} tooltip={ underlyingAPY ? ( - + ) : null } incentives={aIncentivesData} diff --git a/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListItem.tsx b/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListItem.tsx index 02141fdfaa..1e236835c3 100644 --- a/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListItem.tsx +++ b/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListItem.tsx @@ -35,6 +35,7 @@ import { CapType } from '../../../../components/caps/helper'; import { ListColumn } from '../../../../components/lists/ListColumn'; import { Link, ROUTES } from '../../../../components/primitives/Link'; import { ListAPRColumn } from '../ListAPRColumn'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListButtonsColumn } from '../ListButtonsColumn'; import { ListItemCanBeCollateral } from '../ListItemCanBeCollateral'; import { ListItemWrapper } from '../ListItemWrapper'; @@ -103,6 +104,7 @@ export const SupplyAssetsListItemDesktop = ({ disableSupply, canSupplyAsWrappedToken, walletBalancesMap, + underlyingAPY, }: SupplyAssetsListItemProps) => { const currentMarketData = useRootStore((store) => store.currentMarketData); const currentMarket = useRootStore((store) => store.currentMarket); @@ -211,7 +213,16 @@ export const SupplyAssetsListItemDesktop = ({ /> )} - + + ) : null + } + incentives={aIncentivesData} + symbol={symbol} + /> {debtCeiling.isMaxed ? ( @@ -311,6 +322,7 @@ export const SupplyAssetsListItemMobile = ({ disableSupply, canSupplyAsWrappedToken, walletBalancesMap, + underlyingAPY, }: SupplyAssetsListItemProps) => { const { currentMarket } = useProtocolDataContext(); const { openSupply } = useModalContext(); @@ -324,6 +336,8 @@ export const SupplyAssetsListItemMobile = ({ (r) => r.tokenOut.underlyingAsset === underlyingAsset ); + console.log('===> underlyingAPY', underlyingAPY); + return ( + ) : null + } incentives={aIncentivesData} symbol={symbol} variant="secondary14" diff --git a/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListMobileItem.tsx b/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListMobileItem.tsx index 3350393079..74e203dbea 100644 --- a/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListMobileItem.tsx +++ b/src/modules/dashboard/lists/SupplyAssetsList/SupplyAssetsListMobileItem.tsx @@ -10,6 +10,7 @@ import { IncentivesCard } from '../../../../components/incentives/IncentivesCard import { Link, ROUTES } from '../../../../components/primitives/Link'; import { Row } from '../../../../components/primitives/Row'; import { useModalContext } from '../../../../hooks/useModal'; +import { ListAPYDetails } from '../ListAPYDetails'; import { ListItemCanBeCollateral } from '../ListItemCanBeCollateral'; import { ListMobileItemWrapper } from '../ListMobileItemWrapper'; import { ListValueRow } from '../ListValueRow'; @@ -31,6 +32,7 @@ export const SupplyAssetsListMobileItem = ({ underlyingAsset, detailsAddress, isPaused, + underlyingAPY, }: DashboardReserve) => { const { currentMarket } = useProtocolDataContext(); const { openSupply } = useModalContext(); @@ -73,7 +75,12 @@ export const SupplyAssetsListMobileItem = ({ mb={2} > + ) : null + } incentives={aIncentivesData} symbol={symbol} variant="secondary14" From 2ebae4f6ffc7d911f980afe513a285c120e5ae25 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Fri, 21 Jun 2024 15:08:44 +0200 Subject: [PATCH 09/33] refactor: remove logs and comments --- .../lists/BorrowAssetsList/BorrowAssetsList.tsx | 13 ------------- .../lists/BorrowAssetsList/BorrowAssetsListItem.tsx | 9 --------- .../BorrowedPositionsList/BorrowedPositionsList.tsx | 4 ---- .../BorrowedPositionsListItem.tsx | 7 ------- .../SuppliedPositionsList/SuppliedPositionsList.tsx | 4 ---- .../SuppliedPositionsListItem.tsx | 3 --- .../lists/SupplyAssetsList/SupplyAssetsListItem.tsx | 2 -- 7 files changed, 42 deletions(-) diff --git a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx index 4a7ea5cf68..4a5f65c704 100644 --- a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx +++ b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsList.tsx @@ -153,10 +153,6 @@ export const BorrowAssetsList = () => { return availableBorrowsInUSD !== '0.00' && totalLiquidityUSD !== '0'; }); - console.log('$$user', user); - console.log('$$reserves', reserves); - console.log('$$borrowReserves', borrowReserves); - console.log('$$tokensToBorrow', tokensToBorrow); const { value: ghoReserve, filtered: filteredReserves } = findAndFilterGhoReserve(borrowReserves); const sortedReserves = handleSortDashboardReserves( sortDesc, @@ -164,16 +160,7 @@ export const BorrowAssetsList = () => { 'asset', filteredReserves as unknown as DashboardReserve[] ); - // const sortedReserves = handleSortDashboardReserves( - // sortDesc, - // sortName, - // 'position', - // preSortedReserves - // ); - // display sortedReserves - console.log('sortedReserves', sortedReserves); - console.log('user', user); const borrowDisabled = !sortedReserves.length && !ghoReserve; const RenderHeader: React.FC = () => { diff --git a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx index e1813d87b0..71f118725c 100644 --- a/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx +++ b/src/modules/dashboard/lists/BorrowAssetsList/BorrowAssetsListItem.tsx @@ -36,9 +36,6 @@ export const BorrowAssetsListItem = ({ const trackEvent = useRootStore((store) => store.trackEvent); - // console.log('symbol', symbol); - // console.log('underlyingAPY', underlyingAPY); - return ( - {/* */}