diff --git a/components/instructions/programs/mangoV4.tsx b/components/instructions/programs/mangoV4.tsx index 16c0f0f7d6..41c28504a4 100644 --- a/components/instructions/programs/mangoV4.tsx +++ b/components/instructions/programs/mangoV4.tsx @@ -259,12 +259,30 @@ const instructions = () => ({ const formattedProposedArgs = getFormattedListingValues(args) - const suggestedPreset = getFormattedListingPresets( + const formattedSuggestedPresets = getFormattedListingPresets( proposedOracle.type === 'Pyth', 0, mintInfo?.account.decimals || 0, oracleData.uiPrice - )[presetInfo.presetKey] + ) + + const currentListingArgsMatchedTier = Object.values( + formattedSuggestedPresets + ).find((preset) => { + const formattedPreset = getFormattedListingValues({ + tokenIndex: args.tokenIndex, + name: args.name, + oracle: args.oracle, + ...preset, + }) + + return ( + JSON.stringify(formattedProposedArgs) === + JSON.stringify(formattedPreset) + ) + }) + + const suggestedPreset = formattedSuggestedPresets[presetInfo.presetKey] const suggestedFormattedPreset: ListingArgsFormatted = Object.keys( suggestedPreset @@ -292,7 +310,7 @@ const instructions = () => ({ if (x === 'depositLimit') { return !isDifferenceWithin5Percent( Number(formattedProposedArgs['depositLimit'] || 0), - Number(suggestedFormattedPreset['depositLimit']) + Number(suggestedFormattedPreset['depositLimit'] || 0) ) } return true @@ -356,6 +374,13 @@ const instructions = () => ({ carefully )} + {currentListingArgsMatchedTier && ( +

+ + Full match found with tier {/* @ts-ignore */} + {currentListingArgsMatchedTier.preset_name} +

+ )} {isMintOnCurve && (
Proposed token has open mint @@ -536,17 +561,17 @@ const instructions = () => ({ label="Flash Loan Deposit Fee Rate" valKey="flashLoanSwapFeeRate" /> - ({ ).toFixed(0) : 0 })`} - suggestedVal={`${ + suggestedVal={ mintInfo && invalidFields?.depositLimit - ? toUiDecimals( + ? `${toUiDecimals( new BN(invalidFields.depositLimit.toString()), mintInfo.account.decimals - ) - : invalidFields.depositLimit - } ${args.name} ($${ - mintInfo && invalidFields.depositLimit - ? ( + )} ${args.name} ($${( toUiDecimals( new BN(invalidFields.depositLimit.toString()), mintInfo.account.decimals ) * oracleData.uiPrice - ).toFixed(0) - : 0 - })`} + ).toFixed(0)})` + : undefined + } /> ({ label="Interest Curve Scaling" valKey="interestCurveScaling" /> -
@@ -1013,7 +1034,7 @@ const instructions = () => ({ if (x === 'depositLimit') { return !isDifferenceWithin5Percent( Number(parsedArgs['depositLimit'] || 0), - Number(suggestedFormattedPreset['depositLimit']) + Number(suggestedFormattedPreset['depositLimit'] || 0) ) } return true diff --git a/utils/Mango/listingTools.ts b/utils/Mango/listingTools.ts index 4f22ac6f2c..d5ed881ca1 100644 --- a/utils/Mango/listingTools.ts +++ b/utils/Mango/listingTools.ts @@ -48,7 +48,7 @@ export type FlatListingArgs = { name: string tokenIndex: number 'oracleConfig.confFilter': number - 'oracleConfig.maxStalenessSlots': number + 'oracleConfig.maxStalenessSlots': number | null 'interestRateParams.util0': number 'interestRateParams.rate0': number 'interestRateParams.util1': number @@ -130,7 +130,7 @@ export type ListingArgsFormatted = { tokenIndex: number tokenName: string oracleConfidenceFilter: string - oracleMaxStalenessSlots: number + oracleMaxStalenessSlots: number | null interestRateUtilizationPoint1: string interestRateUtilizationPoint0: string interestRatePoint0: string @@ -175,7 +175,10 @@ export type EditTokenArgsFormatted = ListingArgsFormatted & { const transformPresetToProposed = (listingPreset: LISTING_PRESET) => { const proposedPreset: FormattedListingPreset = { ...listingPreset, - 'oracleConfig.maxStalenessSlots': listingPreset.maxStalenessSlots!, + 'oracleConfig.maxStalenessSlots': + listingPreset.maxStalenessSlots === -1 + ? null + : listingPreset.maxStalenessSlots!, 'oracleConfig.confFilter': listingPreset.oracleConfFilter, 'interestRateParams.adjustmentFactor': listingPreset.adjustmentFactor, 'interestRateParams.util0': listingPreset.util0,