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
This commit is contained in:
@@ -9,6 +9,10 @@
|
||||
{
|
||||
"note": "Use neon-router in asset-swapper tests",
|
||||
"pr": 453
|
||||
},
|
||||
{
|
||||
"note": "Add sampler blocknumber to quote report data",
|
||||
"pr": 448
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -179,6 +179,7 @@ export interface SwapQuoteBase {
|
||||
takerTokenDecimals: number;
|
||||
takerAmountPerEth: BigNumber;
|
||||
makerAmountPerEth: BigNumber;
|
||||
blockNumber: number;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -610,6 +610,7 @@ export interface MarketSideLiquidity {
|
||||
takerTokenDecimals: number;
|
||||
quotes: RawQuotes;
|
||||
isRfqSupported: boolean;
|
||||
blockNumber: number;
|
||||
}
|
||||
|
||||
export interface RawQuotes {
|
||||
|
||||
@@ -106,6 +106,7 @@ export interface ExtendedQuoteReport {
|
||||
decodedUniqueId?: string;
|
||||
sourcesConsidered: ExtendedQuoteReportIndexedEntryOutbound[];
|
||||
sourcesDelivered: ExtendedQuoteReportIndexedEntryOutbound[] | undefined;
|
||||
blockNumber: number | undefined;
|
||||
}
|
||||
|
||||
export interface PriceComparisonsReport {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -141,6 +141,7 @@ describe('ExchangeProxySwapQuoteConsumer', () => {
|
||||
...(side === MarketOperation.Buy
|
||||
? { type: MarketOperation.Buy, makerTokenFillAmount }
|
||||
: { type: MarketOperation.Sell, takerTokenFillAmount }),
|
||||
blockNumber: 1337420,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -748,6 +748,7 @@ describe('MarketOperationUtils tests', () => {
|
||||
],
|
||||
},
|
||||
isRfqSupported: true,
|
||||
blockNumber: 1337420,
|
||||
};
|
||||
});
|
||||
const result = await mockedMarketOpUtils.object.getOptimizerResultAsync(
|
||||
|
||||
@@ -44,6 +44,7 @@ export async function getFullyFillableSwapQuoteWithNoFeesAsync(
|
||||
makerAmountPerEth: constants.ZERO_AMOUNT,
|
||||
makerTokenDecimals: 18,
|
||||
takerTokenDecimals: 18,
|
||||
blockNumber: 1337420,
|
||||
};
|
||||
|
||||
if (operation === MarketOperation.Buy) {
|
||||
|
||||
Reference in New Issue
Block a user