Merge pull request #40 from blockworks-foundation/round-to-ticksize

round initial limit price to ticksize
This commit is contained in:
tylersssss 2022-12-16 00:55:28 -05:00 committed by GitHub
commit 37f34b8674
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 16 deletions

View File

@ -179,6 +179,21 @@ const AdvancedTradeForm = () => {
}) })
}, []) }, [])
const tickDecimals = useMemo(() => {
const group = mangoStore.getState().group
if (!group || !selectedMarket) return 1
let tickSize: number
if (selectedMarket instanceof Serum3Market) {
const market = group.getSerum3ExternalMarket(
selectedMarket.serumMarketExternal
)
tickSize = market.tickSize
} else {
tickSize = selectedMarket.tickSize
}
return getDecimalCount(tickSize)
}, [selectedMarket])
/* /*
* Updates the limit price on page load * Updates the limit price on page load
*/ */
@ -188,10 +203,10 @@ const AdvancedTradeForm = () => {
if (!group || !oraclePrice) return if (!group || !oraclePrice) return
set((s) => { set((s) => {
s.tradeForm.price = oraclePrice.toString() s.tradeForm.price = oraclePrice.toFixed(tickDecimals)
}) })
} }
}, [oraclePrice, tradeForm.price]) }, [oraclePrice, tickDecimals, tradeForm.price])
/* /*
* Updates the price and the quote size when a Market order is selected * Updates the price and the quote size when a Market order is selected
@ -204,29 +219,20 @@ const AdvancedTradeForm = () => {
selectedMarket && selectedMarket &&
group group
) { ) {
let tickSize: number
if (selectedMarket instanceof Serum3Market) {
const market = group.getSerum3ExternalMarket(
selectedMarket.serumMarketExternal
)
tickSize = market.tickSize
} else {
tickSize = selectedMarket.tickSize
}
if (!isNaN(parseFloat(tradeForm.baseSize))) { if (!isNaN(parseFloat(tradeForm.baseSize))) {
const baseSize = new Decimal(tradeForm.baseSize)?.toNumber() const baseSize = new Decimal(tradeForm.baseSize)?.toNumber()
const quoteSize = baseSize * oraclePrice const quoteSize = baseSize * oraclePrice
set((s) => { set((s) => {
s.tradeForm.price = oraclePrice.toFixed(getDecimalCount(tickSize)) s.tradeForm.price = oraclePrice.toFixed(tickDecimals)
s.tradeForm.quoteSize = quoteSize.toFixed(getDecimalCount(tickSize)) s.tradeForm.quoteSize = quoteSize.toFixed(tickDecimals)
}) })
} else { } else {
set((s) => { set((s) => {
s.tradeForm.price = oraclePrice.toFixed(getDecimalCount(tickSize)) s.tradeForm.price = oraclePrice.toFixed(tickDecimals)
}) })
} }
} }
}, [oraclePrice, selectedMarket, tradeForm]) }, [oraclePrice, selectedMarket, tickDecimals, tradeForm])
const handlePlaceOrder = useCallback(async () => { const handlePlaceOrder = useCallback(async () => {
const client = mangoStore.getState().client const client = mangoStore.getState().client

View File

@ -10,6 +10,7 @@ import type { NextPage } from 'next'
import { serverSideTranslations } from 'next-i18next/serverSideTranslations' import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { useEffect } from 'react' import { useEffect } from 'react'
import { getDecimalCount } from 'utils/numbers'
export async function getStaticProps({ locale }: { locale: string }) { export async function getStaticProps({ locale }: { locale: string }) {
return { return {
@ -58,12 +59,21 @@ const Trade: NextPage = () => {
perpMarkets.find((m) => m.name === marketName) perpMarkets.find((m) => m.name === marketName)
if (mkt) { if (mkt) {
let tickSize = 4
if (mkt instanceof Serum3Market) {
const market = group.getSerum3ExternalMarket(mkt.serumMarketExternal)
tickSize = market.tickSize
} else {
tickSize = mkt.tickSize
}
set((s) => { set((s) => {
s.selectedMarket.name = marketName s.selectedMarket.name = marketName
s.selectedMarket.current = mkt s.selectedMarket.current = mkt
s.tradeForm = { s.tradeForm = {
...DEFAULT_TRADE_FORM, ...DEFAULT_TRADE_FORM,
price: getOraclePriceForMarket(group, mkt).toString(), price: getOraclePriceForMarket(group, mkt).toFixed(
getDecimalCount(tickSize)
),
} }
}) })
} }