@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.
- package/lib/constants.d.ts +1 -0
- package/lib/constants.js +2 -1
- package/lib/contracts/utils/tradeLastUpdated.d.ts +6 -0
- package/lib/contracts/utils/tradeLastUpdated.js +25 -0
- package/lib/trade/index.d.ts +2 -0
- package/lib/trade/index.js +2 -0
- package/lib/trade/openLimitOrder.d.ts +2 -0
- package/lib/trade/openLimitOrder.js +24 -0
- package/lib/trade/spread.d.ts +3 -0
- package/lib/trade/spread.js +30 -0
- package/lib/trade/types.d.ts +5 -0
- package/lib/trade/types.js +7 -1
- package/package.json +1 -1
package/lib/constants.d.ts
CHANGED
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,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
|
+
}
|
package/lib/trade/index.d.ts
CHANGED
package/lib/trade/index.js
CHANGED
|
@@ -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,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;
|
package/lib/trade/types.d.ts
CHANGED
package/lib/trade/types.js
CHANGED
|
@@ -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 = {}));
|