diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index 2c5cebfec5..53e422c65f 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "16.20.0", + "changes": [ + { + "note": "ShibaSwap", + "pr": 276 + } + ] + }, { "version": "16.19.1", "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 e2eea33a18..a665f6b531 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 @@ -32,6 +32,7 @@ import { QUICKSWAP_ROUTER_BY_CHAIN_ID, SADDLE_MAINNET_INFOS, SHELL_POOLS_BY_CHAIN_ID, + SHIBASWAP_ROUTER_BY_CHAIN_ID, SMOOTHY_BSC_INFOS, SMOOTHY_MAINNET_INFOS, SNOWSWAP_MAINNET_INFOS, @@ -399,7 +400,8 @@ export function uniswapV2LikeRouterAddress( | ERC20BridgeSource.ComethSwap | ERC20BridgeSource.Dfyn | ERC20BridgeSource.WaultSwap - | ERC20BridgeSource.Polydex, + | ERC20BridgeSource.Polydex + | ERC20BridgeSource.ShibaSwap, ): string { switch (source) { case ERC20BridgeSource.UniswapV2: @@ -432,6 +434,8 @@ export function uniswapV2LikeRouterAddress( return WAULTSWAP_ROUTER_BY_CHAIN_ID[chainId]; case ERC20BridgeSource.Polydex: return POLYDEX_ROUTER_BY_CHAIN_ID[chainId]; + case ERC20BridgeSource.ShibaSwap: + return SHIBASWAP_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 f7b9ae3325..fc90f73809 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts @@ -97,6 +97,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.XSigma, ERC20BridgeSource.UniswapV3, ERC20BridgeSource.CurveV2, + ERC20BridgeSource.ShibaSwap, ]), [ChainId.Ropsten]: new SourceFilters([ ERC20BridgeSource.Kyber, @@ -192,6 +193,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.XSigma, ERC20BridgeSource.UniswapV3, ERC20BridgeSource.CurveV2, + ERC20BridgeSource.ShibaSwap, ]), [ChainId.Ropsten]: new SourceFilters([ ERC20BridgeSource.Kyber, @@ -1094,6 +1096,13 @@ export const LINKSWAP_ROUTER_BY_CHAIN_ID = valueByChainId( NULL_ADDRESS, ); +export const SHIBASWAP_ROUTER_BY_CHAIN_ID = valueByChainId( + { + [ChainId.Mainnet]: '0x03f7724180aa6b939894b5ca4314783b0b36b329', + }, + NULL_ADDRESS, +); + export const MSTABLE_POOLS_BY_CHAIN_ID = valueByChainId( { [ChainId.Mainnet]: { @@ -1472,6 +1481,7 @@ export const DEFAULT_GAS_SCHEDULE: Required = { [ERC20BridgeSource.SushiSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.CryptoCom]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.Linkswap]: uniswapV2CloneGasSchedule, + [ERC20BridgeSource.ShibaSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.Balancer]: () => 120e3, [ERC20BridgeSource.BalancerV2]: () => 100e3, [ERC20BridgeSource.Cream]: () => 120e3, 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 376b9dd3f4..fcf2914441 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/orders.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/orders.ts @@ -172,6 +172,8 @@ export function getErc20BridgeSourceToBridgeSource(source: ERC20BridgeSource): s return encodeBridgeSourceId(BridgeProtocol.Nerve, 'FirebirdOneSwap'); case ERC20BridgeSource.Lido: return encodeBridgeSourceId(BridgeProtocol.Lido, 'Lido'); + case ERC20BridgeSource.ShibaSwap: + return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'ShibaSwap'); default: throw new Error(AggregationError.NoBridgeForSource); } @@ -242,6 +244,7 @@ export function createBridgeDataForBridgeOrder(order: OptimizedMarketBridgeOrder case ERC20BridgeSource.Dfyn: case ERC20BridgeSource.WaultSwap: case ERC20BridgeSource.Polydex: + case ERC20BridgeSource.ShibaSwap: const uniswapV2FillData = (order as OptimizedMarketBridgeOrder).fillData; bridgeData = encoder.encode([uniswapV2FillData.router, uniswapV2FillData.tokenAddressPath]); break; @@ -427,6 +430,7 @@ export const BRIDGE_ENCODERS: { [ERC20BridgeSource.SushiSwap]: routerAddressPathEncoder, [ERC20BridgeSource.CryptoCom]: routerAddressPathEncoder, [ERC20BridgeSource.Linkswap]: routerAddressPathEncoder, + [ERC20BridgeSource.ShibaSwap]: routerAddressPathEncoder, // BSC [ERC20BridgeSource.PancakeSwap]: routerAddressPathEncoder, [ERC20BridgeSource.PancakeSwapV2]: routerAddressPathEncoder, 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 b6e4a39e1d..08c2a282f7 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 @@ -1229,6 +1229,7 @@ export class SamplerOperations { case ERC20BridgeSource.Dfyn: case ERC20BridgeSource.WaultSwap: case ERC20BridgeSource.Polydex: + case ERC20BridgeSource.ShibaSwap: const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); if (!isValidAddress(uniLikeRouter)) { return []; @@ -1499,6 +1500,7 @@ export class SamplerOperations { case ERC20BridgeSource.Dfyn: case ERC20BridgeSource.WaultSwap: case ERC20BridgeSource.Polydex: + case ERC20BridgeSource.ShibaSwap: 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 77b2bf2165..99c5e99f0f 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -68,6 +68,7 @@ export enum ERC20BridgeSource { UniswapV3 = 'Uniswap_V3', CurveV2 = 'Curve_V2', Lido = 'Lido', + ShibaSwap = 'ShibaSwap', // BSC only PancakeSwap = 'PancakeSwap', PancakeSwapV2 = 'PancakeSwap_V2',