@mento-protocol/mento-sdk 3.0.0-beta.5 → 3.0.0-beta.6
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/cache/routes.d.ts.map +1 -1
- package/dist/cache/routes.js +8 -4
- package/dist/cache/routes.js.map +1 -1
- package/dist/core/abis/fpmm.d.ts +38 -0
- package/dist/core/abis/fpmm.d.ts.map +1 -1
- package/dist/core/abis/fpmm.js +1 -0
- package/dist/core/abis/fpmm.js.map +1 -1
- package/dist/core/types/index.d.ts +2 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +2 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/pool.d.ts +4 -0
- package/dist/core/types/pool.d.ts.map +1 -1
- package/dist/core/types/token.d.ts.map +1 -1
- package/dist/core/types/tradingLimits.d.ts +91 -0
- package/dist/core/types/tradingLimits.d.ts.map +1 -0
- package/dist/core/types/tradingLimits.js +3 -0
- package/dist/core/types/tradingLimits.js.map +1 -0
- package/dist/core/types/{provider.d.ts → transaction.d.ts} +1 -1
- package/dist/core/types/transaction.d.ts.map +1 -0
- package/dist/core/types/transaction.js +3 -0
- package/dist/core/types/transaction.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/services/pools/PoolService.d.ts.map +1 -1
- package/dist/services/pools/PoolService.js +3 -1
- package/dist/services/pools/PoolService.js.map +1 -1
- package/dist/services/trading/TradingLimitsService.d.ts +38 -0
- package/dist/services/trading/TradingLimitsService.d.ts.map +1 -0
- package/dist/services/trading/TradingLimitsService.js +157 -0
- package/dist/services/trading/TradingLimitsService.js.map +1 -0
- package/dist/services/trading/TradingService.d.ts +38 -4
- package/dist/services/trading/TradingService.d.ts.map +1 -1
- package/dist/services/trading/TradingService.js +55 -3
- package/dist/services/trading/TradingService.js.map +1 -1
- package/dist/services/trading/index.d.ts +1 -0
- package/dist/services/trading/index.d.ts.map +1 -1
- package/dist/services/trading/index.js +1 -0
- package/dist/services/trading/index.js.map +1 -1
- package/dist/utils/costUtils.js +4 -4
- package/dist/utils/costUtils.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/tradingLimits.d.ts +41 -0
- package/dist/utils/tradingLimits.d.ts.map +1 -0
- package/dist/utils/tradingLimits.js +171 -0
- package/dist/utils/tradingLimits.js.map +1 -0
- package/package.json +1 -1
- package/dist/core/types/provider.d.ts.map +0 -1
- package/dist/core/types/provider.js +0 -4
- package/dist/core/types/provider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/cache/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/cache/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAgHxD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAEhE"}
|
package/dist/cache/routes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// This file is auto-generated. Do not edit manually.
|
|
3
|
-
// Generated on 2025-12-
|
|
3
|
+
// Generated on 2025-12-18T17:44:38.856Z
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.cachedRoutes = void 0;
|
|
6
6
|
exports.getCachedRoutes = getCachedRoutes;
|
|
@@ -60,7 +60,8 @@ exports.cachedRoutes = {
|
|
|
60
60
|
"poolAddr": "0x21243E9F64815D86Eeb38d80a212295a39634e70",
|
|
61
61
|
"token0": "0x765DE816845861e75A25fCA122bb6898B8B1282a",
|
|
62
62
|
"token1": "0xfAeA5F3404bbA20D3cc2f8C4B0A888F55a3c7313",
|
|
63
|
-
"poolType": "Virtual"
|
|
63
|
+
"poolType": "Virtual",
|
|
64
|
+
"exchangeId": "0x3562f9d29eba092b857480a82b03375839c752346b9ebe93a57ab82410328187"
|
|
64
65
|
}
|
|
65
66
|
],
|
|
66
67
|
"costData": {
|
|
@@ -98,11 +99,12 @@ exports.cachedRoutes = {
|
|
|
98
99
|
"poolAddr": "0x21243E9F64815D86Eeb38d80a212295a39634e70",
|
|
99
100
|
"token0": "0x765DE816845861e75A25fCA122bb6898B8B1282a",
|
|
100
101
|
"token1": "0xfAeA5F3404bbA20D3cc2f8C4B0A888F55a3c7313",
|
|
101
|
-
"poolType": "Virtual"
|
|
102
|
+
"poolType": "Virtual",
|
|
103
|
+
"exchangeId": "0x3562f9d29eba092b857480a82b03375839c752346b9ebe93a57ab82410328187"
|
|
102
104
|
}
|
|
103
105
|
],
|
|
104
106
|
"costData": {
|
|
105
|
-
"totalCostPercent": 1.
|
|
107
|
+
"totalCostPercent": 1.3,
|
|
106
108
|
"hops": [
|
|
107
109
|
{
|
|
108
110
|
"poolAddress": "0x5c3919258a040D203260880401E3201a82d224c4",
|
|
@@ -116,6 +118,8 @@ exports.cachedRoutes = {
|
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
],
|
|
121
|
+
// Chain 11142220
|
|
122
|
+
11142220: [],
|
|
119
123
|
};
|
|
120
124
|
/**
|
|
121
125
|
* Get cached routes for a specific chain
|
package/dist/cache/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cache/routes.ts"],"names":[],"mappings":";AAAA,qDAAqD;AACrD,wCAAwC;;;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cache/routes.ts"],"names":[],"mappings":";AAAA,qDAAqD;AACrD,wCAAwC;;;AA+HxC,0CAEC;AA7HD;;;GAGG;AACU,QAAA,YAAY,GAAoC;IAC3D,cAAc;IACd,KAAK,EAAE;QACL;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,MAAM,EAAE;gBACN;oBACE,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,QAAQ,EAAE,4CAA4C;oBACtD,QAAQ,EAAE,4CAA4C;oBACtD,UAAU,EAAE,MAAM;iBACnB;aACF;YACD,UAAU,EAAE;gBACV,kBAAkB,EAAE,GAAG;gBACvB,MAAM,EAAE;oBACN;wBACE,aAAa,EAAE,4CAA4C;wBAC3D,aAAa,EAAE,GAAG;qBACnB;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,MAAM,EAAE;gBACN;oBACE,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,QAAQ,EAAE,4CAA4C;oBACtD,QAAQ,EAAE,4CAA4C;oBACtD,UAAU,EAAE,SAAS;oBACrB,YAAY,EAAE,oEAAoE;iBACnF;aACF;YACD,UAAU,EAAE;gBACV,kBAAkB,EAAE,CAAC;gBACrB,MAAM,EAAE;oBACN;wBACE,aAAa,EAAE,4CAA4C;wBAC3D,aAAa,EAAE,CAAC;qBACjB;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,SAAS,EAAE,4CAA4C;oBACvD,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,MAAM,EAAE;gBACN;oBACE,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,QAAQ,EAAE,4CAA4C;oBACtD,QAAQ,EAAE,4CAA4C;oBACtD,UAAU,EAAE,MAAM;iBACnB;gBACD;oBACE,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,QAAQ,EAAE,4CAA4C;oBACtD,QAAQ,EAAE,4CAA4C;oBACtD,UAAU,EAAE,SAAS;oBACrB,YAAY,EAAE,oEAAoE;iBACnF;aACF;YACD,UAAU,EAAE;gBACV,kBAAkB,EAAE,GAAG;gBACvB,MAAM,EAAE;oBACN;wBACE,aAAa,EAAE,4CAA4C;wBAC3D,aAAa,EAAE,GAAG;qBACnB;oBACD;wBACE,aAAa,EAAE,4CAA4C;wBAC3D,aAAa,EAAE,CAAC;qBACjB;iBACF;aACF;SACF;KACF;IACD,iBAAiB;IACjB,QAAQ,EAAE,EAAE;CACb,CAAA;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,OAAe;IAC7C,OAAO,oBAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;AACpC,CAAC"}
|
package/dist/core/abis/fpmm.d.ts
CHANGED
|
@@ -38,5 +38,43 @@ export declare const FPMM_ABI: readonly [{
|
|
|
38
38
|
readonly outputs: readonly [{
|
|
39
39
|
readonly type: "address";
|
|
40
40
|
}];
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "getTradingLimits";
|
|
43
|
+
readonly type: "function";
|
|
44
|
+
readonly stateMutability: "view";
|
|
45
|
+
readonly inputs: readonly [{
|
|
46
|
+
readonly type: "address";
|
|
47
|
+
readonly name: "token";
|
|
48
|
+
}];
|
|
49
|
+
readonly outputs: readonly [{
|
|
50
|
+
readonly type: "tuple";
|
|
51
|
+
readonly components: readonly [{
|
|
52
|
+
readonly type: "int120";
|
|
53
|
+
readonly name: "limit0";
|
|
54
|
+
}, {
|
|
55
|
+
readonly type: "int120";
|
|
56
|
+
readonly name: "limit1";
|
|
57
|
+
}, {
|
|
58
|
+
readonly type: "uint8";
|
|
59
|
+
readonly name: "decimals";
|
|
60
|
+
}];
|
|
61
|
+
readonly name: "config";
|
|
62
|
+
}, {
|
|
63
|
+
readonly type: "tuple";
|
|
64
|
+
readonly components: readonly [{
|
|
65
|
+
readonly type: "uint32";
|
|
66
|
+
readonly name: "lastUpdated0";
|
|
67
|
+
}, {
|
|
68
|
+
readonly type: "uint32";
|
|
69
|
+
readonly name: "lastUpdated1";
|
|
70
|
+
}, {
|
|
71
|
+
readonly type: "int96";
|
|
72
|
+
readonly name: "netflow0";
|
|
73
|
+
}, {
|
|
74
|
+
readonly type: "int96";
|
|
75
|
+
readonly name: "netflow1";
|
|
76
|
+
}];
|
|
77
|
+
readonly name: "state";
|
|
78
|
+
}];
|
|
41
79
|
}];
|
|
42
80
|
//# sourceMappingURL=fpmm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fpmm.d.ts","sourceRoot":"","sources":["../../../src/core/abis/fpmm.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"fpmm.d.ts","sourceRoot":"","sources":["../../../src/core/abis/fpmm.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAA"}
|
package/dist/core/abis/fpmm.js
CHANGED
|
@@ -8,5 +8,6 @@ exports.FPMM_ABI = (0, viem_1.parseAbi)([
|
|
|
8
8
|
'function lpFee() view returns (uint256)',
|
|
9
9
|
'function protocolFee() view returns (uint256)',
|
|
10
10
|
'function referenceRateFeedID() view returns (address)',
|
|
11
|
+
'function getTradingLimits(address token) view returns ((int120 limit0, int120 limit1, uint8 decimals) config, (uint32 lastUpdated0, uint32 lastUpdated1, int96 netflow0, int96 netflow1) state)',
|
|
11
12
|
]);
|
|
12
13
|
//# sourceMappingURL=fpmm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fpmm.js","sourceRoot":"","sources":["../../../src/core/abis/fpmm.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAElB,QAAA,QAAQ,GAAG,IAAA,eAAQ,EAAC;IAC/B,0CAA0C;IAC1C,0CAA0C;IAC1C,yCAAyC;IACzC,+CAA+C;IAC/C,uDAAuD;
|
|
1
|
+
{"version":3,"file":"fpmm.js","sourceRoot":"","sources":["../../../src/core/abis/fpmm.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAElB,QAAA,QAAQ,GAAG,IAAA,eAAQ,EAAC;IAC/B,0CAA0C;IAC1C,0CAA0C;IAC1C,yCAAyC;IACzC,+CAA+C;IAC/C,uDAAuD;IACvD,iMAAiM;CAClM,CAAC,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from './contractAddresses';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './transaction';
|
|
3
3
|
export * from './token';
|
|
4
4
|
export * from './route';
|
|
5
5
|
export * from './pool';
|
|
6
6
|
export * from './tradingMode';
|
|
7
|
+
export * from './tradingLimits';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA"}
|
package/dist/core/types/index.js
CHANGED
|
@@ -15,9 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./contractAddresses"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
18
|
+
__exportStar(require("./transaction"), exports);
|
|
19
19
|
__exportStar(require("./token"), exports);
|
|
20
20
|
__exportStar(require("./route"), exports);
|
|
21
21
|
__exportStar(require("./pool"), exports);
|
|
22
22
|
__exportStar(require("./tradingMode"), exports);
|
|
23
|
+
__exportStar(require("./tradingLimits"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,gDAA6B;AAC7B,0CAAuB;AACvB,0CAAuB;AACvB,yCAAsB;AACtB,gDAA6B;AAC7B,kDAA+B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/core/types/pool.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,gEAAgE;IAChE,IAAI,SAAS;IACb,gEAAgE;IAChE,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/core/types/pool.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,gEAAgE;IAChE,IAAI,SAAS;IACb,gEAAgE;IAChE,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/core/types/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/core/types/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,CAAA;AAEnC;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,iBAAiB,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CAAA;CACnD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-friendly representation of a trading limit.
|
|
3
|
+
* Used by frontends to display limit status and calculate remaining capacity.
|
|
4
|
+
*/
|
|
5
|
+
export interface TradingLimit {
|
|
6
|
+
/** Token address this limit applies to */
|
|
7
|
+
asset: string;
|
|
8
|
+
/** Maximum amount that can flow IN (raw value - V1: 0 decimals, V2: 15 decimals) */
|
|
9
|
+
maxIn: bigint;
|
|
10
|
+
/** Maximum amount that can flow OUT (raw value - V1: 0 decimals, V2: 15 decimals) */
|
|
11
|
+
maxOut: bigint;
|
|
12
|
+
/** Unix timestamp when this limit window resets */
|
|
13
|
+
until: number;
|
|
14
|
+
/** Token decimals for consumer scaling */
|
|
15
|
+
decimals: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Trading limits configuration for V1 (Broker/Virtual pools).
|
|
19
|
+
* Uses configurable timeframes and 0 decimal precision.
|
|
20
|
+
*/
|
|
21
|
+
export interface TradingLimitsConfigV1 {
|
|
22
|
+
/** Time window in seconds for L0 limit */
|
|
23
|
+
timestep0: number;
|
|
24
|
+
/** Time window in seconds for L1 limit */
|
|
25
|
+
timestep1: number;
|
|
26
|
+
/** L0 limit value (0 decimal precision) */
|
|
27
|
+
limit0: bigint;
|
|
28
|
+
/** L1 limit value (0 decimal precision) */
|
|
29
|
+
limit1: bigint;
|
|
30
|
+
/** Global limit value (0 decimal precision) */
|
|
31
|
+
limitGlobal: bigint;
|
|
32
|
+
/** Flags bitmap: bit 0=L0, bit 1=L1, bit 2=LG */
|
|
33
|
+
flags: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Trading limits state for V1 (Broker/Virtual pools).
|
|
37
|
+
*/
|
|
38
|
+
export interface TradingLimitsStateV1 {
|
|
39
|
+
/** Timestamp of last L0 window reset */
|
|
40
|
+
lastUpdated0: number;
|
|
41
|
+
/** Timestamp of last L1 window reset */
|
|
42
|
+
lastUpdated1: number;
|
|
43
|
+
/** Current netflow for L0 (0 decimal precision) */
|
|
44
|
+
netflow0: bigint;
|
|
45
|
+
/** Current netflow for L1 (0 decimal precision) */
|
|
46
|
+
netflow1: bigint;
|
|
47
|
+
/** Current global netflow (0 decimal precision) */
|
|
48
|
+
netflowGlobal: bigint;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Trading limits configuration for V2 (FPMM pools).
|
|
52
|
+
* Uses fixed timeframes (5 min for L0, 1 day for L1) and 15 decimal precision.
|
|
53
|
+
*/
|
|
54
|
+
export interface TradingLimitsConfigV2 {
|
|
55
|
+
/** L0 limit value (15 decimal precision) */
|
|
56
|
+
limit0: bigint;
|
|
57
|
+
/** L1 limit value (15 decimal precision) */
|
|
58
|
+
limit1: bigint;
|
|
59
|
+
/** Token decimals */
|
|
60
|
+
decimals: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Trading limits state for V2 (FPMM pools).
|
|
64
|
+
*/
|
|
65
|
+
export interface TradingLimitsStateV2 {
|
|
66
|
+
/** Timestamp of last L0 window reset */
|
|
67
|
+
lastUpdated0: number;
|
|
68
|
+
/** Timestamp of last L1 window reset */
|
|
69
|
+
lastUpdated1: number;
|
|
70
|
+
/** Current netflow for L0 (15 decimal precision) */
|
|
71
|
+
netflow0: bigint;
|
|
72
|
+
/** Current netflow for L1 (15 decimal precision) */
|
|
73
|
+
netflow1: bigint;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Combined tradability status for a pool.
|
|
77
|
+
* Separates circuit breaker and trading limits for distinct UI messaging.
|
|
78
|
+
*/
|
|
79
|
+
export interface PoolTradabilityStatus {
|
|
80
|
+
/** Overall tradability (circuitBreakerOk AND limitsOk) */
|
|
81
|
+
tradable: boolean;
|
|
82
|
+
/** Circuit breaker status - true if not tripped */
|
|
83
|
+
circuitBreakerOk: boolean;
|
|
84
|
+
/** Raw trading mode value (0 = BIDIRECTIONAL, non-zero = suspended) */
|
|
85
|
+
tradingMode: number;
|
|
86
|
+
/** Trading limits status - true if limits not exhausted */
|
|
87
|
+
limitsOk: boolean;
|
|
88
|
+
/** Detailed limit info for UI display */
|
|
89
|
+
limits: TradingLimit[];
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=tradingLimits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradingLimits.d.ts","sourceRoot":"","sources":["../../../src/core/types/tradingLimits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAA;IACb,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAA;IAEjB,mDAAmD;IACnD,gBAAgB,EAAE,OAAO,CAAA;IACzB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IAEnB,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAA;IACjB,yCAAyC;IACzC,MAAM,EAAE,YAAY,EAAE,CAAA;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradingLimits.js","sourceRoot":"","sources":["../../../src/core/types/tradingLimits.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/types/transaction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/core/types/transaction.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,12 @@ import { TradingService } from './services/trading';
|
|
|
34
34
|
*
|
|
35
35
|
* // Check if a pair is tradable (circuit breaker check)
|
|
36
36
|
* const isTradable = await mento.trading.isPairTradable(cUSD, CELO);
|
|
37
|
+
*
|
|
38
|
+
* // Get trading limits for a pool
|
|
39
|
+
* const limits = await mento.trading.getPoolTradingLimits(pool);
|
|
40
|
+
*
|
|
41
|
+
* // Get full tradability status (circuit breaker + limits)
|
|
42
|
+
* const status = await mento.trading.getPoolTradabilityStatus(pool);
|
|
37
43
|
*/
|
|
38
44
|
export declare class Mento {
|
|
39
45
|
private chainId;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,KAAK;IAEd,OAAO,CAAC,OAAO;IACR,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IAPhC,OAAO;IAUP;;;;;OAKG;WACiB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAqB5E;;;;OAIG;IACI,kBAAkB,CAAC,YAAY,EAAE,MAAM,iBAAiB,GAAG,MAAM;CAGzE;AAED,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,12 @@ const trading_1 = require("./services/trading");
|
|
|
53
53
|
*
|
|
54
54
|
* // Check if a pair is tradable (circuit breaker check)
|
|
55
55
|
* const isTradable = await mento.trading.isPairTradable(cUSD, CELO);
|
|
56
|
+
*
|
|
57
|
+
* // Get trading limits for a pool
|
|
58
|
+
* const limits = await mento.trading.getPoolTradingLimits(pool);
|
|
59
|
+
*
|
|
60
|
+
* // Get full tradability status (circuit breaker + limits)
|
|
61
|
+
* const status = await mento.trading.getPoolTradabilityStatus(pool);
|
|
56
62
|
*/
|
|
57
63
|
class Mento {
|
|
58
64
|
constructor(chainId, tokens, pools, routes, quotes, swap, trading) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+BAAkE;AAGlE,0DAA+D;AAC/D,qDAAsE;AACtE,8CAAgD;AAChD,4CAA8C;AAC9C,8CAAgD;AAChD,8CAAgD;AAChD,0CAA6C;AAC7C,gDAAmD;AAEnD
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+BAAkE;AAGlE,0DAA+D;AAC/D,qDAAsE;AACtE,8CAAgD;AAChD,4CAA8C;AAC9C,8CAAgD;AAChD,8CAAgD;AAChD,0CAA6C;AAC7C,gDAAmD;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAa,KAAK;IAChB,YACU,OAAe,EAChB,MAAoB,EACpB,KAAkB,EAClB,MAAoB,EACpB,MAAoB,EACpB,IAAiB,EACjB,OAAuB;QANtB,YAAO,GAAP,OAAO,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAc;QACpB,UAAK,GAAL,KAAK,CAAa;QAClB,WAAM,GAAN,MAAM,CAAc;QACpB,WAAM,GAAN,MAAM,CAAc;QACpB,SAAI,GAAJ,IAAI,CAAa;QACjB,YAAO,GAAP,OAAO,CAAgB;IAC7B,CAAC;IAEJ;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,MAAe;QACzD,gDAAgD;QAChD,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,MAAM,IAAI,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC,CAAA;QAE3D,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAA,yBAAkB,EAAC;YACtC,KAAK,EAAE,IAAA,4BAAc,EAAC,OAAO,CAAC;YAC9B,SAAS;SACV,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,IAAI,qBAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC5D,MAAM,WAAW,GAAG,IAAI,mBAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,IAAI,qBAAY,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;QACzE,MAAM,YAAY,GAAG,IAAI,qBAAY,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,IAAI,kBAAW,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAA;QACtF,MAAM,cAAc,GAAG,IAAI,wBAAc,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;QAE9E,mBAAmB;QACnB,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAC/G,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,YAAqC;QAC7D,OAAO,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,YAAY,CAAC,CAAA;IAClE,CAAC;CACF;AA9CD,sBA8CC;AAED,mDAAgC;AAChC,+CAA4B;AAC5B,8CAA2B;AAC3B,6CAA0B;AAC1B,0CAAuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolService.d.ts","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAY,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAW,MAAM,MAAM,CAAA;AAK5C;;;GAGG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,OAAO;IAF/D,OAAO,CAAC,UAAU,CAAsB;gBAEpB,YAAY,EAAE,YAAY,EAAU,OAAO,EAAE,MAAM;IAEvE;;;;;;;;;;;;OAYG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAoBjC;;OAEG;YACW,cAAc;IAkD5B;;;;OAIG;YACW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"PoolService.d.ts","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAY,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAW,MAAM,MAAM,CAAA;AAK5C;;;GAGG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,OAAO;IAF/D,OAAO,CAAC,UAAU,CAAsB;gBAEpB,YAAY,EAAE,YAAY,EAAU,OAAO,EAAE,MAAM;IAEvE;;;;;;;;;;;;OAYG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAoBjC;;OAEG;YACW,cAAc;IAkD5B;;;;OAIG;YACW,iBAAiB;CAqEhC"}
|
|
@@ -137,13 +137,15 @@ class PoolService {
|
|
|
137
137
|
if (!isDeployed) {
|
|
138
138
|
return null;
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
const pool = {
|
|
141
141
|
factoryAddr: virtualPoolFactoryAddress,
|
|
142
142
|
poolAddr: poolAddress,
|
|
143
143
|
token0: token0,
|
|
144
144
|
token1: token1,
|
|
145
145
|
poolType: types_1.PoolType.Virtual,
|
|
146
|
+
exchangeId: exchange.exchangeId,
|
|
146
147
|
};
|
|
148
|
+
return pool;
|
|
147
149
|
});
|
|
148
150
|
const results = await Promise.all(poolPromises);
|
|
149
151
|
return results.filter((pool) => pool !== null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolService.js","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":";;;AAAA,oDAAkE;AAClE,4CAAiD;AACjD,0CAA0G;AAE1G,qDAA0D;AAE1D,iGAAiG;AAEjG;;;GAGG;AACH,MAAa,WAAW;IAGtB,YAAoB,YAA0B,EAAU,OAAe;QAAnD,iBAAY,GAAZ,YAAY,CAAc;QAAU,YAAO,GAAP,OAAO,CAAQ;QAF/D,eAAU,GAAkB,IAAI,CAAA;IAEkC,CAAC;IAE3E;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAU,CAAA;QACxB,CAAC;QAED,6DAA6D;QAC7D,2DAA2D;QAC3D,8DAA8D;QAC9D,MAAM,KAAK,GAAW,EAAE,CAAA;QAExB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QAExB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAE3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,kBAAkB,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,aAAa,CAAC,CAAA;QAErF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;YAC7D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,uCAAuC;YACvC,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAC1D,OAAO,EAAE,kBAA6B;gBACtC,GAAG,EAAE,uBAAgB;gBACrB,YAAY,EAAE,uBAAuB;aACtC,CAAC,CAAc,CAAA;YAEhB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAA;YACX,CAAC;YAED,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;gBAC/D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACzC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;wBAC7B,OAAO,EAAE,WAAW;wBACpB,GAAG,EAAE,eAAQ;wBACb,YAAY,EAAE,QAAQ;qBACvB,CAAqB;oBACtB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;wBAC7B,OAAO,EAAE,WAAW;wBACpB,GAAG,EAAE,eAAQ;wBACb,YAAY,EAAE,QAAQ;qBACvB,CAAqB;iBACvB,CAAC,CAAA;gBAEF,OAAO;oBACL,WAAW,EAAE,kBAAkB;oBAC/B,QAAQ,EAAE,WAAqB;oBAC/B,MAAM,EAAE,MAAgB;oBACxB,MAAM,EAAE,MAAgB;oBACxB,QAAQ,EAAE,gBAAQ,CAAC,IAAqB;iBACzC,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACnD,MAAM,IAAI,KAAK,CAAC,+BAAgC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,iBAAiB;QAC7B,MAAM,yBAAyB,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,oBAAoB,CAAC,CAAA;QACnG,MAAM,oBAAoB,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,eAAe,CAAC,CAAA;QAEzF,IAAI,CAAC,yBAAyB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;YACpF,OAAO,EAAE,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,kDAAkD;YAClD,0FAA0F;YAE1F,uCAAuC;YACvC,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAC1D,OAAO,EAAE,oBAA+B;gBACxC,GAAG,EAAE,yBAAkB;gBACvB,YAAY,EAAE,cAAc;aAC7B,CAAC,CAA8D,CAAA;YAEhE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAA;YACX,CAAC;YAED,yFAAyF;YACzF,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACxD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,CAAC,UAAU,qBAAqB,CAAC,CAAA;oBACnF,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAA,8BAAkB,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEnF,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;oBACxD,OAAO,EAAE,yBAAoC;oBAC7C,GAAG,EAAE,+BAAwB;oBAC7B,YAAY,EAAE,6BAA6B;oBAC3C,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;iBACvB,CAAC,CAAY,CAAA;gBAEd,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;oBACvD,OAAO,EAAE,yBAAoC;oBAC7C,GAAG,EAAE,+BAAwB;oBAC7B,YAAY,EAAE,QAAQ;oBACtB,IAAI,EAAE,CAAC,WAAW,CAAC;iBACpB,CAAC,CAAY,CAAA;gBAEd,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,
|
|
1
|
+
{"version":3,"file":"PoolService.js","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PublicClient } from 'viem';
|
|
2
|
+
import type { Pool, TradingLimit } from '../../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Service for querying trading limits from the Mento protocol.
|
|
5
|
+
* Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
|
|
6
|
+
*/
|
|
7
|
+
export declare class TradingLimitsService {
|
|
8
|
+
private publicClient;
|
|
9
|
+
private chainId;
|
|
10
|
+
constructor(publicClient: PublicClient, chainId: number);
|
|
11
|
+
/**
|
|
12
|
+
* Get trading limits for a pool.
|
|
13
|
+
* Returns an array of TradingLimit objects for each configured limit.
|
|
14
|
+
*
|
|
15
|
+
* @param pool - The pool to get trading limits for
|
|
16
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
17
|
+
*/
|
|
18
|
+
getPoolTradingLimits(pool: Pool): Promise<TradingLimit[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Get trading limits for an FPMM pool.
|
|
21
|
+
* FPMM pools use TradingLimitsV2 with fixed timeframes.
|
|
22
|
+
*/
|
|
23
|
+
private getFPMMTradingLimits;
|
|
24
|
+
/**
|
|
25
|
+
* Get trading limits for a specific token in an FPMM pool.
|
|
26
|
+
*/
|
|
27
|
+
private getFPMMTokenLimits;
|
|
28
|
+
/**
|
|
29
|
+
* Get trading limits for a Virtual pool.
|
|
30
|
+
* Virtual pools use TradingLimitsV1 via the Broker contract.
|
|
31
|
+
*/
|
|
32
|
+
private getVirtualPoolTradingLimits;
|
|
33
|
+
/**
|
|
34
|
+
* Get trading limits for a specific token in a Virtual pool.
|
|
35
|
+
*/
|
|
36
|
+
private getVirtualPoolTokenLimits;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=TradingLimitsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingLimitsService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,MAAM,CAAA;AAC5C,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EAKb,MAAM,kBAAkB,CAAA;AAYzB;;;GAGG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;gBADP,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM;IAGzB;;;;;;OAMG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ/D;;;OAGG;YACW,oBAAoB;IAelC;;OAEG;YACW,kBAAkB;IA0ChC;;;OAGG;YACW,2BAA2B;IAoBzC;;OAEG;YACW,yBAAyB;CA4DxC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TradingLimitsService = void 0;
|
|
4
|
+
const types_1 = require("../../core/types");
|
|
5
|
+
const abis_1 = require("../../core/abis");
|
|
6
|
+
const constants_1 = require("../../core/constants");
|
|
7
|
+
const tradingLimits_1 = require("../../utils/tradingLimits");
|
|
8
|
+
/**
|
|
9
|
+
* Service for querying trading limits from the Mento protocol.
|
|
10
|
+
* Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
|
|
11
|
+
*/
|
|
12
|
+
class TradingLimitsService {
|
|
13
|
+
constructor(publicClient, chainId) {
|
|
14
|
+
this.publicClient = publicClient;
|
|
15
|
+
this.chainId = chainId;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get trading limits for a pool.
|
|
19
|
+
* Returns an array of TradingLimit objects for each configured limit.
|
|
20
|
+
*
|
|
21
|
+
* @param pool - The pool to get trading limits for
|
|
22
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
23
|
+
*/
|
|
24
|
+
async getPoolTradingLimits(pool) {
|
|
25
|
+
if (pool.poolType === types_1.PoolType.FPMM) {
|
|
26
|
+
return this.getFPMMTradingLimits(pool);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return this.getVirtualPoolTradingLimits(pool);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get trading limits for an FPMM pool.
|
|
34
|
+
* FPMM pools use TradingLimitsV2 with fixed timeframes.
|
|
35
|
+
*/
|
|
36
|
+
async getFPMMTradingLimits(pool) {
|
|
37
|
+
const limits = [];
|
|
38
|
+
// Get trading limits for both tokens
|
|
39
|
+
const [token0Limits, token1Limits] = await Promise.all([
|
|
40
|
+
this.getFPMMTokenLimits(pool.poolAddr, pool.token0),
|
|
41
|
+
this.getFPMMTokenLimits(pool.poolAddr, pool.token1),
|
|
42
|
+
]);
|
|
43
|
+
limits.push(...token0Limits);
|
|
44
|
+
limits.push(...token1Limits);
|
|
45
|
+
return limits;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get trading limits for a specific token in an FPMM pool.
|
|
49
|
+
*/
|
|
50
|
+
async getFPMMTokenLimits(poolAddr, token) {
|
|
51
|
+
try {
|
|
52
|
+
const result = await this.publicClient.readContract({
|
|
53
|
+
address: poolAddr,
|
|
54
|
+
abi: abis_1.FPMM_ABI,
|
|
55
|
+
functionName: 'getTradingLimits',
|
|
56
|
+
args: [token],
|
|
57
|
+
});
|
|
58
|
+
// Result is a tuple: [config, state]
|
|
59
|
+
const [configTuple, stateTuple] = result;
|
|
60
|
+
const config = {
|
|
61
|
+
limit0: configTuple.limit0,
|
|
62
|
+
limit1: configTuple.limit1,
|
|
63
|
+
decimals: configTuple.decimals,
|
|
64
|
+
};
|
|
65
|
+
const state = {
|
|
66
|
+
lastUpdated0: Number(stateTuple.lastUpdated0),
|
|
67
|
+
lastUpdated1: Number(stateTuple.lastUpdated1),
|
|
68
|
+
netflow0: stateTuple.netflow0,
|
|
69
|
+
netflow1: stateTuple.netflow1,
|
|
70
|
+
};
|
|
71
|
+
if (!(0, tradingLimits_1.hasConfiguredLimitsV2)(config)) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
return (0, tradingLimits_1.calculateTradingLimitsV2)(config, state, token);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Token may not have limits configured, or invalid token
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get trading limits for a Virtual pool.
|
|
83
|
+
* Virtual pools use TradingLimitsV1 via the Broker contract.
|
|
84
|
+
*/
|
|
85
|
+
async getVirtualPoolTradingLimits(pool) {
|
|
86
|
+
if (!pool.exchangeId) {
|
|
87
|
+
console.warn(`Virtual pool ${pool.poolAddr} missing exchangeId - cannot query trading limits`);
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const limits = [];
|
|
91
|
+
// Get trading limits for both tokens
|
|
92
|
+
const [token0Limits, token1Limits] = await Promise.all([
|
|
93
|
+
this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token0),
|
|
94
|
+
this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token1),
|
|
95
|
+
]);
|
|
96
|
+
limits.push(...token0Limits);
|
|
97
|
+
limits.push(...token1Limits);
|
|
98
|
+
return limits;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get trading limits for a specific token in a Virtual pool.
|
|
102
|
+
*/
|
|
103
|
+
async getVirtualPoolTokenLimits(exchangeId, token) {
|
|
104
|
+
const brokerAddr = (0, constants_1.getContractAddress)(this.chainId, 'Broker');
|
|
105
|
+
const limitId = (0, tradingLimits_1.computeLimitId)(exchangeId, token);
|
|
106
|
+
try {
|
|
107
|
+
// Fetch config and state in parallel
|
|
108
|
+
const [configResult, stateResult] = await Promise.all([
|
|
109
|
+
this.publicClient.readContract({
|
|
110
|
+
address: brokerAddr,
|
|
111
|
+
abi: abis_1.BROKER_ABI,
|
|
112
|
+
functionName: 'tradingLimitsConfig',
|
|
113
|
+
args: [limitId],
|
|
114
|
+
}),
|
|
115
|
+
this.publicClient.readContract({
|
|
116
|
+
address: brokerAddr,
|
|
117
|
+
abi: abis_1.BROKER_ABI,
|
|
118
|
+
functionName: 'tradingLimitsState',
|
|
119
|
+
args: [limitId],
|
|
120
|
+
}),
|
|
121
|
+
]);
|
|
122
|
+
// Parse config result
|
|
123
|
+
const configTuple = configResult;
|
|
124
|
+
const config = {
|
|
125
|
+
timestep0: Number(configTuple[0]),
|
|
126
|
+
timestep1: Number(configTuple[1]),
|
|
127
|
+
limit0: configTuple[2],
|
|
128
|
+
limit1: configTuple[3],
|
|
129
|
+
limitGlobal: configTuple[4],
|
|
130
|
+
flags: Number(configTuple[5]),
|
|
131
|
+
};
|
|
132
|
+
// Parse state result
|
|
133
|
+
const stateTuple = stateResult;
|
|
134
|
+
const state = {
|
|
135
|
+
lastUpdated0: Number(stateTuple[0]),
|
|
136
|
+
lastUpdated1: Number(stateTuple[1]),
|
|
137
|
+
netflow0: stateTuple[2],
|
|
138
|
+
netflow1: stateTuple[3],
|
|
139
|
+
netflowGlobal: stateTuple[4],
|
|
140
|
+
};
|
|
141
|
+
// Only return limits if configured
|
|
142
|
+
if (!(0, tradingLimits_1.hasConfiguredLimitsV1)(config)) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
// Get token decimals (V1 uses 0 decimals internally, but we track token decimals for display)
|
|
146
|
+
// For now, return 0 as the reference - consumers should query token decimals separately
|
|
147
|
+
const tokenDecimals = 0; // V1 stores values with 0 decimal precision
|
|
148
|
+
return (0, tradingLimits_1.calculateTradingLimitsV1)(config, state, token, tokenDecimals);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Trading limits may not be configured for this token
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.TradingLimitsService = TradingLimitsService;
|
|
157
|
+
//# sourceMappingURL=TradingLimitsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingLimitsService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { PublicClient } from 'viem';
|
|
2
|
-
import { Route } from '../../core/types';
|
|
2
|
+
import { Route, Pool, TradingLimit, PoolTradabilityStatus } from '../../core/types';
|
|
3
3
|
import { RouteService } from '../routes';
|
|
4
4
|
/**
|
|
5
5
|
* Service for checking trading status and circuit breaker state in the Mento protocol.
|
|
6
6
|
* Provides methods to query whether trading is enabled for specific rate feeds,
|
|
7
|
-
* token pairs, or routes.
|
|
7
|
+
* token pairs, or routes. Also integrates trading limit checks.
|
|
8
8
|
*/
|
|
9
9
|
export declare class TradingService {
|
|
10
10
|
private publicClient;
|
|
11
11
|
private chainId;
|
|
12
12
|
private routeService;
|
|
13
|
+
private tradingLimitsService;
|
|
13
14
|
constructor(publicClient: PublicClient, chainId: number, routeService: RouteService);
|
|
14
15
|
/**
|
|
15
16
|
* Returns the current trading mode for a given rate feed.
|
|
@@ -63,14 +64,47 @@ export declare class TradingService {
|
|
|
63
64
|
* ```
|
|
64
65
|
*/
|
|
65
66
|
isRouteTradable(route: Route): Promise<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Get trading limits for a pool.
|
|
69
|
+
*
|
|
70
|
+
* @param pool - The pool to get trading limits for
|
|
71
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const limits = await tradingService.getPoolTradingLimits(pool)
|
|
76
|
+
* limits.forEach(limit => {
|
|
77
|
+
* console.log(`${limit.asset}: maxIn=${limit.maxIn}, maxOut=${limit.maxOut}`)
|
|
78
|
+
* })
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
getPoolTradingLimits(pool: Pool): Promise<TradingLimit[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Get complete tradability status for a pool.
|
|
84
|
+
* Returns separate flags for circuit breaker and trading limits,
|
|
85
|
+
* allowing frontends to show different messages for each condition.
|
|
86
|
+
*
|
|
87
|
+
* @param pool - The pool to check
|
|
88
|
+
* @returns PoolTradabilityStatus with tradable, circuitBreakerOk, limitsOk, and limits
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const status = await tradingService.getPoolTradabilityStatus(pool)
|
|
93
|
+
* if (!status.circuitBreakerOk) {
|
|
94
|
+
* showModal("Trading temporarily suspended (circuit breaker)")
|
|
95
|
+
* } else if (!status.limitsOk) {
|
|
96
|
+
* showModal("Trading limit reached", status.limits)
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
getPoolTradabilityStatus(pool: Pool): Promise<PoolTradabilityStatus>;
|
|
66
101
|
/**
|
|
67
102
|
* Get the reference rate feed ID for a pool.
|
|
68
103
|
* Both FPMM and Virtual pools expose this via the referenceRateFeedID() view function.
|
|
69
104
|
*
|
|
70
105
|
* @param pool - The pool to get rate feed ID for
|
|
71
106
|
* @returns The rate feed ID address
|
|
72
|
-
* @private
|
|
73
107
|
*/
|
|
74
|
-
|
|
108
|
+
getPoolRateFeedId(pool: Pool): Promise<string>;
|
|
75
109
|
}
|
|
76
110
|
//# sourceMappingURL=TradingService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"TradingService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,EAEL,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,qBAAqB,EACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAKxC;;;;GAIG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,oBAAoB,CAAsB;gBAGxC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY;IAKpC;;;;;;;;;;;;;;;;OAgBG;IACG,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAajE;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzE;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrD;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI/D;;;;;;;;;;;;;;;;;OAiBG;IACG,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAqB1E;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CASrD"}
|
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TradingService = void 0;
|
|
4
4
|
const types_1 = require("../../core/types");
|
|
5
|
+
const TradingLimitsService_1 = require("./TradingLimitsService");
|
|
5
6
|
const abis_1 = require("../../core/abis");
|
|
6
7
|
const constants_1 = require("../../core/constants");
|
|
7
|
-
// TODO: Could be expanded to include trading limit checks
|
|
8
8
|
/**
|
|
9
9
|
* Service for checking trading status and circuit breaker state in the Mento protocol.
|
|
10
10
|
* Provides methods to query whether trading is enabled for specific rate feeds,
|
|
11
|
-
* token pairs, or routes.
|
|
11
|
+
* token pairs, or routes. Also integrates trading limit checks.
|
|
12
12
|
*/
|
|
13
13
|
class TradingService {
|
|
14
14
|
constructor(publicClient, chainId, routeService) {
|
|
15
15
|
this.publicClient = publicClient;
|
|
16
16
|
this.chainId = chainId;
|
|
17
17
|
this.routeService = routeService;
|
|
18
|
+
this.tradingLimitsService = new TradingLimitsService_1.TradingLimitsService(publicClient, chainId);
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* Returns the current trading mode for a given rate feed.
|
|
@@ -89,13 +90,64 @@ class TradingService {
|
|
|
89
90
|
// All rate feeds must have trading enabled for the route to be tradable
|
|
90
91
|
return rateFeedChecks.every((isEnabled) => isEnabled);
|
|
91
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Get trading limits for a pool.
|
|
95
|
+
*
|
|
96
|
+
* @param pool - The pool to get trading limits for
|
|
97
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const limits = await tradingService.getPoolTradingLimits(pool)
|
|
102
|
+
* limits.forEach(limit => {
|
|
103
|
+
* console.log(`${limit.asset}: maxIn=${limit.maxIn}, maxOut=${limit.maxOut}`)
|
|
104
|
+
* })
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
async getPoolTradingLimits(pool) {
|
|
108
|
+
return this.tradingLimitsService.getPoolTradingLimits(pool);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get complete tradability status for a pool.
|
|
112
|
+
* Returns separate flags for circuit breaker and trading limits,
|
|
113
|
+
* allowing frontends to show different messages for each condition.
|
|
114
|
+
*
|
|
115
|
+
* @param pool - The pool to check
|
|
116
|
+
* @returns PoolTradabilityStatus with tradable, circuitBreakerOk, limitsOk, and limits
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const status = await tradingService.getPoolTradabilityStatus(pool)
|
|
121
|
+
* if (!status.circuitBreakerOk) {
|
|
122
|
+
* showModal("Trading temporarily suspended (circuit breaker)")
|
|
123
|
+
* } else if (!status.limitsOk) {
|
|
124
|
+
* showModal("Trading limit reached", status.limits)
|
|
125
|
+
* }
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
async getPoolTradabilityStatus(pool) {
|
|
129
|
+
const [rateFeedId, limits] = await Promise.all([
|
|
130
|
+
this.getPoolRateFeedId(pool),
|
|
131
|
+
this.tradingLimitsService.getPoolTradingLimits(pool),
|
|
132
|
+
]);
|
|
133
|
+
const tradingMode = await this.getRateFeedTradingMode(rateFeedId);
|
|
134
|
+
const circuitBreakerOk = (0, types_1.isTradingEnabled)(tradingMode);
|
|
135
|
+
// Limits are OK if no limits configured OR all limits have capacity
|
|
136
|
+
const limitsOk = limits.length === 0 || limits.every((l) => l.maxIn > 0n && l.maxOut > 0n);
|
|
137
|
+
return {
|
|
138
|
+
tradable: circuitBreakerOk && limitsOk,
|
|
139
|
+
circuitBreakerOk,
|
|
140
|
+
tradingMode,
|
|
141
|
+
limitsOk,
|
|
142
|
+
limits,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
92
145
|
/**
|
|
93
146
|
* Get the reference rate feed ID for a pool.
|
|
94
147
|
* Both FPMM and Virtual pools expose this via the referenceRateFeedID() view function.
|
|
95
148
|
*
|
|
96
149
|
* @param pool - The pool to get rate feed ID for
|
|
97
150
|
* @returns The rate feed ID address
|
|
98
|
-
* @private
|
|
99
151
|
*/
|
|
100
152
|
async getPoolRateFeedId(pool) {
|
|
101
153
|
const rateFeedId = await this.publicClient.readContract({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"TradingService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./TradingService"), exports);
|
|
18
|
+
__exportStar(require("./TradingLimitsService"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,yDAAsC"}
|
package/dist/utils/costUtils.js
CHANGED
|
@@ -40,9 +40,9 @@ async function getFPMMCostPercent(poolAddress, publicClient) {
|
|
|
40
40
|
functionName: 'protocolFee',
|
|
41
41
|
}),
|
|
42
42
|
]);
|
|
43
|
-
// Convert from basis points to percentage
|
|
43
|
+
// Convert from basis points to percentage, rounded to 2dp
|
|
44
44
|
const totalBasisPoints = Number(lpFee) + Number(protocolFee);
|
|
45
|
-
return totalBasisPoints / 100;
|
|
45
|
+
return Math.round((totalBasisPoints / 100) * 100) / 100;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Calculate cost for Virtual pools
|
|
@@ -53,7 +53,7 @@ async function getVirtualPoolCostPercent(poolAddress, publicClient) {
|
|
|
53
53
|
abi: virtualPool_1.VIRTUAL_POOL_ABI,
|
|
54
54
|
functionName: 'protocolFee',
|
|
55
55
|
});
|
|
56
|
-
//
|
|
57
|
-
return Number(protocolFee) / 100;
|
|
56
|
+
// Convert from basis points to percentage, rounded to 2dp
|
|
57
|
+
return Math.round((Number(protocolFee) / 100) * 100) / 100;
|
|
58
58
|
}
|
|
59
59
|
//# sourceMappingURL=costUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"costUtils.js","sourceRoot":"","sources":["../../src/utils/costUtils.ts"],"names":[],"mappings":";;AAaA,gDAQC;AArBD,yCAA8C;AAC9C,uCAAuC;AAEvC,0DAA2D;AAE3D;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,YAA0B;IAC7E,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAA0B;IAC/E,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,OAAO;SACtB,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,
|
|
1
|
+
{"version":3,"file":"costUtils.js","sourceRoot":"","sources":["../../src/utils/costUtils.ts"],"names":[],"mappings":";;AAaA,gDAQC;AArBD,yCAA8C;AAC9C,uCAAuC;AAEvC,0DAA2D;AAE3D;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,YAA0B;IAC7E,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAA0B;IAC/E,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,OAAO;SACtB,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,0DAA0D;IAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AACzD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CAAC,WAAmB,EAAE,YAA0B;IACtF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAClD,OAAO,EAAE,WAA4B;QACrC,GAAG,EAAE,8BAAgB;QACrB,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAA;IAEF,0DAA0D;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAC5D,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA"}
|
package/dist/utils/index.js
CHANGED
|
@@ -21,4 +21,5 @@ __exportStar(require("./sortUtils"), exports);
|
|
|
21
21
|
__exportStar(require("./pathEncoder"), exports);
|
|
22
22
|
__exportStar(require("./tokens"), exports);
|
|
23
23
|
__exportStar(require("./rateFeed"), exports);
|
|
24
|
+
__exportStar(require("./tradingLimits"), exports);
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,gDAA6B;AAC7B,2CAAwB;AACxB,8CAA2B;AAC3B,gDAA6B;AAC7B,2CAAwB;AACxB,6CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,gDAA6B;AAC7B,2CAAwB;AACxB,8CAA2B;AAC3B,gDAA6B;AAC7B,2CAAwB;AACxB,6CAA0B;AAC1B,kDAA+B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { TradingLimit, TradingLimitsConfigV1, TradingLimitsStateV1, TradingLimitsConfigV2, TradingLimitsStateV2 } from '../core/types';
|
|
2
|
+
/**
|
|
3
|
+
* Compute limit ID for Broker (V1) trading limits.
|
|
4
|
+
* limitId = exchangeId XOR bytes32(uint256(uint160(token)))
|
|
5
|
+
*
|
|
6
|
+
* @param exchangeId - The exchange ID (bytes32)
|
|
7
|
+
* @param token - The token address
|
|
8
|
+
* @returns The limit ID as hex string
|
|
9
|
+
*/
|
|
10
|
+
export declare function computeLimitId(exchangeId: string, token: string): `0x${string}`;
|
|
11
|
+
/**
|
|
12
|
+
* Calculate trading limits from V1 config and state (Broker/Virtual pools).
|
|
13
|
+
* Returns human-friendly TradingLimit objects with maxIn/maxOut/until.
|
|
14
|
+
*
|
|
15
|
+
* @param config - V1 trading limits configuration
|
|
16
|
+
* @param state - V1 trading limits state
|
|
17
|
+
* @param asset - Token address
|
|
18
|
+
* @param tokenDecimals - Token decimals for consumer reference
|
|
19
|
+
* @returns Array of TradingLimit objects
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateTradingLimitsV1(config: TradingLimitsConfigV1, state: TradingLimitsStateV1, asset: string, tokenDecimals: number): TradingLimit[];
|
|
22
|
+
/**
|
|
23
|
+
* Calculate trading limits from V2 config and state (FPMM pools).
|
|
24
|
+
* V2 uses fixed timeframes: 5 min for L0, 1 day for L1.
|
|
25
|
+
* Values are stored with 15 decimals precision.
|
|
26
|
+
*
|
|
27
|
+
* @param config - V2 trading limits configuration
|
|
28
|
+
* @param state - V2 trading limits state
|
|
29
|
+
* @param asset - Token address
|
|
30
|
+
* @returns Array of TradingLimit objects
|
|
31
|
+
*/
|
|
32
|
+
export declare function calculateTradingLimitsV2(config: TradingLimitsConfigV2, state: TradingLimitsStateV2, asset: string): TradingLimit[];
|
|
33
|
+
/**
|
|
34
|
+
* Check if any trading limits are configured (flags > 0 for V1, or limit0/limit1 > 0 for V2)
|
|
35
|
+
*/
|
|
36
|
+
export declare function hasConfiguredLimitsV1(config: TradingLimitsConfigV1): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Check if any trading limits are configured for V2
|
|
39
|
+
*/
|
|
40
|
+
export declare function hasConfiguredLimitsV2(config: TradingLimitsConfigV2): boolean;
|
|
41
|
+
//# sourceMappingURL=tradingLimits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradingLimits.d.ts","sourceRoot":"","sources":["../../src/utils/tradingLimits.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,eAAe,CAAA;AActB;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAa/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,YAAY,EAAE,CAiEhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,MAAM,GACZ,YAAY,EAAE,CAmDhB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAE5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAE5E"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeLimitId = computeLimitId;
|
|
4
|
+
exports.calculateTradingLimitsV1 = calculateTradingLimitsV1;
|
|
5
|
+
exports.calculateTradingLimitsV2 = calculateTradingLimitsV2;
|
|
6
|
+
exports.hasConfiguredLimitsV1 = hasConfiguredLimitsV1;
|
|
7
|
+
exports.hasConfiguredLimitsV2 = hasConfiguredLimitsV2;
|
|
8
|
+
const viem_1 = require("viem");
|
|
9
|
+
/** V2 trading limits use 15 decimals internally */
|
|
10
|
+
const V2_INTERNAL_DECIMALS = 15;
|
|
11
|
+
/** V2 L0 window is fixed at 5 minutes */
|
|
12
|
+
const V2_L0_TIMESTEP = 5 * 60; // 300 seconds
|
|
13
|
+
/** V2 L1 window is fixed at 1 day */
|
|
14
|
+
const V2_L1_TIMESTEP = 24 * 60 * 60; // 86400 seconds
|
|
15
|
+
/** Far future timestamp for global limits (year 2030) */
|
|
16
|
+
const TIMESTAMP_FAR_FUTURE = 1893456000;
|
|
17
|
+
/**
|
|
18
|
+
* Compute limit ID for Broker (V1) trading limits.
|
|
19
|
+
* limitId = exchangeId XOR bytes32(uint256(uint160(token)))
|
|
20
|
+
*
|
|
21
|
+
* @param exchangeId - The exchange ID (bytes32)
|
|
22
|
+
* @param token - The token address
|
|
23
|
+
* @returns The limit ID as hex string
|
|
24
|
+
*/
|
|
25
|
+
function computeLimitId(exchangeId, token) {
|
|
26
|
+
// Pad token address to 32 bytes (left-padded with zeros)
|
|
27
|
+
const tokenBytes32 = (0, viem_1.pad)(token, { size: 32 });
|
|
28
|
+
// Convert both to BigInt for XOR operation
|
|
29
|
+
const exchangeIdBigInt = (0, viem_1.hexToBigInt)(exchangeId);
|
|
30
|
+
const tokenBigInt = (0, viem_1.hexToBigInt)(tokenBytes32);
|
|
31
|
+
// XOR operation
|
|
32
|
+
const limitIdBigInt = exchangeIdBigInt ^ tokenBigInt;
|
|
33
|
+
// Convert back to hex with proper padding
|
|
34
|
+
return (0, viem_1.pad)((0, viem_1.numberToHex)(limitIdBigInt), { size: 32 });
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Calculate trading limits from V1 config and state (Broker/Virtual pools).
|
|
38
|
+
* Returns human-friendly TradingLimit objects with maxIn/maxOut/until.
|
|
39
|
+
*
|
|
40
|
+
* @param config - V1 trading limits configuration
|
|
41
|
+
* @param state - V1 trading limits state
|
|
42
|
+
* @param asset - Token address
|
|
43
|
+
* @param tokenDecimals - Token decimals for consumer reference
|
|
44
|
+
* @returns Array of TradingLimit objects
|
|
45
|
+
*/
|
|
46
|
+
function calculateTradingLimitsV1(config, state, asset, tokenDecimals) {
|
|
47
|
+
const nowEpoch = Math.floor(Date.now() / 1000);
|
|
48
|
+
const limits = [];
|
|
49
|
+
// Check if L0 is enabled (bit 0 of flags)
|
|
50
|
+
const isL0Enabled = (config.flags & 0x01) !== 0;
|
|
51
|
+
// Check if L1 is enabled (bit 1 of flags)
|
|
52
|
+
const isL1Enabled = (config.flags & 0x02) !== 0;
|
|
53
|
+
// Check if LG is enabled (bit 2 of flags)
|
|
54
|
+
const isLGEnabled = (config.flags & 0x04) !== 0;
|
|
55
|
+
// Reset netflows if time windows have passed
|
|
56
|
+
const isL0Outdated = isL0Enabled && nowEpoch > state.lastUpdated0 + config.timestep0;
|
|
57
|
+
const isL1Outdated = isL1Enabled && nowEpoch > state.lastUpdated1 + config.timestep1;
|
|
58
|
+
const effectiveNetflow0 = isL0Outdated ? 0n : state.netflow0;
|
|
59
|
+
const effectiveNetflow1 = isL1Outdated ? 0n : state.netflow1;
|
|
60
|
+
const effectiveLastUpdated0 = isL0Outdated ? nowEpoch : state.lastUpdated0;
|
|
61
|
+
const effectiveLastUpdated1 = isL1Outdated ? nowEpoch : state.lastUpdated1;
|
|
62
|
+
// Add L0 limit if configured
|
|
63
|
+
if (isL0Enabled && config.limit0 > 0n) {
|
|
64
|
+
limits.push({
|
|
65
|
+
asset,
|
|
66
|
+
maxIn: config.limit0 - effectiveNetflow0,
|
|
67
|
+
maxOut: config.limit0 + effectiveNetflow0,
|
|
68
|
+
until: effectiveLastUpdated0 + config.timestep0,
|
|
69
|
+
decimals: tokenDecimals,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Add L1 limit if configured
|
|
73
|
+
if (isL1Enabled && config.limit1 > 0n) {
|
|
74
|
+
limits.push({
|
|
75
|
+
asset,
|
|
76
|
+
maxIn: config.limit1 - effectiveNetflow1,
|
|
77
|
+
maxOut: config.limit1 + effectiveNetflow1,
|
|
78
|
+
until: effectiveLastUpdated1 + config.timestep1,
|
|
79
|
+
decimals: tokenDecimals,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Add LG (global) limit if configured
|
|
83
|
+
if (isLGEnabled && config.limitGlobal > 0n) {
|
|
84
|
+
limits.push({
|
|
85
|
+
asset,
|
|
86
|
+
maxIn: config.limitGlobal - state.netflowGlobal,
|
|
87
|
+
maxOut: config.limitGlobal + state.netflowGlobal,
|
|
88
|
+
until: TIMESTAMP_FAR_FUTURE,
|
|
89
|
+
decimals: tokenDecimals,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Apply cascading restrictions: limits with larger timeframes restrict smaller ones
|
|
93
|
+
// e.g., if maxIn is 0 in LG, it should also be 0 in L1 and L0
|
|
94
|
+
for (let i = limits.length - 1; i > 0; i--) {
|
|
95
|
+
if (limits[i - 1].maxIn > limits[i].maxIn) {
|
|
96
|
+
limits[i - 1] = { ...limits[i - 1], maxIn: limits[i].maxIn };
|
|
97
|
+
}
|
|
98
|
+
if (limits[i - 1].maxOut > limits[i].maxOut) {
|
|
99
|
+
limits[i - 1] = { ...limits[i - 1], maxOut: limits[i].maxOut };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return limits;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Calculate trading limits from V2 config and state (FPMM pools).
|
|
106
|
+
* V2 uses fixed timeframes: 5 min for L0, 1 day for L1.
|
|
107
|
+
* Values are stored with 15 decimals precision.
|
|
108
|
+
*
|
|
109
|
+
* @param config - V2 trading limits configuration
|
|
110
|
+
* @param state - V2 trading limits state
|
|
111
|
+
* @param asset - Token address
|
|
112
|
+
* @returns Array of TradingLimit objects
|
|
113
|
+
*/
|
|
114
|
+
function calculateTradingLimitsV2(config, state, asset) {
|
|
115
|
+
const nowEpoch = Math.floor(Date.now() / 1000);
|
|
116
|
+
const limits = [];
|
|
117
|
+
// Check if L0 is configured (limit0 > 0)
|
|
118
|
+
const isL0Enabled = config.limit0 > 0n;
|
|
119
|
+
// Check if L1 is configured (limit1 > 0)
|
|
120
|
+
const isL1Enabled = config.limit1 > 0n;
|
|
121
|
+
// Reset netflows if time windows have passed
|
|
122
|
+
const isL0Outdated = isL0Enabled && nowEpoch > state.lastUpdated0 + V2_L0_TIMESTEP;
|
|
123
|
+
const isL1Outdated = isL1Enabled && nowEpoch > state.lastUpdated1 + V2_L1_TIMESTEP;
|
|
124
|
+
const effectiveNetflow0 = isL0Outdated ? 0n : state.netflow0;
|
|
125
|
+
const effectiveNetflow1 = isL1Outdated ? 0n : state.netflow1;
|
|
126
|
+
const effectiveLastUpdated0 = isL0Outdated ? nowEpoch : state.lastUpdated0;
|
|
127
|
+
const effectiveLastUpdated1 = isL1Outdated ? nowEpoch : state.lastUpdated1;
|
|
128
|
+
// Add L0 limit if configured
|
|
129
|
+
if (isL0Enabled) {
|
|
130
|
+
limits.push({
|
|
131
|
+
asset,
|
|
132
|
+
maxIn: config.limit0 - effectiveNetflow0,
|
|
133
|
+
maxOut: config.limit0 + effectiveNetflow0,
|
|
134
|
+
until: effectiveLastUpdated0 + V2_L0_TIMESTEP,
|
|
135
|
+
decimals: V2_INTERNAL_DECIMALS, // V2 returns 15 decimal values
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Add L1 limit if configured
|
|
139
|
+
if (isL1Enabled) {
|
|
140
|
+
limits.push({
|
|
141
|
+
asset,
|
|
142
|
+
maxIn: config.limit1 - effectiveNetflow1,
|
|
143
|
+
maxOut: config.limit1 + effectiveNetflow1,
|
|
144
|
+
until: effectiveLastUpdated1 + V2_L1_TIMESTEP,
|
|
145
|
+
decimals: V2_INTERNAL_DECIMALS, // V2 returns 15 decimal values
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Apply cascading restrictions
|
|
149
|
+
for (let i = limits.length - 1; i > 0; i--) {
|
|
150
|
+
if (limits[i - 1].maxIn > limits[i].maxIn) {
|
|
151
|
+
limits[i - 1] = { ...limits[i - 1], maxIn: limits[i].maxIn };
|
|
152
|
+
}
|
|
153
|
+
if (limits[i - 1].maxOut > limits[i].maxOut) {
|
|
154
|
+
limits[i - 1] = { ...limits[i - 1], maxOut: limits[i].maxOut };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return limits;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if any trading limits are configured (flags > 0 for V1, or limit0/limit1 > 0 for V2)
|
|
161
|
+
*/
|
|
162
|
+
function hasConfiguredLimitsV1(config) {
|
|
163
|
+
return config.flags > 0;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if any trading limits are configured for V2
|
|
167
|
+
*/
|
|
168
|
+
function hasConfiguredLimitsV2(config) {
|
|
169
|
+
return config.limit0 > 0n || config.limit1 > 0n;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=tradingLimits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradingLimits.js","sourceRoot":"","sources":["../../src/utils/tradingLimits.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/core/types/provider.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/core/types/provider.ts"],"names":[],"mappings":";AAAA,kEAAkE"}
|