@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
JavaScript
;
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