From 0003666050c4991623cb36ec994d536e4703b4fe Mon Sep 17 00:00:00 2001 From: fragosti Date: Tue, 18 Sep 2018 16:42:52 +0200 Subject: make the slippage percentage customizable by integrator --- packages/asset-buyer/src/asset_buyer.ts | 10 +++++----- packages/asset-buyer/src/constants.ts | 11 +++++++++-- packages/asset-buyer/src/types.ts | 6 ++++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/asset-buyer/src/asset_buyer.ts b/packages/asset-buyer/src/asset_buyer.ts index 76b96427e..a2c0f37c9 100644 --- a/packages/asset-buyer/src/asset_buyer.ts +++ b/packages/asset-buyer/src/asset_buyer.ts @@ -13,6 +13,7 @@ import { AssetBuyerError, AssetBuyerOrdersAndFillableAmounts, BuyQuote, + BuyQuoteRequestOpts, OrderFetcher, OrderFetcherResponse, } from './types'; @@ -160,12 +161,13 @@ export class AssetBuyer { */ public async getBuyQuoteAsync( assetBuyAmount: BigNumber, - feePercentage: number = constants.DEFAULT_FEE_PERCENTAGE, - forceOrderRefresh: boolean = false, + options: Partial, ): Promise { + const { feePercentage, forceOrderRefresh, slippagePercentage } = { ...options, ...constants.DEFAULT_BUY_QUOTE_REQUEST_OPTS }; assert.isBigNumber('assetBuyAmount', assetBuyAmount); assert.isNumber('feePercentage', feePercentage); assert.isBoolean('forceOrderRefresh', forceOrderRefresh); + assert.isNumber('feePercentage', slippagePercentage); // we should refresh if: // we do not have any orders OR // we are forced to OR @@ -185,13 +187,11 @@ export class AssetBuyer { ordersAndFillableAmounts = this ._currentOrdersAndFillableAmountsIfExists as AssetBuyerOrdersAndFillableAmounts; } - // TODO: optimization - // make the slippage percentage customizable by integrator const buyQuote = buyQuoteCalculator.calculate( ordersAndFillableAmounts, assetBuyAmount, feePercentage, - constants.DEFAULT_SLIPPAGE_PERCENTAGE, + slippagePercentage, ); return buyQuote; } diff --git a/packages/asset-buyer/src/constants.ts b/packages/asset-buyer/src/constants.ts index e20bcc6ed..53fe89160 100644 --- a/packages/asset-buyer/src/constants.ts +++ b/packages/asset-buyer/src/constants.ts @@ -1,11 +1,18 @@ import { BigNumber } from '@0xproject/utils'; +import { BuyQuoteRequestOpts } from './types'; + +const DEFAULT_BUY_QUOTE_REQUEST_OPTS: BuyQuoteRequestOpts = { + feePercentage: 0, + forceOrderRefresh: false, + slippagePercentage: 0.2, // 20% slippage protection +}; + export const constants = { ZERO_AMOUNT: new BigNumber(0), NULL_ADDRESS: '0x0000000000000000000000000000000000000000', MAINNET_NETWORK_ID: 1, - DEFAULT_SLIPPAGE_PERCENTAGE: 0.2, // 20% slippage protection DEFAULT_ORDER_REFRESH_INTERVAL_MS: 10000, // 10 seconds - DEFAULT_FEE_PERCENTAGE: 0, ETHER_TOKEN_DECIMALS: 18, + DEFAULT_BUY_QUOTE_REQUEST_OPTS, }; diff --git a/packages/asset-buyer/src/types.ts b/packages/asset-buyer/src/types.ts index 75773f0e8..fb4aecd77 100644 --- a/packages/asset-buyer/src/types.ts +++ b/packages/asset-buyer/src/types.ts @@ -52,6 +52,12 @@ export interface BuyQuote { feePercentage?: number; } +export interface BuyQuoteRequestOpts { + feePercentage: number; + forceOrderRefresh: boolean; + slippagePercentage: number; +} + /** * Possible errors thrown by an AssetBuyer instance or associated static methods. */ -- cgit v1.2.3