aboutsummaryrefslogtreecommitdiffstats
path: root/packages/asset-buyer
diff options
context:
space:
mode:
Diffstat (limited to 'packages/asset-buyer')
-rw-r--r--packages/asset-buyer/src/asset_buyer.ts10
-rw-r--r--packages/asset-buyer/src/constants.ts11
-rw-r--r--packages/asset-buyer/src/types.ts6
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<BuyQuoteRequestOpts>,
): Promise<BuyQuote> {
+ 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.
*/