fix swap fee for osmosis (#725)
This commit is contained in:
parent
0960f84b58
commit
ebe05b12fd
@ -1,14 +1,23 @@
|
|||||||
export default async function getPools(
|
import { BN_ZERO } from 'constants/math'
|
||||||
|
import { STANDARD_SWAP_FEE } from 'utils/constants'
|
||||||
|
|
||||||
|
export default async function getOsmosisSwapFee(
|
||||||
chainConfig: ChainConfig,
|
chainConfig: ChainConfig,
|
||||||
poolIds: string[],
|
poolIds: string[],
|
||||||
): Promise<Pool[]> {
|
): Promise<number> {
|
||||||
const promises = poolIds.map((poolId) =>
|
const promises = poolIds.map((poolId) =>
|
||||||
fetch(chainConfig.endpoints.pools.replace('POOL_ID', poolId)),
|
fetch(chainConfig.endpoints.pools.replace('POOL_ID', poolId)),
|
||||||
)
|
)
|
||||||
|
|
||||||
const responses = await Promise.all(promises)
|
const responses = await Promise.all(promises)
|
||||||
|
|
||||||
return await Promise.all(responses.map(async (pool) => (await pool.json()).pool as Pool))
|
const pools = await Promise.all(responses.map(async (pool) => (await pool.json()).pool as Pool))
|
||||||
|
|
||||||
|
if (!pools?.length) return STANDARD_SWAP_FEE
|
||||||
|
|
||||||
|
return pools
|
||||||
|
.reduce((acc, pool) => acc.plus(pool?.pool_params?.swap_fee || STANDARD_SWAP_FEE), BN_ZERO)
|
||||||
|
.toNumber()
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Pool {
|
interface Pool {
|
@ -62,7 +62,7 @@ export default function TradeSummary(props: Props) {
|
|||||||
const assets = useAllAssets()
|
const assets = useAllAssets()
|
||||||
const sellAssetPrice = usePrice(sellAsset.denom)
|
const sellAssetPrice = usePrice(sellAsset.denom)
|
||||||
// FIXME: ⛓️ Swap fee needs to be chainagnostic!
|
// FIXME: ⛓️ Swap fee needs to be chainagnostic!
|
||||||
const swapFee = useSwapFee([])
|
const swapFee = useSwapFee(route.map((route) => route.pool_id))
|
||||||
const [showSummary, setShowSummary] = useToggle()
|
const [showSummary, setShowSummary] = useToggle()
|
||||||
const { liquidationPrice, isUpdatingLiquidationPrice } = useLiquidationPrice(
|
const { liquidationPrice, isUpdatingLiquidationPrice } = useLiquidationPrice(
|
||||||
props.liquidationPrice,
|
props.liquidationPrice,
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
import useSWR from 'swr'
|
import useSWR from 'swr'
|
||||||
|
|
||||||
import getSwapFees from 'api/swap/getPools'
|
import getOsmosisSwapFee from 'api/swap/getOsmosisSwapFee'
|
||||||
import { BN_ZERO } from 'constants/math'
|
|
||||||
import useChainConfig from 'hooks/useChainConfig'
|
import useChainConfig from 'hooks/useChainConfig'
|
||||||
|
import { ChainInfoID } from 'types/enums/wallet'
|
||||||
const STANDARD_SWAP_FEE = 0.002
|
import { STANDARD_SWAP_FEE } from 'utils/constants'
|
||||||
|
|
||||||
export default function useSwapFee(poolIds: string[]) {
|
export default function useSwapFee(poolIds: string[]) {
|
||||||
const chainConfig = useChainConfig()
|
const chainConfig = useChainConfig()
|
||||||
const { data: pools } = useSWR(
|
const { data: swapFee } = useSWR(
|
||||||
`chains/${chainConfig.id}/swapFees/${poolIds.join(',')}`,
|
`chains/${chainConfig.id}/swapFees/${poolIds.join(',')}`,
|
||||||
() => getSwapFees(chainConfig, poolIds),
|
() => {
|
||||||
|
if (chainConfig.id === ChainInfoID.Pion1) {
|
||||||
|
return STANDARD_SWAP_FEE
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOsmosisSwapFee(chainConfig, poolIds)
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!pools?.length) return STANDARD_SWAP_FEE
|
return swapFee ?? STANDARD_SWAP_FEE
|
||||||
|
|
||||||
return pools
|
|
||||||
.reduce((acc, pool) => acc.plus(pool?.pool_params?.swap_fee || STANDARD_SWAP_FEE), BN_ZERO)
|
|
||||||
.toNumber()
|
|
||||||
}
|
}
|
||||||
|
29
src/types/interfaces/swap.d.ts
vendored
Normal file
29
src/types/interfaces/swap.d.ts
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
export interface AstroportSwapRouteResponse {
|
||||||
|
amount_in: string
|
||||||
|
amount_out: string
|
||||||
|
decimals_in: number
|
||||||
|
decimals_out: number
|
||||||
|
denom_in: string
|
||||||
|
denom_out: string
|
||||||
|
id: string
|
||||||
|
price_difference: number
|
||||||
|
price_impact: number
|
||||||
|
price_in: number
|
||||||
|
price_out: number
|
||||||
|
swaps: Swap[]
|
||||||
|
value_in: string
|
||||||
|
value_out: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AstroportSwapResponse {
|
||||||
|
contract_addr: string
|
||||||
|
from: string
|
||||||
|
illiquid: boolean
|
||||||
|
to: string
|
||||||
|
type: SwapPoolType
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum AstroportSwapPoolType {
|
||||||
|
XYK = 'xyk',
|
||||||
|
PCL = 'pcl',
|
||||||
|
}
|
@ -21,3 +21,4 @@ export const DEFAULT_PORTFOLIO_STATS = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
export const ENABLE_AUTO_REPAY = true
|
export const ENABLE_AUTO_REPAY = true
|
||||||
|
export const STANDARD_SWAP_FEE = 0.002
|
||||||
|
Loading…
Reference in New Issue
Block a user