add new swap url

This commit is contained in:
Adrian Brzeziński 2024-05-22 14:01:46 +02:00
parent ea8ab3bc0e
commit bedc864717
6 changed files with 51 additions and 28 deletions

View File

@ -38,6 +38,7 @@ import useJupiterSwapData from './useJupiterSwapData'
// import { Transaction } from '@solana/web3.js' // import { Transaction } from '@solana/web3.js'
import { import {
JUPITER_V6_QUOTE_API_MAINNET, JUPITER_V6_QUOTE_API_MAINNET,
MANGO_ROUTER_API_URL,
SOUND_SETTINGS_KEY, SOUND_SETTINGS_KEY,
} from 'utils/constants' } from 'utils/constants'
import useLocalStorageState from 'hooks/useLocalStorageState' import useLocalStorageState from 'hooks/useLocalStorageState'
@ -216,23 +217,29 @@ export const fetchJupiterTransaction = async (
slippage: number, slippage: number,
inputMint: PublicKey, inputMint: PublicKey,
outputMint: PublicKey, outputMint: PublicKey,
origin?: 'mango' | 'jupiter' | 'raydium',
): Promise<[TransactionInstruction[], AddressLookupTableAccount[]]> => { ): Promise<[TransactionInstruction[], AddressLookupTableAccount[]]> => {
// docs https://station.jup.ag/api-v6/post-swap // docs https://station.jup.ag/api-v6/post-swap
const transactions = await ( const transactions = await (
await fetch(`${JUPITER_V6_QUOTE_API_MAINNET}/swap`, { await fetch(
method: 'POST', `${
headers: { origin === 'mango' ? MANGO_ROUTER_API_URL : JUPITER_V6_QUOTE_API_MAINNET
'Content-Type': 'application/json', }/swap`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
// response from /quote api
quoteResponse: selectedRoute,
// user public key to be used for the swap
userPublicKey,
slippageBps: Math.ceil(slippage * 100),
wrapAndUnwrapSol: false,
}),
}, },
body: JSON.stringify({ )
// response from /quote api
quoteResponse: selectedRoute,
// user public key to be used for the swap
userPublicKey,
slippageBps: Math.ceil(slippage * 100),
wrapAndUnwrapSol: false,
}),
})
).json() ).json()
const { swapTransaction } = transactions const { swapTransaction } = transactions
@ -451,6 +458,7 @@ const SwapReviewRouteInfo = ({
slippage, slippage,
inputBank.mint, inputBank.mint,
outputBank.mint, outputBank.mint,
selectedRoute.origin,
) )
try { try {

View File

@ -110,6 +110,7 @@ const fetchJupiterRoute = async (
slippage, slippage,
new PublicKey(inputMint), new PublicKey(inputMint),
new PublicKey(outputMint), new PublicKey(outputMint),
'jupiter',
) )
if ( if (
@ -236,9 +237,10 @@ const fetchMangoRoute = async (
throw 'No route found' throw 'No route found'
} }
const res = await response.json() const res = await response.json()
if (res.outAmount) { if (res.outAmount) {
resolve({ resolve({
bestRoute: res, bestRoute: { ...res, origin: 'mango' },
}) })
} else { } else {
reject('No route found') reject('No route found')
@ -378,7 +380,6 @@ export async function handleGetRoutes(
wallet, wallet,
sendAnalytics, sendAnalytics,
) )
routes.push(jupiterDirectRoute) routes.push(jupiterDirectRoute)
} }

View File

@ -278,6 +278,7 @@ export default function SpotMarketOrderSwapForm() {
slippage, slippage,
inputBank.mint, inputBank.mint,
outputBank.mint, outputBank.mint,
selectedRoute.origin,
) )
try { try {

View File

@ -2,21 +2,34 @@ import useMangoAccount from './useMangoAccount'
import { useWallet } from '@solana/wallet-adapter-react' import { useWallet } from '@solana/wallet-adapter-react'
import { WHITE_LIST_API } from 'utils/constants' import { WHITE_LIST_API } from 'utils/constants'
import useMangoGroup from './useMangoGroup' import useMangoGroup from './useMangoGroup'
import { PublicKey } from '@metaplex-foundation/js' import { useCallback, useMemo } from 'react'
import { useCallback } from 'react'
export default function useAnalytics() { export default function useAnalytics() {
const { group } = useMangoGroup() const { group } = useMangoGroup()
const { mangoAccountAddress, mangoAccount } = useMangoAccount() const { mangoAccountAddress, mangoAccount } = useMangoAccount()
const { publicKey } = useWallet() const { publicKey } = useWallet()
const analyticsTokenBank = group?.getFirstBankByMint( // eslint-disable-next-line react-hooks/exhaustive-deps
new PublicKey('EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm'), const ignoredMints = [
) 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',
const val = 'So11111111111111111111111111111111111111112',
mangoAccount && analyticsTokenBank 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
? mangoAccount.getTokenBalanceUi(analyticsTokenBank) * 'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1',
analyticsTokenBank.uiPrice '7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn',
: 0 '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj',
]
const banks = useMemo(() => {
return group && mangoAccount
? [...group.banksMapByMint.values()].filter(
(x) =>
x.length &&
x[0] &&
x[0].collateralFeePerDay > 0 &&
!ignoredMints.includes(x[0].mint.toBase58()) &&
mangoAccount.getTokenBalanceUi(x[0]) * x[0].uiPrice > 10000,
)
: []
}, [group, ignoredMints, mangoAccount])
const sendAnalytics = useCallback( const sendAnalytics = useCallback(
async (data: object, tag: string) => { async (data: object, tag: string) => {
if ( if (
@ -24,7 +37,7 @@ export default function useAnalytics() {
tag && tag &&
data && data &&
mangoAccountAddress && mangoAccountAddress &&
val >= 10000 banks.length
) { ) {
const enchantedData = JSON.stringify({ const enchantedData = JSON.stringify({
mangoAccountAddress: mangoAccountAddress, mangoAccountAddress: mangoAccountAddress,
@ -45,7 +58,7 @@ export default function useAnalytics() {
}) })
} }
}, },
[val, mangoAccountAddress, publicKey], [banks, mangoAccountAddress, publicKey],
) )
return { return {

View File

@ -124,6 +124,7 @@ export interface JupiterV6RouteInfo {
timeTaken?: number timeTaken?: number
error?: string error?: string
instructions?: TransactionInstruction[] instructions?: TransactionInstruction[]
origin?: 'jupiter' | 'mango' | 'raydium'
} }
export interface JupiterV6RoutePlan { export interface JupiterV6RoutePlan {

View File

@ -269,7 +269,6 @@ export const getSwapTransaction = async (
slippage, slippage,
directionIn, directionIn,
) )
console.log(bestRoute, '@@@')
const tokenInAta = getAssociatedTokenAddressSync( const tokenInAta = getAssociatedTokenAddressSync(
new PublicKey(directionIn ? bestRoute.outputMint : bestRoute.inputMint), new PublicKey(directionIn ? bestRoute.outputMint : bestRoute.inputMint),