@reyaxyz/api-sdk 0.103.3 → 0.104.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/dist/clients/modules/account/index.js +0 -7
- package/dist/clients/modules/account/index.js.map +1 -1
- package/dist/clients/modules/conditional-orders/index.js +49 -29
- package/dist/clients/modules/conditional-orders/index.js.map +1 -1
- package/dist/clients/modules/conditional-orders/types.js.map +1 -1
- package/dist/clients/modules/isolated-order.simulation/index.js +26 -0
- package/dist/clients/modules/isolated-order.simulation/index.js.map +1 -1
- package/dist/clients/modules/isolated-order.simulation/types.js.map +1 -1
- package/dist/clients/modules/trade.simulation/index.js +1 -0
- package/dist/clients/modules/trade.simulation/index.js.map +1 -1
- package/dist/clients/modules/trade.simulation/types.js.map +1 -1
- package/dist/clients/types.js +1 -0
- package/dist/clients/types.js.map +1 -1
- package/dist/types/clients/modules/account/index.d.ts.map +1 -1
- package/dist/types/clients/modules/conditional-orders/index.d.ts +3 -1
- package/dist/types/clients/modules/conditional-orders/index.d.ts.map +1 -1
- package/dist/types/clients/modules/conditional-orders/types.d.ts +10 -1
- package/dist/types/clients/modules/conditional-orders/types.d.ts.map +1 -1
- package/dist/types/clients/modules/isolated-order.simulation/index.d.ts +3 -0
- package/dist/types/clients/modules/isolated-order.simulation/index.d.ts.map +1 -1
- package/dist/types/clients/modules/isolated-order.simulation/types.d.ts +1 -0
- package/dist/types/clients/modules/isolated-order.simulation/types.d.ts.map +1 -1
- package/dist/types/clients/modules/trade.simulation/index.d.ts.map +1 -1
- package/dist/types/clients/modules/trade.simulation/types.d.ts +1 -0
- package/dist/types/clients/modules/trade.simulation/types.d.ts.map +1 -1
- package/dist/types/clients/types.d.ts +1 -0
- package/dist/types/clients/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/clients/modules/account/index.ts +0 -8
- package/src/clients/modules/conditional-orders/index.ts +57 -25
- package/src/clients/modules/conditional-orders/types.ts +11 -1
- package/src/clients/modules/isolated-order.simulation/index.ts +95 -0
- package/src/clients/modules/isolated-order.simulation/types.ts +1 -0
- package/src/clients/modules/trade.simulation/index.ts +1 -0
- package/src/clients/modules/trade.simulation/types.ts +1 -0
- package/src/clients/types.ts +1 -0
|
@@ -81,13 +81,6 @@ var AccountClient = /** @class */ (function (_super) {
|
|
|
81
81
|
})];
|
|
82
82
|
case 1:
|
|
83
83
|
response = _a.sent();
|
|
84
|
-
response.forEach(function (account) {
|
|
85
|
-
account.positions.forEach(function (position) {
|
|
86
|
-
if (Math.random() > 0.5) {
|
|
87
|
-
position.stopLossPrice = Math.random() * 1000;
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
84
|
return [2 /*return*/, response];
|
|
92
85
|
}
|
|
93
86
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/account/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GetMarginAccountParams,\n GetMarginAccountResult,\n GetMarginAccountsParams,\n GetMarginAccountsResult,\n GetMarginAccountTransactionHistoryParams,\n GetMarginAccountTransactionHistoryResult,\n GetMaxOrderSizeAvailableParams,\n GetMaxOrderSizeAvailableResult,\n GetMaxWithdrawBalanceForAccountParams,\n GetMaxWithdrawBalanceForAccountResult,\n GetPositionsForMarginAccountParams,\n GetPositionsForMarginAccountResult,\n GetTransactionSimulationInitialDataParams,\n GetMarginAccountBalanceChartDataParams,\n GetMarginAccountCollateralsBalanceChartDataParams,\n GetAllMarginAccountsBalanceChartDataParams,\n EditMarginAccountParams,\n CloseMarginAccountParams,\n GetAllMarginAccountsSummaryResult,\n GetAllMarginAccountsSummaryParams,\n GetEditCollateralSimulationInitialDataParams,\n EditMarginAccountResult,\n CloseMarginAccountResult,\n GetIsolatedOrderMaxSizeAvailableParams,\n GetIsolatedOrderMaxSizeAvailableResult,\n GetPositionsHistoryForMarginAccountPaginatedParams,\n GetPositionsHistoryForMarginAccountPaginatedResult,\n GetLiquidationHistoryForOwnerAddressResult,\n GetLiquidationHistoryForOwnerAddressParams,\n} from './types';\nimport {\n EditCollateralSimulationState,\n TradeSimulationState,\n GetMarginAccountCollateralsBalanceChartDataResult,\n GetMarginAccountBalanceChartDataResult,\n GetAllMarginAccountsBalanceChartDataResult,\n RestClient,\n} from '@reyaxyz/common';\n\nexport default class AccountClient extends RestClient {\n /**\n * Asynchronously retrieves a list of margin accounts associated with a specific address.\n *\n * This method makes a request to the API endpoint to fetch collateral account data. The data is filtered\n * based on the provided Ethereum address. An optional limit can be specified to control the number of\n * collateral accounts returned in the response.\n *\n * @param {GetMarginAccountsParams} params\n * @returns {Promise<GetMarginAccountsResult>} A promise that resolves to the response containing the margin\n * account data.\n * @memberof account\n * */\n\n async getMarginAccounts(\n params: GetMarginAccountsParams,\n ): Promise<GetMarginAccountsResult> {\n const uri = `/api/accounts/${params.address}`;\n const response: GetMarginAccountsResult = await this.get(uri, {\n limit: params.limit,\n });\n\n response.forEach((account) => {\n account.positions.forEach((position) => {\n if (Math.random() > 0.5) {\n position.stopLossPrice = Math.random() * 1000;\n }\n });\n });\n\n return response;\n }\n\n /**\n * Asynchronously retrieves details of a specific collateral account for a given Ethereum address.\n *\n * This method sends a request to the API to obtain detailed information about a specific collateral account\n * associated with the provided Ethereum address. The account is identified using the collateral account number.\n *\n * @param {GetMarginAccountParams} params\n * @returns {Promise<GetMarginAccountResult>} A promise that resolves to the response containing the detailed\n * information of the specified margin account.\n * @memberof account\n */\n\n async getMarginAccount(\n params: GetMarginAccountParams,\n ): Promise<GetMarginAccountResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}`;\n return this.get(uri);\n }\n\n async getPositionsForMarginAccount(\n params: GetPositionsForMarginAccountParams,\n ): Promise<GetPositionsForMarginAccountResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}/positions`;\n return this.get(uri, { limit: params.limit });\n }\n\n async getPositionsHistoryForMarginAccountPaginated(\n params: GetPositionsHistoryForMarginAccountPaginatedParams,\n ): Promise<GetPositionsHistoryForMarginAccountPaginatedResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}/positions/history/paginated`;\n return this.get(uri, {\n type: params.type,\n page: params.page,\n perPage: params.perPage,\n });\n }\n\n async getLiquidationHistoryForOwnerAddress(\n params: GetLiquidationHistoryForOwnerAddressParams,\n ): Promise<GetLiquidationHistoryForOwnerAddressResult> {\n const uri = `/api/accounts/${params.address}/positions/liquidations`;\n return this.get(uri, {\n timestampFromMS: params.timestampFromMS,\n });\n }\n\n async getMaxOrderSizeAvailable(\n params: GetMaxOrderSizeAvailableParams,\n ): Promise<GetMaxOrderSizeAvailableResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-order-size`;\n return this.get(uri, {\n marketId: params.marketId,\n direction: params.direction,\n });\n }\n\n async getIsolatedOrderMaxSizeAvailable(\n params: GetIsolatedOrderMaxSizeAvailableParams,\n ): Promise<GetIsolatedOrderMaxSizeAvailableResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-order-size-isolated`;\n return this.get(uri, {\n marketId: params.marketId,\n direction: params.direction,\n });\n }\n\n async getTransactionSimulationInitialData(\n params: GetTransactionSimulationInitialDataParams,\n ): Promise<TradeSimulationState> {\n const uri = `/api/accounts/${params.marginAccountId}/trade-simulation-data`;\n return this.get(uri, {\n marketId: params.marketId,\n });\n }\n\n async getEditCollateralSimulationInitialData(\n params: GetEditCollateralSimulationInitialDataParams,\n ): Promise<EditCollateralSimulationState> {\n const uri = `/api/accounts/${params.marginAccountId}/edit-collateral-simulation-data`;\n return this.get(uri);\n }\n\n async getMarginAccountTransactionHistory(\n params: GetMarginAccountTransactionHistoryParams,\n ): Promise<GetMarginAccountTransactionHistoryResult> {\n const uri = `/api/accounts/${params.marginAccountId}/transaction-history`;\n return this.get(uri, {\n limit: params.limit,\n });\n }\n\n async getMaxWithdrawBalanceForAccount(\n params: GetMaxWithdrawBalanceForAccountParams,\n ): Promise<GetMaxWithdrawBalanceForAccountResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-withdraw-amount`;\n return this.get(uri, {\n assetAddress: params.tokenAddress,\n });\n }\n\n async getMarginAccountBalanceChartData(\n params: GetMarginAccountBalanceChartDataParams,\n ): Promise<GetMarginAccountBalanceChartDataResult> {\n const uri = `/api/accounts/${params.marginAccountId}/balance-chart-data`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getMarginAccountCollateralsBalanceChartData(\n params: GetMarginAccountCollateralsBalanceChartDataParams,\n ): Promise<GetMarginAccountCollateralsBalanceChartDataResult> {\n const uri = `/api/accounts/${params.marginAccountId}/collaterals-balance-chart-data`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getAllMarginAccountsBalanceChart(\n params: GetAllMarginAccountsBalanceChartDataParams,\n ): Promise<GetAllMarginAccountsBalanceChartDataResult> {\n const uri = `/api/accounts/owner/${params.ownerAddress}/balance`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getAllMarginAccountsSummary(\n params: GetAllMarginAccountsSummaryParams,\n ): Promise<GetAllMarginAccountsSummaryResult> {\n const uri = `/api/accounts/owner/${params.ownerAddress}/summary`;\n return this.get(uri);\n }\n\n // TODO: Milan validate\n async editMarginAccount(\n params: EditMarginAccountParams,\n ): Promise<EditMarginAccountResult> {\n const name = (params.name || '').trim();\n if (!params.id) {\n throw new Error('Missing margin account id');\n }\n if (name.length === 0 || name.length > 25) {\n throw new Error('Max size 25 characters');\n }\n\n const uri = `/api/accounts/${params.id}/edit`;\n return this.put(uri, {\n id: params.id,\n name: params.name,\n });\n }\n async closeMarginAccount(\n params: CloseMarginAccountParams,\n ): Promise<CloseMarginAccountResult> {\n if (!params.id) {\n throw new Error('Missing margin account id');\n }\n\n const uri = `/api/accounts/${params.id}/close`;\n return this.delete(uri, {\n id: params.id,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/account/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GetMarginAccountParams,\n GetMarginAccountResult,\n GetMarginAccountsParams,\n GetMarginAccountsResult,\n GetMarginAccountTransactionHistoryParams,\n GetMarginAccountTransactionHistoryResult,\n GetMaxOrderSizeAvailableParams,\n GetMaxOrderSizeAvailableResult,\n GetMaxWithdrawBalanceForAccountParams,\n GetMaxWithdrawBalanceForAccountResult,\n GetPositionsForMarginAccountParams,\n GetPositionsForMarginAccountResult,\n GetTransactionSimulationInitialDataParams,\n GetMarginAccountBalanceChartDataParams,\n GetMarginAccountCollateralsBalanceChartDataParams,\n GetAllMarginAccountsBalanceChartDataParams,\n EditMarginAccountParams,\n CloseMarginAccountParams,\n GetAllMarginAccountsSummaryResult,\n GetAllMarginAccountsSummaryParams,\n GetEditCollateralSimulationInitialDataParams,\n EditMarginAccountResult,\n CloseMarginAccountResult,\n GetIsolatedOrderMaxSizeAvailableParams,\n GetIsolatedOrderMaxSizeAvailableResult,\n GetPositionsHistoryForMarginAccountPaginatedParams,\n GetPositionsHistoryForMarginAccountPaginatedResult,\n GetLiquidationHistoryForOwnerAddressResult,\n GetLiquidationHistoryForOwnerAddressParams,\n} from './types';\nimport {\n EditCollateralSimulationState,\n TradeSimulationState,\n GetMarginAccountCollateralsBalanceChartDataResult,\n GetMarginAccountBalanceChartDataResult,\n GetAllMarginAccountsBalanceChartDataResult,\n RestClient,\n} from '@reyaxyz/common';\n\nexport default class AccountClient extends RestClient {\n /**\n * Asynchronously retrieves a list of margin accounts associated with a specific address.\n *\n * This method makes a request to the API endpoint to fetch collateral account data. The data is filtered\n * based on the provided Ethereum address. An optional limit can be specified to control the number of\n * collateral accounts returned in the response.\n *\n * @param {GetMarginAccountsParams} params\n * @returns {Promise<GetMarginAccountsResult>} A promise that resolves to the response containing the margin\n * account data.\n * @memberof account\n * */\n\n async getMarginAccounts(\n params: GetMarginAccountsParams,\n ): Promise<GetMarginAccountsResult> {\n const uri = `/api/accounts/${params.address}`;\n const response: GetMarginAccountsResult = await this.get(uri, {\n limit: params.limit,\n });\n\n return response;\n }\n\n /**\n * Asynchronously retrieves details of a specific collateral account for a given Ethereum address.\n *\n * This method sends a request to the API to obtain detailed information about a specific collateral account\n * associated with the provided Ethereum address. The account is identified using the collateral account number.\n *\n * @param {GetMarginAccountParams} params\n * @returns {Promise<GetMarginAccountResult>} A promise that resolves to the response containing the detailed\n * information of the specified margin account.\n * @memberof account\n */\n\n async getMarginAccount(\n params: GetMarginAccountParams,\n ): Promise<GetMarginAccountResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}`;\n return this.get(uri);\n }\n\n async getPositionsForMarginAccount(\n params: GetPositionsForMarginAccountParams,\n ): Promise<GetPositionsForMarginAccountResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}/positions`;\n return this.get(uri, { limit: params.limit });\n }\n\n async getPositionsHistoryForMarginAccountPaginated(\n params: GetPositionsHistoryForMarginAccountPaginatedParams,\n ): Promise<GetPositionsHistoryForMarginAccountPaginatedResult> {\n const uri = `/api/accounts/${params.address}/marginAccount/${params.marginAccountId}/positions/history/paginated`;\n return this.get(uri, {\n type: params.type,\n page: params.page,\n perPage: params.perPage,\n });\n }\n\n async getLiquidationHistoryForOwnerAddress(\n params: GetLiquidationHistoryForOwnerAddressParams,\n ): Promise<GetLiquidationHistoryForOwnerAddressResult> {\n const uri = `/api/accounts/${params.address}/positions/liquidations`;\n return this.get(uri, {\n timestampFromMS: params.timestampFromMS,\n });\n }\n\n async getMaxOrderSizeAvailable(\n params: GetMaxOrderSizeAvailableParams,\n ): Promise<GetMaxOrderSizeAvailableResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-order-size`;\n return this.get(uri, {\n marketId: params.marketId,\n direction: params.direction,\n });\n }\n\n async getIsolatedOrderMaxSizeAvailable(\n params: GetIsolatedOrderMaxSizeAvailableParams,\n ): Promise<GetIsolatedOrderMaxSizeAvailableResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-order-size-isolated`;\n return this.get(uri, {\n marketId: params.marketId,\n direction: params.direction,\n });\n }\n\n async getTransactionSimulationInitialData(\n params: GetTransactionSimulationInitialDataParams,\n ): Promise<TradeSimulationState> {\n const uri = `/api/accounts/${params.marginAccountId}/trade-simulation-data`;\n return this.get(uri, {\n marketId: params.marketId,\n });\n }\n\n async getEditCollateralSimulationInitialData(\n params: GetEditCollateralSimulationInitialDataParams,\n ): Promise<EditCollateralSimulationState> {\n const uri = `/api/accounts/${params.marginAccountId}/edit-collateral-simulation-data`;\n return this.get(uri);\n }\n\n async getMarginAccountTransactionHistory(\n params: GetMarginAccountTransactionHistoryParams,\n ): Promise<GetMarginAccountTransactionHistoryResult> {\n const uri = `/api/accounts/${params.marginAccountId}/transaction-history`;\n return this.get(uri, {\n limit: params.limit,\n });\n }\n\n async getMaxWithdrawBalanceForAccount(\n params: GetMaxWithdrawBalanceForAccountParams,\n ): Promise<GetMaxWithdrawBalanceForAccountResult> {\n const uri = `/api/accounts/${params.marginAccountId}/max-withdraw-amount`;\n return this.get(uri, {\n assetAddress: params.tokenAddress,\n });\n }\n\n async getMarginAccountBalanceChartData(\n params: GetMarginAccountBalanceChartDataParams,\n ): Promise<GetMarginAccountBalanceChartDataResult> {\n const uri = `/api/accounts/${params.marginAccountId}/balance-chart-data`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getMarginAccountCollateralsBalanceChartData(\n params: GetMarginAccountCollateralsBalanceChartDataParams,\n ): Promise<GetMarginAccountCollateralsBalanceChartDataResult> {\n const uri = `/api/accounts/${params.marginAccountId}/collaterals-balance-chart-data`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getAllMarginAccountsBalanceChart(\n params: GetAllMarginAccountsBalanceChartDataParams,\n ): Promise<GetAllMarginAccountsBalanceChartDataResult> {\n const uri = `/api/accounts/owner/${params.ownerAddress}/balance`;\n return this.get(uri, {\n timeframeMs: params.filters.timeframeMs,\n granularity: params.filters.granularity,\n });\n }\n\n async getAllMarginAccountsSummary(\n params: GetAllMarginAccountsSummaryParams,\n ): Promise<GetAllMarginAccountsSummaryResult> {\n const uri = `/api/accounts/owner/${params.ownerAddress}/summary`;\n return this.get(uri);\n }\n\n // TODO: Milan validate\n async editMarginAccount(\n params: EditMarginAccountParams,\n ): Promise<EditMarginAccountResult> {\n const name = (params.name || '').trim();\n if (!params.id) {\n throw new Error('Missing margin account id');\n }\n if (name.length === 0 || name.length > 25) {\n throw new Error('Max size 25 characters');\n }\n\n const uri = `/api/accounts/${params.id}/edit`;\n return this.put(uri, {\n id: params.id,\n name: params.name,\n });\n }\n async closeMarginAccount(\n params: CloseMarginAccountParams,\n ): Promise<CloseMarginAccountResult> {\n if (!params.id) {\n throw new Error('Missing margin account id');\n }\n\n const uri = `/api/accounts/${params.id}/close`;\n return this.delete(uri, {\n id: params.id,\n });\n }\n}\n"]}
|
|
@@ -67,7 +67,7 @@ var ConditionalOrdersClient = /** @class */ (function (_super) {
|
|
|
67
67
|
return __generator(this, function (_a) {
|
|
68
68
|
switch (_a.label) {
|
|
69
69
|
case 0:
|
|
70
|
-
uri = "/api/conditional-orders/sl/get-orders-by-position/".concat(common_1.StopLossOrderStatus.
|
|
70
|
+
uri = "/api/conditional-orders/sl/get-orders-by-position/".concat(common_1.StopLossOrderStatus.PENDING, "/").concat(params.marketId, "/").concat(params.accountId);
|
|
71
71
|
return [4 /*yield*/, this.get(uri)];
|
|
72
72
|
case 1:
|
|
73
73
|
response = _a.sent();
|
|
@@ -81,22 +81,26 @@ var ConditionalOrdersClient = /** @class */ (function (_super) {
|
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
};
|
|
84
|
-
// todo: need authentication
|
|
85
84
|
ConditionalOrdersClient.prototype.cancelSLOrder = function (params) {
|
|
86
85
|
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
-
var uri;
|
|
86
|
+
var signature, uri;
|
|
88
87
|
return __generator(this, function (_a) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
switch (_a.label) {
|
|
89
|
+
case 0: return [4 /*yield*/, (0, common_1.signCancelConditionalOrder)(params.signer, params.orderId)];
|
|
90
|
+
case 1:
|
|
91
|
+
signature = _a.sent();
|
|
92
|
+
uri = "/api/conditional-orders/sl/cancel-order";
|
|
93
|
+
return [2 /*return*/, this.put(uri, {}, {
|
|
94
|
+
orderId: params.orderId,
|
|
95
|
+
userSignature: signature,
|
|
96
|
+
})];
|
|
97
|
+
}
|
|
94
98
|
});
|
|
95
99
|
});
|
|
96
100
|
};
|
|
97
101
|
ConditionalOrdersClient.prototype.registerSLOrder = function (params) {
|
|
98
102
|
return __awaiter(this, void 0, void 0, function () {
|
|
99
|
-
var position, positionBase, orderPriceLimit, inputs, nonce,
|
|
103
|
+
var position, positionBase, orderPriceLimit, inputs, creationTimestampMs, nonce, deadline, signature, uri, _a, _b;
|
|
100
104
|
var _c;
|
|
101
105
|
return __generator(this, function (_d) {
|
|
102
106
|
switch (_d.label) {
|
|
@@ -107,25 +111,14 @@ var ConditionalOrdersClient = /** @class */ (function (_super) {
|
|
|
107
111
|
if (positionBase === 0) {
|
|
108
112
|
throw new Error('Position with no exposure');
|
|
109
113
|
}
|
|
110
|
-
orderPriceLimit = (0, common_1.
|
|
111
|
-
inputs = ethers_1.AbiCoder.defaultAbiCoder().encode(['uint256', 'uint256'], [params.stopLossPrice, orderPriceLimit]);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
orderPriceLimit = Number((0, common_1.calculateMaxPriceLimit)(positionBase < 0));
|
|
115
|
+
inputs = ethers_1.AbiCoder.defaultAbiCoder().encode(['uint256', 'uint256'], [(0, common_1.scale)(18)(params.stopLossPrice), orderPriceLimit]);
|
|
116
|
+
creationTimestampMs = Date.now();
|
|
117
|
+
nonce = this.createNonce(params.marginAccountId, params.market.id, creationTimestampMs);
|
|
118
|
+
deadline = Math.pow(10, 18);
|
|
119
|
+
return [4 /*yield*/, (0, common_1.signConditionalOrder)(params.signer, this.reyaChainId, params.marginAccountId, params.market.id, params.market.exchangeId, params.market.counterpartyAccountIds, types_1.ConditionalOrderType.StopLoss, inputs, nonce, deadline)];
|
|
114
120
|
case 2:
|
|
115
121
|
signature = _d.sent();
|
|
116
|
-
if (!position.stopLossPrice) return [3 /*break*/, 5];
|
|
117
|
-
return [4 /*yield*/, this.getPendingSLOrder({
|
|
118
|
-
accountId: params.marginAccountId,
|
|
119
|
-
marketId: params.market.id,
|
|
120
|
-
})];
|
|
121
|
-
case 3:
|
|
122
|
-
order = _d.sent();
|
|
123
|
-
if (!(order != null)) return [3 /*break*/, 5];
|
|
124
|
-
return [4 /*yield*/, this.cancelSLOrder({ orderId: order.orderId })];
|
|
125
|
-
case 4:
|
|
126
|
-
_d.sent();
|
|
127
|
-
_d.label = 5;
|
|
128
|
-
case 5:
|
|
129
122
|
uri = "/api/conditional-orders/sl/create-order";
|
|
130
123
|
_a = this.post;
|
|
131
124
|
_b = [uri,
|
|
@@ -137,15 +130,29 @@ var ConditionalOrdersClient = /** @class */ (function (_super) {
|
|
|
137
130
|
stopPrice: params.stopLossPrice
|
|
138
131
|
};
|
|
139
132
|
return [4 /*yield*/, params.signer.getAddress()];
|
|
140
|
-
case
|
|
133
|
+
case 3: return [2 /*return*/, _a.apply(this, _b.concat([(_c.signerWallet = _d.sent(),
|
|
141
134
|
_c.nonce = nonce,
|
|
142
|
-
_c.signature = signature
|
|
143
|
-
_c.
|
|
135
|
+
_c.signature = signature,
|
|
136
|
+
_c.deadline = deadline,
|
|
137
|
+
_c.orderPriceLimit = orderPriceLimit,
|
|
138
|
+
_c.exchangeId = params.market.exchangeId,
|
|
139
|
+
_c.poolId = params.market.counterpartyAccountIds[0],
|
|
140
|
+
_c.timestampMs = creationTimestampMs,
|
|
144
141
|
_c)]))];
|
|
145
142
|
}
|
|
146
143
|
});
|
|
147
144
|
});
|
|
148
145
|
};
|
|
146
|
+
ConditionalOrdersClient.prototype.updateSLOrder = function (params) {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
148
|
+
return __generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0: return [4 /*yield*/, this.registerSLOrder(params)];
|
|
151
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
};
|
|
149
156
|
ConditionalOrdersClient.prototype.getPosition = function (accountId, marketId) {
|
|
150
157
|
return __awaiter(this, void 0, void 0, function () {
|
|
151
158
|
var uri;
|
|
@@ -155,6 +162,19 @@ var ConditionalOrdersClient = /** @class */ (function (_super) {
|
|
|
155
162
|
});
|
|
156
163
|
});
|
|
157
164
|
};
|
|
165
|
+
ConditionalOrdersClient.prototype.createNonce = function (accountId, marketId, timestampMs) {
|
|
166
|
+
// Validate the input ranges
|
|
167
|
+
if (marketId < 0 || marketId >= Math.pow(2, 32))
|
|
168
|
+
throw new Error('marketId is out of range');
|
|
169
|
+
if (accountId < BigInt(0) || accountId >= Math.pow(2, 128))
|
|
170
|
+
throw new Error('accountId is out of range');
|
|
171
|
+
if (timestampMs < 0 || timestampMs >= Math.pow(2, 64))
|
|
172
|
+
throw new Error('timestamp is out of range');
|
|
173
|
+
var hashUint256 = (BigInt(accountId) << BigInt(98)) |
|
|
174
|
+
(BigInt(timestampMs) << BigInt(32)) |
|
|
175
|
+
BigInt(marketId);
|
|
176
|
+
return hashUint256.toString();
|
|
177
|
+
};
|
|
158
178
|
return ConditionalOrdersClient;
|
|
159
179
|
}(common_1.RestClient));
|
|
160
180
|
exports.default = ConditionalOrdersClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/conditional-orders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/conditional-orders/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n calculateMaxPriceLimit,\n PositionEntity,\n RestClient,\n ReyaChainId,\n signConditionalOrder,\n signCancelConditionalOrder,\n StopLossOrder,\n StopLossOrderStatus,\n scale,\n} from '@reyaxyz/common';\nimport { AbiCoder } from 'ethers';\nimport {\n CancelSLOrderParams,\n CancelSLOrderResult,\n ConditionalOrderType,\n GetPendingSLOrderParams,\n GetPendingSLOrderResult,\n RegisterSLOrderParams,\n RegisterSLOrderResult,\n UpdateSLOrderParams,\n UpdateSLOrderResult,\n} from './types';\n\nexport default class ConditionalOrdersClient extends RestClient {\n private reyaChainId: ReyaChainId;\n\n constructor(reyaChainId: ReyaChainId, host: string) {\n super(host);\n this.reyaChainId = reyaChainId;\n }\n\n async getPendingSLOrder(\n params: GetPendingSLOrderParams,\n ): Promise<GetPendingSLOrderResult> {\n const uri = `/api/conditional-orders/sl/get-orders-by-position/${StopLossOrderStatus.PENDING}/${params.marketId}/${params.accountId}`;\n const response = await this.get<GetPendingSLOrderResult[]>(uri);\n\n if (response.length > 1) {\n throw new Error('Multiple SL pending orders on a single position');\n }\n\n if (response.length === 0) return null;\n\n return response[0];\n }\n\n async cancelSLOrder(\n params: CancelSLOrderParams,\n ): Promise<CancelSLOrderResult> {\n const signature = await signCancelConditionalOrder(\n params.signer,\n params.orderId,\n );\n\n const uri = `/api/conditional-orders/sl/cancel-order`;\n return this.put<StopLossOrder>(\n uri,\n {},\n {\n orderId: params.orderId,\n userSignature: signature,\n },\n );\n }\n\n async registerSLOrder(\n params: RegisterSLOrderParams,\n ): Promise<RegisterSLOrderResult> {\n const position = await this.getPosition(\n params.marginAccountId,\n params.market.id,\n );\n const positionBase = position.base;\n\n if (positionBase === 0) {\n throw new Error('Position with no exposure');\n }\n\n const orderPriceLimit = Number(calculateMaxPriceLimit(positionBase < 0));\n\n const inputs = AbiCoder.defaultAbiCoder().encode(\n ['uint256', 'uint256'],\n [scale(18)(params.stopLossPrice), orderPriceLimit],\n );\n const creationTimestampMs = Date.now();\n const nonce = this.createNonce(\n params.marginAccountId,\n params.market.id,\n creationTimestampMs,\n );\n const deadline = 10 ** 18; // very big number for timestamp in seconds - infinite deadline\n\n const signature = await signConditionalOrder(\n params.signer,\n this.reyaChainId,\n params.marginAccountId,\n params.market.id,\n params.market.exchangeId,\n params.market.counterpartyAccountIds,\n ConditionalOrderType.StopLoss,\n inputs,\n nonce,\n deadline,\n );\n\n // create new entry\n const uri = `/api/conditional-orders/sl/create-order`;\n return this.post<StopLossOrder>(\n uri,\n {},\n {\n accountId: params.marginAccountId,\n marketId: params.market.id,\n isLong: positionBase > 0,\n stopPrice: params.stopLossPrice,\n signerWallet: await params.signer.getAddress(),\n nonce: nonce,\n signature: signature,\n deadline: deadline,\n orderPriceLimit: orderPriceLimit,\n exchangeId: params.market.exchangeId,\n poolId: params.market.counterpartyAccountIds[0],\n timestampMs: creationTimestampMs,\n },\n );\n }\n\n async updateSLOrder(\n params: UpdateSLOrderParams,\n ): Promise<UpdateSLOrderResult> {\n return await this.registerSLOrder(params as RegisterSLOrderParams);\n }\n\n private async getPosition(\n accountId: number,\n marketId: number,\n ): Promise<PositionEntity> {\n const uri = `/api/account/marginAccount/position/${accountId}/${marketId}`;\n return this.get<PositionEntity>(uri);\n }\n\n private createNonce(\n accountId: number,\n marketId: number,\n timestampMs: number,\n ): string {\n // Validate the input ranges\n if (marketId < 0 || marketId >= 2 ** 32)\n throw new Error('marketId is out of range');\n if (accountId < BigInt(0) || accountId >= 2 ** 128)\n throw new Error('accountId is out of range');\n if (timestampMs < 0 || timestampMs >= 2 ** 64)\n throw new Error('timestamp is out of range');\n\n const hashUint256 =\n (BigInt(accountId) << BigInt(98)) |\n (BigInt(timestampMs) << BigInt(32)) |\n BigInt(marketId);\n\n return hashUint256.toString();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/conditional-orders/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/conditional-orders/types.ts"],"names":[],"mappings":";;;AAkBA,IAAY,oBAEX;AAFD,WAAY,oBAAoB;IAC9B,uEAAc,CAAA;AAChB,CAAC,EAFW,oBAAoB,oCAApB,oBAAoB,QAE/B","sourcesContent":["import { StopLossOrder } from '@reyaxyz/common';\nimport { Signer, JsonRpcSigner } from 'ethers';\nimport { MarginAccountEntity, MarketEntity } from '@reyaxyz/common';\n\nexport type CancelSLOrderParams = {\n signer: Signer | JsonRpcSigner;\n orderId: number;\n};\n\nexport type CancelSLOrderResult = StopLossOrder;\n\nexport type GetPendingSLOrderParams = {\n accountId: number;\n marketId: number;\n};\n\nexport type GetPendingSLOrderResult = StopLossOrder | null;\n\nexport enum ConditionalOrderType {\n 'StopLoss' = 0,\n}\n\nexport type ConditionalOrderDetails = {\n accountId: number;\n marketId: number;\n exchangeId: number;\n counterpartyAccountIds: number[];\n orderType: number;\n inputs: string;\n signer: string;\n nonce: string;\n};\n\nexport type MarketParams = {\n id: MarketEntity['id'];\n exchangeId: MarketEntity['orderInfo']['exchangeId'];\n counterpartyAccountIds: MarketEntity['orderInfo']['counterpartyAccountIds'];\n currentPrice: number;\n};\n\nexport type RegisterSLOrderParams = {\n signer: Signer | JsonRpcSigner;\n marginAccountId: MarginAccountEntity['id'];\n stopLossPrice: number;\n market: MarketParams;\n};\n\nexport type UpdateSLOrderParams = {\n signer: Signer | JsonRpcSigner;\n orderId: number;\n marginAccountId: MarginAccountEntity['id'];\n stopLossPrice: number;\n market: MarketParams;\n};\n\nexport type RegisterSLOrderResult = StopLossOrder;\nexport type UpdateSLOrderResult = StopLossOrder;\n"]}
|
|
@@ -136,6 +136,7 @@ var IsolatedOrderSimulationClient = /** @class */ (function () {
|
|
|
136
136
|
min: xpEarnRangeMin,
|
|
137
137
|
max: xpEarnRangeMax,
|
|
138
138
|
},
|
|
139
|
+
maxSlippage: 1,
|
|
139
140
|
};
|
|
140
141
|
};
|
|
141
142
|
IsolatedOrderSimulationClient.prototype.convertValue = function (params) {
|
|
@@ -151,6 +152,31 @@ var IsolatedOrderSimulationClient = /** @class */ (function () {
|
|
|
151
152
|
.times(this.loadedData.exposureDataPassivePool.oraclePricePerMarket[this.loadedData.marketConfiguration.market_id])
|
|
152
153
|
.toNumber();
|
|
153
154
|
};
|
|
155
|
+
IsolatedOrderSimulationClient.prototype.convertValueEstimatedPrice = function (params) {
|
|
156
|
+
if (!this.loadedData) {
|
|
157
|
+
throw new Error('Data not loaded. Call arm() first.');
|
|
158
|
+
}
|
|
159
|
+
var passivePoolExposure = new common_1.ExposureCommand(this.loadedData.exposureDataPassivePool.accountId, this.loadedData.exposureDataPassivePool.rootCollateralPoolId, this.loadedData.exposureDataPassivePool.oraclePricePerMarket, this.loadedData.exposureDataPassivePool.accountBalancePerAsset, this.loadedData.exposureDataPassivePool.groupedByCollateral, this.loadedData.exposureDataPassivePool.riskMultipliers, this.loadedData.exposureDataPassivePool.riskMatrices, this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset, this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration, this.loadedData.exposureDataPassivePool.uniqueTokenAddresses, this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals, this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset, this.loadedData.exposureDataPassivePool.realizedPnLSum, this.loadedData.exposureDataPassivePool.unrealizedPnLSum, this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice);
|
|
160
|
+
var slippage = passivePoolExposure.getSlippage((0, bignumber_js_1.default)(params.amount).negated().toNumber(), this.loadedData.marketConfiguration, this.loadedData.marketStorage);
|
|
161
|
+
var estimatedPrice = common_1.ExposureCommand.calculateEstimatedPrice(this.loadedData.exposureDataPassivePool.oraclePricePerMarket[this.loadedData.marketConfiguration.market_id], slippage);
|
|
162
|
+
if (!params.fromBase)
|
|
163
|
+
return (0, bignumber_js_1.default)(params.amount).div(estimatedPrice).toNumber();
|
|
164
|
+
else
|
|
165
|
+
return (0, bignumber_js_1.default)(params.amount).times(estimatedPrice).toNumber();
|
|
166
|
+
};
|
|
167
|
+
IsolatedOrderSimulationClient.prototype.estimatedPrice = function (params) {
|
|
168
|
+
if (!this.loadedData) {
|
|
169
|
+
throw new Error('Data not loaded. Call arm() first.');
|
|
170
|
+
}
|
|
171
|
+
var passivePoolExposure = new common_1.ExposureCommand(this.loadedData.exposureDataPassivePool.accountId, this.loadedData.exposureDataPassivePool.rootCollateralPoolId, this.loadedData.exposureDataPassivePool.oraclePricePerMarket, this.loadedData.exposureDataPassivePool.accountBalancePerAsset, this.loadedData.exposureDataPassivePool.groupedByCollateral, this.loadedData.exposureDataPassivePool.riskMultipliers, this.loadedData.exposureDataPassivePool.riskMatrices, this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset, this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration, this.loadedData.exposureDataPassivePool.uniqueTokenAddresses, this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals, this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset, this.loadedData.exposureDataPassivePool.realizedPnLSum, this.loadedData.exposureDataPassivePool.unrealizedPnLSum, this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice);
|
|
172
|
+
var slippage = passivePoolExposure.getSlippage((0, bignumber_js_1.default)(params.amount).negated().toNumber(), this.loadedData.marketConfiguration, this.loadedData.marketStorage);
|
|
173
|
+
var price = this.loadedData.exposureDataAccount.oraclePricePerMarket[this.loadedData.marketConfiguration.market_id];
|
|
174
|
+
var estimatedPrice = common_1.ExposureCommand.calculateEstimatedPrice(this.loadedData.exposureDataPassivePool.oraclePricePerMarket[this.loadedData.marketConfiguration.market_id], slippage);
|
|
175
|
+
return {
|
|
176
|
+
estimatedPrice: estimatedPrice,
|
|
177
|
+
markPrice: price,
|
|
178
|
+
};
|
|
179
|
+
};
|
|
154
180
|
IsolatedOrderSimulationClient.prototype.roundToBaseSpacing = function (amount, baseSpacing) {
|
|
155
181
|
var snappedAmount = (0, bignumber_js_1.default)(amount)
|
|
156
182
|
.abs()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,0CAMyB;AACzB,8DAAqC;AAGrC;IAGE,uCAAY,aAA4B;QAFhC,eAAU,GAAgC,IAAI,CAAC;QAGrD,oBAAoB;QACpB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,qEAAqE;IAC/D,2CAAG,GAAT,UAAU,MAA6C;;;;;;wBACrD,KAAA,IAAI,CAAA;wBAAc,qBAAM,IAAI,CAAC,eAAe,CAC1C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,eAAe,CACvB,EAAA;;wBAHD,GAAK,UAAU,GAAG,SAGjB,CAAC;;;;;KACH;IAEM,sDAAwB,GAA/B,UACE,oBAA0C;QAE1C,OAAO,IAAI,wBAAe,CACxB,oBAAoB,CAAC,SAAS,EAC9B,oBAAoB,CAAC,oBAAoB,EACzC,oBAAoB,CAAC,oBAAoB,EACzC,oBAAoB,CAAC,sBAAsB,EAC3C,oBAAoB,CAAC,mBAAmB,EACxC,oBAAoB,CAAC,eAAe,EACpC,oBAAoB,CAAC,YAAY,EACjC,oBAAoB,CAAC,oBAAoB,EACzC,oBAAoB,CAAC,+BAA+B,EACpD,oBAAoB,CAAC,oBAAoB,EACzC,oBAAoB,CAAC,sBAAsB,EAC3C,oBAAoB,CAAC,uBAAuB,EAC5C,oBAAoB,CAAC,cAAc,EACnC,oBAAoB,CAAC,gBAAgB,EACrC,oBAAoB,CAAC,gCAAgC,CACtD,CAAC;IACJ,CAAC;IAEa,uDAAe,GAA7B,UACE,QAAgB,EAChB,SAAiB;;;gBAEjB,sBAAO,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC;wBAC5D,eAAe,EAAE,SAAS;wBAC1B,QAAQ,EAAE,QAAQ;qBACnB,CAAC,EAAC;;;KACJ;IAED,4CAA4C;IAC5C,gDAAQ,GAAR,UACE,MAA6C;QAE7C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,6GAA6G;QAC7G,IAAM,MAAM,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC,MAAM,CAAC;aACpC,GAAG,CACF,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,CACF;aACA,QAAQ,EAAE,CAAC;QAEd,IAAM,mBAAmB,GACvB,6BAA6B,CAAC,wBAAwB,CACpD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CACpC,CAAC;QAEJ,IAAM,mBAAmB,GACvB,6BAA6B,CAAC,wBAAwB,CACpD,IAAI,CAAC,UAAU,CAAC,uBAAuB,CACxC,CAAC;QAEJ,IAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAC9C,IAAA,sBAAS,EAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EACtC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EACnC,IAAI,CAAC,UAAU,CAAC,aAAa,CAC9B,CAAC;QACF,IAAM,cAAc,GAAG,wBAAe,CAAC,uBAAuB,CAC5D,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,EACD,QAAQ,CACT,CAAC;QAEF,IAAM,IAAI,GAAG,wBAAe,CAAC,YAAY,CACvC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,EACD,MAAM,EACN,IAAI,CAAC,UAAU,CAAC,YAAY,CAC7B,CAAC;QAEF;;;WAGG;QAEH,IAAM,cAAc,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC,MAAM,CAAC;aAC5C,GAAG,EAAE;aACL,GAAG,CAAC,IAAA,sBAAS,EAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;aAC/C,QAAQ,EAAE,CAAC;QAEd,IAAM,qBAAqB,GACzB,mBAAmB,CAAC,qCAAqC,CAAC,cAAc,CAAC,CAAC;QAE5E,IAAM,mBAAmB,GACvB,mBAAmB,CAAC,uCAAuC,CACzD,qBAAqB,CACtB,CAAC;QAEJ;;aAEK;QAEL,IAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7D;;;;;;aAMK;QACL,IAAM,gBAAgB,GAAG,wBAAe,CAAC,oBAAoB,CAC3D,cAAc,EACd,WAAW,EACX,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,EACD,MAAM,CACP,CAAC;QAEF,kDAAkD;QAClD,IAAM,WAAW,GAAG,wBAAe,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAExE,IAAM,iBAAiB,GAAG,wBAAe,CAAC,oBAAoB,CAC5D,WAAW,GAAG,GAAG,CAClB,CAAC;QAEF,IAAM,WAAW,GAAG,IAAA,yBAAgB,EAClC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CACjD,CAAC,QAAQ,EAAE,CAAC;QAEb,IAAM,SAAS,GACb,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,CAAC;QAEJ,IAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzE,IAAM,aAAa,GAAG,mBAAmB,GAAG,SAAS,CAAC;QACtD,IAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;QACjE,IAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAEzE,OAAO;YACL,cAAc,EAAE,cAAc;YAC9B,iBAAiB,EAAE,QAAQ,GAAG,GAAG;YACjC,IAAI,EAAE,IAAI;YACV,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YAC7C,WAAW,EAAE,WAAW,GAAG,GAAG;YAC9B,iBAAiB,EAAE,iBAAiB;YACpC,aAAa,eAAA;YACb,mBAAmB,qBAAA;YACnB,cAAc,EAAE,cAAc;YAC9B,qBAAqB,EAAE,qBAAqB;YAC5C,WAAW,EAAE;gBACX,GAAG,EAAE,cAAc;gBACnB,GAAG,EAAE,cAAc;aACpB;SAC6B,CAAC;IACnC,CAAC;IAED,oDAAY,GAAZ,UACE,MAAiD;QAEjD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ;YAClB,OAAO,IAAA,sBAAS,EAAC,MAAM,CAAC,MAAM,CAAC;iBAC5B,GAAG,CACF,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,CACF;iBACA,QAAQ,EAAE,CAAC;;YAEd,OAAO,IAAA,sBAAS,EAAC,MAAM,CAAC,MAAM,CAAC;iBAC5B,KAAK,CACJ,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,CACF;iBACA,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,0DAAkB,GAAlB,UAAmB,MAAc,EAAE,WAAmB;QACpD,IAAM,aAAa,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC;aACpC,GAAG,EAAE;aACL,SAAS,CAAC,WAAW,CAAC;aACtB,YAAY,CAAC,sBAAS,CAAC,WAAW,CAAC;aACnC,YAAY,CAAC,WAAW,CAAC;aACzB,QAAQ,EAAE,CAAC;QAEd,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,CAAC;QACxB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,6DAAqB,GAArB,UACE,YAAoB,EACpB,SAAiB,EACjB,WAAmB;QAEnB,IAAM,YAAY,GAAG,IAAA,sBAAS,EAAC,YAAY,CAAC;aACzC,GAAG,CAAC,IAAA,sBAAS,EAAC,SAAS,CAAC,CAAC;aACzB,QAAQ,EAAE,CAAC;QAEd,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;IACxE,CAAC;IAED,4DAAoB,GAApB,UAAqB,gBAAwB;QAA7C,iBAsCC;QArCC,8GAA8G;QAC9G,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,2BAA2B;QAC3B,IAAM,gBAAgB,GACpB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CACnD,UAAC,UAAsB;;YACrB,OAAO,CACL,UAAU,CAAC,aAAa;gBACxB,IAAA,sBAAS,EACP,MAAM,CAAC,MAAA,KAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,aAAa,CAAC,CACrD,CAAC,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC,CACF,CAAC;QAEJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAM,uBAAuB,GAC3B,gBAAgB,CAAC,MAAM,CACrB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,CACtD,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAC3D,IAAM,kBAAkB,GAAkB,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACtE,IAAM,uBAAuB,GAAgB,CAAC,IAAA,sBAAS,EAAC,gBAAgB,CAAC,CAAC,CAAC;QAE3E,OAAO,wBAAe,CAAC,mCAAmC,CACxD,kBAAkB,EAClB,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,wEAAgC,GAAhC,UAAiC,EAEQ;YADvC,kBAAkB,wBAAA;QAElB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAM,SAAS,GACb,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,oBAAoB,CAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAC9C,CAAC;QACJ,IAAM,WAAW,GAAG,IAAA,yBAAgB,EAClC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CACjD,CAAC,QAAQ,EAAE,CAAC;QACb,IAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CACpD,kBAAkB,EAClB,SAAS,EACT,WAAW,CACZ,CAAC;QAEF;;;;;;;;;aASK;QAEL,gBAAgB;QAEhB,IAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAErD,IAAM,eAAe,GAAc,IAAA,yBAAgB,EACjD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,eAAe,CAAC,aAAa,CAAC,CAC1E,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAEhC,IAAM,QAAQ,GAAG,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEpE,gBAAgB;QAEhB,IAAM,mBAAmB,GACvB,6BAA6B,CAAC,wBAAwB,CACpD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CACpC,CAAC;QAEJ;;;UAGE;QAEF,IAAM,eAAe,GACnB,mBAAmB,CAAC,oBAAoB,CAAC,YAAY,CAAC;QAExD,IAAM,QAAQ,GAAG,IAAA,sBAAS,EAAC,mBAAmB,CAAC;aAC5C,GAAG,EAAE;aACL,SAAS,CAAC,eAAe,CAAC;aAC1B,QAAQ,EAAE,CAAC;QAEd,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,eAAe,EAAE,eAAe;SACjC,CAAC;IACJ,CAAC;IACH,oCAAC;AAAD,CAAC,AAhVD,IAgVC","sourcesContent":["import {\n SimulateIsolatedOrderEntity,\n IsolatedOrderSimulationConvertValueParams,\n IsolatedOrderSimulationConvertValueResult,\n IsolatedOrderSimulationLoadDataParams,\n IsolatedOrderSimulationSimulateParams,\n LeverageBoundsAndAvailableMarginResult,\n LeverageBoundsAndAvailableMarginParams,\n} from './types';\nimport AccountClient from '../account';\nimport {\n amountNormalizer,\n ExposureCommand,\n ExposureCommandState,\n RiskMatrix,\n TradeSimulationState,\n} from '@reyaxyz/common';\nimport BigNumber from 'bignumber.js';\nimport { EditCollateralAction } from '@reyaxyz/common';\n\nexport default class IsolatedOrderSimulationClient {\n private loadedData: TradeSimulationState | null = null;\n private accountClient: AccountClient;\n constructor(accountClient: AccountClient) {\n // Constructor added\n this.accountClient = accountClient;\n }\n\n // Method to asynchronously load data based on marketId and accountId\n async arm(params: IsolatedOrderSimulationLoadDataParams): Promise<void> {\n this.loadedData = await this.fetchMarketData(\n params.marketId,\n params.marginAccountId,\n );\n }\n\n static genExposureCommandObject(\n exposureCommandState: ExposureCommandState,\n ): ExposureCommand {\n return new ExposureCommand(\n exposureCommandState.accountId,\n exposureCommandState.rootCollateralPoolId,\n exposureCommandState.oraclePricePerMarket,\n exposureCommandState.accountBalancePerAsset,\n exposureCommandState.groupedByCollateral,\n exposureCommandState.riskMultipliers,\n exposureCommandState.riskMatrices,\n exposureCommandState.exchangeInfoPerAsset,\n exposureCommandState.positionInfoMarketConfiguration,\n exposureCommandState.uniqueTokenAddresses,\n exposureCommandState.uniqueQuoteCollaterals,\n exposureCommandState.tokenMarginInfoPerAsset,\n exposureCommandState.realizedPnLSum,\n exposureCommandState.unrealizedPnLSum,\n exposureCommandState.collateralAddressToExchangePrice,\n );\n }\n\n private async fetchMarketData(\n marketId: number,\n accountId: number,\n ): Promise<TradeSimulationState> {\n return this.accountClient.getTransactionSimulationInitialData({\n marginAccountId: accountId,\n marketId: marketId,\n });\n }\n\n // Synchronous method to simulate operations\n simulate(\n params: IsolatedOrderSimulationSimulateParams,\n ): SimulateIsolatedOrderEntity {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n // todo: p2: check if it's intended behaviour to not sure snapped amount for simulation calcs e.g. liq. price\n const amount = BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n\n const userAccountExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataAccount,\n );\n\n const passivePoolExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataPassivePool,\n );\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n const fees = ExposureCommand.calculateFee(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n this.loadedData.feeParameter,\n );\n\n /*\n amount of margin in rUSD terms that needs to be transferred from the source account to the destination account,\n this value is equal to absolute size in rUSD terms / leverage\n */\n\n const requiredMargin = BigNumber(params.amount)\n .abs()\n .div(BigNumber(params.isolatedPositionLeverage))\n .toNumber();\n\n const editCollateralActions: EditCollateralAction[] =\n userAccountExposure.getEditCollateralActionsToCoverMargin(requiredMargin);\n\n const newMarginInfoSource =\n userAccountExposure.getUsdNodeMarginInfoPostEditCollaterals(\n editCollateralActions,\n );\n\n /*\n * Compute Isolated Account Liquidation Margin Requirement Post Transfer + Trade\n * */\n\n const isolatedLMR = this.calculateIsolatedLMR(params.amount);\n\n /*\n * margin balance of the destination account is the requiredMargin which is expected to be transferred\n * to the destination account that performs the isolated trade\n * the liquidation price in this case is trying to estimate what the liquidation price would be all else equal for\n * the market where the trade is being made by the isolated account that is going to be created as part of isolated\n * trade operation\n * */\n const liquidationPrice = ExposureCommand.calculateLiquidation(\n requiredMargin,\n isolatedLMR,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n );\n\n // todo: p1: margin ratio seems to be wrong on ui\n const marginRatio = ExposureCommand.getMarginRatio(newMarginInfoSource);\n\n const marginRatioHealth = ExposureCommand.evaluateHealthStatus(\n marginRatio * 100,\n );\n\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const snappedAmountInBase = this.roundToBaseSpacing(amount, baseSpacing);\n const snappedAmount = snappedAmountInBase * spotPrice;\n const xpEarnRangeMin = Math.round(Math.abs(snappedAmount) / 200);\n const xpEarnRangeMax = Math.round((100 * Math.abs(snappedAmount)) / 200);\n\n return {\n estimatedPrice: estimatedPrice,\n estimatedSlippage: slippage * 100,\n fees: fees,\n liquidationPrice: liquidationPrice.toNumber(),\n marginRatio: marginRatio * 100,\n marginRatioHealth: marginRatioHealth,\n snappedAmount,\n snappedAmountInBase,\n requiredMargin: requiredMargin,\n editCollateralActions: editCollateralActions,\n xpEarnRange: {\n min: xpEarnRangeMin,\n max: xpEarnRangeMax,\n },\n } as SimulateIsolatedOrderEntity;\n }\n\n convertValue(\n params: IsolatedOrderSimulationConvertValueParams,\n ): IsolatedOrderSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!params.fromBase)\n return BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n else\n return BigNumber(params.amount)\n .times(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n }\n\n roundToBaseSpacing(amount: number, baseSpacing: number): number {\n const snappedAmount = BigNumber(amount)\n .abs()\n .dividedBy(baseSpacing)\n .integerValue(BigNumber.ROUND_FLOOR)\n .multipliedBy(baseSpacing)\n .toNumber();\n\n if (amount < 0) {\n return -snappedAmount;\n }\n return snappedAmount;\n }\n\n amountToSnappedAmount(\n amountInRusd: number,\n spotPrice: number,\n baseSpacing: number,\n ): number {\n const amountInBase = BigNumber(amountInRusd)\n .div(BigNumber(spotPrice))\n .toNumber();\n\n return this.roundToBaseSpacing(amountInBase, baseSpacing) * spotPrice;\n }\n\n calculateIsolatedLMR(isolatedExposure: number): number {\n // todo: p2: consider removing the need to load the entire data just to get a few vars to calc leverage bounds\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!this.loadedData.marketStorage) {\n throw new Error('Market storage not loaded');\n }\n\n // todo: p2: carefully test\n const marketRiskMatrix =\n this.loadedData.exposureDataAccount.riskMatrices.find(\n (riskMatrix: RiskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(\n String(this.loadedData?.marketStorage.risk_block_id),\n ).toNumber()\n );\n },\n );\n\n if (!marketRiskMatrix) {\n throw new Error('Failed to load risk matrix');\n }\n\n const marketDiagonalRiskParam =\n marketRiskMatrix.matrix[\n this.loadedData.marketConfiguration.risk_matrix_index\n ][this.loadedData.marketConfiguration.risk_matrix_index];\n const isolatedRiskMatrix: BigNumber[][] = [[marketDiagonalRiskParam]];\n const isolatedFilledExposures: BigNumber[] = [BigNumber(isolatedExposure)];\n\n return ExposureCommand.computeLiquidationMarginRequirement(\n isolatedRiskMatrix,\n isolatedFilledExposures,\n );\n }\n\n leverageBoundsAndAvailableMargin({\n amountTradedInRusd,\n }: LeverageBoundsAndAvailableMarginParams): LeverageBoundsAndAvailableMarginResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n const snappedAmountInRusd = this.amountToSnappedAmount(\n amountTradedInRusd,\n spotPrice,\n baseSpacing,\n );\n\n /*\n todo: p2: consider introducing buffer to the leverage (e.g. to account for the effect of trade on upnl\n and actually depending on the size of the trade the estimated price would change -> different upnl\n as upnl is calculated against oracle prioce + rpnl is also affected through the fees\n * once the trader knows their trade size (in base & rusd terms), they should be able to toggle isolated trade flow\n * which will prompt the user to choose a desired leverage value\n * 0.1 can be hardcoded to be the min bound\n * to get the maximum bound we need to calculate leverage that can be achieved when IMR is reached for position\n * with 1 rUSD exposure in the market -> max leverage = 1/IMR\n * */\n\n // set max bound\n\n const lmrUnitExposure = this.calculateIsolatedLMR(1);\n\n const imrUnitExposure: BigNumber = amountNormalizer(\n String(this.loadedData.exposureDataAccount.riskMultipliers.im_multiplier),\n ).multipliedBy(lmrUnitExposure);\n\n const maxBound = BigNumber(1).dividedBy(imrUnitExposure).toNumber();\n\n // set min bound\n\n const userAccountExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataAccount,\n );\n\n /*\n max amount of margin in rUSD terms that can be transferred from the source account to the destination account\n that performs the isolated position trade\n */\n\n const availableMargin =\n userAccountExposure.getUsdNodeMarginInfo.initialDelta;\n\n const minBound = BigNumber(snappedAmountInRusd)\n .abs()\n .dividedBy(availableMargin)\n .toNumber();\n\n if (minBound > maxBound) {\n throw Error('Min leverage bound higher than max');\n }\n\n return {\n minBound: minBound,\n maxBound: maxBound,\n availableMargin: availableMargin,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SimulateIsolatedOrderEntity,\n IsolatedOrderSimulationConvertValueParams,\n IsolatedOrderSimulationConvertValueResult,\n IsolatedOrderSimulationLoadDataParams,\n IsolatedOrderSimulationSimulateParams,\n LeverageBoundsAndAvailableMarginResult,\n LeverageBoundsAndAvailableMarginParams,\n} from './types';\nimport AccountClient from '../account';\nimport {\n amountNormalizer,\n ExposureCommand,\n ExposureCommandState,\n RiskMatrix,\n TradeSimulationState,\n} from '@reyaxyz/common';\nimport BigNumber from 'bignumber.js';\nimport { EditCollateralAction } from '@reyaxyz/common';\nimport {\n EstimatedPriceParams,\n EstimatedPriceResult,\n TradeSimulationConvertValueEstimatedPriceParams,\n TradeSimulationConvertValueResult,\n} from '../trade.simulation/types';\n\nexport default class IsolatedOrderSimulationClient {\n private loadedData: TradeSimulationState | null = null;\n private accountClient: AccountClient;\n constructor(accountClient: AccountClient) {\n // Constructor added\n this.accountClient = accountClient;\n }\n\n // Method to asynchronously load data based on marketId and accountId\n async arm(params: IsolatedOrderSimulationLoadDataParams): Promise<void> {\n this.loadedData = await this.fetchMarketData(\n params.marketId,\n params.marginAccountId,\n );\n }\n\n static genExposureCommandObject(\n exposureCommandState: ExposureCommandState,\n ): ExposureCommand {\n return new ExposureCommand(\n exposureCommandState.accountId,\n exposureCommandState.rootCollateralPoolId,\n exposureCommandState.oraclePricePerMarket,\n exposureCommandState.accountBalancePerAsset,\n exposureCommandState.groupedByCollateral,\n exposureCommandState.riskMultipliers,\n exposureCommandState.riskMatrices,\n exposureCommandState.exchangeInfoPerAsset,\n exposureCommandState.positionInfoMarketConfiguration,\n exposureCommandState.uniqueTokenAddresses,\n exposureCommandState.uniqueQuoteCollaterals,\n exposureCommandState.tokenMarginInfoPerAsset,\n exposureCommandState.realizedPnLSum,\n exposureCommandState.unrealizedPnLSum,\n exposureCommandState.collateralAddressToExchangePrice,\n );\n }\n\n private async fetchMarketData(\n marketId: number,\n accountId: number,\n ): Promise<TradeSimulationState> {\n return this.accountClient.getTransactionSimulationInitialData({\n marginAccountId: accountId,\n marketId: marketId,\n });\n }\n\n // Synchronous method to simulate operations\n simulate(\n params: IsolatedOrderSimulationSimulateParams,\n ): SimulateIsolatedOrderEntity {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n // todo: p2: check if it's intended behaviour to not sure snapped amount for simulation calcs e.g. liq. price\n const amount = BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n\n const userAccountExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataAccount,\n );\n\n const passivePoolExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataPassivePool,\n );\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n const fees = ExposureCommand.calculateFee(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n this.loadedData.feeParameter,\n );\n\n /*\n amount of margin in rUSD terms that needs to be transferred from the source account to the destination account,\n this value is equal to absolute size in rUSD terms / leverage\n */\n\n const requiredMargin = BigNumber(params.amount)\n .abs()\n .div(BigNumber(params.isolatedPositionLeverage))\n .toNumber();\n\n const editCollateralActions: EditCollateralAction[] =\n userAccountExposure.getEditCollateralActionsToCoverMargin(requiredMargin);\n\n const newMarginInfoSource =\n userAccountExposure.getUsdNodeMarginInfoPostEditCollaterals(\n editCollateralActions,\n );\n\n /*\n * Compute Isolated Account Liquidation Margin Requirement Post Transfer + Trade\n * */\n\n const isolatedLMR = this.calculateIsolatedLMR(params.amount);\n\n /*\n * margin balance of the destination account is the requiredMargin which is expected to be transferred\n * to the destination account that performs the isolated trade\n * the liquidation price in this case is trying to estimate what the liquidation price would be all else equal for\n * the market where the trade is being made by the isolated account that is going to be created as part of isolated\n * trade operation\n * */\n const liquidationPrice = ExposureCommand.calculateLiquidation(\n requiredMargin,\n isolatedLMR,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n );\n\n // todo: p1: margin ratio seems to be wrong on ui\n const marginRatio = ExposureCommand.getMarginRatio(newMarginInfoSource);\n\n const marginRatioHealth = ExposureCommand.evaluateHealthStatus(\n marginRatio * 100,\n );\n\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const snappedAmountInBase = this.roundToBaseSpacing(amount, baseSpacing);\n const snappedAmount = snappedAmountInBase * spotPrice;\n const xpEarnRangeMin = Math.round(Math.abs(snappedAmount) / 200);\n const xpEarnRangeMax = Math.round((100 * Math.abs(snappedAmount)) / 200);\n\n return {\n estimatedPrice: estimatedPrice,\n estimatedSlippage: slippage * 100,\n fees: fees,\n liquidationPrice: liquidationPrice.toNumber(),\n marginRatio: marginRatio * 100,\n marginRatioHealth: marginRatioHealth,\n snappedAmount,\n snappedAmountInBase,\n requiredMargin: requiredMargin,\n editCollateralActions: editCollateralActions,\n xpEarnRange: {\n min: xpEarnRangeMin,\n max: xpEarnRangeMax,\n },\n maxSlippage: 1,\n } as SimulateIsolatedOrderEntity;\n }\n\n convertValue(\n params: IsolatedOrderSimulationConvertValueParams,\n ): IsolatedOrderSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!params.fromBase)\n return BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n else\n return BigNumber(params.amount)\n .times(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n }\n\n convertValueEstimatedPrice(\n params: TradeSimulationConvertValueEstimatedPriceParams,\n ): TradeSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n if (!params.fromBase)\n return BigNumber(params.amount).div(estimatedPrice).toNumber();\n else return BigNumber(params.amount).times(estimatedPrice).toNumber();\n }\n\n estimatedPrice(params: EstimatedPriceParams): EstimatedPriceResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n\n const price =\n this.loadedData.exposureDataAccount.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n return {\n estimatedPrice,\n markPrice: price,\n };\n }\n\n roundToBaseSpacing(amount: number, baseSpacing: number): number {\n const snappedAmount = BigNumber(amount)\n .abs()\n .dividedBy(baseSpacing)\n .integerValue(BigNumber.ROUND_FLOOR)\n .multipliedBy(baseSpacing)\n .toNumber();\n\n if (amount < 0) {\n return -snappedAmount;\n }\n return snappedAmount;\n }\n\n amountToSnappedAmount(\n amountInRusd: number,\n spotPrice: number,\n baseSpacing: number,\n ): number {\n const amountInBase = BigNumber(amountInRusd)\n .div(BigNumber(spotPrice))\n .toNumber();\n\n return this.roundToBaseSpacing(amountInBase, baseSpacing) * spotPrice;\n }\n\n calculateIsolatedLMR(isolatedExposure: number): number {\n // todo: p2: consider removing the need to load the entire data just to get a few vars to calc leverage bounds\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!this.loadedData.marketStorage) {\n throw new Error('Market storage not loaded');\n }\n\n // todo: p2: carefully test\n const marketRiskMatrix =\n this.loadedData.exposureDataAccount.riskMatrices.find(\n (riskMatrix: RiskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(\n String(this.loadedData?.marketStorage.risk_block_id),\n ).toNumber()\n );\n },\n );\n\n if (!marketRiskMatrix) {\n throw new Error('Failed to load risk matrix');\n }\n\n const marketDiagonalRiskParam =\n marketRiskMatrix.matrix[\n this.loadedData.marketConfiguration.risk_matrix_index\n ][this.loadedData.marketConfiguration.risk_matrix_index];\n const isolatedRiskMatrix: BigNumber[][] = [[marketDiagonalRiskParam]];\n const isolatedFilledExposures: BigNumber[] = [BigNumber(isolatedExposure)];\n\n return ExposureCommand.computeLiquidationMarginRequirement(\n isolatedRiskMatrix,\n isolatedFilledExposures,\n );\n }\n\n leverageBoundsAndAvailableMargin({\n amountTradedInRusd,\n }: LeverageBoundsAndAvailableMarginParams): LeverageBoundsAndAvailableMarginResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n const snappedAmountInRusd = this.amountToSnappedAmount(\n amountTradedInRusd,\n spotPrice,\n baseSpacing,\n );\n\n /*\n todo: p2: consider introducing buffer to the leverage (e.g. to account for the effect of trade on upnl\n and actually depending on the size of the trade the estimated price would change -> different upnl\n as upnl is calculated against oracle prioce + rpnl is also affected through the fees\n * once the trader knows their trade size (in base & rusd terms), they should be able to toggle isolated trade flow\n * which will prompt the user to choose a desired leverage value\n * 0.1 can be hardcoded to be the min bound\n * to get the maximum bound we need to calculate leverage that can be achieved when IMR is reached for position\n * with 1 rUSD exposure in the market -> max leverage = 1/IMR\n * */\n\n // set max bound\n\n const lmrUnitExposure = this.calculateIsolatedLMR(1);\n\n const imrUnitExposure: BigNumber = amountNormalizer(\n String(this.loadedData.exposureDataAccount.riskMultipliers.im_multiplier),\n ).multipliedBy(lmrUnitExposure);\n\n const maxBound = BigNumber(1).dividedBy(imrUnitExposure).toNumber();\n\n // set min bound\n\n const userAccountExposure =\n IsolatedOrderSimulationClient.genExposureCommandObject(\n this.loadedData.exposureDataAccount,\n );\n\n /*\n max amount of margin in rUSD terms that can be transferred from the source account to the destination account\n that performs the isolated position trade\n */\n\n const availableMargin =\n userAccountExposure.getUsdNodeMarginInfo.initialDelta;\n\n const minBound = BigNumber(snappedAmountInRusd)\n .abs()\n .dividedBy(availableMargin)\n .toNumber();\n\n if (minBound > maxBound) {\n throw Error('Min leverage bound higher than max');\n }\n\n return {\n minBound: minBound,\n maxBound: maxBound,\n availableMargin: availableMargin,\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n MarginAccountEntity,\n MarketEntity,\n EditCollateralAction,\n} from '@reyaxyz/common';\n\nexport type IsolatedOrderSimulationLoadDataParams = {\n marketId: MarketEntity['id'];\n marginAccountId: MarginAccountEntity['id'];\n};\n\nexport type IsolatedOrderSimulationSimulateParams = {\n amount: number; // position size in rUSD terms, + for long | - for short\n isolatedPositionLeverage: number; // leverage chosen for isolated position trade\n};\n\nexport type IsolatedOrderSimulationConvertValueParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type SimulateIsolatedOrderEntity = {\n liquidationPrice: number;\n fees: number;\n estimatedPrice: number;\n estimatedSlippage: number;\n marginRatio: MarginAccountEntity['marginRatioPercentage'];\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n snappedAmount: number;\n snappedAmountInBase: number;\n requiredMargin: number;\n editCollateralActions: EditCollateralAction[];\n xpEarnRange?: {\n min: number;\n max: number;\n };\n};\n\nexport type IsolatedOrderSimulationConvertValueResult = number;\n\nexport type LeverageBoundsAndAvailableMarginResult = {\n minBound: number;\n maxBound: number;\n availableMargin: number;\n};\n\nexport type LeverageBoundsAndAvailableMarginParams = {\n // Note, this amount is not expected to be snapped\n amountTradedInRusd: number;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n MarginAccountEntity,\n MarketEntity,\n EditCollateralAction,\n} from '@reyaxyz/common';\n\nexport type IsolatedOrderSimulationLoadDataParams = {\n marketId: MarketEntity['id'];\n marginAccountId: MarginAccountEntity['id'];\n};\n\nexport type IsolatedOrderSimulationSimulateParams = {\n amount: number; // position size in rUSD terms, + for long | - for short\n isolatedPositionLeverage: number; // leverage chosen for isolated position trade\n};\n\nexport type IsolatedOrderSimulationConvertValueParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type SimulateIsolatedOrderEntity = {\n liquidationPrice: number;\n fees: number;\n estimatedPrice: number;\n estimatedSlippage: number;\n marginRatio: MarginAccountEntity['marginRatioPercentage'];\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n snappedAmount: number;\n snappedAmountInBase: number;\n requiredMargin: number;\n editCollateralActions: EditCollateralAction[];\n maxSlippage: number;\n xpEarnRange?: {\n min: number;\n max: number;\n };\n};\n\nexport type IsolatedOrderSimulationConvertValueResult = number;\n\nexport type LeverageBoundsAndAvailableMarginResult = {\n minBound: number;\n maxBound: number;\n availableMargin: number;\n};\n\nexport type LeverageBoundsAndAvailableMarginParams = {\n // Note, this amount is not expected to be snapped\n amountTradedInRusd: number;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/trade.simulation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EstimatedPriceParams,\n EstimatedPriceResult,\n SimulateTradeEntity,\n TradeSimulationConvertValueEstimatedPriceParams,\n TradeSimulationConvertValueParams,\n TradeSimulationConvertValueResult,\n TradeSimulationLoadDataParams,\n TradeSimulationSimulateParams,\n} from './types';\nimport AccountClient from '../account';\nimport {\n amountNormalizer,\n ExposureCommand,\n MarginInfo,\n TradeSimulationState,\n} from '@reyaxyz/common';\nimport BigNumber from 'bignumber.js';\n\nexport default class TradeSimulationClient {\n private marketId: number | null = null;\n private accountId: number | null = null;\n private loadedData: TradeSimulationState | null = null;\n private accountClient: AccountClient;\n constructor(accountClient: AccountClient) {\n // Constructor added\n this.accountClient = accountClient;\n }\n\n // Method to asynchronously load data based on marketId and accountId\n async arm(params: TradeSimulationLoadDataParams): Promise<void> {\n this.marketId = params.marketId;\n this.accountId = params.marginAccountId;\n\n this.loadedData = await this.fetchMarketData(this.marketId, this.accountId);\n }\n\n private async fetchMarketData(\n marketId: number,\n accountId: number,\n ): Promise<TradeSimulationState> {\n return this.accountClient.getTransactionSimulationInitialData({\n marginAccountId: accountId,\n marketId: marketId,\n });\n }\n\n // Synchronous method to simulate operations based on an amount\n simulate(params: TradeSimulationSimulateParams): SimulateTradeEntity {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const amount = BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n\n const userAccountExposure = new ExposureCommand(\n this.loadedData.exposureDataAccount.accountId,\n this.loadedData.exposureDataAccount.rootCollateralPoolId,\n this.loadedData.exposureDataAccount.oraclePricePerMarket,\n this.loadedData.exposureDataAccount.accountBalancePerAsset,\n this.loadedData.exposureDataAccount.groupedByCollateral,\n this.loadedData.exposureDataAccount.riskMultipliers,\n this.loadedData.exposureDataAccount.riskMatrices,\n this.loadedData.exposureDataAccount.exchangeInfoPerAsset,\n this.loadedData.exposureDataAccount.positionInfoMarketConfiguration,\n this.loadedData.exposureDataAccount.uniqueTokenAddresses,\n this.loadedData.exposureDataAccount.uniqueQuoteCollaterals,\n this.loadedData.exposureDataAccount.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataAccount.realizedPnLSum,\n this.loadedData.exposureDataAccount.unrealizedPnLSum,\n this.loadedData.exposureDataAccount.collateralAddressToExchangePrice,\n );\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n\n /*\n max amount of margin in rUSD terms that can be transferred from the source account to the destination account\n that performs the isolated position trade (PRE TRADE)\n */\n\n const availableMargin =\n userAccountExposure.getUsdNodeMarginInfo.initialDelta;\n\n const marginBalance =\n userAccountExposure.getUsdNodeMarginInfo.marginBalance;\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n const fees = ExposureCommand.calculateFee(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n this.loadedData.feeParameter,\n );\n\n const { usdNodeMarginInfo: newMarginInfo, tokenMarginInfoPerAsset } =\n userAccountExposure.getUsdNodeMarginInfoPostTrade(\n amount,\n this.loadedData.marketStorage.quote_collateral,\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage.risk_block_id,\n );\n\n const newQuoteTokenMarginInfo = tokenMarginInfoPerAsset.find(\n (marginInfo: MarginInfo) => {\n return (\n marginInfo.assetAddress ===\n this.loadedData?.marketStorage?.quote_collateral\n );\n },\n );\n\n if (!newQuoteTokenMarginInfo) {\n throw new Error('Error performing simulation');\n }\n\n /*\n * Note, required margin is the initial margin requirement in rUSD terms of the account after the trade.\n * margin balance rusd - initial delta rusd = margin balance rusd - (margin balance rusd - imr rusd) = imr rusd\n * */\n\n const requiredMargin =\n newQuoteTokenMarginInfo.marginBalance -\n newQuoteTokenMarginInfo.initialDelta;\n\n const liquidationPrice = ExposureCommand.calculateLiquidation(\n newMarginInfo.marginBalance,\n newQuoteTokenMarginInfo.liquidationMarginRequirement,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n );\n\n const marginRatio = ExposureCommand.getMarginRatio(newMarginInfo);\n\n const marginRatioHealth = ExposureCommand.evaluateHealthStatus(\n marginRatio * 100,\n );\n\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const snappedAmountInBase = this.roundToBaseSpacing(amount, baseSpacing);\n const snappedAmount = snappedAmountInBase * spotPrice;\n const xpEarnRangeMin = Math.round(Math.abs(snappedAmount) / 200);\n const xpEarnRangeMax = Math.round((100 * Math.abs(snappedAmount)) / 200);\n\n return {\n estimatedPrice,\n estimatedSlippage: slippage * 100,\n fees,\n liquidationPrice: liquidationPrice.toNumber(),\n marginRatio: marginRatio * 100,\n marginRatioHealth,\n marginBalance,\n availableMargin,\n requiredMargin,\n snappedAmount,\n snappedAmountInBase,\n xpEarnRange: {\n min: xpEarnRangeMin,\n max: xpEarnRangeMax,\n },\n } as SimulateTradeEntity;\n }\n\n convertValue(\n params: TradeSimulationConvertValueParams,\n ): TradeSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!params.fromBase)\n return BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n else\n return BigNumber(params.amount)\n .times(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n }\n\n convertValueEstimatedPrice(\n params: TradeSimulationConvertValueEstimatedPriceParams,\n ): TradeSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n if (!params.fromBase)\n return BigNumber(params.amount).div(estimatedPrice).toNumber();\n else return BigNumber(params.amount).times(estimatedPrice).toNumber();\n }\n\n estimatedPrice(params: EstimatedPriceParams): EstimatedPriceResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n\n const price =\n this.loadedData.exposureDataAccount.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n return {\n estimatedPrice,\n markPrice: price,\n };\n }\n\n roundToBaseSpacing(amount: number, baseSpacing: number): number {\n const snappedAmount = BigNumber(amount)\n .abs()\n .dividedBy(baseSpacing)\n .integerValue(BigNumber.ROUND_FLOOR)\n .multipliedBy(baseSpacing)\n .toNumber();\n\n if (amount < 0) {\n return -snappedAmount;\n }\n return snappedAmount;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["clients/modules/trade.simulation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EstimatedPriceParams,\n EstimatedPriceResult,\n SimulateTradeEntity,\n TradeSimulationConvertValueEstimatedPriceParams,\n TradeSimulationConvertValueParams,\n TradeSimulationConvertValueResult,\n TradeSimulationLoadDataParams,\n TradeSimulationSimulateParams,\n} from './types';\nimport AccountClient from '../account';\nimport {\n amountNormalizer,\n ExposureCommand,\n MarginInfo,\n TradeSimulationState,\n} from '@reyaxyz/common';\nimport BigNumber from 'bignumber.js';\n\nexport default class TradeSimulationClient {\n private marketId: number | null = null;\n private accountId: number | null = null;\n private loadedData: TradeSimulationState | null = null;\n private accountClient: AccountClient;\n constructor(accountClient: AccountClient) {\n // Constructor added\n this.accountClient = accountClient;\n }\n\n // Method to asynchronously load data based on marketId and accountId\n async arm(params: TradeSimulationLoadDataParams): Promise<void> {\n this.marketId = params.marketId;\n this.accountId = params.marginAccountId;\n\n this.loadedData = await this.fetchMarketData(this.marketId, this.accountId);\n }\n\n private async fetchMarketData(\n marketId: number,\n accountId: number,\n ): Promise<TradeSimulationState> {\n return this.accountClient.getTransactionSimulationInitialData({\n marginAccountId: accountId,\n marketId: marketId,\n });\n }\n\n // Synchronous method to simulate operations based on an amount\n simulate(params: TradeSimulationSimulateParams): SimulateTradeEntity {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const amount = BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n\n const userAccountExposure = new ExposureCommand(\n this.loadedData.exposureDataAccount.accountId,\n this.loadedData.exposureDataAccount.rootCollateralPoolId,\n this.loadedData.exposureDataAccount.oraclePricePerMarket,\n this.loadedData.exposureDataAccount.accountBalancePerAsset,\n this.loadedData.exposureDataAccount.groupedByCollateral,\n this.loadedData.exposureDataAccount.riskMultipliers,\n this.loadedData.exposureDataAccount.riskMatrices,\n this.loadedData.exposureDataAccount.exchangeInfoPerAsset,\n this.loadedData.exposureDataAccount.positionInfoMarketConfiguration,\n this.loadedData.exposureDataAccount.uniqueTokenAddresses,\n this.loadedData.exposureDataAccount.uniqueQuoteCollaterals,\n this.loadedData.exposureDataAccount.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataAccount.realizedPnLSum,\n this.loadedData.exposureDataAccount.unrealizedPnLSum,\n this.loadedData.exposureDataAccount.collateralAddressToExchangePrice,\n );\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n\n /*\n max amount of margin in rUSD terms that can be transferred from the source account to the destination account\n that performs the isolated position trade (PRE TRADE)\n */\n\n const availableMargin =\n userAccountExposure.getUsdNodeMarginInfo.initialDelta;\n\n const marginBalance =\n userAccountExposure.getUsdNodeMarginInfo.marginBalance;\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n const fees = ExposureCommand.calculateFee(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n this.loadedData.feeParameter,\n );\n\n const { usdNodeMarginInfo: newMarginInfo, tokenMarginInfoPerAsset } =\n userAccountExposure.getUsdNodeMarginInfoPostTrade(\n amount,\n this.loadedData.marketStorage.quote_collateral,\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage.risk_block_id,\n );\n\n const newQuoteTokenMarginInfo = tokenMarginInfoPerAsset.find(\n (marginInfo: MarginInfo) => {\n return (\n marginInfo.assetAddress ===\n this.loadedData?.marketStorage?.quote_collateral\n );\n },\n );\n\n if (!newQuoteTokenMarginInfo) {\n throw new Error('Error performing simulation');\n }\n\n /*\n * Note, required margin is the initial margin requirement in rUSD terms of the account after the trade.\n * margin balance rusd - initial delta rusd = margin balance rusd - (margin balance rusd - imr rusd) = imr rusd\n * */\n\n const requiredMargin =\n newQuoteTokenMarginInfo.marginBalance -\n newQuoteTokenMarginInfo.initialDelta;\n\n const liquidationPrice = ExposureCommand.calculateLiquidation(\n newMarginInfo.marginBalance,\n newQuoteTokenMarginInfo.liquidationMarginRequirement,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n amount,\n );\n\n const marginRatio = ExposureCommand.getMarginRatio(newMarginInfo);\n\n const marginRatioHealth = ExposureCommand.evaluateHealthStatus(\n marginRatio * 100,\n );\n\n const baseSpacing = amountNormalizer(\n this.loadedData.marketConfiguration.base_spacing,\n ).toNumber();\n\n const spotPrice =\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const snappedAmountInBase = this.roundToBaseSpacing(amount, baseSpacing);\n const snappedAmount = snappedAmountInBase * spotPrice;\n const xpEarnRangeMin = Math.round(Math.abs(snappedAmount) / 200);\n const xpEarnRangeMax = Math.round((100 * Math.abs(snappedAmount)) / 200);\n\n return {\n estimatedPrice,\n estimatedSlippage: slippage * 100,\n fees,\n liquidationPrice: liquidationPrice.toNumber(),\n marginRatio: marginRatio * 100,\n marginRatioHealth,\n marginBalance,\n availableMargin,\n requiredMargin,\n snappedAmount,\n snappedAmountInBase,\n xpEarnRange: {\n min: xpEarnRangeMin,\n max: xpEarnRangeMax,\n },\n maxSlippage: 1,\n } as SimulateTradeEntity;\n }\n\n convertValue(\n params: TradeSimulationConvertValueParams,\n ): TradeSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n if (!params.fromBase)\n return BigNumber(params.amount)\n .div(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n else\n return BigNumber(params.amount)\n .times(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n )\n .toNumber();\n }\n\n convertValueEstimatedPrice(\n params: TradeSimulationConvertValueEstimatedPriceParams,\n ): TradeSimulationConvertValueResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n if (!params.fromBase)\n return BigNumber(params.amount).div(estimatedPrice).toNumber();\n else return BigNumber(params.amount).times(estimatedPrice).toNumber();\n }\n\n estimatedPrice(params: EstimatedPriceParams): EstimatedPriceResult {\n if (!this.loadedData) {\n throw new Error('Data not loaded. Call arm() first.');\n }\n\n const passivePoolExposure = new ExposureCommand(\n this.loadedData.exposureDataPassivePool.accountId,\n this.loadedData.exposureDataPassivePool.rootCollateralPoolId,\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket,\n this.loadedData.exposureDataPassivePool.accountBalancePerAsset,\n this.loadedData.exposureDataPassivePool.groupedByCollateral,\n this.loadedData.exposureDataPassivePool.riskMultipliers,\n this.loadedData.exposureDataPassivePool.riskMatrices,\n this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,\n this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,\n this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,\n this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,\n this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,\n this.loadedData.exposureDataPassivePool.realizedPnLSum,\n this.loadedData.exposureDataPassivePool.unrealizedPnLSum,\n this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,\n );\n const slippage = passivePoolExposure.getSlippage(\n BigNumber(params.amount).negated().toNumber(),\n this.loadedData.marketConfiguration,\n this.loadedData.marketStorage,\n );\n\n const price =\n this.loadedData.exposureDataAccount.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ];\n\n const estimatedPrice = ExposureCommand.calculateEstimatedPrice(\n this.loadedData.exposureDataPassivePool.oraclePricePerMarket[\n this.loadedData.marketConfiguration.market_id\n ],\n slippage,\n );\n\n return {\n estimatedPrice,\n markPrice: price,\n };\n }\n\n roundToBaseSpacing(amount: number, baseSpacing: number): number {\n const snappedAmount = BigNumber(amount)\n .abs()\n .dividedBy(baseSpacing)\n .integerValue(BigNumber.ROUND_FLOOR)\n .multipliedBy(baseSpacing)\n .toNumber();\n\n if (amount < 0) {\n return -snappedAmount;\n }\n return snappedAmount;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/trade.simulation/types.ts"],"names":[],"mappings":"","sourcesContent":["import { MarginAccountEntity, MarketEntity } from '@reyaxyz/common';\n\nexport type TradeSimulationLoadDataParams = {\n marketId: MarketEntity['id'];\n marginAccountId: MarginAccountEntity['id'];\n};\n\nexport type TradeSimulationSimulateParams = {\n amount: number; // position size, + for long | - for short\n};\n\nexport type TradeSimulationConvertValueParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type EstimatedPriceParams = {\n amount: number; // amount in base\n};\n\nexport type EstimatedPriceResult = {\n estimatedPrice: number;\n markPrice: number;\n};\n\nexport type TradeSimulationConvertValueEstimatedPriceParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type TradeSimulationConvertValueEstimatedPriceResult = number;\n\nexport type SimulateTradeEntity = {\n liquidationPrice: number;\n fees: number;\n estimatedPrice: number;\n estimatedSlippage: number;\n marginRatio: MarginAccountEntity['marginRatioPercentage'];\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n availableMargin: number;\n marginBalance: number;\n requiredMargin: number;\n snappedAmount: number;\n snappedAmountInBase: number;\n xpEarnRange?: {\n min: number;\n max: number;\n };\n};\n\nexport type TradeSimulationConvertValueResult = number;\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/modules/trade.simulation/types.ts"],"names":[],"mappings":"","sourcesContent":["import { MarginAccountEntity, MarketEntity } from '@reyaxyz/common';\n\nexport type TradeSimulationLoadDataParams = {\n marketId: MarketEntity['id'];\n marginAccountId: MarginAccountEntity['id'];\n};\n\nexport type TradeSimulationSimulateParams = {\n amount: number; // position size, + for long | - for short\n};\n\nexport type TradeSimulationConvertValueParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type EstimatedPriceParams = {\n amount: number; // amount in base\n};\n\nexport type EstimatedPriceResult = {\n estimatedPrice: number;\n markPrice: number;\n};\n\nexport type TradeSimulationConvertValueEstimatedPriceParams = {\n amount: number;\n fromBase: boolean;\n};\n\nexport type TradeSimulationConvertValueEstimatedPriceResult = number;\n\nexport type SimulateTradeEntity = {\n liquidationPrice: number;\n fees: number;\n estimatedPrice: number;\n estimatedSlippage: number;\n marginRatio: MarginAccountEntity['marginRatioPercentage'];\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n availableMargin: number;\n marginBalance: number;\n requiredMargin: number;\n snappedAmount: number;\n snappedAmountInBase: number;\n xpEarnRange?: {\n min: number;\n max: number;\n };\n maxSlippage: number;\n};\n\nexport type TradeSimulationConvertValueResult = number;\n"]}
|
package/dist/clients/types.js
CHANGED
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "MarginAccountCollateralsBalanceGranularity", { e
|
|
|
26
26
|
Object.defineProperty(exports, "AllMarginAccountsBalanceGranularity", { enumerable: true, get: function () { return common_1.AllMarginAccountsBalanceGranularity; } });
|
|
27
27
|
Object.defineProperty(exports, "FundingRateHistoryGranularity", { enumerable: true, get: function () { return common_1.FundingRateHistoryGranularity; } });
|
|
28
28
|
__exportStar(require("./modules/account/types"), exports);
|
|
29
|
+
__exportStar(require("./modules/conditional-orders/types"), exports);
|
|
29
30
|
__exportStar(require("./modules/lp/types"), exports);
|
|
30
31
|
__exportStar(require("./modules/markets/types"), exports);
|
|
31
32
|
__exportStar(require("./modules/tokens/types"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAqD;AACrD,0CA4ByB;AA1BvB,2GAAA,iBAAiB,OAAA;AAYjB,qGAAA,WAAW,OAAA;AACX,2GAAA,iBAAiB,OAAA;AAGjB,8GAAA,oBAAoB,OAAA;AACpB,yHAAA,+BAA+B,OAAA;AAE/B,oIAAA,0CAA0C,OAAA;AAG1C,6HAAA,mCAAmC,OAAA;AAEnC,uHAAA,6BAA6B,OAAA;AAG/B,0DAAwC;AACxC,qDAAmC;AACnC,0DAAwC;AACxC,yDAAuC;AACvC,mEAAiD;AACjD,wDAAsC;AACtC,iFAA+D;AAC/D,4EAA0D;AAC1D,kFAAgE;AAChE,6EAA2D;AAC3D,yEAAuD;AACvD,mFAAiE;AACjE,yFAAuE;AACvE,8EAA4D;AAC5D,+DAA6C;AAC7C,yEAAuD;AACvD,kFAAgE;AAChE,4EAA0D","sourcesContent":["// reexporting what we want to share with integrators\nexport {\n Candle,\n CandlesResolution,\n MarketEntity,\n LpTransactionHistoryEntity,\n TradingHistoryEntity,\n PositionHistoryEntity,\n PositionEntity,\n TransactionHistoryType,\n MarginAccountTransactionHistoryType,\n MarginAccountTransactionHistoryEntity,\n MarginAccountEntity,\n LpPositionEntity,\n LpPoolEntity,\n ReyaChainId,\n MoneyInOutChainId,\n GetLpPoolPerformanceChartDataResult,\n GetLpPoolBalanceChartDataResult,\n LpBalanceGranularity,\n MarginAccountBalanceGranularity,\n GetMarginAccountBalanceChartDataResult,\n MarginAccountCollateralsBalanceGranularity,\n GetMarginAccountCollateralsBalanceChartDataResult,\n GetAllMarginAccountsBalanceChartDataResult,\n AllMarginAccountsBalanceGranularity,\n GetFundingRateChartDataResult,\n FundingRateHistoryGranularity,\n MoneyInOutConfigurationPerTokenName,\n} from '@reyaxyz/common';\nexport * from './modules/account/types';\nexport * from './modules/lp/types';\nexport * from './modules/markets/types';\nexport * from './modules/tokens/types';\nexport * from './modules/trade.simulation/types';\nexport * from './modules/owner/types';\nexport * from './modules/deposit-existing-MA.simulation/types';\nexport * from './modules/deposit-new-MA.simulation/types';\nexport * from './modules/deposit-passive-pool.simulation/types';\nexport * from './modules/edit-collateral.simulation/types';\nexport * from './modules/withdraw-MA.simulation/types';\nexport * from './modules/withdraw-passive-pool.simulation/types';\nexport * from './modules/transfer-margin-between-MAs.simulation/types';\nexport * from './modules/transfer-MA-Pool.simulation/types';\nexport * from './modules/funding-rate/types';\nexport * from './modules/depth-chart.simulation/types';\nexport * from './modules/deposit-passive-pool.simulation/types';\nexport * from './modules/isolated-order.simulation/types';\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["clients/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAqD;AACrD,0CA4ByB;AA1BvB,2GAAA,iBAAiB,OAAA;AAYjB,qGAAA,WAAW,OAAA;AACX,2GAAA,iBAAiB,OAAA;AAGjB,8GAAA,oBAAoB,OAAA;AACpB,yHAAA,+BAA+B,OAAA;AAE/B,oIAAA,0CAA0C,OAAA;AAG1C,6HAAA,mCAAmC,OAAA;AAEnC,uHAAA,6BAA6B,OAAA;AAG/B,0DAAwC;AACxC,qEAAmD;AACnD,qDAAmC;AACnC,0DAAwC;AACxC,yDAAuC;AACvC,mEAAiD;AACjD,wDAAsC;AACtC,iFAA+D;AAC/D,4EAA0D;AAC1D,kFAAgE;AAChE,6EAA2D;AAC3D,yEAAuD;AACvD,mFAAiE;AACjE,yFAAuE;AACvE,8EAA4D;AAC5D,+DAA6C;AAC7C,yEAAuD;AACvD,kFAAgE;AAChE,4EAA0D","sourcesContent":["// reexporting what we want to share with integrators\nexport {\n Candle,\n CandlesResolution,\n MarketEntity,\n LpTransactionHistoryEntity,\n TradingHistoryEntity,\n PositionHistoryEntity,\n PositionEntity,\n TransactionHistoryType,\n MarginAccountTransactionHistoryType,\n MarginAccountTransactionHistoryEntity,\n MarginAccountEntity,\n LpPositionEntity,\n LpPoolEntity,\n ReyaChainId,\n MoneyInOutChainId,\n GetLpPoolPerformanceChartDataResult,\n GetLpPoolBalanceChartDataResult,\n LpBalanceGranularity,\n MarginAccountBalanceGranularity,\n GetMarginAccountBalanceChartDataResult,\n MarginAccountCollateralsBalanceGranularity,\n GetMarginAccountCollateralsBalanceChartDataResult,\n GetAllMarginAccountsBalanceChartDataResult,\n AllMarginAccountsBalanceGranularity,\n GetFundingRateChartDataResult,\n FundingRateHistoryGranularity,\n MoneyInOutConfigurationPerTokenName,\n} from '@reyaxyz/common';\nexport * from './modules/account/types';\nexport * from './modules/conditional-orders/types';\nexport * from './modules/lp/types';\nexport * from './modules/markets/types';\nexport * from './modules/tokens/types';\nexport * from './modules/trade.simulation/types';\nexport * from './modules/owner/types';\nexport * from './modules/deposit-existing-MA.simulation/types';\nexport * from './modules/deposit-new-MA.simulation/types';\nexport * from './modules/deposit-passive-pool.simulation/types';\nexport * from './modules/edit-collateral.simulation/types';\nexport * from './modules/withdraw-MA.simulation/types';\nexport * from './modules/withdraw-passive-pool.simulation/types';\nexport * from './modules/transfer-margin-between-MAs.simulation/types';\nexport * from './modules/transfer-MA-Pool.simulation/types';\nexport * from './modules/funding-rate/types';\nexport * from './modules/depth-chart.simulation/types';\nexport * from './modules/deposit-passive-pool.simulation/types';\nexport * from './modules/isolated-order.simulation/types';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/account/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wCAAwC,EACxC,wCAAwC,EACxC,8BAA8B,EAC9B,8BAA8B,EAC9B,qCAAqC,EACrC,qCAAqC,EACrC,kCAAkC,EAClC,kCAAkC,EAClC,yCAAyC,EACzC,sCAAsC,EACtC,iDAAiD,EACjD,0CAA0C,EAC1C,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,iCAAiC,EACjC,4CAA4C,EAC5C,uBAAuB,EACvB,wBAAwB,EACxB,sCAAsC,EACtC,sCAAsC,EACtC,kDAAkD,EAClD,kDAAkD,EAClD,0CAA0C,EAC1C,0CAA0C,EAC3C,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,iDAAiD,EACjD,sCAAsC,EACtC,0CAA0C,EAC1C,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IACnD;;;;;;;;;;;SAWK;IAEC,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/account/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wCAAwC,EACxC,wCAAwC,EACxC,8BAA8B,EAC9B,8BAA8B,EAC9B,qCAAqC,EACrC,qCAAqC,EACrC,kCAAkC,EAClC,kCAAkC,EAClC,yCAAyC,EACzC,sCAAsC,EACtC,iDAAiD,EACjD,0CAA0C,EAC1C,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,iCAAiC,EACjC,4CAA4C,EAC5C,uBAAuB,EACvB,wBAAwB,EACxB,sCAAsC,EACtC,sCAAsC,EACtC,kDAAkD,EAClD,kDAAkD,EAClD,0CAA0C,EAC1C,0CAA0C,EAC3C,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,iDAAiD,EACjD,sCAAsC,EACtC,0CAA0C,EAC1C,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IACnD;;;;;;;;;;;SAWK;IAEC,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IASnC;;;;;;;;;;OAUG;IAEG,gBAAgB,CACpB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,sBAAsB,CAAC;IAK5B,4BAA4B,CAChC,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,kCAAkC,CAAC;IAKxC,4CAA4C,CAChD,MAAM,EAAE,kDAAkD,GACzD,OAAO,CAAC,kDAAkD,CAAC;IASxD,oCAAoC,CACxC,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,0CAA0C,CAAC;IAOhD,wBAAwB,CAC5B,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,8BAA8B,CAAC;IAQpC,gCAAgC,CACpC,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,sCAAsC,CAAC;IAQ5C,mCAAmC,CACvC,MAAM,EAAE,yCAAyC,GAChD,OAAO,CAAC,oBAAoB,CAAC;IAO1B,sCAAsC,CAC1C,MAAM,EAAE,4CAA4C,GACnD,OAAO,CAAC,6BAA6B,CAAC;IAKnC,kCAAkC,CACtC,MAAM,EAAE,wCAAwC,GAC/C,OAAO,CAAC,wCAAwC,CAAC;IAO9C,+BAA+B,CACnC,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,qCAAqC,CAAC;IAO3C,gCAAgC,CACpC,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,sCAAsC,CAAC;IAQ5C,2CAA2C,CAC/C,MAAM,EAAE,iDAAiD,GACxD,OAAO,CAAC,iDAAiD,CAAC;IAQvD,gCAAgC,CACpC,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,0CAA0C,CAAC;IAQhD,2BAA2B,CAC/B,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,iCAAiC,CAAC;IAMvC,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IAe7B,kBAAkB,CACtB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,wBAAwB,CAAC;CAUrC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { RestClient, ReyaChainId } from '@reyaxyz/common';
|
|
2
|
-
import { CancelSLOrderParams, CancelSLOrderResult, GetPendingSLOrderParams, GetPendingSLOrderResult, RegisterSLOrderParams, RegisterSLOrderResult } from './types';
|
|
2
|
+
import { CancelSLOrderParams, CancelSLOrderResult, GetPendingSLOrderParams, GetPendingSLOrderResult, RegisterSLOrderParams, RegisterSLOrderResult, UpdateSLOrderParams, UpdateSLOrderResult } from './types';
|
|
3
3
|
export default class ConditionalOrdersClient extends RestClient {
|
|
4
4
|
private reyaChainId;
|
|
5
5
|
constructor(reyaChainId: ReyaChainId, host: string);
|
|
6
6
|
getPendingSLOrder(params: GetPendingSLOrderParams): Promise<GetPendingSLOrderResult>;
|
|
7
7
|
cancelSLOrder(params: CancelSLOrderParams): Promise<CancelSLOrderResult>;
|
|
8
8
|
registerSLOrder(params: RegisterSLOrderParams): Promise<RegisterSLOrderResult>;
|
|
9
|
+
updateSLOrder(params: UpdateSLOrderParams): Promise<UpdateSLOrderResult>;
|
|
9
10
|
private getPosition;
|
|
11
|
+
private createNonce;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/conditional-orders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/conditional-orders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,WAAW,EAMZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EAEnB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;IAK5C,iBAAiB,CACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IAa7B,aAAa,CACjB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAiBzB,eAAe,CACnB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA4D3B,aAAa,CACjB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;YAIjB,WAAW;IAQzB,OAAO,CAAC,WAAW;CAoBpB"}
|
|
@@ -2,6 +2,7 @@ import { StopLossOrder } from '@reyaxyz/common';
|
|
|
2
2
|
import { Signer, JsonRpcSigner } from 'ethers';
|
|
3
3
|
import { MarginAccountEntity, MarketEntity } from '@reyaxyz/common';
|
|
4
4
|
export type CancelSLOrderParams = {
|
|
5
|
+
signer: Signer | JsonRpcSigner;
|
|
5
6
|
orderId: number;
|
|
6
7
|
};
|
|
7
8
|
export type CancelSLOrderResult = StopLossOrder;
|
|
@@ -21,7 +22,7 @@ export type ConditionalOrderDetails = {
|
|
|
21
22
|
orderType: number;
|
|
22
23
|
inputs: string;
|
|
23
24
|
signer: string;
|
|
24
|
-
nonce:
|
|
25
|
+
nonce: string;
|
|
25
26
|
};
|
|
26
27
|
export type MarketParams = {
|
|
27
28
|
id: MarketEntity['id'];
|
|
@@ -35,5 +36,13 @@ export type RegisterSLOrderParams = {
|
|
|
35
36
|
stopLossPrice: number;
|
|
36
37
|
market: MarketParams;
|
|
37
38
|
};
|
|
39
|
+
export type UpdateSLOrderParams = {
|
|
40
|
+
signer: Signer | JsonRpcSigner;
|
|
41
|
+
orderId: number;
|
|
42
|
+
marginAccountId: MarginAccountEntity['id'];
|
|
43
|
+
stopLossPrice: number;
|
|
44
|
+
market: MarketParams;
|
|
45
|
+
};
|
|
38
46
|
export type RegisterSLOrderResult = StopLossOrder;
|
|
47
|
+
export type UpdateSLOrderResult = StopLossOrder;
|
|
39
48
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/conditional-orders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,IAAI,CAAC;AAE3D,oBAAY,oBAAoB;IAC9B,UAAU,IAAI;CACf;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC;IACpD,sBAAsB,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/conditional-orders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,IAAI,CAAC;AAE3D,oBAAY,oBAAoB;IAC9B,UAAU,IAAI;CACf;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC;IACpD,sBAAsB,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SimulateIsolatedOrderEntity, IsolatedOrderSimulationConvertValueParams, IsolatedOrderSimulationConvertValueResult, IsolatedOrderSimulationLoadDataParams, IsolatedOrderSimulationSimulateParams, LeverageBoundsAndAvailableMarginResult, LeverageBoundsAndAvailableMarginParams } from './types';
|
|
2
2
|
import AccountClient from '../account';
|
|
3
3
|
import { ExposureCommand, ExposureCommandState } from '@reyaxyz/common';
|
|
4
|
+
import { EstimatedPriceParams, EstimatedPriceResult, TradeSimulationConvertValueEstimatedPriceParams, TradeSimulationConvertValueResult } from '../trade.simulation/types';
|
|
4
5
|
export default class IsolatedOrderSimulationClient {
|
|
5
6
|
private loadedData;
|
|
6
7
|
private accountClient;
|
|
@@ -10,6 +11,8 @@ export default class IsolatedOrderSimulationClient {
|
|
|
10
11
|
private fetchMarketData;
|
|
11
12
|
simulate(params: IsolatedOrderSimulationSimulateParams): SimulateIsolatedOrderEntity;
|
|
12
13
|
convertValue(params: IsolatedOrderSimulationConvertValueParams): IsolatedOrderSimulationConvertValueResult;
|
|
14
|
+
convertValueEstimatedPrice(params: TradeSimulationConvertValueEstimatedPriceParams): TradeSimulationConvertValueResult;
|
|
15
|
+
estimatedPrice(params: EstimatedPriceParams): EstimatedPriceResult;
|
|
13
16
|
roundToBaseSpacing(amount: number, baseSpacing: number): number;
|
|
14
17
|
amountToSnappedAmount(amountInRusd: number, spotPrice: number, baseSpacing: number): number;
|
|
15
18
|
calculateIsolatedLMR(isolatedExposure: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,yCAAyC,EACzC,yCAAyC,EACzC,qCAAqC,EACrC,qCAAqC,EACrC,sCAAsC,EACtC,sCAAsC,EACvC,MAAM,SAAS,CAAC;AACjB,OAAO,aAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAEL,eAAe,EACf,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,yCAAyC,EACzC,yCAAyC,EACzC,qCAAqC,EACrC,qCAAqC,EACrC,sCAAsC,EACtC,sCAAsC,EACvC,MAAM,SAAS,CAAC;AACjB,OAAO,aAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAEL,eAAe,EACf,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,+CAA+C,EAC/C,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAChD,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAgB;gBACzB,aAAa,EAAE,aAAa;IAMlC,GAAG,CAAC,MAAM,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvE,MAAM,CAAC,wBAAwB,CAC7B,oBAAoB,EAAE,oBAAoB,GACzC,eAAe;YAoBJ,eAAe;IAW7B,QAAQ,CACN,MAAM,EAAE,qCAAqC,GAC5C,2BAA2B;IA4H9B,YAAY,CACV,MAAM,EAAE,yCAAyC,GAChD,yCAAyC;IAuB5C,0BAA0B,CACxB,MAAM,EAAE,+CAA+C,GACtD,iCAAiC;IAwCpC,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB;IA8ClE,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAc/D,qBAAqB,CACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM;IAQT,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAwCtD,gCAAgC,CAAC,EAC/B,kBAAkB,GACnB,EAAE,sCAAsC,GAAG,sCAAsC;CAqEnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAC1D,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG,MAAM,CAAC;AAE/D,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IAEnD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/isolated-order.simulation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAC1D,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG,MAAM,CAAC;AAE/D,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IAEnD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/trade.simulation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,+CAA+C,EAC/C,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,aAAa,MAAM,YAAY,CAAC;AASvC,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAgB;gBACzB,aAAa,EAAE,aAAa;IAMlC,GAAG,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;YAOjD,eAAe;IAW7B,QAAQ,CAAC,MAAM,EAAE,6BAA6B,GAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["clients/modules/trade.simulation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,+CAA+C,EAC/C,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,aAAa,MAAM,YAAY,CAAC;AASvC,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAgB;gBACzB,aAAa,EAAE,aAAa;IAMlC,GAAG,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;YAOjD,eAAe;IAW7B,QAAQ,CAAC,MAAM,EAAE,6BAA6B,GAAG,mBAAmB;IA8JpE,YAAY,CACV,MAAM,EAAE,iCAAiC,GACxC,iCAAiC;IAuBpC,0BAA0B,CACxB,MAAM,EAAE,+CAA+C,GACtD,iCAAiC;IAwCpC,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB;IA8ClE,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAahE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/trade.simulation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+CAA+C,GAAG;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+CAA+C,GAAG,MAAM,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAC1D,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/modules/trade.simulation/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+CAA+C,GAAG;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+CAA+C,GAAG,MAAM,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAC1D,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG,MAAM,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { Candle, CandlesResolution, MarketEntity, LpTransactionHistoryEntity, TradingHistoryEntity, PositionHistoryEntity, PositionEntity, TransactionHistoryType, MarginAccountTransactionHistoryType, MarginAccountTransactionHistoryEntity, MarginAccountEntity, LpPositionEntity, LpPoolEntity, ReyaChainId, MoneyInOutChainId, GetLpPoolPerformanceChartDataResult, GetLpPoolBalanceChartDataResult, LpBalanceGranularity, MarginAccountBalanceGranularity, GetMarginAccountBalanceChartDataResult, MarginAccountCollateralsBalanceGranularity, GetMarginAccountCollateralsBalanceChartDataResult, GetAllMarginAccountsBalanceChartDataResult, AllMarginAccountsBalanceGranularity, GetFundingRateChartDataResult, FundingRateHistoryGranularity, MoneyInOutConfigurationPerTokenName, } from '@reyaxyz/common';
|
|
2
2
|
export * from './modules/account/types';
|
|
3
|
+
export * from './modules/conditional-orders/types';
|
|
3
4
|
export * from './modules/lp/types';
|
|
4
5
|
export * from './modules/markets/types';
|
|
5
6
|
export * from './modules/tokens/types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,mCAAmC,EACnC,qCAAqC,EACrC,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,mCAAmC,EACnC,+BAA+B,EAC/B,oBAAoB,EACpB,+BAA+B,EAC/B,sCAAsC,EACtC,0CAA0C,EAC1C,iDAAiD,EACjD,0CAA0C,EAC1C,mCAAmC,EACnC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,kDAAkD,CAAC;AACjE,cAAc,wDAAwD,CAAC;AACvE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["clients/types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,mCAAmC,EACnC,qCAAqC,EACrC,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,mCAAmC,EACnC,+BAA+B,EAC/B,oBAAoB,EACpB,+BAA+B,EAC/B,sCAAsC,EACtC,0CAA0C,EAC1C,iDAAiD,EACjD,0CAA0C,EAC1C,mCAAmC,EACnC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,kDAAkD,CAAC;AACjE,cAAc,wDAAwD,CAAC;AACvE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/api-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.104.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
"generate:coverage-badges": "npx istanbul-badges-readme --silent"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@reyaxyz/common": "0.155.
|
|
36
|
+
"@reyaxyz/common": "0.155.3",
|
|
37
37
|
"bignumber.js": "^9.1.2",
|
|
38
38
|
"ethers": "6.9.0",
|
|
39
39
|
"isomorphic-ws": "^5.0.0",
|
|
40
40
|
"ws": "^8.16.0"
|
|
41
41
|
},
|
|
42
42
|
"packageManager": "pnpm@8.3.1",
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "a976b14d07232c97e81e2eee793f171ea4c92773",
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/ws": "8.5.10"
|
|
46
46
|
}
|
|
@@ -60,14 +60,6 @@ export default class AccountClient extends RestClient {
|
|
|
60
60
|
limit: params.limit,
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
response.forEach((account) => {
|
|
64
|
-
account.positions.forEach((position) => {
|
|
65
|
-
if (Math.random() > 0.5) {
|
|
66
|
-
position.stopLossPrice = Math.random() * 1000;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
63
|
return response;
|
|
72
64
|
}
|
|
73
65
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
calculateMaxPriceLimit,
|
|
3
3
|
PositionEntity,
|
|
4
4
|
RestClient,
|
|
5
5
|
ReyaChainId,
|
|
6
6
|
signConditionalOrder,
|
|
7
|
+
signCancelConditionalOrder,
|
|
7
8
|
StopLossOrder,
|
|
8
9
|
StopLossOrderStatus,
|
|
10
|
+
scale,
|
|
9
11
|
} from '@reyaxyz/common';
|
|
10
12
|
import { AbiCoder } from 'ethers';
|
|
11
13
|
import {
|
|
@@ -16,6 +18,8 @@ import {
|
|
|
16
18
|
GetPendingSLOrderResult,
|
|
17
19
|
RegisterSLOrderParams,
|
|
18
20
|
RegisterSLOrderResult,
|
|
21
|
+
UpdateSLOrderParams,
|
|
22
|
+
UpdateSLOrderResult,
|
|
19
23
|
} from './types';
|
|
20
24
|
|
|
21
25
|
export default class ConditionalOrdersClient extends RestClient {
|
|
@@ -29,7 +33,7 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
29
33
|
async getPendingSLOrder(
|
|
30
34
|
params: GetPendingSLOrderParams,
|
|
31
35
|
): Promise<GetPendingSLOrderResult> {
|
|
32
|
-
const uri = `/api/conditional-orders/sl/get-orders-by-position/${StopLossOrderStatus.
|
|
36
|
+
const uri = `/api/conditional-orders/sl/get-orders-by-position/${StopLossOrderStatus.PENDING}/${params.marketId}/${params.accountId}`;
|
|
33
37
|
const response = await this.get<GetPendingSLOrderResult[]>(uri);
|
|
34
38
|
|
|
35
39
|
if (response.length > 1) {
|
|
@@ -41,17 +45,21 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
41
45
|
return response[0];
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
// todo: need authentication
|
|
45
48
|
async cancelSLOrder(
|
|
46
49
|
params: CancelSLOrderParams,
|
|
47
50
|
): Promise<CancelSLOrderResult> {
|
|
48
|
-
const
|
|
49
|
-
|
|
51
|
+
const signature = await signCancelConditionalOrder(
|
|
52
|
+
params.signer,
|
|
53
|
+
params.orderId,
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const uri = `/api/conditional-orders/sl/cancel-order`;
|
|
57
|
+
return this.put<StopLossOrder>(
|
|
50
58
|
uri,
|
|
51
59
|
{},
|
|
52
60
|
{
|
|
53
61
|
orderId: params.orderId,
|
|
54
|
-
|
|
62
|
+
userSignature: signature,
|
|
55
63
|
},
|
|
56
64
|
);
|
|
57
65
|
}
|
|
@@ -69,16 +77,19 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
69
77
|
throw new Error('Position with no exposure');
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
const orderPriceLimit =
|
|
73
|
-
params.market.currentPrice,
|
|
74
|
-
positionBase,
|
|
75
|
-
);
|
|
80
|
+
const orderPriceLimit = Number(calculateMaxPriceLimit(positionBase < 0));
|
|
76
81
|
|
|
77
82
|
const inputs = AbiCoder.defaultAbiCoder().encode(
|
|
78
83
|
['uint256', 'uint256'],
|
|
79
|
-
[params.stopLossPrice, orderPriceLimit],
|
|
84
|
+
[scale(18)(params.stopLossPrice), orderPriceLimit],
|
|
80
85
|
);
|
|
81
|
-
const
|
|
86
|
+
const creationTimestampMs = Date.now();
|
|
87
|
+
const nonce = this.createNonce(
|
|
88
|
+
params.marginAccountId,
|
|
89
|
+
params.market.id,
|
|
90
|
+
creationTimestampMs,
|
|
91
|
+
);
|
|
92
|
+
const deadline = 10 ** 18; // very big number for timestamp in seconds - infinite deadline
|
|
82
93
|
|
|
83
94
|
const signature = await signConditionalOrder(
|
|
84
95
|
params.signer,
|
|
@@ -90,19 +101,9 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
90
101
|
ConditionalOrderType.StopLoss,
|
|
91
102
|
inputs,
|
|
92
103
|
nonce,
|
|
93
|
-
|
|
104
|
+
deadline,
|
|
94
105
|
);
|
|
95
106
|
|
|
96
|
-
// cancel old order existing order
|
|
97
|
-
if (position.stopLossPrice) {
|
|
98
|
-
const order = await this.getPendingSLOrder({
|
|
99
|
-
accountId: params.marginAccountId,
|
|
100
|
-
marketId: params.market.id,
|
|
101
|
-
});
|
|
102
|
-
if (order != null) {
|
|
103
|
-
await this.cancelSLOrder({ orderId: order.orderId });
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
107
|
// create new entry
|
|
107
108
|
const uri = `/api/conditional-orders/sl/create-order`;
|
|
108
109
|
return this.post<StopLossOrder>(
|
|
@@ -115,12 +116,22 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
115
116
|
stopPrice: params.stopLossPrice,
|
|
116
117
|
signerWallet: await params.signer.getAddress(),
|
|
117
118
|
nonce: nonce,
|
|
118
|
-
signature: signature
|
|
119
|
-
|
|
119
|
+
signature: signature,
|
|
120
|
+
deadline: deadline,
|
|
121
|
+
orderPriceLimit: orderPriceLimit,
|
|
122
|
+
exchangeId: params.market.exchangeId,
|
|
123
|
+
poolId: params.market.counterpartyAccountIds[0],
|
|
124
|
+
timestampMs: creationTimestampMs,
|
|
120
125
|
},
|
|
121
126
|
);
|
|
122
127
|
}
|
|
123
128
|
|
|
129
|
+
async updateSLOrder(
|
|
130
|
+
params: UpdateSLOrderParams,
|
|
131
|
+
): Promise<UpdateSLOrderResult> {
|
|
132
|
+
return await this.registerSLOrder(params as RegisterSLOrderParams);
|
|
133
|
+
}
|
|
134
|
+
|
|
124
135
|
private async getPosition(
|
|
125
136
|
accountId: number,
|
|
126
137
|
marketId: number,
|
|
@@ -128,4 +139,25 @@ export default class ConditionalOrdersClient extends RestClient {
|
|
|
128
139
|
const uri = `/api/account/marginAccount/position/${accountId}/${marketId}`;
|
|
129
140
|
return this.get<PositionEntity>(uri);
|
|
130
141
|
}
|
|
142
|
+
|
|
143
|
+
private createNonce(
|
|
144
|
+
accountId: number,
|
|
145
|
+
marketId: number,
|
|
146
|
+
timestampMs: number,
|
|
147
|
+
): string {
|
|
148
|
+
// Validate the input ranges
|
|
149
|
+
if (marketId < 0 || marketId >= 2 ** 32)
|
|
150
|
+
throw new Error('marketId is out of range');
|
|
151
|
+
if (accountId < BigInt(0) || accountId >= 2 ** 128)
|
|
152
|
+
throw new Error('accountId is out of range');
|
|
153
|
+
if (timestampMs < 0 || timestampMs >= 2 ** 64)
|
|
154
|
+
throw new Error('timestamp is out of range');
|
|
155
|
+
|
|
156
|
+
const hashUint256 =
|
|
157
|
+
(BigInt(accountId) << BigInt(98)) |
|
|
158
|
+
(BigInt(timestampMs) << BigInt(32)) |
|
|
159
|
+
BigInt(marketId);
|
|
160
|
+
|
|
161
|
+
return hashUint256.toString();
|
|
162
|
+
}
|
|
131
163
|
}
|
|
@@ -3,6 +3,7 @@ import { Signer, JsonRpcSigner } from 'ethers';
|
|
|
3
3
|
import { MarginAccountEntity, MarketEntity } from '@reyaxyz/common';
|
|
4
4
|
|
|
5
5
|
export type CancelSLOrderParams = {
|
|
6
|
+
signer: Signer | JsonRpcSigner;
|
|
6
7
|
orderId: number;
|
|
7
8
|
};
|
|
8
9
|
|
|
@@ -27,7 +28,7 @@ export type ConditionalOrderDetails = {
|
|
|
27
28
|
orderType: number;
|
|
28
29
|
inputs: string;
|
|
29
30
|
signer: string;
|
|
30
|
-
nonce:
|
|
31
|
+
nonce: string;
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
export type MarketParams = {
|
|
@@ -44,4 +45,13 @@ export type RegisterSLOrderParams = {
|
|
|
44
45
|
market: MarketParams;
|
|
45
46
|
};
|
|
46
47
|
|
|
48
|
+
export type UpdateSLOrderParams = {
|
|
49
|
+
signer: Signer | JsonRpcSigner;
|
|
50
|
+
orderId: number;
|
|
51
|
+
marginAccountId: MarginAccountEntity['id'];
|
|
52
|
+
stopLossPrice: number;
|
|
53
|
+
market: MarketParams;
|
|
54
|
+
};
|
|
55
|
+
|
|
47
56
|
export type RegisterSLOrderResult = StopLossOrder;
|
|
57
|
+
export type UpdateSLOrderResult = StopLossOrder;
|
|
@@ -17,6 +17,12 @@ import {
|
|
|
17
17
|
} from '@reyaxyz/common';
|
|
18
18
|
import BigNumber from 'bignumber.js';
|
|
19
19
|
import { EditCollateralAction } from '@reyaxyz/common';
|
|
20
|
+
import {
|
|
21
|
+
EstimatedPriceParams,
|
|
22
|
+
EstimatedPriceResult,
|
|
23
|
+
TradeSimulationConvertValueEstimatedPriceParams,
|
|
24
|
+
TradeSimulationConvertValueResult,
|
|
25
|
+
} from '../trade.simulation/types';
|
|
20
26
|
|
|
21
27
|
export default class IsolatedOrderSimulationClient {
|
|
22
28
|
private loadedData: TradeSimulationState | null = null;
|
|
@@ -189,6 +195,7 @@ export default class IsolatedOrderSimulationClient {
|
|
|
189
195
|
min: xpEarnRangeMin,
|
|
190
196
|
max: xpEarnRangeMax,
|
|
191
197
|
},
|
|
198
|
+
maxSlippage: 1,
|
|
192
199
|
} as SimulateIsolatedOrderEntity;
|
|
193
200
|
}
|
|
194
201
|
|
|
@@ -217,6 +224,94 @@ export default class IsolatedOrderSimulationClient {
|
|
|
217
224
|
.toNumber();
|
|
218
225
|
}
|
|
219
226
|
|
|
227
|
+
convertValueEstimatedPrice(
|
|
228
|
+
params: TradeSimulationConvertValueEstimatedPriceParams,
|
|
229
|
+
): TradeSimulationConvertValueResult {
|
|
230
|
+
if (!this.loadedData) {
|
|
231
|
+
throw new Error('Data not loaded. Call arm() first.');
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const passivePoolExposure = new ExposureCommand(
|
|
235
|
+
this.loadedData.exposureDataPassivePool.accountId,
|
|
236
|
+
this.loadedData.exposureDataPassivePool.rootCollateralPoolId,
|
|
237
|
+
this.loadedData.exposureDataPassivePool.oraclePricePerMarket,
|
|
238
|
+
this.loadedData.exposureDataPassivePool.accountBalancePerAsset,
|
|
239
|
+
this.loadedData.exposureDataPassivePool.groupedByCollateral,
|
|
240
|
+
this.loadedData.exposureDataPassivePool.riskMultipliers,
|
|
241
|
+
this.loadedData.exposureDataPassivePool.riskMatrices,
|
|
242
|
+
this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,
|
|
243
|
+
this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,
|
|
244
|
+
this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,
|
|
245
|
+
this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,
|
|
246
|
+
this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,
|
|
247
|
+
this.loadedData.exposureDataPassivePool.realizedPnLSum,
|
|
248
|
+
this.loadedData.exposureDataPassivePool.unrealizedPnLSum,
|
|
249
|
+
this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
const slippage = passivePoolExposure.getSlippage(
|
|
253
|
+
BigNumber(params.amount).negated().toNumber(),
|
|
254
|
+
this.loadedData.marketConfiguration,
|
|
255
|
+
this.loadedData.marketStorage,
|
|
256
|
+
);
|
|
257
|
+
const estimatedPrice = ExposureCommand.calculateEstimatedPrice(
|
|
258
|
+
this.loadedData.exposureDataPassivePool.oraclePricePerMarket[
|
|
259
|
+
this.loadedData.marketConfiguration.market_id
|
|
260
|
+
],
|
|
261
|
+
slippage,
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
if (!params.fromBase)
|
|
265
|
+
return BigNumber(params.amount).div(estimatedPrice).toNumber();
|
|
266
|
+
else return BigNumber(params.amount).times(estimatedPrice).toNumber();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
estimatedPrice(params: EstimatedPriceParams): EstimatedPriceResult {
|
|
270
|
+
if (!this.loadedData) {
|
|
271
|
+
throw new Error('Data not loaded. Call arm() first.');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const passivePoolExposure = new ExposureCommand(
|
|
275
|
+
this.loadedData.exposureDataPassivePool.accountId,
|
|
276
|
+
this.loadedData.exposureDataPassivePool.rootCollateralPoolId,
|
|
277
|
+
this.loadedData.exposureDataPassivePool.oraclePricePerMarket,
|
|
278
|
+
this.loadedData.exposureDataPassivePool.accountBalancePerAsset,
|
|
279
|
+
this.loadedData.exposureDataPassivePool.groupedByCollateral,
|
|
280
|
+
this.loadedData.exposureDataPassivePool.riskMultipliers,
|
|
281
|
+
this.loadedData.exposureDataPassivePool.riskMatrices,
|
|
282
|
+
this.loadedData.exposureDataPassivePool.exchangeInfoPerAsset,
|
|
283
|
+
this.loadedData.exposureDataPassivePool.positionInfoMarketConfiguration,
|
|
284
|
+
this.loadedData.exposureDataPassivePool.uniqueTokenAddresses,
|
|
285
|
+
this.loadedData.exposureDataPassivePool.uniqueQuoteCollaterals,
|
|
286
|
+
this.loadedData.exposureDataPassivePool.tokenMarginInfoPerAsset,
|
|
287
|
+
this.loadedData.exposureDataPassivePool.realizedPnLSum,
|
|
288
|
+
this.loadedData.exposureDataPassivePool.unrealizedPnLSum,
|
|
289
|
+
this.loadedData.exposureDataPassivePool.collateralAddressToExchangePrice,
|
|
290
|
+
);
|
|
291
|
+
const slippage = passivePoolExposure.getSlippage(
|
|
292
|
+
BigNumber(params.amount).negated().toNumber(),
|
|
293
|
+
this.loadedData.marketConfiguration,
|
|
294
|
+
this.loadedData.marketStorage,
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
const price =
|
|
298
|
+
this.loadedData.exposureDataAccount.oraclePricePerMarket[
|
|
299
|
+
this.loadedData.marketConfiguration.market_id
|
|
300
|
+
];
|
|
301
|
+
|
|
302
|
+
const estimatedPrice = ExposureCommand.calculateEstimatedPrice(
|
|
303
|
+
this.loadedData.exposureDataPassivePool.oraclePricePerMarket[
|
|
304
|
+
this.loadedData.marketConfiguration.market_id
|
|
305
|
+
],
|
|
306
|
+
slippage,
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
return {
|
|
310
|
+
estimatedPrice,
|
|
311
|
+
markPrice: price,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
220
315
|
roundToBaseSpacing(amount: number, baseSpacing: number): number {
|
|
221
316
|
const snappedAmount = BigNumber(amount)
|
|
222
317
|
.abs()
|
package/src/clients/types.ts
CHANGED
|
@@ -29,6 +29,7 @@ export {
|
|
|
29
29
|
MoneyInOutConfigurationPerTokenName,
|
|
30
30
|
} from '@reyaxyz/common';
|
|
31
31
|
export * from './modules/account/types';
|
|
32
|
+
export * from './modules/conditional-orders/types';
|
|
32
33
|
export * from './modules/lp/types';
|
|
33
34
|
export * from './modules/markets/types';
|
|
34
35
|
export * from './modules/tokens/types';
|