make the slippage percentage customizable by integrator
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user