upgrade mango settings lib

This commit is contained in:
Adrian Brzeziński 2023-10-05 22:04:37 +02:00
parent 37743a5d92
commit 8e304aa560
6 changed files with 55 additions and 78 deletions

View File

@ -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(

View File

@ -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 (

View File

@ -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",

View File

@ -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 () => {

View File

@ -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
}

View File

@ -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"