@mento-protocol/mento-sdk 3.0.0-beta.1 → 3.0.0-beta.10

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.
Files changed (158) hide show
  1. package/README.md +34 -0
  2. package/dist/cache/routes.d.ts +13 -0
  3. package/dist/cache/routes.d.ts.map +1 -0
  4. package/dist/cache/routes.js +130 -0
  5. package/dist/cache/routes.js.map +1 -0
  6. package/dist/cache/tokens.d.ts +67 -0
  7. package/dist/cache/tokens.d.ts.map +1 -0
  8. package/dist/cache/tokens.js +379 -0
  9. package/dist/cache/tokens.js.map +1 -0
  10. package/dist/core/abis/breakerbox.d.ts +13 -0
  11. package/dist/core/abis/breakerbox.d.ts.map +1 -0
  12. package/dist/core/abis/breakerbox.js +8 -0
  13. package/dist/core/abis/breakerbox.js.map +1 -0
  14. package/dist/core/abis/erc20.d.ts +7 -0
  15. package/dist/core/abis/erc20.d.ts.map +1 -1
  16. package/dist/core/abis/erc20.js +7 -0
  17. package/dist/core/abis/erc20.js.map +1 -1
  18. package/dist/core/abis/fpmm.d.ts +126 -0
  19. package/dist/core/abis/fpmm.d.ts.map +1 -1
  20. package/dist/core/abis/fpmm.js +10 -0
  21. package/dist/core/abis/fpmm.js.map +1 -1
  22. package/dist/core/abis/index.d.ts +2 -0
  23. package/dist/core/abis/index.d.ts.map +1 -1
  24. package/dist/core/abis/index.js +2 -0
  25. package/dist/core/abis/index.js.map +1 -1
  26. package/dist/core/abis/virtualPool.d.ts +30 -0
  27. package/dist/core/abis/virtualPool.d.ts.map +1 -1
  28. package/dist/core/abis/virtualPool.js +5 -1
  29. package/dist/core/abis/virtualPool.js.map +1 -1
  30. package/dist/core/constants/aaveConfig.js +2 -2
  31. package/dist/core/constants/addresses.d.ts.map +1 -1
  32. package/dist/core/constants/addresses.js +9 -4
  33. package/dist/core/constants/addresses.js.map +1 -1
  34. package/dist/core/types/contractAddresses.d.ts +2 -0
  35. package/dist/core/types/contractAddresses.d.ts.map +1 -1
  36. package/dist/core/types/index.d.ts +3 -1
  37. package/dist/core/types/index.d.ts.map +1 -1
  38. package/dist/core/types/index.js +3 -1
  39. package/dist/core/types/index.js.map +1 -1
  40. package/dist/core/types/pool.d.ts +110 -0
  41. package/dist/core/types/pool.d.ts.map +1 -1
  42. package/dist/core/types/provider.d.ts.map +1 -1
  43. package/dist/core/types/provider.js +0 -1
  44. package/dist/core/types/provider.js.map +1 -1
  45. package/dist/core/types/route.d.ts +3 -3
  46. package/dist/core/types/route.d.ts.map +1 -1
  47. package/dist/core/types/token.d.ts +13 -3
  48. package/dist/core/types/token.d.ts.map +1 -1
  49. package/dist/core/types/tradingLimits.d.ts +91 -0
  50. package/dist/core/types/tradingLimits.d.ts.map +1 -0
  51. package/dist/core/types/tradingLimits.js +3 -0
  52. package/dist/core/types/tradingLimits.js.map +1 -0
  53. package/dist/core/types/tradingMode.d.ts +24 -0
  54. package/dist/core/types/tradingMode.d.ts.map +1 -0
  55. package/dist/core/types/tradingMode.js +31 -0
  56. package/dist/core/types/tradingMode.js.map +1 -0
  57. package/dist/core/types/transaction.d.ts +45 -0
  58. package/dist/core/types/transaction.d.ts.map +1 -0
  59. package/dist/core/types/transaction.js +3 -0
  60. package/dist/core/types/transaction.js.map +1 -0
  61. package/dist/index.d.ts +20 -8
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +23 -10
  64. package/dist/index.js.map +1 -1
  65. package/dist/services/index.d.ts +1 -0
  66. package/dist/services/index.d.ts.map +1 -1
  67. package/dist/services/index.js +1 -0
  68. package/dist/services/index.js.map +1 -1
  69. package/dist/services/pools/PoolService.d.ts +22 -10
  70. package/dist/services/pools/PoolService.d.ts.map +1 -1
  71. package/dist/services/pools/PoolService.js +44 -110
  72. package/dist/services/pools/PoolService.js.map +1 -1
  73. package/dist/services/pools/poolDetails.d.ts +11 -0
  74. package/dist/services/pools/poolDetails.d.ts.map +1 -0
  75. package/dist/services/pools/poolDetails.js +136 -0
  76. package/dist/services/pools/poolDetails.js.map +1 -0
  77. package/dist/services/pools/poolDiscovery.d.ts +13 -0
  78. package/dist/services/pools/poolDiscovery.d.ts.map +1 -0
  79. package/dist/services/pools/poolDiscovery.js +115 -0
  80. package/dist/services/pools/poolDiscovery.js.map +1 -0
  81. package/dist/services/quotes/QuoteService.d.ts +21 -12
  82. package/dist/services/quotes/QuoteService.d.ts.map +1 -1
  83. package/dist/services/quotes/QuoteService.js +23 -10
  84. package/dist/services/quotes/QuoteService.js.map +1 -1
  85. package/dist/services/routes/RouteService.d.ts +3 -3
  86. package/dist/services/routes/RouteService.d.ts.map +1 -1
  87. package/dist/services/routes/RouteService.js +3 -5
  88. package/dist/services/routes/RouteService.js.map +1 -1
  89. package/dist/services/swap/SwapService.d.ts +18 -14
  90. package/dist/services/swap/SwapService.d.ts.map +1 -1
  91. package/dist/services/swap/SwapService.js +31 -11
  92. package/dist/services/swap/SwapService.js.map +1 -1
  93. package/dist/services/tokens/supplyAdjustmentService.d.ts +0 -4
  94. package/dist/services/tokens/supplyAdjustmentService.d.ts.map +1 -1
  95. package/dist/services/tokens/supplyAdjustmentService.js +3 -8
  96. package/dist/services/tokens/supplyAdjustmentService.js.map +1 -1
  97. package/dist/services/tokens/tokenService.d.ts.map +1 -1
  98. package/dist/services/tokens/tokenService.js +2 -2
  99. package/dist/services/tokens/tokenService.js.map +1 -1
  100. package/dist/services/trading/TradingLimitsService.d.ts +38 -0
  101. package/dist/services/trading/TradingLimitsService.d.ts.map +1 -0
  102. package/dist/services/trading/TradingLimitsService.js +157 -0
  103. package/dist/services/trading/TradingLimitsService.js.map +1 -0
  104. package/dist/services/trading/TradingService.d.ts +110 -0
  105. package/dist/services/trading/TradingService.d.ts.map +1 -0
  106. package/dist/services/trading/TradingService.js +162 -0
  107. package/dist/services/trading/TradingService.js.map +1 -0
  108. package/dist/services/trading/index.d.ts +3 -0
  109. package/dist/services/trading/index.d.ts.map +1 -0
  110. package/dist/services/trading/index.js +19 -0
  111. package/dist/services/trading/index.js.map +1 -0
  112. package/dist/utils/costUtils.js +4 -4
  113. package/dist/utils/costUtils.js.map +1 -1
  114. package/dist/utils/index.d.ts +3 -0
  115. package/dist/utils/index.d.ts.map +1 -1
  116. package/dist/utils/index.js +3 -0
  117. package/dist/utils/index.js.map +1 -1
  118. package/dist/utils/pathEncoder.d.ts +3 -2
  119. package/dist/utils/pathEncoder.d.ts.map +1 -1
  120. package/dist/utils/pathEncoder.js +19 -3
  121. package/dist/utils/pathEncoder.js.map +1 -1
  122. package/dist/utils/rateFeed.d.ts +18 -0
  123. package/dist/utils/rateFeed.d.ts.map +1 -0
  124. package/dist/utils/rateFeed.js +27 -0
  125. package/dist/utils/rateFeed.js.map +1 -0
  126. package/dist/utils/routeUtils.d.ts +53 -53
  127. package/dist/utils/routeUtils.d.ts.map +1 -1
  128. package/dist/utils/routeUtils.js +41 -41
  129. package/dist/utils/routeUtils.js.map +1 -1
  130. package/dist/utils/routes.d.ts +2 -8
  131. package/dist/utils/routes.d.ts.map +1 -1
  132. package/dist/utils/routes.js +5 -46
  133. package/dist/utils/routes.js.map +1 -1
  134. package/dist/utils/tokens.d.ts +1 -77
  135. package/dist/utils/tokens.d.ts.map +1 -1
  136. package/dist/utils/tokens.js +10 -178
  137. package/dist/utils/tokens.js.map +1 -1
  138. package/dist/utils/tradingLimits.d.ts +41 -0
  139. package/dist/utils/tradingLimits.d.ts.map +1 -0
  140. package/dist/utils/tradingLimits.js +171 -0
  141. package/dist/utils/tradingLimits.js.map +1 -0
  142. package/dist/utils/validation.d.ts +19 -0
  143. package/dist/utils/validation.d.ts.map +1 -0
  144. package/dist/utils/validation.js +34 -0
  145. package/dist/utils/validation.js.map +1 -0
  146. package/package.json +1 -1
  147. package/dist/cache/routes.42220.d.ts +0 -3
  148. package/dist/cache/routes.42220.d.ts.map +0 -1
  149. package/dist/cache/routes.42220.js +0 -112
  150. package/dist/cache/routes.42220.js.map +0 -1
  151. package/dist/cache/tokens.11142220.d.ts +0 -3
  152. package/dist/cache/tokens.11142220.d.ts.map +0 -1
  153. package/dist/cache/tokens.11142220.js +0 -129
  154. package/dist/cache/tokens.11142220.js.map +0 -1
  155. package/dist/cache/tokens.42220.d.ts +0 -3
  156. package/dist/cache/tokens.42220.d.ts.map +0 -1
  157. package/dist/cache/tokens.42220.js +0 -129
  158. package/dist/cache/tokens.42220.js.map +0 -1
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TradingService = void 0;
4
+ const types_1 = require("../../core/types");
5
+ const TradingLimitsService_1 = require("./TradingLimitsService");
6
+ const abis_1 = require("../../core/abis");
7
+ const constants_1 = require("../../core/constants");
8
+ /**
9
+ * Service for checking trading status and circuit breaker state in the Mento protocol.
10
+ * Provides methods to query whether trading is enabled for specific rate feeds,
11
+ * token pairs, or routes. Also integrates trading limit checks.
12
+ */
13
+ class TradingService {
14
+ constructor(publicClient, chainId, routeService) {
15
+ this.publicClient = publicClient;
16
+ this.chainId = chainId;
17
+ this.routeService = routeService;
18
+ this.tradingLimitsService = new TradingLimitsService_1.TradingLimitsService(publicClient, chainId);
19
+ }
20
+ /**
21
+ * Returns the current trading mode for a given rate feed.
22
+ *
23
+ * The BreakerBox uses a bitmask approach where 0 means bidirectional trading
24
+ * is enabled, and any non-zero value means trading is suspended.
25
+ *
26
+ * @param rateFeedId - The address of the rate feed
27
+ * @returns The raw trading mode value from BreakerBox (0 = enabled, non-zero = suspended)
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const mode = await tradingService.getRateFeedTradingMode(rateFeedId)
32
+ * if (mode === TradingMode.BIDIRECTIONAL) {
33
+ * console.log('Trading is enabled')
34
+ * }
35
+ * ```
36
+ */
37
+ async getRateFeedTradingMode(rateFeedId) {
38
+ const breakerBoxAddr = (0, constants_1.getContractAddress)(this.chainId, 'BreakerBox');
39
+ const mode = await this.publicClient.readContract({
40
+ address: breakerBoxAddr,
41
+ abi: abis_1.BREAKERBOX_ABI,
42
+ functionName: 'getRateFeedTradingMode',
43
+ args: [rateFeedId],
44
+ });
45
+ return Number(mode);
46
+ }
47
+ /**
48
+ * Checks if a trading pair is currently tradable.
49
+ * For multi-hop routes (e.g., CELO → USDm → USDT), checks that ALL
50
+ * intermediate rate feeds are in BIDIRECTIONAL mode.
51
+ *
52
+ * @param tokenIn - Input token address
53
+ * @param tokenOut - Output token address
54
+ * @returns true if the pair is tradable (all rate feeds BIDIRECTIONAL), false otherwise
55
+ * @throws {RouteNotFoundError} If no route exists between the token pair
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const isTradable = await tradingService.isPairTradable(USDm, CELO)
60
+ * if (!isTradable) {
61
+ * console.log('Trading is currently suspended for this pair')
62
+ * }
63
+ * ```
64
+ */
65
+ async isPairTradable(tokenIn, tokenOut) {
66
+ const route = await this.routeService.findRoute(tokenIn, tokenOut);
67
+ return this.isRouteTradable(route);
68
+ }
69
+ /**
70
+ * Checks if a route is currently tradable.
71
+ * Verifies that all pools in the route's path have their rate feeds
72
+ * in BIDIRECTIONAL mode.
73
+ *
74
+ * @param route - The route to check
75
+ * @returns true if all pools in the route are tradable, false otherwise
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const route = await routeService.findRoute(tokenIn, tokenOut)
80
+ * const isRouteTradable = await tradingService.isRouteTradable(route)
81
+ * ```
82
+ */
83
+ async isRouteTradable(route) {
84
+ // Get rate feed IDs for each pool in the path and check trading modes
85
+ const rateFeedChecks = await Promise.all(route.path.map(async (pool) => {
86
+ const rateFeedId = await this.getPoolRateFeedId(pool);
87
+ const tradingMode = await this.getRateFeedTradingMode(rateFeedId);
88
+ return (0, types_1.isTradingEnabled)(tradingMode);
89
+ }));
90
+ // All rate feeds must have trading enabled for the route to be tradable
91
+ return rateFeedChecks.every((isEnabled) => isEnabled);
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
+ }
145
+ /**
146
+ * Get the reference rate feed ID for a pool.
147
+ * Both FPMM and Virtual pools expose this via the referenceRateFeedID() view function.
148
+ *
149
+ * @param pool - The pool to get rate feed ID for
150
+ * @returns The rate feed ID address
151
+ */
152
+ async getPoolRateFeedId(pool) {
153
+ const rateFeedId = await this.publicClient.readContract({
154
+ address: pool.poolAddr,
155
+ abi: abis_1.FPMM_ABI,
156
+ functionName: 'referenceRateFeedID',
157
+ });
158
+ return rateFeedId;
159
+ }
160
+ }
161
+ exports.TradingService = TradingService;
162
+ //# sourceMappingURL=TradingService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './TradingService';
2
+ export * from './TradingLimitsService';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./TradingService"), exports);
18
+ __exportStar(require("./TradingLimitsService"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,yDAAsC"}
@@ -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 8dp for precision
44
44
  const totalBasisPoints = Number(lpFee) + Number(protocolFee);
45
- return totalBasisPoints / 100;
45
+ return Math.round((totalBasisPoints / 100) * 1e8) / 1e8;
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
- //TODO: Confirim calculation
57
- return Number(protocolFee) / 100;
56
+ // Convert from basis points to percentage, rounded to 8dp for precision
57
+ return Math.round((Number(protocolFee) / 100) * 1e8) / 1e8;
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,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC5D,OAAO,gBAAgB,GAAG,GAAG,CAAA;AAC/B,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,4BAA4B;IAC5B,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;AAClC,CAAC"}
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,wEAAwE;IACxE,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,wEAAwE;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAC5D,CAAC"}
@@ -3,4 +3,7 @@ export * from './chainConfig';
3
3
  export * from './routes';
4
4
  export * from './sortUtils';
5
5
  export * from './pathEncoder';
6
+ export * from './tokens';
7
+ export * from './rateFeed';
8
+ export * from './tradingLimits';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
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"}
@@ -19,4 +19,7 @@ __exportStar(require("./chainConfig"), exports);
19
19
  __exportStar(require("./routes"), exports);
20
20
  __exportStar(require("./sortUtils"), exports);
21
21
  __exportStar(require("./pathEncoder"), exports);
22
+ __exportStar(require("./tokens"), exports);
23
+ __exportStar(require("./rateFeed"), exports);
24
+ __exportStar(require("./tradingLimits"), exports);
22
25
  //# sourceMappingURL=index.js.map
@@ -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"}
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"}
@@ -16,11 +16,12 @@ export interface RouterRoute {
16
16
  * @param tokenIn - The input token address (determines swap direction)
17
17
  * @param _tokenOut - The output token address (unused but kept for API clarity)
18
18
  * @returns Array of RouterRoute objects for the contract call
19
+ * @throws {Error} If path is empty, too long, or contains invalid pools
19
20
  *
20
21
  * @example
21
22
  * ```typescript
22
- * const route = await routeService.findRoute(cUSD, CELO)
23
- * const routerRoutes = encodeRoutePath(route.path, cUSD, CELO)
23
+ * const route = await routeService.findRoute(USDm, CELO)
24
+ * const routerRoutes = encodeRoutePath(route.path, USDm, CELO)
24
25
  * // routerRoutes can now be passed to Router.getAmountsOut or Router.swapTokensForTokens
25
26
  * ```
26
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pathEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CA4CjG"}
1
+ {"version":3,"file":"pathEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CAmEjG"}
@@ -9,15 +9,29 @@ exports.encodeRoutePath = encodeRoutePath;
9
9
  * @param tokenIn - The input token address (determines swap direction)
10
10
  * @param _tokenOut - The output token address (unused but kept for API clarity)
11
11
  * @returns Array of RouterRoute objects for the contract call
12
+ * @throws {Error} If path is empty, too long, or contains invalid pools
12
13
  *
13
14
  * @example
14
15
  * ```typescript
15
- * const route = await routeService.findRoute(cUSD, CELO)
16
- * const routerRoutes = encodeRoutePath(route.path, cUSD, CELO)
16
+ * const route = await routeService.findRoute(USDm, CELO)
17
+ * const routerRoutes = encodeRoutePath(route.path, USDm, CELO)
17
18
  * // routerRoutes can now be passed to Router.getAmountsOut or Router.swapTokensForTokens
18
19
  * ```
19
20
  */
20
21
  function encodeRoutePath(path, tokenIn, _tokenOut) {
22
+ // Validate path is not empty
23
+ if (!path || path.length === 0) {
24
+ throw new Error('Internal error: Route path is empty. This should not happen - routes are validated before encoding.');
25
+ }
26
+ // Validate all pools have required structure
27
+ for (let i = 0; i < path.length; i++) {
28
+ const pool = path[i];
29
+ if (!pool.token0 || !pool.token1 || !pool.factoryAddr) {
30
+ throw new Error(`Invalid pool structure at index ${i}: missing required fields. ` +
31
+ `Pool must have token0, token1, and factoryAddr. ` +
32
+ `Got: ${JSON.stringify(pool)}`);
33
+ }
34
+ }
21
35
  const routes = [];
22
36
  const tokenInLower = tokenIn.toLowerCase();
23
37
  // Check if we need to reverse the path
@@ -42,7 +56,9 @@ function encodeRoutePath(path, tokenIn, _tokenOut) {
42
56
  to = pool.token0;
43
57
  }
44
58
  else {
45
- throw new Error(`Token ${currentTokenIn} not found in pool ${pool.poolAddr}`);
59
+ throw new Error(`Route encoding error: Token ${currentTokenIn} not found in pool ${pool.poolAddr}. ` +
60
+ `Pool contains tokens: ${token0}, ${token1}. ` +
61
+ `This indicates the route path is invalid or tokens don't form a connected path.`);
46
62
  }
47
63
  routes.push({
48
64
  from,
@@ -1 +1 @@
1
- {"version":3,"file":"pathEncoder.js","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":";;AA4BA,0CA4CC;AA5DD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,OAAgB,EAAE,SAAkB;IAChF,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAE1C,uCAAuC;IACvC,kFAAkF;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,iBAAiB,GACrB,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,CAAA;IAEpG,uDAAuD;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAElE,IAAI,cAAc,GAAG,YAAY,CAAA;IAEjC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAExC,8DAA8D;QAC9D,IAAI,IAAa,CAAA;QACjB,IAAI,EAAW,CAAA;QAEf,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,SAAS,cAAc,sBAAsB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,WAAsB;SACrC,CAAC,CAAA;QAEF,2DAA2D;QAC3D,cAAc,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"pathEncoder.js","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":";;AA6BA,0CAmEC;AApFD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,OAAgB,EAAE,SAAkB;IAChF,6BAA6B;IAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAA;IACH,CAAC;IAED,6CAA6C;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,mCAAmC,CAAC,6BAA6B;gBACjE,kDAAkD;gBAClD,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/B,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAE1C,uCAAuC;IACvC,kFAAkF;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,iBAAiB,GACrB,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,CAAA;IAEpG,uDAAuD;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAElE,IAAI,cAAc,GAAG,YAAY,CAAA;IAEjC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAExC,8DAA8D;QAC9D,IAAI,IAAa,CAAA;QACjB,IAAI,EAAW,CAAA;QAEf,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,+BAA+B,cAAc,sBAAsB,IAAI,CAAC,QAAQ,IAAI;gBACpF,yBAAyB,MAAM,KAAK,MAAM,IAAI;gBAC9C,iFAAiF,CAClF,CAAA;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,WAAsB;SACrC,CAAC,CAAA;QAEF,2DAA2D;QAC3D,cAAc,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Computes the rate feed ID from a rate feed identifier string.
3
+ * Follows the Solidity formula: address(uint160(uint256(keccak256(abi.encodePacked(rateFeed)))))
4
+ *
5
+ * @param rateFeed - The rate feed identifier string (e.g., "EURUSD", "relayed:COPUSD")
6
+ * @returns The computed rate feed address as a hex string
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const rateFeedId = toRateFeedId('EURUSD')
11
+ * // Returns the computed address for the EURUSD rate feed
12
+ *
13
+ * const relayedRateFeedId = toRateFeedId('relayed:COPUSD')
14
+ * // Returns the computed address for the relayed COPUSD rate feed
15
+ * ```
16
+ */
17
+ export declare function toRateFeedId(rateFeed: string): `0x${string}`;
18
+ //# sourceMappingURL=rateFeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateFeed.d.ts","sourceRoot":"","sources":["../../src/utils/rateFeed.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAM5D"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toRateFeedId = toRateFeedId;
4
+ const viem_1 = require("viem");
5
+ /**
6
+ * Computes the rate feed ID from a rate feed identifier string.
7
+ * Follows the Solidity formula: address(uint160(uint256(keccak256(abi.encodePacked(rateFeed)))))
8
+ *
9
+ * @param rateFeed - The rate feed identifier string (e.g., "EURUSD", "relayed:COPUSD")
10
+ * @returns The computed rate feed address as a hex string
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const rateFeedId = toRateFeedId('EURUSD')
15
+ * // Returns the computed address for the EURUSD rate feed
16
+ *
17
+ * const relayedRateFeedId = toRateFeedId('relayed:COPUSD')
18
+ * // Returns the computed address for the relayed COPUSD rate feed
19
+ * ```
20
+ */
21
+ function toRateFeedId(rateFeed) {
22
+ const hashedBytes = (0, viem_1.keccak256)((0, viem_1.toBytes)(rateFeed));
23
+ const hashAsBigInt = BigInt(hashedBytes);
24
+ const maskedToUint160 = hashAsBigInt & ((1n << 160n) - 1n);
25
+ return `0x${maskedToUint160.toString(16).padStart(40, '0')}`;
26
+ }
27
+ //# sourceMappingURL=rateFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateFeed.js","sourceRoot":"","sources":["../../src/utils/rateFeed.ts"],"names":[],"mappings":";;AAkBA,oCAMC;AAxBD,+BAAyC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,YAAY,CAAC,QAAgB;IAC3C,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,YAAY,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAE1D,OAAO,KAAK,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAA;AAC9D,CAAC"}
@@ -27,15 +27,15 @@ type Address = string;
27
27
  *
28
28
  * CONCRETE EXAMPLE:
29
29
  * Given these direct trading pairs:
30
- * - cUSD ↔ CELO (direct exchange exists)
31
- * - CELO ↔ cEUR (direct exchange exists)
32
- * - cUSDcREAL (direct exchange exists)
30
+ * - USDm ↔ CELO (direct exchange exists)
31
+ * - CELO ↔ EURm (direct exchange exists)
32
+ * - USDmBRLm (direct exchange exists)
33
33
  *
34
34
  * How route finding works:
35
- * - Direct route: cUSDcEUR? Check token graph: cUSD connects to [CELO, cREAL], none is cEUR → No direct route
36
- * - Two-hop route: cUSD → ? → cEUR?
37
- * - cUSD connects to CELO, CELO connects to cEUR → Found route: cUSD → CELO → cEUR
38
- * - cUSD connects to cREAL, cREAL connects to [cUSD] → No route via cREAL
35
+ * - Direct route: USDmEURm? Check token graph: USDm connects to [CELO, BRLm], none is EURm → No direct route
36
+ * - Two-hop route: USDm → ? → EURm?
37
+ * - USDm connects to CELO, CELO connects to EURm → Found route: USDm → CELO → EURm
38
+ * - USDm connects to BRLm, BRLm connects to [USDm] → No route via BRLm
39
39
  *
40
40
  * The "connectivity" part means we can quickly traverse the network of
41
41
  * token connections to find all possible trading paths.
@@ -44,31 +44,31 @@ export interface ConnectivityData {
44
44
  /** Maps token address to symbol for efficient lookups
45
45
  *
46
46
  * ```
47
- * '0x765D...' → 'cUSD'
47
+ * '0x765D...' → 'USDm'
48
48
  * '0x471E...' → 'CELO'
49
- * '0xD876...' → 'cEUR'
49
+ * '0xD876...' → 'EURm'
50
50
  * ```
51
51
  */
52
52
  addrToSymbol: Map<Address, TokenSymbol>;
53
53
  /** Adjacency list mapping which tokens connect to which
54
54
  * Used for finding two-hop routes by traversing token → neighbor → neighbor.
55
55
  *
56
- * Example for a cUSD => cEUR swap: First we find cUSD → [CELO, cKES, ...]
57
- * Then we find CELO → [cUSD, cEUR, ...] = found route via cUSD → CELO → cEUR
56
+ * Example for a USDm => EURm swap: First we find USDm → [CELO, KESm, ...]
57
+ * Then we find CELO → [USDm, EURm, ...] = found route via USDm → CELO → EURm
58
58
  *
59
59
  * ```
60
- * 'cUSD_addr' → Set(['CELO_addr', 'cKES_addr']) // cUSD connects to CELO and cKES
61
- * 'CELO_addr' → Set(['cUSD_addr', 'cEUR_addr']) // CELO connects to cUSD and cEUR
62
- * 'cEUR_addr' → Set(['CELO_addr']) // cEUR connects to CELO
63
- * 'cKES_addr' → Set(['cUSD_addr']) // cKES connects to cUSD
60
+ * 'USDm_addr' → Set(['CELO_addr', 'KESm_addr']) // USDm connects to CELO and KESm
61
+ * 'CELO_addr' → Set(['USDm_addr', 'EURm_addr']) // CELO connects to USDm and EURm
62
+ * 'EURm_addr' → Set(['CELO_addr']) // EURm connects to CELO
63
+ * 'KESm_addr' → Set(['USDm_addr']) // KESm connects to USDm
64
64
  * ```
65
65
  */
66
66
  tokenGraph: Map<Address, Set<Address>>;
67
67
  /** Maps sorted token address pairs to their direct route details
68
68
  * ```
69
- * 'CELO_addr-cEUR_addr' → { route details for CELO ↔ cEUR }
70
- * 'CELO_addr-cUSD_addr' → { route details for CELO ↔ cUSD }
71
- * 'cUSD_addr-cKES_addr' → { route details for cUSDcKES }
69
+ * 'CELO_addr-EURm_addr' → { route details for CELO ↔ EURm }
70
+ * 'CELO_addr-USDm_addr' → { route details for CELO ↔ USDm }
71
+ * 'USDm_addr-KESm_addr' → { route details for USDmKESm }
72
72
  * ```
73
73
  */
74
74
  directRouteMap: Map<RouteID, Pool>;
@@ -85,23 +85,23 @@ export interface ConnectivityData {
85
85
  *
86
86
  * ```
87
87
  * Input: TradablePairs = [
88
- * { id: 'cUSD-CELO', assets: [cUSD, CELO], path: [exchange1_CELO_cUSD] },
89
- * { id: 'CELO-cEUR', assets: [CELO, cEUR], path: [exchange2_CELO_cEUR] }
88
+ * { id: 'USDm-CELO', assets: [USDm, CELO], path: [exchange1_CELO_USDm] },
89
+ * { id: 'CELO-EURm', assets: [CELO, EURm], path: [exchange2_CELO_EURm] }
90
90
  * ]
91
91
  *
92
92
  * Step 1 - Build addrToSymbol map:
93
- * cUSD.address → 'cUSD'
93
+ * USDm.address → 'USDm'
94
94
  * CELO.address → 'CELO'
95
- * cEUR.address → 'cEUR'
95
+ * EURm.address → 'EURm'
96
96
  *
97
97
  * Step 2 - Build directPathMap (sorted alphabetically for consistency):
98
- * 'CELO_addr-cEUR_addr' → exchange2_CELO_cEUR
99
- * 'CELO_addr-cUSD_addr' → exchange1_CELO_cUSD
98
+ * 'CELO_addr-EURm_addr' → exchange2_CELO_EURm
99
+ * 'CELO_addr-USDm_addr' → exchange1_CELO_USDm
100
100
  *
101
101
  * Step 3 - Build bidirectional tokenGraph:
102
- * cUSD.address → Set([CELO.address])
103
- * CELO.address → Set([cUSD.address, cEUR.address])
104
- * cEUR.address → Set([CELO.address])
102
+ * USDm.address → Set([CELO.address])
103
+ * CELO.address → Set([USDm.address, EURm.address])
104
+ * EURm.address → Set([CELO.address])
105
105
  * ```
106
106
  *
107
107
  * **Result**: We can now efficiently answer:
@@ -115,17 +115,17 @@ export interface ConnectivityData {
115
115
  * @example
116
116
  * ```typescript
117
117
  * const directPairs = [
118
- * { id: 'cUSD-CELO', assets: [cUSD, CELO], path: [exchange1] },
119
- * { id: 'CELO-cEUR', assets: [CELO, cEUR], path: [exchange2] }
118
+ * { id: 'USDm-CELO', assets: [USDm, CELO], path: [exchange1] },
119
+ * { id: 'CELO-EURm', assets: [CELO, EURm], path: [exchange2] }
120
120
  * ]
121
121
  *
122
122
  * const connectivityData = buildConnectivityStructures(directPairs)
123
123
  *
124
124
  * // Now we can efficiently find routes:
125
- * // 1. Check if cUSD connects to anything: connectivityData.tokenGraph.get(cUSD.address) → [CELO.address]
126
- * // 2. Check if CELO connects to cEUR: connectivityData.tokenGraph.get(CELO.address) → [cUSD.address, cEUR.address] ✓
127
- * // 3. Get exchange details: connectivityData.directPathMap.get('CELO_addr-cEUR_addr') → exchange2_CELO_cEUR
128
- * // Result: Found route cUSD → CELO → cEUR with exchange details
125
+ * // 1. Check if USDm connects to anything: connectivityData.tokenGraph.get(USDm.address) → [CELO.address]
126
+ * // 2. Check if CELO connects to EURm: connectivityData.tokenGraph.get(CELO.address) → [USDm.address, EURm.address] ✓
127
+ * // 3. Get exchange details: connectivityData.directPathMap.get('CELO_addr-EURm_addr') → exchange2_CELO_EURm
128
+ * // Result: Found route USDm → CELO → EURm with exchange details
129
129
  * ```
130
130
  */
131
131
  export declare function buildConnectivityStructures(directRoutes: Route[]): ConnectivityData;
@@ -145,21 +145,21 @@ export declare function buildConnectivityStructures(directRoutes: Route[]): Conn
145
145
  * the best one based on cost data or heuristics.
146
146
  *
147
147
  * **Canonical Route IDs**: All routes use alphabetically sorted symbols
148
- * (e.g., 'cEUR-cUSD' not 'cUSD-cEUR') for consistent identification.
148
+ * (e.g., 'EURm-USDm' not 'USDm-EURm') for consistent identification.
149
149
  *
150
150
  * @param connectivityData - The connectivity data from buildConnectivityStructures()
151
151
  * @returns Map of route ID -> array of possible routes for that token pair
152
152
  *
153
153
  * @example
154
154
  * ```typescript
155
- * // Given direct routes: cUSD-CELO, CELO-cEUR, cUSD-USDC
155
+ * // Given direct routes: USDm-CELO, CELO-EURm, USDm-USDC
156
156
  * const allRoutes = generateAllRoutes(connectivityData)
157
157
  *
158
158
  * // Results might include:
159
- * // 'cUSD-CELO' -> [{ path: [cUSD->CELO] }] // direct route
160
- * // 'cEUR-cUSD' -> [
161
- * // { path: [cUSD->USDC, USDC->cEUR] } // two-hop via USDC
162
- * // { path: [cUSD->CELO, CELO->cEUR] } // two-hop via CELO
159
+ * // 'USDm-CELO' -> [{ path: [USDm->CELO] }] // direct route
160
+ * // 'EURm-USDm' -> [
161
+ * // { path: [USDm->USDC, USDC->EURm] } // two-hop via USDC
162
+ * // { path: [USDm->CELO, CELO->EURm] } // two-hop via CELO
163
163
  * // ]
164
164
  * ```
165
165
  */
@@ -187,22 +187,22 @@ export declare function generateAllRoutes(connectivityData: ConnectivityData): M
187
187
  *
188
188
  * @example
189
189
  * ```typescript
190
- * // Create route: cUSD -> CELO -> cEUR
190
+ * // Create route: USDm -> CELO -> EURm
191
191
  * const pair = createTwoHopPair(
192
- * '0x765D...', // cUSD address
192
+ * '0x765D...', // USDm address
193
193
  * '0x471E...', // CELO address
194
- * '0xD876...', // cEUR address
194
+ * '0xD876...', // EURm address
195
195
  * addrToSymbol,
196
196
  * directPathMap
197
197
  * )
198
198
  *
199
199
  * // Result:
200
200
  * // {
201
- * // id: 'cEUR-cUSD', // alphabetical order
202
- * // assets: [cEUR, cUSD], // alphabetical order
201
+ * // id: 'EURm-USDm', // alphabetical order
202
+ * // assets: [EURm, USDm], // alphabetical order
203
203
  * // path: [ // actual routing path
204
- * // { cUSD->CELO exchange },
205
- * // { CELO->cEUR exchange }
204
+ * // { USDm->CELO exchange },
205
+ * // { CELO->EURm exchange }
206
206
  * // ]
207
207
  * // }
208
208
  * ```
@@ -229,17 +229,17 @@ export declare function createTwoHopRoute(startAddr: Address, intermediateAddr:
229
229
  *
230
230
  * @example
231
231
  * ```typescript
232
- * // Multiple routes for cUSD-cEUR pair
232
+ * // Multiple routes for USDm-EURm pair
233
233
  * const candidates = new Map([
234
- * ['cEUR-cUSD', [
235
- * { path: [cUSD->CELO->cEUR], costData: { totalCostPercent: 0.5 } },
236
- * { path: [cUSD->cREAL->cEUR], costData: { totalCostPercent: 0.3 } },
237
- * { path: [cUSD->cEUR] } // direct route, no cost data
234
+ * ['EURm-USDm', [
235
+ * { path: [USDm->CELO->EURm], costData: { totalCostPercent: 0.5 } },
236
+ * { path: [USDm->BRLm->EURm], costData: { totalCostPercent: 0.3 } },
237
+ * { path: [USDm->EURm] } // direct route, no cost data
238
238
  * ]]
239
239
  * ])
240
240
  *
241
241
  * const optimal = selectOptimalRoutes(candidates, false, assetMap)
242
- * // Returns the cUSD->cREAL->cEUR route (lowest cost: 0.3%)
242
+ * // Returns the USDm->BRLm->EURm route (lowest cost: 0.3%)
243
243
  * ```
244
244
  */
245
245
  export declare function selectOptimalRoutes(allRoutes: Map<RouteID, Route[]>, returnAllRoutes: boolean, addrToSymbol: Map<Address, TokenSymbol>): (Route | RouteWithCost)[];
@@ -260,7 +260,7 @@ export declare function selectOptimalRoutes(allRoutes: Map<RouteID, Route[]>, re
260
260
  *
261
261
  * **Tier 3 - Major Stablecoin Preference** (Final Fallback):
262
262
  * - For two-hop routes, prefer those going through major stablecoins
263
- * - Major FX currencies like cUSD and cEUR typically have better liquidity
263
+ * - Major FX currencies like USDm and EURm typically have better liquidity
264
264
  *
265
265
  * **Tier 4 - First Available** (Last Resort):
266
266
  * - If no other heuristics apply, use the first route found
@@ -1 +1 @@
1
- {"version":3,"file":"routeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/routeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAS,aAAa,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAI/E,KAAK,WAAW,GAAG,MAAM,CAAA;AACzB,KAAK,OAAO,GAAG,MAAM,CAAA;AAErB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEvC;;;;;;;;;;;;OAYG;IACH,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAEtC;;;;;;OAMG;IACH,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAElC,wEAAwE;IACxE,YAAY,EAAE,KAAK,EAAE,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,gBAAgB,CA4BnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAgD3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,OAAO,EAClB,gBAAgB,EAAE,OAAO,EACzB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,EACvC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GACjC,KAAK,GAAG,IAAI,CAgCd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAChC,eAAe,EAAE,OAAO,EACxB,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,GACtC,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,CAoB3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,KAAK,GAAG,aAAa,CAwBnH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAMtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI,IAAI,aAAa,CAE9E"}
1
+ {"version":3,"file":"routeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/routeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAc,aAAa,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAIpF,KAAK,WAAW,GAAG,MAAM,CAAA;AACzB,KAAK,OAAO,GAAG,MAAM,CAAA;AAErB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEvC;;;;;;;;;;;;OAYG;IACH,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAEtC;;;;;;OAMG;IACH,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAElC,wEAAwE;IACxE,YAAY,EAAE,KAAK,EAAE,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,gBAAgB,CA4BnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAgD3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,OAAO,EAClB,gBAAgB,EAAE,OAAO,EACzB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,EACvC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GACjC,KAAK,GAAG,IAAI,CAgCd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAChC,eAAe,EAAE,OAAO,EACxB,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,GACtC,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,CAoB3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,KAAK,GAAG,aAAa,CAwBnH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAMtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI,IAAI,aAAa,CAE9E"}