Liq price in balances (#679)
* add liquidation price to balances table trade * add depositcap to HLS * fix: add width classes to the balances table, remove abbreviation, remove flicker * fix: fixed the account selection and added a tooltip * fix wasm file for debt liquidation price --------- Co-authored-by: Linkie Link <linkielink.dev@gmail.com>
This commit is contained in:
parent
b82cf37c3d
commit
2effdfadac
@ -1,7 +1,7 @@
|
|||||||
import AssetRate from 'components/Asset/AssetRate'
|
import AssetRate from 'components/Asset/AssetRate'
|
||||||
import { byDenom } from 'utils/array'
|
import { byDenom } from 'utils/array'
|
||||||
|
|
||||||
export const APY_META = { accessorKey: 'apy', header: 'APY' }
|
export const APY_META = { accessorKey: 'apy', header: 'APY', meta: { className: 'w-30' } }
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
apy: number
|
apy: number
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
import { useEffect, useMemo, useState } from 'react'
|
||||||
|
|
||||||
|
import DisplayCurrency from 'components/DisplayCurrency'
|
||||||
|
import { InfoCircle } from 'components/Icons'
|
||||||
|
import Text from 'components/Text'
|
||||||
|
import { Tooltip } from 'components/Tooltip'
|
||||||
|
import useLiquidationPrice from 'hooks/useLiquidationPrice'
|
||||||
|
import { BNCoin } from 'types/classes/BNCoin'
|
||||||
|
import { LiquidationPriceKind } from 'utils/health_computer'
|
||||||
|
import { BN } from 'utils/helpers'
|
||||||
|
|
||||||
|
export const LIQ_META = {
|
||||||
|
accessorKey: 'symbol',
|
||||||
|
header: 'Liquidation Price',
|
||||||
|
id: 'liqPrice',
|
||||||
|
meta: { className: 'w-40' },
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
amount: number
|
||||||
|
computeLiquidationPrice: (denom: string, kind: LiquidationPriceKind) => number | null
|
||||||
|
denom: string
|
||||||
|
type: 'deposits' | 'borrowing' | 'lending' | 'vault'
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function LiqPrice(props: Props) {
|
||||||
|
const { denom, type, amount, computeLiquidationPrice } = props
|
||||||
|
const [lastLiquidationPrice, setLastLiquidationPrice] = useState<number | null>(null)
|
||||||
|
|
||||||
|
const liqPrice = useMemo(() => {
|
||||||
|
if (type === 'vault' || amount === 0) return 0
|
||||||
|
return computeLiquidationPrice(denom, type === 'borrowing' ? 'debt' : 'asset')
|
||||||
|
}, [amount, computeLiquidationPrice, denom, type])
|
||||||
|
|
||||||
|
const { liquidationPrice } = useLiquidationPrice(liqPrice)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (lastLiquidationPrice !== liqPrice && liqPrice !== null) setLastLiquidationPrice(liqPrice)
|
||||||
|
}, [liqPrice, lastLiquidationPrice])
|
||||||
|
|
||||||
|
if (!lastLiquidationPrice || (liquidationPrice === 0 && lastLiquidationPrice === 0))
|
||||||
|
return (
|
||||||
|
<Text size='xs' className='flex items-center justify-end number'>
|
||||||
|
N/A
|
||||||
|
<Tooltip
|
||||||
|
content={
|
||||||
|
type === 'vault'
|
||||||
|
? 'Liquidation prices cannot be calculated for farm positions. But it a drop in price of the underlying assets can still cause a liquidation.'
|
||||||
|
: 'The position size is too small to liquidate the account, even if the price goes to $0.00.'
|
||||||
|
}
|
||||||
|
type='info'
|
||||||
|
className='ml-1'
|
||||||
|
>
|
||||||
|
<InfoCircle className='w-3.5 h-3.5 text-white/40 hover:text-inherit' />
|
||||||
|
</Tooltip>
|
||||||
|
</Text>
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DisplayCurrency
|
||||||
|
className='text-xs text-right number'
|
||||||
|
coin={BNCoin.fromDenomAndBigNumber('usd', BN(lastLiquidationPrice))}
|
||||||
|
options={{ abbreviated: false }}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
import DisplayCurrency from 'components/DisplayCurrency'
|
||||||
|
import usePrice from 'hooks/usePrice'
|
||||||
|
import { BNCoin } from 'types/classes/BNCoin'
|
||||||
|
import { BN } from 'utils/helpers'
|
||||||
|
|
||||||
|
export const PRICE_META = { id: 'price', header: 'Price', meta: { className: 'w-30' } }
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
amount: number
|
||||||
|
denom: string
|
||||||
|
type: 'deposits' | 'borrowing' | 'lending' | 'vault'
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Price(props: Props) {
|
||||||
|
const price = usePrice(props.denom)
|
||||||
|
|
||||||
|
if (props.amount === 0 || props.type === 'vault') return null
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DisplayCurrency
|
||||||
|
className='text-xs text-right number'
|
||||||
|
coin={BNCoin.fromDenomAndBigNumber('usd', BN(price))}
|
||||||
|
options={{ abbreviated: false }}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
@ -6,7 +6,7 @@ import { FormattedNumber } from 'components/FormattedNumber'
|
|||||||
import { MAX_AMOUNT_DECIMALS, MIN_AMOUNT } from 'constants/math'
|
import { MAX_AMOUNT_DECIMALS, MIN_AMOUNT } from 'constants/math'
|
||||||
import { formatAmountToPrecision } from 'utils/formatters'
|
import { formatAmountToPrecision } from 'utils/formatters'
|
||||||
|
|
||||||
export const SIZE_META = { accessorKey: 'size', header: 'Size' }
|
export const SIZE_META = { accessorKey: 'size', header: 'Size', meta: { className: 'w-40' } }
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
size: number
|
size: number
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { ColumnDef } from '@tanstack/react-table'
|
import { ColumnDef, Row } from '@tanstack/react-table'
|
||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
|
|
||||||
import Apy, { APY_META } from 'components/Account/AccountBalancesTable/Columns/Apy'
|
import Apy, { APY_META } from 'components/Account/AccountBalancesTable/Columns/Apy'
|
||||||
import Asset, { ASSET_META } from 'components/Account/AccountBalancesTable/Columns/Asset'
|
import Asset, { ASSET_META } from 'components/Account/AccountBalancesTable/Columns/Asset'
|
||||||
|
import LiqPrice, { LIQ_META } from 'components/Account/AccountBalancesTable/Columns/LiqPrice'
|
||||||
|
import Price, { PRICE_META } from 'components/Account/AccountBalancesTable/Columns/Price'
|
||||||
import Size, {
|
import Size, {
|
||||||
SIZE_META,
|
SIZE_META,
|
||||||
sizeSortingFn,
|
sizeSortingFn,
|
||||||
@ -11,10 +13,18 @@ import Value, {
|
|||||||
VALUE_META,
|
VALUE_META,
|
||||||
valueSortingFn,
|
valueSortingFn,
|
||||||
} from 'components/Account/AccountBalancesTable/Columns/Value'
|
} from 'components/Account/AccountBalancesTable/Columns/Value'
|
||||||
|
import useHealthComputer from 'hooks/useHealthComputer'
|
||||||
import useMarketAssets from 'hooks/useMarketAssets'
|
import useMarketAssets from 'hooks/useMarketAssets'
|
||||||
|
import useStore from 'store'
|
||||||
|
|
||||||
export default function useAccountBalancesColumns() {
|
export default function useAccountBalancesColumns(
|
||||||
|
account: Account,
|
||||||
|
showLiquidationPrice?: boolean,
|
||||||
|
) {
|
||||||
const { data: markets } = useMarketAssets()
|
const { data: markets } = useMarketAssets()
|
||||||
|
const updatedAccount = useStore((s) => s.updatedAccount)
|
||||||
|
|
||||||
|
const { computeLiquidationPrice } = useHealthComputer(updatedAccount ?? account)
|
||||||
|
|
||||||
return useMemo<ColumnDef<AccountBalanceRow>[]>(() => {
|
return useMemo<ColumnDef<AccountBalanceRow>[]>(() => {
|
||||||
return [
|
return [
|
||||||
@ -46,6 +56,36 @@ export default function useAccountBalancesColumns() {
|
|||||||
),
|
),
|
||||||
sortingFn: sizeSortingFn,
|
sortingFn: sizeSortingFn,
|
||||||
},
|
},
|
||||||
|
...(showLiquidationPrice
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
...PRICE_META,
|
||||||
|
cell: ({ row }: { row: Row<AccountBalanceRow> }) => (
|
||||||
|
<Price
|
||||||
|
type={row.original.type}
|
||||||
|
amount={row.original.amount.toNumber()}
|
||||||
|
denom={row.original.denom}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(showLiquidationPrice
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
...LIQ_META,
|
||||||
|
enableSorting: false,
|
||||||
|
cell: ({ row }: { row: Row<AccountBalanceRow> }) => (
|
||||||
|
<LiqPrice
|
||||||
|
denom={row.original.denom}
|
||||||
|
computeLiquidationPrice={computeLiquidationPrice}
|
||||||
|
type={row.original.type}
|
||||||
|
amount={row.original.amount.toNumber()}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
{
|
{
|
||||||
...APY_META,
|
...APY_META,
|
||||||
cell: ({ row }) => (
|
cell: ({ row }) => (
|
||||||
@ -58,5 +98,5 @@ export default function useAccountBalancesColumns() {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}, [markets])
|
}, [computeLiquidationPrice, markets, showLiquidationPrice])
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,19 @@ interface Props {
|
|||||||
borrowingData: BorrowMarketTableData[]
|
borrowingData: BorrowMarketTableData[]
|
||||||
hideCard?: boolean
|
hideCard?: boolean
|
||||||
tableBodyClassName?: string
|
tableBodyClassName?: string
|
||||||
|
showLiquidationPrice?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function AccountBalancesTable(props: Props) {
|
export default function AccountBalancesTable(props: Props) {
|
||||||
const [searchParams] = useSearchParams()
|
const [searchParams] = useSearchParams()
|
||||||
const { account, lendingData, borrowingData, tableBodyClassName, hideCard } = props
|
const {
|
||||||
|
account,
|
||||||
|
lendingData,
|
||||||
|
borrowingData,
|
||||||
|
tableBodyClassName,
|
||||||
|
hideCard,
|
||||||
|
showLiquidationPrice,
|
||||||
|
} = props
|
||||||
const currentAccount = useCurrentAccount()
|
const currentAccount = useCurrentAccount()
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { pathname } = useLocation()
|
const { pathname } = useLocation()
|
||||||
@ -37,7 +45,7 @@ export default function AccountBalancesTable(props: Props) {
|
|||||||
isHls: props.isHls,
|
isHls: props.isHls,
|
||||||
})
|
})
|
||||||
|
|
||||||
const columns = useAccountBalancesColumns()
|
const columns = useAccountBalancesColumns(account, showLiquidationPrice)
|
||||||
|
|
||||||
if (accountBalanceData.length === 0)
|
if (accountBalanceData.length === 0)
|
||||||
return (
|
return (
|
||||||
|
@ -15,9 +15,9 @@ export const depositCapSortingFn = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
account: HLSAccountWithStrategy
|
depositCap: DepositCap
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Name(props: Props) {
|
export default function DepositCap(props: Props) {
|
||||||
return <DepositCapCell depositCap={props.account.strategy.depositCap} />
|
return <DepositCapCell depositCap={props.depositCap} />
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import ApyRange, {
|
|||||||
APY_RANGE_META,
|
APY_RANGE_META,
|
||||||
apyRangeSortingFn,
|
apyRangeSortingFn,
|
||||||
} from 'components/HLS/Staking/Table/Columns/ApyRange'
|
} from 'components/HLS/Staking/Table/Columns/ApyRange'
|
||||||
|
import DepositCap, { CAP_META } from 'components/HLS/Staking/Table/Columns/DepositCap'
|
||||||
import MaxLeverage, { MAX_LEV_META } from 'components/HLS/Staking/Table/Columns/MaxLeverage'
|
import MaxLeverage, { MAX_LEV_META } from 'components/HLS/Staking/Table/Columns/MaxLeverage'
|
||||||
import MaxLTV, { LTV_MAX_META } from 'components/HLS/Staking/Table/Columns/MaxLTV'
|
import MaxLTV, { LTV_MAX_META } from 'components/HLS/Staking/Table/Columns/MaxLTV'
|
||||||
import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name'
|
import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name'
|
||||||
@ -31,6 +32,10 @@ export default function useAvailableColumns(props: Props) {
|
|||||||
<MaxLTV strategy={row.original as HLSStrategy} isLoading={props.isLoading} />
|
<MaxLTV strategy={row.original as HLSStrategy} isLoading={props.isLoading} />
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
...CAP_META,
|
||||||
|
cell: ({ row }) => <DepositCap depositCap={row.original.depositCap} />,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
...APY_RANGE_META,
|
...APY_RANGE_META,
|
||||||
cell: ({ row }) => (
|
cell: ({ row }) => (
|
||||||
|
@ -57,7 +57,7 @@ export default function useDepositedColumns(props: Props) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
...CAP_META,
|
...CAP_META,
|
||||||
cell: ({ row }) => <DepositCap account={row.original} />,
|
cell: ({ row }) => <DepositCap depositCap={row.original.strategy.depositCap} />,
|
||||||
sortingFn: depositCapSortingFn,
|
sortingFn: depositCapSortingFn,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ function Content(props: Props) {
|
|||||||
account={account}
|
account={account}
|
||||||
borrowingData={borrowAssets}
|
borrowingData={borrowAssets}
|
||||||
lendingData={lendingAssets}
|
lendingData={lendingAssets}
|
||||||
|
showLiquidationPrice
|
||||||
hideCard
|
hideCard
|
||||||
/>
|
/>
|
||||||
</Skeleton>
|
</Skeleton>
|
||||||
@ -55,7 +56,10 @@ function Skeleton(props: SkeletonProps) {
|
|||||||
{props.children ? (
|
{props.children ? (
|
||||||
props.children
|
props.children
|
||||||
) : (
|
) : (
|
||||||
<TableSkeleton labels={['Asset', 'Value', 'Size', 'APY']} rowCount={3} />
|
<TableSkeleton
|
||||||
|
labels={['Asset', 'Value', 'Size', 'Price', 'Liquidation Price', 'APY']}
|
||||||
|
rowCount={3}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
|
@ -23,6 +23,7 @@ export default function AccountDetailsCard() {
|
|||||||
borrowingData={borrowAssetsData}
|
borrowingData={borrowAssetsData}
|
||||||
lendingData={lendingAssetsData}
|
lendingData={lendingAssetsData}
|
||||||
tableBodyClassName='gradient-card-content'
|
tableBodyClassName='gradient-card-content'
|
||||||
|
showLiquidationPrice
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import debounce from 'lodash.debounce'
|
import React, { useMemo } from 'react'
|
||||||
import React, { useEffect, useMemo, useState } from 'react'
|
|
||||||
|
|
||||||
import ActionButton from 'components/Button/ActionButton'
|
import ActionButton from 'components/Button/ActionButton'
|
||||||
import { CircularProgress } from 'components/CircularProgress'
|
import { CircularProgress } from 'components/CircularProgress'
|
||||||
@ -11,6 +10,7 @@ import { ChevronDown } from 'components/Icons'
|
|||||||
import Text from 'components/Text'
|
import Text from 'components/Text'
|
||||||
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
||||||
import { LocalStorageKeys } from 'constants/localStorageKeys'
|
import { LocalStorageKeys } from 'constants/localStorageKeys'
|
||||||
|
import useLiquidationPrice from 'hooks/useLiquidationPrice'
|
||||||
import useLocalStorage from 'hooks/useLocalStorage'
|
import useLocalStorage from 'hooks/useLocalStorage'
|
||||||
import usePrice from 'hooks/usePrice'
|
import usePrice from 'hooks/usePrice'
|
||||||
import useSwapFee from 'hooks/useSwapFee'
|
import useSwapFee from 'hooks/useSwapFee'
|
||||||
@ -59,24 +59,14 @@ export default function TradeSummary(props: Props) {
|
|||||||
const sellAssetPrice = usePrice(sellAsset.denom)
|
const sellAssetPrice = usePrice(sellAsset.denom)
|
||||||
const swapFee = useSwapFee(route.map((r) => r.pool_id))
|
const swapFee = useSwapFee(route.map((r) => r.pool_id))
|
||||||
const [showSummary, setShowSummary] = useToggle()
|
const [showSummary, setShowSummary] = useToggle()
|
||||||
const [liquidationPrice, setLiquidationPrice] = useState<number | null>(null)
|
const { liquidationPrice, isUpdatingLiquidationPrice } = useLiquidationPrice(
|
||||||
const [isUpdatingLiquidationPrice, setIsUpdatingLiquidationPrice] = useState(false)
|
props.liquidationPrice,
|
||||||
const debouncedSetLiqPrice = useMemo(
|
|
||||||
() => debounce(setLiquidationPrice, 1000, { leading: false }),
|
|
||||||
[],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const minReceive = useMemo(() => {
|
const minReceive = useMemo(() => {
|
||||||
return buyAmount.times(1 - swapFee).times(1 - slippage)
|
return buyAmount.times(1 - swapFee).times(1 - slippage)
|
||||||
}, [buyAmount, slippage, swapFee])
|
}, [buyAmount, slippage, swapFee])
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setIsUpdatingLiquidationPrice(true)
|
|
||||||
debouncedSetLiqPrice(props.liquidationPrice)
|
|
||||||
}, [debouncedSetLiqPrice, props.liquidationPrice])
|
|
||||||
|
|
||||||
useEffect(() => setIsUpdatingLiquidationPrice(false), [liquidationPrice])
|
|
||||||
|
|
||||||
const swapFeeValue = useMemo(() => {
|
const swapFeeValue = useMemo(() => {
|
||||||
return sellAssetPrice.times(swapFee).times(sellAmount)
|
return sellAssetPrice.times(swapFee).times(sellAmount)
|
||||||
}, [sellAmount, sellAssetPrice, swapFee])
|
}, [sellAmount, sellAssetPrice, swapFee])
|
||||||
|
@ -210,7 +210,7 @@ export default function SwapForm(props: Props) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const liquidationPrice = useMemo(
|
const liquidationPrice = useMemo(
|
||||||
() => computeLiquidationPrice(props.buyAsset.denom),
|
() => computeLiquidationPrice(props.buyAsset.denom, 'asset'),
|
||||||
[computeLiquidationPrice, props.buyAsset.denom],
|
[computeLiquidationPrice, props.buyAsset.denom],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import {
|
|||||||
BorrowTarget,
|
BorrowTarget,
|
||||||
compute_health_js,
|
compute_health_js,
|
||||||
liquidation_price_js,
|
liquidation_price_js,
|
||||||
|
LiquidationPriceKind,
|
||||||
max_borrow_estimate_js,
|
max_borrow_estimate_js,
|
||||||
max_swap_estimate_js,
|
max_swap_estimate_js,
|
||||||
max_withdraw_estimate_js,
|
max_withdraw_estimate_js,
|
||||||
@ -198,13 +199,13 @@ export default function useHealthComputer(account?: Account) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const computeLiquidationPrice = useCallback(
|
const computeLiquidationPrice = useCallback(
|
||||||
(denom: string) => {
|
(denom: string, kind: LiquidationPriceKind) => {
|
||||||
if (!healthComputer) return null
|
if (!healthComputer) return null
|
||||||
try {
|
try {
|
||||||
const asset = getAssetByDenom(denom)
|
const asset = getAssetByDenom(denom)
|
||||||
if (!asset) return null
|
if (!asset) return null
|
||||||
const decimalDiff = asset.decimals - PRICE_ORACLE_DECIMALS
|
const decimalDiff = asset.decimals - PRICE_ORACLE_DECIMALS
|
||||||
return BN(liquidation_price_js(healthComputer, denom))
|
return BN(liquidation_price_js(healthComputer, denom, kind))
|
||||||
.shiftedBy(-VALUE_SCALE_FACTOR)
|
.shiftedBy(-VALUE_SCALE_FACTOR)
|
||||||
.shiftedBy(decimalDiff)
|
.shiftedBy(decimalDiff)
|
||||||
.toNumber()
|
.toNumber()
|
||||||
|
22
src/hooks/useLiquidationPrice.ts
Normal file
22
src/hooks/useLiquidationPrice.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import debounce from 'lodash.debounce'
|
||||||
|
import { useEffect, useMemo, useState } from 'react'
|
||||||
|
|
||||||
|
export default function useLiquidationPrice(liqPrice: number | null) {
|
||||||
|
const [liquidationPrice, setLiquidationPrice] = useState<number | null>(null)
|
||||||
|
const [isUpdatingLiquidationPrice, setIsUpdatingLiquidationPrice] = useState(false)
|
||||||
|
const debouncedSetLiqPrice = useMemo(
|
||||||
|
() => debounce(setLiquidationPrice, 1000, { leading: false }),
|
||||||
|
[],
|
||||||
|
)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsUpdatingLiquidationPrice(true)
|
||||||
|
debouncedSetLiqPrice(liqPrice)
|
||||||
|
}, [debouncedSetLiqPrice, liqPrice])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsUpdatingLiquidationPrice(false)
|
||||||
|
}, [liquidationPrice])
|
||||||
|
|
||||||
|
return { liquidationPrice, isUpdatingLiquidationPrice }
|
||||||
|
}
|
11
src/utils/health_computer/index.d.ts
vendored
11
src/utils/health_computer/index.d.ts
vendored
@ -40,9 +40,14 @@ export function max_swap_estimate_js(
|
|||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @param {string} denom
|
* @param {string} denom
|
||||||
|
* @param {LiquidationPriceKind} kind
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function liquidation_price_js(c: HealthComputer, denom: string): string
|
export function liquidation_price_js(
|
||||||
|
c: HealthComputer,
|
||||||
|
denom: string,
|
||||||
|
kind: LiquidationPriceKind,
|
||||||
|
): string
|
||||||
export interface HealthComputer {
|
export interface HealthComputer {
|
||||||
kind: AccountKind
|
kind: AccountKind
|
||||||
positions: Positions
|
positions: Positions
|
||||||
@ -61,6 +66,8 @@ export interface HealthValuesResponse {
|
|||||||
above_max_ltv: boolean
|
above_max_ltv: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type LiquidationPriceKind = 'asset' | 'debt'
|
||||||
|
|
||||||
export type Slippage = Decimal
|
export type Slippage = Decimal
|
||||||
|
|
||||||
export type SwapKind = 'default' | 'margin'
|
export type SwapKind = 'default' | 'margin'
|
||||||
@ -88,7 +95,7 @@ export interface InitOutput {
|
|||||||
g: number,
|
g: number,
|
||||||
h: number,
|
h: number,
|
||||||
) => void
|
) => void
|
||||||
readonly liquidation_price_js: (a: number, b: number, c: number, d: number) => void
|
readonly liquidation_price_js: (a: number, b: number, c: number, d: number, e: number) => void
|
||||||
readonly allocate: (a: number) => number
|
readonly allocate: (a: number) => number
|
||||||
readonly deallocate: (a: number) => void
|
readonly deallocate: (a: number) => void
|
||||||
readonly requires_iterator: () => void
|
readonly requires_iterator: () => void
|
||||||
|
@ -1,389 +1,355 @@
|
|||||||
let wasm
|
let wasm;
|
||||||
|
|
||||||
const heap = new Array(128).fill(undefined)
|
const heap = new Array(128).fill(undefined);
|
||||||
|
|
||||||
heap.push(undefined, null, true, false)
|
heap.push(undefined, null, true, false);
|
||||||
|
|
||||||
function getObject(idx) {
|
function getObject(idx) { return heap[idx]; }
|
||||||
return heap[idx]
|
|
||||||
}
|
|
||||||
|
|
||||||
let heap_next = heap.length
|
let heap_next = heap.length;
|
||||||
|
|
||||||
function addHeapObject(obj) {
|
function addHeapObject(obj) {
|
||||||
if (heap_next === heap.length) heap.push(heap.length + 1)
|
if (heap_next === heap.length) heap.push(heap.length + 1);
|
||||||
const idx = heap_next
|
const idx = heap_next;
|
||||||
heap_next = heap[idx]
|
heap_next = heap[idx];
|
||||||
|
|
||||||
heap[idx] = obj
|
heap[idx] = obj;
|
||||||
return idx
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
function dropObject(idx) {
|
function dropObject(idx) {
|
||||||
if (idx < 132) return
|
if (idx < 132) return;
|
||||||
heap[idx] = heap_next
|
heap[idx] = heap_next;
|
||||||
heap_next = idx
|
heap_next = idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
function takeObject(idx) {
|
function takeObject(idx) {
|
||||||
const ret = getObject(idx)
|
const ret = getObject(idx);
|
||||||
dropObject(idx)
|
dropObject(idx);
|
||||||
return ret
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
let WASM_VECTOR_LEN = 0
|
let WASM_VECTOR_LEN = 0;
|
||||||
|
|
||||||
let cachedUint8Memory0 = null
|
let cachedUint8Memory0 = null;
|
||||||
|
|
||||||
function getUint8Memory0() {
|
function getUint8Memory0() {
|
||||||
if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {
|
if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {
|
||||||
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer)
|
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
|
||||||
}
|
}
|
||||||
return cachedUint8Memory0
|
return cachedUint8Memory0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cachedTextEncoder =
|
const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );
|
||||||
typeof TextEncoder !== 'undefined'
|
|
||||||
? new TextEncoder('utf-8')
|
|
||||||
: {
|
|
||||||
encode: () => {
|
|
||||||
throw Error('TextEncoder not available')
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const encodeString =
|
const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
|
||||||
typeof cachedTextEncoder.encodeInto === 'function'
|
|
||||||
? function (arg, view) {
|
? function (arg, view) {
|
||||||
return cachedTextEncoder.encodeInto(arg, view)
|
return cachedTextEncoder.encodeInto(arg, view);
|
||||||
}
|
}
|
||||||
: function (arg, view) {
|
: function (arg, view) {
|
||||||
const buf = cachedTextEncoder.encode(arg)
|
const buf = cachedTextEncoder.encode(arg);
|
||||||
view.set(buf)
|
view.set(buf);
|
||||||
return {
|
return {
|
||||||
read: arg.length,
|
read: arg.length,
|
||||||
written: buf.length,
|
written: buf.length
|
||||||
}
|
};
|
||||||
}
|
});
|
||||||
|
|
||||||
function passStringToWasm0(arg, malloc, realloc) {
|
function passStringToWasm0(arg, malloc, realloc) {
|
||||||
if (realloc === undefined) {
|
|
||||||
const buf = cachedTextEncoder.encode(arg)
|
|
||||||
const ptr = malloc(buf.length, 1) >>> 0
|
|
||||||
getUint8Memory0()
|
|
||||||
.subarray(ptr, ptr + buf.length)
|
|
||||||
.set(buf)
|
|
||||||
WASM_VECTOR_LEN = buf.length
|
|
||||||
return ptr
|
|
||||||
}
|
|
||||||
|
|
||||||
let len = arg.length
|
if (realloc === undefined) {
|
||||||
let ptr = malloc(len, 1) >>> 0
|
const buf = cachedTextEncoder.encode(arg);
|
||||||
|
const ptr = malloc(buf.length, 1) >>> 0;
|
||||||
const mem = getUint8Memory0()
|
getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
|
||||||
|
WASM_VECTOR_LEN = buf.length;
|
||||||
let offset = 0
|
return ptr;
|
||||||
|
|
||||||
for (; offset < len; offset++) {
|
|
||||||
const code = arg.charCodeAt(offset)
|
|
||||||
if (code > 0x7f) break
|
|
||||||
mem[ptr + offset] = code
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset !== len) {
|
|
||||||
if (offset !== 0) {
|
|
||||||
arg = arg.slice(offset)
|
|
||||||
}
|
}
|
||||||
ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0
|
|
||||||
const view = getUint8Memory0().subarray(ptr + offset, ptr + len)
|
|
||||||
const ret = encodeString(arg, view)
|
|
||||||
|
|
||||||
offset += ret.written
|
let len = arg.length;
|
||||||
}
|
let ptr = malloc(len, 1) >>> 0;
|
||||||
|
|
||||||
WASM_VECTOR_LEN = offset
|
const mem = getUint8Memory0();
|
||||||
return ptr
|
|
||||||
|
let offset = 0;
|
||||||
|
|
||||||
|
for (; offset < len; offset++) {
|
||||||
|
const code = arg.charCodeAt(offset);
|
||||||
|
if (code > 0x7F) break;
|
||||||
|
mem[ptr + offset] = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset !== len) {
|
||||||
|
if (offset !== 0) {
|
||||||
|
arg = arg.slice(offset);
|
||||||
|
}
|
||||||
|
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
||||||
|
const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
|
||||||
|
const ret = encodeString(arg, view);
|
||||||
|
|
||||||
|
offset += ret.written;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_VECTOR_LEN = offset;
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isLikeNone(x) {
|
function isLikeNone(x) {
|
||||||
return x === undefined || x === null
|
return x === undefined || x === null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cachedInt32Memory0 = null
|
let cachedInt32Memory0 = null;
|
||||||
|
|
||||||
function getInt32Memory0() {
|
function getInt32Memory0() {
|
||||||
if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {
|
if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {
|
||||||
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer)
|
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||||
}
|
}
|
||||||
return cachedInt32Memory0
|
return cachedInt32Memory0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cachedTextDecoder =
|
const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );
|
||||||
typeof TextDecoder !== 'undefined'
|
|
||||||
? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true })
|
|
||||||
: {
|
|
||||||
decode: () => {
|
|
||||||
throw Error('TextDecoder not available')
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof TextDecoder !== 'undefined') {
|
if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };
|
||||||
cachedTextDecoder.decode()
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStringFromWasm0(ptr, len) {
|
function getStringFromWasm0(ptr, len) {
|
||||||
ptr = ptr >>> 0
|
ptr = ptr >>> 0;
|
||||||
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len))
|
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @returns {HealthValuesResponse}
|
* @returns {HealthValuesResponse}
|
||||||
*/
|
*/
|
||||||
export function compute_health_js(c) {
|
export function compute_health_js(c) {
|
||||||
const ret = wasm.compute_health_js(addHeapObject(c))
|
const ret = wasm.compute_health_js(addHeapObject(c));
|
||||||
return takeObject(ret)
|
return takeObject(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @param {string} withdraw_denom
|
* @param {string} withdraw_denom
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function max_withdraw_estimate_js(c, withdraw_denom) {
|
export function max_withdraw_estimate_js(c, withdraw_denom) {
|
||||||
let deferred2_0
|
let deferred2_0;
|
||||||
let deferred2_1
|
let deferred2_1;
|
||||||
try {
|
try {
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16)
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
const ptr0 = passStringToWasm0(withdraw_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
const ptr0 = passStringToWasm0(withdraw_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
const len0 = WASM_VECTOR_LEN
|
const len0 = WASM_VECTOR_LEN;
|
||||||
wasm.max_withdraw_estimate_js(retptr, addHeapObject(c), ptr0, len0)
|
wasm.max_withdraw_estimate_js(retptr, addHeapObject(c), ptr0, len0);
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0]
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1]
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
deferred2_0 = r0
|
deferred2_0 = r0;
|
||||||
deferred2_1 = r1
|
deferred2_1 = r1;
|
||||||
return getStringFromWasm0(r0, r1)
|
return getStringFromWasm0(r0, r1);
|
||||||
} finally {
|
} finally {
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16)
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1)
|
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @param {string} borrow_denom
|
* @param {string} borrow_denom
|
||||||
* @param {BorrowTarget} target
|
* @param {BorrowTarget} target
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function max_borrow_estimate_js(c, borrow_denom, target) {
|
export function max_borrow_estimate_js(c, borrow_denom, target) {
|
||||||
let deferred2_0
|
let deferred2_0;
|
||||||
let deferred2_1
|
let deferred2_1;
|
||||||
try {
|
try {
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16)
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
const ptr0 = passStringToWasm0(borrow_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
const ptr0 = passStringToWasm0(borrow_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
const len0 = WASM_VECTOR_LEN
|
const len0 = WASM_VECTOR_LEN;
|
||||||
wasm.max_borrow_estimate_js(retptr, addHeapObject(c), ptr0, len0, addHeapObject(target))
|
wasm.max_borrow_estimate_js(retptr, addHeapObject(c), ptr0, len0, addHeapObject(target));
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0]
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1]
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
deferred2_0 = r0
|
deferred2_0 = r0;
|
||||||
deferred2_1 = r1
|
deferred2_1 = r1;
|
||||||
return getStringFromWasm0(r0, r1)
|
return getStringFromWasm0(r0, r1);
|
||||||
} finally {
|
} finally {
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16)
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1)
|
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @param {string} from_denom
|
* @param {string} from_denom
|
||||||
* @param {string} to_denom
|
* @param {string} to_denom
|
||||||
* @param {SwapKind} kind
|
* @param {SwapKind} kind
|
||||||
* @param {Slippage} slippage
|
* @param {Slippage} slippage
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function max_swap_estimate_js(c, from_denom, to_denom, kind, slippage) {
|
export function max_swap_estimate_js(c, from_denom, to_denom, kind, slippage) {
|
||||||
let deferred3_0
|
let deferred3_0;
|
||||||
let deferred3_1
|
let deferred3_1;
|
||||||
try {
|
try {
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16)
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
const ptr0 = passStringToWasm0(from_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
const ptr0 = passStringToWasm0(from_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
const len0 = WASM_VECTOR_LEN
|
const len0 = WASM_VECTOR_LEN;
|
||||||
const ptr1 = passStringToWasm0(to_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
const ptr1 = passStringToWasm0(to_denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
const len1 = WASM_VECTOR_LEN
|
const len1 = WASM_VECTOR_LEN;
|
||||||
wasm.max_swap_estimate_js(
|
wasm.max_swap_estimate_js(retptr, addHeapObject(c), ptr0, len0, ptr1, len1, addHeapObject(kind), addHeapObject(slippage));
|
||||||
retptr,
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
addHeapObject(c),
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
ptr0,
|
deferred3_0 = r0;
|
||||||
len0,
|
deferred3_1 = r1;
|
||||||
ptr1,
|
return getStringFromWasm0(r0, r1);
|
||||||
len1,
|
} finally {
|
||||||
addHeapObject(kind),
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
addHeapObject(slippage),
|
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
|
||||||
)
|
}
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0]
|
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1]
|
|
||||||
deferred3_0 = r0
|
|
||||||
deferred3_1 = r1
|
|
||||||
return getStringFromWasm0(r0, r1)
|
|
||||||
} finally {
|
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16)
|
|
||||||
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {HealthComputer} c
|
* @param {HealthComputer} c
|
||||||
* @param {string} denom
|
* @param {string} denom
|
||||||
* @returns {string}
|
* @param {LiquidationPriceKind} kind
|
||||||
*/
|
* @returns {string}
|
||||||
export function liquidation_price_js(c, denom) {
|
*/
|
||||||
let deferred2_0
|
export function liquidation_price_js(c, denom, kind) {
|
||||||
let deferred2_1
|
let deferred2_0;
|
||||||
try {
|
let deferred2_1;
|
||||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16)
|
try {
|
||||||
const ptr0 = passStringToWasm0(denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||||
const len0 = WASM_VECTOR_LEN
|
const ptr0 = passStringToWasm0(denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
wasm.liquidation_price_js(retptr, addHeapObject(c), ptr0, len0)
|
const len0 = WASM_VECTOR_LEN;
|
||||||
var r0 = getInt32Memory0()[retptr / 4 + 0]
|
wasm.liquidation_price_js(retptr, addHeapObject(c), ptr0, len0, addHeapObject(kind));
|
||||||
var r1 = getInt32Memory0()[retptr / 4 + 1]
|
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||||
deferred2_0 = r0
|
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||||
deferred2_1 = r1
|
deferred2_0 = r0;
|
||||||
return getStringFromWasm0(r0, r1)
|
deferred2_1 = r1;
|
||||||
} finally {
|
return getStringFromWasm0(r0, r1);
|
||||||
wasm.__wbindgen_add_to_stack_pointer(16)
|
} finally {
|
||||||
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1)
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||||
}
|
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleError(f, args) {
|
function handleError(f, args) {
|
||||||
try {
|
try {
|
||||||
return f.apply(this, args)
|
return f.apply(this, args);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
wasm.__wbindgen_exn_store(addHeapObject(e))
|
wasm.__wbindgen_exn_store(addHeapObject(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function __wbg_load(module, imports) {
|
async function __wbg_load(module, imports) {
|
||||||
if (typeof Response === 'function' && module instanceof Response) {
|
if (typeof Response === 'function' && module instanceof Response) {
|
||||||
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
||||||
try {
|
try {
|
||||||
return await WebAssembly.instantiateStreaming(module, imports)
|
return await WebAssembly.instantiateStreaming(module, imports);
|
||||||
} catch (e) {
|
|
||||||
if (module.headers.get('Content-Type') != 'application/wasm') {
|
} catch (e) {
|
||||||
console.warn(
|
if (module.headers.get('Content-Type') != 'application/wasm') {
|
||||||
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
|
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
||||||
e,
|
|
||||||
)
|
} else {
|
||||||
} else {
|
throw e;
|
||||||
throw e
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const bytes = await module.arrayBuffer()
|
const bytes = await module.arrayBuffer();
|
||||||
return await WebAssembly.instantiate(bytes, imports)
|
return await WebAssembly.instantiate(bytes, imports);
|
||||||
} else {
|
|
||||||
const instance = await WebAssembly.instantiate(module, imports)
|
|
||||||
|
|
||||||
if (instance instanceof WebAssembly.Instance) {
|
|
||||||
return { instance, module }
|
|
||||||
} else {
|
} else {
|
||||||
return instance
|
const instance = await WebAssembly.instantiate(module, imports);
|
||||||
|
|
||||||
|
if (instance instanceof WebAssembly.Instance) {
|
||||||
|
return { instance, module };
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function __wbg_get_imports() {
|
function __wbg_get_imports() {
|
||||||
const imports = {}
|
const imports = {};
|
||||||
imports.wbg = {}
|
imports.wbg = {};
|
||||||
imports.wbg.__wbindgen_object_clone_ref = function (arg0) {
|
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||||
const ret = getObject(arg0)
|
const ret = getObject(arg0);
|
||||||
return addHeapObject(ret)
|
return addHeapObject(ret);
|
||||||
}
|
};
|
||||||
imports.wbg.__wbindgen_is_undefined = function (arg0) {
|
imports.wbg.__wbindgen_is_undefined = function(arg0) {
|
||||||
const ret = getObject(arg0) === undefined
|
const ret = getObject(arg0) === undefined;
|
||||||
return ret
|
return ret;
|
||||||
}
|
};
|
||||||
imports.wbg.__wbindgen_object_drop_ref = function (arg0) {
|
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
|
||||||
takeObject(arg0)
|
takeObject(arg0);
|
||||||
}
|
};
|
||||||
imports.wbg.__wbindgen_string_get = function (arg0, arg1) {
|
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
|
||||||
const obj = getObject(arg1)
|
const obj = getObject(arg1);
|
||||||
const ret = typeof obj === 'string' ? obj : undefined
|
const ret = typeof(obj) === 'string' ? obj : undefined;
|
||||||
var ptr1 = isLikeNone(ret)
|
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||||
? 0
|
var len1 = WASM_VECTOR_LEN;
|
||||||
: passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
|
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||||
var len1 = WASM_VECTOR_LEN
|
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||||
getInt32Memory0()[arg0 / 4 + 1] = len1
|
};
|
||||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1
|
imports.wbg.__wbg_parse_670c19d4e984792e = function() { return handleError(function (arg0, arg1) {
|
||||||
}
|
const ret = JSON.parse(getStringFromWasm0(arg0, arg1));
|
||||||
imports.wbg.__wbg_parse_670c19d4e984792e = function () {
|
return addHeapObject(ret);
|
||||||
return handleError(function (arg0, arg1) {
|
}, arguments) };
|
||||||
const ret = JSON.parse(getStringFromWasm0(arg0, arg1))
|
imports.wbg.__wbg_stringify_e25465938f3f611f = function() { return handleError(function (arg0) {
|
||||||
return addHeapObject(ret)
|
const ret = JSON.stringify(getObject(arg0));
|
||||||
}, arguments)
|
return addHeapObject(ret);
|
||||||
}
|
}, arguments) };
|
||||||
imports.wbg.__wbg_stringify_e25465938f3f611f = function () {
|
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
|
||||||
return handleError(function (arg0) {
|
throw new Error(getStringFromWasm0(arg0, arg1));
|
||||||
const ret = JSON.stringify(getObject(arg0))
|
};
|
||||||
return addHeapObject(ret)
|
|
||||||
}, arguments)
|
|
||||||
}
|
|
||||||
imports.wbg.__wbindgen_throw = function (arg0, arg1) {
|
|
||||||
throw new Error(getStringFromWasm0(arg0, arg1))
|
|
||||||
}
|
|
||||||
|
|
||||||
return imports
|
return imports;
|
||||||
}
|
}
|
||||||
|
|
||||||
function __wbg_init_memory(imports, maybe_memory) {}
|
function __wbg_init_memory(imports, maybe_memory) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function __wbg_finalize_init(instance, module) {
|
function __wbg_finalize_init(instance, module) {
|
||||||
wasm = instance.exports
|
wasm = instance.exports;
|
||||||
__wbg_init.__wbindgen_wasm_module = module
|
__wbg_init.__wbindgen_wasm_module = module;
|
||||||
cachedInt32Memory0 = null
|
cachedInt32Memory0 = null;
|
||||||
cachedUint8Memory0 = null
|
cachedUint8Memory0 = null;
|
||||||
|
|
||||||
return wasm
|
|
||||||
|
return wasm;
|
||||||
}
|
}
|
||||||
|
|
||||||
function initSync(module) {
|
function initSync(module) {
|
||||||
if (wasm !== undefined) return wasm
|
if (wasm !== undefined) return wasm;
|
||||||
|
|
||||||
const imports = __wbg_get_imports()
|
const imports = __wbg_get_imports();
|
||||||
|
|
||||||
__wbg_init_memory(imports)
|
__wbg_init_memory(imports);
|
||||||
|
|
||||||
if (!(module instanceof WebAssembly.Module)) {
|
if (!(module instanceof WebAssembly.Module)) {
|
||||||
module = new WebAssembly.Module(module)
|
module = new WebAssembly.Module(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
const instance = new WebAssembly.Instance(module, imports)
|
const instance = new WebAssembly.Instance(module, imports);
|
||||||
|
|
||||||
return __wbg_finalize_init(instance, module)
|
return __wbg_finalize_init(instance, module);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function __wbg_init(input) {
|
async function __wbg_init(input) {
|
||||||
if (wasm !== undefined) return wasm
|
if (wasm !== undefined) return wasm;
|
||||||
|
|
||||||
if (typeof input === 'undefined') {
|
if (typeof input === 'undefined') {
|
||||||
input = new URL('index_bg.wasm', import.meta.url)
|
input = new URL('index_bg.wasm', import.meta.url);
|
||||||
}
|
}
|
||||||
const imports = __wbg_get_imports()
|
const imports = __wbg_get_imports();
|
||||||
|
|
||||||
if (
|
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
|
||||||
typeof input === 'string' ||
|
input = fetch(input);
|
||||||
(typeof Request === 'function' && input instanceof Request) ||
|
}
|
||||||
(typeof URL === 'function' && input instanceof URL)
|
|
||||||
) {
|
|
||||||
input = fetch(input)
|
|
||||||
}
|
|
||||||
|
|
||||||
__wbg_init_memory(imports)
|
__wbg_init_memory(imports);
|
||||||
|
|
||||||
const { instance, module } = await __wbg_load(await input, imports)
|
const { instance, module } = await __wbg_load(await input, imports);
|
||||||
|
|
||||||
return __wbg_finalize_init(instance, module)
|
return __wbg_finalize_init(instance, module);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { initSync }
|
export { initSync }
|
||||||
export default __wbg_init
|
export default __wbg_init;
|
||||||
|
Binary file not shown.
2
src/utils/health_computer/index_bg.wasm.d.ts
vendored
2
src/utils/health_computer/index_bg.wasm.d.ts
vendored
@ -14,7 +14,7 @@ export function max_swap_estimate_js(
|
|||||||
g: number,
|
g: number,
|
||||||
h: number,
|
h: number,
|
||||||
): void
|
): void
|
||||||
export function liquidation_price_js(a: number, b: number, c: number, d: number): void
|
export function liquidation_price_js(a: number, b: number, c: number, d: number, e: number): void
|
||||||
export function allocate(a: number): number
|
export function allocate(a: number): number
|
||||||
export function deallocate(a: number): void
|
export function deallocate(a: number): void
|
||||||
export function requires_iterator(): void
|
export function requires_iterator(): void
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { formatAmountWithSymbol } from './formatters'
|
import { formatAmountWithSymbol } from 'utils/formatters'
|
||||||
|
|
||||||
export function getNoBalanceMessage(symbol: string) {
|
export function getNoBalanceMessage(symbol: string) {
|
||||||
return `You don't have an ${symbol} balance in your account.`
|
return `You don't have an ${symbol} balance in your account.`
|
||||||
|
Loading…
Reference in New Issue
Block a user