From e2e14a977a71ff5b56c5876f4cc694eb1d880224 Mon Sep 17 00:00:00 2001 From: Daniel Pyrathon Date: Thu, 29 Oct 2020 08:48:01 -0700 Subject: [PATCH] fix: [WIP] Adds RFQ price-aware comparison price to Quote Report (#18) * Adds RFQ price-aware comparison price to Quote Report * added linting fix * added small lints * better syntax --- .../src/utils/market_operation_utils/index.ts | 5 ++++- .../asset-swapper/src/utils/quote_report_generator.ts | 9 ++++++++- .../asset-swapper/test/quote_report_generator_test.ts | 1 + 3 files changed, 13 insertions(+), 2 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 a7eee55a98..750b28e757 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/index.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/index.ts @@ -88,6 +88,7 @@ export class MarketOperationUtils { quoteRequestor: QuoteRequestor | undefined, marketSideLiquidity: MarketSideLiquidity, optimizerResult: OptimizerResult, + comparisonPrice?: BigNumber | undefined, ): QuoteReport { const { side, dexQuotes, twoHopQuotes, orderFillableAmounts } = marketSideLiquidity; const { liquidityDelivered } = optimizerResult; @@ -98,6 +99,7 @@ export class MarketOperationUtils { nativeOrders, orderFillableAmounts, liquidityDelivered, + comparisonPrice, quoteRequestor, ); } @@ -676,6 +678,7 @@ export class MarketOperationUtils { } // If RFQ liquidity is enabled, make a request to check RFQ liquidity + let comparisonPrice: BigNumber | undefined; const { rfqt } = _opts; if ( rfqt && @@ -684,7 +687,6 @@ export class MarketOperationUtils { marketSideLiquidity.quoteSourceFilters.isAllowed(ERC20BridgeSource.Native) ) { // Calculate a suggested price. For now, this is simply the overall price of the aggregation. - let comparisonPrice: BigNumber | undefined; if (optimizerResult) { const totalMakerAmount = BigNumber.sum( ...optimizerResult.optimizedOrders.map(order => order.makerAssetAmount), @@ -781,6 +783,7 @@ export class MarketOperationUtils { _opts.rfqt ? _opts.rfqt.quoteRequestor : undefined, marketSideLiquidity, optimizerResult, + comparisonPrice, ); } return { ...optimizerResult, quoteReport }; diff --git a/packages/asset-swapper/src/utils/quote_report_generator.ts b/packages/asset-swapper/src/utils/quote_report_generator.ts index 31b49dcda8..8a845bec39 100644 --- a/packages/asset-swapper/src/utils/quote_report_generator.ts +++ b/packages/asset-swapper/src/utils/quote_report_generator.ts @@ -42,6 +42,7 @@ export interface NativeOrderbookReportSource extends NativeReportSourceBase { export interface NativeRFQTReportSource extends NativeReportSourceBase { isRfqt: true; makerUri: string; + comparisonPrice?: number; } export type QuoteReportSource = | BridgeReportSource @@ -65,11 +66,12 @@ export function generateQuoteReport( nativeOrders: SignedOrder[], orderFillableAmounts: BigNumber[], liquidityDelivered: ReadonlyArray | DexSample, + comparisonPrice?: BigNumber | undefined, quoteRequestor?: QuoteRequestor, ): QuoteReport { const dexReportSourcesConsidered = dexQuotes.map(quote => _dexSampleToReportSource(quote, marketOperation)); const nativeOrderSourcesConsidered = nativeOrders.map((order, idx) => - _nativeOrderToReportSource(order, orderFillableAmounts[idx], quoteRequestor), + _nativeOrderToReportSource(order, orderFillableAmounts[idx], comparisonPrice, quoteRequestor), ); const multiHopSourcesConsidered = multiHopQuotes.map(quote => _multiHopSampleToReportSource(quote, marketOperation), @@ -94,6 +96,7 @@ export function generateQuoteReport( return _nativeOrderToReportSource( foundNativeOrder, nativeOrderSignaturesToFillableAmounts[foundNativeOrder.signature], + comparisonPrice, quoteRequestor, ); } else { @@ -197,6 +200,7 @@ function _nativeOrderFromCollapsedFill(cf: CollapsedFill): SignedOrder | undefin function _nativeOrderToReportSource( nativeOrder: SignedOrder, fillableAmount: BigNumber, + comparisonPrice?: BigNumber | undefined, quoteRequestor?: QuoteRequestor, ): NativeRFQTReportSource | NativeOrderbookReportSource { const nativeOrderBase: NativeReportSourceBase = { @@ -215,6 +219,9 @@ function _nativeOrderToReportSource( isRfqt: true, makerUri: foundRfqtMakerUri, }; + if (comparisonPrice) { + rfqtSource.comparisonPrice = comparisonPrice.toNumber(); + } return rfqtSource; } else { // if it's not an rfqt order, treat as normal diff --git a/packages/asset-swapper/test/quote_report_generator_test.ts b/packages/asset-swapper/test/quote_report_generator_test.ts index 16eb3a3457..a060777a55 100644 --- a/packages/asset-swapper/test/quote_report_generator_test.ts +++ b/packages/asset-swapper/test/quote_report_generator_test.ts @@ -141,6 +141,7 @@ describe('generateQuoteReport', async () => { nativeOrders, orderFillableAmounts, pathGenerated, + undefined, quoteRequestor.object, );