@reyaxyz/common 0.83.0 → 0.85.0
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/README.md +1 -1
- package/dist/commands/exposure/command.js +99 -2
- package/dist/commands/exposure/command.js.map +1 -1
- package/dist/commands/exposure/types.js.map +1 -1
- package/dist/types/commands/exposure/command.d.ts +5 -2
- package/dist/types/commands/exposure/command.d.ts.map +1 -1
- package/dist/types/commands/exposure/types.d.ts +5 -1
- package/dist/types/commands/exposure/types.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/exposure/command.ts +167 -4
- package/src/commands/exposure/types.ts +6 -1
- package/src/types.ts +1 -0
package/README.md
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
|
|
7
7
|
| Statements | Branches | Functions | Lines |
|
|
8
8
|
| --------------------------- | ----------------------- | ------------------------- | ----------------- |
|
|
9
|
-
|  |  |  |  |
|
|
10
10
|
|
|
@@ -125,6 +125,84 @@ var ExposureCommand = /** @class */ (function () {
|
|
|
125
125
|
tokenMarginInfoPerAsset: tokenMarginInfoPerAsset,
|
|
126
126
|
};
|
|
127
127
|
};
|
|
128
|
+
ExposureCommand.prototype.getEditCollateralActionsToCoverMargin = function (requiredMargin) {
|
|
129
|
+
/*
|
|
130
|
+
* Note, this function is implicitely making an assumption that required margin can be covered by
|
|
131
|
+
* the account without breaching account IMR
|
|
132
|
+
* */
|
|
133
|
+
var editCollateralActions = [];
|
|
134
|
+
var marginToCover = requiredMargin;
|
|
135
|
+
var uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);
|
|
136
|
+
var tokenMarginInfoPerAsset = ExposureCommand.calculateTokenMarginInfoPerAsset(this.groupedByCollateral, this.rootCollateralPoolId, this.riskMatrices, this.riskMultipliers, uniqueQuoteCollaterals, this.realizedPnLSum, this.unrealizedPnLSum, this.positionInfoMarketConfiguration, this.oraclePricePerMarket);
|
|
137
|
+
var _loop_1 = function (tokenInfo) {
|
|
138
|
+
if (tokenInfo.marginBalance < 0) {
|
|
139
|
+
return "continue";
|
|
140
|
+
}
|
|
141
|
+
// todo: p1: haircut and exchange rate adjustment should not be done for rUSD
|
|
142
|
+
// does exchangeInfo currently return haircut as zero and price as 1?
|
|
143
|
+
// todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl
|
|
144
|
+
var exchangeInfo = this_1.exchangeInfoPerAsset.find(function (exchangeInfo) {
|
|
145
|
+
return tokenInfo.assetAddress === exchangeInfo.tokenAddress;
|
|
146
|
+
});
|
|
147
|
+
if (!exchangeInfo) {
|
|
148
|
+
throw new Error('Unable to retrieve exchange info when calculating collaterals needed to cover margin');
|
|
149
|
+
}
|
|
150
|
+
var marginBalanceWithHaircutInRUSD = ExposureCommand.exchangeWithPriceHaircut(tokenInfo.marginBalance, exchangeInfo.price, exchangeInfo.priceHaircut);
|
|
151
|
+
if (marginBalanceWithHaircutInRUSD > marginToCover) {
|
|
152
|
+
var collateralDelta = -ExposureCommand.reverseExchangeWithPriceHaircut(marginToCover, exchangeInfo.price, exchangeInfo.priceHaircut);
|
|
153
|
+
editCollateralActions.push({
|
|
154
|
+
collateralAddress: tokenInfo.assetAddress,
|
|
155
|
+
collateralDelta: collateralDelta,
|
|
156
|
+
});
|
|
157
|
+
return "break";
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
editCollateralActions.push({
|
|
161
|
+
collateralAddress: tokenInfo.assetAddress,
|
|
162
|
+
collateralDelta: -tokenInfo.marginBalance,
|
|
163
|
+
});
|
|
164
|
+
marginToCover = marginToCover - marginBalanceWithHaircutInRUSD;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var this_1 = this;
|
|
168
|
+
// todo: p2: consider prioritising rUSD when looping through token infos & document math in comments
|
|
169
|
+
for (var _i = 0, tokenMarginInfoPerAsset_1 = tokenMarginInfoPerAsset; _i < tokenMarginInfoPerAsset_1.length; _i++) {
|
|
170
|
+
var tokenInfo = tokenMarginInfoPerAsset_1[_i];
|
|
171
|
+
var state_1 = _loop_1(tokenInfo);
|
|
172
|
+
if (state_1 === "break")
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
return editCollateralActions;
|
|
176
|
+
};
|
|
177
|
+
ExposureCommand.prototype.getUsdNodeMarginInfoPostEditCollaterals = function (editCollateralActions) {
|
|
178
|
+
// todo: check if there's a way to simplify this function & deprecate the single edit collateral sim below as it's a
|
|
179
|
+
// subset of this function
|
|
180
|
+
// perform deep copy of the object
|
|
181
|
+
var groupedByCollateral = (0, lodash_clonedeep_1.default)(this.groupedByCollateral);
|
|
182
|
+
var uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);
|
|
183
|
+
var uniqueTokenAddresses = __spreadArray([], this.uniqueTokenAddresses, true);
|
|
184
|
+
// counterfactual update deep copy
|
|
185
|
+
for (var _i = 0, editCollateralActions_1 = editCollateralActions; _i < editCollateralActions_1.length; _i++) {
|
|
186
|
+
var action = editCollateralActions_1[_i];
|
|
187
|
+
if (groupedByCollateral[action.collateralAddress]) {
|
|
188
|
+
groupedByCollateral[action.collateralAddress] = __assign(__assign({}, groupedByCollateral[action.collateralAddress]), { amount: groupedByCollateral[action.collateralAddress].amount +
|
|
189
|
+
action.collateralDelta });
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
groupedByCollateral[action.collateralAddress] = {
|
|
193
|
+
accountId: this.accountId,
|
|
194
|
+
collateral: action.collateralAddress,
|
|
195
|
+
amount: action.collateralDelta,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
uniqueQuoteCollaterals.add(action.collateralAddress);
|
|
199
|
+
if (!this.uniqueTokenAddresses.includes(action.collateralAddress)) {
|
|
200
|
+
uniqueTokenAddresses.push(action.collateralAddress);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
var tokenMarginInfoPerAsset = ExposureCommand.calculateTokenMarginInfoPerAsset(groupedByCollateral, this.rootCollateralPoolId, this.riskMatrices, this.riskMultipliers, uniqueQuoteCollaterals, this.realizedPnLSum, this.unrealizedPnLSum, this.positionInfoMarketConfiguration, this.oraclePricePerMarket);
|
|
204
|
+
return ExposureCommand.getUsdNodeMarginInfo(this.rootCollateralPoolId, uniqueTokenAddresses, this.exchangeInfoPerAsset, tokenMarginInfoPerAsset);
|
|
205
|
+
};
|
|
128
206
|
ExposureCommand.prototype.getUsdNodeMarginInfoPostEditCollateral = function (collateralDelta, collateralAddress) {
|
|
129
207
|
// perform deep copy of the object
|
|
130
208
|
var groupedByCollateral = (0, lodash_clonedeep_1.default)(this.groupedByCollateral);
|
|
@@ -151,7 +229,10 @@ var ExposureCommand = /** @class */ (function () {
|
|
|
151
229
|
ExposureCommand.calculateTokenMarginInfoPerAsset = function (groupedByCollateral, rootCollateralPoolId, riskMatrices, riskMultipliers, uniqueQuoteCollaterals, realizedPnLSum, unrealizedPnLSum, positionInfoMarketConfiguration, oraclePricePerMarket) {
|
|
152
230
|
var _a;
|
|
153
231
|
var tokenMarginInfoPerAsset = [];
|
|
232
|
+
// todo: p2: investigate the ts-expect-error cases below
|
|
233
|
+
// @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type
|
|
154
234
|
var uniqueQuoteTokens = Array.from(uniqueQuoteCollaterals);
|
|
235
|
+
// @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type
|
|
155
236
|
var tokenUnion = new Set(__spreadArray(__spreadArray([], Object.keys(groupedByCollateral), true), uniqueQuoteTokens, true)); // get unique union of those arrays
|
|
156
237
|
var uniqueTokenAddresses = Array.from(tokenUnion);
|
|
157
238
|
for (var _i = 0, uniqueTokenAddresses_1 = uniqueTokenAddresses; _i < uniqueTokenAddresses_1.length; _i++) {
|
|
@@ -218,7 +299,7 @@ var ExposureCommand = /** @class */ (function () {
|
|
|
218
299
|
initialBufferDelta: 0,
|
|
219
300
|
liquidationMarginRequirement: 0,
|
|
220
301
|
};
|
|
221
|
-
var
|
|
302
|
+
var _loop_2 = function (quoteToken) {
|
|
222
303
|
var exchangeInfo = exchangeInfoPerAsset.find(function (exchangeInfo) {
|
|
223
304
|
return quoteToken === exchangeInfo.tokenAddress;
|
|
224
305
|
});
|
|
@@ -232,7 +313,7 @@ var ExposureCommand = /** @class */ (function () {
|
|
|
232
313
|
};
|
|
233
314
|
for (var _i = 0, quoteTokens_1 = quoteTokens; _i < quoteTokens_1.length; _i++) {
|
|
234
315
|
var quoteToken = quoteTokens_1[_i];
|
|
235
|
-
|
|
316
|
+
_loop_2(quoteToken);
|
|
236
317
|
}
|
|
237
318
|
return usdNodeMarginInfo;
|
|
238
319
|
};
|
|
@@ -386,6 +467,22 @@ var ExposureCommand = /** @class */ (function () {
|
|
|
386
467
|
var haircutPrice = (0, bignumber_js_1.default)(price).multipliedBy(calHelper);
|
|
387
468
|
return haircutPrice.multipliedBy(quantity).toNumber();
|
|
388
469
|
};
|
|
470
|
+
ExposureCommand.reverseExchangeWithPriceHaircut = function (quantity, price, haircut) {
|
|
471
|
+
/*
|
|
472
|
+
* this operation takes quantity in rUSD terms, price between collateral token (e.g. weth) and rusd
|
|
473
|
+
* alongside the haircut between weth and rusd
|
|
474
|
+
* it then returns a quantity in collateral token terms (e.g. weth) which would return quantity if it were to be
|
|
475
|
+
* passed through the exchangeWithPriceHaircut function
|
|
476
|
+
* */
|
|
477
|
+
// todo: p2: consider abstracting haircut price calculation into separate function as duplciated
|
|
478
|
+
// For positive quantities, the haircut is `quantity * (1 - haircut)`
|
|
479
|
+
// For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.
|
|
480
|
+
var calHelper = (0, bignumber_js_1.default)(quantity).gt(0)
|
|
481
|
+
? (0, bignumber_js_1.default)(1).minus(haircut)
|
|
482
|
+
: (0, bignumber_js_1.default)(1).div((0, bignumber_js_1.default)(1).minus(haircut));
|
|
483
|
+
var haircutPrice = (0, bignumber_js_1.default)(price).multipliedBy(calHelper);
|
|
484
|
+
return (0, bignumber_js_1.default)(quantity).dividedBy(haircutPrice).toNumber();
|
|
485
|
+
};
|
|
389
486
|
ExposureCommand.prototype.getSlippage = function (deltaBase, marketConfiguration, marketStorage) {
|
|
390
487
|
var deltaExposure = (0, bignumber_js_1.default)(this.oraclePricePerMarket[marketConfiguration.market_id])
|
|
391
488
|
.times(deltaBase)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\nimport cloneDeep from 'lodash.clonedeep';\nimport {\n AccountAssetBalance,\n CollateralAddressToExchangePriceMap,\n CollateralInfo,\n ExchangeInfo,\n ExposureCommandState,\n MarginInfo,\n MarketConfiguration,\n MarketIdToOraclePriceMap,\n MarketStorage,\n PositionInfo,\n PositionInfoMarketConfiguration,\n RiskMatrix,\n RiskMultipliersConfiguration,\n} from './types';\nimport { amountNormalizer } from '../../utils';\n\nexport class ExposureCommand {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n constructor(\n accountId: number,\n rootCollateralPoolId: number,\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n accountBalancePerAsset: AccountAssetBalance[],\n groupedByCollateral: Record<string, AccountAssetBalance>,\n riskMultipliers: RiskMultipliersConfiguration,\n riskMatrices: RiskMatrix[],\n exchangeInfoPerAsset: ExchangeInfo[],\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n uniqueTokenAddresses: string[],\n uniqueQuoteCollaterals: string[],\n tokenMarginInfoPerAsset: MarginInfo[],\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap,\n ) {\n this.accountId = accountId;\n this.rootCollateralPoolId = rootCollateralPoolId;\n this.oraclePricePerMarket = oraclePricePerMarket;\n this.accountBalancePerAsset = accountBalancePerAsset;\n this.groupedByCollateral = groupedByCollateral;\n this.riskMultipliers = riskMultipliers;\n this.riskMatrices = riskMatrices;\n this.exchangeInfoPerAsset = exchangeInfoPerAsset;\n this.positionInfoMarketConfiguration = positionInfoMarketConfiguration;\n this.uniqueTokenAddresses = uniqueTokenAddresses;\n this.uniqueQuoteCollaterals = uniqueQuoteCollaterals;\n this.tokenMarginInfoPerAsset = tokenMarginInfoPerAsset;\n this.realizedPnLSum = realizedPnLSum;\n this.unrealizedPnLSum = unrealizedPnLSum;\n this.collateralAddressToExchangePrice = collateralAddressToExchangePrice;\n }\n\n getState(): ExposureCommandState {\n return {\n accountId: this.accountId,\n rootCollateralPoolId: this.rootCollateralPoolId,\n oraclePricePerMarket: this.oraclePricePerMarket,\n accountBalancePerAsset: this.accountBalancePerAsset,\n groupedByCollateral: this.groupedByCollateral,\n riskMultipliers: this.riskMultipliers,\n riskMatrices: this.riskMatrices,\n exchangeInfoPerAsset: this.exchangeInfoPerAsset,\n positionInfoMarketConfiguration: this.positionInfoMarketConfiguration,\n uniqueTokenAddresses: this.uniqueTokenAddresses,\n uniqueQuoteCollaterals: this.uniqueQuoteCollaterals,\n tokenMarginInfoPerAsset: this.tokenMarginInfoPerAsset,\n realizedPnLSum: this.realizedPnLSum,\n unrealizedPnLSum: this.unrealizedPnLSum,\n collateralAddressToExchangePrice: this.collateralAddressToExchangePrice,\n };\n }\n\n get getUsdNodeMarginInfo() {\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n this.uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n this.tokenMarginInfoPerAsset,\n );\n }\n\n get balancePerAsset() {\n return this.tokenMarginInfoPerAsset;\n }\n get exchangePricePerAsset() {\n return this.exchangeInfoPerAsset;\n }\n\n getUsdNodeMarginInfoPostTrade(\n positionAmount: number,\n collateralAddress: string,\n marketConfiguration: MarketConfiguration,\n riskBlockId: number,\n ) {\n // perform deep copy of the object\n const positionInfoMarketConfiguration: PositionInfoMarketConfiguration[] =\n cloneDeep(this.positionInfoMarketConfiguration);\n\n // Check if the market_id already exists in the array\n const existingConfigIndex = positionInfoMarketConfiguration.findIndex(\n (config) =>\n config.market_id ===\n BigNumber(String(marketConfiguration.market_id)).toNumber(),\n );\n\n if (existingConfigIndex !== -1) {\n // If it exists, update the amount\n positionInfoMarketConfiguration[existingConfigIndex].base = BigNumber(\n positionInfoMarketConfiguration[existingConfigIndex].base,\n ).plus(positionAmount);\n } else {\n // If it doesn't exist, add a new element\n positionInfoMarketConfiguration.push({\n base: BigNumber(positionAmount),\n realized_pnl: BigNumber(0),\n last_price: BigNumber(0),\n average_entry_price: BigNumber(0),\n last_timestamp: BigNumber(0),\n funding_value: BigNumber(0),\n base_multiplier: BigNumber(0),\n adl_unwind_price: BigNumber(0),\n market_id: BigNumber(String(marketConfiguration.market_id)).toNumber(),\n market_configuration: marketConfiguration,\n risk_block_id: riskBlockId,\n });\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return {\n usdNodeMarginInfo: ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n ),\n tokenMarginInfoPerAsset: tokenMarginInfoPerAsset,\n };\n }\n\n getUsdNodeMarginInfoPostEditCollateral(\n collateralDelta: number,\n collateralAddress: string,\n ) {\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n // counterfactual update deep copy\n if (groupedByCollateral[collateralAddress]) {\n groupedByCollateral[collateralAddress] = {\n ...groupedByCollateral[collateralAddress],\n amount: groupedByCollateral[collateralAddress].amount + collateralDelta,\n };\n } else {\n groupedByCollateral[collateralAddress] = {\n accountId: this.accountId,\n collateral: collateralAddress,\n amount: collateralDelta,\n };\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n static calculateTokenMarginInfoPerAsset(\n groupedByCollateral: Record<string, AccountAssetBalance>,\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n uniqueQuoteCollaterals: Set<string>,\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n ): MarginInfo[] {\n const tokenMarginInfoPerAsset: MarginInfo[] = [];\n\n const uniqueQuoteTokens: string[] = Array.from(uniqueQuoteCollaterals);\n\n const tokenUnion = new Set([\n ...Object.keys(groupedByCollateral),\n ...uniqueQuoteTokens,\n ]); // get unique union of those arrays\n const uniqueTokenAddresses: string[] = Array.from(tokenUnion);\n\n for (const token of uniqueTokenAddresses) {\n tokenMarginInfoPerAsset.push(\n ExposureCommand.getTokenMarginInfo(\n rootCollateralPoolId,\n riskMatrices,\n riskMultipliers,\n ExposureCommand.getCollateralInfo(\n token,\n uniqueQuoteCollaterals.has(token) ? realizedPnLSum : BigNumber(0),\n uniqueQuoteCollaterals.has(token) ? unrealizedPnLSum : BigNumber(0),\n groupedByCollateral[token]?.amount || 0,\n ),\n token,\n positionInfoMarketConfiguration,\n oraclePricePerMarket,\n uniqueQuoteTokens,\n ),\n );\n }\n\n return tokenMarginInfoPerAsset;\n }\n static calculateLiquidation(\n marginBalance: number,\n liquidationMarginRequirement: number,\n oraclePrice: number,\n positionBase: number,\n ): BigNumber {\n const liquidationPrice = BigNumber(oraclePrice).minus(\n BigNumber(marginBalance)\n .minus(liquidationMarginRequirement)\n .div(positionBase),\n );\n\n return BigNumber.max(0, liquidationPrice);\n }\n\n static calculateImpliedLeverage(\n notionalExposure: number,\n oldIMR: number,\n newIMR: number,\n ): number {\n const changeInImr = BigNumber(newIMR).minus(oldIMR);\n\n if (changeInImr.eq(0)) {\n return 0;\n }\n return BigNumber(notionalExposure).div(changeInImr).toNumber();\n }\n\n static combineMarginInfo(\n parentMarginInfo: MarginInfo,\n sonMarginInfo: MarginInfo,\n sonParentExchangeInfo: ExchangeInfo,\n ): MarginInfo {\n return {\n assetAddress: parentMarginInfo.assetAddress,\n marginBalance: BigNumber(parentMarginInfo.marginBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.marginBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n realBalance: BigNumber(parentMarginInfo.realBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.realBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n initialDelta: BigNumber(parentMarginInfo.initialDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.realBalance,\n sonMarginInfo.initialDelta,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n maintenanceDelta: BigNumber(parentMarginInfo.maintenanceDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.maintenanceDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationDelta: BigNumber(parentMarginInfo.liquidationDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.liquidationDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n dutchDelta: BigNumber(parentMarginInfo.dutchDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.dutchDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n adlDelta: BigNumber(parentMarginInfo.adlDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.adlDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n\n initialBufferDelta: BigNumber(parentMarginInfo.initialBufferDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.initialBufferDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationMarginRequirement: BigNumber(\n parentMarginInfo.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.liquidationMarginRequirement,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n };\n }\n\n static getUsdNodeMarginInfo(\n accountCollateralPoolId: number,\n quoteTokens: string[],\n exchangeInfoPerAsset: ExchangeInfo[],\n marginInfoPerToken: MarginInfo[],\n ) {\n let usdNodeMarginInfo: MarginInfo = {\n assetAddress: '',\n marginBalance: 0,\n realBalance: 0,\n initialDelta: 0,\n maintenanceDelta: 0,\n liquidationDelta: 0,\n dutchDelta: 0,\n adlDelta: 0,\n initialBufferDelta: 0,\n liquidationMarginRequirement: 0,\n };\n for (const quoteToken of quoteTokens) {\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return quoteToken === exchangeInfo.tokenAddress;\n });\n\n const marginInfo = marginInfoPerToken.find((marginInfo) => {\n return quoteToken === marginInfo.assetAddress;\n });\n\n if (!exchangeInfo || !marginInfo) {\n throw Error('Missing exchangeInfo/marginInfo');\n }\n\n usdNodeMarginInfo = ExposureCommand.combineMarginInfo(\n usdNodeMarginInfo,\n marginInfo,\n exchangeInfo,\n );\n }\n\n return usdNodeMarginInfo;\n }\n static getCollateralInfo(\n collateralAddress: string,\n realisedPnl: BigNumber,\n unrealizedPnL: BigNumber,\n netDeposits: number,\n ): CollateralInfo {\n return {\n netDeposits: netDeposits,\n marginBalance: BigNumber(netDeposits)\n .plus(realisedPnl)\n .plus(unrealizedPnL)\n .toNumber(),\n realBalance: BigNumber(netDeposits).plus(realisedPnl).toNumber(),\n };\n }\n\n static getTokenMarginInfo(\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n collateralInfo: CollateralInfo,\n collateralAddress: string,\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n uniqueQuoteTokens: string[],\n ): MarginInfo {\n const marginRequirements = {\n liquidationMarginRequirement: 0,\n initialMarginRequirement: 0,\n maintenanceMarginRequirement: 0,\n dutchMarginRequirement: 0,\n adlMarginRequirement: 0,\n initialBufferMarginRequirement: 0,\n };\n if (uniqueQuoteTokens.includes(collateralAddress)) {\n // uniqueQuoteTokens is list is active markets tokens\n for (const riskMatrix of riskMatrices) {\n const filledExposures = ExposureCommand.getBlockExposures(\n positions,\n oraclePricePerMarket,\n riskMatrix.risk_block_id,\n );\n\n marginRequirements.liquidationMarginRequirement = BigNumber(\n marginRequirements.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.computeLiquidationMarginRequirement(\n riskMatrix.matrix,\n filledExposures,\n ),\n )\n .toNumber();\n }\n\n // Get the initial margin requirement\n marginRequirements.initialMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the maintenance margin requirement\n marginRequirements.maintenanceMarginRequirement = amountNormalizer(\n String(riskMultipliers.mmr_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the dutch margin requirement\n marginRequirements.dutchMarginRequirement = amountNormalizer(\n String(riskMultipliers.dutch_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the adl margin requirement\n marginRequirements.adlMarginRequirement = amountNormalizer(\n String(riskMultipliers.adl_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the initial buffer margin requirement\n marginRequirements.initialBufferMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_buffer_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n }\n return {\n assetAddress: collateralAddress,\n marginBalance: collateralInfo.marginBalance,\n realBalance: collateralInfo.realBalance,\n initialDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialMarginRequirement)\n .toNumber(),\n maintenanceDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.maintenanceMarginRequirement)\n .toNumber(),\n liquidationDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.liquidationMarginRequirement)\n .toNumber(),\n dutchDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.dutchMarginRequirement)\n .toNumber(),\n adlDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.adlMarginRequirement)\n .toNumber(),\n initialBufferDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialBufferMarginRequirement)\n .toNumber(),\n liquidationMarginRequirement:\n marginRequirements.liquidationMarginRequirement,\n };\n }\n\n static computeLiquidationMarginRequirement(\n matrix: BigNumber[][],\n filledExposures: BigNumber[],\n ): number {\n let lmrFilledSquared = 0;\n\n for (let i = 0; i < filledExposures.length; i++) {\n if (BigNumber(filledExposures[i]).eq(0)) {\n continue;\n }\n for (let j = 0; j < filledExposures.length; j++) {\n const riskParam = matrix[i][j];\n\n if (BigNumber(filledExposures[j]).eq(0) || BigNumber(riskParam).eq(0)) {\n continue;\n }\n\n lmrFilledSquared = BigNumber(lmrFilledSquared)\n .plus(\n BigNumber(filledExposures[i])\n .multipliedBy(filledExposures[j])\n .multipliedBy(riskParam),\n )\n .toNumber();\n }\n }\n return BigNumber(lmrFilledSquared).sqrt().toNumber();\n }\n\n static getBlockExposures(\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n riskBlockId: number,\n ): BigNumber[] {\n const filledExposures: number[] = [];\n let maxIndex = 0; // Keep track of the highest riskMatrixIndex encountered\n\n for (const position of positions) {\n if (riskBlockId !== position.risk_block_id) continue;\n const marketFilledExposure = ExposureCommand.getAccountFilledExposures(\n position,\n position.market_configuration,\n oraclePricePerMarket[position.market_id],\n );\n const index = marketFilledExposure.riskMatrixIndex;\n filledExposures[index] = BigNumber(filledExposures[index] || 0)\n .plus(marketFilledExposure.exposure)\n .toNumber();\n\n if (index > maxIndex) maxIndex = index;\n }\n\n // Ensure filledExposures array is correctly populated up to maxIndex\n for (let i = 0; i <= maxIndex; i++) {\n if (filledExposures[i] === undefined) {\n filledExposures[i] = 0;\n }\n }\n\n console.log(filledExposures, riskBlockId);\n return filledExposures.map((num) => BigNumber(num));\n }\n\n static getAccountFilledExposures(\n position: PositionInfo,\n marketConfiguration: MarketConfiguration,\n oraclePrice: number,\n ) {\n const base = position.base;\n return {\n exposure: BigNumber(oraclePrice).multipliedBy(base),\n riskMatrixIndex: BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber(),\n };\n }\n\n static computePricePnL(\n openBase: BigNumber,\n openPrice: BigNumber,\n exitPrice: BigNumber,\n ) {\n return BigNumber(\n BigNumber(exitPrice).minus(openPrice).multipliedBy(openBase),\n );\n }\n\n static getMarginRatio(marginInfo: MarginInfo) {\n if (marginInfo.liquidationMarginRequirement === 0) {\n return 0;\n }\n\n if (marginInfo.marginBalance <= 0) {\n return 1;\n }\n\n const health = BigNumber(marginInfo.liquidationMarginRequirement).div(\n marginInfo.marginBalance,\n );\n\n if (health.gt(1)) {\n return 1;\n }\n return health.toNumber();\n }\n\n static exchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return haircutPrice.multipliedBy(quantity).toNumber();\n }\n\n getSlippage(\n deltaBase: number,\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ): number {\n const deltaExposure = BigNumber(\n this.oraclePricePerMarket[marketConfiguration.market_id],\n )\n .times(deltaBase)\n .toNumber();\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n const { maxExposureShort, maxExposureLong, exposures } =\n this.getMaxExposure(marketConfiguration, marketStorage);\n\n const netExposure = exposures[riskMatrixIndex].plus(deltaExposure);\n const maxExposure = netExposure.lt(0) ? maxExposureShort : maxExposureLong;\n\n return BigNumber(netExposure)\n .negated()\n .div(BigNumber(maxExposure).plus(netExposure))\n .toNumber();\n }\n\n getMaxExposure(\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ) {\n const riskMatrix = this.riskMatrices.find((riskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(String(marketStorage.risk_block_id)).toNumber()\n );\n });\n\n if (!riskMatrix) {\n throw new Error(\"RiskMatrix Doesn't exist\");\n }\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n const imrMultiplier = amountNormalizer(\n String(this.riskMultipliers.im_multiplier),\n ).toNumber();\n\n const marginInfo = this.tokenMarginInfoPerAsset.find((marginInfo) => {\n return marginInfo.assetAddress === marketStorage.quote_collateral;\n });\n\n if (!marginInfo) {\n throw new Error(\"marginInfo doesn't exist\");\n }\n\n const exposures = ExposureCommand.getBlockExposures(\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n BigNumber(String(marketStorage.risk_block_id)).toNumber(),\n );\n\n const { maxExposureShort, maxExposureLong } =\n ExposureCommand.computeMaxExposures(\n riskMatrix.matrix,\n exposures,\n marginInfo.liquidationMarginRequirement,\n marginInfo.marginBalance < 0 ? 0 : marginInfo.marginBalance,\n imrMultiplier,\n riskMatrixIndex,\n );\n\n return {\n maxExposureShort,\n maxExposureLong,\n exposures,\n riskMatrixIndex,\n };\n }\n\n static computeMaxExposures(\n riskMatrix: BigNumber[][],\n exposures: BigNumber[],\n lmr: number,\n balance: number,\n imrMultiplier: number,\n exposureIndex: number,\n ) {\n let b = BigNumber(0);\n\n for (let i = 0; i < exposures.length; i++) {\n b = BigNumber(b).plus(\n BigNumber(exposures[i]).multipliedBy(\n BigNumber(riskMatrix[exposureIndex][i]).plus(\n riskMatrix[i][exposureIndex],\n ),\n ),\n );\n }\n const { x1, x2 } = this.solveQuadraticEquation(\n BigNumber(riskMatrix[exposureIndex][exposureIndex]).toNumber(), // changes here\n b.toNumber(),\n this.computeC(lmr, balance, imrMultiplier),\n );\n\n const maxShortExposure = BigNumber(x1).plus(exposures[exposureIndex]);\n const maxLongExposure = BigNumber(x2).plus(exposures[exposureIndex]);\n\n const availableShortExposure = maxShortExposure.lt(0)\n ? maxShortExposure.negated().toNumber()\n : 0;\n\n const availableLongExposure = maxLongExposure.gt(0)\n ? maxLongExposure.toNumber()\n : 0;\n\n return {\n maxExposureShort: availableShortExposure,\n maxExposureLong: availableLongExposure,\n };\n }\n\n static solveQuadraticEquation(a: number, b: number, c: number) {\n if (BigNumber(a).eq(0)) {\n throw new Error('ZeroQuadraticCoefficient');\n }\n\n const delta = BigNumber(b)\n .multipliedBy(b)\n .minus(BigNumber(4).multipliedBy(a).multipliedBy(c));\n\n if (delta.lt(0)) {\n throw new Error('ComplexQuadraticRoots(a, b, c)');\n }\n\n const rootDelta = delta.sqrt();\n\n const x1 = BigNumber(b)\n .multipliedBy(-1)\n .minus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n const x2 = BigNumber(b)\n .multipliedBy(-1)\n .plus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n return {\n x1,\n x2,\n };\n }\n\n static computeC(lmr: number, balance: number, imrMultiplier: number): number {\n const lmrSD = BigNumber(lmr);\n const lmrSquared = lmrSD.multipliedBy(lmrSD);\n\n const balanceSD = BigNumber(balance);\n const balanceSquared = balanceSD.multipliedBy(balanceSD);\n\n const imrMultiplierSD = BigNumber(imrMultiplier);\n const imrMultiplierSquared = imrMultiplierSD.multipliedBy(imrMultiplierSD);\n\n return lmrSquared\n .minus(balanceSquared.div(imrMultiplierSquared))\n .toNumber();\n }\n\n static calculateFee(\n price: number,\n amount: number,\n feeParameter: BigNumber,\n ): number {\n return BigNumber(price).times(amount).times(feeParameter).abs().toNumber();\n }\n\n static calculateEstimatedPrice(price: number, slippage: number): number {\n return BigNumber(price).times(BigNumber(1).plus(slippage)).toNumber();\n }\n\n static evaluateHealthStatus(marginRatio: number, marginInfo: MarginInfo) {\n const lmrMmrRatio = BigNumber(marginInfo.liquidationMarginRequirement).div(\n BigNumber(marginInfo.marginBalance).minus(marginInfo.maintenanceDelta),\n );\n\n if (\n BigNumber(marginRatio).eq(0) ||\n BigNumber(marginRatio).lt(lmrMmrRatio)\n ) {\n return 'healthy';\n }\n if (\n BigNumber(marginRatio).gt(lmrMmrRatio) &&\n BigNumber(marginRatio).lt(1)\n ) {\n return 'warning';\n }\n return 'danger';\n }\n\n static getFundingPeriods(lastFundingTimeStamp: BigNumber) {\n const secondsElapsed = BigNumber(Date.now() / 1000).minus(\n lastFundingTimeStamp,\n );\n const ONE_DAY_IN_SECONDS = 86400;\n return BigNumber(secondsElapsed).div(ONE_DAY_IN_SECONDS);\n }\n\n static getFundingRateDelta(\n fundingPeriods: BigNumber,\n lastFundingVelocity: BigNumber,\n ) {\n return lastFundingVelocity.multipliedBy(fundingPeriods);\n }\n\n static getCurrentFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const fundingPeriods = ExposureCommand.getFundingPeriods(\n last_funding_timestamp,\n );\n const fundingRateDelta = ExposureCommand.getFundingRateDelta(\n fundingPeriods,\n lastFundingVelocity,\n );\n\n return lastFundingRate.plus(fundingRateDelta);\n }\n\n convertToUsd(amount: number, tokenAddress: string): number {\n return BigNumber(amount)\n .times(this.collateralAddressToExchangePrice[tokenAddress])\n .toNumber();\n }\n\n getExchangeRate(tokenAddress: string): number {\n return this.collateralAddressToExchangePrice[tokenAddress];\n }\n\n get realisedPnl() {\n return this.realizedPnLSum.toNumber();\n }\n\n get unRealisedPnl() {\n return this.unrealizedPnLSum.toNumber();\n }\n\n get accountTotalBalanceUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPrice =\n this.collateralAddressToExchangePrice[collateralAsset.assetAddress] ||\n 0;\n\n const balanceInUSD = BigNumber(collateralPrice)\n .times(collateralAsset.marginBalance)\n .toNumber();\n accountTotalBalance += balanceInUSD;\n }\n\n return accountTotalBalance;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\nimport cloneDeep from 'lodash.clonedeep';\nimport {\n AccountAssetBalance,\n CollateralAddressToExchangePriceMap,\n CollateralInfo,\n ExchangeInfo,\n ExposureCommandState,\n MarginInfo,\n MarketConfiguration,\n MarketIdToOraclePriceMap,\n MarketStorage,\n PositionInfo,\n PositionInfoMarketConfiguration,\n RiskMatrix,\n RiskMultipliersConfiguration,\n EditCollateralAction,\n} from './types';\nimport { amountNormalizer } from '../../utils';\n\nexport class ExposureCommand {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n constructor(\n accountId: number,\n rootCollateralPoolId: number,\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n accountBalancePerAsset: AccountAssetBalance[],\n groupedByCollateral: Record<string, AccountAssetBalance>,\n riskMultipliers: RiskMultipliersConfiguration,\n riskMatrices: RiskMatrix[],\n exchangeInfoPerAsset: ExchangeInfo[],\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n uniqueTokenAddresses: string[],\n uniqueQuoteCollaterals: string[],\n tokenMarginInfoPerAsset: MarginInfo[],\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap,\n ) {\n this.accountId = accountId;\n this.rootCollateralPoolId = rootCollateralPoolId;\n this.oraclePricePerMarket = oraclePricePerMarket;\n this.accountBalancePerAsset = accountBalancePerAsset;\n this.groupedByCollateral = groupedByCollateral;\n this.riskMultipliers = riskMultipliers;\n this.riskMatrices = riskMatrices;\n this.exchangeInfoPerAsset = exchangeInfoPerAsset;\n this.positionInfoMarketConfiguration = positionInfoMarketConfiguration;\n this.uniqueTokenAddresses = uniqueTokenAddresses;\n this.uniqueQuoteCollaterals = uniqueQuoteCollaterals;\n this.tokenMarginInfoPerAsset = tokenMarginInfoPerAsset;\n this.realizedPnLSum = realizedPnLSum;\n this.unrealizedPnLSum = unrealizedPnLSum;\n this.collateralAddressToExchangePrice = collateralAddressToExchangePrice;\n }\n\n getState(): ExposureCommandState {\n return {\n accountId: this.accountId,\n rootCollateralPoolId: this.rootCollateralPoolId,\n oraclePricePerMarket: this.oraclePricePerMarket,\n accountBalancePerAsset: this.accountBalancePerAsset,\n groupedByCollateral: this.groupedByCollateral,\n riskMultipliers: this.riskMultipliers,\n riskMatrices: this.riskMatrices,\n exchangeInfoPerAsset: this.exchangeInfoPerAsset,\n positionInfoMarketConfiguration: this.positionInfoMarketConfiguration,\n uniqueTokenAddresses: this.uniqueTokenAddresses,\n uniqueQuoteCollaterals: this.uniqueQuoteCollaterals,\n tokenMarginInfoPerAsset: this.tokenMarginInfoPerAsset,\n realizedPnLSum: this.realizedPnLSum,\n unrealizedPnLSum: this.unrealizedPnLSum,\n collateralAddressToExchangePrice: this.collateralAddressToExchangePrice,\n };\n }\n\n get getUsdNodeMarginInfo() {\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n this.uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n this.tokenMarginInfoPerAsset,\n );\n }\n\n get balancePerAsset() {\n return this.tokenMarginInfoPerAsset;\n }\n get exchangePricePerAsset() {\n return this.exchangeInfoPerAsset;\n }\n\n getUsdNodeMarginInfoPostTrade(\n positionAmount: number,\n collateralAddress: string,\n marketConfiguration: MarketConfiguration,\n riskBlockId: number,\n ) {\n // perform deep copy of the object\n const positionInfoMarketConfiguration: PositionInfoMarketConfiguration[] =\n cloneDeep(this.positionInfoMarketConfiguration);\n\n // Check if the market_id already exists in the array\n const existingConfigIndex = positionInfoMarketConfiguration.findIndex(\n (config) =>\n config.market_id ===\n BigNumber(String(marketConfiguration.market_id)).toNumber(),\n );\n\n if (existingConfigIndex !== -1) {\n // If it exists, update the amount\n positionInfoMarketConfiguration[existingConfigIndex].base = BigNumber(\n positionInfoMarketConfiguration[existingConfigIndex].base,\n ).plus(positionAmount);\n } else {\n // If it doesn't exist, add a new element\n positionInfoMarketConfiguration.push({\n base: BigNumber(positionAmount),\n realized_pnl: BigNumber(0),\n last_price: BigNumber(0),\n average_entry_price: BigNumber(0),\n last_timestamp: BigNumber(0),\n funding_value: BigNumber(0),\n base_multiplier: BigNumber(0),\n adl_unwind_price: BigNumber(0),\n market_id: BigNumber(String(marketConfiguration.market_id)).toNumber(),\n market_configuration: marketConfiguration,\n risk_block_id: riskBlockId,\n });\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return {\n usdNodeMarginInfo: ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n ),\n tokenMarginInfoPerAsset: tokenMarginInfoPerAsset,\n };\n }\n\n getEditCollateralActionsToCoverMargin(\n requiredMargin: number,\n ): EditCollateralAction[] {\n /*\n * Note, this function is implicitely making an assumption that required margin can be covered by\n * the account without breaching account IMR\n * */\n const editCollateralActions: EditCollateralAction[] = [];\n let marginToCover = requiredMargin;\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n // todo: p2: consider prioritising rUSD when looping through token infos & document math in comments\n for (const tokenInfo of tokenMarginInfoPerAsset) {\n if (tokenInfo.marginBalance < 0) {\n continue;\n }\n\n // todo: p1: haircut and exchange rate adjustment should not be done for rUSD\n // does exchangeInfo currently return haircut as zero and price as 1?\n // todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl\n\n const exchangeInfo = this.exchangeInfoPerAsset.find((exchangeInfo) => {\n return tokenInfo.assetAddress === exchangeInfo.tokenAddress;\n });\n\n if (!exchangeInfo) {\n throw new Error(\n 'Unable to retrieve exchange info when calculating collaterals needed to cover margin',\n );\n }\n\n const marginBalanceWithHaircutInRUSD =\n ExposureCommand.exchangeWithPriceHaircut(\n tokenInfo.marginBalance,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n\n if (marginBalanceWithHaircutInRUSD > marginToCover) {\n const collateralDelta =\n -ExposureCommand.reverseExchangeWithPriceHaircut(\n marginToCover,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: collateralDelta,\n });\n break;\n } else {\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: -tokenInfo.marginBalance,\n });\n marginToCover = marginToCover - marginBalanceWithHaircutInRUSD;\n }\n }\n return editCollateralActions;\n }\n\n getUsdNodeMarginInfoPostEditCollaterals(\n editCollateralActions: EditCollateralAction[],\n ) {\n // todo: check if there's a way to simplify this function & deprecate the single edit collateral sim below as it's a\n // subset of this function\n\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n\n // counterfactual update deep copy\n\n for (const action of editCollateralActions) {\n if (groupedByCollateral[action.collateralAddress]) {\n groupedByCollateral[action.collateralAddress] = {\n ...groupedByCollateral[action.collateralAddress],\n amount:\n groupedByCollateral[action.collateralAddress].amount +\n action.collateralDelta,\n };\n } else {\n groupedByCollateral[action.collateralAddress] = {\n accountId: this.accountId,\n collateral: action.collateralAddress,\n amount: action.collateralDelta,\n };\n }\n\n uniqueQuoteCollaterals.add(action.collateralAddress);\n\n if (!this.uniqueTokenAddresses.includes(action.collateralAddress)) {\n uniqueTokenAddresses.push(action.collateralAddress);\n }\n }\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n getUsdNodeMarginInfoPostEditCollateral(\n collateralDelta: number,\n collateralAddress: string,\n ) {\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n // counterfactual update deep copy\n if (groupedByCollateral[collateralAddress]) {\n groupedByCollateral[collateralAddress] = {\n ...groupedByCollateral[collateralAddress],\n amount: groupedByCollateral[collateralAddress].amount + collateralDelta,\n };\n } else {\n groupedByCollateral[collateralAddress] = {\n accountId: this.accountId,\n collateral: collateralAddress,\n amount: collateralDelta,\n };\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n static calculateTokenMarginInfoPerAsset(\n groupedByCollateral: Record<string, AccountAssetBalance>,\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n uniqueQuoteCollaterals: Set<string>,\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n ): MarginInfo[] {\n const tokenMarginInfoPerAsset: MarginInfo[] = [];\n\n // todo: p2: investigate the ts-expect-error cases below\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const uniqueQuoteTokens: Lowercase<string>[] = Array.from(\n uniqueQuoteCollaterals,\n );\n\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const tokenUnion: Set<Lowercase<string>> = new Set([\n ...Object.keys(groupedByCollateral),\n ...uniqueQuoteTokens,\n ]); // get unique union of those arrays\n const uniqueTokenAddresses: Lowercase<string>[] = Array.from(tokenUnion);\n\n for (const token of uniqueTokenAddresses) {\n tokenMarginInfoPerAsset.push(\n ExposureCommand.getTokenMarginInfo(\n rootCollateralPoolId,\n riskMatrices,\n riskMultipliers,\n ExposureCommand.getCollateralInfo(\n token,\n uniqueQuoteCollaterals.has(token) ? realizedPnLSum : BigNumber(0),\n uniqueQuoteCollaterals.has(token) ? unrealizedPnLSum : BigNumber(0),\n groupedByCollateral[token]?.amount || 0,\n ),\n token,\n positionInfoMarketConfiguration,\n oraclePricePerMarket,\n uniqueQuoteTokens,\n ),\n );\n }\n\n return tokenMarginInfoPerAsset;\n }\n static calculateLiquidation(\n marginBalance: number,\n liquidationMarginRequirement: number,\n oraclePrice: number,\n positionBase: number,\n ): BigNumber {\n const liquidationPrice = BigNumber(oraclePrice).minus(\n BigNumber(marginBalance)\n .minus(liquidationMarginRequirement)\n .div(positionBase),\n );\n\n return BigNumber.max(0, liquidationPrice);\n }\n\n static calculateImpliedLeverage(\n notionalExposure: number,\n oldIMR: number,\n newIMR: number,\n ): number {\n const changeInImr = BigNumber(newIMR).minus(oldIMR);\n\n if (changeInImr.eq(0)) {\n return 0;\n }\n return BigNumber(notionalExposure).div(changeInImr).toNumber();\n }\n\n static combineMarginInfo(\n parentMarginInfo: MarginInfo,\n sonMarginInfo: MarginInfo,\n sonParentExchangeInfo: ExchangeInfo,\n ): MarginInfo {\n return {\n assetAddress: parentMarginInfo.assetAddress,\n marginBalance: BigNumber(parentMarginInfo.marginBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.marginBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n realBalance: BigNumber(parentMarginInfo.realBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.realBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n initialDelta: BigNumber(parentMarginInfo.initialDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.realBalance,\n sonMarginInfo.initialDelta,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n maintenanceDelta: BigNumber(parentMarginInfo.maintenanceDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.maintenanceDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationDelta: BigNumber(parentMarginInfo.liquidationDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.liquidationDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n dutchDelta: BigNumber(parentMarginInfo.dutchDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.dutchDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n adlDelta: BigNumber(parentMarginInfo.adlDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.adlDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n\n initialBufferDelta: BigNumber(parentMarginInfo.initialBufferDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.initialBufferDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationMarginRequirement: BigNumber(\n parentMarginInfo.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.liquidationMarginRequirement,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n };\n }\n\n static getUsdNodeMarginInfo(\n accountCollateralPoolId: number,\n quoteTokens: string[],\n exchangeInfoPerAsset: ExchangeInfo[],\n marginInfoPerToken: MarginInfo[],\n ) {\n let usdNodeMarginInfo: MarginInfo = {\n assetAddress: '',\n marginBalance: 0,\n realBalance: 0,\n initialDelta: 0,\n maintenanceDelta: 0,\n liquidationDelta: 0,\n dutchDelta: 0,\n adlDelta: 0,\n initialBufferDelta: 0,\n liquidationMarginRequirement: 0,\n };\n for (const quoteToken of quoteTokens) {\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return quoteToken === exchangeInfo.tokenAddress;\n });\n\n const marginInfo = marginInfoPerToken.find((marginInfo) => {\n return quoteToken === marginInfo.assetAddress;\n });\n\n if (!exchangeInfo || !marginInfo) {\n throw Error('Missing exchangeInfo/marginInfo');\n }\n\n usdNodeMarginInfo = ExposureCommand.combineMarginInfo(\n usdNodeMarginInfo,\n marginInfo,\n exchangeInfo,\n );\n }\n\n return usdNodeMarginInfo;\n }\n static getCollateralInfo(\n collateralAddress: string,\n realisedPnl: BigNumber,\n unrealizedPnL: BigNumber,\n netDeposits: number,\n ): CollateralInfo {\n return {\n netDeposits: netDeposits,\n marginBalance: BigNumber(netDeposits)\n .plus(realisedPnl)\n .plus(unrealizedPnL)\n .toNumber(),\n realBalance: BigNumber(netDeposits).plus(realisedPnl).toNumber(),\n };\n }\n\n static getTokenMarginInfo(\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n collateralInfo: CollateralInfo,\n collateralAddress: Lowercase<string>,\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n uniqueQuoteTokens: string[],\n ): MarginInfo {\n const marginRequirements = {\n liquidationMarginRequirement: 0,\n initialMarginRequirement: 0,\n maintenanceMarginRequirement: 0,\n dutchMarginRequirement: 0,\n adlMarginRequirement: 0,\n initialBufferMarginRequirement: 0,\n };\n if (uniqueQuoteTokens.includes(collateralAddress)) {\n // uniqueQuoteTokens is list is active markets tokens\n for (const riskMatrix of riskMatrices) {\n const filledExposures = ExposureCommand.getBlockExposures(\n positions,\n oraclePricePerMarket,\n riskMatrix.risk_block_id,\n );\n\n marginRequirements.liquidationMarginRequirement = BigNumber(\n marginRequirements.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.computeLiquidationMarginRequirement(\n riskMatrix.matrix,\n filledExposures,\n ),\n )\n .toNumber();\n }\n\n // Get the initial margin requirement\n marginRequirements.initialMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the maintenance margin requirement\n marginRequirements.maintenanceMarginRequirement = amountNormalizer(\n String(riskMultipliers.mmr_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the dutch margin requirement\n marginRequirements.dutchMarginRequirement = amountNormalizer(\n String(riskMultipliers.dutch_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the adl margin requirement\n marginRequirements.adlMarginRequirement = amountNormalizer(\n String(riskMultipliers.adl_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the initial buffer margin requirement\n marginRequirements.initialBufferMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_buffer_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n }\n return {\n assetAddress: collateralAddress,\n marginBalance: collateralInfo.marginBalance,\n realBalance: collateralInfo.realBalance,\n initialDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialMarginRequirement)\n .toNumber(),\n maintenanceDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.maintenanceMarginRequirement)\n .toNumber(),\n liquidationDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.liquidationMarginRequirement)\n .toNumber(),\n dutchDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.dutchMarginRequirement)\n .toNumber(),\n adlDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.adlMarginRequirement)\n .toNumber(),\n initialBufferDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialBufferMarginRequirement)\n .toNumber(),\n liquidationMarginRequirement:\n marginRequirements.liquidationMarginRequirement,\n };\n }\n\n static computeLiquidationMarginRequirement(\n matrix: BigNumber[][],\n filledExposures: BigNumber[],\n ): number {\n let lmrFilledSquared = 0;\n\n for (let i = 0; i < filledExposures.length; i++) {\n if (BigNumber(filledExposures[i]).eq(0)) {\n continue;\n }\n for (let j = 0; j < filledExposures.length; j++) {\n const riskParam = matrix[i][j];\n\n if (BigNumber(filledExposures[j]).eq(0) || BigNumber(riskParam).eq(0)) {\n continue;\n }\n\n lmrFilledSquared = BigNumber(lmrFilledSquared)\n .plus(\n BigNumber(filledExposures[i])\n .multipliedBy(filledExposures[j])\n .multipliedBy(riskParam),\n )\n .toNumber();\n }\n }\n return BigNumber(lmrFilledSquared).sqrt().toNumber();\n }\n\n static getBlockExposures(\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n riskBlockId: number,\n ): BigNumber[] {\n const filledExposures: number[] = [];\n let maxIndex = 0; // Keep track of the highest riskMatrixIndex encountered\n\n for (const position of positions) {\n if (riskBlockId !== position.risk_block_id) continue;\n const marketFilledExposure = ExposureCommand.getAccountFilledExposures(\n position,\n position.market_configuration,\n oraclePricePerMarket[position.market_id],\n );\n const index = marketFilledExposure.riskMatrixIndex;\n filledExposures[index] = BigNumber(filledExposures[index] || 0)\n .plus(marketFilledExposure.exposure)\n .toNumber();\n\n if (index > maxIndex) maxIndex = index;\n }\n\n // Ensure filledExposures array is correctly populated up to maxIndex\n for (let i = 0; i <= maxIndex; i++) {\n if (filledExposures[i] === undefined) {\n filledExposures[i] = 0;\n }\n }\n\n console.log(filledExposures, riskBlockId);\n return filledExposures.map((num) => BigNumber(num));\n }\n\n static getAccountFilledExposures(\n position: PositionInfo,\n marketConfiguration: MarketConfiguration,\n oraclePrice: number,\n ) {\n const base = position.base;\n return {\n exposure: BigNumber(oraclePrice).multipliedBy(base),\n riskMatrixIndex: BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber(),\n };\n }\n\n static computePricePnL(\n openBase: BigNumber,\n openPrice: BigNumber,\n exitPrice: BigNumber,\n ) {\n return BigNumber(\n BigNumber(exitPrice).minus(openPrice).multipliedBy(openBase),\n );\n }\n\n static getMarginRatio(marginInfo: MarginInfo) {\n if (marginInfo.liquidationMarginRequirement === 0) {\n return 0;\n }\n\n if (marginInfo.marginBalance <= 0) {\n return 1;\n }\n\n const health = BigNumber(marginInfo.liquidationMarginRequirement).div(\n marginInfo.marginBalance,\n );\n\n if (health.gt(1)) {\n return 1;\n }\n return health.toNumber();\n }\n\n static exchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return haircutPrice.multipliedBy(quantity).toNumber();\n }\n\n static reverseExchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n /*\n * this operation takes quantity in rUSD terms, price between collateral token (e.g. weth) and rusd\n * alongside the haircut between weth and rusd\n * it then returns a quantity in collateral token terms (e.g. weth) which would return quantity if it were to be\n * passed through the exchangeWithPriceHaircut function\n * */\n // todo: p2: consider abstracting haircut price calculation into separate function as duplciated\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return BigNumber(quantity).dividedBy(haircutPrice).toNumber();\n }\n\n getSlippage(\n deltaBase: number,\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ): number {\n const deltaExposure = BigNumber(\n this.oraclePricePerMarket[marketConfiguration.market_id],\n )\n .times(deltaBase)\n .toNumber();\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n const { maxExposureShort, maxExposureLong, exposures } =\n this.getMaxExposure(marketConfiguration, marketStorage);\n\n const netExposure = exposures[riskMatrixIndex].plus(deltaExposure);\n const maxExposure = netExposure.lt(0) ? maxExposureShort : maxExposureLong;\n\n return BigNumber(netExposure)\n .negated()\n .div(BigNumber(maxExposure).plus(netExposure))\n .toNumber();\n }\n\n getMaxExposure(\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ) {\n const riskMatrix = this.riskMatrices.find((riskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(String(marketStorage.risk_block_id)).toNumber()\n );\n });\n\n if (!riskMatrix) {\n throw new Error(\"RiskMatrix Doesn't exist\");\n }\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n const imrMultiplier = amountNormalizer(\n String(this.riskMultipliers.im_multiplier),\n ).toNumber();\n\n const marginInfo = this.tokenMarginInfoPerAsset.find((marginInfo) => {\n return marginInfo.assetAddress === marketStorage.quote_collateral;\n });\n\n if (!marginInfo) {\n throw new Error(\"marginInfo doesn't exist\");\n }\n\n const exposures = ExposureCommand.getBlockExposures(\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n BigNumber(String(marketStorage.risk_block_id)).toNumber(),\n );\n\n const { maxExposureShort, maxExposureLong } =\n ExposureCommand.computeMaxExposures(\n riskMatrix.matrix,\n exposures,\n marginInfo.liquidationMarginRequirement,\n marginInfo.marginBalance < 0 ? 0 : marginInfo.marginBalance,\n imrMultiplier,\n riskMatrixIndex,\n );\n\n return {\n maxExposureShort,\n maxExposureLong,\n exposures,\n riskMatrixIndex,\n };\n }\n\n static computeMaxExposures(\n riskMatrix: BigNumber[][],\n exposures: BigNumber[],\n lmr: number,\n balance: number,\n imrMultiplier: number,\n exposureIndex: number,\n ) {\n let b = BigNumber(0);\n\n for (let i = 0; i < exposures.length; i++) {\n b = BigNumber(b).plus(\n BigNumber(exposures[i]).multipliedBy(\n BigNumber(riskMatrix[exposureIndex][i]).plus(\n riskMatrix[i][exposureIndex],\n ),\n ),\n );\n }\n const { x1, x2 } = this.solveQuadraticEquation(\n BigNumber(riskMatrix[exposureIndex][exposureIndex]).toNumber(), // changes here\n b.toNumber(),\n this.computeC(lmr, balance, imrMultiplier),\n );\n\n const maxShortExposure = BigNumber(x1).plus(exposures[exposureIndex]);\n const maxLongExposure = BigNumber(x2).plus(exposures[exposureIndex]);\n\n const availableShortExposure = maxShortExposure.lt(0)\n ? maxShortExposure.negated().toNumber()\n : 0;\n\n const availableLongExposure = maxLongExposure.gt(0)\n ? maxLongExposure.toNumber()\n : 0;\n\n return {\n maxExposureShort: availableShortExposure,\n maxExposureLong: availableLongExposure,\n };\n }\n\n static solveQuadraticEquation(a: number, b: number, c: number) {\n if (BigNumber(a).eq(0)) {\n throw new Error('ZeroQuadraticCoefficient');\n }\n\n const delta = BigNumber(b)\n .multipliedBy(b)\n .minus(BigNumber(4).multipliedBy(a).multipliedBy(c));\n\n if (delta.lt(0)) {\n throw new Error('ComplexQuadraticRoots(a, b, c)');\n }\n\n const rootDelta = delta.sqrt();\n\n const x1 = BigNumber(b)\n .multipliedBy(-1)\n .minus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n const x2 = BigNumber(b)\n .multipliedBy(-1)\n .plus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n return {\n x1,\n x2,\n };\n }\n\n static computeC(lmr: number, balance: number, imrMultiplier: number): number {\n const lmrSD = BigNumber(lmr);\n const lmrSquared = lmrSD.multipliedBy(lmrSD);\n\n const balanceSD = BigNumber(balance);\n const balanceSquared = balanceSD.multipliedBy(balanceSD);\n\n const imrMultiplierSD = BigNumber(imrMultiplier);\n const imrMultiplierSquared = imrMultiplierSD.multipliedBy(imrMultiplierSD);\n\n return lmrSquared\n .minus(balanceSquared.div(imrMultiplierSquared))\n .toNumber();\n }\n\n static calculateFee(\n price: number,\n amount: number,\n feeParameter: BigNumber,\n ): number {\n return BigNumber(price).times(amount).times(feeParameter).abs().toNumber();\n }\n\n static calculateEstimatedPrice(price: number, slippage: number): number {\n return BigNumber(price).times(BigNumber(1).plus(slippage)).toNumber();\n }\n\n static evaluateHealthStatus(marginRatio: number, marginInfo: MarginInfo) {\n const lmrMmrRatio = BigNumber(marginInfo.liquidationMarginRequirement).div(\n BigNumber(marginInfo.marginBalance).minus(marginInfo.maintenanceDelta),\n );\n\n if (\n BigNumber(marginRatio).eq(0) ||\n BigNumber(marginRatio).lt(lmrMmrRatio)\n ) {\n return 'healthy';\n }\n if (\n BigNumber(marginRatio).gt(lmrMmrRatio) &&\n BigNumber(marginRatio).lt(1)\n ) {\n return 'warning';\n }\n return 'danger';\n }\n\n static getFundingPeriods(lastFundingTimeStamp: BigNumber) {\n const secondsElapsed = BigNumber(Date.now() / 1000).minus(\n lastFundingTimeStamp,\n );\n const ONE_DAY_IN_SECONDS = 86400;\n return BigNumber(secondsElapsed).div(ONE_DAY_IN_SECONDS);\n }\n\n static getFundingRateDelta(\n fundingPeriods: BigNumber,\n lastFundingVelocity: BigNumber,\n ) {\n return lastFundingVelocity.multipliedBy(fundingPeriods);\n }\n\n static getCurrentFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const fundingPeriods = ExposureCommand.getFundingPeriods(\n last_funding_timestamp,\n );\n const fundingRateDelta = ExposureCommand.getFundingRateDelta(\n fundingPeriods,\n lastFundingVelocity,\n );\n\n return lastFundingRate.plus(fundingRateDelta);\n }\n\n convertToUsd(amount: number, tokenAddress: string): number {\n return BigNumber(amount)\n .times(this.collateralAddressToExchangePrice[tokenAddress])\n .toNumber();\n }\n\n getExchangeRate(tokenAddress: string): number {\n return this.collateralAddressToExchangePrice[tokenAddress];\n }\n\n get realisedPnl() {\n return this.realizedPnLSum.toNumber();\n }\n\n get unRealisedPnl() {\n return this.unrealizedPnLSum.toNumber();\n }\n\n get accountTotalBalanceUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPrice =\n this.collateralAddressToExchangePrice[collateralAsset.assetAddress] ||\n 0;\n\n const balanceInUSD = BigNumber(collateralPrice)\n .times(collateralAsset.marginBalance)\n .toNumber();\n accountTotalBalance += balanceInUSD;\n }\n\n return accountTotalBalance;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport interface MarketStorage {\n market_id: number;\n quote_collateral: string;\n instrument_address: string;\n name: string;\n risk_block_id: number;\n collateral_pool_id: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface MarketConfiguration {\n market_id: number;\n risk_matrix_index: number;\n max_open_base: number;\n velocity_multiplier: number;\n minimum_order_base: number;\n base_spacing: number;\n price_spacing: number;\n oracle_node_id: string;\n mtm_window: number;\n dutch_config_lambda: number;\n dutch_config_min_base: number;\n slippage_params_phi: number;\n slippage_params_beta: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport type AccountAssetBalance = {\n accountId: number;\n collateral: string;\n amount: number;\n};\n\nexport interface RiskMultipliersConfiguration {\n collateral_pool_id: number;\n im_multiplier: number;\n mmr_multiplier: number;\n dutch_multiplier: number;\n adl_multiplier: number;\n im_buffer_multiplier: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface RiskMatrix {\n collateral_pool_id: number;\n risk_block_id: number;\n matrix: BigNumber[][];\n}\nexport type MarketIdToOraclePriceMap = {\n [marketId: number]: number;\n};\n\nexport type CollateralAddressToExchangePriceMap = {\n [address: string]: number;\n};\n\nexport interface ExchangeInfo {\n price: number;\n priceHaircut: number;\n autoExchangeDiscount: number;\n tokenAddress: string;\n}\n\nexport interface PositionInfo {\n base: BigNumber;\n realized_pnl: BigNumber;\n last_price: BigNumber;\n average_entry_price: BigNumber;\n last_timestamp: BigNumber;\n funding_value: BigNumber;\n base_multiplier: BigNumber;\n adl_unwind_price: BigNumber;\n market_id: number;\n}\n\nexport type PositionInfoMarketConfiguration = PositionInfo & {\n market_configuration: MarketConfiguration;\n risk_block_id: number;\n};\n\nexport interface MarginInfo {\n assetAddress: string
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport interface MarketStorage {\n market_id: number;\n quote_collateral: string;\n instrument_address: string;\n name: string;\n risk_block_id: number;\n collateral_pool_id: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface MarketConfiguration {\n market_id: number;\n risk_matrix_index: number;\n max_open_base: number;\n velocity_multiplier: number;\n minimum_order_base: number;\n base_spacing: number;\n price_spacing: number;\n oracle_node_id: string;\n mtm_window: number;\n dutch_config_lambda: number;\n dutch_config_min_base: number;\n slippage_params_phi: number;\n slippage_params_beta: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport type AccountAssetBalance = {\n accountId: number;\n collateral: string;\n amount: number;\n};\n\nexport interface RiskMultipliersConfiguration {\n collateral_pool_id: number;\n im_multiplier: number;\n mmr_multiplier: number;\n dutch_multiplier: number;\n adl_multiplier: number;\n im_buffer_multiplier: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface RiskMatrix {\n collateral_pool_id: number;\n risk_block_id: number;\n matrix: BigNumber[][];\n}\nexport type MarketIdToOraclePriceMap = {\n [marketId: number]: number;\n};\n\nexport type CollateralAddressToExchangePriceMap = {\n [address: string]: number;\n};\n\nexport interface ExchangeInfo {\n price: number;\n priceHaircut: number;\n autoExchangeDiscount: number;\n tokenAddress: string;\n}\n\nexport interface PositionInfo {\n base: BigNumber;\n realized_pnl: BigNumber;\n last_price: BigNumber;\n average_entry_price: BigNumber;\n last_timestamp: BigNumber;\n funding_value: BigNumber;\n base_multiplier: BigNumber;\n adl_unwind_price: BigNumber;\n market_id: number;\n}\n\nexport type PositionInfoMarketConfiguration = PositionInfo & {\n market_configuration: MarketConfiguration;\n risk_block_id: number;\n};\n\nexport interface MarginInfo {\n assetAddress: Lowercase<string>;\n marginBalance: number;\n realBalance: number;\n initialDelta: number;\n maintenanceDelta: number;\n liquidationDelta: number;\n dutchDelta: number;\n adlDelta: number;\n initialBufferDelta: number;\n liquidationMarginRequirement: number;\n}\n\nexport interface CollateralInfo {\n netDeposits: number;\n marginBalance: number;\n realBalance: number;\n}\n\nexport type ExposureCommandState = {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n};\n\nexport type TradeSimulationState = {\n feeParameter: BigNumber;\n marketStorage: MarketStorage;\n marketConfiguration: MarketConfiguration;\n exposureDataAccount: ExposureCommandState;\n exposureDataPassivePool: ExposureCommandState;\n};\n\nexport type EditCollateralSimulationState = {\n exposureDataAccount: ExposureCommandState;\n};\n\nexport type EditCollateralAction = {\n collateralDelta: number;\n collateralAddress: Lowercase<string>;\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
|
-
import { AccountAssetBalance, CollateralAddressToExchangePriceMap, CollateralInfo, ExchangeInfo, ExposureCommandState, MarginInfo, MarketConfiguration, MarketIdToOraclePriceMap, MarketStorage, PositionInfo, PositionInfoMarketConfiguration, RiskMatrix, RiskMultipliersConfiguration } from './types';
|
|
2
|
+
import { AccountAssetBalance, CollateralAddressToExchangePriceMap, CollateralInfo, ExchangeInfo, ExposureCommandState, MarginInfo, MarketConfiguration, MarketIdToOraclePriceMap, MarketStorage, PositionInfo, PositionInfoMarketConfiguration, RiskMatrix, RiskMultipliersConfiguration, EditCollateralAction } from './types';
|
|
3
3
|
export declare class ExposureCommand {
|
|
4
4
|
accountId: number;
|
|
5
5
|
rootCollateralPoolId: number;
|
|
@@ -25,6 +25,8 @@ export declare class ExposureCommand {
|
|
|
25
25
|
usdNodeMarginInfo: MarginInfo;
|
|
26
26
|
tokenMarginInfoPerAsset: MarginInfo[];
|
|
27
27
|
};
|
|
28
|
+
getEditCollateralActionsToCoverMargin(requiredMargin: number): EditCollateralAction[];
|
|
29
|
+
getUsdNodeMarginInfoPostEditCollaterals(editCollateralActions: EditCollateralAction[]): MarginInfo;
|
|
28
30
|
getUsdNodeMarginInfoPostEditCollateral(collateralDelta: number, collateralAddress: string): MarginInfo;
|
|
29
31
|
static calculateTokenMarginInfoPerAsset(groupedByCollateral: Record<string, AccountAssetBalance>, rootCollateralPoolId: number, riskMatrices: RiskMatrix[], riskMultipliers: RiskMultipliersConfiguration, uniqueQuoteCollaterals: Set<string>, realizedPnLSum: BigNumber, unrealizedPnLSum: BigNumber, positionInfoMarketConfiguration: PositionInfoMarketConfiguration[], oraclePricePerMarket: MarketIdToOraclePriceMap): MarginInfo[];
|
|
30
32
|
static calculateLiquidation(marginBalance: number, liquidationMarginRequirement: number, oraclePrice: number, positionBase: number): BigNumber;
|
|
@@ -32,7 +34,7 @@ export declare class ExposureCommand {
|
|
|
32
34
|
static combineMarginInfo(parentMarginInfo: MarginInfo, sonMarginInfo: MarginInfo, sonParentExchangeInfo: ExchangeInfo): MarginInfo;
|
|
33
35
|
static getUsdNodeMarginInfo(accountCollateralPoolId: number, quoteTokens: string[], exchangeInfoPerAsset: ExchangeInfo[], marginInfoPerToken: MarginInfo[]): MarginInfo;
|
|
34
36
|
static getCollateralInfo(collateralAddress: string, realisedPnl: BigNumber, unrealizedPnL: BigNumber, netDeposits: number): CollateralInfo;
|
|
35
|
-
static getTokenMarginInfo(rootCollateralPoolId: number, riskMatrices: RiskMatrix[], riskMultipliers: RiskMultipliersConfiguration, collateralInfo: CollateralInfo, collateralAddress: string
|
|
37
|
+
static getTokenMarginInfo(rootCollateralPoolId: number, riskMatrices: RiskMatrix[], riskMultipliers: RiskMultipliersConfiguration, collateralInfo: CollateralInfo, collateralAddress: Lowercase<string>, positions: PositionInfoMarketConfiguration[], oraclePricePerMarket: MarketIdToOraclePriceMap, uniqueQuoteTokens: string[]): MarginInfo;
|
|
36
38
|
static computeLiquidationMarginRequirement(matrix: BigNumber[][], filledExposures: BigNumber[]): number;
|
|
37
39
|
static getBlockExposures(positions: PositionInfoMarketConfiguration[], oraclePricePerMarket: MarketIdToOraclePriceMap, riskBlockId: number): BigNumber[];
|
|
38
40
|
static getAccountFilledExposures(position: PositionInfo, marketConfiguration: MarketConfiguration, oraclePrice: number): {
|
|
@@ -42,6 +44,7 @@ export declare class ExposureCommand {
|
|
|
42
44
|
static computePricePnL(openBase: BigNumber, openPrice: BigNumber, exitPrice: BigNumber): BigNumber;
|
|
43
45
|
static getMarginRatio(marginInfo: MarginInfo): number;
|
|
44
46
|
static exchangeWithPriceHaircut(quantity: number, price: number, haircut: number): number;
|
|
47
|
+
static reverseExchangeWithPriceHaircut(quantity: number, price: number, haircut: number): number;
|
|
45
48
|
getSlippage(deltaBase: number, marketConfiguration: MarketConfiguration, marketStorage: MarketStorage): number;
|
|
46
49
|
getMaxExposure(marketConfiguration: MarketConfiguration, marketStorage: MarketStorage): {
|
|
47
50
|
maxExposureShort: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EACnC,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,+BAA+B,EAC/B,UAAU,EACV,4BAA4B,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,7 @@ export type PositionInfoMarketConfiguration = PositionInfo & {
|
|
|
74
74
|
risk_block_id: number;
|
|
75
75
|
};
|
|
76
76
|
export interface MarginInfo {
|
|
77
|
-
assetAddress: string
|
|
77
|
+
assetAddress: Lowercase<string>;
|
|
78
78
|
marginBalance: number;
|
|
79
79
|
realBalance: number;
|
|
80
80
|
initialDelta: number;
|
|
@@ -117,4 +117,8 @@ export type TradeSimulationState = {
|
|
|
117
117
|
export type EditCollateralSimulationState = {
|
|
118
118
|
exposureDataAccount: ExposureCommandState;
|
|
119
119
|
};
|
|
120
|
+
export type EditCollateralAction = {
|
|
121
|
+
collateralDelta: number;
|
|
122
|
+
collateralAddress: Lowercase<string>;
|
|
123
|
+
};
|
|
120
124
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;CACvB;AACD,MAAM,MAAM,wBAAwB,GAAG;IACrC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,EAAE,SAAS,CAAC;IACtB,mBAAmB,EAAE,SAAS,CAAC;IAC/B,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,SAAS,CAAC;IAC3B,gBAAgB,EAAE,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,+BAA+B,GAAG,YAAY,GAAG;IAC3D,oBAAoB,EAAE,mBAAmB,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAG1C,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,WAAW;IACrB,WAAW,OAAO;IAClB,UAAU,WAAW;CACtB;AAED,oBAAY,iBAAiB;IAE3B,eAAe,IAAI;IACnB,SAAS,KAAK;IACd,cAAc,MAAM;IACpB,WAAW,QAAQ;IAEnB,aAAa,QAAQ;IACrB,eAAe,SAAS;IACxB,SAAS,WAAW;IACpB,eAAe,WAAW;CAC3B;AAED,oBAAY,iBAAiB;IAC3B,UAAU,SAAS;IACnB,YAAY,UAAU;IACtB,eAAe,WAAW;IAC1B,cAAc,WAAW;IACzB,QAAQ,UAAU;IAClB,UAAU,WAAW;IACrB,OAAO,SAAS;CACjB;AAGD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,iBAAiB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAID,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B,EAAE,MAAM,CAAC;IACpC,+BAA+B,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE;QACP,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,mBAAmB,CAAC;AAExB,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,iBAAiB,EAAE,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9D,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAC3C,SAAS,GACT,YAAY,GACZ,UAAU,GACV,eAAe,CAAC;AAEpB,MAAM,MAAM,8BAA8B,GAAG,WAAW,GAAG,SAAS,CAAC;AAErE,MAAM,MAAM,qCAAqC,GAAG;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,mCAAmC,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,oBAAoB;IAC9B,UAAU,QAAY;IACtB,QAAQ,UAAiB;IACzB,OAAO,WAAsB;IAC7B,QAAQ,YAA0B;IAClC,SAAS,aAA2B;IACpC,QAAQ,cAA4B;CACrC;AACD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,EAAE,MAAM,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAGF,MAAM,MAAM,mCAAmC,GAAG;IAChD,mBAAmB,EAAE;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2CAA2C,GAAG;IACxD,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,iBAAiB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAGF,oBAAY,+BAA+B;IACzC,UAAU,QAAY;IACtB,QAAQ,UAAiB;IACzB,OAAO,WAAsB;IAC7B,QAAQ,YAA0B;IAClC,SAAS,aAA2B;IACpC,QAAQ,cAA4B;CACrC;AAED,MAAM,MAAM,sCAAsC,GAAG;IACnD,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAGF,oBAAY,0CAA0C;IACpD,UAAU,QAAY;IACtB,QAAQ,UAAiB;IACzB,OAAO,WAAsB;IAC7B,QAAQ,YAA0B;IAClC,SAAS,aAA2B;IACpC,QAAQ,cAA4B;CACrC;AAED,MAAM,MAAM,iDAAiD,GAAG;IAC9D,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,aAAa,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;QACJ,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,0CAA0C,GAAG;IACvD,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,oBAAY,mCAAmC;IAC7C,UAAU,QAAY;IACtB,QAAQ,UAAiB;IACzB,OAAO,WAAsB;IAC7B,QAAQ,YAA0B;IAClC,SAAS,aAA2B;IACpC,QAAQ,cAA4B;CACrC;AAGD,oBAAY,6BAA6B;IACvC,UAAU,QAAY;IACtB,QAAQ,UAAiB;IACzB,OAAO,WAAsB;IAC7B,QAAQ,YAA0B;IAClC,SAAS,aAA2B;IACpC,QAAQ,cAA4B;CACrC;AACD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,EAAE;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,uCAAuC,GAAG,oBAAoB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAGF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B,EAAE,MAAM,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,QAAQ,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,QAAQ,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAElB,2BAA2B,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,2BAA2B,EAAE,MAAM,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAErE,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,MAAM,MAAM,2BAA2B,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE3C,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAIF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,gBAAgB,EAAE,CAAC;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,2BAA2B,EAAE,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iCAAiC,GACzC,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,GAAG,EAAE,OAAO,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;CACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["types.ts"],"names":[],"mappings":";;;AAgCA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,8DAAkB,CAAA;IAClB,gEAAqB,CAAA;AACvB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED,IAAY,iBAWX;AAXD,WAAY,iBAAiB;IAC3B,UAAU;IACV,+EAAmB,CAAA;IACnB,oEAAc,CAAA;IACd,+EAAoB,CAAA;IACpB,2EAAmB,CAAA;IACnB,UAAU;IACV,+EAAqB,CAAA;IACrB,oFAAwB,CAAA;IACxB,0EAAoB,CAAA;IACpB,sFAA0B,CAAA;AAC5B,CAAC,EAXW,iBAAiB,iCAAjB,iBAAiB,QAW5B;AAED,IAAY,iBAQX;AARD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,2CAAsB,CAAA;IACtB,+CAA0B,CAAA;IAC1B,8CAAyB,CAAA;IACzB,uCAAkB,CAAA;IAClB,0CAAqB,CAAA;IACrB,qCAAgB,CAAA;AAClB,CAAC,EARW,iBAAiB,iCAAjB,iBAAiB,QAQ5B;AAiKD,0BAA0B;AAC1B,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,+EAAsB,CAAA;IACtB,6EAAyB,CAAA;IACzB,4EAA6B,CAAA;IAC7B,+EAAkC,CAAA;IAClC,kFAAoC,CAAA;IACpC,iFAAoC,CAAA;AACtC,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AA+FD,iCAAiC;AACjC,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACzC,qGAAsB,CAAA;IACtB,mGAAyB,CAAA;IACzB,kGAA6B,CAAA;IAC7B,qGAAkC,CAAA;IAClC,wGAAoC,CAAA;IACpC,uGAAoC,CAAA;AACtC,CAAC,EAPW,+BAA+B,+CAA/B,+BAA+B,QAO1C;AAWD,6CAA6C;AAC7C,IAAY,0CAOX;AAPD,WAAY,0CAA0C;IACpD,2HAAsB,CAAA;IACtB,yHAAyB,CAAA;IACzB,wHAA6B,CAAA;IAC7B,2HAAkC,CAAA;IAClC,8HAAoC,CAAA;IACpC,6HAAoC,CAAA;AACtC,CAAC,EAPW,0CAA0C,0DAA1C,0CAA0C,QAOrD;AA6BD,IAAY,mCAOX;AAPD,WAAY,mCAAmC;IAC7C,6GAAsB,CAAA;IACtB,2GAAyB,CAAA;IACzB,0GAA6B,CAAA;IAC7B,6GAAkC,CAAA;IAClC,gHAAoC,CAAA;IACpC,+GAAoC,CAAA;AACtC,CAAC,EAPW,mCAAmC,mDAAnC,mCAAmC,QAO9C;AAED,gCAAgC;AAChC,IAAY,6BAOX;AAPD,WAAY,6BAA6B;IACvC,iGAAsB,CAAA;IACtB,+FAAyB,CAAA;IACzB,8FAA6B,CAAA;IAC7B,iGAAkC,CAAA;IAClC,oGAAoC,CAAA;IACpC,mGAAoC,CAAA;AACtC,CAAC,EAPW,6BAA6B,6CAA7B,6BAA6B,QAOxC","sourcesContent":["import { Signer } from 'ethers';\n\nexport type Address = Lowercase<string>;\nexport type TokenName = Uppercase<string>;\n\n// -- Markets --\nexport type MarketOrderInfo = {\n counterpartyAccountIds: number[];\n exchangeId: number;\n};\n\nexport type MarketEntity = {\n id: number;\n ticker: string;\n underlyingAsset: string;\n quoteToken: string;\n markPrice: number;\n isActive: boolean;\n maxLeverage: number;\n volume24H: number;\n priceChange24H: number;\n priceChange24HPercentage: number;\n openInterest: number;\n fundingRate: number;\n description: string;\n orderInfo: MarketOrderInfo;\n tickSizeDecimals: number;\n minOrderSize: number;\n minOrderSizeBase: number;\n baseSpacing: number;\n};\n\nexport enum ReyaChainId {\n reyaNetwork = 1729,\n reyaCronos = 89346161,\n}\n\nexport enum MoneyInOutChainId {\n // mainnet\n ethereumMainnet = 1,\n opMainnet = 10,\n polygonMainnet = 137,\n arbitrumOne = 42161,\n // testnet\n polygonMumbai = 80001,\n arbitrumSepolia = 421614,\n opSepolia = 11155420,\n ethereumSepolia = 11155111,\n}\n\nexport enum CandlesResolution {\n ONE_MINUTE = '1MIN',\n FIVE_MINUTES = '5MINS',\n FIFTEEN_MINUTES = '15MINS',\n THIRTY_MINUTES = '30MINS',\n ONE_HOUR = '1HOUR',\n FOUR_HOURS = '4HOURS',\n ONE_DAY = '1DAY',\n}\n\n// -- Candles --\nexport interface Candle {\n id: string;\n startedAt: string;\n ticker: string;\n resolution: CandlesResolution;\n low: string;\n high: string;\n open: string;\n close: string;\n baseTokenVolume: string;\n usdVolume: string;\n trades: number;\n startingOpenInterest: string;\n}\n\n// -- Account --\n\nexport type Status = 'OPEN' | 'CLOSED' | 'LIQUIDATED' | 'FILLED';\nexport type Side = 'long' | 'short';\n\nexport type CollateralEntity = {\n token: string;\n percentage: number;\n balance: number;\n balanceRUSD: number;\n exchangeRate: number;\n exchangeRateChange24HPercentage: number;\n};\n\nexport type MarginAccountEntity = {\n id: number;\n name: string;\n marginRatioHealth: 'danger' | 'healthy' | 'warning';\n marginRatioPercentage: number;\n totalBalance: number;\n totalBalanceUnderlyingAsset: string;\n totalBalanceChange24HPercentage: 5;\n livePnL: number;\n livePnLUnderlyingAsset: string;\n realizedPnL: number;\n realizedPnLUnderlyingAsset: string;\n totalPositionsCount: number;\n collaterals: CollateralEntity[];\n positions: PositionEntity[];\n};\n\nexport type PositionEntity = {\n id: number;\n side: Side;\n size: number;\n base: number;\n price: number;\n markPrice: number;\n orderStatus: Status;\n realisedPnl?: number | null;\n unrealisedPnl?: number | null;\n liquidationPrice: number;\n fundingRate: number;\n market: MarketEntity;\n account: {\n name: MarginAccountEntity['name'];\n };\n};\n\nexport type TradingHistoryEntity = {\n id: number;\n price: number;\n priceUnderlyingToken: string;\n size: number;\n sizeUnderlyingToken: string;\n timestampMillisecondsUTC: number;\n};\n\nexport type OrderType = 'market';\n\nexport type PositionHistoryType =\n | 'long-trade'\n | 'short-trade'\n | 'long-liquidation'\n | 'short-liquidation';\n\nexport type PositionHistoryEntity = {\n id: number;\n action: PositionHistoryType;\n orderType: OrderType;\n base: number;\n executionPrice: number;\n realisedPnl?: number | null;\n fees: number;\n timestamp: number;\n market: MarketEntity;\n};\n\nexport type LpPoolEntity = {\n id: number;\n name: string;\n description: string;\n longDescription: string;\n readMoreLink: string;\n currentAPY: number;\n apyChange24H: number;\n tokenAddress: Address;\n token: string;\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferFromMAToPoolAmount: number;\n minTransferFromPoolToMAAmount: number;\n stepSize: number;\n allowedChainsForLiquidity: MoneyInOutChainId[];\n};\n\nexport type LpWithdrawBalanceEntity = {\n withdrawableBalance: number;\n poolSharePrice: number;\n accountShareBalance: number;\n};\n\nexport type TransactionHistoryType = 'deposit' | 'withdrawal';\n\nexport type LpTransactionHistoryEntity = {\n id: number;\n type: TransactionHistoryType;\n token: string;\n amount: number;\n transactionLink: string;\n timestamp: number;\n};\n\nexport type LpPositionEntity = {\n id: number;\n capitalInvested: number;\n currentBalance: number;\n pnl: number;\n lpPool: LpPoolEntity;\n};\n\nexport type MarginAccountTransactionHistoryType =\n | 'deposit'\n | 'withdrawal'\n | 'transfer'\n | 'auto_exchange';\n\nexport type MarginAccountTransactionStatus = 'confirmed' | 'pending';\n\nexport type MarginAccountTransactionHistoryEntity = {\n id: number;\n type: MarginAccountTransactionHistoryType;\n token: string;\n amount: number;\n transactionLink: string;\n status: MarginAccountTransactionStatus;\n timestamp: number;\n};\n\nexport type TokenEntity = {\n name: TokenName;\n address: Address;\n};\n// --- Lp Pool Balance ---\nexport enum LpBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\nexport type GetLpPoolBalanceChartDataResult = {\n data: {\n timestampInMs: number;\n value: number;\n }[];\n tvl: number;\n tvlChangePercentage: number;\n apy: number;\n apyChangePercentage: number;\n};\n\n// - LP Account Performance -\nexport type GetLpPoolPerformanceChartDataResult = {\n capitalInvestedData: {\n timestampInMs: number;\n value: number;\n }[];\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n capitalInvested: number;\n capitalInvestedChangePercentage: number;\n};\n\nexport type SocketTokenConnectors = {\n deposit: Address;\n withdraw: Address;\n};\n\nexport type GetSocketConnectorsParams = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n};\n\nexport type GetSocketControllerParams = {\n reyaChainId: ReyaChainId;\n tokenName: TokenName;\n};\n\nexport type GetSocketVaultParams = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n};\n\nexport type GetMoneyInOutChainIdFromReyaConnectorParams = {\n reyaChainId: ReyaChainId;\n tokenName: TokenName;\n socketConnector: Address;\n};\n\nexport type GetSocketBridgeTimeParams = {\n moneyInOutChainId: MoneyInOutChainId;\n};\n\nexport type GetSocketBridgeTimeResult = {\n bridgeTimeInMS: number;\n};\n\nexport type SocketDepositFeesEntry = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n fees: bigint;\n};\n\nexport type SocketWithdrawFeesEntry = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n fees: bigint;\n};\n\nexport type SocketDepositFees = {\n fees: bigint;\n feesInUnderlyingToken: number;\n underlyingTokenName: TokenName;\n};\n\nexport type SocketWithdrawFees = {\n fees: bigint;\n feesInUnderlyingToken: number;\n underlyingTokenName: TokenName;\n};\n\nexport type GetSocketWithdrawFeesParams = {\n reyaChainId: ReyaChainId;\n tokenAddress: TokenEntity['address'];\n};\n\nexport type GetSocketWithdrawFeesResult = {\n fees: number;\n};\n\n// --- Margin Account Balance ---\nexport enum MarginAccountBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\nexport type GetMarginAccountBalanceChartDataResult = {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\n// --- Margin Account Collaterals Balance ---\nexport enum MarginAccountCollateralsBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\nexport type GetMarginAccountCollateralsBalanceChartDataResult = {\n data: {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n token: string;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\nexport type OwnerMetadataEntity = {\n address: Address;\n coreSigNonce: number;\n poolSigNonce: number;\n};\n\nexport type GetAllMarginAccountsBalanceChartDataResult = {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\nexport enum AllMarginAccountsBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\n// --- Funding Rate History ----\nexport enum FundingRateHistoryGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\nexport type GetFundingRateChartDataResult = {\n fundingRateData: {\n timestampInMs: number;\n value: number;\n }[];\n fundingRate: number;\n};\n\nexport type GetERC20AllowanceParams = {\n walletAddress: string;\n tokenAddress: LpPoolEntity['tokenAddress'];\n spenderAddress: string;\n subject: Signer;\n};\n\nexport type DepthSimulationState = {\n spotPrice: number;\n maxOrderSizeLong: number;\n maxOrderSizeShort: number;\n netExposure: number;\n};\n\nexport type GetLpPoolDepthChartSimulationDataResult = DepthSimulationState;\n\nexport type SignatureData = {\n signature: string;\n timestamp: number;\n walletAddress: Address;\n version: string;\n};\n\nexport type SaveSignatureResult = {\n signatureSavedSuccessfully: boolean;\n};\n\n// --- Community ----\nexport type VoteDetailsEntity = {\n id: number;\n startDate: number; // timestamp in UTC milliseconds\n endDate: number; // timestamp in UTC milliseconds\n percentageToPass: number; // Example: 4%\n yesCount: number;\n noCount: number;\n voteCountToPass: number; // Example: 1453\n};\n\nexport type VoteStatusEntity = {\n votingPower: number;\n hasVoted: boolean;\n};\n\n// --- XP ----\nexport type XPEntity = {\n value: number;\n valueTimestampMilliseconds: number;\n rate: number;\n};\n\nexport type GetAccountLGEStatusParams = {\n address: string; // wallet address\n};\n\nexport type GetAccountLGEStatusResult = {\n xp: XPEntity;\n currentBoost: number;\n deposited: number;\n currentTVL: number;\n};\n\nexport type GetAccountTradingXPParams = {\n address: string; // wallet address\n};\n\nexport type GetAccountTradingXPResult = {\n xp: XPEntity;\n currentBoost: number;\n openBase: number;\n};\n\nexport type GetLGEBoostRateParams = void;\n\nexport type GetLGEBoostRateResult = {\n boostRate: number;\n // 0 - 100\n boostRateProgressPercentage: number;\n};\n\nexport type LeaderboardEntity = {\n address: string;\n currentBoost: number;\n liquidityXp: number;\n // current rank for user (fish, whale, shrimp)\n rank: number;\n // leaderboard ranking 1,2,3...1230,...\n ranking: number;\n tradingXp: number;\n referralXp: number;\n voltzXp: number;\n totalXp: XPEntity;\n};\n\nexport type UserLeaderboardDataEntity = LeaderboardEntity & {\n claimedRank: number;\n currentRankPoints: number;\n nextRankPoints: number;\n};\n\nexport type GetLeaderboardParams = {\n page: number;\n perPage: number;\n};\n\nexport type GetLeaderboardResult = {\n data: LeaderboardEntity[];\n updateTimestampMilliseconds: number;\n totalCount: number;\n};\n\nexport type ClaimRankParams = {\n address: string;\n};\n\nexport type ClaimRankResult = {\n success: boolean;\n};\n\nexport type GetUserLeaderboardDataParams = {\n address: string;\n};\n\nexport type GetUserLeaderboardDataResult = UserLeaderboardDataEntity;\n\nexport type GetUserGameStatusParams = { address: string };\n\nexport type GetUserGameStatusResult = {\n bodyId: string;\n status: 'notStarted' | 'notLockedIn' | 'lockedIn' | 'expired';\n boostRate: number;\n nextBoostStartTimestampMilliseconds: number;\n};\n\nexport type GenerateGameBoostRateParams = { address: string; bodyId: string };\n\nexport type GenerateGameBoostRateResult = { boostRate: number };\n\nexport type LockGameBoostRateParams = { address: string };\n\nexport type LockGameBoostRateResult = void;\n\nexport type GetWalletReferralDetailsParams = {\n address: string;\n};\n\nexport type GetWalletReferralDetailsResult = {\n totalReferralsCount: number;\n totalReferralXP: number;\n};\n\nexport type GetLockGameBoostTwitterUrlParams = {\n lockedInBoost: number;\n referralURL: string;\n};\n\nexport type GetLockGameBoostTwitterUrlResult = {\n tweetURL: string;\n};\n\nexport type GetReferralTwitterUrlParams = {\n referralURL: string;\n};\n\nexport type GetReferralTwitterUrlResult = {\n tweetURL: string;\n};\n\nexport type TokenEntityWithMinValue = TokenEntity & {\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferAmount: number;\n};\n\nexport type TokenInfo = {\n name: TokenName;\n address: Address;\n decimals: number;\n isRUSDUnderlying: boolean;\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferAmount: number;\n};\n\n// --- TOS ----\n\nexport type TRMRiskAssessment = {\n accountExternalId: string;\n address: string;\n addressRiskIndicators: TMRRiskIndicator[];\n addressSubmitted: string;\n chain: string;\n entities: TRMEntity[];\n trmAppUrl: string;\n};\n\nexport type TMRRiskIndicator = {\n category: string;\n categoryId: string;\n categoryRiskScoreLevel: number;\n categoryRiskScoreLevelLabel: string;\n incomingVolumeUsd: string;\n outgoingVolumeUsd: string;\n riskType: string;\n totalVolumeUsd: string;\n};\n\nexport type TRMEntity = {\n category: string;\n categoryId: string;\n entity: string;\n riskScoreLevel: number;\n riskScoreLevelLabel: string;\n trmAppUrl: string;\n trmUrn: string;\n};\n\nexport type ToSVersionDetails = {\n text: string;\n version: string;\n creationTimestamp: number; // in MS\n};\n\nexport type SocketBridgeTransactionPoolStatus =\n | 'pending'\n | 'confirmed'\n | 'failed';\n\nexport type IpInfo = {\n ip: string;\n hostname: string;\n city: string;\n region: string;\n country: string;\n loc: string;\n org: string;\n postal: string;\n timezone: string;\n privacy: {\n vpn: boolean;\n proxy: boolean;\n tor: boolean;\n relay: boolean;\n hosting: boolean;\n service: string;\n };\n countryCode: string;\n countryFlag: {\n emoji: string;\n unicode: string;\n };\n countryFlagURL: string;\n countryCurrency: {\n code: string;\n symbol: string;\n };\n continent: {\n code: string;\n name: string;\n };\n isEU: boolean;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["types.ts"],"names":[],"mappings":";;;AAgCA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,8DAAkB,CAAA;IAClB,gEAAqB,CAAA;AACvB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED,IAAY,iBAWX;AAXD,WAAY,iBAAiB;IAC3B,UAAU;IACV,+EAAmB,CAAA;IACnB,oEAAc,CAAA;IACd,+EAAoB,CAAA;IACpB,2EAAmB,CAAA;IACnB,UAAU;IACV,+EAAqB,CAAA;IACrB,oFAAwB,CAAA;IACxB,0EAAoB,CAAA;IACpB,sFAA0B,CAAA;AAC5B,CAAC,EAXW,iBAAiB,iCAAjB,iBAAiB,QAW5B;AAED,IAAY,iBAQX;AARD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,2CAAsB,CAAA;IACtB,+CAA0B,CAAA;IAC1B,8CAAyB,CAAA;IACzB,uCAAkB,CAAA;IAClB,0CAAqB,CAAA;IACrB,qCAAgB,CAAA;AAClB,CAAC,EARW,iBAAiB,iCAAjB,iBAAiB,QAQ5B;AAiKD,0BAA0B;AAC1B,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,+EAAsB,CAAA;IACtB,6EAAyB,CAAA;IACzB,4EAA6B,CAAA;IAC7B,+EAAkC,CAAA;IAClC,kFAAoC,CAAA;IACpC,iFAAoC,CAAA;AACtC,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AA+FD,iCAAiC;AACjC,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACzC,qGAAsB,CAAA;IACtB,mGAAyB,CAAA;IACzB,kGAA6B,CAAA;IAC7B,qGAAkC,CAAA;IAClC,wGAAoC,CAAA;IACpC,uGAAoC,CAAA;AACtC,CAAC,EAPW,+BAA+B,+CAA/B,+BAA+B,QAO1C;AAWD,6CAA6C;AAC7C,IAAY,0CAOX;AAPD,WAAY,0CAA0C;IACpD,2HAAsB,CAAA;IACtB,yHAAyB,CAAA;IACzB,wHAA6B,CAAA;IAC7B,2HAAkC,CAAA;IAClC,8HAAoC,CAAA;IACpC,6HAAoC,CAAA;AACtC,CAAC,EAPW,0CAA0C,0DAA1C,0CAA0C,QAOrD;AA6BD,IAAY,mCAOX;AAPD,WAAY,mCAAmC;IAC7C,6GAAsB,CAAA;IACtB,2GAAyB,CAAA;IACzB,0GAA6B,CAAA;IAC7B,6GAAkC,CAAA;IAClC,gHAAoC,CAAA;IACpC,+GAAoC,CAAA;AACtC,CAAC,EAPW,mCAAmC,mDAAnC,mCAAmC,QAO9C;AAED,gCAAgC;AAChC,IAAY,6BAOX;AAPD,WAAY,6BAA6B;IACvC,iGAAsB,CAAA;IACtB,+FAAyB,CAAA;IACzB,8FAA6B,CAAA;IAC7B,iGAAkC,CAAA;IAClC,oGAAoC,CAAA;IACpC,mGAAoC,CAAA;AACtC,CAAC,EAPW,6BAA6B,6CAA7B,6BAA6B,QAOxC","sourcesContent":["import { Signer } from 'ethers';\n\nexport type Address = Lowercase<string>;\nexport type TokenName = Uppercase<string>;\n\n// -- Markets --\nexport type MarketOrderInfo = {\n counterpartyAccountIds: number[];\n exchangeId: number;\n};\n\nexport type MarketEntity = {\n id: number;\n ticker: string;\n underlyingAsset: string;\n quoteToken: string;\n markPrice: number;\n isActive: boolean;\n maxLeverage: number;\n volume24H: number;\n priceChange24H: number;\n priceChange24HPercentage: number;\n openInterest: number;\n fundingRate: number;\n description: string;\n orderInfo: MarketOrderInfo;\n tickSizeDecimals: number;\n minOrderSize: number;\n minOrderSizeBase: number;\n baseSpacing: number;\n};\n\nexport enum ReyaChainId {\n reyaNetwork = 1729,\n reyaCronos = 89346161,\n}\n\nexport enum MoneyInOutChainId {\n // mainnet\n ethereumMainnet = 1,\n opMainnet = 10,\n polygonMainnet = 137,\n arbitrumOne = 42161,\n // testnet\n polygonMumbai = 80001,\n arbitrumSepolia = 421614,\n opSepolia = 11155420,\n ethereumSepolia = 11155111,\n}\n\nexport enum CandlesResolution {\n ONE_MINUTE = '1MIN',\n FIVE_MINUTES = '5MINS',\n FIFTEEN_MINUTES = '15MINS',\n THIRTY_MINUTES = '30MINS',\n ONE_HOUR = '1HOUR',\n FOUR_HOURS = '4HOURS',\n ONE_DAY = '1DAY',\n}\n\n// -- Candles --\nexport interface Candle {\n id: string;\n startedAt: string;\n ticker: string;\n resolution: CandlesResolution;\n low: string;\n high: string;\n open: string;\n close: string;\n baseTokenVolume: string;\n usdVolume: string;\n trades: number;\n startingOpenInterest: string;\n}\n\n// -- Account --\n\nexport type Status = 'OPEN' | 'CLOSED' | 'LIQUIDATED' | 'FILLED';\nexport type Side = 'long' | 'short';\n\nexport type CollateralEntity = {\n token: string;\n percentage: number;\n balance: number;\n balanceRUSD: number;\n exchangeRate: number;\n exchangeRateChange24HPercentage: number;\n};\n\nexport type MarginAccountEntity = {\n id: number;\n name: string;\n marginRatioHealth: 'danger' | 'healthy' | 'warning';\n marginRatioPercentage: number;\n totalBalance: number;\n totalBalanceUnderlyingAsset: string;\n totalBalanceChange24HPercentage: 5;\n livePnL: number;\n livePnLUnderlyingAsset: string;\n realizedPnL: number;\n realizedPnLUnderlyingAsset: string;\n totalPositionsCount: number;\n collaterals: CollateralEntity[];\n positions: PositionEntity[];\n};\n\nexport type PositionEntity = {\n id: number;\n side: Side;\n size: number;\n base: number;\n price: number;\n markPrice: number;\n orderStatus: Status;\n realisedPnl?: number | null;\n unrealisedPnl?: number | null;\n liquidationPrice: number;\n fundingRate: number;\n market: MarketEntity;\n account: {\n name: MarginAccountEntity['name'];\n };\n};\n\nexport type TradingHistoryEntity = {\n id: number;\n price: number;\n priceUnderlyingToken: string;\n size: number;\n sizeUnderlyingToken: string;\n timestampMillisecondsUTC: number;\n};\n\nexport type OrderType = 'market';\n\nexport type PositionHistoryType =\n | 'long-trade'\n | 'short-trade'\n | 'long-liquidation'\n | 'short-liquidation';\n\nexport type PositionHistoryEntity = {\n id: number;\n action: PositionHistoryType;\n orderType: OrderType;\n base: number;\n executionPrice: number;\n realisedPnl?: number | null;\n fees: number;\n timestamp: number;\n market: MarketEntity;\n};\n\nexport type LpPoolEntity = {\n id: number;\n name: string;\n description: string;\n longDescription: string;\n readMoreLink: string;\n currentAPY: number;\n apyChange24H: number;\n tokenAddress: Address;\n token: string;\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferFromMAToPoolAmount: number;\n minTransferFromPoolToMAAmount: number;\n stepSize: number;\n allowedChainsForLiquidity: MoneyInOutChainId[];\n};\n\nexport type LpWithdrawBalanceEntity = {\n withdrawableBalance: number;\n poolSharePrice: number;\n accountShareBalance: number;\n};\n\nexport type TransactionHistoryType = 'deposit' | 'withdrawal';\n\nexport type LpTransactionHistoryEntity = {\n id: number;\n type: TransactionHistoryType;\n token: string;\n amount: number;\n transactionLink: string;\n timestamp: number;\n};\n\nexport type LpPositionEntity = {\n id: number;\n capitalInvested: number;\n currentBalance: number;\n pnl: number;\n lpPool: LpPoolEntity;\n};\n\nexport type MarginAccountTransactionHistoryType =\n | 'deposit'\n | 'withdrawal'\n | 'transfer'\n | 'auto_exchange';\n\nexport type MarginAccountTransactionStatus = 'confirmed' | 'pending';\n\nexport type MarginAccountTransactionHistoryEntity = {\n id: number;\n type: MarginAccountTransactionHistoryType;\n token: string;\n amount: number;\n transactionLink: string;\n status: MarginAccountTransactionStatus;\n timestamp: number;\n};\n\nexport type TokenEntity = {\n name: TokenName;\n address: Address;\n};\n// --- Lp Pool Balance ---\nexport enum LpBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\nexport type GetLpPoolBalanceChartDataResult = {\n data: {\n timestampInMs: number;\n value: number;\n }[];\n tvl: number;\n tvlChangePercentage: number;\n apy: number;\n apyChangePercentage: number;\n};\n\n// - LP Account Performance -\nexport type GetLpPoolPerformanceChartDataResult = {\n capitalInvestedData: {\n timestampInMs: number;\n value: number;\n }[];\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n capitalInvested: number;\n capitalInvestedChangePercentage: number;\n};\n\nexport type SocketTokenConnectors = {\n deposit: Address;\n withdraw: Address;\n};\n\nexport type GetSocketConnectorsParams = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n};\n\nexport type GetSocketControllerParams = {\n reyaChainId: ReyaChainId;\n tokenName: TokenName;\n};\n\nexport type GetSocketVaultParams = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n};\n\nexport type GetMoneyInOutChainIdFromReyaConnectorParams = {\n reyaChainId: ReyaChainId;\n tokenName: TokenName;\n socketConnector: Address;\n};\n\nexport type GetSocketBridgeTimeParams = {\n moneyInOutChainId: MoneyInOutChainId;\n};\n\nexport type GetSocketBridgeTimeResult = {\n bridgeTimeInMS: number;\n};\n\nexport type SocketDepositFeesEntry = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n fees: bigint;\n};\n\nexport type SocketWithdrawFeesEntry = {\n moneyInOutChainId: MoneyInOutChainId;\n tokenName: TokenName;\n fees: bigint;\n};\n\nexport type SocketDepositFees = {\n fees: bigint;\n feesInUnderlyingToken: number;\n underlyingTokenName: TokenName;\n};\n\nexport type SocketWithdrawFees = {\n fees: bigint;\n feesInUnderlyingToken: number;\n underlyingTokenName: TokenName;\n};\n\nexport type GetSocketWithdrawFeesParams = {\n reyaChainId: ReyaChainId;\n tokenAddress: TokenEntity['address'];\n};\n\nexport type GetSocketWithdrawFeesResult = {\n fees: number;\n};\n\n// --- Margin Account Balance ---\nexport enum MarginAccountBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\nexport type GetMarginAccountBalanceChartDataResult = {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\n// --- Margin Account Collaterals Balance ---\nexport enum MarginAccountCollateralsBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\nexport type GetMarginAccountCollateralsBalanceChartDataResult = {\n data: {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n token: string;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\nexport type OwnerMetadataEntity = {\n address: Address;\n coreSigNonce: number;\n poolSigNonce: number;\n};\n\nexport type GetAllMarginAccountsBalanceChartDataResult = {\n balanceData: {\n timestampInMs: number;\n value: number;\n }[];\n balance: number;\n balanceChangePercentage: number;\n};\n\nexport enum AllMarginAccountsBalanceGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\n\n// --- Funding Rate History ----\nexport enum FundingRateHistoryGranularity {\n ONE_MINUTE = 60 * 1000,\n ONE_HOUR = 60 * 60 * 1000,\n ONE_DAY = 24 * 60 * 60 * 1000,\n ONE_WEEK = 7 * 24 * 60 * 60 * 1000,\n ONE_MONTH = 30 * 24 * 60 * 60 * 1000,\n ONE_YEAR = 365 * 24 * 60 * 60 * 1000,\n}\nexport type GetFundingRateChartDataResult = {\n fundingRateData: {\n timestampInMs: number;\n value: number;\n }[];\n fundingRate: number;\n};\n\nexport type GetERC20AllowanceParams = {\n walletAddress: string;\n tokenAddress: LpPoolEntity['tokenAddress'];\n spenderAddress: string;\n subject: Signer;\n};\n\nexport type DepthSimulationState = {\n spotPrice: number;\n maxOrderSizeLong: number;\n maxOrderSizeShort: number;\n netExposure: number;\n};\n\nexport type GetLpPoolDepthChartSimulationDataResult = DepthSimulationState;\n\nexport type SignatureData = {\n signature: string;\n timestamp: number;\n walletAddress: Address;\n version: string;\n};\n\nexport type SaveSignatureResult = {\n signatureSavedSuccessfully: boolean;\n};\n\n// --- Community ----\nexport type VoteDetailsEntity = {\n id: number;\n startDate: number; // timestamp in UTC milliseconds\n endDate: number; // timestamp in UTC milliseconds\n percentageToPass: number; // Example: 4%\n yesCount: number;\n noCount: number;\n voteCountToPass: number; // Example: 1453\n};\n\nexport type VoteStatusEntity = {\n votingPower: number;\n hasVoted: boolean;\n};\n\n// --- XP ----\nexport type XPEntity = {\n value: number;\n valueTimestampMilliseconds: number;\n rate: number;\n};\n\nexport type GetAccountLGEStatusParams = {\n address: string; // wallet address\n};\n\nexport type GetAccountLGEStatusResult = {\n xp: XPEntity;\n currentBoost: number;\n deposited: number;\n currentTVL: number;\n currentLiquidity: number;\n};\n\nexport type GetAccountTradingXPParams = {\n address: string; // wallet address\n};\n\nexport type GetAccountTradingXPResult = {\n xp: XPEntity;\n currentBoost: number;\n openBase: number;\n};\n\nexport type GetLGEBoostRateParams = void;\n\nexport type GetLGEBoostRateResult = {\n boostRate: number;\n // 0 - 100\n boostRateProgressPercentage: number;\n};\n\nexport type LeaderboardEntity = {\n address: string;\n currentBoost: number;\n liquidityXp: number;\n // current rank for user (fish, whale, shrimp)\n rank: number;\n // leaderboard ranking 1,2,3...1230,...\n ranking: number;\n tradingXp: number;\n referralXp: number;\n voltzXp: number;\n totalXp: XPEntity;\n};\n\nexport type UserLeaderboardDataEntity = LeaderboardEntity & {\n claimedRank: number;\n currentRankPoints: number;\n nextRankPoints: number;\n};\n\nexport type GetLeaderboardParams = {\n page: number;\n perPage: number;\n};\n\nexport type GetLeaderboardResult = {\n data: LeaderboardEntity[];\n updateTimestampMilliseconds: number;\n totalCount: number;\n};\n\nexport type ClaimRankParams = {\n address: string;\n};\n\nexport type ClaimRankResult = {\n success: boolean;\n};\n\nexport type GetUserLeaderboardDataParams = {\n address: string;\n};\n\nexport type GetUserLeaderboardDataResult = UserLeaderboardDataEntity;\n\nexport type GetUserGameStatusParams = { address: string };\n\nexport type GetUserGameStatusResult = {\n bodyId: string;\n status: 'notStarted' | 'notLockedIn' | 'lockedIn' | 'expired';\n boostRate: number;\n nextBoostStartTimestampMilliseconds: number;\n};\n\nexport type GenerateGameBoostRateParams = { address: string; bodyId: string };\n\nexport type GenerateGameBoostRateResult = { boostRate: number };\n\nexport type LockGameBoostRateParams = { address: string };\n\nexport type LockGameBoostRateResult = void;\n\nexport type GetWalletReferralDetailsParams = {\n address: string;\n};\n\nexport type GetWalletReferralDetailsResult = {\n totalReferralsCount: number;\n totalReferralXP: number;\n};\n\nexport type GetLockGameBoostTwitterUrlParams = {\n lockedInBoost: number;\n referralURL: string;\n};\n\nexport type GetLockGameBoostTwitterUrlResult = {\n tweetURL: string;\n};\n\nexport type GetReferralTwitterUrlParams = {\n referralURL: string;\n};\n\nexport type GetReferralTwitterUrlResult = {\n tweetURL: string;\n};\n\nexport type TokenEntityWithMinValue = TokenEntity & {\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferAmount: number;\n};\n\nexport type TokenInfo = {\n name: TokenName;\n address: Address;\n decimals: number;\n isRUSDUnderlying: boolean;\n minDepositAmount: number;\n minWithdrawAmount: number;\n minTransferAmount: number;\n};\n\n// --- TOS ----\n\nexport type TRMRiskAssessment = {\n accountExternalId: string;\n address: string;\n addressRiskIndicators: TMRRiskIndicator[];\n addressSubmitted: string;\n chain: string;\n entities: TRMEntity[];\n trmAppUrl: string;\n};\n\nexport type TMRRiskIndicator = {\n category: string;\n categoryId: string;\n categoryRiskScoreLevel: number;\n categoryRiskScoreLevelLabel: string;\n incomingVolumeUsd: string;\n outgoingVolumeUsd: string;\n riskType: string;\n totalVolumeUsd: string;\n};\n\nexport type TRMEntity = {\n category: string;\n categoryId: string;\n entity: string;\n riskScoreLevel: number;\n riskScoreLevelLabel: string;\n trmAppUrl: string;\n trmUrn: string;\n};\n\nexport type ToSVersionDetails = {\n text: string;\n version: string;\n creationTimestamp: number; // in MS\n};\n\nexport type SocketBridgeTransactionPoolStatus =\n | 'pending'\n | 'confirmed'\n | 'failed';\n\nexport type IpInfo = {\n ip: string;\n hostname: string;\n city: string;\n region: string;\n country: string;\n loc: string;\n org: string;\n postal: string;\n timezone: string;\n privacy: {\n vpn: boolean;\n proxy: boolean;\n tor: boolean;\n relay: boolean;\n hosting: boolean;\n service: string;\n };\n countryCode: string;\n countryFlag: {\n emoji: string;\n unicode: string;\n };\n countryFlagURL: string;\n countryCurrency: {\n code: string;\n symbol: string;\n };\n continent: {\n code: string;\n name: string;\n };\n isEU: boolean;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"generate:coverage-badges": "npx istanbul-badges-readme --silent"
|
|
43
43
|
},
|
|
44
44
|
"packageManager": "pnpm@8.3.1",
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "a963b1f81bf00f9d71a304b6004886ca5a54a430"
|
|
46
46
|
}
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
PositionInfoMarketConfiguration,
|
|
15
15
|
RiskMatrix,
|
|
16
16
|
RiskMultipliersConfiguration,
|
|
17
|
+
EditCollateralAction,
|
|
17
18
|
} from './types';
|
|
18
19
|
import { amountNormalizer } from '../../utils';
|
|
19
20
|
|
|
@@ -174,6 +175,141 @@ export class ExposureCommand {
|
|
|
174
175
|
};
|
|
175
176
|
}
|
|
176
177
|
|
|
178
|
+
getEditCollateralActionsToCoverMargin(
|
|
179
|
+
requiredMargin: number,
|
|
180
|
+
): EditCollateralAction[] {
|
|
181
|
+
/*
|
|
182
|
+
* Note, this function is implicitely making an assumption that required margin can be covered by
|
|
183
|
+
* the account without breaching account IMR
|
|
184
|
+
* */
|
|
185
|
+
const editCollateralActions: EditCollateralAction[] = [];
|
|
186
|
+
let marginToCover = requiredMargin;
|
|
187
|
+
|
|
188
|
+
const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);
|
|
189
|
+
|
|
190
|
+
const tokenMarginInfoPerAsset =
|
|
191
|
+
ExposureCommand.calculateTokenMarginInfoPerAsset(
|
|
192
|
+
this.groupedByCollateral,
|
|
193
|
+
this.rootCollateralPoolId,
|
|
194
|
+
this.riskMatrices,
|
|
195
|
+
this.riskMultipliers,
|
|
196
|
+
uniqueQuoteCollaterals,
|
|
197
|
+
this.realizedPnLSum,
|
|
198
|
+
this.unrealizedPnLSum,
|
|
199
|
+
this.positionInfoMarketConfiguration,
|
|
200
|
+
this.oraclePricePerMarket,
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// todo: p2: consider prioritising rUSD when looping through token infos & document math in comments
|
|
204
|
+
for (const tokenInfo of tokenMarginInfoPerAsset) {
|
|
205
|
+
if (tokenInfo.marginBalance < 0) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// todo: p1: haircut and exchange rate adjustment should not be done for rUSD
|
|
210
|
+
// does exchangeInfo currently return haircut as zero and price as 1?
|
|
211
|
+
// todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl
|
|
212
|
+
|
|
213
|
+
const exchangeInfo = this.exchangeInfoPerAsset.find((exchangeInfo) => {
|
|
214
|
+
return tokenInfo.assetAddress === exchangeInfo.tokenAddress;
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
if (!exchangeInfo) {
|
|
218
|
+
throw new Error(
|
|
219
|
+
'Unable to retrieve exchange info when calculating collaterals needed to cover margin',
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const marginBalanceWithHaircutInRUSD =
|
|
224
|
+
ExposureCommand.exchangeWithPriceHaircut(
|
|
225
|
+
tokenInfo.marginBalance,
|
|
226
|
+
exchangeInfo.price,
|
|
227
|
+
exchangeInfo.priceHaircut,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
if (marginBalanceWithHaircutInRUSD > marginToCover) {
|
|
231
|
+
const collateralDelta =
|
|
232
|
+
-ExposureCommand.reverseExchangeWithPriceHaircut(
|
|
233
|
+
marginToCover,
|
|
234
|
+
exchangeInfo.price,
|
|
235
|
+
exchangeInfo.priceHaircut,
|
|
236
|
+
);
|
|
237
|
+
editCollateralActions.push({
|
|
238
|
+
collateralAddress: tokenInfo.assetAddress,
|
|
239
|
+
collateralDelta: collateralDelta,
|
|
240
|
+
});
|
|
241
|
+
break;
|
|
242
|
+
} else {
|
|
243
|
+
editCollateralActions.push({
|
|
244
|
+
collateralAddress: tokenInfo.assetAddress,
|
|
245
|
+
collateralDelta: -tokenInfo.marginBalance,
|
|
246
|
+
});
|
|
247
|
+
marginToCover = marginToCover - marginBalanceWithHaircutInRUSD;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return editCollateralActions;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
getUsdNodeMarginInfoPostEditCollaterals(
|
|
254
|
+
editCollateralActions: EditCollateralAction[],
|
|
255
|
+
) {
|
|
256
|
+
// todo: check if there's a way to simplify this function & deprecate the single edit collateral sim below as it's a
|
|
257
|
+
// subset of this function
|
|
258
|
+
|
|
259
|
+
// perform deep copy of the object
|
|
260
|
+
const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(
|
|
261
|
+
this.groupedByCollateral,
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);
|
|
265
|
+
const uniqueTokenAddresses = [...this.uniqueTokenAddresses];
|
|
266
|
+
|
|
267
|
+
// counterfactual update deep copy
|
|
268
|
+
|
|
269
|
+
for (const action of editCollateralActions) {
|
|
270
|
+
if (groupedByCollateral[action.collateralAddress]) {
|
|
271
|
+
groupedByCollateral[action.collateralAddress] = {
|
|
272
|
+
...groupedByCollateral[action.collateralAddress],
|
|
273
|
+
amount:
|
|
274
|
+
groupedByCollateral[action.collateralAddress].amount +
|
|
275
|
+
action.collateralDelta,
|
|
276
|
+
};
|
|
277
|
+
} else {
|
|
278
|
+
groupedByCollateral[action.collateralAddress] = {
|
|
279
|
+
accountId: this.accountId,
|
|
280
|
+
collateral: action.collateralAddress,
|
|
281
|
+
amount: action.collateralDelta,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
uniqueQuoteCollaterals.add(action.collateralAddress);
|
|
286
|
+
|
|
287
|
+
if (!this.uniqueTokenAddresses.includes(action.collateralAddress)) {
|
|
288
|
+
uniqueTokenAddresses.push(action.collateralAddress);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const tokenMarginInfoPerAsset =
|
|
293
|
+
ExposureCommand.calculateTokenMarginInfoPerAsset(
|
|
294
|
+
groupedByCollateral,
|
|
295
|
+
this.rootCollateralPoolId,
|
|
296
|
+
this.riskMatrices,
|
|
297
|
+
this.riskMultipliers,
|
|
298
|
+
uniqueQuoteCollaterals,
|
|
299
|
+
this.realizedPnLSum,
|
|
300
|
+
this.unrealizedPnLSum,
|
|
301
|
+
this.positionInfoMarketConfiguration,
|
|
302
|
+
this.oraclePricePerMarket,
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
return ExposureCommand.getUsdNodeMarginInfo(
|
|
306
|
+
this.rootCollateralPoolId,
|
|
307
|
+
uniqueTokenAddresses,
|
|
308
|
+
this.exchangeInfoPerAsset,
|
|
309
|
+
tokenMarginInfoPerAsset,
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
|
|
177
313
|
getUsdNodeMarginInfoPostEditCollateral(
|
|
178
314
|
collateralDelta: number,
|
|
179
315
|
collateralAddress: string,
|
|
@@ -239,13 +375,18 @@ export class ExposureCommand {
|
|
|
239
375
|
): MarginInfo[] {
|
|
240
376
|
const tokenMarginInfoPerAsset: MarginInfo[] = [];
|
|
241
377
|
|
|
242
|
-
|
|
378
|
+
// todo: p2: investigate the ts-expect-error cases below
|
|
379
|
+
// @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type
|
|
380
|
+
const uniqueQuoteTokens: Lowercase<string>[] = Array.from(
|
|
381
|
+
uniqueQuoteCollaterals,
|
|
382
|
+
);
|
|
243
383
|
|
|
244
|
-
|
|
384
|
+
// @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type
|
|
385
|
+
const tokenUnion: Set<Lowercase<string>> = new Set([
|
|
245
386
|
...Object.keys(groupedByCollateral),
|
|
246
387
|
...uniqueQuoteTokens,
|
|
247
388
|
]); // get unique union of those arrays
|
|
248
|
-
const uniqueTokenAddresses: string[] = Array.from(tokenUnion);
|
|
389
|
+
const uniqueTokenAddresses: Lowercase<string>[] = Array.from(tokenUnion);
|
|
249
390
|
|
|
250
391
|
for (const token of uniqueTokenAddresses) {
|
|
251
392
|
tokenMarginInfoPerAsset.push(
|
|
@@ -470,7 +611,7 @@ export class ExposureCommand {
|
|
|
470
611
|
riskMatrices: RiskMatrix[],
|
|
471
612
|
riskMultipliers: RiskMultipliersConfiguration,
|
|
472
613
|
collateralInfo: CollateralInfo,
|
|
473
|
-
collateralAddress: string
|
|
614
|
+
collateralAddress: Lowercase<string>,
|
|
474
615
|
positions: PositionInfoMarketConfiguration[],
|
|
475
616
|
oraclePricePerMarket: MarketIdToOraclePriceMap,
|
|
476
617
|
uniqueQuoteTokens: string[],
|
|
@@ -685,6 +826,28 @@ export class ExposureCommand {
|
|
|
685
826
|
return haircutPrice.multipliedBy(quantity).toNumber();
|
|
686
827
|
}
|
|
687
828
|
|
|
829
|
+
static reverseExchangeWithPriceHaircut(
|
|
830
|
+
quantity: number,
|
|
831
|
+
price: number,
|
|
832
|
+
haircut: number,
|
|
833
|
+
) {
|
|
834
|
+
/*
|
|
835
|
+
* this operation takes quantity in rUSD terms, price between collateral token (e.g. weth) and rusd
|
|
836
|
+
* alongside the haircut between weth and rusd
|
|
837
|
+
* it then returns a quantity in collateral token terms (e.g. weth) which would return quantity if it were to be
|
|
838
|
+
* passed through the exchangeWithPriceHaircut function
|
|
839
|
+
* */
|
|
840
|
+
// todo: p2: consider abstracting haircut price calculation into separate function as duplciated
|
|
841
|
+
// For positive quantities, the haircut is `quantity * (1 - haircut)`
|
|
842
|
+
// For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.
|
|
843
|
+
const calHelper = BigNumber(quantity).gt(0)
|
|
844
|
+
? BigNumber(1).minus(haircut)
|
|
845
|
+
: BigNumber(1).div(BigNumber(1).minus(haircut));
|
|
846
|
+
const haircutPrice = BigNumber(price).multipliedBy(calHelper);
|
|
847
|
+
|
|
848
|
+
return BigNumber(quantity).dividedBy(haircutPrice).toNumber();
|
|
849
|
+
}
|
|
850
|
+
|
|
688
851
|
getSlippage(
|
|
689
852
|
deltaBase: number,
|
|
690
853
|
marketConfiguration: MarketConfiguration,
|
|
@@ -84,7 +84,7 @@ export type PositionInfoMarketConfiguration = PositionInfo & {
|
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
export interface MarginInfo {
|
|
87
|
-
assetAddress: string
|
|
87
|
+
assetAddress: Lowercase<string>;
|
|
88
88
|
marginBalance: number;
|
|
89
89
|
realBalance: number;
|
|
90
90
|
initialDelta: number;
|
|
@@ -131,3 +131,8 @@ export type TradeSimulationState = {
|
|
|
131
131
|
export type EditCollateralSimulationState = {
|
|
132
132
|
exposureDataAccount: ExposureCommandState;
|
|
133
133
|
};
|
|
134
|
+
|
|
135
|
+
export type EditCollateralAction = {
|
|
136
|
+
collateralDelta: number;
|
|
137
|
+
collateralAddress: Lowercase<string>;
|
|
138
|
+
};
|