UNPKG

@tokenlon/contracts-lib

Version:

Common utility functions (e.g., signing order, encoding data) to interact with [Tokenlon contracts](https://github.com/consenlabs/tokenlon-contracts).

197 lines 7.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EncodingHelper = exports.abiUniswapV2Path = exports.abiL2OptimismDepositData = exports.abiL2ArbitrumDepositData = exports.abiAMMCurveData = exports.abiAMMUniswapV3MultiHopsData = exports.abiAMMUniswapV3SingleHopData = void 0; const ethers_1 = require("ethers"); const uniswap_1 = require("../uniswap"); const abi_1 = __importDefault(require("./abi")); exports.abiAMMUniswapV3SingleHopData = ["uint8", "uint24"]; exports.abiAMMUniswapV3MultiHopsData = ["uint8", "bytes"]; exports.abiAMMCurveData = ["uint8"]; exports.abiL2ArbitrumDepositData = ["address", "uint256", "uint256", "uint256"]; exports.abiL2OptimismDepositData = ["uint32"]; exports.abiUniswapV2Path = ["address[]"]; class EncodingHelper { /* AMM */ encodeAMMTrade(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.AMMWrapper); return i.encodeFunctionData("trade", [ data.makerAddr, data.takerAssetAddr, data.makerAssetAddr, data.takerAssetAmount, data.makerAssetAmount, data.feeFactor, data.userAddr, data.receiverAddr, data.salt, data.deadline, data.signature, ]); } encodeAMMTradeWithPath(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.AMMWrapperWithPath); return i.encodeFunctionData("trade", [ [ data.makerAddr, data.takerAssetAddr, data.makerAssetAddr, data.takerAssetAmount, data.makerAssetAmount, data.userAddr, data.receiverAddr, data.salt, data.deadline, ], data.feeFactor, data.signature, data.makerSpecificData, data.path, ]); } encodeAMMUniswapV3SingleHopData(fee) { const swapType = 1; return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiAMMUniswapV3SingleHopData, [swapType, fee]); } encodeAMMUniswapV3MultiHopsData(path, fees) { const swapType = 2; const uniswapV3Path = (0, uniswap_1.encodeUniswapV3Path)(path, fees); return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiAMMUniswapV3MultiHopsData, [ swapType, uniswapV3Path, ]); } encodeAMMCurveData(version) { return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiAMMCurveData, [version]); } /* Limit Order */ encodeLimitOrderFillByTrader(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.LimitOrder); return i.encodeFunctionData("fillLimitOrderByTrader", [ [ data.order.makerToken, data.order.takerToken, data.order.makerTokenAmount, data.order.takerTokenAmount, data.order.maker, data.order.taker, data.order.salt, data.order.expiry, ], data.makerSignature, [ data.fill.taker, data.fill.recipient, data.fill.takerTokenAmount, data.fill.takerSalt, data.fill.expiry, data.takerSignature, ], [data.coordinatorSignature, data.allowFill.salt, data.allowFill.expiry], ]); } encodeLimitOrderFillByProtocol(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.LimitOrder); return i.encodeFunctionData("fillLimitOrderByProtocol", [ [ data.order.makerToken, data.order.takerToken, data.order.makerTokenAmount, data.order.takerTokenAmount, data.order.maker, data.order.taker, data.order.salt, data.order.expiry, ], data.makerSignature, [ data.protocol.protocol, data.protocol.data, data.protocol.profitRecipient, data.protocol.takerTokenAmount, data.protocol.protocolOutMinimum, data.protocol.expiry, ], [data.coordinatorSignature, data.allowFill.salt, data.allowFill.expiry], ]); } encodeLimitOrderCancel(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.LimitOrder); return i.encodeFunctionData("cancelLimitOrder", [ [ data.order.makerToken, data.order.takerToken, data.order.makerTokenAmount, data.order.takerTokenAmount, data.order.maker, data.order.taker, data.order.salt, data.order.expiry, ], data.makerCancelSignature, ]); } /* RFQ */ encodeRFQFill(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.RFQ); return i.encodeFunctionData("fill", [ [ data.takerAddr, data.makerAddr, data.takerAssetAddr, data.makerAssetAddr, data.takerAssetAmount, data.makerAssetAmount, data.receiverAddr, data.salt, data.deadline, data.feeFactor, ], data.makerSignature, data.takerSignature, ]); } /* L2 Deposit */ // To comply with: https://github.com/consenlabs/tokenlon-contracts/blob/master/contracts/interfaces/IL2Deposit.sol#L29-L36 encodeL2Deposit(data) { const i = new ethers_1.ethers.utils.Interface(abi_1.default.L2Deposit); return i.encodeFunctionData("deposit", [ [ [ data.deposit.l2Identifier, data.deposit.l1TokenAddr, data.deposit.l2TokenAddr, data.deposit.sender, data.deposit.recipient, data.deposit.amount, data.deposit.salt, data.deposit.expiry, data.deposit.data, ], data.depositSig, ], ]); } /* Vendor */ encodeL2ArbitrumDepositData(user, data) { return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiL2ArbitrumDepositData, [ user, data.maxSubmissionCost, data.maxGas, data.gasPriceBid, ]); } encodeL2OptimismDepositData(data) { return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiL2OptimismDepositData, [data.l2Gas]); } encodeUniswapV2Path(path) { return ethers_1.ethers.utils.defaultAbiCoder.encode(exports.abiUniswapV2Path, [path]); } encodeUniswapV3Path(path, fees) { return (0, uniswap_1.encodeUniswapV3Path)(path, fees); } } exports.EncodingHelper = EncodingHelper; //# sourceMappingURL=encoding.js.map