From c9c7ac855906844f68a85d0963f7006ef03e7ea8 Mon Sep 17 00:00:00 2001 From: Kim Persson Date: Thu, 31 Mar 2022 15:42:34 +0200 Subject: [PATCH] feat: add block number to quote report data [TKR-314] (#448) * feat: add blockNumber to MarketSideLiquidity response * fix: return block number back in swap quote response * chore: add asset-swapper changelog entry --- packages/asset-swapper/CHANGELOG.json | 4 ++++ packages/asset-swapper/src/swap_quoter.ts | 3 ++- packages/asset-swapper/src/types.ts | 1 + .../src/utils/market_operation_utils/index.ts | 10 +++++++++- .../src/utils/market_operation_utils/types.ts | 1 + .../asset-swapper/src/utils/quote_report_generator.ts | 1 + packages/asset-swapper/test/comparison_price_test.ts | 2 ++ .../test/exchange_proxy_swap_quote_consumer_test.ts | 1 + .../asset-swapper/test/market_operation_utils_test.ts | 1 + packages/asset-swapper/test/utils/swap_quote.ts | 1 + 10 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index a5e6f84753..7ddc441708 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -9,6 +9,10 @@ { "note": "Use neon-router in asset-swapper tests", "pr": 453 + }, + { + "note": "Add sampler blocknumber to quote report data", + "pr": 448 } ] }, diff --git a/packages/asset-swapper/src/swap_quoter.ts b/packages/asset-swapper/src/swap_quoter.ts index c40e0153d1..bef9d30e9c 100644 --- a/packages/asset-swapper/src/swap_quoter.ts +++ b/packages/asset-swapper/src/swap_quoter.ts @@ -519,7 +519,7 @@ function createSwapQuote( : calculateQuoteInfo(optimizedOrders, operation, assetFillAmount, gasPrice, gasSchedule, slippage); // Put together the swap quote - const { makerTokenDecimals, takerTokenDecimals } = optimizerResult.marketSideLiquidity; + const { makerTokenDecimals, takerTokenDecimals, blockNumber } = optimizerResult.marketSideLiquidity; const swapQuote = { makerToken, takerToken, @@ -536,6 +536,7 @@ function createSwapQuote( extendedQuoteReportSources, isTwoHop, priceComparisonsReport, + blockNumber, }; if (operation === MarketOperation.Buy) { diff --git a/packages/asset-swapper/src/types.ts b/packages/asset-swapper/src/types.ts index 1e32497b2e..9ef5e8830e 100644 --- a/packages/asset-swapper/src/types.ts +++ b/packages/asset-swapper/src/types.ts @@ -179,6 +179,7 @@ export interface SwapQuoteBase { takerTokenDecimals: number; takerAmountPerEth: BigNumber; makerAmountPerEth: BigNumber; + blockNumber: number; } /** 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 7b219f2fc9..7e37a31c8e 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/index.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/index.ts @@ -241,6 +241,7 @@ export class MarketOperationUtils { dexQuotes, }, isRfqSupported, + blockNumber: blockNumber.toNumber(), }; } @@ -269,6 +270,7 @@ export class MarketOperationUtils { // Call the sampler contract. const samplerPromise = this._sampler.executeAsync( + this._sampler.getBlockNumber(), this._sampler.getTokenDecimals([makerToken, takerToken]), // Get native order fillable amounts. this._sampler.getLimitOrderFillableMakerAmounts(nativeOrders, this.contractAddresses.exchangeProxy), @@ -302,6 +304,7 @@ export class MarketOperationUtils { const [ [ + blockNumber, tokenDecimals, orderFillableMakerAmounts, ethToMakerAssetRate, @@ -342,6 +345,7 @@ export class MarketOperationUtils { dexQuotes, }, isRfqSupported, + blockNumber: blockNumber.toNumber(), }; } @@ -372,6 +376,7 @@ export class MarketOperationUtils { const feeSourceFilters = this._feeSources.exclude(_opts.excludedFeeSources); const ops = [ + this._sampler.getBlockNumber(), ...batchNativeOrders.map(orders => this._sampler.getLimitOrderFillableMakerAmounts(orders, this.contractAddresses.exchangeProxy), ), @@ -396,13 +401,15 @@ export class MarketOperationUtils { ), ]; - const executeResults = await this._sampler.executeBatchAsync(ops); + const [blockNumberRaw, ...executeResults] = await this._sampler.executeBatchAsync(ops); const batchOrderFillableMakerAmounts = executeResults.splice(0, batchNativeOrders.length) as BigNumber[][]; const batchEthToTakerAssetRate = executeResults.splice(0, batchNativeOrders.length) as BigNumber[]; const batchDexQuotes = executeResults.splice(0, batchNativeOrders.length) as DexSample[][][]; const batchTokenDecimals = executeResults.splice(0, batchNativeOrders.length) as number[][]; const inputAmountPerEth = ZERO_AMOUNT; + const blockNumber: number = (blockNumberRaw as BigNumber).toNumber(); + return Promise.all( batchNativeOrders.map(async (nativeOrders, i) => { if (nativeOrders.length === 0) { @@ -435,6 +442,7 @@ export class MarketOperationUtils { twoHopQuotes: [], }, isRfqSupported: false, + blockNumber, }, { bridgeSlippage: _opts.bridgeSlippage, 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 ef8d49f48e..c24d747e6e 100644 --- a/packages/asset-swapper/src/utils/market_operation_utils/types.ts +++ b/packages/asset-swapper/src/utils/market_operation_utils/types.ts @@ -610,6 +610,7 @@ export interface MarketSideLiquidity { takerTokenDecimals: number; quotes: RawQuotes; isRfqSupported: boolean; + blockNumber: number; } export interface RawQuotes { diff --git a/packages/asset-swapper/src/utils/quote_report_generator.ts b/packages/asset-swapper/src/utils/quote_report_generator.ts index 5ce10dc718..975a834ad6 100644 --- a/packages/asset-swapper/src/utils/quote_report_generator.ts +++ b/packages/asset-swapper/src/utils/quote_report_generator.ts @@ -106,6 +106,7 @@ export interface ExtendedQuoteReport { decodedUniqueId?: string; sourcesConsidered: ExtendedQuoteReportIndexedEntryOutbound[]; sourcesDelivered: ExtendedQuoteReportIndexedEntryOutbound[] | undefined; + blockNumber: number | undefined; } export interface PriceComparisonsReport { diff --git a/packages/asset-swapper/test/comparison_price_test.ts b/packages/asset-swapper/test/comparison_price_test.ts index f8c1eea745..cc0ba6d2f2 100644 --- a/packages/asset-swapper/test/comparison_price_test.ts +++ b/packages/asset-swapper/test/comparison_price_test.ts @@ -66,6 +66,7 @@ const buyMarketSideLiquidity: MarketSideLiquidity = { }, quoteSourceFilters: new SourceFilters(), isRfqSupported: false, + blockNumber: 1337420, }; const sellMarketSideLiquidity: MarketSideLiquidity = { @@ -87,6 +88,7 @@ const sellMarketSideLiquidity: MarketSideLiquidity = { }, quoteSourceFilters: new SourceFilters(), isRfqSupported: false, + blockNumber: 1337420, }; describe('getComparisonPrices', async () => { diff --git a/packages/asset-swapper/test/exchange_proxy_swap_quote_consumer_test.ts b/packages/asset-swapper/test/exchange_proxy_swap_quote_consumer_test.ts index f38f716ae5..aa8778f582 100644 --- a/packages/asset-swapper/test/exchange_proxy_swap_quote_consumer_test.ts +++ b/packages/asset-swapper/test/exchange_proxy_swap_quote_consumer_test.ts @@ -141,6 +141,7 @@ describe('ExchangeProxySwapQuoteConsumer', () => { ...(side === MarketOperation.Buy ? { type: MarketOperation.Buy, makerTokenFillAmount } : { type: MarketOperation.Sell, takerTokenFillAmount }), + blockNumber: 1337420, }; } diff --git a/packages/asset-swapper/test/market_operation_utils_test.ts b/packages/asset-swapper/test/market_operation_utils_test.ts index a0acdd340b..8ebccea11a 100644 --- a/packages/asset-swapper/test/market_operation_utils_test.ts +++ b/packages/asset-swapper/test/market_operation_utils_test.ts @@ -748,6 +748,7 @@ describe('MarketOperationUtils tests', () => { ], }, isRfqSupported: true, + blockNumber: 1337420, }; }); const result = await mockedMarketOpUtils.object.getOptimizerResultAsync( diff --git a/packages/asset-swapper/test/utils/swap_quote.ts b/packages/asset-swapper/test/utils/swap_quote.ts index 26c4c6e063..11115206e7 100644 --- a/packages/asset-swapper/test/utils/swap_quote.ts +++ b/packages/asset-swapper/test/utils/swap_quote.ts @@ -44,6 +44,7 @@ export async function getFullyFillableSwapQuoteWithNoFeesAsync( makerAmountPerEth: constants.ZERO_AMOUNT, makerTokenDecimals: 18, takerTokenDecimals: 18, + blockNumber: 1337420, }; if (operation === MarketOperation.Buy) {