@deliquifiedlabs/uniswapx-sdk
Version:
SDK for the UniswapX protocol
237 lines • 12.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ethers_1 = require("ethers");
const builder_1 = require("../builder");
const constants_1 = require("../constants");
const order_1 = require("../order");
const order_2 = require("./order");
describe("order utils", () => {
let dutchOrder;
let dutchOrderExactOut;
let cosignedV2DutchOrder;
let unsignedV2DutchOrder;
let limitOrder;
let relayOrder;
let chainId;
const uniswapXOrderParser = new order_2.UniswapXOrderParser();
const relayOrderParser = new order_2.RelayOrderParser();
beforeAll(() => {
chainId = 1;
const dutchBuilder = new builder_1.DutchOrderBuilder(chainId);
const deadline = Math.floor(Date.now() / 1000) + 1000;
const input = {
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
startAmount: ethers_1.BigNumber.from("1000000"),
endAmount: ethers_1.BigNumber.from("1000000"),
};
dutchOrder = dutchBuilder
.deadline(deadline)
.decayEndTime(deadline)
.decayStartTime(deadline - 100)
.swapper("0x0000000000000000000000000000000000000001")
.nonce(ethers_1.BigNumber.from(100))
.input(input)
.output({
token: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
startAmount: ethers_1.BigNumber.from("1000000000000000000"),
endAmount: ethers_1.BigNumber.from("900000000000000000"),
recipient: "0x0000000000000000000000000000000000000000",
})
.build();
const dutchBuilderExactOut = new builder_1.DutchOrderBuilder(chainId);
dutchOrderExactOut = dutchBuilderExactOut
.deadline(deadline)
.decayEndTime(deadline)
.decayStartTime(deadline - 100)
.swapper("0x0000000000000000000000000000000000000001")
.nonce(ethers_1.BigNumber.from(100))
.input({
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
startAmount: ethers_1.BigNumber.from("900000"),
endAmount: ethers_1.BigNumber.from("1000000"),
})
.output({
token: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
startAmount: ethers_1.BigNumber.from("1000000000000000000"),
endAmount: ethers_1.BigNumber.from("1000000000000000000"),
recipient: "0x0000000000000000000000000000000000000000",
})
.build();
const limitBuilder = new builder_1.DutchOrderBuilder(chainId);
limitOrder = limitBuilder
.deadline(deadline)
.decayEndTime(deadline)
.decayStartTime(deadline - 100)
.swapper("0x0000000000000000000000000000000000000001")
.nonce(ethers_1.BigNumber.from(100))
.input(input)
.output({
token: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
startAmount: ethers_1.BigNumber.from("1000000000000000000"),
endAmount: ethers_1.BigNumber.from("1000000000000000000"),
recipient: "0x0000000000000000000000000000000000000000",
})
.build();
const relayBuilder = new builder_1.RelayOrderBuilder(chainId);
relayOrder = relayBuilder
.deadline(deadline)
.swapper("0x0000000000000000000000000000000000000001")
.nonce(ethers_1.BigNumber.from(100))
.universalRouterCalldata("0x")
.input({
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
amount: ethers_1.BigNumber.from("1000000"),
recipient: "0x0000000000000000000000000000000000000000",
})
.fee({
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
startAmount: ethers_1.BigNumber.from("1000000"),
endAmount: ethers_1.BigNumber.from("1000000"),
startTime: deadline - 100,
endTime: deadline,
})
.build();
const v2Builder = new builder_1.V2DutchOrderBuilder(chainId)
.cosigner("0xe463635f6e73C1E595554C3ae216472D0fb929a9")
.deadline(deadline)
.decayEndTime(deadline)
.decayStartTime(deadline - 100)
.swapper(ethers_1.constants.AddressZero)
.nonce(ethers_1.BigNumber.from(100))
.input({
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
startAmount: ethers_1.BigNumber.from("1000000"),
endAmount: ethers_1.BigNumber.from("1000000"),
})
.output({
token: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
startAmount: ethers_1.BigNumber.from("1000000000000000000"),
endAmount: ethers_1.BigNumber.from("1000000000000000000"),
recipient: "0x0000000000000000000000000000000000000000",
})
.outputOverrides([ethers_1.BigNumber.from("100000000000000000000")]);
unsignedV2DutchOrder = v2Builder.buildPartial();
cosignedV2DutchOrder = v2Builder
.cosignature("0x65c6470fea0e1ca7d204b6904d0c1b0b640d7e6dcd4be3065497756e163c0399288c3eea0fba9b31ed00f34ccffe389ec3027bcd764df9fa853eeae8f68c9beb1b")
.build();
});
describe("parseOrder", () => {
it("parses DutchOrder with single output", () => {
const encodedOrder = dutchOrder.serialize();
expect(uniswapXOrderParser.parseOrder(encodedOrder, chainId)).toEqual(dutchOrder);
});
it("parses CosignedV2DutchOrder", () => {
const encodedOrder = cosignedV2DutchOrder.serialize();
expect(uniswapXOrderParser.parseOrder(encodedOrder, chainId)).toEqual(cosignedV2DutchOrder);
});
it("parses CosignedV2DutchOrder 2", () => {
const FROM_ADDRESS = "0xabCd111111111111111111111111111111111111";
const USDC_MAINNET_CHECKSUMMED_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const TIMESTAMP_SECONDS = 1660562791;
const WETH_MAINNET_CHECKSUMMED_ADDRESS = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
const ENCODED_DUTCH_V2_ORDER = new builder_1.V2DutchOrderBuilder(1, "0x00000011F84B9aa48e5f8aA8B9897600006289Be")
.decayStartTime(TIMESTAMP_SECONDS)
.decayEndTime(TIMESTAMP_SECONDS)
.input({
token: WETH_MAINNET_CHECKSUMMED_ADDRESS,
startAmount: ethers_1.BigNumber.from(10).pow(18).mul(2),
endAmount: ethers_1.BigNumber.from(10).pow(18),
})
.output({
token: USDC_MAINNET_CHECKSUMMED_ADDRESS,
startAmount: ethers_1.BigNumber.from(10).pow(6).mul(3),
endAmount: ethers_1.BigNumber.from(10).pow(6).mul(2),
recipient: FROM_ADDRESS,
})
.nonce(ethers_1.BigNumber.from(1))
.deadline(Math.floor(Date.now() / 1000 + 600))
.swapper(FROM_ADDRESS)
.inputOverride(ethers_1.BigNumber.from(10).pow(18).mul(2))
.outputOverrides([ethers_1.BigNumber.from(10).pow(6).mul(3)])
.exclusivityOverrideBps(ethers_1.BigNumber.from(0))
.cosigner("0x0000000000000000000000000000000000000000")
.cosignature("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
.cosignerData({
decayStartTime: TIMESTAMP_SECONDS,
decayEndTime: TIMESTAMP_SECONDS,
exclusiveFiller: "0x0000000000000000000000000000000000000000",
exclusivityOverrideBps: ethers_1.BigNumber.from(0),
inputOverride: ethers_1.BigNumber.from(10).pow(18).mul(2),
outputOverrides: [ethers_1.BigNumber.from(10).pow(6).mul(3)],
})
.build()
.serialize();
//Missing configuration for reactor: 0xabcd111111111111111111111111111111111111 (swapper)
expect(uniswapXOrderParser.parseOrder(ENCODED_DUTCH_V2_ORDER, 1)).toEqual(order_1.CosignedV2DutchOrder.parse(ENCODED_DUTCH_V2_ORDER, 1));
});
it("parses DutchOrder with multiple outputs", () => {
dutchOrder.info.outputs.push({
token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
startAmount: ethers_1.BigNumber.from("100000000000000000"),
endAmount: ethers_1.BigNumber.from("90000000000000000"),
recipient: "0x0000000000000000000000000000000000000123",
});
const encodedOrder = dutchOrder.serialize();
expect(uniswapXOrderParser.parseOrder(encodedOrder, chainId)).toEqual(dutchOrder);
});
it("parses RelayOrder", () => {
const encodedOrder = relayOrder.serialize();
expect(relayOrderParser.parseOrder(encodedOrder, chainId)).toEqual(relayOrder);
});
it("parses RelayOrder with universalRouterCalldata", () => {
relayOrder.info.universalRouterCalldata =
"0x0000000000000000000000000000000000000123";
const encodedOrder = relayOrder.serialize();
expect(relayOrderParser.parseOrder(encodedOrder, chainId)).toEqual(relayOrder);
});
it("parses CosignedV2DutchOrder", () => {
const encodedOrder = cosignedV2DutchOrder.serialize();
expect(uniswapXOrderParser.parseOrder(encodedOrder, chainId)).toEqual(cosignedV2DutchOrder);
});
it("parses UnsignedV2DutchOrder", () => {
const encodedOrder = unsignedV2DutchOrder.serialize();
expect(uniswapXOrderParser.parseOrder(encodedOrder, chainId)).toMatchObject(unsignedV2DutchOrder);
});
});
describe("getOrderType", () => {
it("parses DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderType(dutchOrder)).toEqual(constants_1.OrderType.Dutch);
});
it("parses DutchOrder exact out type", () => {
expect(uniswapXOrderParser.getOrderType(dutchOrderExactOut)).toEqual(constants_1.OrderType.Dutch);
});
it("parses LimitOrder type", () => {
expect(uniswapXOrderParser.getOrderType(limitOrder)).toEqual(constants_1.OrderType.Limit);
});
it("parses RelayOrder type", () => {
expect(relayOrderParser.getOrderType(relayOrder)).toEqual(constants_1.OrderType.Relay);
});
it("parses CosignedV2DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderType(cosignedV2DutchOrder)).toEqual(constants_1.OrderType.Dutch_V2);
});
it("parses UnsignedV2DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderType(unsignedV2DutchOrder)).toEqual(constants_1.OrderType.Dutch_V2);
});
});
describe("getOrderTypeFromEncoded", () => {
it("parses DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderTypeFromEncoded(dutchOrder.serialize(), chainId)).toEqual(constants_1.OrderType.Dutch);
});
it("parses DutchOrder exact out type", () => {
expect(uniswapXOrderParser.getOrderTypeFromEncoded(dutchOrderExactOut.serialize(), chainId)).toEqual(constants_1.OrderType.Dutch);
});
it("parses LimitOrder type", () => {
expect(uniswapXOrderParser.getOrderTypeFromEncoded(limitOrder.serialize(), chainId)).toEqual(constants_1.OrderType.Limit);
});
it("parses RelayOrder type", () => {
expect(relayOrderParser.getOrderTypeFromEncoded(relayOrder.serialize(), chainId)).toEqual(constants_1.OrderType.Relay);
});
it("parses UnsignedV2DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderTypeFromEncoded(unsignedV2DutchOrder.serialize(), chainId)).toEqual(constants_1.OrderType.Dutch_V2);
});
it("parses CosignedV2DutchOrder type", () => {
expect(uniswapXOrderParser.getOrderTypeFromEncoded(cosignedV2DutchOrder.serialize(), chainId)).toEqual(constants_1.OrderType.Dutch_V2);
});
});
});
//# sourceMappingURL=order.test.js.map