@gainsnetwork/sdk 0.0.23-rc3 → 0.0.24-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,3 +135,4 @@ export declare const stockSplits: {
135
135
  split: number;
136
136
  };
137
137
  };
138
+ export declare const defaultSpreadReductionsP100: number[];
package/lib/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stockSplits = exports.tickerChanges = exports.getAssetClassFromGroupIndex = exports.pairs = void 0;
3
+ exports.defaultSpreadReductionsP100 = exports.stockSplits = exports.tickerChanges = exports.getAssetClassFromGroupIndex = exports.pairs = void 0;
4
4
  exports.pairs = {
5
5
  "BTC/USD": "crypto",
6
6
  "ETH/USD": "crypto",
@@ -142,3 +142,4 @@ exports.stockSplits = {
142
142
  "GME_1/USD": { date: "7/22/2022", split: 4 },
143
143
  "TSLA_1/USD": { date: "8/25/2022", split: 3 },
144
144
  };
145
+ exports.defaultSpreadReductionsP100 = [15, 20, 25, 30, 35];
@@ -0,0 +1,6 @@
1
+ import { BlockTag } from "@/contracts/types";
2
+ export type FetchTradesLastUpdated = {
3
+ pairBatchSize?: number;
4
+ useMulticall?: boolean;
5
+ blockTag?: BlockTag;
6
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const ethcall_1 = require("ethcall");
13
+ function populateTradesLastUpdated(openLimitOrders, pairTrades) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ appLogger.info("Fetching last updated info...");
16
+ const ethersProvider = new ethers.providers.WebSocketProvider(currentlySelectedWeb3Client.currentProvider.connection._url);
17
+ const multicallProvider = new ethcall_1.Provider();
18
+ yield multicallProvider.init(ethersProvider);
19
+ const callbacksContractMulticall = new ethcall_1.Contract(callbacksContract.options.address, abis.CALLBACKS);
20
+ const olLastUpdated = yield multicallProvider.all(openLimitOrders.map(order => callbacksContractMulticall.tradeLastUpdated(order.trader, order.pairIndex, order.index, TRADE_TYPE.LIMIT)), "latest");
21
+ const tLastUpdated = yield multicallProvider.all(pairTrades.map(order => callbacksContractMulticall.tradeLastUpdated(order.trader, order.pairIndex, order.index, TRADE_TYPE.MARKET)), "latest");
22
+ appLogger.info(`Fetched last updated info for ${tLastUpdated.length + olLastUpdated.length} trade(s).`);
23
+ return transformLastUpdated(openLimitOrders, olLastUpdated, pairTrades, tLastUpdated);
24
+ });
25
+ }
@@ -1,2 +1,4 @@
1
1
  export * from "./fees";
2
2
  export * from "./pnl";
3
+ export * from "./spread";
4
+ export * from "./openLimitOrder";
@@ -16,3 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./fees"), exports);
18
18
  __exportStar(require("./pnl"), exports);
19
+ __exportStar(require("./spread"), exports);
20
+ __exportStar(require("./openLimitOrder"), exports);
@@ -0,0 +1,2 @@
1
+ import { LimitOrder, OpenInterest, Pair, PairParams } from "./types";
2
+ export declare const getTriggerPrice: (order: LimitOrder, pair: Pair, pairParams: PairParams, openInterest: OpenInterest) => number;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTriggerPrice = void 0;
4
+ const spread_1 = require("./spread");
5
+ const types_1 = require("./types");
6
+ const getTriggerPrice = (order, pair, pairParams, openInterest) => {
7
+ if (!order || !pair) {
8
+ return 0;
9
+ }
10
+ // Get spread percentage
11
+ const baseSpreadP = (0, spread_1.getBaseSpreadP)(pair.spreadP, order.spreadReductionP);
12
+ const spreadWithPriceImpactP = (0, spread_1.getSpreadWithPriceImpactP)(baseSpreadP, order.buy, order.positionSize, order.leverage, pairParams, openInterest);
13
+ if (spreadWithPriceImpactP === 0) {
14
+ return 0;
15
+ }
16
+ const askingPrice = (order.buy && order.type === types_1.OpenLimitOrderType.REVERSAL) ||
17
+ (!order.buy && order.type === types_1.OpenLimitOrderType.MOMENTUM)
18
+ ? order.maxPrice
19
+ : order.minPrice;
20
+ return order.buy
21
+ ? askingPrice * (1 + spreadWithPriceImpactP)
22
+ : askingPrice * (1 - spreadWithPriceImpactP);
23
+ };
24
+ exports.getTriggerPrice = getTriggerPrice;
@@ -0,0 +1,3 @@
1
+ import { OpenInterest, PairParams } from "./types";
2
+ export declare const getBaseSpreadP: (pairSpreadP: number | undefined, spreadReductionP: number | undefined) => number;
3
+ export declare const getSpreadWithPriceImpactP: (baseSpreadP: number, buy: boolean, collateral: number, leverage: number, pairParams: PairParams | undefined, openInterest: OpenInterest | undefined) => number;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSpreadWithPriceImpactP = exports.getBaseSpreadP = void 0;
4
+ const getBaseSpreadP = (pairSpreadP, spreadReductionP) => {
5
+ if (!pairSpreadP) {
6
+ return 0;
7
+ }
8
+ if (!spreadReductionP) {
9
+ return pairSpreadP;
10
+ }
11
+ return (pairSpreadP * (100 - spreadReductionP)) / 100;
12
+ };
13
+ exports.getBaseSpreadP = getBaseSpreadP;
14
+ const getSpreadWithPriceImpactP = (baseSpreadP, buy, collateral, leverage, pairParams, openInterest) => {
15
+ if (baseSpreadP === undefined) {
16
+ return 0;
17
+ }
18
+ const onePercentDepth = buy
19
+ ? pairParams === null || pairParams === void 0 ? void 0 : pairParams.onePercentDepthAbove
20
+ : pairParams === null || pairParams === void 0 ? void 0 : pairParams.onePercentDepthBelow;
21
+ const existingOi = buy ? openInterest === null || openInterest === void 0 ? void 0 : openInterest.long : openInterest === null || openInterest === void 0 ? void 0 : openInterest.short;
22
+ if (!onePercentDepth ||
23
+ existingOi === undefined ||
24
+ collateral === undefined) {
25
+ return baseSpreadP;
26
+ }
27
+ return (baseSpreadP +
28
+ (existingOi + (collateral * leverage) / 2) / onePercentDepth / 100);
29
+ };
30
+ exports.getSpreadWithPriceImpactP = getSpreadWithPriceImpactP;
@@ -155,3 +155,8 @@ export type TradeContainerRaw = {
155
155
  openedAfterUpdate: boolean;
156
156
  };
157
157
  };
158
+ export declare enum OpenLimitOrderType {
159
+ LEGACY = 0,
160
+ REVERSAL = 1,
161
+ MOMENTUM = 2
162
+ }
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PositionType = void 0;
3
+ exports.OpenLimitOrderType = exports.PositionType = void 0;
4
4
  var PositionType;
5
5
  (function (PositionType) {
6
6
  PositionType["LONG"] = "LONG";
7
7
  PositionType["SHORT"] = "SHORT";
8
8
  })(PositionType = exports.PositionType || (exports.PositionType = {}));
9
+ var OpenLimitOrderType;
10
+ (function (OpenLimitOrderType) {
11
+ OpenLimitOrderType[OpenLimitOrderType["LEGACY"] = 0] = "LEGACY";
12
+ OpenLimitOrderType[OpenLimitOrderType["REVERSAL"] = 1] = "REVERSAL";
13
+ OpenLimitOrderType[OpenLimitOrderType["MOMENTUM"] = 2] = "MOMENTUM";
14
+ })(OpenLimitOrderType = exports.OpenLimitOrderType || (exports.OpenLimitOrderType = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gainsnetwork/sdk",
3
- "version": "0.0.23-rc3",
3
+ "version": "0.0.24-rc1",
4
4
  "description": "Gains Network SDK",
5
5
  "main": "./lib/index.js",
6
6
  "files": [