diff --git a/src/dlob-subscriber/DLOBSubscriberIO.ts b/src/dlob-subscriber/DLOBSubscriberIO.ts index 3bf5b76..b023028 100644 --- a/src/dlob-subscriber/DLOBSubscriberIO.ts +++ b/src/dlob-subscriber/DLOBSubscriberIO.ts @@ -137,109 +137,113 @@ export class DLOBSubscriberIO extends DLOBSubscriber { let indicativeOrderId = 0; for (const marketArgs of this.marketArgs) { try { - // if (this.indicativeQuotesRedisClient) { - // const marketType = isVariant(marketArgs.marketType, 'perp') - // ? 'perp' - // : 'spot'; + if (this.indicativeQuotesRedisClient) { + const marketType = isVariant(marketArgs.marketType, 'perp') + ? 'perp' + : 'spot'; - // const mms = await this.indicativeQuotesRedisClient.smembers( - // `market_mms_${marketType}_${marketArgs.marketIndex}` - // ); - // const mmQuotes = await Promise.all( - // mms.map((mm) => { - // return this.indicativeQuotesRedisClient.get( - // `mm_quotes_${marketType}_${marketArgs.marketIndex}_${mm}` - // ); - // }) - // ); + const mms = await this.indicativeQuotesRedisClient.smembers( + `market_mms_${marketType}_${marketArgs.marketIndex}` + ); + const mmQuotes = await Promise.all( + mms.map((mm) => { + return this.indicativeQuotesRedisClient.get( + `mm_quotes_${marketType}_${marketArgs.marketIndex}_${mm}` + ); + }) + ); - // const nowMinus1000Ms = Date.now() - 1000; - // for (const quote of mmQuotes) { - // if (Number(quote['ts']) > nowMinus1000Ms) { - // const indicativeBaseOrder: Order = { - // status: OrderStatus.OPEN, - // orderType: OrderType.LIMIT, - // orderId: 0, - // slot: new BN(this.slotSource.getSlot()), - // marketIndex: marketArgs.marketIndex, - // marketType: marketArgs.marketType, - // baseAssetAmount: ZERO, - // immediateOrCancel: false, - // direction: PositionDirection.LONG, - // oraclePriceOffset: 0, - // maxTs: new BN(quote['ts'] + 1000), - // reduceOnly: false, - // triggerCondition: OrderTriggerCondition.ABOVE, - // price: ZERO, - // userOrderId: 0, - // postOnly: true, - // auctionDuration: 0, - // auctionStartPrice: ZERO, - // auctionEndPrice: ZERO, - // // Rest are not necessary and set for type conforming - // existingPositionDirection: PositionDirection.LONG, - // triggerPrice: ZERO, - // baseAssetAmountFilled: ZERO, - // quoteAssetAmountFilled: ZERO, - // quoteAssetAmount: ZERO, - // bitFlags: 0, - // postedSlotTail: 0, - // }; + const nowMinus1000Ms = Date.now() - 1000; + for (const quote of mmQuotes) { + try { + if (Number(quote['ts']) > nowMinus1000Ms) { + const indicativeBaseOrder: Order = { + status: OrderStatus.OPEN, + orderType: OrderType.LIMIT, + orderId: 0, + slot: new BN(this.slotSource.getSlot()), + marketIndex: marketArgs.marketIndex, + marketType: marketArgs.marketType, + baseAssetAmount: ZERO, + immediateOrCancel: false, + direction: PositionDirection.LONG, + oraclePriceOffset: 0, + maxTs: new BN(quote['ts'] + 1000), + reduceOnly: false, + triggerCondition: OrderTriggerCondition.ABOVE, + price: ZERO, + userOrderId: 0, + postOnly: true, + auctionDuration: 0, + auctionStartPrice: ZERO, + auctionEndPrice: ZERO, + // Rest are not necessary and set for type conforming + existingPositionDirection: PositionDirection.LONG, + triggerPrice: ZERO, + baseAssetAmountFilled: ZERO, + quoteAssetAmountFilled: ZERO, + quoteAssetAmount: ZERO, + bitFlags: 0, + postedSlotTail: 0, + }; - // if (quote['bid_size'] && quote['bid_price'] != null) { - // // Sanity check bid price and size + if (quote['bid_size'] && quote['bid_price'] != null) { + // Sanity check bid price and size - // const indicativeBid: Order = Object.assign( - // {}, - // indicativeBaseOrder, - // { - // orderId: indicativeOrderId, - // oraclePriceOffset: quote['is_oracle_offset'] - // ? quote['bid_price'] - // : 0, - // price: quote['is_oracle_offset'] - // ? 0 - // : new BN(quote['bid_price']), - // baseAssetAmount: new BN(quote['bid_size']), - // direction: PositionDirection.LONG, - // } - // ); - // this.dlob.insertOrder( - // indicativeBid, - // INDICATIVE_QUOTES_PUBKEY, - // this.slotSource.getSlot(), - // false - // ); - // indicativeOrderId += 1; - // } + const indicativeBid: Order = Object.assign( + {}, + indicativeBaseOrder, + { + orderId: indicativeOrderId, + oraclePriceOffset: quote['is_oracle_offset'] + ? quote['bid_price'] + : 0, + price: quote['is_oracle_offset'] + ? 0 + : new BN(quote['bid_price']), + baseAssetAmount: new BN(quote['bid_size']), + direction: PositionDirection.LONG, + } + ); + this.dlob.insertOrder( + indicativeBid, + INDICATIVE_QUOTES_PUBKEY, + this.slotSource.getSlot(), + false + ); + indicativeOrderId += 1; + } - // if (quote['ask_size'] && quote['ask_price'] != null) { - // const indicativeAsk: Order = Object.assign( - // {}, - // indicativeBaseOrder, - // { - // orderId: indicativeOrderId, - // oraclePriceOffset: quote['is_oracle_offset'] - // ? quote['ask_price'] - // : 0, - // price: quote['is_oracle_offset'] - // ? 0 - // : new BN(quote['ask_price']), - // baseAssetAmount: new BN(quote['ask_size']), - // direction: PositionDirection.SHORT, - // } - // ); - // this.dlob.insertOrder( - // indicativeAsk, - // INDICATIVE_QUOTES_PUBKEY, - // this.slotSource.getSlot(), - // false - // ); - // indicativeOrderId += 1; - // } - // } - // } - // } + if (quote['ask_size'] && quote['ask_price'] != null) { + const indicativeAsk: Order = Object.assign( + {}, + indicativeBaseOrder, + { + orderId: indicativeOrderId, + oraclePriceOffset: quote['is_oracle_offset'] + ? quote['ask_price'] + : 0, + price: quote['is_oracle_offset'] + ? 0 + : new BN(quote['ask_price']), + baseAssetAmount: new BN(quote['ask_size']), + direction: PositionDirection.SHORT, + } + ); + this.dlob.insertOrder( + indicativeAsk, + INDICATIVE_QUOTES_PUBKEY, + this.slotSource.getSlot(), + false + ); + indicativeOrderId += 1; + } + } + } catch (error) { + console.log('skipping mmQuote: ', error); + } + } + } this.getL2AndSendMsg(marketArgs); this.getL3AndSendMsg(marketArgs); } catch (error) {