diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index 2e37175f02..1c0340b74a 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "16.47.0", + "changes": [ + { + "note": "Adding support for Synapse on all networks", + "pr": 400 + } + ] + }, { "version": "16.46.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 c4d7cdde13..452168b66e 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 @@ -49,6 +49,12 @@ import { SPOOKYSWAP_ROUTER_BY_CHAIN_ID, SUSHISWAP_ROUTER_BY_CHAIN_ID, SWERVE_MAINNET_INFOS, + SYNAPSE_AVALANCHE_INFOS, + SYNAPSE_BSC_INFOS, + SYNAPSE_FANTOM_INFOS, + SYNAPSE_MAINNET_INFOS, + SYNAPSE_OPTIMISM_INFOS, + SYNAPSE_POLYGON_INFOS, TRADER_JOE_ROUTER_BY_CHAIN_ID, UBESWAP_ROUTER_BY_CHAIN_ID, UNISWAPV2_ROUTER_BY_CHAIN_ID, @@ -247,6 +253,67 @@ export function getNerveInfosForPair(chainId: ChainId, takerToken: string, maker ); } +export function getSynapseInfosForPair(chainId: ChainId, takerToken: string, makerToken: string): CurveInfo[] { + switch (chainId) { + case ChainId.Mainnet: + return Object.values(SYNAPSE_MAINNET_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + case ChainId.Optimism: + return Object.values(SYNAPSE_OPTIMISM_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + case ChainId.BSC: + return Object.values(SYNAPSE_BSC_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + case ChainId.Polygon: + return Object.values(SYNAPSE_POLYGON_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + case ChainId.Fantom: + return Object.values(SYNAPSE_FANTOM_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + case ChainId.Avalanche: + return Object.values(SYNAPSE_AVALANCHE_INFOS).filter(c => + [makerToken, takerToken].every( + t => + (c.tokens.includes(t) && c.metaTokens === undefined) || + (c.tokens.includes(t) && + [makerToken, takerToken].filter(v => c.metaTokens?.includes(v)).length > 0), + ), + ); + default: + return []; + } +} + export function getFirebirdOneSwapInfosForPair(chainId: ChainId, takerToken: string, makerToken: string): CurveInfo[] { if (chainId === ChainId.BSC) { return Object.values(FIREBIRDONESWAP_BSC_INFOS).filter(c => @@ -406,6 +473,7 @@ export function getCurveLikeInfosForPair( | ERC20BridgeSource.Swerve | ERC20BridgeSource.SnowSwap | ERC20BridgeSource.Nerve + | ERC20BridgeSource.Synapse | ERC20BridgeSource.Belt | ERC20BridgeSource.Ellipsis | ERC20BridgeSource.Smoothy @@ -432,6 +500,9 @@ export function getCurveLikeInfosForPair( case ERC20BridgeSource.Nerve: pools = getNerveInfosForPair(chainId, takerToken, makerToken); break; + case ERC20BridgeSource.Synapse: + pools = getSynapseInfosForPair(chainId, takerToken, makerToken); + break; case ERC20BridgeSource.Belt: pools = getBeltInfosForPair(chainId, takerToken, makerToken); break; 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 f48cc7e77e..7ac6f4df18 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts @@ -104,6 +104,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.UniswapV3, ERC20BridgeSource.CurveV2, ERC20BridgeSource.ShibaSwap, + ERC20BridgeSource.Synapse, // TODO: enable after FQT has been redeployed on Ethereum mainnet // ERC20BridgeSource.AaveV2, // ERC20BridgeSource.Compound, @@ -130,6 +131,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.Mooniswap, ERC20BridgeSource.MultiHop, ERC20BridgeSource.Nerve, + ERC20BridgeSource.Synapse, ERC20BridgeSource.PancakeSwap, ERC20BridgeSource.PancakeSwapV2, ERC20BridgeSource.SushiSwap, @@ -167,6 +169,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.IronSwap, ERC20BridgeSource.AaveV2, ERC20BridgeSource.UniswapV3, + ERC20BridgeSource.Synapse, ]), [ChainId.Avalanche]: new SourceFilters([ ERC20BridgeSource.MultiHop, @@ -177,6 +180,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.CurveV2, ERC20BridgeSource.KyberDmm, ERC20BridgeSource.AaveV2, + ERC20BridgeSource.Synapse, ]), [ChainId.Fantom]: new SourceFilters([ ERC20BridgeSource.MultiHop, @@ -188,13 +192,18 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.SpiritSwap, ERC20BridgeSource.SpookySwap, ERC20BridgeSource.SushiSwap, + ERC20BridgeSource.Synapse, ]), [ChainId.Celo]: new SourceFilters([ ERC20BridgeSource.UbeSwap, ERC20BridgeSource.SushiSwap, ERC20BridgeSource.MultiHop, ]), - [ChainId.Optimism]: new SourceFilters([ERC20BridgeSource.UniswapV3]), + [ChainId.Optimism]: new SourceFilters([ + ERC20BridgeSource.UniswapV3, + ERC20BridgeSource.Synapse, + ERC20BridgeSource.MultiHop, + ]), }, new SourceFilters([]), ); @@ -237,6 +246,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.UniswapV3, ERC20BridgeSource.CurveV2, ERC20BridgeSource.ShibaSwap, + ERC20BridgeSource.Synapse, // TODO: enable after FQT has been redeployed on Ethereum mainnet // ERC20BridgeSource.AaveV2, // ERC20BridgeSource.Compound, @@ -277,6 +287,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.JetSwap, ERC20BridgeSource.ACryptos, ERC20BridgeSource.KyberDmm, + ERC20BridgeSource.Synapse, ]), [ChainId.Polygon]: new SourceFilters([ ERC20BridgeSource.SushiSwap, @@ -300,6 +311,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.IronSwap, ERC20BridgeSource.AaveV2, ERC20BridgeSource.UniswapV3, + ERC20BridgeSource.Synapse, ]), [ChainId.Avalanche]: new SourceFilters([ ERC20BridgeSource.MultiHop, @@ -310,6 +322,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.CurveV2, ERC20BridgeSource.KyberDmm, ERC20BridgeSource.AaveV2, + ERC20BridgeSource.Synapse, ]), [ChainId.Fantom]: new SourceFilters([ ERC20BridgeSource.MultiHop, @@ -321,13 +334,18 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId( ERC20BridgeSource.SpiritSwap, ERC20BridgeSource.SpookySwap, ERC20BridgeSource.SushiSwap, + ERC20BridgeSource.Synapse, ]), [ChainId.Celo]: new SourceFilters([ ERC20BridgeSource.UbeSwap, ERC20BridgeSource.SushiSwap, ERC20BridgeSource.MultiHop, ]), - [ChainId.Optimism]: new SourceFilters([ERC20BridgeSource.UniswapV3]), + [ChainId.Optimism]: new SourceFilters([ + ERC20BridgeSource.UniswapV3, + ERC20BridgeSource.Synapse, + ERC20BridgeSource.MultiHop, + ]), }, new SourceFilters([]), ); @@ -462,6 +480,8 @@ export const MAINNET_TOKENS = { CRV: '0xd533a949740bb3306d119cc777fa900ba034cd52', MIM: '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', EURT: '0xc581b735a1688071a1746c968e0798d642ede491', + // Synapse ecosystem + nUSD: '0x1b84765de8b7566e4ceaf4d0fd3c5af52d3dde4f', CVX: '0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b', }; @@ -479,6 +499,7 @@ export const BSC_TOKENS = { BTCB: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', renBTC: '0xfce146bf3146100cfe5db4129cf6c82b0ef4ad8c', pBTC: '0xed28a457a5a76596ac48d87c0f577020f6ea1c4c', + nUSD: '0x23b891e5c62e0955ae2bd185990103928ab817b3', }; export const POLYGON_TOKENS = { @@ -496,6 +517,7 @@ export const POLYGON_TOKENS = { DFYN: '0xc168e40227e4ebd8c1cae80f7a55a4f0e6d66c97', BANANA: '0x5d47baba0d66083c52009271faf3f50dcc01023c', WEXPOLY: '0x4c4bf319237d98a30a929a96112effa8da3510eb', + nUSD: '0xb6c473756050de474286bed418b77aeac39b02af', }; export const AVALANCHE_TOKENS = { @@ -508,6 +530,9 @@ export const AVALANCHE_TOKENS = { aDAI: '0x47afa96cdc9fab46904a55a6ad4bf6660b53c38a', aUSDC: '0x46a51127c3ce23fb7ab1de06226147f446e4a857', aUSDT: '0x532e6537fea298397212f09a61e03311686f548e', + nETH: '0x19e1ae0ee35c0404f835521146206595d37981ae', + nUSD: '0xcfc37a6ab183dd4aed08c204d1c2773c0b1bdf46', + aWETH: '0x53f7c5869a859f0aec3d334ee8b4cf01e3492f21', }; export const CELO_TOKENS = { @@ -538,6 +563,9 @@ export const FANTOM_TOKENS = { fUSDT: '0x049d68029688eabf473097a2fc38ef61633a3c7a', WBTC: '0x321162cd933e2be498cd2267a90534a804051b11', renBTC: '0xdbf31df14b66535af65aac99c32e9ea844e14501', + MIM: '0x82f0b8b456c1a451378467398982d4834b6829c1', + nUSD: '0xed2a7edd7413021d440b09d654f3b87712abab66', + nETH: '0x67c10c397dd0ba417329543c1a40eb48aaa7cd00', }; export const OPTIMISM_TOKENS = { @@ -546,6 +574,8 @@ export const OPTIMISM_TOKENS = { USDT: '0x94b008aa00579c1307b0ef2c499ad98a8ce58e58', DAI: '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', WBTC: '0x68f180fcce6836688e9084f035309e29bf0a2095', + nETH: '0x809dc529f07651bd43a172e8db6f4a7a0d771036', + sWETH: '0x121ab82b49b2bc4c7901ca46b8277962b4350204', }; export const CURVE_POOLS = { @@ -663,6 +693,37 @@ export const NERVE_POOLS = { threePool: '0x1b3771a66ee31180906972580ade9b81afc5fcdc', }; +export const SYNAPSE_MAINNET_POOLS = { + nUSDLP: '0x1116898dda4015ed8ddefb84b6e8bc24528af2d8', +}; + +export const SYNAPSE_OPTIMISM_POOLS = { + nETHLP: '0xe27bff97ce92c3e1ff7aa9f86781fdd6d48f5ee9', +}; + +export const SYNAPSE_BSC_POOLS = { + nUSDLP: '0x28ec0b36f0819ecb5005cab836f4ed5a2eca4d13', +}; + +export const SYNAPSE_POLYGON_POOLS = { + nUSDLP: '0x85fcd7dd0a1e1a9fcd5fd886ed522de8221c3ee5', +}; + +export const SYNAPSE_FANTOM_POOLS = { + nUSDLP: '0x2913e812cf0dcca30fb28e6cac3d2dcff4497688', + nETHLP: '0x8d9ba570d6cb60c7e3e0f31343efe75ab8e65fb1', +}; + +export const SYNAPSE_AVALANCHE_POOLS = { + nUSDLP: '0xed2a7edd7413021d440b09d654f3b87712abab66', + nETHLP: '0x77a7e60555bc18b4be44c181b2575eee46212d44', +}; + +export const SYNAPSE_ARBITRUM_POOLS = { + nUSDLP: '0x0db3fe3b770c95a0b99d1ed6f2627933466c0dd8', + nETHLP: '0xd70a52248e546a3b260849386410c7170c7bd1e9', +}; + export const BELT_POOLS = { vPool: '0xf16d312d119c13dd27fd0dc814b0bcdcaaa62dfd', }; @@ -720,6 +781,7 @@ export const DEFAULT_INTERMEDIATE_TOKENS_BY_CHAIN_ID = valueByChainId( POLYGON_TOKENS.DAI, POLYGON_TOKENS.USDT, POLYGON_TOKENS.WBTC, + POLYGON_TOKENS.nUSD, ], [ChainId.Avalanche]: [ AVALANCHE_TOKENS.WAVAX, @@ -727,10 +789,26 @@ export const DEFAULT_INTERMEDIATE_TOKENS_BY_CHAIN_ID = valueByChainId( AVALANCHE_TOKENS.DAI, AVALANCHE_TOKENS.USDT, AVALANCHE_TOKENS.USDC, + AVALANCHE_TOKENS.nUSD, + AVALANCHE_TOKENS.nETH, + AVALANCHE_TOKENS.aWETH, + ], + [ChainId.Fantom]: [ + FANTOM_TOKENS.WFTM, + FANTOM_TOKENS.WETH, + FANTOM_TOKENS.DAI, + FANTOM_TOKENS.USDC, + FANTOM_TOKENS.nUSD, + FANTOM_TOKENS.nETH, ], - [ChainId.Fantom]: [FANTOM_TOKENS.WFTM, FANTOM_TOKENS.WETH, FANTOM_TOKENS.DAI, FANTOM_TOKENS.USDC], [ChainId.Celo]: [CELO_TOKENS.WCELO, CELO_TOKENS.mCUSD, CELO_TOKENS.WETH, CELO_TOKENS.amCUSD, CELO_TOKENS.WBTC], - [ChainId.Optimism]: [OPTIMISM_TOKENS.WETH, OPTIMISM_TOKENS.DAI, OPTIMISM_TOKENS.USDC], + [ChainId.Optimism]: [ + OPTIMISM_TOKENS.WETH, + OPTIMISM_TOKENS.DAI, + OPTIMISM_TOKENS.USDC, + OPTIMISM_TOKENS.nETH, + OPTIMISM_TOKENS.sWETH, + ], }, [], ); @@ -763,7 +841,14 @@ export const DEFAULT_TOKEN_ADJACENCY_GRAPH_BY_CHAIN_ID = valueByChainId { + // Synape nETH/aWETH pool + builder + .add(AVALANCHE_TOKENS.aWETH, AVALANCHE_TOKENS.nETH) + .add(AVALANCHE_TOKENS.nETH, AVALANCHE_TOKENS.aWETH); + }) + .build(), [ChainId.Fantom]: new TokenAdjacencyGraphBuilder({ default: DEFAULT_INTERMEDIATE_TOKENS_BY_CHAIN_ID[ChainId.Fantom], }).build(), @@ -1343,6 +1428,87 @@ export const NERVE_BSC_INFOS: { [name: string]: CurveInfo } = { }, }; +export const SYNAPSE_BSC_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_BSC_POOLS.nUSDLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_BSC_POOLS.nUSDLP, + tokens: [BSC_TOKENS.nUSD, BSC_TOKENS.BUSD, BSC_TOKENS.USDC, BSC_TOKENS.USDT], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + +export const SYNAPSE_FANTOM_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_FANTOM_POOLS.nUSDLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_FANTOM_POOLS.nUSDLP, + tokens: [FANTOM_TOKENS.nUSD, FANTOM_TOKENS.MIM, FANTOM_TOKENS.USDC, FANTOM_TOKENS.fUSDT], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + +export const SYNAPSE_MAINNET_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_MAINNET_POOLS.nUSDLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_MAINNET_POOLS.nUSDLP, + tokens: [MAINNET_TOKENS.DAI, MAINNET_TOKENS.USDC, MAINNET_TOKENS.USDT], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + +export const SYNAPSE_OPTIMISM_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_OPTIMISM_POOLS.nETHLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_OPTIMISM_POOLS.nETHLP, + tokens: [OPTIMISM_TOKENS.nETH, OPTIMISM_TOKENS.sWETH], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + +export const SYNAPSE_POLYGON_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_POLYGON_POOLS.nUSDLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_POLYGON_POOLS.nUSDLP, + tokens: [POLYGON_TOKENS.nUSD, POLYGON_TOKENS.DAI, POLYGON_TOKENS.USDC, POLYGON_TOKENS.USDT], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + +export const SYNAPSE_AVALANCHE_INFOS: { [name: string]: CurveInfo } = { + [SYNAPSE_AVALANCHE_POOLS.nUSDLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_AVALANCHE_POOLS.nUSDLP, + tokens: [AVALANCHE_TOKENS.nUSD, AVALANCHE_TOKENS.DAI, AVALANCHE_TOKENS.USDC, AVALANCHE_TOKENS.USDT], + metaTokens: undefined, + gasSchedule: 140e3, + }, + [SYNAPSE_AVALANCHE_POOLS.nETHLP]: { + exchangeFunctionSelector: CurveFunctionSelectors.swap, + sellQuoteFunctionSelector: CurveFunctionSelectors.calculateSwap, + buyQuoteFunctionSelector: CurveFunctionSelectors.None, + poolAddress: SYNAPSE_AVALANCHE_POOLS.nETHLP, + tokens: [AVALANCHE_TOKENS.nETH, AVALANCHE_TOKENS.aWETH], + metaTokens: undefined, + gasSchedule: 140e3, + }, +}; + export const FIREBIRDONESWAP_BSC_INFOS: { [name: string]: CurveInfo } = { [FIREBIRDONESWAP_BSC_POOLS.oneswap]: { exchangeFunctionSelector: CurveFunctionSelectors.swap, @@ -1982,6 +2148,7 @@ export const DEFAULT_GAS_SCHEDULE: Required = { [ERC20BridgeSource.Swerve]: fillData => (fillData as CurveFillData).pool.gasSchedule, [ERC20BridgeSource.SnowSwap]: fillData => (fillData as CurveFillData).pool.gasSchedule, [ERC20BridgeSource.Nerve]: fillData => (fillData as CurveFillData).pool.gasSchedule, + [ERC20BridgeSource.Synapse]: fillData => (fillData as CurveFillData).pool.gasSchedule, [ERC20BridgeSource.Belt]: fillData => (fillData as CurveFillData).pool.gasSchedule, [ERC20BridgeSource.Ellipsis]: fillData => (fillData as CurveFillData).pool.gasSchedule, [ERC20BridgeSource.Smoothy]: fillData => (fillData as CurveFillData).pool.gasSchedule, 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 db16f66425..860d3b6824 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/orders.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/orders.ts @@ -134,6 +134,8 @@ export function getErc20BridgeSourceToBridgeSource(source: ERC20BridgeSource): s return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'BakerySwap'); case ERC20BridgeSource.Nerve: return encodeBridgeSourceId(BridgeProtocol.Nerve, 'Nerve'); + case ERC20BridgeSource.Synapse: + return encodeBridgeSourceId(BridgeProtocol.Nerve, 'Synapse'); case ERC20BridgeSource.Belt: return encodeBridgeSourceId(BridgeProtocol.Curve, 'Belt'); case ERC20BridgeSource.Ellipsis: @@ -226,6 +228,7 @@ export function createBridgeDataForBridgeOrder(order: OptimizedMarketBridgeOrder case ERC20BridgeSource.Swerve: case ERC20BridgeSource.SnowSwap: case ERC20BridgeSource.Nerve: + case ERC20BridgeSource.Synapse: case ERC20BridgeSource.Belt: case ERC20BridgeSource.Ellipsis: case ERC20BridgeSource.Smoothy: @@ -463,6 +466,7 @@ export const BRIDGE_ENCODERS: { [ERC20BridgeSource.Swerve]: curveEncoder, [ERC20BridgeSource.SnowSwap]: curveEncoder, [ERC20BridgeSource.Nerve]: curveEncoder, + [ERC20BridgeSource.Synapse]: curveEncoder, [ERC20BridgeSource.Belt]: curveEncoder, [ERC20BridgeSource.Ellipsis]: curveEncoder, [ERC20BridgeSource.Smoothy]: curveEncoder, 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 783ad9ea65..71efe7272f 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 @@ -1342,6 +1342,7 @@ export class SamplerOperations { case ERC20BridgeSource.Swerve: case ERC20BridgeSource.SnowSwap: case ERC20BridgeSource.Nerve: + case ERC20BridgeSource.Synapse: case ERC20BridgeSource.Belt: case ERC20BridgeSource.Ellipsis: case ERC20BridgeSource.Saddle: @@ -1647,6 +1648,7 @@ export class SamplerOperations { case ERC20BridgeSource.Swerve: case ERC20BridgeSource.SnowSwap: case ERC20BridgeSource.Nerve: + case ERC20BridgeSource.Synapse: case ERC20BridgeSource.Belt: case ERC20BridgeSource.Ellipsis: case ERC20BridgeSource.Saddle: 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 90a14a92fe..7e3863fcfa 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 { ShibaSwap = 'ShibaSwap', AaveV2 = 'Aave_V2', Compound = 'Compound', + Synapse = 'Synapse', // BSC only PancakeSwap = 'PancakeSwap', PancakeSwapV2 = 'PancakeSwap_V2', @@ -130,7 +131,7 @@ export enum CurveFunctionSelectors { // Smoothy swap_uint256 = '0x5673b02d', // swap(uint256,uint256,uint256,uint256) get_swap_amount = '0x45cf2ef6', // getSwapAmount(uint256,uint256,uint256) - // Nerve BSC, Saddle Mainnet + // Nerve BSC, Saddle Mainnet, Synapse swap = '0x91695586', // swap(uint8,uint8,uint256,uint256,uint256) calculateSwap = '0xa95b089f', // calculateSwap(uint8,uint8,uint256) }