@reyaxyz/sdk 0.3.0 → 0.5.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/services/orders/order.js +27 -1
- package/dist/services/orders/order.js.map +1 -1
- package/dist/services/orders/types.js.map +1 -1
- package/dist/services/token/common.js +21 -1
- package/dist/services/token/common.js.map +1 -1
- package/dist/services/token/getBalance.js +63 -0
- package/dist/services/token/getBalance.js.map +1 -0
- package/dist/services/token/types.js.map +1 -1
- package/dist/types/services/orders/order.d.ts +2 -1
- package/dist/types/services/orders/order.d.ts.map +1 -1
- package/dist/types/services/orders/types.d.ts +9 -0
- package/dist/types/services/orders/types.d.ts.map +1 -1
- package/dist/types/services/token/common.d.ts +6 -0
- package/dist/types/services/token/common.d.ts.map +1 -1
- package/dist/types/services/token/getBalance.d.ts +3 -0
- package/dist/types/services/token/getBalance.d.ts.map +1 -0
- package/dist/types/services/token/types.d.ts +4 -0
- package/dist/types/services/token/types.d.ts.map +1 -1
- package/dist/types/utils/trade.d.ts +1 -1
- package/dist/types/utils/trade.d.ts.map +1 -1
- package/dist/utils/trade.js +3 -3
- package/dist/utils/trade.js.map +1 -1
- package/package.json +2 -2
- package/src/services/orders/order.ts +45 -1
- package/src/services/orders/types.ts +11 -0
- package/src/services/token/common.ts +22 -0
- package/src/services/token/getBalance.ts +16 -0
- package/src/services/token/types.ts +5 -0
- package/src/utils/trade.ts +3 -3
|
@@ -35,12 +35,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
38
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.matchOrder = void 0;
|
|
42
|
+
exports.closeOrder = exports.matchOrder = void 0;
|
|
40
43
|
var encode_1 = require("./encode");
|
|
41
44
|
var executeTransaction_1 = require("../executeTransaction");
|
|
42
45
|
var consts_1 = require("../../utils/consts");
|
|
43
46
|
var trade_1 = require("../../utils/trade");
|
|
47
|
+
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
44
48
|
var matchOrder = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
45
49
|
var orderPriceLimit, orderBase, _a, data, value, chainId, result;
|
|
46
50
|
return __generator(this, function (_b) {
|
|
@@ -63,4 +67,26 @@ var matchOrder = function (params) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
63
67
|
});
|
|
64
68
|
}); };
|
|
65
69
|
exports.matchOrder = matchOrder;
|
|
70
|
+
var closeOrder = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
71
|
+
var base, orderPriceLimit, _a, data, value, chainId, result;
|
|
72
|
+
return __generator(this, function (_b) {
|
|
73
|
+
switch (_b.label) {
|
|
74
|
+
case 0:
|
|
75
|
+
if (params.orderBase === 0) {
|
|
76
|
+
throw new Error('Position base can not be 0');
|
|
77
|
+
}
|
|
78
|
+
base = (0, bignumber_js_1.default)(params.orderBase).negated().toNumber();
|
|
79
|
+
orderPriceLimit = (0, trade_1.calculatePriceLimitForTrade)(params.market.currentPrice, base);
|
|
80
|
+
_a = (0, encode_1.encodeMatchOrder)(params.marginAccountId, BigInt(base), orderPriceLimit, params.market.counterpartyAccountIds, params.market.id, params.market.exchangeId), data = _a.calldata, value = _a.value;
|
|
81
|
+
chainId = 80001;
|
|
82
|
+
return [4 /*yield*/, (0, executeTransaction_1.executeTransaction)(params.signer, data, value, chainId, consts_1.TransactionType.TRADE)];
|
|
83
|
+
case 1:
|
|
84
|
+
result = _b.sent();
|
|
85
|
+
return [2 /*return*/, {
|
|
86
|
+
transactionHash: (result === null || result === void 0 ? void 0 : result.hash) || null,
|
|
87
|
+
}];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}); };
|
|
91
|
+
exports.closeOrder = closeOrder;
|
|
66
92
|
//# sourceMappingURL=order.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sourceRoot":"/","sources":["services/orders/order.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"/","sources":["services/orders/order.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,mCAA4C;AAC5C,4DAA2D;AAC3D,6CAAqD;AACrD,2CAG2B;AAC3B,8DAAqC;AAE9B,IAAM,UAAU,GAAG,UACxB,MAAwB;;;;;gBAExB,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;gBACK,eAAe,GAAG,IAAA,mCAA2B,EACjD,MAAM,CAAC,MAAM,CAAC,YAAY,EAC1B,MAAM,CAAC,SAAS,CACjB,CAAC;gBAEI,SAAS,GAAG,IAAA,uCAA+B,EAC/C,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;gBAEI,KAA4B,IAAA,yBAAgB,EAChD,MAAM,CAAC,eAAe,EACtB,SAAS,EACT,eAAe,EACf,MAAM,CAAC,MAAM,CAAC,sBAAsB,EACpC,MAAM,CAAC,MAAM,CAAC,EAAE,EAChB,MAAM,CAAC,MAAM,CAAC,UAAU,CACzB,EAPiB,IAAI,cAAA,EAAE,KAAK,WAAA,CAO3B;gBAGI,OAAO,GAAG,KAAK,CAAC;gBACP,qBAAM,IAAA,uCAAkB,EACrC,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,KAAK,EACL,OAAO,EACP,wBAAe,CAAC,KAAK,CACtB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAED,sBAAO;wBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;qBACtC,EAAC;;;KACH,CAAC;AAtCW,QAAA,UAAU,cAsCrB;AAEK,IAAM,UAAU,GAAG,UACxB,MAAwB;;;;;gBAExB,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;gBAEK,IAAI,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAExD,eAAe,GAAG,IAAA,mCAA2B,EACjD,MAAM,CAAC,MAAM,CAAC,YAAY,EAC1B,IAAI,CACL,CAAC;gBAEI,KAA4B,IAAA,yBAAgB,EAChD,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,IAAI,CAAC,EACZ,eAAe,EACf,MAAM,CAAC,MAAM,CAAC,sBAAsB,EACpC,MAAM,CAAC,MAAM,CAAC,EAAE,EAChB,MAAM,CAAC,MAAM,CAAC,UAAU,CACzB,EAPiB,IAAI,cAAA,EAAE,KAAK,WAAA,CAO3B;gBAGI,OAAO,GAAG,KAAK,CAAC;gBACP,qBAAM,IAAA,uCAAkB,EACrC,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,KAAK,EACL,OAAO,EACP,wBAAe,CAAC,KAAK,CACtB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAED,sBAAO;wBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;qBACtC,EAAC;;;KACH,CAAC;AApCW,QAAA,UAAU,cAoCrB","sourcesContent":["import {\n CloseOrderParams,\n CloseOrderResult,\n MatchOrderParams,\n MatchOrderResult,\n} from './types';\nimport { encodeMatchOrder } from './encode';\nimport { executeTransaction } from '../executeTransaction';\nimport { TransactionType } from '../../utils/consts';\nimport {\n calculateOrderBaseFromOrderSize,\n calculatePriceLimitForTrade,\n} from '../../utils/trade';\nimport BigNumber from 'bignumber.js';\n\nexport const matchOrder = async (\n params: MatchOrderParams,\n): Promise<MatchOrderResult> => {\n if (params.orderSize === 0) {\n throw new Error('Position size can not be 0');\n }\n const orderPriceLimit = calculatePriceLimitForTrade(\n params.market.currentPrice,\n params.orderSize,\n );\n\n const orderBase = calculateOrderBaseFromOrderSize(\n params.orderSize,\n params.market.currentPrice,\n );\n\n const { calldata: data, value } = encodeMatchOrder(\n params.marginAccountId,\n orderBase,\n orderPriceLimit,\n params.market.counterpartyAccountIds,\n params.market.id,\n params.market.exchangeId,\n );\n\n // @todo update it\n const chainId = 80001;\n const result = await executeTransaction(\n params.signer,\n data,\n value,\n chainId,\n TransactionType.TRADE,\n );\n\n return {\n transactionHash: result?.hash || null,\n };\n};\n\nexport const closeOrder = async (\n params: CloseOrderParams,\n): Promise<CloseOrderResult> => {\n if (params.orderBase === 0) {\n throw new Error('Position base can not be 0');\n }\n\n const base = BigNumber(params.orderBase).negated().toNumber(); // when closing position we are doing trade in the opposite direction\n\n const orderPriceLimit = calculatePriceLimitForTrade(\n params.market.currentPrice,\n base,\n );\n\n const { calldata: data, value } = encodeMatchOrder(\n params.marginAccountId,\n BigInt(base),\n orderPriceLimit,\n params.market.counterpartyAccountIds,\n params.market.id,\n params.market.exchangeId,\n );\n\n // @todo update it\n const chainId = 80001;\n const result = await executeTransaction(\n params.signer,\n data,\n value,\n chainId,\n TransactionType.TRADE,\n );\n\n return {\n transactionHash: result?.hash || null,\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/orders/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Signer, JsonRpcSigner } from 'ethers';\n\nexport type MarketParams = {\n id: number;\n exchangeId: number;\n counterpartyAccountIds: number[];\n currentPrice: number;\n};\n\nexport type MatchOrderParams = {\n signer: Signer | JsonRpcSigner;\n marginAccountId: number;\n orderSize: number;\n market: MarketParams;\n};\n\nexport type MatchOrderResult = {\n transactionHash: string | null;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/orders/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Signer, JsonRpcSigner } from 'ethers';\n\nexport type MarketParams = {\n id: number;\n exchangeId: number;\n counterpartyAccountIds: number[];\n currentPrice: number;\n};\n\nexport type MatchOrderParams = {\n signer: Signer | JsonRpcSigner;\n marginAccountId: number;\n orderSize: number;\n market: MarketParams;\n};\n\nexport type CloseOrderParams = {\n signer: Signer | JsonRpcSigner;\n marginAccountId: number;\n orderBase: number; // PositionEntity[base]\n market: MarketParams;\n};\n\nexport type MatchOrderResult = {\n transactionHash: string | null;\n};\n\nexport type CloseOrderResult = {\n transactionHash: string | null;\n};\n"]}
|
|
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.getERC20Allowance = exports.getTokenDetails = exports.convertToAddress = exports.getERC20TokenContract = exports.scale = exports.descale = void 0;
|
|
39
|
+
exports.getERC20Balance = exports.getERC20Allowance = exports.getTokenDetails = exports.convertToAddress = exports.getERC20TokenContract = exports.scale = exports.descale = void 0;
|
|
40
40
|
var ethers_1 = require("ethers");
|
|
41
41
|
var consts_1 = require("./consts");
|
|
42
42
|
var retry_1 = require("../../utils/retry");
|
|
@@ -104,4 +104,24 @@ var getERC20Allowance = function (_a) {
|
|
|
104
104
|
});
|
|
105
105
|
};
|
|
106
106
|
exports.getERC20Allowance = getERC20Allowance;
|
|
107
|
+
var getERC20Balance = function (_a) {
|
|
108
|
+
var tokenAddress = _a.tokenAddress, walletAddress = _a.walletAddress, subject = _a.subject;
|
|
109
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
110
|
+
var token, tokenDescaler, currentBalance;
|
|
111
|
+
return __generator(this, function (_b) {
|
|
112
|
+
switch (_b.label) {
|
|
113
|
+
case 0:
|
|
114
|
+
token = (0, exports.getERC20TokenContract)(tokenAddress, subject);
|
|
115
|
+
tokenDescaler = (0, exports.getTokenDetails)(tokenAddress).tokenDescaler;
|
|
116
|
+
return [4 /*yield*/, (0, retry_1.exponentialBackoff)(function () {
|
|
117
|
+
return token.balanceOf(walletAddress);
|
|
118
|
+
})];
|
|
119
|
+
case 1:
|
|
120
|
+
currentBalance = _b.sent();
|
|
121
|
+
return [2 /*return*/, tokenDescaler(currentBalance)];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
exports.getERC20Balance = getERC20Balance;
|
|
107
127
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"/","sources":["services/token/common.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAkD;AAClD,mCAAwC;AACxC,2CAAuD;AAGhD,IAAM,OAAO,GAAG,UAAC,aAAqB;IAC3C,IAAM,CAAC,GAAG,UAAC,KAAa;QACtB,OAAO,MAAM,CAAC,eAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AANW,QAAA,OAAO,WAMlB;AAEK,IAAM,KAAK,GAAG,UAAC,aAAqB;IACzC,IAAM,CAAC,GAAG,UAAC,KAAa;QACtB,OAAO,MAAM,CACX,eAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAC/D,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB;AAEK,IAAM,qBAAqB,GAAG,UACnC,YAAoB,EACpB,OAAe;IAEf,IAAM,GAAG,GAAa;QACpB,4DAA4D;QAC5D,6DAA6D;QAC7D,qEAAqE;QACrE,2DAA2D;KAC5D,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAE1D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAdW,QAAA,qBAAqB,yBAchC;AAIK,IAAM,gBAAgB,GAAG,UAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,WAAW,EAAa,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEK,IAAM,eAAe,GAAG,UAC7B,oBAA4B;IAM5B,IAAM,OAAO,GAAG,IAAA,wBAAgB,EAAC,oBAAoB,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,sCAA+B,OAAO,MAAG,CAAC,CAAC;IAC7D,CAAC;IAEK,IAAA,KAA+B,qBAAY,CAAC,OAAO,CAAC,EAAlD,SAAS,eAAA,EAAE,aAAa,mBAA0B,CAAC;IAE3D,OAAO;QACL,SAAS,WAAA;QACT,aAAa,eAAA;QACb,aAAa,EAAE,IAAA,eAAO,EAAC,aAAa,CAAC;KACtC,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,eAAe,mBAoB1B;AAEK,IAAM,iBAAiB,GAAG,UAAO,EAKd;QAJxB,aAAa,mBAAA,EACb,YAAY,kBAAA,EACZ,cAAc,oBAAA,EACd,OAAO,aAAA;;;;;;oBAED,aAAa,GAAG,IAAA,6BAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC3D,aAAa,GAAK,IAAA,uBAAe,EAAC,YAAY,CAAC,cAAlC,CAAmC;oBAEtC,qBAAM,IAAA,0BAAkB,EAAC;4BACzC,OAAA,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC;wBAAtD,CAAsD,CACvD,EAAA;;oBAFK,SAAS,GAAG,SAEjB;oBAED,sBAAO,MAAM,CAAC,SAAS,CAAC,GAAG,IAAA,aAAK,EAAC,aAAa,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;4BACtE,CAAC,CAAC,MAAM,CAAC,gBAAgB;4BACzB,CAAC,CAAC,IAAA,eAAO,EAAC,aAAa,CAAC,CAAC,SAAS,CAAC,EAAC;;;;CACvC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B","sourcesContent":["import { Contract, ethers, Signer } from 'ethers';\nimport { tokenDetails } from './consts';\nimport { exponentialBackoff } from '../../utils/retry';\nimport { GetERC20AllowanceParams } from './types';\n\nexport const descale = (tokenDecimals: number) => {\n const f = (value: bigint) => {\n return Number(ethers.formatUnits(value.toString(), tokenDecimals));\n };\n\n return f;\n};\n\nexport const scale = (tokenDecimals: number) => {\n const f = (value: number) => {\n return BigInt(\n ethers.parseUnits(value.toFixed(tokenDecimals), tokenDecimals),\n );\n };\n\n return f;\n};\n\nexport const getERC20TokenContract = (\n tokenAddress: string,\n subject: Signer,\n): Contract => {\n const abi: string[] = [\n `function approve(address, uint256) external returns (bool)`,\n `function balanceOf(address) external view returns (uint256)`,\n `function allowance(address,address) external view returns (uint256)`,\n `function approve(address,uint256) external returns (bool)`,\n ];\n\n const contract = new Contract(tokenAddress, abi, subject);\n\n return contract;\n};\n\nexport type Address = Lowercase<string>;\n\nexport const convertToAddress = (str: string): Address => {\n return str.toLowerCase() as Address;\n};\n\nexport const getTokenDetails = (\n caseSensitiveAddress: string,\n): {\n tokenName: Uppercase<string>;\n tokenDecimals: number;\n tokenDescaler: (value: bigint) => number;\n} => {\n const address = convertToAddress(caseSensitiveAddress);\n\n if (!Object.keys(tokenDetails).includes(address)) {\n throw new Error(`Token details not found for ${address}.`);\n }\n\n const { tokenName, tokenDecimals } = tokenDetails[address];\n\n return {\n tokenName,\n tokenDecimals,\n tokenDescaler: descale(tokenDecimals),\n };\n};\n\nexport const getERC20Allowance = async ({\n walletAddress,\n tokenAddress,\n spenderAddress,\n subject,\n}: GetERC20AllowanceParams): Promise<number> => {\n const tokenContract = getERC20TokenContract(tokenAddress, subject);\n const { tokenDecimals } = getTokenDetails(tokenAddress);\n\n const allowance = await exponentialBackoff(() =>\n tokenContract.allowance(walletAddress, spenderAddress),\n );\n\n return BigInt(allowance) > scale(tokenDecimals)(Number.MAX_SAFE_INTEGER)\n ? Number.MAX_SAFE_INTEGER\n : descale(tokenDecimals)(allowance);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"/","sources":["services/token/common.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAkD;AAClD,mCAAwC;AACxC,2CAAuD;AAGhD,IAAM,OAAO,GAAG,UAAC,aAAqB;IAC3C,IAAM,CAAC,GAAG,UAAC,KAAa;QACtB,OAAO,MAAM,CAAC,eAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AANW,QAAA,OAAO,WAMlB;AAEK,IAAM,KAAK,GAAG,UAAC,aAAqB;IACzC,IAAM,CAAC,GAAG,UAAC,KAAa;QACtB,OAAO,MAAM,CACX,eAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAC/D,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB;AAEK,IAAM,qBAAqB,GAAG,UACnC,YAAoB,EACpB,OAAe;IAEf,IAAM,GAAG,GAAa;QACpB,4DAA4D;QAC5D,6DAA6D;QAC7D,qEAAqE;QACrE,2DAA2D;KAC5D,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAE1D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAdW,QAAA,qBAAqB,yBAchC;AAIK,IAAM,gBAAgB,GAAG,UAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,WAAW,EAAa,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEK,IAAM,eAAe,GAAG,UAC7B,oBAA4B;IAM5B,IAAM,OAAO,GAAG,IAAA,wBAAgB,EAAC,oBAAoB,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,sCAA+B,OAAO,MAAG,CAAC,CAAC;IAC7D,CAAC;IAEK,IAAA,KAA+B,qBAAY,CAAC,OAAO,CAAC,EAAlD,SAAS,eAAA,EAAE,aAAa,mBAA0B,CAAC;IAE3D,OAAO;QACL,SAAS,WAAA;QACT,aAAa,eAAA;QACb,aAAa,EAAE,IAAA,eAAO,EAAC,aAAa,CAAC;KACtC,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,eAAe,mBAoB1B;AAEK,IAAM,iBAAiB,GAAG,UAAO,EAKd;QAJxB,aAAa,mBAAA,EACb,YAAY,kBAAA,EACZ,cAAc,oBAAA,EACd,OAAO,aAAA;;;;;;oBAED,aAAa,GAAG,IAAA,6BAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC3D,aAAa,GAAK,IAAA,uBAAe,EAAC,YAAY,CAAC,cAAlC,CAAmC;oBAEtC,qBAAM,IAAA,0BAAkB,EAAC;4BACzC,OAAA,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC;wBAAtD,CAAsD,CACvD,EAAA;;oBAFK,SAAS,GAAG,SAEjB;oBAED,sBAAO,MAAM,CAAC,SAAS,CAAC,GAAG,IAAA,aAAK,EAAC,aAAa,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;4BACtE,CAAC,CAAC,MAAM,CAAC,gBAAgB;4BACzB,CAAC,CAAC,IAAA,eAAO,EAAC,aAAa,CAAC,CAAC,SAAS,CAAC,EAAC;;;;CACvC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B;AAQK,IAAM,eAAe,GAAG,UAAO,EAIhB;QAHpB,YAAY,kBAAA,EACZ,aAAa,mBAAA,EACb,OAAO,aAAA;;;;;;oBAED,KAAK,GAAG,IAAA,6BAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAEnD,aAAa,GAAK,IAAA,uBAAe,EAAC,YAAY,CAAC,cAAlC,CAAmC;oBAEjC,qBAAM,IAAA,0BAAkB,EAAC;4BAC9C,OAAA,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;wBAA9B,CAA8B,CAC/B,EAAA;;oBAFK,cAAc,GAAG,SAEtB;oBAED,sBAAO,aAAa,CAAC,cAAc,CAAC,EAAC;;;;CACtC,CAAC;AAdW,QAAA,eAAe,mBAc1B","sourcesContent":["import { Contract, ethers, Signer } from 'ethers';\nimport { tokenDetails } from './consts';\nimport { exponentialBackoff } from '../../utils/retry';\nimport { GetERC20AllowanceParams } from './types';\n\nexport const descale = (tokenDecimals: number) => {\n const f = (value: bigint) => {\n return Number(ethers.formatUnits(value.toString(), tokenDecimals));\n };\n\n return f;\n};\n\nexport const scale = (tokenDecimals: number) => {\n const f = (value: number) => {\n return BigInt(\n ethers.parseUnits(value.toFixed(tokenDecimals), tokenDecimals),\n );\n };\n\n return f;\n};\n\nexport const getERC20TokenContract = (\n tokenAddress: string,\n subject: Signer,\n): Contract => {\n const abi: string[] = [\n `function approve(address, uint256) external returns (bool)`,\n `function balanceOf(address) external view returns (uint256)`,\n `function allowance(address,address) external view returns (uint256)`,\n `function approve(address,uint256) external returns (bool)`,\n ];\n\n const contract = new Contract(tokenAddress, abi, subject);\n\n return contract;\n};\n\nexport type Address = Lowercase<string>;\n\nexport const convertToAddress = (str: string): Address => {\n return str.toLowerCase() as Address;\n};\n\nexport const getTokenDetails = (\n caseSensitiveAddress: string,\n): {\n tokenName: Uppercase<string>;\n tokenDecimals: number;\n tokenDescaler: (value: bigint) => number;\n} => {\n const address = convertToAddress(caseSensitiveAddress);\n\n if (!Object.keys(tokenDetails).includes(address)) {\n throw new Error(`Token details not found for ${address}.`);\n }\n\n const { tokenName, tokenDecimals } = tokenDetails[address];\n\n return {\n tokenName,\n tokenDecimals,\n tokenDescaler: descale(tokenDecimals),\n };\n};\n\nexport const getERC20Allowance = async ({\n walletAddress,\n tokenAddress,\n spenderAddress,\n subject,\n}: GetERC20AllowanceParams): Promise<number> => {\n const tokenContract = getERC20TokenContract(tokenAddress, subject);\n const { tokenDecimals } = getTokenDetails(tokenAddress);\n\n const allowance = await exponentialBackoff(() =>\n tokenContract.allowance(walletAddress, spenderAddress),\n );\n\n return BigInt(allowance) > scale(tokenDecimals)(Number.MAX_SAFE_INTEGER)\n ? Number.MAX_SAFE_INTEGER\n : descale(tokenDecimals)(allowance);\n};\n\nexport type GetERC20BalanceArgs = {\n tokenAddress: string;\n walletAddress: string;\n subject: Signer;\n};\n\nexport const getERC20Balance = async ({\n tokenAddress,\n walletAddress,\n subject,\n}: GetERC20BalanceArgs): Promise<number> => {\n const token = getERC20TokenContract(tokenAddress, subject);\n\n const { tokenDescaler } = getTokenDetails(tokenAddress);\n\n const currentBalance = await exponentialBackoff(() =>\n token.balanceOf(walletAddress),\n );\n\n return tokenDescaler(currentBalance);\n};\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.getBalance = void 0;
|
|
40
|
+
var common_1 = require("./common");
|
|
41
|
+
var getBalance = function (_a) {
|
|
42
|
+
var signer = _a.signer, tokenAddress = _a.tokenAddress;
|
|
43
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
44
|
+
var walletAddress, currentBalance;
|
|
45
|
+
return __generator(this, function (_b) {
|
|
46
|
+
switch (_b.label) {
|
|
47
|
+
case 0: return [4 /*yield*/, signer.getAddress()];
|
|
48
|
+
case 1:
|
|
49
|
+
walletAddress = _b.sent();
|
|
50
|
+
return [4 /*yield*/, (0, common_1.getERC20Balance)({
|
|
51
|
+
walletAddress: walletAddress,
|
|
52
|
+
subject: signer,
|
|
53
|
+
tokenAddress: tokenAddress,
|
|
54
|
+
})];
|
|
55
|
+
case 2:
|
|
56
|
+
currentBalance = _b.sent();
|
|
57
|
+
return [2 /*return*/, currentBalance];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
exports.getBalance = getBalance;
|
|
63
|
+
//# sourceMappingURL=getBalance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBalance.js","sourceRoot":"/","sources":["services/token/getBalance.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mCAA2C;AAEpC,IAAM,UAAU,GAAG,UAAO,EAGd;QAFjB,MAAM,YAAA,EACN,YAAY,kBAAA;;;;;wBAEU,qBAAM,MAAM,CAAC,UAAU,EAAE,EAAA;;oBAAzC,aAAa,GAAG,SAAyB;oBACxB,qBAAM,IAAA,wBAAe,EAAC;4BAC3C,aAAa,eAAA;4BACb,OAAO,EAAE,MAAM;4BACf,YAAY,EAAE,YAAY;yBAC3B,CAAC,EAAA;;oBAJI,cAAc,GAAG,SAIrB;oBAEF,sBAAO,cAAc,EAAC;;;;CACvB,CAAC;AAZW,QAAA,UAAU,cAYrB","sourcesContent":["import { GetBalanceParams } from './types';\nimport { getERC20Balance } from './common';\n\nexport const getBalance = async ({\n signer,\n tokenAddress,\n}: GetBalanceParams): Promise<number> => {\n const walletAddress = await signer.getAddress();\n const currentBalance = await getERC20Balance({\n walletAddress,\n subject: signer,\n tokenAddress: tokenAddress,\n });\n\n return currentBalance;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/token/types.ts"],"names":[],"mappings":";;;AAEA,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,2CAAE,CAAA;IACF,qDAAO,CAAA;AACT,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\n\nexport enum ApprovalType {\n LP,\n DEPOSIT,\n}\n\nexport type ApproveTokenParams = {\n signer: Signer | JsonRpcSigner;\n token: string; // token address\n type: ApprovalType;\n};\n\nexport type GetAllowanceParams = {\n signer: Signer | JsonRpcSigner;\n token: string; // token address\n type: ApprovalType;\n};\n\nexport type GetERC20AllowanceParams = {\n walletAddress: string;\n tokenAddress: string; // LP POOL entity tokean address\n spenderAddress: string;\n subject: Signer;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/token/types.ts"],"names":[],"mappings":";;;AAEA,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,2CAAE,CAAA;IACF,qDAAO,CAAA;AACT,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\n\nexport enum ApprovalType {\n LP,\n DEPOSIT,\n}\n\nexport type ApproveTokenParams = {\n signer: Signer | JsonRpcSigner;\n token: string; // token address\n type: ApprovalType;\n};\n\nexport type GetAllowanceParams = {\n signer: Signer | JsonRpcSigner;\n token: string; // token address\n type: ApprovalType;\n};\n\nexport type GetERC20AllowanceParams = {\n walletAddress: string;\n tokenAddress: string; // LP POOL entity tokean address\n spenderAddress: string;\n subject: Signer;\n};\n\nexport type GetBalanceParams = {\n signer: Signer | JsonRpcSigner;\n tokenAddress: string;\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { MatchOrderParams, MatchOrderResult } from './types';
|
|
1
|
+
import { CloseOrderParams, CloseOrderResult, MatchOrderParams, MatchOrderResult } from './types';
|
|
2
2
|
export declare const matchOrder: (params: MatchOrderParams) => Promise<MatchOrderResult>;
|
|
3
|
+
export declare const closeOrder: (params: CloseOrderParams) => Promise<CloseOrderResult>;
|
|
3
4
|
//# sourceMappingURL=order.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.d.ts","sourceRoot":"/","sources":["services/orders/order.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"order.d.ts","sourceRoot":"/","sources":["services/orders/order.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAUjB,eAAO,MAAM,UAAU,WACb,gBAAgB,KACvB,QAAQ,gBAAgB,CAoC1B,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,gBAAgB,KACvB,QAAQ,gBAAgB,CAkC1B,CAAC"}
|
|
@@ -11,7 +11,16 @@ export type MatchOrderParams = {
|
|
|
11
11
|
orderSize: number;
|
|
12
12
|
market: MarketParams;
|
|
13
13
|
};
|
|
14
|
+
export type CloseOrderParams = {
|
|
15
|
+
signer: Signer | JsonRpcSigner;
|
|
16
|
+
marginAccountId: number;
|
|
17
|
+
orderBase: number;
|
|
18
|
+
market: MarketParams;
|
|
19
|
+
};
|
|
14
20
|
export type MatchOrderResult = {
|
|
15
21
|
transactionHash: string | null;
|
|
16
22
|
};
|
|
23
|
+
export type CloseOrderResult = {
|
|
24
|
+
transactionHash: string | null;
|
|
25
|
+
};
|
|
17
26
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/orders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/orders/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC"}
|
|
@@ -11,4 +11,10 @@ export declare const getTokenDetails: (caseSensitiveAddress: string) => {
|
|
|
11
11
|
tokenDescaler: (value: bigint) => number;
|
|
12
12
|
};
|
|
13
13
|
export declare const getERC20Allowance: ({ walletAddress, tokenAddress, spenderAddress, subject, }: GetERC20AllowanceParams) => Promise<number>;
|
|
14
|
+
export type GetERC20BalanceArgs = {
|
|
15
|
+
tokenAddress: string;
|
|
16
|
+
walletAddress: string;
|
|
17
|
+
subject: Signer;
|
|
18
|
+
};
|
|
19
|
+
export declare const getERC20Balance: ({ tokenAddress, walletAddress, subject, }: GetERC20BalanceArgs) => Promise<number>;
|
|
14
20
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"/","sources":["services/token/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,OAAO,kBAAmB,MAAM,aACzB,MAAM,WAKzB,CAAC;AAEF,eAAO,MAAM,KAAK,kBAAmB,MAAM,aACvB,MAAM,WAOzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,iBAClB,MAAM,WACX,MAAM,KACd,QAWF,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAExC,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,OAE9C,CAAC;AAEF,eAAO,MAAM,eAAe,yBACJ,MAAM;eAEjB,UAAU,MAAM,CAAC;mBACb,MAAM;2BACE,MAAM,KAAK,MAAM;CAezC,CAAC;AAEF,eAAO,MAAM,iBAAiB,8DAK3B,uBAAuB,KAAG,QAAQ,MAAM,CAW1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"/","sources":["services/token/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,OAAO,kBAAmB,MAAM,aACzB,MAAM,WAKzB,CAAC;AAEF,eAAO,MAAM,KAAK,kBAAmB,MAAM,aACvB,MAAM,WAOzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,iBAClB,MAAM,WACX,MAAM,KACd,QAWF,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAExC,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,OAE9C,CAAC;AAEF,eAAO,MAAM,eAAe,yBACJ,MAAM;eAEjB,UAAU,MAAM,CAAC;mBACb,MAAM;2BACE,MAAM,KAAK,MAAM;CAezC,CAAC;AAEF,eAAO,MAAM,iBAAiB,8DAK3B,uBAAuB,KAAG,QAAQ,MAAM,CAW1C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,eAAe,8CAIzB,mBAAmB,KAAG,QAAQ,MAAM,CAUtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBalance.d.ts","sourceRoot":"/","sources":["services/token/getBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,eAAO,MAAM,UAAU,8BAGpB,gBAAgB,KAAG,QAAQ,MAAM,CASnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/token/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE/C,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,OAAO,IAAA;CACR;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/token/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE/C,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,OAAO,IAAA;CACR;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare function calculatePriceLimitForTrade(orderPrice: number,
|
|
1
|
+
export declare function calculatePriceLimitForTrade(orderPrice: number, amount: number): bigint;
|
|
2
2
|
export declare function calculateOrderBaseFromOrderSize(orderSize: number, currentPrice: number): bigint;
|
|
3
3
|
//# sourceMappingURL=trade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.d.ts","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":"AAEA,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"/","sources":["utils/trade.ts"],"names":[],"mappings":"AAEA,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAkBR;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,MAAM,CAUR"}
|
package/dist/utils/trade.js
CHANGED
|
@@ -5,13 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.calculateOrderBaseFromOrderSize = exports.calculatePriceLimitForTrade = void 0;
|
|
7
7
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
-
function calculatePriceLimitForTrade(orderPrice,
|
|
8
|
+
function calculatePriceLimitForTrade(orderPrice, amount) {
|
|
9
9
|
// Ensure orderPrice is BigInt
|
|
10
10
|
var orderPriceBigInt = (0, bignumber_js_1.default)(orderPrice);
|
|
11
11
|
// Calculate 50% of the order price
|
|
12
12
|
var offset = orderPriceBigInt.div(2);
|
|
13
|
-
// Determine if the
|
|
14
|
-
if (
|
|
13
|
+
// Determine if the amount is positive or negative and adjust the price accordingly
|
|
14
|
+
if (amount > 0) {
|
|
15
15
|
// Trade is long, so add
|
|
16
16
|
return BigInt((0, bignumber_js_1.default)(orderPriceBigInt).plus(offset).times(1e18).toFixed(0));
|
|
17
17
|
}
|
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,
|
|
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;AAED,SAAgB,+BAA+B,CAC7C,SAAiB,EACjB,YAAoB;IAEpB,IAAM,aAAa,GAAG,IAAA,sBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO;IACnD,yEAAyE;IAEzE,IAAM,SAAS,GAAG,IAAA,sBAAS,EAAC,SAAS,CAAC;SACnC,KAAK,CAAC,aAAa,CAAC;SACpB,GAAG,CAAC,YAAY,CAAC;SACjB,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAbD,0EAaC","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\nexport function calculateOrderBaseFromOrderSize(\n orderSize: number,\n currentPrice: number,\n): bigint {\n const decimalFactor = BigNumber('1000000'); // 10^6\n // @todo check decimal places handling if this should stay hardcoded to 6\n\n const orderBase = BigNumber(orderSize)\n .times(decimalFactor)\n .div(currentPrice)\n .toFixed(0);\n\n return BigInt(orderBase);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"ethers": "6.9.0"
|
|
34
34
|
},
|
|
35
35
|
"packageManager": "pnpm@8.10.4",
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "a0f4533458ea795570332768e5b2a49a5ec92afb"
|
|
37
37
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CloseOrderParams,
|
|
3
|
+
CloseOrderResult,
|
|
4
|
+
MatchOrderParams,
|
|
5
|
+
MatchOrderResult,
|
|
6
|
+
} from './types';
|
|
2
7
|
import { encodeMatchOrder } from './encode';
|
|
3
8
|
import { executeTransaction } from '../executeTransaction';
|
|
4
9
|
import { TransactionType } from '../../utils/consts';
|
|
@@ -6,6 +11,7 @@ import {
|
|
|
6
11
|
calculateOrderBaseFromOrderSize,
|
|
7
12
|
calculatePriceLimitForTrade,
|
|
8
13
|
} from '../../utils/trade';
|
|
14
|
+
import BigNumber from 'bignumber.js';
|
|
9
15
|
|
|
10
16
|
export const matchOrder = async (
|
|
11
17
|
params: MatchOrderParams,
|
|
@@ -46,3 +52,41 @@ export const matchOrder = async (
|
|
|
46
52
|
transactionHash: result?.hash || null,
|
|
47
53
|
};
|
|
48
54
|
};
|
|
55
|
+
|
|
56
|
+
export const closeOrder = async (
|
|
57
|
+
params: CloseOrderParams,
|
|
58
|
+
): Promise<CloseOrderResult> => {
|
|
59
|
+
if (params.orderBase === 0) {
|
|
60
|
+
throw new Error('Position base can not be 0');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const base = BigNumber(params.orderBase).negated().toNumber(); // when closing position we are doing trade in the opposite direction
|
|
64
|
+
|
|
65
|
+
const orderPriceLimit = calculatePriceLimitForTrade(
|
|
66
|
+
params.market.currentPrice,
|
|
67
|
+
base,
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const { calldata: data, value } = encodeMatchOrder(
|
|
71
|
+
params.marginAccountId,
|
|
72
|
+
BigInt(base),
|
|
73
|
+
orderPriceLimit,
|
|
74
|
+
params.market.counterpartyAccountIds,
|
|
75
|
+
params.market.id,
|
|
76
|
+
params.market.exchangeId,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
// @todo update it
|
|
80
|
+
const chainId = 80001;
|
|
81
|
+
const result = await executeTransaction(
|
|
82
|
+
params.signer,
|
|
83
|
+
data,
|
|
84
|
+
value,
|
|
85
|
+
chainId,
|
|
86
|
+
TransactionType.TRADE,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
transactionHash: result?.hash || null,
|
|
91
|
+
};
|
|
92
|
+
};
|
|
@@ -14,6 +14,17 @@ export type MatchOrderParams = {
|
|
|
14
14
|
market: MarketParams;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
export type CloseOrderParams = {
|
|
18
|
+
signer: Signer | JsonRpcSigner;
|
|
19
|
+
marginAccountId: number;
|
|
20
|
+
orderBase: number; // PositionEntity[base]
|
|
21
|
+
market: MarketParams;
|
|
22
|
+
};
|
|
23
|
+
|
|
17
24
|
export type MatchOrderResult = {
|
|
18
25
|
transactionHash: string | null;
|
|
19
26
|
};
|
|
27
|
+
|
|
28
|
+
export type CloseOrderResult = {
|
|
29
|
+
transactionHash: string | null;
|
|
30
|
+
};
|
|
@@ -82,3 +82,25 @@ export const getERC20Allowance = async ({
|
|
|
82
82
|
? Number.MAX_SAFE_INTEGER
|
|
83
83
|
: descale(tokenDecimals)(allowance);
|
|
84
84
|
};
|
|
85
|
+
|
|
86
|
+
export type GetERC20BalanceArgs = {
|
|
87
|
+
tokenAddress: string;
|
|
88
|
+
walletAddress: string;
|
|
89
|
+
subject: Signer;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const getERC20Balance = async ({
|
|
93
|
+
tokenAddress,
|
|
94
|
+
walletAddress,
|
|
95
|
+
subject,
|
|
96
|
+
}: GetERC20BalanceArgs): Promise<number> => {
|
|
97
|
+
const token = getERC20TokenContract(tokenAddress, subject);
|
|
98
|
+
|
|
99
|
+
const { tokenDescaler } = getTokenDetails(tokenAddress);
|
|
100
|
+
|
|
101
|
+
const currentBalance = await exponentialBackoff(() =>
|
|
102
|
+
token.balanceOf(walletAddress),
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
return tokenDescaler(currentBalance);
|
|
106
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GetBalanceParams } from './types';
|
|
2
|
+
import { getERC20Balance } from './common';
|
|
3
|
+
|
|
4
|
+
export const getBalance = async ({
|
|
5
|
+
signer,
|
|
6
|
+
tokenAddress,
|
|
7
|
+
}: GetBalanceParams): Promise<number> => {
|
|
8
|
+
const walletAddress = await signer.getAddress();
|
|
9
|
+
const currentBalance = await getERC20Balance({
|
|
10
|
+
walletAddress,
|
|
11
|
+
subject: signer,
|
|
12
|
+
tokenAddress: tokenAddress,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
return currentBalance;
|
|
16
|
+
};
|
package/src/utils/trade.ts
CHANGED
|
@@ -2,7 +2,7 @@ import BigNumber from 'bignumber.js';
|
|
|
2
2
|
|
|
3
3
|
export function calculatePriceLimitForTrade(
|
|
4
4
|
orderPrice: number,
|
|
5
|
-
|
|
5
|
+
amount: number,
|
|
6
6
|
): bigint {
|
|
7
7
|
// Ensure orderPrice is BigInt
|
|
8
8
|
const orderPriceBigInt = BigNumber(orderPrice);
|
|
@@ -10,8 +10,8 @@ export function calculatePriceLimitForTrade(
|
|
|
10
10
|
// Calculate 50% of the order price
|
|
11
11
|
const offset = orderPriceBigInt.div(2);
|
|
12
12
|
|
|
13
|
-
// Determine if the
|
|
14
|
-
if (
|
|
13
|
+
// Determine if the amount is positive or negative and adjust the price accordingly
|
|
14
|
+
if (amount > 0) {
|
|
15
15
|
// Trade is long, so add
|
|
16
16
|
return BigInt(
|
|
17
17
|
BigNumber(orderPriceBigInt).plus(offset).times(1e18).toFixed(0),
|