quote report updates - single best pool (#236)

This commit is contained in:
Josh Rose
2023-03-20 18:50:42 -06:00
committed by GitHub
parent 11f7ba43e5
commit 211791db2a
4 changed files with 32 additions and 7 deletions

View File

@@ -82,6 +82,10 @@ export type ExtendedQuoteReportIndexedEntry = ExtendedQuoteReportEntry & {
isDelivered: boolean;
};
export interface ExtendedQuoteReportSourcesDelivered {
sourcesDelivered: ExtendedQuoteReportIndexedEntry[] | undefined;
}
export interface ExtendedQuoteReportSources {
sourcesConsidered: ExtendedQuoteReportIndexedEntry[];
sourcesDelivered: ExtendedQuoteReportIndexedEntry[] | undefined;

View File

@@ -52,8 +52,8 @@ export interface ExtendedQuoteReport {
estimatedPriceImpact?: string;
priceImpactProtectionPercentage: number;
onChainOptimalRoute: {
sourcesConsidered: ExtendedQuoteReportIndexedEntryOutbound[];
sourcesDelivered: ExtendedQuoteReportIndexedEntryOutbound[] | undefined;
bestSinglePool?: ExtendedQuoteReportIndexedEntry;
estimatedGasForRouter?: string;
quotedBuyAmount?: string;
};

View File

@@ -7,7 +7,7 @@ import { Kafka, Producer } from 'kafkajs';
import _ = require('lodash');
import { Counter, Histogram } from 'prom-client';
import { ERC20BridgeSource, RfqRequestOpts, SwapQuoterError } from '../asset-swapper';
import { ERC20BridgeSource, ExtendedQuoteReportSources, RfqRequestOpts, SwapQuoterError } from '../asset-swapper';
import {
NATIVE_FEE_TOKEN_BY_CHAIN_ID,
SELL_SOURCE_FILTER_BY_CHAIN_ID,
@@ -156,11 +156,27 @@ export class SwapHandlers {
if (quote.extendedQuoteReportSources && kafkaProducer) {
const quoteId = getQuoteIdFromSwapQuote(quote);
const bestSinglePool = _.first(
_.sortBy(
_.filter(quote.onChainOptimalRoute?.extendedQuoteReportSources?.sourcesConsidered, (source) => {
return source.liquiditySource !== ERC20BridgeSource.MultiHop;
}),
(source) => {
return -source.makerAmount.dividedBy(source.takerAmount);
},
),
);
const quoteReportSources: ExtendedQuoteReportSources = {
sourcesConsidered: _.filter(quote.extendedQuoteReportSources?.sourcesConsidered, (source) => {
return source.liquiditySource === ERC20BridgeSource.Native;
}),
sourcesDelivered: quote.extendedQuoteReportSources?.sourcesDelivered,
};
publishQuoteReport(
{
quoteId,
taker: params.takerAddress,
quoteReportSources: quote.extendedQuoteReportSources,
quoteReportSources,
submissionBy: 'taker',
decodedUniqueId: quote.decodedUniqueId,
buyTokenAddress: quote.buyTokenAddress,
@@ -179,7 +195,11 @@ export class SwapHandlers {
estimatedPriceImpact: quote.estimatedPriceImpact,
priceImpactProtectionPercentage: params.priceImpactProtectionPercentage,
onChainOptimalRoute: {
quoteReportSources: quote.onChainOptimalRoute?.extendedQuoteReportSources,
quoteReportSources: _.omit(
quote.onChainOptimalRoute?.extendedQuoteReportSources,
'sourcesConsidered',
),
bestSinglePool,
estimatedGasForRouter:
quote.onChainOptimalRoute?.estimatedGasForRouter || constants.ZERO_AMOUNT,
quotedBuyAmount: quote.onChainOptimalRoute?.quotedBuyAmount,

View File

@@ -1,6 +1,7 @@
import { Producer } from 'kafkajs';
import { BigNumber, ExtendedQuoteReport, ExtendedQuoteReportSources, jsonifyFillData } from '../asset-swapper';
import { ExtendedQuoteReportSourcesDelivered, ExtendedQuoteReportIndexedEntry } from '../asset-swapper/types';
import { KAFKA_TOPIC_QUOTE_REPORT } from '../config';
import { logger } from '../logger';
@@ -23,7 +24,8 @@ interface QuoteReportLogOptionsBase {
estimatedPriceImpact: BigNumber | null;
priceImpactProtectionPercentage: number;
onChainOptimalRoute?: {
quoteReportSources?: ExtendedQuoteReportSources;
quoteReportSources?: ExtendedQuoteReportSourcesDelivered;
bestSinglePool?: ExtendedQuoteReportIndexedEntry;
estimatedGasForRouter: BigNumber;
quotedBuyAmount?: BigNumber;
};
@@ -98,10 +100,9 @@ export function publishQuoteReport(
estimatedPriceImpact: logOpts.estimatedPriceImpact?.toString(),
priceImpactProtectionPercentage: logOpts.priceImpactProtectionPercentage * 100,
onChainOptimalRoute: {
sourcesConsidered:
logOpts.onChainOptimalRoute?.quoteReportSources?.sourcesConsidered.map(jsonifyFillData) || [],
sourcesDelivered:
logOpts.onChainOptimalRoute?.quoteReportSources?.sourcesDelivered?.map(jsonifyFillData),
bestSinglePool: logOpts.onChainOptimalRoute?.bestSinglePool,
estimatedGasForRouter: bigNumberToStringOrUndefined(logOpts.onChainOptimalRoute?.estimatedGasForRouter),
quotedBuyAmount: bigNumberToStringOrUndefined(logOpts.onChainOptimalRoute?.quotedBuyAmount),
},