From 235e406620d63d05dfa62c7c98c6a7be86d0b76f Mon Sep 17 00:00:00 2001 From: Daniel Pyrathon Date: Thu, 24 Sep 2020 15:27:55 -0700 Subject: [PATCH] initial decoupling of Quote reporter --- .../src/utils/market_operation_utils/index.ts | 95 +++++++++---------- .../src/utils/market_operation_utils/types.ts | 3 +- 2 files changed, 46 insertions(+), 52 deletions(-) diff --git a/packages/asset-swapper/src/utils/market_operation_utils/index.ts b/packages/asset-swapper/src/utils/market_operation_utils/index.ts index 672045106e..75e91a80e9 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/index.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/index.ts @@ -33,6 +33,7 @@ import { DexSample, ERC20BridgeSource, FeeSchedule, + FillData, GetMarketOrdersOpts, MarketSideLiquidity, OptimizedMarketOrder, @@ -78,6 +79,20 @@ export class MarketOperationUtils { private readonly _buySources: SourceFilters; private readonly _feeSources = new SourceFilters(FEE_QUOTE_SOURCES); + private static _computeQuoteReport(nativeOrders: SignedOrder[], quoteRequestor: QuoteRequestor, marketSideLiquidity: MarketSideLiquidity, optimizerResult: OptimizerResult): void { + const {side, dexQuotes, twoHopQuotes, orderFillableAmounts } = marketSideLiquidity; + const { liquidityDelivered } = optimizerResult; + generateQuoteReport( + side, + _.flatten(dexQuotes), + twoHopQuotes, + nativeOrders, + orderFillableAmounts, + liquidityDelivered, + quoteRequestor, + ); + } + constructor( private readonly _sampler: DexOrderSampler, private readonly contractAddresses: ContractAddresses, @@ -339,19 +354,22 @@ export class MarketOperationUtils { nativeOrders: SignedOrder[], takerAmount: BigNumber, opts?: Partial, + gasPrice?: BigNumber, ): Promise { - const _opts = { ...DEFAULT_GET_MARKET_ORDERS_OPTS, ...opts }; - const marketSideLiquidity = await this.getMarketSellLiquidityAsync(nativeOrders, takerAmount, _opts); - return this._generateOptimizedOrdersAsync(marketSideLiquidity, { - bridgeSlippage: _opts.bridgeSlippage, - maxFallbackSlippage: _opts.maxFallbackSlippage, - excludedSources: _opts.excludedSources, - feeSchedule: _opts.feeSchedule, - allowFallback: _opts.allowFallback, - shouldBatchBridgeOrders: _opts.shouldBatchBridgeOrders, - quoteRequestor: _opts.rfqt ? _opts.rfqt.quoteRequestor : undefined, - shouldGenerateQuoteReport: _opts.shouldGenerateQuoteReport, + const defaultOpts = { ...DEFAULT_GET_MARKET_ORDERS_OPTS, ...opts }; + const marketSideLiquidity = await this.getMarketSellLiquidityAsync(nativeOrders, takerAmount, defaultOpts); + const optimizedOrders = await this._generateOptimizedOrdersAsync(marketSideLiquidity, { + bridgeSlippage: defaultOpts.bridgeSlippage, + maxFallbackSlippage: defaultOpts.maxFallbackSlippage, + excludedSources: defaultOpts.excludedSources, + feeSchedule: defaultOpts.feeSchedule, + allowFallback: defaultOpts.allowFallback, + shouldBatchBridgeOrders: defaultOpts.shouldBatchBridgeOrders, }); + if (defaultOpts.shouldGenerateQuoteReport && defaultOpts.rfqt && defaultOpts.rfqt.quoteRequestor) { + MarketOperationUtils._computeQuoteReport(nativeOrders, defaultOpts.rfqt.quoteRequestor, marketSideLiquidity, optimizedResult); + } + return optimizedOrders; } /** @@ -367,18 +385,20 @@ export class MarketOperationUtils { makerAmount: BigNumber, opts?: Partial, ): Promise { - const _opts = { ...DEFAULT_GET_MARKET_ORDERS_OPTS, ...opts }; - const marketSideLiquidity = await this.getMarketBuyLiquidityAsync(nativeOrders, makerAmount, _opts); - return this._generateOptimizedOrdersAsync(marketSideLiquidity, { - bridgeSlippage: _opts.bridgeSlippage, - maxFallbackSlippage: _opts.maxFallbackSlippage, - excludedSources: _opts.excludedSources, - feeSchedule: _opts.feeSchedule, - allowFallback: _opts.allowFallback, - shouldBatchBridgeOrders: _opts.shouldBatchBridgeOrders, - quoteRequestor: _opts.rfqt ? _opts.rfqt.quoteRequestor : undefined, - shouldGenerateQuoteReport: _opts.shouldGenerateQuoteReport, + const defaultOpts = { ...DEFAULT_GET_MARKET_ORDERS_OPTS, ...opts }; + const marketSideLiquidity = await this.getMarketBuyLiquidityAsync(nativeOrders, makerAmount, defaultOpts); + const optimizedResult = await this._generateOptimizedOrdersAsync(marketSideLiquidity, { + bridgeSlippage: defaultOpts.bridgeSlippage, + maxFallbackSlippage: defaultOpts.maxFallbackSlippage, + excludedSources: defaultOpts.excludedSources, + feeSchedule: defaultOpts.feeSchedule, + allowFallback: defaultOpts.allowFallback, + shouldBatchBridgeOrders: defaultOpts.shouldBatchBridgeOrders, }); + if (defaultOpts.shouldGenerateQuoteReport && defaultOpts.rfqt && defaultOpts.rfqt.quoteRequestor) { + MarketOperationUtils._computeQuoteReport(nativeOrders, defaultOpts.rfqt.quoteRequestor, marketSideLiquidity, optimizedResult); + } + return optimizedResult; } /** @@ -468,7 +488,6 @@ export class MarketOperationUtils { feeSchedule: _opts.feeSchedule, allowFallback: _opts.allowFallback, shouldBatchBridgeOrders: _opts.shouldBatchBridgeOrders, - shouldGenerateQuoteReport: false, }, ); return optimizedOrders; @@ -491,8 +510,6 @@ export class MarketOperationUtils { feeSchedule?: FeeSchedule; allowFallback?: boolean; shouldBatchBridgeOrders?: boolean; - quoteRequestor?: QuoteRequestor; - shouldGenerateQuoteReport?: boolean; }, ): Promise { const { @@ -506,7 +523,6 @@ export class MarketOperationUtils { dexQuotes, ethToOutputRate, ethToInputRate, - twoHopQuotes, } = marketSideLiquidity; const maxFallbackSlippage = opts.maxFallbackSlippage || 0; @@ -549,18 +565,7 @@ export class MarketOperationUtils { ); if (bestTwoHopQuote && bestTwoHopRate.isGreaterThan(optimalPathRate)) { const twoHopOrders = createOrdersFromTwoHopSample(bestTwoHopQuote, orderOpts); - const twoHopQuoteReport = opts.shouldGenerateQuoteReport - ? generateQuoteReport( - side, - _.flatten(dexQuotes), - twoHopQuotes, - nativeOrders, - orderFillableAmounts, - bestTwoHopQuote, - opts.quoteRequestor, - ) - : undefined; - return { optimizedOrders: twoHopOrders, quoteReport: twoHopQuoteReport, isTwoHop: true }; + return { optimizedOrders: twoHopOrders, liquidityDelivered: bestTwoHopQuote, isTwoHop: true }; } // Generate a fallback path if native orders are in the optimal path. @@ -591,18 +596,8 @@ export class MarketOperationUtils { } } const optimizedOrders = createOrdersFromPath(optimalPath, orderOpts); - const quoteReport = opts.shouldGenerateQuoteReport - ? generateQuoteReport( - side, - _.flatten(dexQuotes), - twoHopQuotes, - nativeOrders, - orderFillableAmounts, - _.flatten(optimizedOrders.map(order => order.fills)), - opts.quoteRequestor, - ) - : undefined; - return { optimizedOrders, quoteReport, isTwoHop: false }; + const liquidityDelivered = _.flatten(optimizedOrders.map(order => order.fills)); + return { optimizedOrders, liquidityDelivered, isTwoHop: false }; } } diff --git a/packages/asset-swapper/src/utils/market_operation_utils/types.ts b/packages/asset-swapper/src/utils/market_operation_utils/types.ts index 2bbee4dc81..08e8d05916 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -4,7 +4,6 @@ import { BigNumber } from '@0x/utils'; import { RfqtRequestOpts, SignedOrderWithFillableAmounts } from '../../types'; import { QuoteRequestor } from '../../utils/quote_requestor'; -import { QuoteReport } from '../quote_report_generator'; /** * Order domain keys: chainId and exchange @@ -322,7 +321,7 @@ export interface SourceQuoteOperation export interface OptimizerResult { optimizedOrders: OptimizedMarketOrder[]; isTwoHop: boolean; - quoteReport?: QuoteReport; + liquidityDelivered: CollapsedFill[] | DexSample; } export type MarketDepthSide = Array>>;