asset-swapper: Quote report pass back optional fill data (#2702)
* ADDS quote report: pass back optional fill data for dex samples * ADDS return fillData for Multihop in quote report * FIXES quote report generator tests handle passing back fillData * FIXES typing multi hop report source will always have fillData * ADDS asset-swapper CHANGELOG entry
This commit is contained in:
parent
f2507cb94a
commit
5f570b772d
@ -121,6 +121,10 @@
|
||||
{
|
||||
"note": "Added `Curve` Tripool",
|
||||
"pr": 2708
|
||||
},
|
||||
{
|
||||
"note": "Pass back fillData from quote reporter",
|
||||
"pr": 2702
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -8,6 +8,7 @@ import {
|
||||
CollapsedFill,
|
||||
DexSample,
|
||||
ERC20BridgeSource,
|
||||
FillData,
|
||||
MultiHopFillData,
|
||||
NativeCollapsedFill,
|
||||
} from './market_operation_utils/types';
|
||||
@ -17,6 +18,7 @@ export interface BridgeReportSource {
|
||||
liquiditySource: Exclude<ERC20BridgeSource, ERC20BridgeSource.Native>;
|
||||
makerAmount: BigNumber;
|
||||
takerAmount: BigNumber;
|
||||
fillData?: FillData;
|
||||
}
|
||||
|
||||
export interface MultiHopReportSource {
|
||||
@ -24,6 +26,7 @@ export interface MultiHopReportSource {
|
||||
makerAmount: BigNumber;
|
||||
takerAmount: BigNumber;
|
||||
hopSources: ERC20BridgeSource[];
|
||||
fillData: FillData;
|
||||
}
|
||||
|
||||
interface NativeReportSourceBase {
|
||||
@ -120,12 +123,14 @@ function _dexSampleToReportSource(ds: DexSample, marketOperation: MarketOperatio
|
||||
makerAmount: ds.input,
|
||||
takerAmount: ds.output,
|
||||
liquiditySource,
|
||||
fillData: ds.fillData,
|
||||
};
|
||||
} else if (marketOperation === MarketOperation.Sell) {
|
||||
return {
|
||||
makerAmount: ds.output,
|
||||
takerAmount: ds.input,
|
||||
liquiditySource,
|
||||
fillData: ds.fillData,
|
||||
};
|
||||
} else {
|
||||
throw new Error(`Unexpected marketOperation ${marketOperation}`);
|
||||
@ -144,6 +149,7 @@ function _multiHopSampleToReportSource(
|
||||
liquiditySource: ERC20BridgeSource.MultiHop,
|
||||
makerAmount: ds.input,
|
||||
takerAmount: ds.output,
|
||||
fillData: ds.fillData!,
|
||||
hopSources: [firstHop.source, secondHop.source],
|
||||
};
|
||||
} else if (marketOperation === MarketOperation.Sell) {
|
||||
@ -151,6 +157,7 @@ function _multiHopSampleToReportSource(
|
||||
liquiditySource: ERC20BridgeSource.MultiHop,
|
||||
makerAmount: ds.output,
|
||||
takerAmount: ds.input,
|
||||
fillData: ds.fillData!,
|
||||
hopSources: [firstHop.source, secondHop.source],
|
||||
};
|
||||
} else {
|
||||
|
@ -56,21 +56,25 @@ describe('generateQuoteReport', async () => {
|
||||
source: ERC20BridgeSource.Kyber,
|
||||
input: new BigNumber(10000),
|
||||
output: new BigNumber(10001),
|
||||
fillData: {},
|
||||
};
|
||||
const kyberSample2: DexSample = {
|
||||
source: ERC20BridgeSource.Kyber,
|
||||
input: new BigNumber(10003),
|
||||
output: new BigNumber(10004),
|
||||
fillData: {},
|
||||
};
|
||||
const uniswapSample1: DexSample = {
|
||||
source: ERC20BridgeSource.UniswapV2,
|
||||
input: new BigNumber(10003),
|
||||
output: new BigNumber(10004),
|
||||
fillData: {},
|
||||
};
|
||||
const uniswapSample2: DexSample = {
|
||||
source: ERC20BridgeSource.UniswapV2,
|
||||
input: new BigNumber(10005),
|
||||
output: new BigNumber(10006),
|
||||
fillData: {},
|
||||
};
|
||||
const dexQuotes: DexSample[] = [kyberSample1, kyberSample2, uniswapSample1, uniswapSample2];
|
||||
|
||||
@ -178,21 +182,25 @@ describe('generateQuoteReport', async () => {
|
||||
liquiditySource: ERC20BridgeSource.UniswapV2,
|
||||
makerAmount: uniswapSample1.output,
|
||||
takerAmount: uniswapSample1.input,
|
||||
fillData: {},
|
||||
};
|
||||
const uniswap2Source: BridgeReportSource = {
|
||||
liquiditySource: ERC20BridgeSource.UniswapV2,
|
||||
makerAmount: uniswapSample2.output,
|
||||
takerAmount: uniswapSample2.input,
|
||||
fillData: {},
|
||||
};
|
||||
const kyber1Source: BridgeReportSource = {
|
||||
liquiditySource: ERC20BridgeSource.Kyber,
|
||||
makerAmount: kyberSample1.output,
|
||||
takerAmount: kyberSample1.input,
|
||||
fillData: {},
|
||||
};
|
||||
const kyber2Source: BridgeReportSource = {
|
||||
liquiditySource: ERC20BridgeSource.Kyber,
|
||||
makerAmount: kyberSample2.output,
|
||||
takerAmount: kyberSample2.input,
|
||||
fillData: {},
|
||||
};
|
||||
|
||||
const expectedSourcesConsidered: QuoteReportSource[] = [
|
||||
@ -246,11 +254,13 @@ describe('generateQuoteReport', async () => {
|
||||
source: ERC20BridgeSource.Kyber,
|
||||
input: new BigNumber(10000),
|
||||
output: new BigNumber(10001),
|
||||
fillData: {},
|
||||
};
|
||||
const uniswapSample1: DexSample = {
|
||||
source: ERC20BridgeSource.UniswapV2,
|
||||
input: new BigNumber(10003),
|
||||
output: new BigNumber(10004),
|
||||
fillData: {},
|
||||
};
|
||||
const dexQuotes: DexSample[] = [kyberSample1, uniswapSample1];
|
||||
|
||||
@ -302,11 +312,13 @@ describe('generateQuoteReport', async () => {
|
||||
liquiditySource: ERC20BridgeSource.UniswapV2,
|
||||
makerAmount: uniswapSample1.input,
|
||||
takerAmount: uniswapSample1.output,
|
||||
fillData: {},
|
||||
};
|
||||
const kyber1Source: BridgeReportSource = {
|
||||
liquiditySource: ERC20BridgeSource.Kyber,
|
||||
makerAmount: kyberSample1.input,
|
||||
takerAmount: kyberSample1.output,
|
||||
fillData: {},
|
||||
};
|
||||
|
||||
const expectedSourcesConsidered: QuoteReportSource[] = [
|
||||
@ -347,6 +359,7 @@ describe('generateQuoteReport', async () => {
|
||||
source: ERC20BridgeSource.Kyber,
|
||||
input: new BigNumber(10000),
|
||||
output: new BigNumber(10001),
|
||||
fillData: {},
|
||||
};
|
||||
|
||||
const orderbookOrder1FillableAmount = new BigNumber(1000);
|
||||
@ -355,23 +368,25 @@ describe('generateQuoteReport', async () => {
|
||||
takerAssetAmount: orderbookOrder1FillableAmount.plus(101),
|
||||
});
|
||||
|
||||
const twoHopFillData: MultiHopFillData = {
|
||||
intermediateToken: hexUtils.random(20),
|
||||
firstHopSource: {
|
||||
source: ERC20BridgeSource.Balancer,
|
||||
encodeCall: () => '',
|
||||
handleCallResults: _callResults => [new BigNumber(1337)],
|
||||
},
|
||||
secondHopSource: {
|
||||
source: ERC20BridgeSource.Curve,
|
||||
encodeCall: () => '',
|
||||
handleCallResults: _callResults => [new BigNumber(1337)],
|
||||
},
|
||||
};
|
||||
|
||||
const twoHopSample: DexSample<MultiHopFillData> = {
|
||||
source: ERC20BridgeSource.MultiHop,
|
||||
input: new BigNumber(3005),
|
||||
output: new BigNumber(3006),
|
||||
fillData: {
|
||||
intermediateToken: hexUtils.random(20),
|
||||
firstHopSource: {
|
||||
source: ERC20BridgeSource.Balancer,
|
||||
encodeCall: () => '',
|
||||
handleCallResults: _callResults => [new BigNumber(1337)],
|
||||
},
|
||||
secondHopSource: {
|
||||
source: ERC20BridgeSource.Curve,
|
||||
encodeCall: () => '',
|
||||
handleCallResults: _callResults => [new BigNumber(1337)],
|
||||
},
|
||||
},
|
||||
fillData: twoHopFillData,
|
||||
};
|
||||
|
||||
const orderReport = generateQuoteReport(
|
||||
@ -394,12 +409,14 @@ describe('generateQuoteReport', async () => {
|
||||
liquiditySource: ERC20BridgeSource.Kyber,
|
||||
makerAmount: kyberSample1.output,
|
||||
takerAmount: kyberSample1.input,
|
||||
fillData: {},
|
||||
};
|
||||
const twoHopSource: MultiHopReportSource = {
|
||||
liquiditySource: ERC20BridgeSource.MultiHop,
|
||||
makerAmount: twoHopSample.output,
|
||||
takerAmount: twoHopSample.input,
|
||||
hopSources: [ERC20BridgeSource.Balancer, ERC20BridgeSource.Curve],
|
||||
fillData: twoHopFillData,
|
||||
};
|
||||
|
||||
const expectedSourcesConsidered: QuoteReportSource[] = [kyber1Source, orderbookOrder1Source, twoHopSource];
|
||||
|
Loading…
x
Reference in New Issue
Block a user