UNPKG

@leverj/adapter

Version:

common utilities used in leverj exchange

54 lines (48 loc) 2.43 kB
const affirm = require('@leverj/affirm') const {address} = require('@leverj/gluon-plasma.common/src/utils/ethereum') const {Pair} = require('@leverj/gluon-plasma.common.exchange/src/domain/pair') const {Order, SignedOrder, Side, OrderType} = require('@leverj/gluon-plasma.app.spot.exchange/src/domain/v/0/order') const ORDER_TYPE_MAP = {LMT: OrderType.limit, MKT: OrderType.market} const mathUtil = require('./MathUtil') module.exports = function () { const auth = {} auth.sign = function (order, pair, secret) { const contractOrder = auth.getContractOrder(order, pair) const signedContractOrder = contractOrder.signedByWithPersonalMessage(secret) return signedContractOrder.signature } auth.validate = function (order, pair, apiKey) { const personalMessageSigner = auth.getPersonalMessageSigner(order, pair) if (personalMessageSigner === apiKey) return const signer = auth.getSigner(order, pair) affirm(signer === apiKey, 'M_INV_ORDSIG', 422) } auth.getPersonalMessageSigner = function (order, pair) { return getSignedOrder(order, auth, pair).personalMessageSigner } auth.getSigner = function (order, pair) { return getSignedOrder(order, auth, pair).signer } auth.getContractOrder = function (order, pair) { affirm(ORDER_TYPE_MAP[order.orderType] > 0, 'Invalid order orderType') affirm(Side[order.side] > 0, 'Invalid order side') affirm(pair, 'pair missing') affirm(pair.symbol === order.instrument, 'pair must be same as order instrument') affirm(typeof order.timestamp === 'number', 'Invalid timestamp') const quantity = mathUtil.toBN(order.quantity, pair.base.decimals).toFixed() const price = mathUtil.toBN(order.price, pair.quote.decimals).toFixed() const timestamp = order.timestamp const id = order.uuid const orderType = ORDER_TYPE_MAP[order.orderType] const side = Side[order.side] return new Order(id, timestamp, orderType, side, new Pair(pair.base.address, pair.quote.address), quantity, price, order.originator, order.accountId) } auth.toBN = mathUtil.toBN function getSignedOrder(order, auth, pair) { // setting serverTimestamp to 0 if order.entryTime is undefined const serverTimestamp = order.entryTime ? order.entryTime : 0 const contractOrder = auth.getContractOrder(order, pair) return new SignedOrder(contractOrder, order.signature, serverTimestamp, 0) } return auth }()