refactored for market sell + buy
This commit is contained in:
		@@ -5,7 +5,6 @@ import {
 | 
				
			|||||||
    ForwarderSwapQuoteExecutionOpts,
 | 
					    ForwarderSwapQuoteExecutionOpts,
 | 
				
			||||||
    ForwarderSwapQuoteGetOutputOpts,
 | 
					    ForwarderSwapQuoteGetOutputOpts,
 | 
				
			||||||
    OrdersAndFillableAmounts,
 | 
					    OrdersAndFillableAmounts,
 | 
				
			||||||
    SwapQuoteOperation,
 | 
					 | 
				
			||||||
    SwapQuoteRequestOpts,
 | 
					    SwapQuoteRequestOpts,
 | 
				
			||||||
    SwapQuoterOpts,
 | 
					    SwapQuoterOpts,
 | 
				
			||||||
} from './types';
 | 
					} from './types';
 | 
				
			||||||
@@ -30,7 +29,6 @@ const DEFAULT_FORWARDER_SWAP_QUOTE_EXECUTE_OPTS: ForwarderSwapQuoteExecutionOpts
 | 
				
			|||||||
const DEFAULT_SWAP_QUOTE_REQUEST_OPTS: SwapQuoteRequestOpts = {
 | 
					const DEFAULT_SWAP_QUOTE_REQUEST_OPTS: SwapQuoteRequestOpts = {
 | 
				
			||||||
    shouldForceOrderRefresh: false,
 | 
					    shouldForceOrderRefresh: false,
 | 
				
			||||||
    slippagePercentage: 0.2, // 20% slippage protection,
 | 
					    slippagePercentage: 0.2, // 20% slippage protection,
 | 
				
			||||||
    operation: SwapQuoteOperation.MarketBuy,
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const EMPTY_ORDERS_AND_FILLABLE_AMOUNTS: OrdersAndFillableAmounts = {
 | 
					const EMPTY_ORDERS_AND_FILLABLE_AMOUNTS: OrdersAndFillableAmounts = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,13 +12,14 @@ import { StandardRelayerAPIOrderProvider } from './order_providers/standard_rela
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
    LiquidityForAssetData,
 | 
					    LiquidityForAssetData,
 | 
				
			||||||
    LiquidityRequestOpts,
 | 
					    LiquidityRequestOpts,
 | 
				
			||||||
 | 
					    MarketBuySwapQuote,
 | 
				
			||||||
 | 
					    MarketSellSwapQuote,
 | 
				
			||||||
    OrderProvider,
 | 
					    OrderProvider,
 | 
				
			||||||
    OrdersAndFillableAmounts,
 | 
					    OrdersAndFillableAmounts,
 | 
				
			||||||
    SwapQuote,
 | 
					    SwapQuote,
 | 
				
			||||||
    SwapQuoteRequestOpts,
 | 
					    SwapQuoteRequestOpts,
 | 
				
			||||||
    SwapQuoterError,
 | 
					    SwapQuoterError,
 | 
				
			||||||
    SwapQuoterOpts,
 | 
					    SwapQuoterOpts,
 | 
				
			||||||
    SwapQuoteOperation,
 | 
					 | 
				
			||||||
} from './types';
 | 
					} from './types';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { assert } from './utils/assert';
 | 
					import { assert } from './utils/assert';
 | 
				
			||||||
@@ -126,25 +127,25 @@ export class SwapQuoter {
 | 
				
			|||||||
     * You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption.
 | 
					     * You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption.
 | 
				
			||||||
     * @param   makerAssetData           The makerAssetData of the desired asset to swap for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
					     * @param   makerAssetData           The makerAssetData of the desired asset to swap for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
     * @param   takerAssetData           The takerAssetData of the asset to swap makerAssetData for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
					     * @param   takerAssetData           The takerAssetData of the asset to swap makerAssetData for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
     * @param   makerAssetSwapAmount     The amount of maker asset to swap for.
 | 
					     * @param   takerAssetSellAmount     The amount of maker asset to swap for.
 | 
				
			||||||
     * @param   options                  Options for the request. See type definition for more information.
 | 
					     * @param   options                  Options for the request. See type definition for more information.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
					     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public async getSwapQuoteAsync(
 | 
					    public async getMarketSellSwapQuoteAsync(
 | 
				
			||||||
        makerAssetData: string,
 | 
					        makerAssetData: string,
 | 
				
			||||||
        takerAssetData: string,
 | 
					        takerAssetData: string,
 | 
				
			||||||
        assetSwapAmount: BigNumber,
 | 
					        takerAssetSellAmount: BigNumber,
 | 
				
			||||||
        options: Partial<SwapQuoteRequestOpts> = {},
 | 
					        options: Partial<SwapQuoteRequestOpts> = {},
 | 
				
			||||||
    ): Promise<SwapQuote> {
 | 
					    ): Promise<MarketSellSwapQuote> {
 | 
				
			||||||
        const { shouldForceOrderRefresh, slippagePercentage, operation } = _.merge(
 | 
					        const { shouldForceOrderRefresh, slippagePercentage } = _.merge(
 | 
				
			||||||
            {},
 | 
					            {},
 | 
				
			||||||
            constants.DEFAULT_SWAP_QUOTE_REQUEST_OPTS,
 | 
					            constants.DEFAULT_SWAP_QUOTE_REQUEST_OPTS,
 | 
				
			||||||
            options,
 | 
					            options,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        assert.isString('makerAssetData', makerAssetData);
 | 
					        assert.isString('makerAssetData', makerAssetData);
 | 
				
			||||||
        assert.isString('takerAssetData', takerAssetData);
 | 
					        assert.isString('takerAssetData', takerAssetData);
 | 
				
			||||||
        assert.isBigNumber('assetSwapAmount', assetSwapAmount);
 | 
					        assert.isBigNumber('takerAssetSellAmount', takerAssetSellAmount);
 | 
				
			||||||
        assert.isBoolean('shouldForceOrderRefresh', shouldForceOrderRefresh);
 | 
					        assert.isBoolean('shouldForceOrderRefresh', shouldForceOrderRefresh);
 | 
				
			||||||
        assert.isNumber('slippagePercentage', slippagePercentage);
 | 
					        assert.isNumber('slippagePercentage', slippagePercentage);
 | 
				
			||||||
        const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow();
 | 
					        const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow();
 | 
				
			||||||
@@ -165,24 +166,68 @@ export class SwapQuoter {
 | 
				
			|||||||
                }: For makerAssetdata ${makerAssetData} and takerAssetdata ${takerAssetData}`,
 | 
					                }: For makerAssetdata ${makerAssetData} and takerAssetdata ${takerAssetData}`,
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        let swapQuote: SwapQuote;
 | 
					        const swapQuote = swapQuoteCalculator.calculateMarketSellSwapQuote(
 | 
				
			||||||
        if (operation === SwapQuoteOperation.MarketBuy) {
 | 
					 | 
				
			||||||
            swapQuote = swapQuoteCalculator.calculateMarketBuySwapQuote(
 | 
					 | 
				
			||||||
                ordersAndFillableAmounts,
 | 
					                ordersAndFillableAmounts,
 | 
				
			||||||
                feeOrdersAndFillableAmounts,
 | 
					                feeOrdersAndFillableAmounts,
 | 
				
			||||||
                assetSwapAmount,
 | 
					                takerAssetSellAmount,
 | 
				
			||||||
                slippagePercentage,
 | 
					                slippagePercentage,
 | 
				
			||||||
                isMakerAssetZrxToken,
 | 
					                isMakerAssetZrxToken,
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        } else {
 | 
					        return swapQuote;
 | 
				
			||||||
            swapQuote = swapQuoteCalculator.calculateMarketSellSwapQuote(
 | 
					    }
 | 
				
			||||||
                ordersAndFillableAmounts,
 | 
					
 | 
				
			||||||
                feeOrdersAndFillableAmounts,
 | 
					    /**
 | 
				
			||||||
                assetSwapAmount,
 | 
					     * Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address.
 | 
				
			||||||
                slippagePercentage,
 | 
					     * You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption.
 | 
				
			||||||
                isMakerAssetZrxToken,
 | 
					     * @param   makerAssetData           The makerAssetData of the desired asset to swap for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
 | 
					     * @param   takerAssetData           The takerAssetData of the asset to swap makerAssetData for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
 | 
					     * @param   makerAssetSwapAmount     The amount of maker asset to swap for.
 | 
				
			||||||
 | 
					     * @param   options                  Options for the request. See type definition for more information.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public async getMarketBuySwapQuoteAsync(
 | 
				
			||||||
 | 
					        makerAssetData: string,
 | 
				
			||||||
 | 
					        takerAssetData: string,
 | 
				
			||||||
 | 
					        makerAssetBuyAmount: BigNumber,
 | 
				
			||||||
 | 
					        options: Partial<SwapQuoteRequestOpts> = {},
 | 
				
			||||||
 | 
					    ): Promise<MarketBuySwapQuote> {
 | 
				
			||||||
 | 
					        const { shouldForceOrderRefresh, slippagePercentage } = _.merge(
 | 
				
			||||||
 | 
					            {},
 | 
				
			||||||
 | 
					            constants.DEFAULT_SWAP_QUOTE_REQUEST_OPTS,
 | 
				
			||||||
 | 
					            options,
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        assert.isString('makerAssetData', makerAssetData);
 | 
				
			||||||
 | 
					        assert.isString('takerAssetData', takerAssetData);
 | 
				
			||||||
 | 
					        assert.isBigNumber('makerAssetBuyAmount', makerAssetBuyAmount);
 | 
				
			||||||
 | 
					        assert.isBoolean('shouldForceOrderRefresh', shouldForceOrderRefresh);
 | 
				
			||||||
 | 
					        assert.isNumber('slippagePercentage', slippagePercentage);
 | 
				
			||||||
 | 
					        const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow();
 | 
				
			||||||
 | 
					        const isMakerAssetZrxToken = makerAssetData === zrxTokenAssetData;
 | 
				
			||||||
 | 
					        // get the relevant orders for the makerAsset and fees
 | 
				
			||||||
 | 
					        // if the requested assetData is ZRX, don't get the fee info
 | 
				
			||||||
 | 
					        const [ordersAndFillableAmounts, feeOrdersAndFillableAmounts] = await Promise.all([
 | 
				
			||||||
 | 
					            this.getOrdersAndFillableAmountsAsync(makerAssetData, takerAssetData, shouldForceOrderRefresh),
 | 
				
			||||||
 | 
					            isMakerAssetZrxToken
 | 
				
			||||||
 | 
					                ? Promise.resolve(constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS)
 | 
				
			||||||
 | 
					                : this.getOrdersAndFillableAmountsAsync(zrxTokenAssetData, takerAssetData, shouldForceOrderRefresh),
 | 
				
			||||||
 | 
					            shouldForceOrderRefresh,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					        if (ordersAndFillableAmounts.orders.length === 0) {
 | 
				
			||||||
 | 
					            throw new Error(
 | 
				
			||||||
 | 
					                `${
 | 
				
			||||||
 | 
					                    SwapQuoterError.AssetUnavailable
 | 
				
			||||||
 | 
					                }: For makerAssetdata ${makerAssetData} and takerAssetdata ${takerAssetData}`,
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        const swapQuote = swapQuoteCalculator.calculateMarketBuySwapQuote(
 | 
				
			||||||
 | 
					                ordersAndFillableAmounts,
 | 
				
			||||||
 | 
					                feeOrdersAndFillableAmounts,
 | 
				
			||||||
 | 
					                makerAssetBuyAmount,
 | 
				
			||||||
 | 
					                slippagePercentage,
 | 
				
			||||||
 | 
					                isMakerAssetZrxToken,
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return swapQuote;
 | 
					        return swapQuote;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -195,18 +240,43 @@ export class SwapQuoter {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
					     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public async getSwapQuoteForERC20TokenAddressAsync(
 | 
					    public async getMarketBuySwapQuoteForERC20TokenAddressAsync(
 | 
				
			||||||
        makerTokenAddress: string,
 | 
					        makerTokenAddress: string,
 | 
				
			||||||
        takerTokenAddress: string,
 | 
					        takerTokenAddress: string,
 | 
				
			||||||
        assetSwapAmount: BigNumber,
 | 
					        makerAssetBuyAmount: BigNumber,
 | 
				
			||||||
        options: Partial<SwapQuoteRequestOpts> = {},
 | 
					        options: Partial<SwapQuoteRequestOpts> = {},
 | 
				
			||||||
    ): Promise<SwapQuote> {
 | 
					    ): Promise<SwapQuote> {
 | 
				
			||||||
        assert.isETHAddressHex('makerTokenAddress', makerTokenAddress);
 | 
					        assert.isETHAddressHex('makerTokenAddress', makerTokenAddress);
 | 
				
			||||||
        assert.isETHAddressHex('takerTokenAddress', takerTokenAddress);
 | 
					        assert.isETHAddressHex('takerTokenAddress', takerTokenAddress);
 | 
				
			||||||
        assert.isBigNumber('assetSwapAmount', assetSwapAmount);
 | 
					        assert.isBigNumber('makerAssetBuyAmount', makerAssetBuyAmount);
 | 
				
			||||||
        const makerAssetData = assetDataUtils.encodeERC20AssetData(makerTokenAddress);
 | 
					        const makerAssetData = assetDataUtils.encodeERC20AssetData(makerTokenAddress);
 | 
				
			||||||
        const takerAssetData = assetDataUtils.encodeERC20AssetData(takerTokenAddress);
 | 
					        const takerAssetData = assetDataUtils.encodeERC20AssetData(takerTokenAddress);
 | 
				
			||||||
        const swapQuote = this.getSwapQuoteAsync(makerAssetData, takerAssetData, assetSwapAmount, options);
 | 
					        const swapQuote = this.getMarketBuySwapQuoteAsync(makerAssetData, takerAssetData, makerAssetBuyAmount, options);
 | 
				
			||||||
 | 
					        return swapQuote;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address.
 | 
				
			||||||
 | 
					     * You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption.
 | 
				
			||||||
 | 
					     * @param   makerAssetData           The makerAssetData of the desired asset to swap for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
 | 
					     * @param   takerAssetData           The takerAssetData of the asset to swap makerAssetData for (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
 | 
					     * @param   makerAssetSwapAmount     The amount of maker asset to swap for.
 | 
				
			||||||
 | 
					     * @param   options                  Options for the request. See type definition for more information.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return  An object that conforms to SwapQuote that satisfies the request. See type definition for more information.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public async getMarketSellSwapQuoteForERC20TokenAddressAsync(
 | 
				
			||||||
 | 
					        makerTokenAddress: string,
 | 
				
			||||||
 | 
					        takerTokenAddress: string,
 | 
				
			||||||
 | 
					        takerAssetSellAmount: BigNumber,
 | 
				
			||||||
 | 
					        options: Partial<SwapQuoteRequestOpts> = {},
 | 
				
			||||||
 | 
					    ): Promise<SwapQuote> {
 | 
				
			||||||
 | 
					        assert.isETHAddressHex('makerTokenAddress', makerTokenAddress);
 | 
				
			||||||
 | 
					        assert.isETHAddressHex('takerTokenAddress', takerTokenAddress);
 | 
				
			||||||
 | 
					        assert.isBigNumber('takerAssetSellAmount', takerAssetSellAmount);
 | 
				
			||||||
 | 
					        const makerAssetData = assetDataUtils.encodeERC20AssetData(makerTokenAddress);
 | 
				
			||||||
 | 
					        const takerAssetData = assetDataUtils.encodeERC20AssetData(takerTokenAddress);
 | 
				
			||||||
 | 
					        const swapQuote = this.getMarketSellSwapQuoteAsync(makerAssetData, takerAssetData, takerAssetSellAmount, options);
 | 
				
			||||||
        return swapQuote;
 | 
					        return swapQuote;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -154,11 +154,6 @@ export interface ForwarderSwapQuoteGetOutputOpts extends SwapQuoteGetOutputOpts
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
export interface ForwarderSwapQuoteExecutionOpts extends ForwarderSwapQuoteGetOutputOpts, SwapQuoteExecutionOpts {}
 | 
					export interface ForwarderSwapQuoteExecutionOpts extends ForwarderSwapQuoteGetOutputOpts, SwapQuoteExecutionOpts {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export enum SwapQuoteOperation {
 | 
					 | 
				
			||||||
    MarketSell = 'MARKET_SELL',
 | 
					 | 
				
			||||||
    MarketBuy = 'MARKET_BUY',
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * takerAssetData: String that represents a specific taker asset (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
					 * takerAssetData: String that represents a specific taker asset (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
 * makerAssetData: String that represents a specific maker asset (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
					 * makerAssetData: String that represents a specific maker asset (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
 | 
				
			||||||
@@ -171,13 +166,22 @@ export enum SwapQuoteOperation {
 | 
				
			|||||||
export interface SwapQuote {
 | 
					export interface SwapQuote {
 | 
				
			||||||
    takerAssetData: string;
 | 
					    takerAssetData: string;
 | 
				
			||||||
    makerAssetData: string;
 | 
					    makerAssetData: string;
 | 
				
			||||||
    takerAssetFillAmount?: BigNumber;
 | 
					 | 
				
			||||||
    makerAssetFillAmount?: BigNumber;
 | 
					 | 
				
			||||||
    orders: SignedOrder[];
 | 
					    orders: SignedOrder[];
 | 
				
			||||||
    feeOrders: SignedOrder[];
 | 
					    feeOrders: SignedOrder[];
 | 
				
			||||||
    bestCaseQuoteInfo: SwapQuoteInfo;
 | 
					    bestCaseQuoteInfo: SwapQuoteInfo;
 | 
				
			||||||
    worstCaseQuoteInfo: SwapQuoteInfo;
 | 
					    worstCaseQuoteInfo: SwapQuoteInfo;
 | 
				
			||||||
    operation: SwapQuoteOperation;
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface MarketSellSwapQuote extends SwapQuote {
 | 
				
			||||||
 | 
					    takerAssetFillAmount: BigNumber;
 | 
				
			||||||
 | 
					    bestCaseQuoteInfo: MarketSellSwapQuoteInfo;
 | 
				
			||||||
 | 
					    worstCaseQuoteInfo: MarketSellSwapQuoteInfo;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface MarketBuySwapQuote extends SwapQuote {
 | 
				
			||||||
 | 
					    makerAssetFillAmount: BigNumber;
 | 
				
			||||||
 | 
					    bestCaseQuoteInfo: MarketBuySwapQuoteInfo;
 | 
				
			||||||
 | 
					    worstCaseQuoteInfo: MarketBuySwapQuoteInfo;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface SwapQuoteWithAffiliateFee extends SwapQuote {
 | 
					export interface SwapQuoteWithAffiliateFee extends SwapQuote {
 | 
				
			||||||
@@ -190,12 +194,18 @@ export interface SwapQuoteWithAffiliateFee extends SwapQuote {
 | 
				
			|||||||
 * totalEthAmount: The total amount of eth required to complete the buy (filling orders, feeOrders, and paying affiliate fee).
 | 
					 * totalEthAmount: The total amount of eth required to complete the buy (filling orders, feeOrders, and paying affiliate fee).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export interface SwapQuoteInfo {
 | 
					export interface SwapQuoteInfo {
 | 
				
			||||||
    takerTokenAmount: BigNumber;
 | 
					 | 
				
			||||||
    makerTokenAmount: BigNumber;
 | 
					 | 
				
			||||||
    feeTakerTokenAmount: BigNumber;
 | 
					    feeTakerTokenAmount: BigNumber;
 | 
				
			||||||
    totalTakerTokenAmount: BigNumber;
 | 
					    totalTakerTokenAmount: BigNumber;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface MarketSellSwapQuoteInfo extends SwapQuoteInfo {
 | 
				
			||||||
 | 
					    makerTokenAmount: BigNumber;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface MarketBuySwapQuoteInfo extends SwapQuoteInfo {
 | 
				
			||||||
 | 
					    takerTokenAmount: BigNumber;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * shouldForceOrderRefresh: If set to true, new orders and state will be fetched instead of waiting for the next orderRefreshIntervalMs. Defaults to false.
 | 
					 * shouldForceOrderRefresh: If set to true, new orders and state will be fetched instead of waiting for the next orderRefreshIntervalMs. Defaults to false.
 | 
				
			||||||
 * slippagePercentage: The percentage buffer to add to account for slippage. Affects max ETH price estimates. Defaults to 0.2 (20%).
 | 
					 * slippagePercentage: The percentage buffer to add to account for slippage. Affects max ETH price estimates. Defaults to 0.2 (20%).
 | 
				
			||||||
@@ -203,7 +213,6 @@ export interface SwapQuoteInfo {
 | 
				
			|||||||
export interface SwapQuoteRequestOpts {
 | 
					export interface SwapQuoteRequestOpts {
 | 
				
			||||||
    shouldForceOrderRefresh: boolean;
 | 
					    shouldForceOrderRefresh: boolean;
 | 
				
			||||||
    slippagePercentage: number;
 | 
					    slippagePercentage: number;
 | 
				
			||||||
    operation: SwapQuoteOperation;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ import * as _ from 'lodash';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { constants } from '../constants';
 | 
					import { constants } from '../constants';
 | 
				
			||||||
import { InsufficientAssetLiquidityError } from '../errors';
 | 
					import { InsufficientAssetLiquidityError } from '../errors';
 | 
				
			||||||
import { OrdersAndFillableAmounts, SwapQuote, SwapQuoteInfo, SwapQuoteOperation, SwapQuoterError } from '../types';
 | 
					import { MarketBuySwapQuote, MarketBuySwapQuoteInfo, MarketSellSwapQuote, MarketSellSwapQuoteInfo, OrdersAndFillableAmounts, SwapQuoterError } from '../types';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Calculates a swap quote for orders
 | 
					// Calculates a swap quote for orders
 | 
				
			||||||
export const swapQuoteCalculator = {
 | 
					export const swapQuoteCalculator = {
 | 
				
			||||||
@@ -14,7 +14,7 @@ export const swapQuoteCalculator = {
 | 
				
			|||||||
        takerAssetFillAmount: BigNumber,
 | 
					        takerAssetFillAmount: BigNumber,
 | 
				
			||||||
        slippagePercentage: number,
 | 
					        slippagePercentage: number,
 | 
				
			||||||
        isMakerAssetZrxToken: boolean,
 | 
					        isMakerAssetZrxToken: boolean,
 | 
				
			||||||
    ): SwapQuote {
 | 
					    ): MarketSellSwapQuote {
 | 
				
			||||||
        const orders = ordersAndFillableAmounts.orders;
 | 
					        const orders = ordersAndFillableAmounts.orders;
 | 
				
			||||||
        const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts;
 | 
					        const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts;
 | 
				
			||||||
        const remainingFillableTakerAssetAmounts = remainingFillableMakerAssetAmounts.map((makerAssetAmount: BigNumber, index: number) => {
 | 
					        const remainingFillableTakerAssetAmounts = remainingFillableMakerAssetAmounts.map((makerAssetAmount: BigNumber, index: number) => {
 | 
				
			||||||
@@ -112,7 +112,6 @@ export const swapQuoteCalculator = {
 | 
				
			|||||||
            feeOrders: resultFeeOrders,
 | 
					            feeOrders: resultFeeOrders,
 | 
				
			||||||
            bestCaseQuoteInfo,
 | 
					            bestCaseQuoteInfo,
 | 
				
			||||||
            worstCaseQuoteInfo,
 | 
					            worstCaseQuoteInfo,
 | 
				
			||||||
            operation: SwapQuoteOperation.MarketBuy,
 | 
					 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    calculateMarketBuySwapQuote(
 | 
					    calculateMarketBuySwapQuote(
 | 
				
			||||||
@@ -121,7 +120,7 @@ export const swapQuoteCalculator = {
 | 
				
			|||||||
        makerAssetFillAmount: BigNumber,
 | 
					        makerAssetFillAmount: BigNumber,
 | 
				
			||||||
        slippagePercentage: number,
 | 
					        slippagePercentage: number,
 | 
				
			||||||
        isMakerAssetZrxToken: boolean,
 | 
					        isMakerAssetZrxToken: boolean,
 | 
				
			||||||
    ): SwapQuote {
 | 
					    ): MarketBuySwapQuote {
 | 
				
			||||||
        const orders = ordersAndFillableAmounts.orders;
 | 
					        const orders = ordersAndFillableAmounts.orders;
 | 
				
			||||||
        const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts;
 | 
					        const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts;
 | 
				
			||||||
        const feeOrders = feeOrdersAndFillableAmounts.orders;
 | 
					        const feeOrders = feeOrdersAndFillableAmounts.orders;
 | 
				
			||||||
@@ -213,7 +212,6 @@ export const swapQuoteCalculator = {
 | 
				
			|||||||
            feeOrders: resultFeeOrders,
 | 
					            feeOrders: resultFeeOrders,
 | 
				
			||||||
            bestCaseQuoteInfo,
 | 
					            bestCaseQuoteInfo,
 | 
				
			||||||
            worstCaseQuoteInfo,
 | 
					            worstCaseQuoteInfo,
 | 
				
			||||||
            operation: SwapQuoteOperation.MarketBuy,
 | 
					 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -223,7 +221,7 @@ function calculateMarketBuyQuoteInfo(
 | 
				
			|||||||
    feeOrdersAndFillableAmounts: OrdersAndFillableAmounts,
 | 
					    feeOrdersAndFillableAmounts: OrdersAndFillableAmounts,
 | 
				
			||||||
    makerAssetBuyAmount: BigNumber,
 | 
					    makerAssetBuyAmount: BigNumber,
 | 
				
			||||||
    isMakerAssetZrxToken: boolean,
 | 
					    isMakerAssetZrxToken: boolean,
 | 
				
			||||||
): SwapQuoteInfo {
 | 
					): MarketBuySwapQuoteInfo {
 | 
				
			||||||
    // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right
 | 
					    // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right
 | 
				
			||||||
    let takerTokenAmount = constants.ZERO_AMOUNT;
 | 
					    let takerTokenAmount = constants.ZERO_AMOUNT;
 | 
				
			||||||
    let zrxTakerTokenAmount = constants.ZERO_AMOUNT;
 | 
					    let zrxTakerTokenAmount = constants.ZERO_AMOUNT;
 | 
				
			||||||
@@ -247,7 +245,6 @@ function calculateMarketBuyQuoteInfo(
 | 
				
			|||||||
    const totalTakerTokenAmount = takerTokenAmount.plus(feeTakerTokenAmount);
 | 
					    const totalTakerTokenAmount = takerTokenAmount.plus(feeTakerTokenAmount);
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
        takerTokenAmount,
 | 
					        takerTokenAmount,
 | 
				
			||||||
        makerTokenAmount: makerAssetBuyAmount,
 | 
					 | 
				
			||||||
        feeTakerTokenAmount,
 | 
					        feeTakerTokenAmount,
 | 
				
			||||||
        totalTakerTokenAmount,
 | 
					        totalTakerTokenAmount,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -258,7 +255,7 @@ function calculateMarketSellQuoteInfo(
 | 
				
			|||||||
    feeOrdersAndFillableAmounts: OrdersAndFillableAmounts,
 | 
					    feeOrdersAndFillableAmounts: OrdersAndFillableAmounts,
 | 
				
			||||||
    takerAssetSellAmount: BigNumber,
 | 
					    takerAssetSellAmount: BigNumber,
 | 
				
			||||||
    isMakerAssetZrxToken: boolean,
 | 
					    isMakerAssetZrxToken: boolean,
 | 
				
			||||||
): SwapQuoteInfo {
 | 
					): MarketSellSwapQuoteInfo {
 | 
				
			||||||
    // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right
 | 
					    // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right
 | 
				
			||||||
    let makerTokenAmount = constants.ZERO_AMOUNT;
 | 
					    let makerTokenAmount = constants.ZERO_AMOUNT;
 | 
				
			||||||
    let zrxTakerTokenAmount = constants.ZERO_AMOUNT;
 | 
					    let zrxTakerTokenAmount = constants.ZERO_AMOUNT;
 | 
				
			||||||
@@ -281,7 +278,6 @@ function calculateMarketSellQuoteInfo(
 | 
				
			|||||||
    // eth amount needed in total is the sum of the amount needed for the asset and the amount needed for fees
 | 
					    // eth amount needed in total is the sum of the amount needed for the asset and the amount needed for fees
 | 
				
			||||||
    const totalTakerTokenAmount = takerAssetSellAmount.plus(feeTakerTokenAmount);
 | 
					    const totalTakerTokenAmount = takerAssetSellAmount.plus(feeTakerTokenAmount);
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
        takerTokenAmount: takerAssetSellAmount,
 | 
					 | 
				
			||||||
        makerTokenAmount,
 | 
					        makerTokenAmount,
 | 
				
			||||||
        feeTakerTokenAmount,
 | 
					        feeTakerTokenAmount,
 | 
				
			||||||
        totalTakerTokenAmount,
 | 
					        totalTakerTokenAmount,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user