Commit 04e4335c authored by Tina's avatar Tina Committed by GitHub

feat: Use routing-api or URA for price fetches behind feature flag (#6740)

use routing-api or URA for price fetches behind feature flag
parent 4235b57c
import { BaseVariant, FeatureFlag, featureFlagSettings, useUpdateFlag } from 'featureFlags' import { BaseVariant, FeatureFlag, featureFlagSettings, useUpdateFlag } from 'featureFlags'
import { useNativeUSDCArbitrumFlag } from 'featureFlags/flags/nativeUsdcArbitrum' import { useNativeUSDCArbitrumFlag } from 'featureFlags/flags/nativeUsdcArbitrum'
import { DetailsV2Variant, useDetailsV2Flag } from 'featureFlags/flags/nftDetails' import { DetailsV2Variant, useDetailsV2Flag } from 'featureFlags/flags/nftDetails'
import { useRoutingAPIForPriceFlag } from 'featureFlags/flags/priceRoutingApi'
import { TraceJsonRpcVariant, useTraceJsonRpcFlag } from 'featureFlags/flags/traceJsonRpc' import { TraceJsonRpcVariant, useTraceJsonRpcFlag } from 'featureFlags/flags/traceJsonRpc'
import { UnifiedRouterVariant, useRoutingAPIV2Flag } from 'featureFlags/flags/unifiedRouter' import { UnifiedRouterVariant, useRoutingAPIV2Flag } from 'featureFlags/flags/unifiedRouter'
import { useUpdateAtom } from 'jotai/utils' import { useUpdateAtom } from 'jotai/utils'
...@@ -221,6 +222,12 @@ export default function FeatureFlagModal() { ...@@ -221,6 +222,12 @@ export default function FeatureFlagModal() {
featureFlag={FeatureFlag.nativeUsdcArbitrum} featureFlag={FeatureFlag.nativeUsdcArbitrum}
label="Enable Circle native USDC on Arbitrum" label="Enable Circle native USDC on Arbitrum"
/> />
<FeatureFlagOption
variant={BaseVariant}
value={useRoutingAPIForPriceFlag()}
featureFlag={FeatureFlag.routingAPIPrice}
label="Use the URA or routing-api for price fetches"
/>
<FeatureFlagGroup name="Debug"> <FeatureFlagGroup name="Debug">
<FeatureFlagOption <FeatureFlagOption
variant={TraceJsonRpcVariant} variant={TraceJsonRpcVariant}
......
import { BaseVariant, FeatureFlag, useBaseFlag } from '../index'
export function useRoutingAPIForPriceFlag(): BaseVariant {
return useBaseFlag(FeatureFlag.routingAPIPrice)
}
export function useRoutingAPIForPrice(): boolean {
return useRoutingAPIForPriceFlag() === BaseVariant.Enabled
}
...@@ -13,6 +13,7 @@ export enum FeatureFlag { ...@@ -13,6 +13,7 @@ export enum FeatureFlag {
uraEnabled = 'ura_enabled', uraEnabled = 'ura_enabled',
debounceSwapQuote = 'debounce_swap_quote', debounceSwapQuote = 'debounce_swap_quote',
nativeUsdcArbitrum = 'web_usdc_arbitrum', nativeUsdcArbitrum = 'web_usdc_arbitrum',
routingAPIPrice = 'routing_api_price',
} }
interface FeatureFlagsContextType { interface FeatureFlagsContextType {
......
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core' import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { useRoutingAPIForPrice } from 'featureFlags/flags/priceRoutingApi'
import { useMemo } from 'react' import { useMemo } from 'react'
import { GetQuoteArgs, INTERNAL_ROUTER_PREFERENCE_PRICE, RouterPreference } from 'state/routing/slice' import { GetQuoteArgs, INTERNAL_ROUTER_PREFERENCE_PRICE, RouterPreference } from 'state/routing/slice'
import { currencyAddressForSwapQuote } from 'state/routing/utils' import { currencyAddressForSwapQuote } from 'state/routing/utils'
...@@ -21,6 +22,7 @@ export function useRoutingAPIArguments({ ...@@ -21,6 +22,7 @@ export function useRoutingAPIArguments({
tradeType: TradeType tradeType: TradeType
routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE
}): GetQuoteArgs | undefined { }): GetQuoteArgs | undefined {
const isRoutingAPIPrice = useRoutingAPIForPrice()
return useMemo( return useMemo(
() => () =>
!tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) || tokenIn.wrapped.equals(tokenOut.wrapped) !tokenIn || !tokenOut || !amount || tokenIn.equals(tokenOut) || tokenIn.wrapped.equals(tokenOut.wrapped)
...@@ -37,7 +39,8 @@ export function useRoutingAPIArguments({ ...@@ -37,7 +39,8 @@ export function useRoutingAPIArguments({
tokenOutSymbol: tokenOut.wrapped.symbol, tokenOutSymbol: tokenOut.wrapped.symbol,
routerPreference, routerPreference,
tradeType, tradeType,
isRoutingAPIPrice,
}, },
[amount, routerPreference, tokenIn, tokenOut, tradeType] [amount, routerPreference, tokenIn, tokenOut, tradeType, isRoutingAPIPrice]
) )
} }
...@@ -40,6 +40,7 @@ export interface GetQuoteArgs { ...@@ -40,6 +40,7 @@ export interface GetQuoteArgs {
amount: string amount: string
routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE
tradeType: TradeType tradeType: TradeType
isRoutingAPIPrice?: boolean
} }
enum QuoteState { enum QuoteState {
...@@ -83,7 +84,7 @@ export const routingApi = createApi({ ...@@ -83,7 +84,7 @@ export const routingApi = createApi({
) )
}, },
async queryFn(args, _api, _extraOptions, fetch) { async queryFn(args, _api, _extraOptions, fetch) {
if (shouldUseAPIRouter(args.routerPreference)) { if (shouldUseAPIRouter(args)) {
try { try {
const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, tradeType } = args const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, tradeType } = args
const type = isExactInput(tradeType) ? 'exactIn' : 'exactOut' const type = isExactInput(tradeType) ? 'exactIn' : 'exactOut'
......
...@@ -187,8 +187,11 @@ export function currencyAddressForSwapQuote(currency: Currency): string { ...@@ -187,8 +187,11 @@ export function currencyAddressForSwapQuote(currency: Currency): string {
return currency.address return currency.address
} }
export function shouldUseAPIRouter( export function shouldUseAPIRouter(args: GetQuoteArgs): boolean {
routerPreference?: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE const { routerPreference, isRoutingAPIPrice } = args
): boolean { if (routerPreference === INTERNAL_ROUTER_PREFERENCE_PRICE && isRoutingAPIPrice) {
return true
}
return routerPreference === RouterPreference.API || routerPreference === RouterPreference.AUTO return routerPreference === RouterPreference.API || routerPreference === RouterPreference.AUTO
} }
...@@ -54,8 +54,7 @@ export const routingApiV2 = createApi({ ...@@ -54,8 +54,7 @@ export const routingApiV2 = createApi({
) )
}, },
async queryFn(args: GetQuoteArgs, _api, _extraOptions, fetch) { async queryFn(args: GetQuoteArgs, _api, _extraOptions, fetch) {
const routerPreference = args.routerPreference if (shouldUseAPIRouter(args)) {
if (shouldUseAPIRouter(routerPreference)) {
try { try {
const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, tradeType } = args const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, tradeType } = args
const type = isExactInput(tradeType) ? 'EXACT_INPUT' : 'EXACT_OUTPUT' const type = isExactInput(tradeType) ? 'EXACT_INPUT' : 'EXACT_OUTPUT'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment