Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions components/new/markets/MarketTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ const MarketLine = ({
<TableCell>{token.pair ? null : borrowAPR}</TableCell>
{withVault && (
<TableCell>
{/* {token.pair &&
{token.pair &&
marketDefinition.LOOPING?.VAULTS.includes(maybeToken) && (
<div className="flex justify-left">
<LoopingButton
Expand All @@ -324,7 +324,7 @@ const MarketLine = ({
}}
/>
</div>
)} */}
)}
</TableCell>
)}
</TableRow>
Expand Down
75 changes: 56 additions & 19 deletions components/new/vaults/VaultModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { DialogTitle } from "@radix-ui/react-dialog";
import { Deposit } from "@/components/icons/deposit";
import { Withdraw } from "@/components/icons/withdraw";
import { VaultDefinition } from "@/constants";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";

const DepositVaultForm = ({
vaultDefinition,
Expand Down Expand Up @@ -119,6 +120,51 @@ export const VaultModal = ({
}
}, [isVisible]);

const tokenDisplay = (
<div className="relative w-full flex items-center justify-center mt-6">


{vaultDefinition.receipt.pair && vaultDefinition.receipt.pair?.length > 1 ? (
<div className="flex items-center gap-8">
<DoubleAvatar
firstSrc={vaultDefinition.tokens[0].icon}
secondSrc={vaultDefinition.tokens[1].icon}
firstAlt={vaultDefinition.tokens[0].symbol}
secondAlt={vaultDefinition.tokens[1].symbol}
/>
<div className="flex flex-col">
<span className="text-sm font-semibold">
{vaultDefinition.receipt.name}
</span>
<span className="text-xs font-light">
{vaultDefinition.tokens[0].name} -{" "}
{vaultDefinition.tokens[1].name}
</span>
</div>
</div>
) : (
<div className="flex items-center gap-8">
<Avatar className="p-1.5 bg-background">
<AvatarImage
src={vaultDefinition.tokens[0].icon}
className="object-contain"
/>
<AvatarFallback>{vaultDefinition.tokens[0].symbol}</AvatarFallback>
</Avatar>
<div className="flex flex-col">
<span className="text-sm font-semibold">
{vaultDefinition.receipt.name}
</span>
<span className="text-xs font-light">
{vaultDefinition.tokens[0].name}
</span>
</div>
</div>
)}

</div>
);

return (
<Dialog
open={isVisible}
Expand Down Expand Up @@ -155,25 +201,16 @@ export const VaultModal = ({
<ExternalLinkIcon className="w-4 h-4 text-primary" />
</Link>
</div>
<div className="relative w-full flex items-center justify-center mt-6">
<div className="flex items-center gap-8">
<DoubleAvatar
firstSrc={vaultDefinition.tokens[0].icon}
secondSrc={vaultDefinition.tokens[1].icon}
firstAlt={vaultDefinition.tokens[0].symbol}
secondAlt={vaultDefinition.tokens[1].symbol}
/>
<div className="flex flex-col">
<span className="text-sm font-semibold">
{vaultDefinition.receipt.name}
</span>
<span className="text-xs font-light">
{vaultDefinition.tokens[0].name} -{" "}
{vaultDefinition.tokens[1].name}
</span>
</div>
</div>
</div>



{tokenDisplay}







<div className="absolute inset-0 flex items-center justify-center z-0 pointer-events-none">
<Image
Expand Down
47 changes: 32 additions & 15 deletions components/new/vaults/VaultTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,28 +35,45 @@ const VaultLine = ({
}) => {
const { vault } = useVault(vaultDefinition);

const tokenDisplay = (
<div className="flex flex-row gap-2 items-center">

<Avatar className="bg-transparent p-1.5">
<AvatarImage
src={vaultDefinition.receipt.icon}
className="object-contain"
/>
<AvatarFallback>{vaultDefinition.receipt.symbol}</AvatarFallback>
</Avatar>

{vaultDefinition.receipt.pair && vaultDefinition.receipt.pair?.length > 1 ? (
<DoubleAvatar
firstSrc={vaultDefinition.tokens[0].icon}
secondSrc={vaultDefinition.tokens[1].icon}
firstAlt={vaultDefinition.tokens[0].symbol}
secondAlt={vaultDefinition.tokens[1].symbol}
/>
) : (
<Avatar className="p-1.5 bg-background">
<AvatarImage
src={vaultDefinition.tokens[0].icon}
className="object-contain"
/>
<AvatarFallback>{vaultDefinition.tokens[0].symbol}</AvatarFallback>
</Avatar>
)}

</div>
);

return (
<TableRow
className="text-primary border-t-background cursor-pointer hover:bg-background/50"
onClick={() => onSelectVault(vaultDefinition)}
>
<TableCell>
<div className="flex items-center gap-10">
<div className="flex flex-row gap-2 items-center">
<Avatar className="bg-transparent p-1.5">
<AvatarImage
src={vaultDefinition.receipt.icon}
className="object-contain"
/>
<AvatarFallback>{vaultDefinition.receipt.symbol}</AvatarFallback>
</Avatar>
<DoubleAvatar
firstSrc={vaultDefinition.tokens[0].icon}
secondSrc={vaultDefinition.tokens[1].icon}
firstAlt={vaultDefinition.tokens[0].symbol}
secondAlt={vaultDefinition.tokens[1].symbol}
/>
</div>
{tokenDisplay}

<div className="flex flex-col">
<p className="text-lg ">{vaultDefinition.receipt.name}</p>
Expand Down
84 changes: 81 additions & 3 deletions constants/vaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ export class VaultDefinition {
decimals?: number;
}) {
this.id = id;
if (pair[0].chainId !== pair[1].chainId) {
throw new Error("Tokens must be on the same chain");
}
// if (pair[0].chainId !== pair[1].chainId) {
// throw new Error("Tokens must be on the same chain");
// }
this.chainId = pair[0].chainId;
this.receipt = new Token({
name,
Expand Down Expand Up @@ -688,6 +688,73 @@ export const VAULT_EQUALIZER_WS_WHALE = new VaultDefinition({
"https://equalizer.exchange/liquidity/0x8D2b12D0DC9BB13C62d213EFbEa10fD0bfCe3C88/add",
});

//----------------------
// AAVEV Vaults
//----------------------

export const VAULT_AAVE_STS = new VaultDefinition({
id: "aavev3-sts",
name: "stS",
symbol: "stS",
pair: [stS],
vaultAddress: "0x937C919E62A43E7C4517cFd43F9Ac3208E1d5FaE",
lpAddress: "0xE5DA20F15420aD15DE0fa650600aFc998bbE3955",
icon: "/icons/dex/aave.png",
buyLink:
"https://app.odos.xyz/swap?chainId=146&inputCurrency=0xE5DA20F15420aD15DE0fa650600aFc998bbE3955",
});

export const VAULT_AAVE_WS = new VaultDefinition({
id: "aavev3-ws",
name: "wS",
symbol: "wS",
pair: [wS],
vaultAddress: "0x533E15C5304E00E2748D776DaDab1dD25DeA1A3c",
lpAddress: "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
icon: "/icons/dex/aave.png",
buyLink:
"https://app.odos.xyz/swap?chainId=146&inputCurrency=0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
});

export const VAULT_AAVE_SCUSD = new VaultDefinition({
id: "aavev3-scusd",
name: "scUSD",
symbol: "scUSD",
pair: [scUSD],
vaultAddress: "0x718C479C7133d85D5cc7E75d9757D98B407E23d1",
lpAddress: "0xd3DCe716f3eF535C5Ff8d041c1A41C3bd89b97aE",
icon: "/icons/dex/aave.png",
buyLink:
"https://app.odos.xyz/swap?chainId=146&inputCurrency=0xd3DCe716f3eF535C5Ff8d041c1A41C3bd89b97aE",
decimals: 6,
});

export const VAULT_AAVE_USDT = new VaultDefinition({
id: "aavev3-usdt",
name: "USDT",
symbol: "USDT",
pair: [USDT],
vaultAddress: "0x5a57649A470Fc49dFEb5B2FCc374099eE8c083Cf",
lpAddress: "0x6047828dc181963ba44974801FF68e538dA5eaF9",
icon: "/icons/dex/aave.png",
buyLink:
"https://app.odos.xyz/swap?chainId=146&inputCurrency=0x6047828dc181963ba44974801FF68e538dA5eaF9",
decimals: 6,
});

export const VAULT_AAVE_USDC = new VaultDefinition({
id: "aavev3-usdc",
name: "USDC.e",
symbol: "USDC.e",
pair: [USDCe],
vaultAddress: "0xe36fB00045BA6F5FA7AB63afE784fCB55189c27c",
lpAddress: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
icon: "/icons/dex/aave.png",
buyLink:
"https://app.odos.xyz/swap?chainId=146&inputCurrency=0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
decimals: 6,
});

export const SWAPX_VAULTS: VaultDefinition[] = [
VAULT_SWAPX_WS_TYSG,
VAULT_SWAPX_WS_GOGLZ,
Expand Down Expand Up @@ -746,10 +813,20 @@ export const EQUALIZER_VAULTS: VaultDefinition[] = [
VAULT_EQUALIZER_WS_WHALE,
];

export const AAVE_VAULTS: VaultDefinition[] = [
VAULT_AAVE_STS,
VAULT_AAVE_WS,
VAULT_AAVE_SCUSD,
VAULT_AAVE_USDT,
VAULT_AAVE_USDC,
];


export const ALL_DISPLAYED_VAULTS: VaultDefinition[] = [
...SWAPX_VAULTS,
...BEETS_VAULTS,
...EQUALIZER_VAULTS,
...AAVE_VAULTS,
];

export const DEFAULT_VAULTS_ID = "All Vaults";
Expand All @@ -759,4 +836,5 @@ export const VAULT_GROUPS: Record<string, VaultDefinition[]> = {
SwapX: SWAPX_VAULTS,
Beets: BEETS_VAULTS,
Equalizer: EQUALIZER_VAULTS,
AAVE: AAVE_VAULTS,
};
6 changes: 3 additions & 3 deletions helpers/numberHelpers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export const oldThousandsFormat = (value: number | bigint, digits?: number) => {
"en-US",
digits !== undefined
? {
maximumFractionDigits: digits,
minimumFractionDigits: digits,
}
maximumFractionDigits: digits,
minimumFractionDigits: digits,
}
: {}
).format(value);
};
Expand Down
29 changes: 29 additions & 0 deletions hooks/vaults/useTokenPrices.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { useQuery, useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "@/queries";
import { useCallback } from "react";

const useTokenPrices = () => {
const queryClient = useQueryClient();

const { data: tokenPrices, isLoading: isTokenPricesLoading } = useQuery({
...queryKeys.vaults.tokenPrices(),
staleTime: Infinity,
refetchInterval: 30000,
refetchOnWindowFocus: "always",
});

const invalidateTokenPricesQuery = useCallback(async () => {
await queryClient.invalidateQueries({
queryKey: queryKeys.vaults.tokenPrices().queryKey,
refetchType: "active",
});
}, [queryClient]);

return {
tokenPrices,
isTokenPricesLoading,
invalidateTokenPricesQuery,
};
};

export { useTokenPrices };
13 changes: 12 additions & 1 deletion hooks/vaults/useVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { bnToNumber } from "@/helpers";
import { useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "@/queries";
import { VaultDefinition } from "@/constants";
import { useTokenPrices } from "./useTokenPrices";

const useVaults = (vaultDefinitions: VaultDefinition[]) => {
const queryClient = useQueryClient();
Expand All @@ -28,6 +29,9 @@ const useVaults = (vaultDefinitions: VaultDefinition[]) => {
invalidateVaultsTVLQuery,
} = useVaultsTVL();

const { tokenPrices, isTokenPricesLoading, invalidateTokenPricesQuery } =
useTokenPrices();

const {
vaultsReceiptPrice,
isVaultsReceiptPriceLoading,
Expand All @@ -49,6 +53,7 @@ const useVaults = (vaultDefinitions: VaultDefinition[]) => {
isLpsPriceLoading ||
isVaultsBreakdownLoading ||
isVaultsTVLLoading ||
isTokenPricesLoading ||
isVaultsReceiptPriceLoading ||
isBalancesLoading;

Expand All @@ -65,7 +70,12 @@ const useVaults = (vaultDefinitions: VaultDefinition[]) => {
const vId = vaultDefinition.id;

const userLpBalance = balancesObj[vaultDefinition.lp.address] ?? BigInt(0);
const lpPrice = lpsPrice?.[vId] ?? 0;
console.log(vaultDefinition.lp.address, vaultDefinition.id)
console.log("tokenPrices:", tokenPrices?.tokenPrices);
const lpPrice =
lpsPrice?.[vId] ??
tokenPrices?.tokenPrices[vaultDefinition.lp.address.toLowerCase()] ??
0;
const userReceiptBalance =
balancesObj[vaultDefinition.receipt.address] ?? BigInt(0);
const receiptPrice =
Expand Down Expand Up @@ -126,6 +136,7 @@ const useVaults = (vaultDefinitions: VaultDefinition[]) => {
invalidateVaultData: () => {
invalidateVaultsLPsPriceQuery();
invalidateVaultsBreakdownDataQuery();
invalidateTokenPricesQuery();
invalidateVaultsTVLQuery();
queryClient.invalidateQueries({
queryKey: queryKeys.vaults.vaultReceiptPrices(vaultDefinition.chainId)
Expand Down
Binary file added public/icons/dex/aave.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading