diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index 5313b118d7..df20406a26 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "16.60.0", + "changes": [ + { + "note": "Add BiSwap on BSC", + "pr": 467 + } + ] + }, { "version": "16.59.0", "changes": [ 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 c513ffc12a..2a289225a9 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 @@ -6,6 +6,7 @@ import { APESWAP_ROUTER_BY_CHAIN_ID, BAKERYSWAP_ROUTER_BY_CHAIN_ID, BELT_BSC_INFOS, + BISWAP_ROUTER_BY_CHAIN_ID, CAFESWAP_ROUTER_BY_CHAIN_ID, CHEESESWAP_ROUTER_BY_CHAIN_ID, COMETHSWAP_ROUTER_BY_CHAIN_ID, @@ -553,7 +554,8 @@ export function uniswapV2LikeRouterAddress( | ERC20BridgeSource.UbeSwap | ERC20BridgeSource.MorpheusSwap | ERC20BridgeSource.SpookySwap - | ERC20BridgeSource.SpiritSwap, + | ERC20BridgeSource.SpiritSwap + | ERC20BridgeSource.BiSwap, ): string { switch (source) { case ERC20BridgeSource.UniswapV2: @@ -602,6 +604,8 @@ export function uniswapV2LikeRouterAddress( return SPOOKYSWAP_ROUTER_BY_CHAIN_ID[chainId]; case ERC20BridgeSource.SpiritSwap: return SPIRITSWAP_ROUTER_BY_CHAIN_ID[chainId]; + case ERC20BridgeSource.BiSwap: + return BISWAP_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 da57223d8b..b1e4cb0bdf 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts @@ -146,6 +146,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.JetSwap, ERC20BridgeSource.ACryptos, ERC20BridgeSource.KyberDmm, + ERC20BridgeSource.BiSwap, ]), [ChainId.Polygon]: new SourceFilters([ ERC20BridgeSource.SushiSwap, @@ -289,6 +290,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.ACryptos, ERC20BridgeSource.KyberDmm, ERC20BridgeSource.Synapse, + ERC20BridgeSource.BiSwap, ]), [ChainId.Polygon]: new SourceFilters([ ERC20BridgeSource.SushiSwap, @@ -518,6 +520,7 @@ export const BSC_TOKENS = { renBTC: '0xfce146bf3146100cfe5db4129cf6c82b0ef4ad8c', pBTC: '0xed28a457a5a76596ac48d87c0f577020f6ea1c4c', nUSD: '0x23b891e5c62e0955ae2bd185990103928ab817b3', + BSW: '0x965F527D9159dCe6288a2219DB51fc6Eef120dD1', }; export const POLYGON_TOKENS = { @@ -1940,6 +1943,13 @@ export const KYBER_DMM_ROUTER_BY_CHAIN_ID = valueByChainId( NULL_ADDRESS, ); +export const BISWAP_ROUTER_BY_CHAIN_ID = valueByChainId( + { + [ChainId.BSC]: '0x3a6d8ca21d1cf76f653a67577fa0d27453350dd8', + }, + NULL_ADDRESS, +); + export const MOONISWAP_REGISTRIES_BY_CHAIN_ID = valueByChainId( { [ChainId.Mainnet]: ['0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643'], @@ -2389,6 +2399,7 @@ export const DEFAULT_GAS_SCHEDULE: Required = { [ERC20BridgeSource.SushiSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.CryptoCom]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.ShibaSwap]: uniswapV2CloneGasSchedule, + [ERC20BridgeSource.BiSwap]: 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 d9b2f1eab0..9397808dd5 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/orders.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/orders.ts @@ -201,6 +201,8 @@ export function getErc20BridgeSourceToBridgeSource(source: ERC20BridgeSource): s return encodeBridgeSourceId(BridgeProtocol.AaveV2, 'Geist'); case ERC20BridgeSource.MobiusMoney: return encodeBridgeSourceId(BridgeProtocol.Nerve, 'MobiusMoney'); + case ERC20BridgeSource.BiSwap: + return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'BiSwap'); default: throw new Error(AggregationError.NoBridgeForSource); } @@ -290,6 +292,7 @@ export function createBridgeDataForBridgeOrder(order: OptimizedMarketBridgeOrder case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.MorpheusSwap: + case ERC20BridgeSource.BiSwap: const uniswapV2FillData = (order as OptimizedMarketBridgeOrder).fillData; bridgeData = encoder.encode([uniswapV2FillData.router, uniswapV2FillData.tokenAddressPath]); break; @@ -497,6 +500,7 @@ export const BRIDGE_ENCODERS: { [ERC20BridgeSource.SpiritSwap]: routerAddressPathEncoder, [ERC20BridgeSource.SpookySwap]: routerAddressPathEncoder, [ERC20BridgeSource.MorpheusSwap]: routerAddressPathEncoder, + [ERC20BridgeSource.BiSwap]: routerAddressPathEncoder, // Celo [ERC20BridgeSource.UbeSwap]: routerAddressPathEncoder, // BSC 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 ef9c6951fb..d8600a36b2 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 @@ -1395,6 +1395,7 @@ export class SamplerOperations { case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.MorpheusSwap: + case ERC20BridgeSource.BiSwap: const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); if (!isValidAddress(uniLikeRouter)) { return []; @@ -1701,6 +1702,7 @@ export class SamplerOperations { case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.MorpheusSwap: + case ERC20BridgeSource.BiSwap: const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); if (!isValidAddress(uniLikeRouter)) { return []; 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 c8b294e9e1..441f9d3775 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -70,6 +70,7 @@ export enum ERC20BridgeSource { // BSC only PancakeSwap = 'PancakeSwap', PancakeSwapV2 = 'PancakeSwap_V2', + BiSwap = 'BiSwap', BakerySwap = 'BakerySwap', Nerve = 'Nerve', Belt = 'Belt',