match mango-v4 dev branch

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-10-07 14:22:18 +02:00
parent 84cff1613e
commit 72e4808141
18 changed files with 87 additions and 56 deletions

View File

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

View File

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

View File

@ -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={
<HealthHeart
health={
mangoAccount
? mangoAccount.getHealthRatioUi(HealthType.maint)
group && mangoAccount
? mangoAccount.getHealthRatioUi(group, HealthType.maint)
: undefined
}
size={32}

View File

@ -30,6 +30,7 @@ import { IS_ONBOARDED_KEY } from 'utils/constants'
import { useWallet } from '@solana/wallet-adapter-react'
import useLocalStorageState from 'hooks/useLocalStorageState'
import AccountOnboardingTour from '@components/tours/AccountOnboardingTour'
import { group } from 'console'
export async function getStaticProps({ locale }: { locale: string }) {
return {
@ -46,6 +47,7 @@ export async function getStaticProps({ locale }: { locale: string }) {
const AccountPage = () => {
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 = () => {
</Tooltip>
<div className="mb-1 flex items-center text-5xl font-bold text-th-fgd-1">
$
{mangoAccount ? (
{group && mangoAccount ? (
<FlipNumbers
height={48}
width={32}
@ -206,7 +212,9 @@ const AccountPage = () => {
delay={0.05}
duration={1}
numbers={formatDecimal(
toUiDecimalsForQuote(mangoAccount.getEquity()!.toNumber()),
toUiDecimalsForQuote(
mangoAccount.getEquity(group)!.toNumber()
),
2
)}
/>
@ -338,10 +346,10 @@ const AccountPage = () => {
</p>
</Tooltip>
<p className="mt-1 mb-0.5 text-2xl font-bold text-th-fgd-1 lg:text-xl xl:text-2xl">
{mangoAccount
{group && mangoAccount
? formatFixedDecimals(
toUiDecimalsForQuote(
mangoAccount.getCollateralValue()!.toNumber()
mangoAccount.getCollateralValue(group)!.toNumber()
),
true
)
@ -356,11 +364,11 @@ const AccountPage = () => {
>
<span className="tooltip-underline">Total</span>:
<span className="ml-1 font-mono text-th-fgd-2">
{mangoAccount
{group && mangoAccount
? formatFixedDecimals(
toUiDecimalsForQuote(
mangoAccount
.getAssetsValue(HealthType.init)!
.getAssetsValue(group, HealthType.init)!
.toNumber()
),
true

View File

@ -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 = () => {
<div>
<p className="text-sm text-th-fgd-3">{t('health')}</p>
<p className="font-mono text-sm text-th-fgd-1">
{mangoAccount ? mangoAccount.getHealthRatioUi(HealthType.maint) : 0}
{group && mangoAccount
? mangoAccount.getHealthRatioUi(group, HealthType.maint)
: 0}
%
</p>
</div>
@ -42,9 +47,11 @@ const MangoAccountSummary = () => {
<p className="text-sm text-th-fgd-3">{t('account-value')}</p>
<p className="font-mono text-sm text-th-fgd-1">
$
{mangoAccount
{group && mangoAccount
? formatDecimal(
toUiDecimalsForQuote(mangoAccount.getEquity()!.toNumber()),
toUiDecimalsForQuote(
mangoAccount.getEquity(group)!.toNumber()
),
2
)
: (0).toFixed(2)}
@ -53,10 +60,10 @@ const MangoAccountSummary = () => {
<div>
<p className="text-sm text-th-fgd-3">{t('free-collateral')}</p>
<p className="font-mono text-sm text-th-fgd-1">
{mangoAccount
{group && mangoAccount
? formatFixedDecimals(
toUiDecimalsForQuote(
mangoAccount.getCollateralValue()!.toNumber()
mangoAccount.getCollateralValue(group)!.toNumber()
),
true
)
@ -66,10 +73,12 @@ const MangoAccountSummary = () => {
<div>
<p className="text-sm text-th-fgd-3">{t('total-collateral')}</p>
<p className="font-mono text-sm text-th-fgd-1">
{mangoAccount
{group && mangoAccount
? formatFixedDecimals(
toUiDecimalsForQuote(
mangoAccount.getAssetsValue(HealthType.init)!.toNumber()
mangoAccount
.getAssetsValue(group, HealthType.init)!
.toNumber()
),
true
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@ export function useUnsettledSpotBalances() {
const unsettledBalances: Record<string, { base: number; quote: number }> =
{}
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)
)

View File

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

View File

@ -538,10 +538,7 @@ const mangoStore = create<MangoStore>()(
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<MangoStore>()(
if (newSelectedMangoAccount) {
await retryFn(() =>
newSelectedMangoAccount!.reloadAccountData(client, group)
newSelectedMangoAccount!.reloadAccountData(client)
)
await actions.fetchSerumOpenOrders(newSelectedMangoAccount)
}
@ -636,7 +633,7 @@ const mangoStore = create<MangoStore>()(
try {
let openOrders: Record<string, Order[]> = {}
for (const serum3Orders of mangoAccount.serum3) {
const market = group.getSerum3MarketByIndex(
const market = group.getSerum3MarketByMarketIndex(
serum3Orders.marketIndex
)
if (market) {

View File

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

View File

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