@sonarwatch/portfolio-plugins 0.12.37 → 0.12.38
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +1843 -1839
- package/README.md +3 -3
- package/package.json +1 -1
- package/src/plugins/balancer/helpers/pools.js +21 -21
- package/src/plugins/drift/constants.d.ts +1 -0
- package/src/plugins/drift/constants.js +2 -1
- package/src/plugins/drift/constants.js.map +1 -1
- package/src/plugins/drift/depositsFetcher.js +63 -1
- package/src/plugins/drift/depositsFetcher.js.map +1 -1
- package/src/plugins/drift/filters.d.ts +1 -0
- package/src/plugins/drift/filters.js +4 -1
- package/src/plugins/drift/filters.js.map +1 -1
- package/src/plugins/drift/index.js +2 -1
- package/src/plugins/drift/index.js.map +1 -1
- package/src/plugins/drift/perpHelpers/amm.d.ts +74 -0
- package/src/plugins/drift/perpHelpers/amm.js +567 -0
- package/src/plugins/drift/perpHelpers/amm.js.map +1 -0
- package/src/plugins/drift/perpHelpers/assert.d.ts +1 -0
- package/src/plugins/drift/perpHelpers/assert.js +10 -0
- package/src/plugins/drift/perpHelpers/assert.js.map +1 -0
- package/src/plugins/drift/perpHelpers/constants.d.ts +27 -0
- package/src/plugins/drift/perpHelpers/constants.js +35 -0
- package/src/plugins/drift/perpHelpers/constants.js.map +1 -0
- package/src/plugins/drift/perpHelpers/convert.d.ts +0 -0
- package/src/plugins/drift/perpHelpers/convert.js +2 -0
- package/src/plugins/drift/perpHelpers/convert.js.map +1 -0
- package/src/plugins/drift/perpHelpers/getOraclePrice.d.ts +4 -0
- package/src/plugins/drift/perpHelpers/getOraclePrice.js +61 -0
- package/src/plugins/drift/perpHelpers/getOraclePrice.js.map +1 -0
- package/src/plugins/drift/perpHelpers/getPerpMarket.d.ts +4 -0
- package/src/plugins/drift/perpHelpers/getPerpMarket.js +33 -0
- package/src/plugins/drift/perpHelpers/getPerpMarket.js.map +1 -0
- package/src/plugins/drift/perpHelpers/margin.d.ts +10 -0
- package/src/plugins/drift/perpHelpers/margin.js +82 -0
- package/src/plugins/drift/perpHelpers/margin.js.map +1 -0
- package/src/plugins/drift/perpHelpers/math.d.ts +4 -0
- package/src/plugins/drift/perpHelpers/math.js +29 -0
- package/src/plugins/drift/perpHelpers/math.js.map +1 -0
- package/src/plugins/drift/perpHelpers/oracle.d.ts +6 -0
- package/src/plugins/drift/perpHelpers/oracle.js +54 -0
- package/src/plugins/drift/perpHelpers/oracle.js.map +1 -0
- package/src/plugins/drift/perpHelpers/orders.d.ts +2 -0
- package/src/plugins/drift/perpHelpers/orders.js +9 -0
- package/src/plugins/drift/perpHelpers/orders.js.map +1 -0
- package/src/plugins/drift/perpHelpers/position.d.ts +44 -0
- package/src/plugins/drift/perpHelpers/position.js +184 -0
- package/src/plugins/drift/perpHelpers/position.js.map +1 -0
- package/src/plugins/drift/perpHelpers/prelaunchOracle.d.ts +3 -0
- package/src/plugins/drift/perpHelpers/prelaunchOracle.js +20 -0
- package/src/plugins/drift/perpHelpers/prelaunchOracle.js.map +1 -0
- package/src/plugins/drift/perpHelpers/pyth.d.ts +5 -0
- package/src/plugins/drift/perpHelpers/pyth.js +42 -0
- package/src/plugins/drift/perpHelpers/pyth.js.map +1 -0
- package/src/plugins/drift/perpHelpers/repeg.d.ts +14 -0
- package/src/plugins/drift/perpHelpers/repeg.js +162 -0
- package/src/plugins/drift/perpHelpers/repeg.js.map +1 -0
- package/src/plugins/drift/perpHelpers/switchboard.d.ts +3 -0
- package/src/plugins/drift/perpHelpers/switchboard.js +31 -0
- package/src/plugins/drift/perpHelpers/switchboard.js.map +1 -0
- package/src/plugins/drift/perpHelpers/types.d.ts +28 -0
- package/src/plugins/drift/perpHelpers/types.js +19 -0
- package/src/plugins/drift/perpHelpers/types.js.map +1 -0
- package/src/plugins/drift/prepMarketsJob.d.ts +3 -0
- package/src/plugins/drift/prepMarketsJob.js +38 -0
- package/src/plugins/drift/prepMarketsJob.js.map +1 -0
- package/src/plugins/drift/struct.d.ts +82 -76
- package/src/plugins/drift/struct.js +79 -74
- package/src/plugins/drift/struct.js.map +1 -1
- package/src/plugins/drift/types.d.ts +1 -0
- package/src/plugins/jupiter/exchange/perpetualFetcher.js +3 -6
- package/src/plugins/jupiter/exchange/perpetualFetcher.js.map +1 -1
- package/src/plugins/jupiter/exchange/valueAverageFetcher.js.map +1 -1
- package/src/plugins/jupiter/helpers.d.ts +2 -2
- package/src/plugins/jupiter/helpers.js.map +1 -1
- package/src/plugins/sushiswap/helpers.js +24 -24
- package/src/plugins/uniswap-v2/helpers.js +22 -22
- package/src/plugins/zeta/airdropFetcher.js +14 -14
- package/src/utils/sei/constants.js +8 -8
- package/src/utils/sei/getQueryBalanceByOwner.js +4 -4
@@ -0,0 +1,27 @@
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
2
|
+
export declare const PRICE_PRECISION_EXP: import("bn.js");
|
3
|
+
export declare const PRICE_PRECISION: import("bn.js");
|
4
|
+
export declare const PRICE_PRECISION_BIG_NUMBER: BigNumber;
|
5
|
+
export declare const PEG_PRECISION_EXP: import("bn.js");
|
6
|
+
export declare const PEG_PRECISION: import("bn.js");
|
7
|
+
export declare const ZERO: import("bn.js");
|
8
|
+
export declare const ONE: import("bn.js");
|
9
|
+
export declare const TWO: import("bn.js");
|
10
|
+
export declare const TEN: import("bn.js");
|
11
|
+
export declare const AMM_RESERVE_PRECISION_EXP: import("bn.js");
|
12
|
+
export declare const QUOTE_PRECISION_EXP: import("bn.js");
|
13
|
+
export declare const QUOTE_PRECISION: import("bn.js");
|
14
|
+
export declare const AMM_RESERVE_PRECISION: import("bn.js");
|
15
|
+
export declare const AMM_TO_QUOTE_PRECISION_RATIO: import("bn.js");
|
16
|
+
export declare const PRICE_DIV_PEG: import("bn.js");
|
17
|
+
export declare const BID_ASK_SPREAD_PRECISION: import("bn.js");
|
18
|
+
export declare const PERCENTAGE_PRECISION_EXP: import("bn.js");
|
19
|
+
export declare const PERCENTAGE_PRECISION: import("bn.js");
|
20
|
+
export declare const DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT: import("bn.js");
|
21
|
+
export declare const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO: import("bn.js");
|
22
|
+
export declare const FIVE_MINUTE: import("bn.js");
|
23
|
+
export declare const FUNDING_RATE_BUFFER_PRECISION_EXP: import("bn.js");
|
24
|
+
export declare const FUNDING_RATE_BUFFER_PRECISION: import("bn.js");
|
25
|
+
export declare const SPOT_MARKET_IMF_PRECISION_EXP: import("bn.js");
|
26
|
+
export declare const SPOT_MARKET_IMF_PRECISION: import("bn.js");
|
27
|
+
export declare const SPOT_MARKET_WEIGHT_PRECISION: import("bn.js");
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.SPOT_MARKET_WEIGHT_PRECISION = exports.SPOT_MARKET_IMF_PRECISION = exports.SPOT_MARKET_IMF_PRECISION_EXP = exports.FUNDING_RATE_BUFFER_PRECISION = exports.FUNDING_RATE_BUFFER_PRECISION_EXP = exports.FIVE_MINUTE = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = exports.PERCENTAGE_PRECISION = exports.PERCENTAGE_PRECISION_EXP = exports.BID_ASK_SPREAD_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.AMM_RESERVE_PRECISION = exports.QUOTE_PRECISION = exports.QUOTE_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.TEN = exports.TWO = exports.ONE = exports.ZERO = exports.PEG_PRECISION = exports.PEG_PRECISION_EXP = exports.PRICE_PRECISION_BIG_NUMBER = exports.PRICE_PRECISION = exports.PRICE_PRECISION_EXP = void 0;
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
8
|
+
const bn_js_1 = require("bn.js");
|
9
|
+
exports.PRICE_PRECISION_EXP = new bn_js_1.BN(6);
|
10
|
+
exports.PRICE_PRECISION = new bn_js_1.BN(10).pow(exports.PRICE_PRECISION_EXP);
|
11
|
+
exports.PRICE_PRECISION_BIG_NUMBER = new bignumber_js_1.default(exports.PRICE_PRECISION.toString());
|
12
|
+
exports.PEG_PRECISION_EXP = new bn_js_1.BN(6);
|
13
|
+
exports.PEG_PRECISION = new bn_js_1.BN(10).pow(exports.PEG_PRECISION_EXP);
|
14
|
+
exports.ZERO = new bn_js_1.BN(0);
|
15
|
+
exports.ONE = new bn_js_1.BN(1);
|
16
|
+
exports.TWO = new bn_js_1.BN(2);
|
17
|
+
exports.TEN = new bn_js_1.BN(10);
|
18
|
+
exports.AMM_RESERVE_PRECISION_EXP = new bn_js_1.BN(9);
|
19
|
+
exports.QUOTE_PRECISION_EXP = new bn_js_1.BN(6);
|
20
|
+
exports.QUOTE_PRECISION = new bn_js_1.BN(10).pow(exports.QUOTE_PRECISION_EXP);
|
21
|
+
exports.AMM_RESERVE_PRECISION = new bn_js_1.BN(10).pow(exports.AMM_RESERVE_PRECISION_EXP);
|
22
|
+
exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.AMM_RESERVE_PRECISION.div(exports.QUOTE_PRECISION);
|
23
|
+
exports.PRICE_DIV_PEG = exports.PRICE_PRECISION.div(exports.PEG_PRECISION);
|
24
|
+
exports.BID_ASK_SPREAD_PRECISION = new bn_js_1.BN(1000000);
|
25
|
+
exports.PERCENTAGE_PRECISION_EXP = new bn_js_1.BN(6);
|
26
|
+
exports.PERCENTAGE_PRECISION = new bn_js_1.BN(10).pow(exports.PERCENTAGE_PRECISION_EXP);
|
27
|
+
exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = new bn_js_1.BN(-25).mul(exports.QUOTE_PRECISION);
|
28
|
+
exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.AMM_RESERVE_PRECISION.mul(exports.PEG_PRECISION).div(exports.QUOTE_PRECISION);
|
29
|
+
exports.FIVE_MINUTE = new bn_js_1.BN(60 * 5);
|
30
|
+
exports.FUNDING_RATE_BUFFER_PRECISION_EXP = new bn_js_1.BN(3);
|
31
|
+
exports.FUNDING_RATE_BUFFER_PRECISION = new bn_js_1.BN(10).pow(exports.FUNDING_RATE_BUFFER_PRECISION_EXP);
|
32
|
+
exports.SPOT_MARKET_IMF_PRECISION_EXP = new bn_js_1.BN(6);
|
33
|
+
exports.SPOT_MARKET_IMF_PRECISION = new bn_js_1.BN(10).pow(exports.SPOT_MARKET_IMF_PRECISION_EXP);
|
34
|
+
exports.SPOT_MARKET_WEIGHT_PRECISION = new bn_js_1.BN(10000);
|
35
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/constants.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,iCAA2B;AAEd,QAAA,mBAAmB,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,eAAe,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,2BAAmB,CAAC,CAAC;AACtD,QAAA,0BAA0B,GAAG,IAAI,sBAAS,CACrD,uBAAe,CAAC,QAAQ,EAAE,CAC3B,CAAC;AACW,QAAA,iBAAiB,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAA,aAAa,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,yBAAiB,CAAC,CAAC;AAClD,QAAA,IAAI,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,GAAG,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,GAAG,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,GAAG,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC;AACjB,QAAA,yBAAyB,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,mBAAmB,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,eAAe,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,2BAAmB,CAAC,CAAC;AACtD,QAAA,qBAAqB,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,iCAAyB,CAAC,CAAC;AAClE,QAAA,4BAA4B,GACvC,6BAAqB,CAAC,GAAG,CAAC,uBAAe,CAAC,CAAC;AAChC,QAAA,aAAa,GAAG,uBAAe,CAAC,GAAG,CAAC,qBAAa,CAAC,CAAC;AACnD,QAAA,wBAAwB,GAAG,IAAI,UAAE,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,wBAAwB,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AACrC,QAAA,oBAAoB,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,gCAAwB,CAAC,CAAC;AAChE,QAAA,iDAAiD,GAAG,IAAI,UAAE,CACrE,CAAC,EAAE,CACJ,CAAC,GAAG,CAAC,uBAAe,CAAC,CAAC;AACV,QAAA,sCAAsC,GACjD,6BAAqB,CAAC,GAAG,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,uBAAe,CAAC,CAAC;AACnD,QAAA,WAAW,GAAG,IAAI,UAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,QAAA,iCAAiC,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,6BAA6B,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CACzD,yCAAiC,CAClC,CAAC;AACW,QAAA,6BAA6B,GAAG,IAAI,UAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,yBAAyB,GAAG,IAAI,UAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CACrD,qCAA6B,CAC9B,CAAC;AACW,QAAA,4BAA4B,GAAG,IAAI,UAAE,CAAC,KAAK,CAAC,CAAC"}
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/convert.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import { SolanaClient } from '../../../utils/clients/types';
|
2
|
+
import { OracleSource } from '../struct';
|
3
|
+
import { OraclePriceData } from './types';
|
4
|
+
export declare function getOraclePrice(oracle: string, oracleSource: OracleSource, connection: SolanaClient): Promise<OraclePriceData>;
|
@@ -0,0 +1,61 @@
|
|
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
|
+
exports.getOraclePrice = void 0;
|
13
|
+
const web3_js_1 = require("@solana/web3.js");
|
14
|
+
const bn_js_1 = require("bn.js");
|
15
|
+
const struct_1 = require("../struct");
|
16
|
+
const pyth_1 = require("./pyth");
|
17
|
+
const switchboard_1 = require("./switchboard");
|
18
|
+
const prelaunchOracle_1 = require("./prelaunchOracle");
|
19
|
+
const oraclePrices = new Map();
|
20
|
+
const lastUpdates = new Map();
|
21
|
+
const oraclePriceTtl = 90000;
|
22
|
+
function getOraclePrice(oracle, oracleSource, connection) {
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
24
|
+
const lastUpdate = lastUpdates.get(oracle);
|
25
|
+
const oPriceData = oraclePrices.get(oracle);
|
26
|
+
if (!oPriceData || !lastUpdate || lastUpdate < Date.now() - oraclePriceTtl) {
|
27
|
+
const acc = yield connection.getAccountInfo(new web3_js_1.PublicKey(oracle));
|
28
|
+
if (!acc)
|
29
|
+
throw new Error('Unable to fetch oracle data');
|
30
|
+
let coPriceData;
|
31
|
+
switch (oracleSource) {
|
32
|
+
case struct_1.OracleSource.Pyth:
|
33
|
+
coPriceData = (0, pyth_1.getPythOraclePriceDataFromBuffer)(acc.data, new bn_js_1.BN(1), false);
|
34
|
+
break;
|
35
|
+
case struct_1.OracleSource.Pyth1K:
|
36
|
+
coPriceData = (0, pyth_1.getPythOraclePriceDataFromBuffer)(acc.data, new bn_js_1.BN(1000), false);
|
37
|
+
break;
|
38
|
+
case struct_1.OracleSource.Pyth1M:
|
39
|
+
coPriceData = (0, pyth_1.getPythOraclePriceDataFromBuffer)(acc.data, new bn_js_1.BN(1000000), false);
|
40
|
+
break;
|
41
|
+
case struct_1.OracleSource.PythStableCoin:
|
42
|
+
coPriceData = (0, pyth_1.getPythOraclePriceDataFromBuffer)(acc.data, new bn_js_1.BN(1), true);
|
43
|
+
break;
|
44
|
+
case struct_1.OracleSource.Switchboard:
|
45
|
+
coPriceData = (0, switchboard_1.getSwitchboardOraclePriceDataFromBuffer)(acc.data);
|
46
|
+
break;
|
47
|
+
case struct_1.OracleSource.Prelaunch:
|
48
|
+
coPriceData = (0, prelaunchOracle_1.getPreLaunchOraclePriceDataFromBuffer)(acc.data);
|
49
|
+
break;
|
50
|
+
default:
|
51
|
+
throw new Error('Unsupported OracleSource');
|
52
|
+
}
|
53
|
+
oraclePrices.set(oracle, coPriceData);
|
54
|
+
lastUpdates.set(oracle, Date.now());
|
55
|
+
return coPriceData;
|
56
|
+
}
|
57
|
+
return oPriceData;
|
58
|
+
});
|
59
|
+
}
|
60
|
+
exports.getOraclePrice = getOraclePrice;
|
61
|
+
//# sourceMappingURL=getOraclePrice.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"getOraclePrice.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/getOraclePrice.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA4C;AAC5C,iCAA2B;AAE3B,sCAAyC;AAEzC,iCAA0D;AAC1D,+CAAwE;AACxE,uDAA0E;AAE1E,MAAM,YAAY,GAAiC,IAAI,GAAG,EAAE,CAAC;AAC7D,MAAM,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAC;AACnD,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,SAAsB,cAAc,CAClC,MAAc,EACd,YAA0B,EAC1B,UAAwB;;QAExB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,mBAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACzD,IAAI,WAA4B,CAAC;YACjC,QAAQ,YAAY,EAAE,CAAC;gBACrB,KAAK,qBAAY,CAAC,IAAI;oBACpB,WAAW,GAAG,IAAA,uCAAgC,EAC5C,GAAG,CAAC,IAAI,EACR,IAAI,UAAE,CAAC,CAAC,CAAC,EACT,KAAK,CACN,CAAC;oBACF,MAAM;gBACR,KAAK,qBAAY,CAAC,MAAM;oBACtB,WAAW,GAAG,IAAA,uCAAgC,EAC5C,GAAG,CAAC,IAAI,EACR,IAAI,UAAE,CAAC,IAAI,CAAC,EACZ,KAAK,CACN,CAAC;oBACF,MAAM;gBACR,KAAK,qBAAY,CAAC,MAAM;oBACtB,WAAW,GAAG,IAAA,uCAAgC,EAC5C,GAAG,CAAC,IAAI,EACR,IAAI,UAAE,CAAC,OAAO,CAAC,EACf,KAAK,CACN,CAAC;oBACF,MAAM;gBACR,KAAK,qBAAY,CAAC,cAAc;oBAC9B,WAAW,GAAG,IAAA,uCAAgC,EAC5C,GAAG,CAAC,IAAI,EACR,IAAI,UAAE,CAAC,CAAC,CAAC,EACT,IAAI,CACL,CAAC;oBACF,MAAM;gBACR,KAAK,qBAAY,CAAC,WAAW;oBAC3B,WAAW,GAAG,IAAA,qDAAuC,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChE,MAAM;gBACR,KAAK,qBAAY,CAAC,SAAS;oBACzB,WAAW,GAAG,IAAA,uDAAqC,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC9D,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAChD,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACtC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACpC,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CAAA;AAvDD,wCAuDC"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import { SolanaClient } from '../../../utils/clients/types';
|
2
|
+
import { PerpMarket } from '../struct';
|
3
|
+
import { ParsedAccount } from '../../../utils/solana';
|
4
|
+
export declare function getPerpMarket(perpMarketAdd: string, connection: SolanaClient): Promise<ParsedAccount<PerpMarket> | null>;
|
@@ -0,0 +1,33 @@
|
|
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
|
+
exports.getPerpMarket = void 0;
|
13
|
+
const web3_js_1 = require("@solana/web3.js");
|
14
|
+
const struct_1 = require("../struct");
|
15
|
+
const getParsedAccountInfo_1 = require("../../../utils/solana/getParsedAccountInfo");
|
16
|
+
const perpMarkets = new Map();
|
17
|
+
const lastUpdates = new Map();
|
18
|
+
const perpMarketTtl = 3600000; // 1 hour
|
19
|
+
function getPerpMarket(perpMarketAdd, connection) {
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
21
|
+
const lastUpdate = lastUpdates.get(perpMarketAdd);
|
22
|
+
const perpMarket = perpMarkets.get(perpMarketAdd);
|
23
|
+
if (!perpMarket || !lastUpdate || lastUpdate < Date.now() - perpMarketTtl) {
|
24
|
+
const cPerpMarket = yield (0, getParsedAccountInfo_1.getParsedAccountInfo)(connection, struct_1.perpMarketStruct, new web3_js_1.PublicKey(perpMarketAdd));
|
25
|
+
perpMarkets.set(perpMarketAdd, cPerpMarket);
|
26
|
+
lastUpdates.set(perpMarketAdd, Date.now());
|
27
|
+
return cPerpMarket;
|
28
|
+
}
|
29
|
+
return perpMarket;
|
30
|
+
});
|
31
|
+
}
|
32
|
+
exports.getPerpMarket = getPerpMarket;
|
33
|
+
//# sourceMappingURL=getPerpMarket.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"getPerpMarket.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/getPerpMarket.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA4C;AAE5C,sCAAyD;AACzD,qFAAkF;AAGlF,MAAM,WAAW,GAAkD,IAAI,GAAG,EAAE,CAAC;AAC7E,MAAM,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAC;AACnD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,SAAS;AAExC,SAAsB,aAAa,CACjC,aAAqB,EACrB,UAAwB;;QAExB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YAC1E,MAAM,WAAW,GAAG,MAAM,IAAA,2CAAoB,EAC5C,UAAU,EACV,yBAAgB,EAChB,IAAI,mBAAS,CAAC,aAAa,CAAC,CAC7B,CAAC;YAEF,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC5C,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CAAA;AAnBD,sCAmBC"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import BN from 'bn.js';
|
2
|
+
import { PerpMarket, PerpPosition } from '../struct';
|
3
|
+
import { OraclePriceData } from './types';
|
4
|
+
export declare function calculateSizePremiumLiabilityWeight(size: BN, // AMM_RESERVE_PRECISION
|
5
|
+
imfFactor: BN, liabilityWeight: BN, precision: BN): BN;
|
6
|
+
export declare function calculateSizeDiscountAssetWeight(size: BN, // AMM_RESERVE_PRECISION
|
7
|
+
imfFactor: BN, assetWeight: BN): BN;
|
8
|
+
export declare function calculateOraclePriceForPerpMargin(perpPosition: PerpPosition, market: PerpMarket, oraclePriceData: OraclePriceData): BN;
|
9
|
+
export declare function calculateBaseAssetValueWithOracle(market: PerpMarket, perpPosition: PerpPosition, oraclePriceData: OraclePriceData, includeOpenOrders?: boolean): BN;
|
10
|
+
export declare function calculateWorstCaseBaseAssetAmount(perpPosition: PerpPosition): BN;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.calculateWorstCaseBaseAssetAmount = exports.calculateBaseAssetValueWithOracle = exports.calculateOraclePriceForPerpMargin = exports.calculateSizeDiscountAssetWeight = exports.calculateSizePremiumLiabilityWeight = void 0;
|
7
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
8
|
+
const struct_1 = require("../struct");
|
9
|
+
const constants_1 = require("./constants");
|
10
|
+
const math_1 = require("./math");
|
11
|
+
const assert_1 = require("./assert");
|
12
|
+
function calculateSizePremiumLiabilityWeight(size, // AMM_RESERVE_PRECISION
|
13
|
+
imfFactor, liabilityWeight, precision) {
|
14
|
+
if (imfFactor.eq(constants_1.ZERO)) {
|
15
|
+
return liabilityWeight;
|
16
|
+
}
|
17
|
+
const sizeSqrt = (0, math_1.squareRootBN)(size.abs().mul(new bn_js_1.default(10)).add(new bn_js_1.default(1))); // 1e9 -> 1e10 -> 1e5
|
18
|
+
const liabilityWeightNumerator = liabilityWeight.sub(liabilityWeight.div(new bn_js_1.default(5)));
|
19
|
+
const denom = new bn_js_1.default(100000).mul(constants_1.SPOT_MARKET_IMF_PRECISION).div(precision);
|
20
|
+
(0, assert_1.assert)(denom.gt(constants_1.ZERO));
|
21
|
+
const sizePremiumLiabilityWeight = liabilityWeightNumerator.add(sizeSqrt // 1e5
|
22
|
+
.mul(imfFactor)
|
23
|
+
.div(denom) // 1e5
|
24
|
+
);
|
25
|
+
const maxLiabilityWeight = bn_js_1.default.max(liabilityWeight, sizePremiumLiabilityWeight);
|
26
|
+
return maxLiabilityWeight;
|
27
|
+
}
|
28
|
+
exports.calculateSizePremiumLiabilityWeight = calculateSizePremiumLiabilityWeight;
|
29
|
+
function calculateSizeDiscountAssetWeight(size, // AMM_RESERVE_PRECISION
|
30
|
+
imfFactor, assetWeight) {
|
31
|
+
if (imfFactor.eq(constants_1.ZERO)) {
|
32
|
+
return assetWeight;
|
33
|
+
}
|
34
|
+
const sizeSqrt = (0, math_1.squareRootBN)(size.abs().mul(new bn_js_1.default(10)).add(new bn_js_1.default(1))); // 1e9 -> 1e10 -> 1e5
|
35
|
+
const imfNumerator = constants_1.SPOT_MARKET_IMF_PRECISION.add(constants_1.SPOT_MARKET_IMF_PRECISION.div(new bn_js_1.default(10)));
|
36
|
+
const sizeDiscountAssetWeight = imfNumerator
|
37
|
+
.mul(constants_1.SPOT_MARKET_WEIGHT_PRECISION)
|
38
|
+
.div(constants_1.SPOT_MARKET_IMF_PRECISION.add(sizeSqrt // 1e5
|
39
|
+
.mul(imfFactor)
|
40
|
+
.div(new bn_js_1.default(100000)) // 1e5
|
41
|
+
));
|
42
|
+
const minAssetWeight = bn_js_1.default.min(assetWeight, sizeDiscountAssetWeight);
|
43
|
+
return minAssetWeight;
|
44
|
+
}
|
45
|
+
exports.calculateSizeDiscountAssetWeight = calculateSizeDiscountAssetWeight;
|
46
|
+
function calculateOraclePriceForPerpMargin(perpPosition, market, oraclePriceData) {
|
47
|
+
const oraclePriceOffset = bn_js_1.default.min(new bn_js_1.default(market.amm.maxSpread)
|
48
|
+
.mul(oraclePriceData.price)
|
49
|
+
.div(constants_1.BID_ASK_SPREAD_PRECISION), oraclePriceData.confidence.add(new bn_js_1.default(market.amm.baseSpread)
|
50
|
+
.mul(oraclePriceData.price)
|
51
|
+
.div(constants_1.BID_ASK_SPREAD_PRECISION)));
|
52
|
+
let marginPrice;
|
53
|
+
if (perpPosition.baseAssetAmount.gt(constants_1.ZERO)) {
|
54
|
+
marginPrice = oraclePriceData.price.sub(oraclePriceOffset);
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
marginPrice = oraclePriceData.price.add(oraclePriceOffset);
|
58
|
+
}
|
59
|
+
return marginPrice;
|
60
|
+
}
|
61
|
+
exports.calculateOraclePriceForPerpMargin = calculateOraclePriceForPerpMargin;
|
62
|
+
function calculateBaseAssetValueWithOracle(market, perpPosition, oraclePriceData, includeOpenOrders = false) {
|
63
|
+
let { price } = oraclePriceData;
|
64
|
+
if (market.status === struct_1.MarketStatus.Settlement) {
|
65
|
+
price = new bn_js_1.default(market.expiryPrice.toString(10), 10);
|
66
|
+
}
|
67
|
+
const baseAssetAmount = includeOpenOrders
|
68
|
+
? calculateWorstCaseBaseAssetAmount(perpPosition)
|
69
|
+
: perpPosition.baseAssetAmount;
|
70
|
+
return baseAssetAmount.abs().mul(price).div(constants_1.AMM_RESERVE_PRECISION);
|
71
|
+
}
|
72
|
+
exports.calculateBaseAssetValueWithOracle = calculateBaseAssetValueWithOracle;
|
73
|
+
function calculateWorstCaseBaseAssetAmount(perpPosition) {
|
74
|
+
const allBids = perpPosition.baseAssetAmount.add(perpPosition.openBids);
|
75
|
+
const allAsks = perpPosition.baseAssetAmount.add(perpPosition.openAsks);
|
76
|
+
if (allBids.abs().gt(allAsks.abs())) {
|
77
|
+
return allBids;
|
78
|
+
}
|
79
|
+
return allAsks;
|
80
|
+
}
|
81
|
+
exports.calculateWorstCaseBaseAssetAmount = calculateWorstCaseBaseAssetAmount;
|
82
|
+
//# sourceMappingURL=margin.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"margin.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/margin.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuB;AACvB,sCAAmE;AAEnE,2CAMqB;AACrB,iCAAsC;AACtC,qCAAkC;AAElC,SAAgB,mCAAmC,CACjD,IAAQ,EAAE,wBAAwB;AAClC,SAAa,EACb,eAAmB,EACnB,SAAa;IAEb,IAAI,SAAS,CAAC,EAAE,CAAC,gBAAI,CAAC,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,mBAAY,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAE/F,MAAM,wBAAwB,GAAG,eAAe,CAAC,GAAG,CAClD,eAAe,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,eAAE,CAAC,MAAO,CAAC,CAAC,GAAG,CAAC,qCAAyB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5E,IAAA,eAAM,EAAC,KAAK,CAAC,EAAE,CAAC,gBAAI,CAAC,CAAC,CAAC;IAEvB,MAAM,0BAA0B,GAAG,wBAAwB,CAAC,GAAG,CAC7D,QAAQ,CAAC,MAAM;SACZ,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM;KACrB,CAAC;IAEF,MAAM,kBAAkB,GAAG,eAAE,CAAC,GAAG,CAC/B,eAAe,EACf,0BAA0B,CAC3B,CAAC;IACF,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AA9BD,kFA8BC;AAED,SAAgB,gCAAgC,CAC9C,IAAQ,EAAE,wBAAwB;AAClC,SAAa,EACb,WAAe;IAEf,IAAI,SAAS,CAAC,EAAE,CAAC,gBAAI,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,mBAAY,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAC/F,MAAM,YAAY,GAAG,qCAAyB,CAAC,GAAG,CAChD,qCAAyB,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,EAAE,CAAC,CAAC,CAC1C,CAAC;IAEF,MAAM,uBAAuB,GAAG,YAAY;SACzC,GAAG,CAAC,wCAA4B,CAAC;SACjC,GAAG,CACF,qCAAyB,CAAC,GAAG,CAC3B,QAAQ,CAAC,MAAM;SACZ,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,IAAI,eAAE,CAAC,MAAO,CAAC,CAAC,CAAC,MAAM;KAC/B,CACF,CAAC;IAEJ,MAAM,cAAc,GAAG,eAAE,CAAC,GAAG,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAEpE,OAAO,cAAc,CAAC;AACxB,CAAC;AA3BD,4EA2BC;AAED,SAAgB,iCAAiC,CAC/C,YAA0B,EAC1B,MAAkB,EAClB,eAAgC;IAEhC,MAAM,iBAAiB,GAAG,eAAE,CAAC,GAAG,CAC9B,IAAI,eAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;SACzB,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;SAC1B,GAAG,CAAC,oCAAwB,CAAC,EAChC,eAAe,CAAC,UAAU,CAAC,GAAG,CAC5B,IAAI,eAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1B,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;SAC1B,GAAG,CAAC,oCAAwB,CAAC,CACjC,CACF,CAAC;IAEF,IAAI,WAAe,CAAC;IACpB,IAAI,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAI,CAAC,EAAE,CAAC;QAC1C,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAxBD,8EAwBC;AAED,SAAgB,iCAAiC,CAC/C,MAAkB,EAClB,YAA0B,EAC1B,eAAgC,EAChC,iBAAiB,GAAG,KAAK;IAEzB,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,qBAAY,CAAC,UAAU,EAAE,CAAC;QAC9C,KAAK,GAAG,IAAI,eAAE,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,eAAe,GAAG,iBAAiB;QACvC,CAAC,CAAC,iCAAiC,CAAC,YAAY,CAAC;QACjD,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC;IAEjC,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC,CAAC;AACrE,CAAC;AAhBD,8EAgBC;AAED,SAAgB,iCAAiC,CAC/C,YAA0B;IAE1B,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAExE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAVD,8EAUC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.sigNum = exports.squareRootBN = exports.clampBN = void 0;
|
7
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
8
|
+
function clampBN(x, min, max) {
|
9
|
+
return bn_js_1.default.max(min, bn_js_1.default.min(x, max));
|
10
|
+
}
|
11
|
+
exports.clampBN = clampBN;
|
12
|
+
const squareRootBN = (n) => {
|
13
|
+
if (n.lt(new bn_js_1.default(0))) {
|
14
|
+
throw new Error('Sqrt only works on non-negtiave inputs');
|
15
|
+
}
|
16
|
+
if (n.lt(new bn_js_1.default(2))) {
|
17
|
+
return n;
|
18
|
+
}
|
19
|
+
const smallCand = (0, exports.squareRootBN)(n.shrn(2)).shln(1);
|
20
|
+
const largeCand = smallCand.add(new bn_js_1.default(1));
|
21
|
+
if (largeCand.mul(largeCand).gt(n)) {
|
22
|
+
return smallCand;
|
23
|
+
}
|
24
|
+
return largeCand;
|
25
|
+
};
|
26
|
+
exports.squareRootBN = squareRootBN;
|
27
|
+
const sigNum = (x) => (x.isNeg() ? new bn_js_1.default(-1) : new bn_js_1.default(1));
|
28
|
+
exports.sigNum = sigNum;
|
29
|
+
//# sourceMappingURL=math.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/math.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuB;AAEvB,SAAgB,OAAO,CAAC,CAAK,EAAE,GAAO,EAAE,GAAO;IAC7C,OAAO,eAAE,CAAC,GAAG,CAAC,GAAG,EAAE,eAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAFD,0BAEC;AAEM,MAAM,YAAY,GAAG,CAAC,CAAK,EAAM,EAAE;IACxC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEK,MAAM,MAAM,GAAG,CAAC,CAAK,EAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAA7D,QAAA,MAAM,UAAuD"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import BN from 'bn.js';
|
2
|
+
import { AMM, HistoricalOracleData } from '../struct';
|
3
|
+
import { OraclePriceData } from './types';
|
4
|
+
export declare function calculateLiveOracleTwap(histOracleData: HistoricalOracleData, oraclePriceData: OraclePriceData, now: BN, period: BN): BN;
|
5
|
+
export declare function calculateLiveOracleStd(amm: AMM, oraclePriceData: OraclePriceData, now: BN): BN;
|
6
|
+
export declare function getNewOracleConfPct(amm: AMM, oraclePriceData: OraclePriceData, reservePrice: BN, now: BN): BN;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.getNewOracleConfPct = exports.calculateLiveOracleStd = exports.calculateLiveOracleTwap = void 0;
|
7
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
8
|
+
const constants_1 = require("./constants");
|
9
|
+
function calculateLiveOracleTwap(histOracleData, oraclePriceData, now, period) {
|
10
|
+
let oracleTwap;
|
11
|
+
if (period.eq(constants_1.FIVE_MINUTE)) {
|
12
|
+
oracleTwap = new bn_js_1.default(histOracleData.lastOraclePriceTwap5Min.toString(10), 10);
|
13
|
+
}
|
14
|
+
else {
|
15
|
+
// todo: assumes its fundingPeriod (1hr)
|
16
|
+
// period = amm.fundingPeriod;
|
17
|
+
oracleTwap = new bn_js_1.default(histOracleData.lastOraclePriceTwap.toString(10), 10);
|
18
|
+
}
|
19
|
+
const sinceLastUpdate = bn_js_1.default.max(constants_1.ONE, now.sub(new bn_js_1.default(histOracleData.lastOraclePriceTwapTs.toString(10), 10)));
|
20
|
+
const sinceStart = bn_js_1.default.max(constants_1.ZERO, period.sub(sinceLastUpdate));
|
21
|
+
const clampRange = oracleTwap.div(new bn_js_1.default(3));
|
22
|
+
const clampedOraclePrice = bn_js_1.default.min(oracleTwap.add(clampRange), bn_js_1.default.max(oraclePriceData.price, oracleTwap.sub(clampRange)));
|
23
|
+
const newOracleTwap = oracleTwap
|
24
|
+
.mul(sinceStart)
|
25
|
+
.add(clampedOraclePrice.mul(sinceLastUpdate))
|
26
|
+
.div(sinceStart.add(sinceLastUpdate));
|
27
|
+
return newOracleTwap;
|
28
|
+
}
|
29
|
+
exports.calculateLiveOracleTwap = calculateLiveOracleTwap;
|
30
|
+
function calculateLiveOracleStd(amm, oraclePriceData, now) {
|
31
|
+
const sinceLastUpdate = bn_js_1.default.max(constants_1.ONE, now.sub(new bn_js_1.default(amm.historicalOracleData.lastOraclePriceTwapTs.toString(10), 10)));
|
32
|
+
const sinceStart = bn_js_1.default.max(constants_1.ZERO, amm.fundingPeriod.sub(sinceLastUpdate));
|
33
|
+
const liveOracleTwap = calculateLiveOracleTwap(amm.historicalOracleData, oraclePriceData, now, amm.fundingPeriod);
|
34
|
+
const priceDeltaVsTwap = oraclePriceData.price.sub(liveOracleTwap).abs();
|
35
|
+
const oracleStd = priceDeltaVsTwap.add(amm.oracleStd.mul(sinceStart).div(sinceStart.add(sinceLastUpdate)));
|
36
|
+
return oracleStd;
|
37
|
+
}
|
38
|
+
exports.calculateLiveOracleStd = calculateLiveOracleStd;
|
39
|
+
function getNewOracleConfPct(amm, oraclePriceData, reservePrice, now) {
|
40
|
+
const confInterval = oraclePriceData.confidence || constants_1.ZERO;
|
41
|
+
const sinceLastUpdate = bn_js_1.default.max(constants_1.ZERO, now.sub(new bn_js_1.default(amm.historicalOracleData.lastOraclePriceTwapTs.toString(10), 10)));
|
42
|
+
let lowerBoundConfPct = amm.lastOracleConfPct;
|
43
|
+
if (sinceLastUpdate.gt(constants_1.ZERO)) {
|
44
|
+
const lowerBoundConfDivisor = bn_js_1.default.max(new bn_js_1.default(21).sub(sinceLastUpdate), new bn_js_1.default(5));
|
45
|
+
lowerBoundConfPct = amm.lastOracleConfPct.sub(amm.lastOracleConfPct.div(lowerBoundConfDivisor));
|
46
|
+
}
|
47
|
+
const confIntervalPct = confInterval
|
48
|
+
.mul(constants_1.BID_ASK_SPREAD_PRECISION)
|
49
|
+
.div(reservePrice);
|
50
|
+
const confIntervalPctResult = bn_js_1.default.max(confIntervalPct, lowerBoundConfPct);
|
51
|
+
return confIntervalPctResult;
|
52
|
+
}
|
53
|
+
exports.getNewOracleConfPct = getNewOracleConfPct;
|
54
|
+
//# sourceMappingURL=oracle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/oracle.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.standardizeBaseAssetAmount = void 0;
|
4
|
+
function standardizeBaseAssetAmount(baseAssetAmount, stepSize) {
|
5
|
+
const remainder = baseAssetAmount.mod(stepSize);
|
6
|
+
return baseAssetAmount.sub(remainder);
|
7
|
+
}
|
8
|
+
exports.standardizeBaseAssetAmount = standardizeBaseAssetAmount;
|
9
|
+
//# sourceMappingURL=orders.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/orders.ts"],"names":[],"mappings":";;;AAEA,SAAgB,0BAA0B,CACxC,eAAmB,EACnB,QAAY;IAEZ,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAND,gEAMC"}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import BN from 'bn.js';
|
2
|
+
import { PerpMarket, PerpPosition } from '../struct';
|
3
|
+
import { OraclePriceData, PositionDirection } from './types';
|
4
|
+
export declare function calculateBaseAssetValue(market: PerpMarket, userPosition: PerpPosition, oraclePriceData: OraclePriceData, useSpread?: boolean, skipUpdate?: boolean): BN;
|
5
|
+
/**
|
6
|
+
* calculatePositionPNL
|
7
|
+
* = BaseAssetAmount * (Avg Exit Price - Avg Entry Price)
|
8
|
+
* @param market
|
9
|
+
* @param PerpPosition
|
10
|
+
* @param withFunding (adds unrealized funding payment pnl to result)
|
11
|
+
* @param oraclePriceData
|
12
|
+
* @returns BaseAssetAmount : Precision QUOTE_PRECISION
|
13
|
+
*/
|
14
|
+
export declare function calculatePositionPNL(market: PerpMarket, perpPosition: PerpPosition, oraclePriceData: OraclePriceData, withFunding?: boolean): BN;
|
15
|
+
/**
|
16
|
+
*
|
17
|
+
* @param market
|
18
|
+
* @param PerpPosition
|
19
|
+
* @returns // QUOTE_PRECISION
|
20
|
+
*/
|
21
|
+
export declare function calculatePositionFundingPNL(market: PerpMarket, perpPosition: PerpPosition): BN;
|
22
|
+
export declare function positionIsAvailable(position: PerpPosition): boolean;
|
23
|
+
/**
|
24
|
+
*
|
25
|
+
* @param userPosition
|
26
|
+
* @returns Precision: PRICE_PRECISION (10^6)
|
27
|
+
*/
|
28
|
+
export declare function calculateBreakEvenPrice(userPosition: PerpPosition): BN;
|
29
|
+
/**
|
30
|
+
*
|
31
|
+
* @param userPosition
|
32
|
+
* @returns Precision: PRICE_PRECISION (10^6)
|
33
|
+
*/
|
34
|
+
export declare function calculateEntryPrice(userPosition: PerpPosition): BN;
|
35
|
+
/**
|
36
|
+
*
|
37
|
+
* @param userPosition
|
38
|
+
* @returns Precision: PRICE_PRECISION (10^10)
|
39
|
+
*/
|
40
|
+
export declare function calculateCostBasis(userPosition: PerpPosition, includeSettledPnl?: boolean): BN;
|
41
|
+
export declare function findDirectionToClose(userPosition: PerpPosition): PositionDirection;
|
42
|
+
export declare function positionCurrentDirection(userPosition: PerpPosition): PositionDirection;
|
43
|
+
export declare function isEmptyPosition(userPosition: PerpPosition): boolean;
|
44
|
+
export declare function hasOpenOrders(position: PerpPosition): boolean;
|