@reyaxyz/sdk 0.72.0 → 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/services/isolated-order/index.js +19 -0
- package/dist/services/isolated-order/index.js.map +1 -0
- package/dist/services/isolated-order/isolatedOrder.js +88 -0
- package/dist/services/isolated-order/isolatedOrder.js.map +1 -0
- package/dist/services/isolated-order/types.js +3 -0
- package/dist/services/isolated-order/types.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/isolated-order/index.d.ts +3 -0
- package/dist/types/services/isolated-order/index.d.ts.map +1 -0
- package/dist/types/services/isolated-order/isolatedOrder.d.ts +3 -0
- package/dist/types/services/isolated-order/isolatedOrder.d.ts.map +1 -0
- package/dist/types/services/isolated-order/types.d.ts +15 -0
- package/dist/types/services/isolated-order/types.d.ts.map +1 -0
- package/dist/types/utils/trade.d.ts.map +1 -1
- package/dist/utils/trade.js +1 -0
- package/dist/utils/trade.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/services/isolated-order/index.ts +2 -0
- package/src/services/isolated-order/isolatedOrder.ts +56 -0
- package/src/services/isolated-order/types.ts +16 -0
- package/src/utils/trade.ts +1 -0
package/README.md
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
|
|
7
7
|
| Statements | Branches | Functions | Lines |
|
|
8
8
|
| --------------------------- | ----------------------- | ------------------------- | ----------------- |
|
|
9
|
-
|  |  |  |  |
|
|
10
10
|
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./services/lp"), exports);
|
|
|
19
19
|
__exportStar(require("./services/margin-accounts"), exports);
|
|
20
20
|
__exportStar(require("./services/money-flows"), exports);
|
|
21
21
|
__exportStar(require("./services/orders"), exports);
|
|
22
|
+
__exportStar(require("./services/isolated-order"), exports);
|
|
22
23
|
__exportStar(require("./services/token"), exports);
|
|
23
24
|
var config_1 = require("./config");
|
|
24
25
|
Object.defineProperty(exports, "configureSDK", { enumerable: true, get: function () { return config_1.configureSDK; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,6DAA2C;AAC3C,yDAAuC;AACvC,oDAAkC;AAClC,mDAAiC;AACjC,mCAAwC;AAA/B,sGAAA,YAAY,OAAA","sourcesContent":["export * from './services/lp';\nexport * from './services/margin-accounts';\nexport * from './services/money-flows';\nexport * from './services/orders';\nexport * from './services/token';\nexport { configureSDK } from './config';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,6DAA2C;AAC3C,yDAAuC;AACvC,oDAAkC;AAClC,4DAA0C;AAC1C,mDAAiC;AACjC,mCAAwC;AAA/B,sGAAA,YAAY,OAAA","sourcesContent":["export * from './services/lp';\nexport * from './services/margin-accounts';\nexport * from './services/money-flows';\nexport * from './services/orders';\nexport * from './services/isolated-order';\nexport * from './services/token';\nexport { configureSDK } from './config';\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./isolatedOrder"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["services/isolated-order/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,kDAAgC","sourcesContent":["export * from './types';\nexport * from './isolatedOrder';\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.executeIsolatedOrder = void 0;
|
|
40
|
+
var common_1 = require("@reyaxyz/common");
|
|
41
|
+
var margin_accounts_1 = require("../margin-accounts");
|
|
42
|
+
var orders_1 = require("../orders");
|
|
43
|
+
var executeIsolatedOrder = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
44
|
+
var createAccountResult, network, chainId, matchOrderResult;
|
|
45
|
+
var _a;
|
|
46
|
+
return __generator(this, function (_b) {
|
|
47
|
+
switch (_b.label) {
|
|
48
|
+
case 0: return [4 /*yield*/, (0, margin_accounts_1.createAccount)({
|
|
49
|
+
signer: params.signer,
|
|
50
|
+
ownerAddress: params.owner.address,
|
|
51
|
+
name: 'Isolated Trade Account',
|
|
52
|
+
})];
|
|
53
|
+
case 1:
|
|
54
|
+
createAccountResult = _b.sent();
|
|
55
|
+
if (!createAccountResult.accountId) {
|
|
56
|
+
throw new Error('New Account Id not available to execute isolated trade');
|
|
57
|
+
}
|
|
58
|
+
return [4 /*yield*/, ((_a = params.signer.provider) === null || _a === void 0 ? void 0 : _a.getNetwork())];
|
|
59
|
+
case 2:
|
|
60
|
+
network = _b.sent();
|
|
61
|
+
chainId = Number(network === null || network === void 0 ? void 0 : network.chainId);
|
|
62
|
+
return [4 /*yield*/, (0, margin_accounts_1.transferMarginBetweenAccounts)({
|
|
63
|
+
signer: params.signer,
|
|
64
|
+
owner: params.owner,
|
|
65
|
+
fromMarginAccountId: params.fromMarginAccountId,
|
|
66
|
+
toMarginAccountId: createAccountResult.accountId,
|
|
67
|
+
amount: params.requiredMargin,
|
|
68
|
+
tokenAddress: (0, common_1.getTokenInfoByName)('RUSD', chainId).address,
|
|
69
|
+
})];
|
|
70
|
+
case 3:
|
|
71
|
+
_b.sent();
|
|
72
|
+
return [4 /*yield*/, (0, orders_1.matchOrder)({
|
|
73
|
+
signer: params.signer,
|
|
74
|
+
owner: params.owner,
|
|
75
|
+
marginAccountId: createAccountResult.accountId,
|
|
76
|
+
snappedAmountInBase: params.snappedAmountInBase,
|
|
77
|
+
market: params.market,
|
|
78
|
+
})];
|
|
79
|
+
case 4:
|
|
80
|
+
matchOrderResult = _b.sent();
|
|
81
|
+
return [2 /*return*/, {
|
|
82
|
+
transactionHash: (matchOrderResult === null || matchOrderResult === void 0 ? void 0 : matchOrderResult.transactionHash) || null,
|
|
83
|
+
}];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}); };
|
|
87
|
+
exports.executeIsolatedOrder = executeIsolatedOrder;
|
|
88
|
+
//# sourceMappingURL=isolatedOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolatedOrder.js","sourceRoot":"/","sources":["services/isolated-order/isolatedOrder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0CAAqD;AACrD,sDAG4B;AAC5B,oCAAuC;AAEhC,IAAM,oBAAoB,GAAG,UAClC,MAA2B;;;;;oBAQC,qBAAM,IAAA,+BAAa,EAAC;oBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;oBAClC,IAAI,EAAE,wBAAwB;iBAC/B,CAAC,EAAA;;gBAJI,mBAAmB,GAAG,SAI1B;gBAEF,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBAC5E,CAAC;gBAKe,qBAAM,CAAA,MAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,0CAAE,UAAU,EAAE,CAAA,EAAA;;gBAApD,OAAO,GAAG,SAA0C;gBACpD,OAAO,GAAG,MAAM,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,CAAC;gBAEzC,qBAAM,IAAA,+CAA6B,EAAC;wBAClC,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;wBAC/C,iBAAiB,EAAE,mBAAmB,CAAC,SAAS;wBAChD,MAAM,EAAE,MAAM,CAAC,cAAc;wBAC7B,YAAY,EAAE,IAAA,2BAAkB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO;qBAC1D,CAAC,EAAA;;gBAPF,SAOE,CAAC;gBAIsB,qBAAM,IAAA,mBAAU,EAAC;wBACxC,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,eAAe,EAAE,mBAAmB,CAAC,SAAS;wBAC9C,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;wBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,CAAC,EAAA;;gBANI,gBAAgB,GAAG,SAMvB;gBAEF,sBAAO;wBACL,eAAe,EAAE,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,KAAI,IAAI;qBAC3D,EAAC;;;KACH,CAAC;AA/CW,QAAA,oBAAoB,wBA+C/B","sourcesContent":["import { IsolatedOrderParams, IsolatedOrderResults } from './types';\nimport { getTokenInfoByName } from '@reyaxyz/common';\nimport {\n createAccount,\n transferMarginBetweenAccounts,\n} from '../margin-accounts';\nimport { matchOrder } from '../orders';\n\nexport const executeIsolatedOrder = async (\n params: IsolatedOrderParams,\n): Promise<IsolatedOrderResults> => {\n // todo: p2 consider performing all steps in api and only call one api function from here?\n\n // step 1: create new account\n\n // todo: p2: consider having a function that creates an account and auto-generates a name in one go, use it t&cs also\n // todo: p2: error handling & logging\n const createAccountResult = await createAccount({\n signer: params.signer,\n ownerAddress: params.owner.address,\n name: 'Isolated Trade Account',\n });\n\n if (!createAccountResult.accountId) {\n throw new Error('New Account Id not available to execute isolated trade');\n }\n\n // step 2: transfer margin from source to destination account\n // todo: p1: generalise to handle multiple transfer commands\n\n const network = await params.signer.provider?.getNetwork();\n const chainId = Number(network?.chainId);\n\n await transferMarginBetweenAccounts({\n signer: params.signer,\n owner: params.owner,\n fromMarginAccountId: params.fromMarginAccountId,\n toMarginAccountId: createAccountResult.accountId,\n amount: params.requiredMargin,\n tokenAddress: getTokenInfoByName('RUSD', chainId).address,\n });\n\n // step 3: execute trade\n\n const matchOrderResult = await matchOrder({\n signer: params.signer,\n owner: params.owner,\n marginAccountId: createAccountResult.accountId,\n snappedAmountInBase: params.snappedAmountInBase,\n market: params.market,\n });\n\n return {\n transactionHash: matchOrderResult?.transactionHash || null,\n };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/isolated-order/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Signer, JsonRpcSigner } from 'ethers';\nimport { MarginAccountEntity, OwnerMetadataEntity } from '@reyaxyz/common';\nimport { MarketParams } from '../orders';\n\nexport type IsolatedOrderParams = {\n signer: Signer | JsonRpcSigner;\n owner: Pick<OwnerMetadataEntity, 'coreSigNonce' | 'address'>;\n fromMarginAccountId: MarginAccountEntity['id'];\n requiredMargin: number; // todo: p2: use type from simulation in api-sdk via common dep\n snappedAmountInBase: number; // todo: p2: use type from simulation in api-sdk via common dep\n market: MarketParams;\n};\n\nexport type IsolatedOrderResults = {\n transactionHash: string | null;\n};\n"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './services/lp';
|
|
|
2
2
|
export * from './services/margin-accounts';
|
|
3
3
|
export * from './services/money-flows';
|
|
4
4
|
export * from './services/orders';
|
|
5
|
+
export * from './services/isolated-order';
|
|
5
6
|
export * from './services/token';
|
|
6
7
|
export { configureSDK } from './config';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["services/isolated-order/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolatedOrder.d.ts","sourceRoot":"/","sources":["services/isolated-order/isolatedOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAQpE,eAAO,MAAM,oBAAoB,WACvB,mBAAmB,KAC1B,QAAQ,oBAAoB,CA6C9B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Signer, JsonRpcSigner } from 'ethers';
|
|
2
|
+
import { MarginAccountEntity, OwnerMetadataEntity } from '@reyaxyz/common';
|
|
3
|
+
import { MarketParams } from '../orders';
|
|
4
|
+
export type IsolatedOrderParams = {
|
|
5
|
+
signer: Signer | JsonRpcSigner;
|
|
6
|
+
owner: Pick<OwnerMetadataEntity, 'coreSigNonce' | 'address'>;
|
|
7
|
+
fromMarginAccountId: MarginAccountEntity['id'];
|
|
8
|
+
requiredMargin: number;
|
|
9
|
+
snappedAmountInBase: number;
|
|
10
|
+
market: MarketParams;
|
|
11
|
+
};
|
|
12
|
+
export type IsolatedOrderResults = {
|
|
13
|
+
transactionHash: string | null;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/isolated-order/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC;IAC7D,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.d.ts","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":"AAGA,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAkBR"}
|
package/dist/utils/trade.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.calculatePriceLimitForTrade = void 0;
|
|
7
7
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
// todo: need the ability to supply custom slippage or use a more conservative default for the slippage tolerance
|
|
8
9
|
function calculatePriceLimitForTrade(orderPrice, amount) {
|
|
9
10
|
// Ensure orderPrice is BigInt
|
|
10
11
|
var orderPriceBigInt = (0, bignumber_js_1.default)(orderPrice);
|
package/dist/utils/trade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.js","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqC;AAErC,SAAgB,2BAA2B,CACzC,UAAkB,EAClB,MAAc;IAEd,8BAA8B;IAC9B,IAAM,gBAAgB,GAAG,IAAA,sBAAS,EAAC,UAAU,CAAC,CAAC;IAE/C,mCAAmC;IACnC,IAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvC,mFAAmF;IACnF,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,wBAAwB;QACxB,OAAO,MAAM,CACX,IAAA,sBAAS,EAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CACX,IAAA,sBAAS,EAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AArBD,kEAqBC","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport function calculatePriceLimitForTrade(\n orderPrice: number,\n amount: number,\n): bigint {\n // Ensure orderPrice is BigInt\n const orderPriceBigInt = BigNumber(orderPrice);\n\n // Calculate 50% of the order price\n const offset = orderPriceBigInt.div(2);\n\n // Determine if the amount is positive or negative and adjust the price accordingly\n if (amount > 0) {\n // Trade is long, so add\n return BigInt(\n BigNumber(orderPriceBigInt).plus(offset).times(1e18).toFixed(0),\n );\n } else {\n return BigInt(\n BigNumber(orderPriceBigInt).minus(offset).times(1e18).toFixed(0),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"trade.js","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqC;AAErC,iHAAiH;AACjH,SAAgB,2BAA2B,CACzC,UAAkB,EAClB,MAAc;IAEd,8BAA8B;IAC9B,IAAM,gBAAgB,GAAG,IAAA,sBAAS,EAAC,UAAU,CAAC,CAAC;IAE/C,mCAAmC;IACnC,IAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvC,mFAAmF;IACnF,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,wBAAwB;QACxB,OAAO,MAAM,CACX,IAAA,sBAAS,EAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CACX,IAAA,sBAAS,EAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AArBD,kEAqBC","sourcesContent":["import BigNumber from 'bignumber.js';\n\n// todo: need the ability to supply custom slippage or use a more conservative default for the slippage tolerance\nexport function calculatePriceLimitForTrade(\n orderPrice: number,\n amount: number,\n): bigint {\n // Ensure orderPrice is BigInt\n const orderPriceBigInt = BigNumber(orderPrice);\n\n // Calculate 50% of the order price\n const offset = orderPriceBigInt.div(2);\n\n // Determine if the amount is positive or negative and adjust the price accordingly\n if (amount > 0) {\n // Trade is long, so add\n return BigInt(\n BigNumber(orderPriceBigInt).plus(offset).times(1e18).toFixed(0),\n );\n } else {\n return BigInt(\n BigNumber(orderPriceBigInt).minus(offset).times(1e18).toFixed(0),\n );\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.73.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
"ethers": "6.9.0"
|
|
35
35
|
},
|
|
36
36
|
"packageManager": "pnpm@9.0.1",
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "cbf9c4faf47872a9122b553e1b7048d2a43a341e"
|
|
38
38
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,5 +2,6 @@ export * from './services/lp';
|
|
|
2
2
|
export * from './services/margin-accounts';
|
|
3
3
|
export * from './services/money-flows';
|
|
4
4
|
export * from './services/orders';
|
|
5
|
+
export * from './services/isolated-order';
|
|
5
6
|
export * from './services/token';
|
|
6
7
|
export { configureSDK } from './config';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { IsolatedOrderParams, IsolatedOrderResults } from './types';
|
|
2
|
+
import { getTokenInfoByName } from '@reyaxyz/common';
|
|
3
|
+
import {
|
|
4
|
+
createAccount,
|
|
5
|
+
transferMarginBetweenAccounts,
|
|
6
|
+
} from '../margin-accounts';
|
|
7
|
+
import { matchOrder } from '../orders';
|
|
8
|
+
|
|
9
|
+
export const executeIsolatedOrder = async (
|
|
10
|
+
params: IsolatedOrderParams,
|
|
11
|
+
): Promise<IsolatedOrderResults> => {
|
|
12
|
+
// todo: p2 consider performing all steps in api and only call one api function from here?
|
|
13
|
+
|
|
14
|
+
// step 1: create new account
|
|
15
|
+
|
|
16
|
+
// todo: p2: consider having a function that creates an account and auto-generates a name in one go, use it t&cs also
|
|
17
|
+
// todo: p2: error handling & logging
|
|
18
|
+
const createAccountResult = await createAccount({
|
|
19
|
+
signer: params.signer,
|
|
20
|
+
ownerAddress: params.owner.address,
|
|
21
|
+
name: 'Isolated Trade Account',
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
if (!createAccountResult.accountId) {
|
|
25
|
+
throw new Error('New Account Id not available to execute isolated trade');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// step 2: transfer margin from source to destination account
|
|
29
|
+
// todo: p1: generalise to handle multiple transfer commands
|
|
30
|
+
|
|
31
|
+
const network = await params.signer.provider?.getNetwork();
|
|
32
|
+
const chainId = Number(network?.chainId);
|
|
33
|
+
|
|
34
|
+
await transferMarginBetweenAccounts({
|
|
35
|
+
signer: params.signer,
|
|
36
|
+
owner: params.owner,
|
|
37
|
+
fromMarginAccountId: params.fromMarginAccountId,
|
|
38
|
+
toMarginAccountId: createAccountResult.accountId,
|
|
39
|
+
amount: params.requiredMargin,
|
|
40
|
+
tokenAddress: getTokenInfoByName('RUSD', chainId).address,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// step 3: execute trade
|
|
44
|
+
|
|
45
|
+
const matchOrderResult = await matchOrder({
|
|
46
|
+
signer: params.signer,
|
|
47
|
+
owner: params.owner,
|
|
48
|
+
marginAccountId: createAccountResult.accountId,
|
|
49
|
+
snappedAmountInBase: params.snappedAmountInBase,
|
|
50
|
+
market: params.market,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
transactionHash: matchOrderResult?.transactionHash || null,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Signer, JsonRpcSigner } from 'ethers';
|
|
2
|
+
import { MarginAccountEntity, OwnerMetadataEntity } from '@reyaxyz/common';
|
|
3
|
+
import { MarketParams } from '../orders';
|
|
4
|
+
|
|
5
|
+
export type IsolatedOrderParams = {
|
|
6
|
+
signer: Signer | JsonRpcSigner;
|
|
7
|
+
owner: Pick<OwnerMetadataEntity, 'coreSigNonce' | 'address'>;
|
|
8
|
+
fromMarginAccountId: MarginAccountEntity['id'];
|
|
9
|
+
requiredMargin: number; // todo: p2: use type from simulation in api-sdk via common dep
|
|
10
|
+
snappedAmountInBase: number; // todo: p2: use type from simulation in api-sdk via common dep
|
|
11
|
+
market: MarketParams;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type IsolatedOrderResults = {
|
|
15
|
+
transactionHash: string | null;
|
|
16
|
+
};
|
package/src/utils/trade.ts
CHANGED