@volare.finance/volare.js
Version:
The SDK for Volare Protocol
130 lines • 5.65 kB
JavaScript
"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