fix: replaced apollo vault APR api with true APR api (#511)
This commit is contained in:
parent
5bbb59d5dc
commit
f20ae553d9
@ -4,7 +4,7 @@ NEXT_PUBLIC_RPC=https://rpc.devnet.osmosis.zone/
|
|||||||
NEXT_PUBLIC_GQL=https://devnet-osmosis-gql.marsprotocol.io/graphql
|
NEXT_PUBLIC_GQL=https://devnet-osmosis-gql.marsprotocol.io/graphql
|
||||||
NEXT_PUBLIC_REST=https://lcd.devnet.osmosis.zone/
|
NEXT_PUBLIC_REST=https://lcd.devnet.osmosis.zone/
|
||||||
NEXT_PUBLIC_SWAP=https://testnet.osmosis.zone
|
NEXT_PUBLIC_SWAP=https://testnet.osmosis.zone
|
||||||
NEXT_PUBLIC_APOLLO_APR=https://api.apollo.farm/api/vault_infos/v2/osmosis-1
|
NEXT_PUBLIC_VAULT_APR=https://api.marsprotocol.io/v1/vaults/osmosis
|
||||||
NEXT_PUBLIC_ACCOUNT_NFT=osmo1pdr8mvj2ky9hzj5pjp026apfmd0pacd3xrzx3mzazy7lulnsdrkq96gzk3
|
NEXT_PUBLIC_ACCOUNT_NFT=osmo1pdr8mvj2ky9hzj5pjp026apfmd0pacd3xrzx3mzazy7lulnsdrkq96gzk3
|
||||||
NEXT_PUBLIC_ORACLE=osmo156elt2tp5455q9a6vfrvnpncxyd33cxm9z2lgguwg6dgws9tedps5tq3rc
|
NEXT_PUBLIC_ORACLE=osmo156elt2tp5455q9a6vfrvnpncxyd33cxm9z2lgguwg6dgws9tedps5tq3rc
|
||||||
NEXT_PUBLIC_RED_BANK=osmo1vxpdcw092n9rngvekve8g324c2yjx56496ck98ag4sdxr4p4zd4q0wr7x6
|
NEXT_PUBLIC_RED_BANK=osmo1vxpdcw092n9rngvekve8g324c2yjx56496ck98ag4sdxr4p4zd4q0wr7x6
|
||||||
@ -30,7 +30,7 @@ CHARTING_LIBRARY_USERNAME=mars-git-demo
|
|||||||
# NEXT_PUBLIC_GQL=https://testnet-osmosis-node.marsprotocol.io/XF32UOOU55CX/osmosis-hive-front/graphql
|
# NEXT_PUBLIC_GQL=https://testnet-osmosis-node.marsprotocol.io/XF32UOOU55CX/osmosis-hive-front/graphql
|
||||||
# NEXT_PUBLIC_REST=https://testnet-osmosis-node.marsprotocol.io/XF32UOOU55CX/osmosis-lcd-front/
|
# NEXT_PUBLIC_REST=https://testnet-osmosis-node.marsprotocol.io/XF32UOOU55CX/osmosis-lcd-front/
|
||||||
# NEXT_PUBLIC_SWAP=https://testnet.osmosis.zone
|
# NEXT_PUBLIC_SWAP=https://testnet.osmosis.zone
|
||||||
# NEXT_PUBLIC_APOLLO_APR=https://api.apollo.farm/api/vault_infos/v2/osmo-test-5
|
# NEXT_PUBLIC_VAULT_APR=https://testnet-api.marsprotocol.io/v1/vaults/osmosis
|
||||||
# NEXT_PUBLIC_ACCOUNT_NFT=osmo1hdk6nps2l2tdfgly0tegcgwl239l45etuae7nsc6s93u0yrqk4rqv489kl
|
# NEXT_PUBLIC_ACCOUNT_NFT=osmo1hdk6nps2l2tdfgly0tegcgwl239l45etuae7nsc6s93u0yrqk4rqv489kl
|
||||||
# NEXT_PUBLIC_ORACLE=osmo1dxu93scjdnx42txdp9d4hm3snffvnzmkp4jpc9sml8xlu3ncgamsl2lx58
|
# NEXT_PUBLIC_ORACLE=osmo1dxu93scjdnx42txdp9d4hm3snffvnzmkp4jpc9sml8xlu3ncgamsl2lx58
|
||||||
# NEXT_PUBLIC_RED_BANK=osmo1hs4sm0fah9rk4mz8e56v4n76g0q9fffdkkjm3f8tjagkdx78pqcq75pk0a
|
# NEXT_PUBLIC_RED_BANK=osmo1hs4sm0fah9rk4mz8e56v4n76g0q9fffdkkjm3f8tjagkdx78pqcq75pk0a
|
||||||
@ -55,7 +55,7 @@ CHARTING_LIBRARY_USERNAME=mars-git-demo
|
|||||||
# NEXT_PUBLIC_GQL=https://osmosis-node.marsprotocol.io/GGSFGSFGFG34/osmosis-hive-front/graphql
|
# NEXT_PUBLIC_GQL=https://osmosis-node.marsprotocol.io/GGSFGSFGFG34/osmosis-hive-front/graphql
|
||||||
# NEXT_PUBLIC_REST=https://osmosis-node.marsprotocol.io/GGSFGSFGFG34/osmosis-lcd-front/
|
# NEXT_PUBLIC_REST=https://osmosis-node.marsprotocol.io/GGSFGSFGFG34/osmosis-lcd-front/
|
||||||
# NEXT_PUBLIC_SWAP=https://app.osmosis.zone
|
# NEXT_PUBLIC_SWAP=https://app.osmosis.zone
|
||||||
# NEXT_PUBLIC_APOLLO_APR=https://api.apollo.farm/api/vault_infos/v2/osmosis-1
|
# NEXT_PUBLIC_VAULT_APR=https://api.marsprotocol.io/v1/vaults/osmosis
|
||||||
# NEXT_PUBLIC_ACCOUNT_NFT=osmo1450hrg6dv2l58c0rvdwx8ec2a0r6dd50hn4frk370tpvqjhy8khqw7sw09
|
# NEXT_PUBLIC_ACCOUNT_NFT=osmo1450hrg6dv2l58c0rvdwx8ec2a0r6dd50hn4frk370tpvqjhy8khqw7sw09
|
||||||
# NEXT_PUBLIC_ORACLE=osmo1mhznfr60vjdp2gejhyv2gax9nvyyzhd3z0qcwseyetkfustjauzqycsy2g
|
# NEXT_PUBLIC_ORACLE=osmo1mhznfr60vjdp2gejhyv2gax9nvyyzhd3z0qcwseyetkfustjauzqycsy2g
|
||||||
# NEXT_PUBLIC_RED_BANK=osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg
|
# NEXT_PUBLIC_RED_BANK=osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg
|
||||||
|
@ -2,28 +2,15 @@ import { ENV } from 'constants/env'
|
|||||||
|
|
||||||
export default async function getAprs() {
|
export default async function getAprs() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(ENV.URL_APOLLO_APR)
|
const response = await fetch(ENV.URL_VAULT_APR)
|
||||||
|
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
const data: FlatApr[] | NestedApr[] = await response.json()
|
const data: AprResponse = await response.json()
|
||||||
|
|
||||||
const newAprs = data.map((aprData) => {
|
const newAprs = data.vaults.map((aprData) => {
|
||||||
try {
|
const finalApr = aprData.apr.projected_apr * 100
|
||||||
const apr = aprData as FlatApr
|
|
||||||
const aprTotal = apr.apr.reduce((prev, curr) => Number(curr.value) + prev, 0)
|
|
||||||
const feeTotal = apr.fees.reduce((prev, curr) => Number(curr.value) + prev, 0)
|
|
||||||
|
|
||||||
const finalApr = aprTotal + feeTotal
|
return { address: aprData.address, apr: finalApr }
|
||||||
|
|
||||||
return { address: aprData.contract_address, apr: finalApr }
|
|
||||||
} catch {
|
|
||||||
const apr = aprData as NestedApr
|
|
||||||
const aprTotal = apr.apr.aprs.reduce((prev, curr) => Number(curr.value) + prev, 0)
|
|
||||||
const feeTotal = apr.apr.fees.reduce((prev, curr) => Number(curr.value) + prev, 0)
|
|
||||||
|
|
||||||
const finalApr = aprTotal + feeTotal
|
|
||||||
return { address: aprData.contract_address, apr: finalApr }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return newAprs
|
return newAprs
|
||||||
@ -34,17 +21,3 @@ export default async function getAprs() {
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface FlatApr {
|
|
||||||
contract_address: string
|
|
||||||
apr: { type: string; value: number | string }[]
|
|
||||||
fees: { type: string; value: number | string }[]
|
|
||||||
}
|
|
||||||
|
|
||||||
interface NestedApr {
|
|
||||||
contract_address: string
|
|
||||||
apr: {
|
|
||||||
aprs: { type: string; value: number | string }[]
|
|
||||||
fees: { type: string; value: number | string }[]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -123,7 +123,7 @@ export const VaultTable = (props: Props) => {
|
|||||||
if (vault.apy === null) return <Loading />
|
if (vault.apy === null) return <Loading />
|
||||||
return (
|
return (
|
||||||
<FormattedNumber
|
<FormattedNumber
|
||||||
amount={(vault.apy ?? 0) * 100}
|
amount={vault.apy ?? 0}
|
||||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: '%' }}
|
options={{ minDecimals: 2, maxDecimals: 2, suffix: '%' }}
|
||||||
className='text-xs'
|
className='text-xs'
|
||||||
animate
|
animate
|
||||||
|
@ -31,30 +31,22 @@ export default function VaultModalContentHeader({ vault }: Props) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='flex gap-6 px-6 py-4 border-b border-white/5 gradient-header'>
|
<div className='flex gap-6 px-6 py-4 border-b border-white/5 gradient-header'>
|
||||||
{vault.apy && (
|
<TitleAndSubCell
|
||||||
<>
|
title={
|
||||||
<TitleAndSubCell
|
<div className='flex flex-row'>
|
||||||
title={
|
<FormattedNumber amount={vault?.apy ?? 0} options={{ suffix: '%' }} animate />
|
||||||
<div className='flex flex-row'>
|
<FormattedNumber
|
||||||
<FormattedNumber
|
className='ml-2 text-xs'
|
||||||
amount={vault.apy}
|
amount={vault?.apy ?? 0 / 365}
|
||||||
options={{ suffix: '%', decimals: -2 }}
|
options={{ suffix: '%/day' }}
|
||||||
animate
|
parentheses
|
||||||
/>
|
animate
|
||||||
<FormattedNumber
|
/>
|
||||||
className='ml-2 text-xs'
|
</div>
|
||||||
amount={vault.apy / 365}
|
}
|
||||||
options={{ suffix: '%/day', decimals: -2 }}
|
sub={'Deposit APY'}
|
||||||
parentheses
|
/>
|
||||||
animate
|
<div className='h-100 w-[1px] bg-white/10'></div>
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
sub={'Deposit APY'}
|
|
||||||
/>
|
|
||||||
<div className='h-100 w-[1px] bg-white/10'></div>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{!depositedValue.isZero() && (
|
{!depositedValue.isZero() && (
|
||||||
<>
|
<>
|
||||||
<TitleAndSubCell
|
<TitleAndSubCell
|
||||||
|
@ -14,7 +14,7 @@ interface EnvironmentVariables {
|
|||||||
URL_REST: string
|
URL_REST: string
|
||||||
URL_RPC: string
|
URL_RPC: string
|
||||||
URL_API: string
|
URL_API: string
|
||||||
URL_APOLLO_APR: string
|
URL_VAULT_APR: string
|
||||||
WALLETS: string[]
|
WALLETS: string[]
|
||||||
PYTH_ENDPOINT: string
|
PYTH_ENDPOINT: string
|
||||||
MAINNET_REST_API: string
|
MAINNET_REST_API: string
|
||||||
@ -39,7 +39,7 @@ export const ENV: EnvironmentVariables = {
|
|||||||
URL_API: process.env.NEXT_PUBLIC_VERCEL_URL
|
URL_API: process.env.NEXT_PUBLIC_VERCEL_URL
|
||||||
? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/api`
|
? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/api`
|
||||||
: process.env.NEXT_PUBLIC_API || '',
|
: process.env.NEXT_PUBLIC_API || '',
|
||||||
URL_APOLLO_APR: process.env.NEXT_PUBLIC_APOLLO_APR || '',
|
URL_VAULT_APR: process.env.NEXT_PUBLIC_VAULT_APR || '',
|
||||||
WALLETS: process.env.NEXT_PUBLIC_WALLETS?.split(',') || [],
|
WALLETS: process.env.NEXT_PUBLIC_WALLETS?.split(',') || [],
|
||||||
PYTH_ENDPOINT: process.env.NEXT_PUBLIC_PYTH_ENDPOINT || '',
|
PYTH_ENDPOINT: process.env.NEXT_PUBLIC_PYTH_ENDPOINT || '',
|
||||||
MAINNET_REST_API: process.env.NEXT_PUBLIC_MAINNET_REST || '',
|
MAINNET_REST_API: process.env.NEXT_PUBLIC_MAINNET_REST || '',
|
||||||
|
21
src/types/interfaces/vaults.d.ts
vendored
21
src/types/interfaces/vaults.d.ts
vendored
@ -89,3 +89,24 @@ interface ProvideLiquidityAction {
|
|||||||
minimum_receive: import('../generated/mars-credit-manager/MarsCreditManager.types').Uint128
|
minimum_receive: import('../generated/mars-credit-manager/MarsCreditManager.types').Uint128
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface AprResponse {
|
||||||
|
vaults: AprVault[]
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AprVault {
|
||||||
|
chain: string
|
||||||
|
address: string
|
||||||
|
apr: AprBreakdown
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AprBreakdown {
|
||||||
|
start_timestamp: number
|
||||||
|
end_timestamp: number
|
||||||
|
period_diff: number
|
||||||
|
start_vault_token_price: number
|
||||||
|
end_vault_token_price: number
|
||||||
|
period_yield: number
|
||||||
|
period_daily_return: number
|
||||||
|
projected_apr: number
|
||||||
|
}
|
||||||
|
@ -30,8 +30,8 @@ if (!process.env.NEXT_PUBLIC_GQL) {
|
|||||||
if (!process.env.NEXT_PUBLIC_REST) {
|
if (!process.env.NEXT_PUBLIC_REST) {
|
||||||
throw 'NEXT_PUBLIC_REST is not defined'
|
throw 'NEXT_PUBLIC_REST is not defined'
|
||||||
}
|
}
|
||||||
if (!process.env.NEXT_PUBLIC_APOLLO_APR) {
|
if (!process.env.NEXT_PUBLIC_VAULT_APR) {
|
||||||
throw 'NEXT_PUBLIC_APOLLO_APR is not defined'
|
throw 'NEXT_PUBLIC_VAULT_APR is not defined'
|
||||||
}
|
}
|
||||||
if (!process.env.NEXT_PUBLIC_PARAMS) {
|
if (!process.env.NEXT_PUBLIC_PARAMS) {
|
||||||
throw 'NEXT_PUBLIC_PARAMS is not defined'
|
throw 'NEXT_PUBLIC_PARAMS is not defined'
|
||||||
|
Loading…
Reference in New Issue
Block a user