UNPKG

@volare.finance/volare.js

Version:
130 lines 5.65 kB
"use strict"; /** * @file order.ts * @author astra <astra@volare.com> * @date 2022 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LimitOrder = exports.OrderBase = exports.SignatureType = exports.OrderStatus = exports.DOMAIN_DEFAULT = void 0; const tslib_1 = require("tslib"); const utils_js_1 = require("@volare.finance/utils.js"); exports.DOMAIN_DEFAULT = { chainId: 1, verifyingContract: utils_js_1.ZERO_ADDR, name: 'VolareProtocol', version: '1.0.0', }; var OrderStatus; (function (OrderStatus) { OrderStatus[OrderStatus["Invalid"] = 0] = "Invalid"; OrderStatus[OrderStatus["Fillable"] = 1] = "Fillable"; OrderStatus[OrderStatus["Filled"] = 2] = "Filled"; OrderStatus[OrderStatus["Cancelled"] = 3] = "Cancelled"; OrderStatus[OrderStatus["Expired"] = 4] = "Expired"; })(OrderStatus = exports.OrderStatus || (exports.OrderStatus = {})); var SignatureType; (function (SignatureType) { SignatureType[SignatureType["Illegal"] = 0] = "Illegal"; SignatureType[SignatureType["Invalid"] = 1] = "Invalid"; SignatureType[SignatureType["EIP712"] = 2] = "EIP712"; SignatureType[SignatureType["EthSign"] = 3] = "EthSign"; })(SignatureType = exports.SignatureType || (exports.SignatureType = {})); const COMMON_ORDER_DEFAULT_VALUES = { makerToken: utils_js_1.ZERO_ADDR, takerToken: utils_js_1.ZERO_ADDR, makerAmount: utils_js_1.ZERO, takerAmount: utils_js_1.ZERO, maker: utils_js_1.ZERO_ADDR, taker: utils_js_1.ZERO_ADDR, pool: utils_js_1.ZERO_BYTES32, expiry: 0, salt: 0, chainId: 1, verifyingContract: utils_js_1.ZERO_ADDR, }; const LIMIT_ORDER_DEFAULT_VALUES = Object.assign(Object.assign({}, COMMON_ORDER_DEFAULT_VALUES), { takerTokenFeeAmount: utils_js_1.ZERO, sender: utils_js_1.ZERO_ADDR, feeRecipient: utils_js_1.ZERO_ADDR }); class OrderBase { constructor(fields = {}) { const _fields = Object.assign(Object.assign({}, COMMON_ORDER_DEFAULT_VALUES), fields); this.makerToken = _fields.makerToken; this.takerToken = _fields.takerToken; this.makerAmount = _fields.makerAmount; this.takerAmount = _fields.takerAmount; this.maker = _fields.maker; this.taker = _fields.taker; this.pool = _fields.pool; this.expiry = _fields.expiry; this.salt = _fields.salt; this.chainId = _fields.chainId; this.verifyingContract = _fields.verifyingContract; } getHash() { return (0, utils_js_1.eip712GetHash)(this.getEIP712TypedData()); } getSignature(signer, type = SignatureType.EIP712) { return tslib_1.__awaiter(this, void 0, void 0, function* () { switch (type) { case SignatureType.EIP712: return (yield (0, utils_js_1.eip712GetSignature)(signer, this.getEIP712TypedData()))[0]; default: throw new Error(`Cannot sign with signature type: ${type}`); } }); } recoverAddress(signature) { return (0, utils_js_1.eip712RecoverAddress)(this.getEIP712TypedData(), signature); } } exports.OrderBase = OrderBase; class LimitOrder extends OrderBase { constructor(fields = {}) { const _fields = Object.assign(Object.assign({}, LIMIT_ORDER_DEFAULT_VALUES), fields); super(_fields); this.takerTokenFeeAmount = _fields.takerTokenFeeAmount; this.sender = _fields.sender; this.feeRecipient = _fields.feeRecipient; } clone(fields = {}) { return new LimitOrder(Object.assign({ makerToken: this.makerToken, takerToken: this.takerToken, makerAmount: this.makerAmount, takerAmount: this.takerAmount, takerTokenFeeAmount: this.takerTokenFeeAmount, maker: this.maker, taker: this.taker, sender: this.sender, feeRecipient: this.feeRecipient, pool: this.pool, expiry: this.expiry, salt: this.salt, chainId: this.chainId, verifyingContract: this.verifyingContract }, fields)); } getEIP712TypedData() { return { domain: Object.assign(Object.assign(Object.assign({}, exports.DOMAIN_DEFAULT), (this.chainId ? { chainId: this.chainId } : {})), (this.verifyingContract ? { verifyingContract: this.verifyingContract } : {})), types: { [LimitOrder.STRUCT_NAME]: LimitOrder.STRUCT_ABI, }, message: { makerToken: this.makerToken, takerToken: this.takerToken, makerAmount: this.makerAmount.toString(10), takerAmount: this.takerAmount.toString(10), takerTokenFeeAmount: this.takerTokenFeeAmount.toString(10), maker: this.maker, taker: this.taker, sender: this.sender, feeRecipient: this.feeRecipient, pool: this.pool, expiry: this.expiry, salt: this.salt, }, primaryType: LimitOrder.STRUCT_NAME, }; } } exports.LimitOrder = LimitOrder; LimitOrder.STRUCT_NAME = 'LimitOrder'; LimitOrder.STRUCT_ABI = [ { type: 'address', name: 'makerToken' }, { type: 'address', name: 'takerToken' }, { type: 'uint128', name: 'makerAmount' }, { type: 'uint128', name: 'takerAmount' }, { type: 'uint128', name: 'takerTokenFeeAmount' }, { type: 'address', name: 'maker' }, { type: 'address', name: 'taker' }, { type: 'address', name: 'sender' }, { type: 'address', name: 'feeRecipient' }, { type: 'bytes32', name: 'pool' }, { type: 'uint64', name: 'expiry' }, { type: 'uint256', name: 'salt' }, ]; //# sourceMappingURL=orders.js.map