Skip to content

Commit

Permalink
2416/2417/2418, update lifi & rango subproviders (#628)
Browse files Browse the repository at this point in the history
  • Loading branch information
axtezy authored May 3, 2024
2 parents 5111ffa + b2b33f1 commit 63979b5
Show file tree
Hide file tree
Showing 19 changed files with 234 additions and 194 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rubic-sdk",
"version": "5.17.6",
"version": "5.17.7",
"description": "Simplify dApp creation",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import {
RangoRoutingResultType,
RangoSwapperType
} from './rango-api-common-types';
import { RubicTradeTypeForRango } from './rango-api-trade-types';
import { RangoTradeType } from './rango-api-trade-types';

export interface RangoBestRouteRequestOptions {
slippageTolerance: number;
swapperGroups?: RubicTradeTypeForRango[];
swapperGroups?: RangoTradeType[];
swappersGroupsExclude?: boolean;
}

Expand Down
157 changes: 91 additions & 66 deletions src/features/common/providers/rango/models/rango-api-trade-types.ts
Original file line number Diff line number Diff line change
@@ -1,74 +1,99 @@
import { BRIDGE_TYPE } from 'src/features/cross-chain/calculation-manager/providers/common/models/bridge-type';
import { ON_CHAIN_TRADE_TYPE } from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';
import {
BRIDGE_TYPE,
BridgeType
} from 'src/features/cross-chain/calculation-manager/providers/common/models/bridge-type';
import {
ON_CHAIN_TRADE_TYPE,
OnChainTradeType
} from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';

export const rangoOnChainTradeTypes = {
[ON_CHAIN_TRADE_TYPE['10K_SWAP']]: '10KSwap',
[ON_CHAIN_TRADE_TYPE.PANGOLIN]: 'Pangolin Swap',
[ON_CHAIN_TRADE_TYPE.SUSHI_SWAP]: 'Sushi Swap',
[ON_CHAIN_TRADE_TYPE.OSMOSIS_SWAP]: 'Osmosis',
[ON_CHAIN_TRADE_TYPE.UNISWAP_V2]: 'UniSwapV2',
[ON_CHAIN_TRADE_TYPE.VVS_FINANCE]: 'VVS Finance',
[ON_CHAIN_TRADE_TYPE.MM_FINANCE]: 'MM Finance',
[ON_CHAIN_TRADE_TYPE.CRONA_SWAP]: 'Crona Swap',
[ON_CHAIN_TRADE_TYPE.OOLONG_SWAP]: 'Oolong Swap',
[ON_CHAIN_TRADE_TYPE.TRISOLARIS]: 'Trisolaris Swap',
[ON_CHAIN_TRADE_TYPE.MOJITO_SWAP]: 'Mojito Swap',
[ON_CHAIN_TRADE_TYPE.NET_SWAP]: 'Netswap',
[ON_CHAIN_TRADE_TYPE.VOLTAGE_SWAP]: 'Voltage Swap',
[ON_CHAIN_TRADE_TYPE.PANCAKE_SWAP]: 'PancakeV2',
[ON_CHAIN_TRADE_TYPE.PANCAKE_SWAP_V3]: 'PancakeV3',
[ON_CHAIN_TRADE_TYPE.UNI_SWAP_V3]: 'UniSwapV3',
[ON_CHAIN_TRADE_TYPE.KYBER_SWAP]: 'KyberSwapV3',
[ON_CHAIN_TRADE_TYPE.JUPITER]: 'Jupiter',
[ON_CHAIN_TRADE_TYPE.OPEN_OCEAN]: 'Open Ocean',
[ON_CHAIN_TRADE_TYPE.CURVE]: 'CurveFi',
[ON_CHAIN_TRADE_TYPE.QUICK_SWAP]: 'Quick Swap',
[ON_CHAIN_TRADE_TYPE.XY_DEX]: 'XY Finance',
[ON_CHAIN_TRADE_TYPE.SOLAR_BEAM]: 'Solarbeam',
[ON_CHAIN_TRADE_TYPE.AURORA_SWAP]: 'Aurora Swap',
[ON_CHAIN_TRADE_TYPE.STELLA_SWAP]: 'Stella Swap',
[ON_CHAIN_TRADE_TYPE.ONE_INCH]: '1Inch',
[ON_CHAIN_TRADE_TYPE.BEAM_SWAP]: 'Beam Swap',
[ON_CHAIN_TRADE_TYPE.PARA_SWAP]: 'ParaSwap',
[ON_CHAIN_TRADE_TYPE.SYNAPSE]: 'Synapse Swapper',
[ON_CHAIN_TRADE_TYPE.FINKUJIRA]: 'Fin Kujira',
[ON_CHAIN_TRADE_TYPE.SOLANA]: 'Solana Wrapper',
[ON_CHAIN_TRADE_TYPE.AVNU]: 'Avnu',
[ON_CHAIN_TRADE_TYPE.ECHO_DEX]: 'EchoDEX',
[ON_CHAIN_TRADE_TYPE.SPACEFI_SWAP]: 'SpaceFi',
[ON_CHAIN_TRADE_TYPE.WYND]: 'Wynd Dex',
[ON_CHAIN_TRADE_TYPE.SUN_SWAP]: 'Sun Swap',
[ON_CHAIN_TRADE_TYPE.MDEX]: 'MDex',
[ON_CHAIN_TRADE_TYPE.OKC_SWAP]: 'Okc Swap',
[ON_CHAIN_TRADE_TYPE.CHERRY_SWAP]: 'Cherry Swap'
const RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS = {
'10KSwap': ON_CHAIN_TRADE_TYPE['10K_SWAP'],
'Pangolin Swap': ON_CHAIN_TRADE_TYPE.PANGOLIN,
'Sushi Swap': ON_CHAIN_TRADE_TYPE.SUSHI_SWAP,
Osmosis: ON_CHAIN_TRADE_TYPE.OSMOSIS_SWAP,
UniSwapV2: ON_CHAIN_TRADE_TYPE.UNISWAP_V2,
'VVS Finance': ON_CHAIN_TRADE_TYPE.VVS_FINANCE,
'MM Finance': ON_CHAIN_TRADE_TYPE.MM_FINANCE,
'Crona Swap': ON_CHAIN_TRADE_TYPE.CRONA_SWAP,
'Oolong Swap': ON_CHAIN_TRADE_TYPE.OOLONG_SWAP,
'Trisolaris Swap': ON_CHAIN_TRADE_TYPE.TRISOLARIS,
'Mojito Swap': ON_CHAIN_TRADE_TYPE.MOJITO_SWAP,
Netswap: ON_CHAIN_TRADE_TYPE.NET_SWAP,
'Voltage Swap': ON_CHAIN_TRADE_TYPE.VOLTAGE_SWAP,
PancakeV2: ON_CHAIN_TRADE_TYPE.PANCAKE_SWAP,
PancakeV3: ON_CHAIN_TRADE_TYPE.PANCAKE_SWAP_V3,
UniSwapV3: ON_CHAIN_TRADE_TYPE.UNI_SWAP_V3,
KyberSwapV3: ON_CHAIN_TRADE_TYPE.KYBER_SWAP,
Jupiter: ON_CHAIN_TRADE_TYPE.JUPITER,
'Open Ocean': ON_CHAIN_TRADE_TYPE.OPEN_OCEAN,
CurveFi: ON_CHAIN_TRADE_TYPE.CURVE,
'Quick Swap': ON_CHAIN_TRADE_TYPE.QUICK_SWAP,
'XY Finance': ON_CHAIN_TRADE_TYPE.XY_DEX,
Solarbeam: ON_CHAIN_TRADE_TYPE.SOLAR_BEAM,
'Aurora Swap': ON_CHAIN_TRADE_TYPE.AURORA_SWAP,
'Stella Swap': ON_CHAIN_TRADE_TYPE.STELLA_SWAP,
'1Inch': ON_CHAIN_TRADE_TYPE.ONE_INCH,
'Beam Swap': ON_CHAIN_TRADE_TYPE.BEAM_SWAP,
ParaSwap: ON_CHAIN_TRADE_TYPE.PARA_SWAP,
'Synapse Swapper': ON_CHAIN_TRADE_TYPE.SYNAPSE,
'Fin Kujira': ON_CHAIN_TRADE_TYPE.FINKUJIRA,
'Solana Wrapper': ON_CHAIN_TRADE_TYPE.SOLANA,
Avnu: ON_CHAIN_TRADE_TYPE.AVNU,
EchoDEX: ON_CHAIN_TRADE_TYPE.ECHO_DEX,
SpaceFi: ON_CHAIN_TRADE_TYPE.SPACEFI_SWAP,
'Wynd Dex': ON_CHAIN_TRADE_TYPE.WYND,
'Sun Swap': ON_CHAIN_TRADE_TYPE.SUN_SWAP,
MDex: ON_CHAIN_TRADE_TYPE.MDEX,
'Okc Swap': ON_CHAIN_TRADE_TYPE.OKC_SWAP,
'Cherry Swap': ON_CHAIN_TRADE_TYPE.CHERRY_SWAP
// If you need to disable manually some dex or bridge in code and this dex/bridge not included in config - you can get
// full list of rango dexes here https://api.rango.exchange/basic/meta/swappers?apiKey=c6381a79-2817-4602-83bf-6a641a409e32
} as const;

export const rangoCrossChainTradeTypes = {
[BRIDGE_TYPE.ACROSS]: 'Across',
[BRIDGE_TYPE.VOYAGER]: 'Voyager',
[BRIDGE_TYPE.CBRIDGE]: 'CBridge',
[BRIDGE_TYPE.RAINBOW]: 'Rainbow Bridge',
[BRIDGE_TYPE.SYNAPSE]: 'Synapse Bridge',
[BRIDGE_TYPE.OPTIMISM_GATEWAY]: 'Optimism Bridge',
[BRIDGE_TYPE.ORBITER_BRIDGE]: 'Orbiter',
[BRIDGE_TYPE.MAYA_PROTOCOL]: 'Maya Protocol',
[BRIDGE_TYPE.XY]: 'XY Finance',
[BRIDGE_TYPE.THORCHAIN]: 'ThorChain',
[BRIDGE_TYPE.ARBITRUM_BRIDGE]: 'Arbitrum Bridge',
[BRIDGE_TYPE.ALLBRIDGE]: 'AllBridge',
[BRIDGE_TYPE.HYPHEN]: 'Hyphen',
[BRIDGE_TYPE.CIRCLE_CELER_BRIDGE]: 'Circle',
[BRIDGE_TYPE.IBC]: 'IBC',
[BRIDGE_TYPE.STARGATE]: 'Stargate',
[BRIDGE_TYPE.SATELLITE]: 'Satellite',
[BRIDGE_TYPE.SYMBIOSIS]: 'Symbiosis',
[BRIDGE_TYPE.OSMOSIS_BRIDGE]: 'Osmosis'
export const RUBIC_TO_RANGO_ON_CHAIN_PROVIDERS = Object.entries(
RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS
).reduce(
(acc, [key, value]) => ({ ...acc, [value]: key }),
{} as Record<OnChainTradeType, RangoOnChainTradeType>
);

const RANGO_TO_RUBIC_CROSS_CHAIN_PROVIDERS = {
Across: BRIDGE_TYPE.ACROSS,
Voyager: BRIDGE_TYPE.VOYAGER,
CBridge: BRIDGE_TYPE.CBRIDGE,
'Rainbow Bridge': BRIDGE_TYPE.RAINBOW,
'Synapse Bridge': BRIDGE_TYPE.SYNAPSE,
'Optimism Bridge': BRIDGE_TYPE.OPTIMISM_GATEWAY,
Orbiter: BRIDGE_TYPE.ORBITER_BRIDGE,
'Maya Protocol': BRIDGE_TYPE.MAYA_PROTOCOL,
'XY Finance': BRIDGE_TYPE.XY,
ThorChain: BRIDGE_TYPE.THORCHAIN,
'Arbitrum Bridge': BRIDGE_TYPE.ARBITRUM_BRIDGE,
AllBridge: BRIDGE_TYPE.ALLBRIDGE,
Hyphen: BRIDGE_TYPE.HYPHEN,
Circle: BRIDGE_TYPE.CIRCLE_CELER_BRIDGE,
IBC: BRIDGE_TYPE.IBC,
Stargate: BRIDGE_TYPE.STARGATE,
Satellite: BRIDGE_TYPE.SATELLITE,
Symbiosis: BRIDGE_TYPE.SYMBIOSIS,
Osmosis: BRIDGE_TYPE.OSMOSIS_BRIDGE
// Full list rango bridges here https://api.rango.exchange/basic/meta/swappers?apiKey=c6381a79-2817-4602-83bf-6a641a409e32
} as const;

export const RANGO_TO_RUBIC_PROVIDERS = {
...RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS,
...RANGO_TO_RUBIC_CROSS_CHAIN_PROVIDERS
} as const;

export const rangoTradeTypes = { ...rangoOnChainTradeTypes, ...rangoCrossChainTradeTypes } as const;
export const RUBIC_TO_RANGO_PROVIDERS = Object.entries(RANGO_TO_RUBIC_PROVIDERS).reduce(
(acc, [key, value]) => ({ ...acc, [value]: key }),
{} as Record<OnChainTradeType | BridgeType, RangoTradeType>
);

export type RubicOnChainTradeTypeForRango = keyof typeof rangoOnChainTradeTypes;
export type RubicOnChainTradeTypeForRango =
(typeof RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS)[keyof typeof RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS];

export type RubicTradeTypeForRango = keyof typeof rangoTradeTypes;
export type RangoOnChainTradeType = keyof typeof RANGO_TO_RUBIC_ON_CHAIN_PROVIDERS;

export type RangoTradeType = (typeof rangoTradeTypes)[keyof typeof rangoTradeTypes];
export type RangoTradeType = keyof typeof RANGO_TO_RUBIC_PROVIDERS;
13 changes: 4 additions & 9 deletions src/features/common/providers/rango/services/rango-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { FAKE_WALLET_ADDRESS } from 'src/features/common/constants/fake-wallet-a
import { RANGO_API_KEY } from '../constants/rango-api-common';
import { RangoBestRouteRequestOptions } from '../models/rango-api-best-route-types';
import { RangoSwapRequestOptions } from '../models/rango-api-swap-types';
import { RubicTradeTypeForRango } from '../models/rango-api-trade-types';
import {
RangoBestRouteQueryParams,
RangoSwapQueryParams,
Expand All @@ -31,17 +30,15 @@ export class RangoCommonParser {

const apiKey = RANGO_API_KEY;

const swapperGroups = options.swapperGroups
?.map(swapper => RangoUtils.getTradeTypeForRango(swapper as RubicTradeTypeForRango))
.join(',');
const swapperGroups = options.swapperGroups?.join(',');

return {
apiKey,
from: fromParam,
to: toParam,
amount: amountParam,
...(options.slippageTolerance && { slippage: options.slippageTolerance * 100 }),
...(swapperGroups?.length && { swapperGroups }),
...(options.swapperGroups?.length && { swapperGroups }),
swappersGroupsExclude: options?.swappersGroupsExclude ?? true,
contractCall: true
};
Expand All @@ -66,9 +63,7 @@ export class RangoCommonParser {
const slippage = options.slippageTolerance * 100;
const apiKey = RANGO_API_KEY;

const swapperGroups = options.swapperGroups
?.map(swapper => RangoUtils.getTradeTypeForRango(swapper as RubicTradeTypeForRango))
.join(',');
const swapperGroups = options.swapperGroups?.join(',');

return {
apiKey,
Expand All @@ -78,7 +73,7 @@ export class RangoCommonParser {
fromAddress,
slippage,
toAddress,
...(swapperGroups?.length && { swapperGroups }),
...(options.swapperGroups?.length && { swapperGroups }),
swappersGroupsExclude: options?.swappersGroupsExclude ?? true,
contractCall: true
};
Expand Down
35 changes: 2 additions & 33 deletions src/features/common/providers/rango/utils/rango-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,7 @@ import { OnChainTradeType } from 'src/features/on-chain/calculation-manager/prov
import { rangoApiBlockchainNames, RangoBlockchainName } from '../models/rango-api-blockchain-names';
import { RANGO_SWAP_STATUS, RangoSwapStatus } from '../models/rango-api-status-types';
import { rangoApiSymbols } from '../models/rango-api-symbol-names';
import {
rangoCrossChainTradeTypes,
rangoOnChainTradeTypes,
RangoTradeType,
rangoTradeTypes,
RubicTradeTypeForRango
} from '../models/rango-api-trade-types';
import { RANGO_TO_RUBIC_PROVIDERS, RangoTradeType } from '../models/rango-api-trade-types';
import { RangoSupportedBlockchain } from '../models/rango-supported-blockchains';

export class RangoUtils {
Expand Down Expand Up @@ -69,33 +63,8 @@ export class RangoUtils {
}

public static getTradeTypeForRubic(
swapType: 'cross-chain' | 'on-chain',
rangoTradeType: RangoTradeType
): BridgeType | OnChainTradeType {
if (swapType === 'cross-chain') {
const found = Object.entries(rangoCrossChainTradeTypes).find(
([_, value]) => value === rangoTradeType
);

if (found) {
return found[0] as BridgeType;
}
}

if (swapType === 'on-chain') {
const found = Object.entries(rangoOnChainTradeTypes).find(
([_, value]) => value === rangoTradeType
);

if (found) {
return found[0] as OnChainTradeType;
}
}

return CROSS_CHAIN_TRADE_TYPE.RANGO;
}

public static getTradeTypeForRango(rubicTradeType: RubicTradeTypeForRango): RangoTradeType {
return rangoTradeTypes[rubicTradeType];
return RANGO_TO_RUBIC_PROVIDERS[rangoTradeType] || CROSS_CHAIN_TRADE_TYPE.RANGO;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
RequiredCrossChainOptions
} from 'src/features/cross-chain/calculation-manager/models/cross-chain-options';
import { CrossChainTradeType } from 'src/features/cross-chain/calculation-manager/models/cross-chain-trade-type';
import { LifiBridgeTypes } from 'src/features/cross-chain/calculation-manager/providers/lifi-provider/models/lifi-bridge-types';
import { LifiSubProvider } from 'src/features/cross-chain/calculation-manager/providers/lifi-provider/models/lifi-bridge-types';
import { MarkRequired } from 'ts-essentials';

export type CrossChainManagerCalculationOptions = CrossChainOptions & {
Expand All @@ -12,7 +12,10 @@ export type CrossChainManagerCalculationOptions = CrossChainOptions & {
*/
readonly disabledProviders?: CrossChainTradeType[];

readonly lifiDisabledBridgeTypes?: LifiBridgeTypes[];
/**
* @deprecated Will be renamed to `lifiDisabledProviders` in the next major update
*/
readonly lifiDisabledBridgeTypes?: LifiSubProvider[];
};

export type RequiredCrossChainManagerCalculationOptions = MarkRequired<
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RubicTradeTypeForRango } from 'src/features/common/providers/rango/models/rango-api-trade-types';
import { RangoTradeType } from 'src/features/common/providers/rango/models/rango-api-trade-types';
import { CrossChainTradeType } from 'src/features/cross-chain/calculation-manager/models/cross-chain-trade-type';
import { LifiBridgeTypes } from 'src/features/cross-chain/calculation-manager/providers/lifi-provider/models/lifi-bridge-types';
import { LifiSubProvider } from 'src/features/cross-chain/calculation-manager/providers/lifi-provider/models/lifi-bridge-types';
import { MarkRequired } from 'ts-essentials';

export interface CrossChainOptions {
Expand Down Expand Up @@ -53,12 +53,15 @@ export interface CrossChainOptions {
*/
timeout?: number;

lifiDisabledBridgeTypes?: LifiBridgeTypes[];
/**
* @deprecated Will be renamed to `lifiDisabledProviders` in the next major update
*/
lifiDisabledBridgeTypes?: LifiSubProvider[];

/**
* Providers disabled in platform config for rango
*/
rangoDisabledProviders?: RubicTradeTypeForRango[];
rangoDisabledProviders?: RangoTradeType[];

/**
* True, if changenow must be calculated for non-evm source blockchains.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ export const DEFAULT_BRIDGE_TYPE = {

IBC: 'ibc',

LI_FUEL: 'lifuel',

MAKERS_WORMHOLE: 'maker',
MAYA_PROTOCOL: 'mayaprotocol',
MULTICHAIN: 'multichain',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@ export const lifiCrossChainSupportedBlockchains = [
BLOCKCHAIN_NAME.MOONRIVER,
BLOCKCHAIN_NAME.ARBITRUM,
BLOCKCHAIN_NAME.OPTIMISM,
BLOCKCHAIN_NAME.CRONOS,
BLOCKCHAIN_NAME.OKE_X_CHAIN,
BLOCKCHAIN_NAME.GNOSIS,
BLOCKCHAIN_NAME.FUSE,
BLOCKCHAIN_NAME.MOONBEAM,
BLOCKCHAIN_NAME.CELO,
BLOCKCHAIN_NAME.BASE,
BLOCKCHAIN_NAME.POLYGON_ZKEVM,
BLOCKCHAIN_NAME.ZK_SYNC
BLOCKCHAIN_NAME.ZK_SYNC,
BLOCKCHAIN_NAME.LINEA
] as const;

export type LifiCrossChainSupportedBlockchain = (typeof lifiCrossChainSupportedBlockchains)[number];
Loading

0 comments on commit 63979b5

Please sign in to comment.