* feat: Enable partial Native order fills * change intermediary tokens to be a UNION. Hint to cvxCRV and CRV * Pin asset-swapper to use contracts-zero-ex 0.27.0 for now * feat: Retire Eth2Dai/Oasis
91 lines
3.5 KiB
TypeScript
91 lines
3.5 KiB
TypeScript
import { expect } from '@0x/contracts-test-utils';
|
|
import { BigNumber } from '@0x/utils';
|
|
|
|
import { MarketOperation } from '../src/types';
|
|
import { Path } from '../src/utils/market_operation_utils/path';
|
|
import { ERC20BridgeSource, Fill } from '../src/utils/market_operation_utils/types';
|
|
|
|
const createFill = (
|
|
source: ERC20BridgeSource,
|
|
index: number = 0,
|
|
input: BigNumber = new BigNumber(100),
|
|
output: BigNumber = new BigNumber(100),
|
|
): Fill =>
|
|
// tslint:disable-next-line: no-object-literal-type-assertion
|
|
({
|
|
source,
|
|
input,
|
|
output,
|
|
adjustedOutput: output,
|
|
flags: BigInt(0),
|
|
sourcePathId: source,
|
|
index,
|
|
} as Fill);
|
|
|
|
describe('Path', () => {
|
|
it('Adds a fallback', () => {
|
|
const targetInput = new BigNumber(100);
|
|
const path = Path.create(
|
|
MarketOperation.Sell,
|
|
[createFill(ERC20BridgeSource.Native), createFill(ERC20BridgeSource.Native)],
|
|
targetInput,
|
|
);
|
|
const fallback = Path.create(MarketOperation.Sell, [createFill(ERC20BridgeSource.Uniswap)], targetInput);
|
|
path.addFallback(fallback);
|
|
const sources = path.fills.map(f => f.source);
|
|
expect(sources).to.deep.eq([ERC20BridgeSource.Native, ERC20BridgeSource.Native, ERC20BridgeSource.Uniswap]);
|
|
});
|
|
|
|
it('Adds a fallback with LiquidityProvider', () => {
|
|
const targetInput = new BigNumber(100);
|
|
const path = Path.create(
|
|
MarketOperation.Sell,
|
|
[createFill(ERC20BridgeSource.Native), createFill(ERC20BridgeSource.LiquidityProvider)],
|
|
targetInput,
|
|
);
|
|
const fallback = Path.create(MarketOperation.Sell, [createFill(ERC20BridgeSource.Uniswap)], targetInput);
|
|
path.addFallback(fallback);
|
|
const sources = path.fills.map(f => f.source);
|
|
expect(sources).to.deep.eq([
|
|
ERC20BridgeSource.Native,
|
|
ERC20BridgeSource.LiquidityProvider,
|
|
ERC20BridgeSource.Uniswap,
|
|
]);
|
|
});
|
|
|
|
it('Handles duplicates', () => {
|
|
const targetInput = new BigNumber(100);
|
|
const path = Path.create(
|
|
MarketOperation.Sell,
|
|
[createFill(ERC20BridgeSource.Uniswap), createFill(ERC20BridgeSource.LiquidityProvider)],
|
|
targetInput,
|
|
);
|
|
const fallback = Path.create(MarketOperation.Sell, [createFill(ERC20BridgeSource.Uniswap)], targetInput);
|
|
path.addFallback(fallback);
|
|
const sources = path.fills.map(f => f.source);
|
|
expect(sources).to.deep.eq([ERC20BridgeSource.Uniswap, ERC20BridgeSource.LiquidityProvider]);
|
|
});
|
|
it('Moves Native orders to the front and appends with unused fills', () => {
|
|
const targetInput = new BigNumber(100);
|
|
const path = Path.create(
|
|
MarketOperation.Sell,
|
|
[
|
|
createFill(ERC20BridgeSource.Uniswap, 0, new BigNumber(50)),
|
|
createFill(ERC20BridgeSource.Native, 0, new BigNumber(50)),
|
|
],
|
|
targetInput,
|
|
);
|
|
const fallback = Path.create(
|
|
MarketOperation.Sell,
|
|
[
|
|
createFill(ERC20BridgeSource.Uniswap, 0, new BigNumber(50)),
|
|
createFill(ERC20BridgeSource.Uniswap, 1, new BigNumber(50)),
|
|
],
|
|
targetInput,
|
|
);
|
|
path.addFallback(fallback);
|
|
const sources = path.fills.map(f => f.source);
|
|
expect(sources).to.deep.eq([ERC20BridgeSource.Native, ERC20BridgeSource.Uniswap, ERC20BridgeSource.Uniswap]);
|
|
});
|
|
});
|