upgrade mango settings lib
This commit is contained in:
parent
37743a5d92
commit
8e304aa560
|
@ -122,9 +122,11 @@ const FundingChart = ({ hideChart }: { hideChart: () => void }) => {
|
|||
return data
|
||||
}, [fundingData])
|
||||
|
||||
const CustomTooltip = (
|
||||
{ active, payload, label }: TooltipProps<number, string>,
|
||||
) => {
|
||||
const CustomTooltip = ({
|
||||
active,
|
||||
payload,
|
||||
label,
|
||||
}: TooltipProps<number, string>) => {
|
||||
if (active && payload && payload.length) {
|
||||
const load = payload[0].payload
|
||||
const data: [string, any][] = Object.entries(load).filter(
|
||||
|
|
|
@ -5,12 +5,15 @@ import mangoStore from '@store/mangoStore'
|
|||
import { useWallet } from '@solana/wallet-adapter-react'
|
||||
import GovernanceStore from '@store/governanceStore'
|
||||
import {
|
||||
PriceImpactResp,
|
||||
PriceImpactRespWithoutSide,
|
||||
formatSuggestedValues,
|
||||
getFormattedBankValues,
|
||||
} from 'utils/governance/listingTools'
|
||||
import { Bank, Group, OracleProvider } from '@blockworks-foundation/mango-v4'
|
||||
import {
|
||||
Bank,
|
||||
Group,
|
||||
OracleProvider,
|
||||
PriceImpact,
|
||||
} from '@blockworks-foundation/mango-v4'
|
||||
import { AccountMeta } from '@solana/web3.js'
|
||||
import { BN } from '@project-serum/anchor'
|
||||
import {
|
||||
|
@ -27,6 +30,9 @@ import {
|
|||
LISTING_PRESETS_KEYS,
|
||||
LISTING_PRESETS_PYTH,
|
||||
ListingPreset,
|
||||
MidPriceImpact,
|
||||
getMidPriceImpacts,
|
||||
getProposedTier,
|
||||
getTierWithAdjustedNetBorrows,
|
||||
} from '@blockworks-foundation/mango-v4-settings/lib/helpers/listingTools'
|
||||
|
||||
|
@ -39,7 +45,7 @@ const DashboardSuggestedValues = ({
|
|||
}: ModalProps & {
|
||||
bank: Bank
|
||||
group: Group
|
||||
priceImpacts: PriceImpactResp[]
|
||||
priceImpacts: PriceImpact[]
|
||||
}) => {
|
||||
const client = mangoStore((s) => s.client)
|
||||
//do not deconstruct wallet is used for anchor to sign
|
||||
|
@ -65,70 +71,34 @@ const DashboardSuggestedValues = ({
|
|||
|
||||
const priceImpactsFiltered = useMemo(
|
||||
() =>
|
||||
priceImpacts
|
||||
.reduce((acc: PriceImpactRespWithoutSide[], val: PriceImpactResp) => {
|
||||
if (val.side === 'ask') {
|
||||
const bidSide = priceImpacts.find(
|
||||
(x) =>
|
||||
x.symbol === val.symbol &&
|
||||
x.target_amount === val.target_amount &&
|
||||
x.side === 'bid',
|
||||
)
|
||||
acc.push({
|
||||
target_amount: val.target_amount,
|
||||
avg_price_impact_percent: bidSide
|
||||
? (bidSide.avg_price_impact_percent +
|
||||
val.avg_price_impact_percent) /
|
||||
2
|
||||
: val.avg_price_impact_percent,
|
||||
symbol: val.symbol,
|
||||
})
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
.filter((x) => x.symbol === getApiTokenName(bank.name)),
|
||||
getMidPriceImpacts(priceImpacts).filter(
|
||||
(x) => x.symbol === getApiTokenName(bank.name),
|
||||
),
|
||||
[priceImpacts, bank.name],
|
||||
)
|
||||
|
||||
const getSuggestedTierForListedTokens = useCallback(async () => {
|
||||
const filteredResp = priceImpactsFiltered
|
||||
.filter((x) => x.avg_price_impact_percent < 1)
|
||||
.reduce(
|
||||
(
|
||||
acc: { [key: string]: PriceImpactRespWithoutSide },
|
||||
val: PriceImpactRespWithoutSide,
|
||||
) => {
|
||||
if (
|
||||
!acc[val.symbol] ||
|
||||
val.target_amount > acc[val.symbol].target_amount
|
||||
) {
|
||||
acc[val.symbol] = val
|
||||
}
|
||||
return acc
|
||||
},
|
||||
{},
|
||||
)
|
||||
const priceImapct = filteredResp[getApiTokenName(bank.name)]
|
||||
const liqudityTier = (Object.values(PRESETS).find(
|
||||
(x) => x.preset_target_amount === priceImapct?.target_amount,
|
||||
)?.preset_key || 'SHIT') as LISTING_PRESETS_KEYS
|
||||
const detieredTierWithoutPyth =
|
||||
liqudityTier === 'ULTRA_PREMIUM' || liqudityTier === 'PREMIUM'
|
||||
? 'MID'
|
||||
: liqudityTier === 'MID'
|
||||
? 'MEME'
|
||||
: liqudityTier
|
||||
const isPythRecommended =
|
||||
liqudityTier === 'MID' ||
|
||||
liqudityTier === 'PREMIUM' ||
|
||||
liqudityTier === 'ULTRA_PREMIUM'
|
||||
const listingTier =
|
||||
isPythRecommended && bank?.oracleProvider !== OracleProvider.Pyth
|
||||
? detieredTierWithoutPyth
|
||||
: liqudityTier
|
||||
.reduce((acc: { [key: string]: MidPriceImpact }, val: MidPriceImpact) => {
|
||||
if (
|
||||
!acc[val.symbol] ||
|
||||
val.target_amount > acc[val.symbol].target_amount
|
||||
) {
|
||||
acc[val.symbol] = val
|
||||
}
|
||||
return acc
|
||||
}, {})
|
||||
const priceImpact = filteredResp[getApiTokenName(bank.name)]
|
||||
|
||||
setSuggstedTier(listingTier as LISTING_PRESETS_KEYS)
|
||||
}, [priceImpactsFiltered])
|
||||
const suggestedTier = getProposedTier(
|
||||
PRESETS,
|
||||
priceImpact?.avg_price_impact_percent,
|
||||
bank.oracleProvider === OracleProvider.Pyth,
|
||||
)
|
||||
|
||||
setSuggstedTier(suggestedTier as LISTING_PRESETS_KEYS)
|
||||
}, [PRESETS, bank.name, bank.oracleProvider, priceImpactsFiltered])
|
||||
|
||||
const proposeNewSuggestedValues = useCallback(
|
||||
async (
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"@blockworks-foundation/mango-feeds": "0.1.7",
|
||||
"@blockworks-foundation/mango-mints-redemption": "^0.0.8",
|
||||
"@blockworks-foundation/mango-v4": "^0.19.33",
|
||||
"@blockworks-foundation/mango-v4-settings": "0.2.13",
|
||||
"@blockworks-foundation/mango-v4-settings": "0.2.15",
|
||||
"@blockworks-foundation/mangolana": "0.0.1-beta.15",
|
||||
"@headlessui/react": "1.6.6",
|
||||
"@heroicons/react": "2.0.18",
|
||||
|
|
|
@ -14,7 +14,7 @@ import BN from 'bn.js'
|
|||
import { useRouter } from 'next/router'
|
||||
import Link from 'next/link'
|
||||
import {
|
||||
PriceImpactResp,
|
||||
PriceImpact,
|
||||
getFormattedBankValues,
|
||||
getPriceImpacts,
|
||||
} from 'utils/governance/listingTools'
|
||||
|
@ -49,7 +49,7 @@ const Dashboard: NextPage = () => {
|
|||
const connection = mangoStore((s) => s.connection)
|
||||
|
||||
const [isOpenSuggestionModal, setIsOpenSuggestionModal] = useState(false)
|
||||
const [priceImpacts, setPriceImapcts] = useState<PriceImpactResp[]>([])
|
||||
const [priceImpacts, setPriceImapcts] = useState<PriceImpact[]>([])
|
||||
|
||||
useEffect(() => {
|
||||
const handleGetPriceImapcts = async () => {
|
||||
|
|
|
@ -412,19 +412,24 @@ function isWithinLastXHours(timestampInSeconds: number, hoursNumber: number) {
|
|||
return differenceInHours < hoursNumber
|
||||
}
|
||||
|
||||
export type PriceImpactResp = {
|
||||
avg_price_impact_percent: number
|
||||
side: 'ask' | 'bid'
|
||||
target_amount: number
|
||||
export type PriceImpact = {
|
||||
symbol: string
|
||||
//there is more fileds they are just not used on ui
|
||||
side: 'bid' | 'ask'
|
||||
target_amount: number
|
||||
avg_price_impact_percent: number
|
||||
min_price_impact_percent: number
|
||||
max_price_impact_percent: number
|
||||
}
|
||||
export type PriceImpactRespWithoutSide = Omit<PriceImpactResp, 'side'>
|
||||
|
||||
export type MidPriceImpact = Omit<
|
||||
PriceImpact,
|
||||
'side' | 'min_price_impact_percent' | 'max_price_impact_percent'
|
||||
>
|
||||
|
||||
export const getPriceImpacts = async () => {
|
||||
const resp = await fetch(
|
||||
'https://api.mngo.cloud/data/v4/risk/listed-tokens-one-week-price-impacts',
|
||||
)
|
||||
const jsonReps = (await resp.json()) as PriceImpactResp[]
|
||||
const jsonReps = (await resp.json()) as PriceImpact[]
|
||||
return jsonReps
|
||||
}
|
||||
|
|
|
@ -42,10 +42,10 @@
|
|||
keccak256 "^1.0.6"
|
||||
merkletreejs "^0.3.10"
|
||||
|
||||
"@blockworks-foundation/mango-v4-settings@0.2.13":
|
||||
version "0.2.13"
|
||||
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-v4-settings/-/mango-v4-settings-0.2.13.tgz#c75c1ea2e8e4c7888e45e979d75d18a2342142bf"
|
||||
integrity sha512-C5djeBkeM1u2IuFTu9qu9B78iCdq2Fu/M2VEXUlZWDBmU3eMUMtQ60qc+nBL+HedrBriApM4WaRSu/RwBs3IBQ==
|
||||
"@blockworks-foundation/mango-v4-settings@0.2.15":
|
||||
version "0.2.15"
|
||||
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-v4-settings/-/mango-v4-settings-0.2.15.tgz#05ba6f6c73cf783ae67fb590e4c5971a106353ee"
|
||||
integrity sha512-zjkCddUsDfEP3EzwgcOc0/Yw6OV8EXh2lfh0KGtcIPtExkV/zVtvwoR29rirabMEVw//HXeupkTY6Bo4KpyfWQ==
|
||||
dependencies:
|
||||
bn.js "^5.2.1"
|
||||
eslint-config-prettier "^9.0.0"
|
||||
|
|
Loading…
Reference in New Issue