From 72e48081415e9c80829655ff719c190720e801cd Mon Sep 17 00:00:00 2001 From: microwavedcola1 Date: Fri, 7 Oct 2022 14:22:18 +0200 Subject: [PATCH] match mango-v4 dev branch Signed-off-by: microwavedcola1 --- components/MangoAccountsList.tsx | 4 +-- components/MangoProvider.tsx | 2 +- components/SideNav.tsx | 5 ++-- components/account/AccountPage.tsx | 32 ++++++++++++++-------- components/account/MangoAccountSummary.tsx | 29 +++++++++++++------- components/modals/BorrowModal.tsx | 4 ++- components/modals/CloseAccountModal.tsx | 2 +- components/modals/DepositModal.tsx | 4 +-- components/modals/WithdrawModal.tsx | 4 ++- components/shared/HealthImpact.tsx | 6 ++-- components/swap/SwapForm.tsx | 7 +++-- components/trade/Orderbook.tsx | 4 +-- components/trade/RecentTrades.tsx | 2 +- hooks/useUnsettledSpotBalances.tsx | 2 +- package.json | 2 +- store/mangoStore.ts | 9 ++---- store/spotBalancesUpdater.ts | 18 ++++++++---- yarn.lock | 7 +++-- 18 files changed, 87 insertions(+), 56 deletions(-) diff --git a/components/MangoAccountsList.tsx b/components/MangoAccountsList.tsx index 2e20c96a..0a04f5a5 100644 --- a/components/MangoAccountsList.tsx +++ b/components/MangoAccountsList.tsx @@ -38,9 +38,7 @@ const MangoAccountsList = ({ s.activityFeed.loading = true }) try { - const reloadedMangoAccount = await retryFn(() => - acc.reload(client, group) - ) + const reloadedMangoAccount = await retryFn(() => acc.reload(client)) set((s) => { s.mangoAccount.current = reloadedMangoAccount s.mangoAccount.lastUpdatedAt = new Date().toISOString() diff --git a/components/MangoProvider.tsx b/components/MangoProvider.tsx index 5083ac3a..aa4670fd 100644 --- a/components/MangoProvider.tsx +++ b/components/MangoProvider.tsx @@ -46,7 +46,7 @@ const ReadOnlyMangoAccount = () => { const client = mangoStore.getState().client const pk = new PublicKey(ma) const readOnlyMangoAccount = await client.getMangoAccount(pk) - await readOnlyMangoAccount.reloadAccountData(client, group) + await readOnlyMangoAccount.reloadAccountData(client) // set((state) => { // state.mangoAccount.current = readOnlyMangoAccount // state.mangoAccount.initialLoad = false diff --git a/components/SideNav.tsx b/components/SideNav.tsx index f10bc043..c8c99b86 100644 --- a/components/SideNav.tsx +++ b/components/SideNav.tsx @@ -26,6 +26,7 @@ import HealthHeart from './account/HealthHeart' const SideNav = ({ collapsed }: { collapsed: boolean }) => { const { t } = useTranslation('common') const { connected } = useWallet() + const group = mangoStore.getState().group const mangoAccount = mangoStore((s) => s.mangoAccount.current) const router = useRouter() const { pathname } = router @@ -143,8 +144,8 @@ const SideNav = ({ collapsed }: { collapsed: boolean }) => { icon={ { const { t } = useTranslation('common') const { connected } = useWallet() + const group = mangoStore.getState().group const { mangoAccount } = useMangoAccount() const actions = mangoStore((s) => s.actions) const loadPerformanceData = mangoStore( @@ -71,10 +73,12 @@ const AccountPage = () => { const [isOnboarded] = useLocalStorageState(IS_ONBOARDED_KEY) const leverage = useMemo(() => { - if (!mangoAccount) return 0 - const liabsValue = mangoAccount.getLiabsValue(HealthType.init)!.toNumber() + if (!group || !mangoAccount) return 0 + const liabsValue = mangoAccount + .getLiabsValue(group, HealthType.init)! + .toNumber() const totalCollateral = mangoAccount - .getAssetsValue(HealthType.init)! + .getAssetsValue(group, HealthType.init)! .toNumber() return liabsValue / totalCollateral }, [mangoAccount]) @@ -117,11 +121,11 @@ const AccountPage = () => { } const { accountPnl, accountValueChange } = useMemo(() => { - if (performanceData.length && mangoAccount) { + if (group && performanceData.length && mangoAccount) { return { accountPnl: performanceData[performanceData.length - 1].pnl, accountValueChange: - ((toUiDecimalsForQuote(mangoAccount.getEquity()!.toNumber()) - + ((toUiDecimalsForQuote(mangoAccount.getEquity(group)!.toNumber()) - performanceData[0].account_equity) / performanceData[0].account_equity) * 100, @@ -166,7 +170,9 @@ const AccountPage = () => { }, [oneDayPerformanceData, mangoAccount]) const maintHealth = useMemo(() => { - return mangoAccount ? mangoAccount.getHealthRatioUi(HealthType.maint) : 0 + return group && mangoAccount + ? mangoAccount.getHealthRatioUi(group, HealthType.maint) + : 0 }, [mangoAccount]) const handleChartToShow = ( @@ -198,7 +204,7 @@ const AccountPage = () => {
$ - {mangoAccount ? ( + {group && mangoAccount ? ( { delay={0.05} duration={1} numbers={formatDecimal( - toUiDecimalsForQuote(mangoAccount.getEquity()!.toNumber()), + toUiDecimalsForQuote( + mangoAccount.getEquity(group)!.toNumber() + ), 2 )} /> @@ -338,10 +346,10 @@ const AccountPage = () => {

- {mangoAccount + {group && mangoAccount ? formatFixedDecimals( toUiDecimalsForQuote( - mangoAccount.getCollateralValue()!.toNumber() + mangoAccount.getCollateralValue(group)!.toNumber() ), true ) @@ -356,11 +364,11 @@ const AccountPage = () => { > Total: - {mangoAccount + {group && mangoAccount ? formatFixedDecimals( toUiDecimalsForQuote( mangoAccount - .getAssetsValue(HealthType.init)! + .getAssetsValue(group, HealthType.init)! .toNumber() ), true diff --git a/components/account/MangoAccountSummary.tsx b/components/account/MangoAccountSummary.tsx index c2c8ba1f..a9aa8534 100644 --- a/components/account/MangoAccountSummary.tsx +++ b/components/account/MangoAccountSummary.tsx @@ -15,15 +15,18 @@ import { useWallet } from '@solana/wallet-adapter-react' const MangoAccountSummary = () => { const { t } = useTranslation('common') const { connected } = useWallet() + const group = mangoStore.getState().group const mangoAccount = mangoStore((s) => s.mangoAccount.current) const [showDepositModal, setShowDepositModal] = useState(false) const [showWithdrawModal, setShowWithdrawModal] = useState(false) const leverage = useMemo(() => { - if (!mangoAccount) return 0 - const liabsValue = mangoAccount.getLiabsValue(HealthType.init)!.toNumber() + if (!group || !mangoAccount) return 0 + const liabsValue = mangoAccount + .getLiabsValue(group, HealthType.init)! + .toNumber() const totalCollateral = mangoAccount - .getAssetsValue(HealthType.init)! + .getAssetsValue(group, HealthType.init)! .toNumber() return liabsValue / totalCollateral }, [mangoAccount]) @@ -34,7 +37,9 @@ const MangoAccountSummary = () => {

{t('health')}

- {mangoAccount ? mangoAccount.getHealthRatioUi(HealthType.maint) : 0} + {group && mangoAccount + ? mangoAccount.getHealthRatioUi(group, HealthType.maint) + : 0} %

@@ -42,9 +47,11 @@ const MangoAccountSummary = () => {

{t('account-value')}

$ - {mangoAccount + {group && mangoAccount ? formatDecimal( - toUiDecimalsForQuote(mangoAccount.getEquity()!.toNumber()), + toUiDecimalsForQuote( + mangoAccount.getEquity(group)!.toNumber() + ), 2 ) : (0).toFixed(2)} @@ -53,10 +60,10 @@ const MangoAccountSummary = () => {

{t('free-collateral')}

- {mangoAccount + {group && mangoAccount ? formatFixedDecimals( toUiDecimalsForQuote( - mangoAccount.getCollateralValue()!.toNumber() + mangoAccount.getCollateralValue(group)!.toNumber() ), true ) @@ -66,10 +73,12 @@ const MangoAccountSummary = () => {

{t('total-collateral')}

- {mangoAccount + {group && mangoAccount ? formatFixedDecimals( toUiDecimalsForQuote( - mangoAccount.getAssetsValue(HealthType.init)!.toNumber() + mangoAccount + .getAssetsValue(group, HealthType.init)! + .toNumber() ), true ) diff --git a/components/modals/BorrowModal.tsx b/components/modals/BorrowModal.tsx index b296964e..e8d36fa6 100644 --- a/components/modals/BorrowModal.tsx +++ b/components/modals/BorrowModal.tsx @@ -141,7 +141,9 @@ function BorrowModal({ isOpen, onClose, token }: ModalCombinedProps) { }, [mangoAccount, group]) const initHealth = useMemo(() => { - return mangoAccount ? mangoAccount.getHealthRatioUi(HealthType.init) : 100 + return group && mangoAccount + ? mangoAccount.getHealthRatioUi(group, HealthType.init) + : 100 }, [mangoAccount]) const showInsufficientBalance = Number(inputAmount) diff --git a/components/modals/CloseAccountModal.tsx b/components/modals/CloseAccountModal.tsx index 81c48eb4..a9089cd8 100644 --- a/components/modals/CloseAccountModal.tsx +++ b/components/modals/CloseAccountModal.tsx @@ -31,7 +31,7 @@ const CloseAccountModal = ({ isOpen, onClose }: ModalProps) => { ) let newCurrentAccount: MangoAccount if (newMangoAccounts[0]) { - newCurrentAccount = await newMangoAccounts[0].reload(client, group) + newCurrentAccount = await newMangoAccounts[0].reload(client) } setLoading(false) diff --git a/components/modals/DepositModal.tsx b/components/modals/DepositModal.tsx index d55d2242..01a80dbf 100644 --- a/components/modals/DepositModal.tsx +++ b/components/modals/DepositModal.tsx @@ -188,14 +188,14 @@ function DepositModal({ isOpen, onClose, token }: ModalCombinedProps) { const exceedsAlphaMax = useMemo(() => { const mangoAccount = mangoStore.getState().mangoAccount.current - if (!mangoAccount) return + if (!group || !mangoAccount) return if ( mangoAccount.owner.toString() === '8SSLjXBEVk9nesbhi9UMCA32uijbVBUqWoKPPQPTekzt' ) return false const accountValue = toUiDecimalsForQuote( - mangoAccount.getEquity()!.toNumber() + mangoAccount.getEquity(group)!.toNumber() ) return ( parseFloat(inputAmount) > ALPHA_DEPOSIT_LIMIT || diff --git a/components/modals/WithdrawModal.tsx b/components/modals/WithdrawModal.tsx index 8cb7e77c..33e87fa1 100644 --- a/components/modals/WithdrawModal.tsx +++ b/components/modals/WithdrawModal.tsx @@ -146,7 +146,9 @@ function WithdrawModal({ isOpen, onClose, token }: ModalCombinedProps) { }, [mangoAccount, group]) const initHealth = useMemo(() => { - return mangoAccount ? mangoAccount.getHealthRatioUi(HealthType.init) : 100 + return group && mangoAccount + ? mangoAccount.getHealthRatioUi(group, HealthType.init) + : 100 }, [mangoAccount]) const showInsufficientBalance = Number(inputAmount) diff --git a/components/shared/HealthImpact.tsx b/components/shared/HealthImpact.tsx index 3af4bed3..e0f697f4 100644 --- a/components/shared/HealthImpact.tsx +++ b/components/shared/HealthImpact.tsx @@ -4,6 +4,7 @@ import { PublicKey } from '@solana/web3.js' import { useTranslation } from 'next-i18next' import { useMemo } from 'react' import mangoStore from '@store/mangoStore' +import { group } from 'console' const HealthImpact = ({ uiAmount, @@ -15,11 +16,12 @@ const HealthImpact = ({ mintPk: PublicKey }) => { const { t } = useTranslation('common') + const group = mangoStore.getState().group const mangoAccount = mangoStore((s) => s.mangoAccount.current) const currentMaintHealth = useMemo(() => { - if (!mangoAccount) return 0 - return mangoAccount.getHealthRatioUi(HealthType.maint) + if (!group || !mangoAccount) return 0 + return mangoAccount.getHealthRatioUi(group, HealthType.maint) }, [mangoAccount]) const maintProjectedHealth = useMemo(() => { diff --git a/components/swap/SwapForm.tsx b/components/swap/SwapForm.tsx index 06fa90df..a53de4e1 100644 --- a/components/swap/SwapForm.tsx +++ b/components/swap/SwapForm.tsx @@ -37,6 +37,7 @@ import { useTokenMax } from './useTokenMax' import WalletIcon from '../icons/WalletIcon' import Tooltip from '@components/shared/Tooltip' import MaxAmountButton from '@components/shared/MaxAmountButton' +import { group } from 'console' const MAX_DIGITS = 11 export const withValueLimit = (values: NumberFormatValues): boolean => { @@ -54,6 +55,8 @@ const SwapForm = () => { const [showSettings, setShowSettings] = useState(false) const [showConfirm, setShowConfirm] = useState(false) + const group = mangoStore.getState().group + const set = mangoStore.getState().set const useMargin = mangoStore((s) => s.swap.margin) const slippage = mangoStore((s) => s.swap.slippage) @@ -143,8 +146,8 @@ const SwapForm = () => { }, [inputTokenInfo, outputTokenInfo, set, amountOut, amountIn]) const currentMaintHealth = useMemo(() => { - if (!mangoAccount) return 0 - return mangoAccount.getHealthRatioUi(HealthType.maint) + if (!group || !mangoAccount) return 0 + return mangoAccount.getHealthRatioUi(group, HealthType.maint) }, [mangoAccount]) const maintProjectedHealth = useMemo(() => { diff --git a/components/trade/Orderbook.tsx b/components/trade/Orderbook.tsx index c7d39e11..6a560ee6 100644 --- a/components/trade/Orderbook.tsx +++ b/components/trade/Orderbook.tsx @@ -176,7 +176,7 @@ const Orderbook = () => { const serum3MarketExternal = useMemo(() => { const group = mangoStore.getState().group if (!group || !selectedMarket) return - return group.serum3MarketExternalsMap.get( + return group.serum3ExternalMarketsMap.get( selectedMarket.serumMarketExternal.toBase58() ) }, [selectedMarket]) @@ -214,7 +214,7 @@ const Orderbook = () => { const orderbook = mangoStore.getState().selectedMarket.orderbook const group = mangoStore.getState().group if (!selectedMarket || !group) return - const serum3MarketExternal = group.serum3MarketExternalsMap.get( + const serum3MarketExternal = group.serum3ExternalMarketsMap.get( selectedMarket.serumMarketExternal.toBase58() ) if ( diff --git a/components/trade/RecentTrades.tsx b/components/trade/RecentTrades.tsx index 7a5bbe42..9e6fd43f 100644 --- a/components/trade/RecentTrades.tsx +++ b/components/trade/RecentTrades.tsx @@ -16,7 +16,7 @@ const RecentTrades = () => { const serum3MarketExternal = useMemo(() => { const group = mangoStore.getState().group if (!group || !selectedMarketPk) return - return group.serum3MarketExternalsMap.get(selectedMarketPk) + return group.serum3ExternalMarketsMap.get(selectedMarketPk) }, [selectedMarketPk]) const baseSymbol = useMemo(() => { diff --git a/hooks/useUnsettledSpotBalances.tsx b/hooks/useUnsettledSpotBalances.tsx index 4bd11bbd..c97cd426 100644 --- a/hooks/useUnsettledSpotBalances.tsx +++ b/hooks/useUnsettledSpotBalances.tsx @@ -12,7 +12,7 @@ export function useUnsettledSpotBalances() { const unsettledBalances: Record = {} mangoAccount.serum3Active().forEach((serumMarket) => { - const market = group.getSerum3MarketByIndex(serumMarket.marketIndex)! + const market = group.getSerum3MarketByMarketIndex(serumMarket.marketIndex)! const openOrdersAccForMkt = openOrdersAccounts.find((oo) => oo.market.equals(market.serumMarketExternal) ) diff --git a/package.json b/package.json index f0ab4cda..7ccefa62 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "postinstall": "tar -xzC public -f vendor/charting_library.tgz;tar -xzC public -f vendor/datafeeds.tgz" }, "dependencies": { - "@blockworks-foundation/mango-v4": "git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#main", + "@blockworks-foundation/mango-v4": "git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#dev", "@headlessui/react": "^1.6.6", "@heroicons/react": "^2.0.10", "@jup-ag/core": "^2.0.0-beta.3", diff --git a/store/mangoStore.ts b/store/mangoStore.ts index 0a7f3ab6..23e9a771 100644 --- a/store/mangoStore.ts +++ b/store/mangoStore.ts @@ -538,10 +538,7 @@ const mangoStore = create()( if (!mangoAccount) throw new Error('No mango account exists for reload') - const reloadedMangoAccount = await mangoAccount.reload( - client, - group - ) + const reloadedMangoAccount = await mangoAccount.reload(client) set((state) => { state.mangoAccount.current = reloadedMangoAccount state.mangoAccount.lastUpdatedAt = new Date().toISOString() @@ -586,7 +583,7 @@ const mangoStore = create()( if (newSelectedMangoAccount) { await retryFn(() => - newSelectedMangoAccount!.reloadAccountData(client, group) + newSelectedMangoAccount!.reloadAccountData(client) ) await actions.fetchSerumOpenOrders(newSelectedMangoAccount) } @@ -636,7 +633,7 @@ const mangoStore = create()( try { let openOrders: Record = {} for (const serum3Orders of mangoAccount.serum3) { - const market = group.getSerum3MarketByIndex( + const market = group.getSerum3MarketByMarketIndex( serum3Orders.marketIndex ) if (market) { diff --git a/store/spotBalancesUpdater.ts b/store/spotBalancesUpdater.ts index c3b57d47..79c2bac7 100644 --- a/store/spotBalancesUpdater.ts +++ b/store/spotBalancesUpdater.ts @@ -14,7 +14,7 @@ const spotBalancesUpdater = (_newState: any, _prevState: any) => { const balances: SpotBalances = {} for (const serumMarket of mangoAccount.serum3Active()) { - const market = group.getSerum3MarketByIndex(serumMarket.marketIndex) + const market = group.getSerum3MarketByMarketIndex(serumMarket.marketIndex) if (!market) continue const openOrdersAccForMkt = openOrdersAccounts.find((oo) => oo.market.equals(market.serumMarketExternal) @@ -52,11 +52,15 @@ const spotBalancesUpdater = (_newState: any, _prevState: any) => { let quoteBalances = balances[ - market.getSerum3ExternalMarket(group)!.quoteMintAddress.toString() + group + .getSerum3ExternalMarket(market.serumMarketExternal) + .quoteMintAddress.toString() ] if (!quoteBalances) { quoteBalances = balances[ - market.getSerum3ExternalMarket(group)!.quoteMintAddress.toString() + group + .getSerum3ExternalMarket(market.serumMarketExternal) + .quoteMintAddress.toString() ] = { inOrders: 0, unsettled: 0 } } quoteBalances.inOrders += quoteTokenLockedInOrder || 0 @@ -64,11 +68,15 @@ const spotBalancesUpdater = (_newState: any, _prevState: any) => { let baseBalances = balances[ - market.getSerum3ExternalMarket(group)!.baseMintAddress.toString() + group + .getSerum3ExternalMarket(market.serumMarketExternal) + .baseMintAddress.toString() ] if (!baseBalances) { baseBalances = balances[ - market.getSerum3ExternalMarket(group)!.baseMintAddress.toString() + group + .getSerum3ExternalMarket(market.serumMarketExternal) + .baseMintAddress.toString() ] = { inOrders: 0, unsettled: 0 } } baseBalances.inOrders += baseTokenLockedInOrder diff --git a/yarn.lock b/yarn.lock index 645c0934..a333e714 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,14 +43,15 @@ dependencies: regenerator-runtime "^0.13.4" -"@blockworks-foundation/mango-v4@git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#main": +"@blockworks-foundation/mango-v4@git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#dev": version "0.0.1-beta.3" - resolved "git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#0def20960819a96d9200d76cbbffc81977f9a0b2" + resolved "git+https://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:x-oauth-basic@github.com/blockworks-foundation/mango-v4.git#8f6fa5134ddfb61358a261658fbe6628eb2b5acd" dependencies: "@project-serum/anchor" "^0.25.0" "@project-serum/serum" "^0.13.65" "@pythnetwork/client" "^2.7.0" "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.63.1" "@switchboard-xyz/switchboard-v2" "^0.0.129" big.js "^6.1.1" bs58 "^5.0.0" @@ -1304,7 +1305,7 @@ superstruct "^0.14.2" tweetnacl "^1.0.0" -"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.22.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.44.3": +"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.22.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.44.3", "@solana/web3.js@^1.63.1": version "1.63.1" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.63.1.tgz#88a19a17f5f4aada73ad70a94044c1067cab2b4d" integrity sha512-wgEdGVK5FTS2zENxbcGSvKpGZ0jDS6BUdGu8Gn6ns0CzgJkK83u4ip3THSnBPEQ5i/jrqukg998BwV1H67+qiQ==