From ea1528aea6ab3fd61c3dba6353becec2a9b259c9 Mon Sep 17 00:00:00 2001 From: Jacob Evans Date: Tue, 3 Mar 2020 17:53:35 +1100 Subject: [PATCH] [asset-swapper] Add latest BUSD Curve (#2506) * [asset-swapper] Add latest BUSD Curve * Update Compound Curve --- packages/asset-swapper/CHANGELOG.json | 8 ++++++++ packages/asset-swapper/src/constants.ts | 14 ++++++++++++-- .../src/utils/market_operation_utils/constants.ts | 2 ++ .../utils/market_operation_utils/create_order.ts | 7 ++----- .../src/utils/market_operation_utils/sampler.ts | 6 +----- .../src/utils/market_operation_utils/types.ts | 1 + .../test/market_operation_utils_test.ts | 13 +++---------- 7 files changed, 29 insertions(+), 22 deletions(-) diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index f36a7773a7..e2e0e16d42 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -9,6 +9,14 @@ { "note": "Add destroy for gas heartbeat", "pr": 2492 + }, + { + "note": "Added `BUSD` Curve", + "pr": 2506 + }, + { + "note": "Updated `Compound` Curve address", + "pr": 2506 } ] }, diff --git a/packages/asset-swapper/src/constants.ts b/packages/asset-swapper/src/constants.ts index c14d29ca33..cc94a15535 100644 --- a/packages/asset-swapper/src/constants.ts +++ b/packages/asset-swapper/src/constants.ts @@ -68,8 +68,8 @@ const DEFAULT_SWAP_QUOTE_REQUEST_OPTS: SwapQuoteRequestOpts = { // Mainnet Curve configuration const DEFAULT_CURVE_OPTS: { [source: string]: { version: number; curveAddress: string; tokens: string[] } } = { [ERC20BridgeSource.CurveUsdcDai]: { - version: 0, - curveAddress: '0x2e60cf74d81ac34eb21eeff58db4d385920ef419', + version: 1, + curveAddress: '0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56', tokens: ['0x6b175474e89094c44da98b954eedeac495271d0f', '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], }, [ERC20BridgeSource.CurveUsdcDaiUsdt]: { @@ -91,6 +91,16 @@ const DEFAULT_CURVE_OPTS: { [source: string]: { version: number; curveAddress: s '0x0000000000085d4780b73119b644ae5ecd22b376', ], }, + [ERC20BridgeSource.CurveUsdcDaiUsdtBusd]: { + version: 1, + curveAddress: '0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27', + tokens: [ + '0x6b175474e89094c44da98b954eedeac495271d0f', + '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + '0xdac17f958d2ee523a2206206994597c13d831ec7', + '0x4fabb145d64652a948d72533023f6e7a623c7c53', + ], + }, }; export const constants = { 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 78d02bd080..8b82ccdc6f 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/constants.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/constants.ts @@ -11,9 +11,11 @@ export const SELL_SOURCES = [ ERC20BridgeSource.Uniswap, ERC20BridgeSource.Eth2Dai, ERC20BridgeSource.Kyber, + // All Curve Sources ERC20BridgeSource.CurveUsdcDai, ERC20BridgeSource.CurveUsdcDaiUsdt, ERC20BridgeSource.CurveUsdcDaiUsdtTusd, + ERC20BridgeSource.CurveUsdcDaiUsdtBusd, ]; /** diff --git a/packages/asset-swapper/src/utils/market_operation_utils/create_order.ts b/packages/asset-swapper/src/utils/market_operation_utils/create_order.ts index f1b6f9004c..f47f9c8cc8 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/create_order.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/create_order.ts @@ -109,6 +109,7 @@ export class CreateOrderUtils { case ERC20BridgeSource.CurveUsdcDai: case ERC20BridgeSource.CurveUsdcDaiUsdt: case ERC20BridgeSource.CurveUsdcDaiUsdtTusd: + case ERC20BridgeSource.CurveUsdcDaiUsdtBusd: return this._contractAddress.curveBridge; default: break; @@ -127,11 +128,7 @@ function createBridgeOrder( isBuy: boolean = false, ): OptimizedMarketOrder { let makerAssetData; - if ( - fill.source === ERC20BridgeSource.CurveUsdcDai || - fill.source === ERC20BridgeSource.CurveUsdcDaiUsdt || - fill.source === ERC20BridgeSource.CurveUsdcDaiUsdtTusd - ) { + if (Object.keys(constants.DEFAULT_CURVE_OPTS).includes(fill.source)) { const { curveAddress, tokens, version } = constants.DEFAULT_CURVE_OPTS[fill.source]; const fromTokenIdx = tokens.indexOf(takerToken); const toTokenIdx = tokens.indexOf(makerToken); diff --git a/packages/asset-swapper/src/utils/market_operation_utils/sampler.ts b/packages/asset-swapper/src/utils/market_operation_utils/sampler.ts index 341969abf8..aed5405006 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/sampler.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/sampler.ts @@ -199,11 +199,7 @@ const samplerOperations = { batchedOperation = samplerOperations.getUniswapSellQuotes(makerToken, takerToken, takerFillAmounts); } else if (source === ERC20BridgeSource.Kyber) { batchedOperation = samplerOperations.getKyberSellQuotes(makerToken, takerToken, takerFillAmounts); - } else if ( - source === ERC20BridgeSource.CurveUsdcDai || - source === ERC20BridgeSource.CurveUsdcDaiUsdt || - source === ERC20BridgeSource.CurveUsdcDaiUsdtTusd - ) { + } else if (Object.keys(constants.DEFAULT_CURVE_OPTS).includes(source)) { const { curveAddress, tokens } = constants.DEFAULT_CURVE_OPTS[source]; const fromTokenIdx = tokens.indexOf(takerToken); const toTokenIdx = tokens.indexOf(makerToken); 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 4134ce165b..b5108d5c22 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -31,6 +31,7 @@ export enum ERC20BridgeSource { CurveUsdcDai = 'Curve_USDC_DAI', CurveUsdcDaiUsdt = 'Curve_USDC_DAI_USDT', CurveUsdcDaiUsdtTusd = 'Curve_USDC_DAI_USDT_TUSD', + CurveUsdcDaiUsdtBusd = 'Curve_USDC_DAI_USDT_BUSD', } // Internal `fillData` field for `Fill` objects. diff --git a/packages/asset-swapper/test/market_operation_utils_test.ts b/packages/asset-swapper/test/market_operation_utils_test.ts index 5161fedcb7..04e289f7af 100644 --- a/packages/asset-swapper/test/market_operation_utils_test.ts +++ b/packages/asset-swapper/test/market_operation_utils_test.ts @@ -204,6 +204,7 @@ describe('MarketOperationUtils tests', () => { [ERC20BridgeSource.CurveUsdcDai]: _.times(NUM_SAMPLES, () => 0), [ERC20BridgeSource.CurveUsdcDaiUsdt]: _.times(NUM_SAMPLES, () => 0), [ERC20BridgeSource.CurveUsdcDaiUsdtTusd]: _.times(NUM_SAMPLES, () => 0), + [ERC20BridgeSource.CurveUsdcDaiUsdtBusd]: _.times(NUM_SAMPLES, () => 0), }; function findSourceWithMaxOutput(rates: RatesBySource): ERC20BridgeSource { @@ -274,11 +275,7 @@ describe('MarketOperationUtils tests', () => { runLimit: 0, sampleDistributionBase: 1, bridgeSlippage: 0, - excludedSources: [ - ERC20BridgeSource.CurveUsdcDai, - ERC20BridgeSource.CurveUsdcDaiUsdt, - ERC20BridgeSource.CurveUsdcDaiUsdtTusd, - ], + excludedSources: Object.keys(assetSwapperConstants.DEFAULT_CURVE_OPTS) as ERC20BridgeSource[], }; beforeEach(() => { @@ -545,11 +542,7 @@ describe('MarketOperationUtils tests', () => { numSamples: NUM_SAMPLES, runLimit: 0, sampleDistributionBase: 1, - excludedSources: [ - ERC20BridgeSource.CurveUsdcDai, - ERC20BridgeSource.CurveUsdcDaiUsdt, - ERC20BridgeSource.CurveUsdcDaiUsdtTusd, - ], + excludedSources: Object.keys(assetSwapperConstants.DEFAULT_CURVE_OPTS) as ERC20BridgeSource[], }; beforeEach(() => {