diff --git a/packages/asset-swapper/src/constants.ts b/packages/asset-swapper/src/constants.ts index f7654046d4..4c9d0772c6 100644 --- a/packages/asset-swapper/src/constants.ts +++ b/packages/asset-swapper/src/constants.ts @@ -10,6 +10,7 @@ import { SwapQuoterOpts, } from './types'; +const NULL_BYTES = '0x'; const NULL_ADDRESS = '0x0000000000000000000000000000000000000000'; const MAINNET_NETWORK_ID = 1; const ONE_SECOND_MS = 1000; @@ -44,6 +45,7 @@ const DEFAULT_LIQUIDITY_REQUEST_OPTS: LiquidityRequestOpts = { }; export const constants = { + NULL_BYTES, ZERO_AMOUNT: new BigNumber(0), NULL_ADDRESS, MAINNET_NETWORK_ID, diff --git a/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts b/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts index 140d6ee856..edbcffe0d9 100644 --- a/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts +++ b/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts @@ -77,6 +77,8 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase o.signature); + const optimizedOrders = swapQuoteConsumerUtils.optimizeOrdersForMarketExchangeOperation(orders, quote.type); + let params: ExchangeSmartContractParams; let methodName: string; @@ -84,7 +86,7 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase { + assert.assert( + order.takerAssetData === takerAssetData, + `Expected ${variableName}[${index}].takerAssetData to be ${takerAssetData}`, + ); + assert.assert( + order.makerAssetData === makerAssetData, + `Expected ${variableName}[${index}].makerAssetData to be ${makerAssetData}`, + ); + }); + }, isValidForwarderSwapQuote(variableName: string, swapQuote: SwapQuote, wethAssetData: string): void { assert.isValidSwapQuote(variableName, swapQuote); assert.isValidForwarderSignedOrders(`${variableName}.orders`, swapQuote.orders, wethAssetData); diff --git a/packages/asset-swapper/src/utils/swap_quote_consumer_utils.ts b/packages/asset-swapper/src/utils/swap_quote_consumer_utils.ts index 66c3eea345..0ca2651f06 100644 --- a/packages/asset-swapper/src/utils/swap_quote_consumer_utils.ts +++ b/packages/asset-swapper/src/utils/swap_quote_consumer_utils.ts @@ -1,5 +1,5 @@ import { ContractWrappers } from '@0x/contract-wrappers'; -import { SignedOrder } from '@0x/types'; +import { MarketOperation, SignedOrder } from '@0x/types'; import { BigNumber } from '@0x/utils'; import { SupportedProvider, Web3Wrapper } from '@0x/web3-wrapper'; import { Provider } from 'ethereum-types'; @@ -72,6 +72,17 @@ export const swapQuoteConsumerUtils = { isValidForwarderSignedOrder(order: SignedOrder, wethAssetData: string): boolean { return order.takerAssetData === wethAssetData; }, + optimizeOrdersForMarketExchangeOperation(orders: SignedOrder[], operation: MarketOperation): SignedOrder[] { + return _.map(orders, (order: SignedOrder, index: number) => { + const optimizedOrder = _.clone(order); + if (operation === MarketOperation.Sell && index !== 0) { + optimizedOrder.takerAssetData = constants.NULL_BYTES; + } else if (index !== 0) { + optimizedOrder.makerAssetData = constants.NULL_BYTES; + } + return optimizedOrder; + }); + }, async getConsumerForSwapQuoteAsync( quote: SwapQuote, contractWrappers: ContractWrappers,