diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index 13cc8d2170..4f1cf225db 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -13,6 +13,10 @@ { "note": "Add MeshSwap on Polygon", "pr": 491 + }, + { + "note": "Add MDEX on BSC", + "pr": 496 } ], "timestamp": 1654284040 diff --git a/packages/asset-swapper/src/utils/market_operation_utils/bridge_source_utils.ts b/packages/asset-swapper/src/utils/market_operation_utils/bridge_source_utils.ts index c438c49aa0..a485346a9a 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/bridge_source_utils.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/bridge_source_utils.ts @@ -7,6 +7,7 @@ import { BAKERYSWAP_ROUTER_BY_CHAIN_ID, BELT_BSC_INFOS, BISWAP_ROUTER_BY_CHAIN_ID, + MDEX_ROUTER_BY_CHAIN_ID, CAFESWAP_ROUTER_BY_CHAIN_ID, CHEESESWAP_ROUTER_BY_CHAIN_ID, COMETHSWAP_ROUTER_BY_CHAIN_ID, @@ -545,6 +546,7 @@ export function uniswapV2LikeRouterAddress( | ERC20BridgeSource.SpiritSwap | ERC20BridgeSource.BiSwap | ERC20BridgeSource.Yoshi + | ERC20BridgeSource.MDex | ERC20BridgeSource.MeshSwap, ): string { switch (source) { @@ -600,6 +602,8 @@ export function uniswapV2LikeRouterAddress( return YOSHI_ROUTER_BY_CHAIN_ID[chainId]; case ERC20BridgeSource.MeshSwap: return MESHSWAP_ROUTER_BY_CHAIN_ID[chainId]; + case ERC20BridgeSource.MDex: + return MDEX_ROUTER_BY_CHAIN_ID[chainId]; default: throw new Error(`Unknown UniswapV2 like source ${source}`); } diff --git a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts index 57e9d63d60..cc934dd22d 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts @@ -147,6 +147,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.ACryptos, ERC20BridgeSource.KyberDmm, ERC20BridgeSource.BiSwap, + ERC20BridgeSource.MDex, ]), [ChainId.Polygon]: new SourceFilters([ ERC20BridgeSource.SushiSwap, @@ -293,6 +294,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.ACryptos, ERC20BridgeSource.KyberDmm, ERC20BridgeSource.BiSwap, + ERC20BridgeSource.MDex, ]), [ChainId.Polygon]: new SourceFilters([ ERC20BridgeSource.SushiSwap, @@ -1973,6 +1975,13 @@ export const BISWAP_ROUTER_BY_CHAIN_ID = valueByChainId( NULL_ADDRESS, ); +export const MDEX_ROUTER_BY_CHAIN_ID = valueByChainId( + { + [ChainId.BSC]: '0x7DAe51BD3E3376B8c7c4900E9107f12Be3AF1bA8', + }, + NULL_ADDRESS, +); + export const MOONISWAP_REGISTRIES_BY_CHAIN_ID = valueByChainId( { [ChainId.Mainnet]: ['0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643'], @@ -2480,6 +2489,7 @@ export const DEFAULT_GAS_SCHEDULE: Required = { [ERC20BridgeSource.CryptoCom]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.ShibaSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.BiSwap]: uniswapV2CloneGasSchedule, + [ERC20BridgeSource.MDex]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.Balancer]: () => 120e3, [ERC20BridgeSource.BalancerV2]: (fillData?: FillData) => { return 100e3 + ((fillData as BalancerV2BatchSwapFillData).swapSteps.length - 1) * 50e3; diff --git a/packages/asset-swapper/src/utils/market_operation_utils/orders.ts b/packages/asset-swapper/src/utils/market_operation_utils/orders.ts index 52bfb2378f..b42e781ae4 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/orders.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/orders.ts @@ -202,6 +202,8 @@ export function getErc20BridgeSourceToBridgeSource(source: ERC20BridgeSource): s return encodeBridgeSourceId(BridgeProtocol.Nerve, 'MobiusMoney'); case ERC20BridgeSource.BiSwap: return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'BiSwap'); + case ERC20BridgeSource.MDex: + return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'MDex'); case ERC20BridgeSource.GMX: return encodeBridgeSourceId(BridgeProtocol.GMX, 'GMX'); case ERC20BridgeSource.Platypus: @@ -300,6 +302,7 @@ export function createBridgeDataForBridgeOrder(order: OptimizedMarketBridgeOrder case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.BiSwap: + case ERC20BridgeSource.MDex: case ERC20BridgeSource.Yoshi: case ERC20BridgeSource.MeshSwap: const uniswapV2FillData = (order as OptimizedMarketBridgeOrder).fillData; @@ -525,6 +528,7 @@ export const BRIDGE_ENCODERS: { [ERC20BridgeSource.SpookySwap]: routerAddressPathEncoder, [ERC20BridgeSource.MorpheusSwap]: routerAddressPathEncoder, [ERC20BridgeSource.BiSwap]: routerAddressPathEncoder, + [ERC20BridgeSource.MDex]: routerAddressPathEncoder, [ERC20BridgeSource.Yoshi]: routerAddressPathEncoder, [ERC20BridgeSource.MeshSwap]: routerAddressPathEncoder, // Avalanche diff --git a/packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts b/packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts index 2a3871de33..3df317d690 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/sampler_operations.ts @@ -1448,6 +1448,7 @@ export class SamplerOperations { case ERC20BridgeSource.Yoshi: case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.BiSwap: + case ERC20BridgeSource.MDex: case ERC20BridgeSource.MeshSwap: const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); if (!isValidAddress(uniLikeRouter)) { @@ -1790,6 +1791,7 @@ export class SamplerOperations { case ERC20BridgeSource.Yoshi: case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.BiSwap: + case ERC20BridgeSource.MDex: case ERC20BridgeSource.MeshSwap: const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); if (!isValidAddress(uniLikeRouter)) { diff --git a/packages/asset-swapper/src/utils/market_operation_utils/types.ts b/packages/asset-swapper/src/utils/market_operation_utils/types.ts index 4829c4c8c2..331b6addd5 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -71,6 +71,7 @@ export enum ERC20BridgeSource { PancakeSwap = 'PancakeSwap', PancakeSwapV2 = 'PancakeSwap_V2', BiSwap = 'BiSwap', + MDex = 'MDex', BakerySwap = 'BakerySwap', Nerve = 'Nerve', Belt = 'Belt',