UNPKG

@deliquifiedlabs/uniswapx-sdk

Version:

SDK for the UniswapX protocol

244 lines 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.V2DutchOrderBuilder = void 0; const tslib_1 = require("tslib"); const ethers_1 = require("ethers"); const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant")); const constants_1 = require("../constants"); const order_1 = require("../order"); const utils_1 = require("../utils"); const OrderBuilder_1 = require("./OrderBuilder"); /** * Helper builder for generating dutch limit orders */ class V2DutchOrderBuilder extends OrderBuilder_1.OrderBuilder { static fromOrder(order) { const builder = new V2DutchOrderBuilder(order.chainId, order.info.reactor) .deadline(order.info.deadline) .swapper(order.info.swapper) .nonce(order.info.nonce) .input(order.info.input) .cosigner(order.info.cosigner) .validation({ additionalValidationContract: order.info.additionalValidationContract, additionalValidationData: order.info.additionalValidationData, }); for (const output of order.info.outputs) { builder.output(output); } if (isCosigned(order)) { builder.cosignature(order.info.cosignature); builder.decayEndTime(order.info.cosignerData.decayEndTime); builder.decayStartTime(order.info.cosignerData.decayStartTime); builder.cosignerData(order.info.cosignerData); } return builder; } constructor(chainId, reactorAddress, _permit2Address) { super(); this.chainId = chainId; this.reactor((0, utils_1.getReactor)(chainId, constants_1.OrderType.Dutch_V2, reactorAddress)); this.permit2Address = (0, utils_1.getPermit2)(chainId, _permit2Address); this.info = { outputs: [], cosignerData: { decayStartTime: 0, decayEndTime: 0, exclusiveFiller: ethers_1.ethers.constants.AddressZero, exclusivityOverrideBps: ethers_1.BigNumber.from(0), inputOverride: ethers_1.BigNumber.from(0), outputOverrides: [], }, }; } decayStartTime(decayStartTime) { if (!this.info.cosignerData) { this.initializeCosignerData({ decayStartTime }); } else { this.info.cosignerData.decayStartTime = decayStartTime; } return this; } decayEndTime(decayEndTime) { if (!this.info.cosignerData) { this.initializeCosignerData({ decayEndTime }); } else { this.info.cosignerData.decayEndTime = decayEndTime; } if (!this.orderInfo.deadline) { super.deadline(decayEndTime); } return this; } input(input) { this.info.input = input; return this; } output(output) { var _a; (0, tiny_invariant_1.default)(output.startAmount.gte(output.endAmount), `startAmount must be greater than endAmount: ${output.startAmount.toString()}`); (_a = this.info.outputs) === null || _a === void 0 ? void 0 : _a.push(output); return this; } deadline(deadline) { super.deadline(deadline); if (!this.info.cosignerData) { this.initializeCosignerData({ decayEndTime: deadline }); } else if (!this.info.cosignerData.decayEndTime) { this.decayEndTime(deadline); } return this; } swapper(swapper) { super.swapper(swapper); return this; } nonce(nonce) { super.nonce(nonce); return this; } validation(info) { super.validation(info); return this; } // ensures that we only change non fee outputs nonFeeRecipient(newRecipient, feeRecipient) { (0, tiny_invariant_1.default)(newRecipient !== feeRecipient, `newRecipient must be different from feeRecipient: ${newRecipient}`); if (!this.info.outputs) { return this; } this.info.outputs = this.info.outputs.map((output) => { // if fee output then pass through if (feeRecipient && output.recipient.toLowerCase() === feeRecipient.toLowerCase()) { return output; } return Object.assign(Object.assign({}, output), { recipient: newRecipient }); }); return this; } exclusiveFiller(exclusiveFiller) { if (!this.info.cosignerData) { this.info.cosignerData = { decayStartTime: 0, decayEndTime: 0, exclusiveFiller: exclusiveFiller, exclusivityOverrideBps: ethers_1.BigNumber.from(0), inputOverride: ethers_1.BigNumber.from(0), outputOverrides: [], }; } this.info.cosignerData.exclusiveFiller = exclusiveFiller; return this; } exclusivityOverrideBps(exclusivityOverrideBps) { if (!this.info.cosignerData) { this.info.cosignerData = { decayStartTime: 0, decayEndTime: 0, exclusiveFiller: ethers_1.ethers.constants.AddressZero, exclusivityOverrideBps: exclusivityOverrideBps, inputOverride: ethers_1.BigNumber.from(0), outputOverrides: [], }; } this.info.cosignerData.exclusivityOverrideBps = exclusivityOverrideBps; return this; } inputOverride(inputOverride) { if (!this.info.cosignerData) { this.initializeCosignerData({ inputOverride }); } else { this.info.cosignerData.inputOverride = inputOverride; } return this; } outputOverrides(outputOverrides) { if (!this.info.cosignerData) { this.initializeCosignerData({ outputOverrides }); } else { this.info.cosignerData.outputOverrides = outputOverrides; } return this; } cosigner(cosigner) { this.info.cosigner = cosigner; return this; } cosignature(cosignature) { this.info.cosignature = cosignature; return this; } cosignerData(cosignerData) { this.decayStartTime(cosignerData.decayStartTime); this.decayEndTime(cosignerData.decayEndTime); this.exclusiveFiller(cosignerData.exclusiveFiller); this.exclusivityOverrideBps(cosignerData.exclusivityOverrideBps); this.inputOverride(cosignerData.inputOverride); this.outputOverrides(cosignerData.outputOverrides); return this; } buildPartial() { var _a, _b; (0, tiny_invariant_1.default)(this.info.cosigner !== undefined, "cosigner not set"); (0, tiny_invariant_1.default)(this.info.input !== undefined, "input not set"); (0, tiny_invariant_1.default)(this.info.outputs && this.info.outputs.length > 0, "outputs not set"); (0, tiny_invariant_1.default)(this.info.input !== undefined, "original input not set"); (0, tiny_invariant_1.default)(!this.orderInfo.deadline || (this.info.cosignerData && this.info.cosignerData.decayStartTime <= this.orderInfo.deadline), `if present, decayStartTime must be before or same as deadline: ${(_a = this.info.cosignerData) === null || _a === void 0 ? void 0 : _a.decayStartTime}`); (0, tiny_invariant_1.default)(!this.orderInfo.deadline || (this.info.cosignerData && this.info.cosignerData.decayEndTime <= this.orderInfo.deadline), `if present, decayEndTime must be before or same as deadline: ${(_b = this.info.cosignerData) === null || _b === void 0 ? void 0 : _b.decayEndTime}`); return new order_1.UnsignedV2DutchOrder(Object.assign(this.getOrderInfo(), { input: this.info.input, outputs: this.info.outputs, cosigner: this.info.cosigner, }), this.chainId, this.permit2Address); } build() { (0, tiny_invariant_1.default)(this.info.cosigner !== undefined, "cosigner not set"); (0, tiny_invariant_1.default)(this.info.cosignature !== undefined, "cosignature not set"); (0, tiny_invariant_1.default)(this.info.input !== undefined, "input not set"); (0, tiny_invariant_1.default)(this.info.outputs && this.info.outputs.length > 0, "outputs not set"); (0, tiny_invariant_1.default)(this.info.cosignerData !== undefined, "cosignerData not set"); (0, tiny_invariant_1.default)(this.info.cosignerData.decayStartTime !== undefined, "decayStartTime not set"); (0, tiny_invariant_1.default)(this.info.cosignerData.decayEndTime !== undefined || this.orderInfo.deadline !== undefined, "Neither decayEndTime or deadline not set"); (0, tiny_invariant_1.default)(this.info.cosignerData.exclusiveFiller !== undefined, "exclusiveFiller not set"); (0, tiny_invariant_1.default)(this.info.cosignerData.exclusivityOverrideBps !== undefined, "exclusivityOverrideBps not set"); (0, tiny_invariant_1.default)(this.info.cosignerData.inputOverride !== undefined && this.info.cosignerData.inputOverride.lte(this.info.input.startAmount), "inputOverride not set or larger than original input"); (0, tiny_invariant_1.default)(this.info.cosignerData.outputOverrides.length > 0, "outputOverrides not set"); this.info.cosignerData.outputOverrides.forEach((override, idx) => { (0, tiny_invariant_1.default)( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion override.gte(this.info.outputs[idx].startAmount), "outputOverride must be larger than or equal to original output"); }); (0, tiny_invariant_1.default)(this.info.input !== undefined, "original input not set"); (0, tiny_invariant_1.default)(!this.orderInfo.deadline || this.info.cosignerData.decayStartTime <= this.orderInfo.deadline, `decayStartTime must be before or same as deadline: ${this.info.cosignerData.decayStartTime}`); (0, tiny_invariant_1.default)(!this.orderInfo.deadline || this.info.cosignerData.decayEndTime <= this.orderInfo.deadline, `decayEndTime must be before or same as deadline: ${this.info.cosignerData.decayEndTime}`); return new order_1.CosignedV2DutchOrder(Object.assign(this.getOrderInfo(), { cosignerData: this.info.cosignerData, input: this.info.input, outputs: this.info.outputs, cosigner: this.info.cosigner, cosignature: this.info.cosignature, }), this.chainId, this.permit2Address); } initializeCosignerData(overrides) { this.info.cosignerData = Object.assign({ decayStartTime: 0, decayEndTime: 0, exclusiveFiller: ethers_1.ethers.constants.AddressZero, exclusivityOverrideBps: ethers_1.BigNumber.from(0), inputOverride: ethers_1.BigNumber.from(0), outputOverrides: [] }, overrides); } } exports.V2DutchOrderBuilder = V2DutchOrderBuilder; function isCosigned(order) { return order.info.cosignature !== undefined; } //# sourceMappingURL=V2DutchOrderBuilder.js.map