UNPKG

@deliquifiedlabs/uniswapx-sdk

Version:

SDK for the UniswapX protocol

224 lines 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ethers_1 = require("ethers"); const RelayOrder_1 = require("../order/RelayOrder"); const RelayOrderBuilder_1 = require("./RelayOrderBuilder"); describe("RelayOrderBuilder", () => { let builder; beforeEach(() => { builder = new RelayOrderBuilder_1.RelayOrderBuilder(1); }); const DEFAULT_INPUT = { token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", amount: ethers_1.BigNumber.from("1000000"), recipient: "0x0000000000000000000000000000000000000000", }; const DEFAULT_FEE = (deadline) => { return { token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", startAmount: ethers_1.BigNumber.from("1000000"), endAmount: ethers_1.BigNumber.from("1000000"), startTime: deadline - 100, endTime: deadline, }; }; it("Builds a valid order", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .universalRouterCalldata("0x") .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .build(); expect(order.info.fee.startTime).toEqual(deadline - 100); expect(order.info.fee.endTime).toEqual(deadline); expect(order.info.deadline).toEqual(deadline); }); it("Regenerates builder from order", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .universalRouterCalldata("0x") .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .build(); const regenerated = RelayOrderBuilder_1.RelayOrderBuilder.fromOrder(order).build(); expect(regenerated.toJSON()).toMatchObject(order.toJSON()); }); it("Regenerates builder from order json", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .universalRouterCalldata("0x") .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .build(); const json = order.toJSON(); const regenerated = RelayOrderBuilder_1.RelayOrderBuilder.fromOrder(RelayOrder_1.RelayOrder.fromJSON(json, 1)).build(); expect(regenerated.toJSON()).toMatchObject(order.toJSON()); }); it("Regenerates builder allows modification", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .universalRouterCalldata("0x") .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .build(); const regenerated = RelayOrderBuilder_1.RelayOrderBuilder.fromOrder(order) .universalRouterCalldata("new action") .build(); expect(regenerated.info.universalRouterCalldata).toEqual("new action"); }); it("allows for changing of fee params", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .universalRouterCalldata("0x") .build(); const regenerated = RelayOrderBuilder_1.RelayOrderBuilder.fromOrder(order) .feeStartTime(deadline - 200) .build(); expect(regenerated.info.fee.startTime).toEqual(deadline - 200); }); it("startAmount >= maxAmount", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee({ token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", startAmount: ethers_1.BigNumber.from("100"), endAmount: ethers_1.BigNumber.from("99"), startTime: deadline - 100, endTime: deadline, }) .universalRouterCalldata("0x") .build()).toThrow("startAmount must be less than or equal than endAmount: 100"); }); it("Deadline already passed", () => { const expiredDeadline = 1234; expect(() => builder.deadline(expiredDeadline)).not.toThrow(); expect(() => builder .deadline(expiredDeadline) .swapper("0x0000000000000000000000000000000000000001") .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee({ token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", startAmount: ethers_1.BigNumber.from("1000000"), endAmount: ethers_1.BigNumber.from("1000000"), startTime: expiredDeadline - 100, endTime: expiredDeadline, }) .universalRouterCalldata("0x") .build()).toThrow(`Deadline must be in the future: ${expiredDeadline}`); }); it("Start time must be before deadline", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; const order = builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000000") .nonce(ethers_1.BigNumber.from(100)) .universalRouterCalldata("0x") .input(DEFAULT_INPUT) .fee({ token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", startAmount: ethers_1.BigNumber.from("1000000"), endAmount: ethers_1.BigNumber.from("1200000"), startTime: deadline + 1, endTime: deadline + 1, }); expect(() => order.build()).toThrow(`feeStartTime must be before or same as deadline: ${deadline + 1}`); }); it("Does not throw before an order has not been finished building", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .nonce(ethers_1.BigNumber.from(100)) .fee(DEFAULT_FEE(deadline)) .feeStartTime(deadline + 1)).not.toThrowError(); }); it("Unknown chainId", () => { const chainId = 99999999; expect(() => new RelayOrderBuilder_1.RelayOrderBuilder(chainId)).toThrow(`Missing configuration for reactor: ${chainId}`); }); it("Must set swapper", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .universalRouterCalldata("0x") .build()).toThrow("Invariant failed: swapper not set"); }); it("must set input", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .nonce(ethers_1.BigNumber.from(100)) .swapper("0x0000000000000000000000000000000000000000") .fee(DEFAULT_FEE(deadline)) .universalRouterCalldata("0x") .build()).toThrow("Invariant failed: input not set"); }); it("must set universalRouterCalldata", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .nonce(ethers_1.BigNumber.from(100)) .swapper("0x0000000000000000000000000000000000000000") .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .build()).toThrow("Invariant failed: universalRouterCalldata not set"); }); it("must set fee", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .nonce(ethers_1.BigNumber.from(100)) .swapper("0x0000000000000000000000000000000000000000") .input(DEFAULT_INPUT) .universalRouterCalldata("0x") .build()).toThrow("Invariant failed: fee not set"); }); it("feeEndTime after deadline", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000000") .nonce(ethers_1.BigNumber.from(100)) .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .feeStartTime(deadline - 100) .feeEndTime(deadline + 1) .universalRouterCalldata("0x") .build()).toThrow(`Invariant failed: feeEndTime must be before or same as deadline: ${deadline + 1}`); }); it("Must set nonce", () => { const deadline = Math.floor(Date.now() / 1000) + 1000; expect(() => builder .deadline(deadline) .swapper("0x0000000000000000000000000000000000000000") .input(DEFAULT_INPUT) .fee(DEFAULT_FEE(deadline)) .universalRouterCalldata("0x") .build()).toThrow("Invariant failed: nonce not set"); }); }); //# sourceMappingURL=RelayOrderBuilder.test.js.map