Skip to content

Commit acdc74c

Browse files
committed
fix: do not use slippage suggest API for fast quotes
1 parent 5d7b77b commit acdc74c

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

packages/trading/src/getQuote.test.ts

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@ import { ETH_FLOW_DEFAULT_SLIPPAGE_BPS } from './consts'
22
import { getQuoteWithSigner, getQuoteRaw } from './getQuote'
33
import { SwapParameters } from './types'
44
import { ETH_ADDRESS, WRAPPED_NATIVE_CURRENCIES, SupportedChainId } from '@cowprotocol/sdk-config'
5-
import { OrderBookApi, OrderKind, OrderQuoteResponse } from '@cowprotocol/sdk-order-book'
5+
import { OrderBookApi, OrderKind, OrderQuoteResponse, PriceQuality } from '@cowprotocol/sdk-order-book'
66
import { AdaptersTestSetup, createAdapters } from '../tests/setup'
77
import { setGlobalAdapter } from '@cowprotocol/sdk-common'
88

9-
// Mock suggestSlippageBpsWithApi
9+
// Mock suggestSlippageBpsWithApi and suggestSlippageBps
1010
jest.mock('./suggestSlippageBpsWithApi', () => ({
1111
suggestSlippageBpsWithApi: jest.fn(),
1212
}))
13+
jest.mock('./suggestSlippageBps', () => ({
14+
suggestSlippageBps: jest.fn(),
15+
}))
1316

1417
import { suggestSlippageBpsWithApi } from './suggestSlippageBpsWithApi'
18+
import { suggestSlippageBps } from './suggestSlippageBps'
1519
const mockSuggestSlippageBpsWithApi = suggestSlippageBpsWithApi as jest.MockedFunction<typeof suggestSlippageBpsWithApi>
20+
const mockSuggestSlippageBps = suggestSlippageBps as jest.MockedFunction<typeof suggestSlippageBps>
1621

1722
const quoteResponseMock = {
1823
quote: {
@@ -358,6 +363,8 @@ describe('getQuote', () => {
358363
getQuoteMock.mockResolvedValue(quoteResponseMock)
359364
mockSuggestSlippageBpsWithApi.mockReset()
360365
mockSuggestSlippageBpsWithApi.mockResolvedValue(150)
366+
mockSuggestSlippageBps.mockReset()
367+
mockSuggestSlippageBps.mockReturnValue(100)
361368
})
362369

363370
it('should use suggestSlippageBpsWithApi to get suggested slippage', async () => {
@@ -461,5 +468,45 @@ describe('getQuote', () => {
461468
)
462469
}
463470
})
471+
472+
it('should use suggestSlippageBps instead of API when priceQuality is FAST', async () => {
473+
const adapterName = Object.keys(adapters)[0] as keyof typeof adapters
474+
setGlobalAdapter(adapters[adapterName])
475+
476+
const tradeParameters = {
477+
sellToken: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
478+
sellTokenDecimals: 18,
479+
buyToken: '0x0625afb445c3b6b7b929342a04a22599fd5dbb59',
480+
buyTokenDecimals: 18,
481+
amount: '100000000000000000',
482+
kind: OrderKind.SELL,
483+
}
484+
485+
const trader = {
486+
chainId: SupportedChainId.GNOSIS_CHAIN,
487+
appCode: '0x007',
488+
account: '0xfb3c7eb936caa12b5a884d612393969a557d4307' as const,
489+
}
490+
491+
const advancedSettings = {
492+
quoteRequest: {
493+
priceQuality: PriceQuality.FAST,
494+
},
495+
}
496+
497+
const result = await getQuoteRaw(tradeParameters, trader, advancedSettings, orderBookApiMock)
498+
499+
// Verify that suggestSlippageBps was called instead of suggestSlippageBpsWithApi
500+
expect(mockSuggestSlippageBps).toHaveBeenCalledWith({
501+
isEthFlow: false,
502+
quote: quoteResponseMock,
503+
tradeParameters,
504+
trader,
505+
advancedSettings,
506+
bffEnv: 'prod',
507+
})
508+
expect(mockSuggestSlippageBpsWithApi).not.toHaveBeenCalled()
509+
expect(result.suggestedSlippageBps).toBe(100)
510+
})
464511
})
465512
})

packages/trading/src/getQuote.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ import {
2323
import { buildAppData } from './appDataUtils'
2424
import { getOrderToSign } from './getOrderToSign'
2525
import { getOrderTypedData } from './getOrderTypedData'
26-
import { suggestSlippageBpsWithApi } from './suggestSlippageBpsWithApi'
26+
import { SuggestSlippageBpsWithApi, suggestSlippageBpsWithApi } from './suggestSlippageBpsWithApi'
2727
import { getPartnerFeeBps } from './utils/getPartnerFeeBps'
2828
import { adjustEthFlowOrderParams, getIsEthFlowOrder, swapParamsToLimitOrderParams } from './utils/misc'
2929
import { getDefaultSlippageBps } from './utils/slippage'
30+
import { suggestSlippageBps } from './suggestSlippageBps'
3031

3132
// ETH-FLOW orders require different quote params
3233
// check the isEthFlow flag and set in quote req obj
@@ -124,15 +125,20 @@ export async function getQuoteRaw(
124125

125126
const quote = await orderBookApi.getQuote(quoteRequest)
126127

127-
// Get the suggested slippage based on the quote
128-
const suggestedSlippageBps = await suggestSlippageBpsWithApi({
128+
const suggestSlippageParams: SuggestSlippageBpsWithApi = {
129129
isEthFlow,
130130
quote,
131131
tradeParameters,
132132
trader,
133133
advancedSettings,
134134
bffEnv: env,
135-
})
135+
}
136+
137+
// Get the suggested slippage based on the quote
138+
const suggestedSlippageBps =
139+
quoteRequest.priceQuality === PriceQuality.FAST
140+
? suggestSlippageBps(suggestSlippageParams)
141+
: await suggestSlippageBpsWithApi(suggestSlippageParams)
136142

137143
const commonResult = {
138144
isEthFlow,

0 commit comments

Comments
 (0)