@paraswap/dex-lib 3.8.13 → 3.8.15

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 (287) hide show
  1. package/.vscode/launch.json +16 -0
  2. package/.vscode/settings.json +3 -0
  3. package/build/abi/Uncompressor.json +250 -0
  4. package/build/abi/concentrator/arUSD5115.json +1746 -0
  5. package/build/abi/fx-protocol/FxMarket.json +1284 -0
  6. package/build/abi/fx-protocol/weETHOralce.json +676 -0
  7. package/build/abi/integral/factory.json +333 -0
  8. package/build/abi/integral/oracle.json +501 -0
  9. package/build/abi/{inception/inception-ineth-pool.json → integral/pool.json} +522 -543
  10. package/build/abi/integral/relayer.json +1536 -0
  11. package/build/abi/maverick-v2/MaverickV2Router.json +778 -0
  12. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  13. package/build/dex/aave-v1/aave-v1.js +0 -22
  14. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  15. package/build/dex/bProtocol.d.ts +18 -0
  16. package/build/dex/bProtocol.js +39 -0
  17. package/build/dex/bProtocol.js.map +1 -0
  18. package/build/dex/bancor.d.ts +26 -0
  19. package/build/dex/bancor.js +58 -0
  20. package/build/dex/bancor.js.map +1 -0
  21. package/build/dex/compound.d.ts +18 -0
  22. package/build/dex/compound.js +46 -0
  23. package/build/dex/compound.js.map +1 -0
  24. package/build/dex/concentrator-arusd/concentrator-arusd-event.d.ts +17 -0
  25. package/build/dex/concentrator-arusd/concentrator-arusd-event.js +66 -0
  26. package/build/dex/concentrator-arusd/concentrator-arusd-event.js.map +1 -0
  27. package/build/dex/concentrator-arusd/concentrator-arusd.d.ts +6 -3
  28. package/build/dex/concentrator-arusd/concentrator-arusd.js +45 -41
  29. package/build/dex/concentrator-arusd/concentrator-arusd.js.map +1 -1
  30. package/build/dex/concentrator-arusd/config.d.ts +1 -2
  31. package/build/dex/concentrator-arusd/config.js +2 -6
  32. package/build/dex/concentrator-arusd/config.js.map +1 -1
  33. package/build/dex/concentrator-arusd/types.d.ts +7 -3
  34. package/build/dex/concentrator-arusd/utils.d.ts +4 -0
  35. package/build/dex/concentrator-arusd/utils.js +27 -0
  36. package/build/dex/concentrator-arusd/utils.js.map +1 -0
  37. package/build/dex/curve-v2.d.ts +58 -0
  38. package/build/dex/curve-v2.js +180 -0
  39. package/build/dex/curve-v2.js.map +1 -0
  40. package/build/dex/dodo-v1.d.ts +33 -0
  41. package/build/dex/dodo-v1.js +63 -0
  42. package/build/dex/dodo-v1.js.map +1 -0
  43. package/build/dex/etherfi/etherfi.d.ts +26 -0
  44. package/build/dex/etherfi/etherfi.js +96 -0
  45. package/build/dex/etherfi/etherfi.js.map +1 -0
  46. package/build/dex/fx-protocol-rusd/config.d.ts +1 -2
  47. package/build/dex/fx-protocol-rusd/config.js +3 -6
  48. package/build/dex/fx-protocol-rusd/config.js.map +1 -1
  49. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.d.ts +18 -0
  50. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js +71 -0
  51. package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js.map +1 -0
  52. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.d.ts +10 -10
  53. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js +75 -70
  54. package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js.map +1 -1
  55. package/build/dex/fx-protocol-rusd/types.d.ts +6 -3
  56. package/build/dex/fx-protocol-rusd/utils.d.ts +4 -0
  57. package/build/dex/fx-protocol-rusd/utils.js +26 -0
  58. package/build/dex/fx-protocol-rusd/utils.js.map +1 -0
  59. package/build/dex/index.js +4 -0
  60. package/build/dex/index.js.map +1 -1
  61. package/build/dex/{infusion → integral}/config.d.ts +1 -1
  62. package/build/dex/integral/config.js +20 -0
  63. package/build/dex/integral/config.js.map +1 -0
  64. package/build/dex/integral/context.d.ts +40 -0
  65. package/build/dex/integral/context.js +158 -0
  66. package/build/dex/integral/context.js.map +1 -0
  67. package/build/dex/integral/helpers.d.ts +17 -0
  68. package/build/dex/integral/helpers.js +157 -0
  69. package/build/dex/integral/helpers.js.map +1 -0
  70. package/build/dex/integral/integral-factory.d.ts +24 -0
  71. package/build/dex/integral/integral-factory.js +95 -0
  72. package/build/dex/integral/integral-factory.js.map +1 -0
  73. package/build/dex/integral/integral-pool.d.ts +50 -0
  74. package/build/dex/integral/integral-pool.js +149 -0
  75. package/build/dex/integral/integral-pool.js.map +1 -0
  76. package/build/dex/integral/integral-pricing.d.ts +18 -0
  77. package/build/dex/integral/integral-pricing.js +114 -0
  78. package/build/dex/integral/integral-pricing.js.map +1 -0
  79. package/build/dex/integral/integral-relayer.d.ts +42 -0
  80. package/build/dex/integral/integral-relayer.js +192 -0
  81. package/build/dex/integral/integral-relayer.js.map +1 -0
  82. package/build/dex/integral/integral-token.d.ts +27 -0
  83. package/build/dex/integral/integral-token.js +59 -0
  84. package/build/dex/integral/integral-token.js.map +1 -0
  85. package/build/dex/{inception/inception-native.d.ts → integral/integral.d.ts} +19 -21
  86. package/build/dex/integral/integral.js +377 -0
  87. package/build/dex/integral/integral.js.map +1 -0
  88. package/build/dex/integral/types.d.ts +84 -0
  89. package/build/dex/integral/types.js +9 -0
  90. package/build/dex/integral/types.js.map +1 -0
  91. package/build/dex/integral/utils-e2e.d.ts +9 -0
  92. package/build/dex/integral/utils-e2e.js +131 -0
  93. package/build/dex/integral/utils-e2e.js.map +1 -0
  94. package/build/dex/integral/utils.d.ts +17 -0
  95. package/build/dex/integral/utils.js +94 -0
  96. package/build/dex/integral/utils.js.map +1 -0
  97. package/build/dex/lido.d.ts +19 -0
  98. package/build/dex/lido.js +42 -0
  99. package/build/dex/lido.js.map +1 -0
  100. package/build/dex/onebit.d.ts +25 -0
  101. package/build/dex/onebit.js +42 -0
  102. package/build/dex/onebit.js.map +1 -0
  103. package/build/dex/oswap/oswap.js +4 -1
  104. package/build/dex/oswap/oswap.js.map +1 -1
  105. package/build/dex/platypus/platypus.d.ts +1 -2
  106. package/build/dex/platypus/platypus.js +0 -31
  107. package/build/dex/platypus/platypus.js.map +1 -1
  108. package/build/dex/sdai/config.d.ts +11 -0
  109. package/build/dex/sdai/config.js +21 -0
  110. package/build/dex/sdai/config.js.map +1 -0
  111. package/build/dex/sdai/constants.d.ts +2 -0
  112. package/build/dex/sdai/constants.js +6 -0
  113. package/build/dex/sdai/constants.js.map +1 -0
  114. package/build/dex/sdai/scripts/validate-state.d.ts +1 -0
  115. package/build/dex/sdai/scripts/validate-state.js +102 -0
  116. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  117. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  118. package/build/dex/sdai/sdai-pool.js +85 -0
  119. package/build/dex/sdai/sdai-pool.js.map +1 -0
  120. package/build/dex/sdai/sdai.d.ts +51 -0
  121. package/build/dex/sdai/sdai.js +172 -0
  122. package/build/dex/sdai/sdai.js.map +1 -0
  123. package/build/dex/sdai/types.d.ts +21 -0
  124. package/build/dex/sdai/types.js +11 -0
  125. package/build/dex/sdai/types.js.map +1 -0
  126. package/build/dex/sdai/utils.d.ts +4 -0
  127. package/build/dex/sdai/utils.js +39 -0
  128. package/build/dex/sdai/utils.js.map +1 -0
  129. package/build/dex/smoothy.d.ts +26 -0
  130. package/build/dex/smoothy.js +48 -0
  131. package/build/dex/smoothy.js.map +1 -0
  132. package/build/dex/stable-pool.d.ts +28 -0
  133. package/build/dex/stable-pool.js +62 -0
  134. package/build/dex/stable-pool.js.map +1 -0
  135. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  136. package/build/dex/swaap-v1/swaap-v1.js +0 -10
  137. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  138. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  139. package/build/dex/trader-joe-v2.1.js +79 -0
  140. package/build/dex/trader-joe-v2.1.js.map +1 -0
  141. package/build/executor/Executor01BytecodeBuilder.js +4 -5
  142. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  143. package/build/executor/Executor02BytecodeBuilder.js +2 -3
  144. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  145. package/build/executor/Executor03BytecodeBuilder.js +24 -14
  146. package/build/executor/Executor03BytecodeBuilder.js.map +1 -1
  147. package/build/executor/compressor/Compressor.d.ts +23 -0
  148. package/build/executor/compressor/Compressor.js +144 -0
  149. package/build/executor/compressor/Compressor.js.map +1 -0
  150. package/build/executor/compressor/compress.d.ts +17 -0
  151. package/build/executor/compressor/compress.js +187 -0
  152. package/build/executor/compressor/compress.js.map +1 -0
  153. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  154. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  155. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  156. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  157. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  158. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  159. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  160. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  161. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  162. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  163. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  164. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  165. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  166. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  167. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  168. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  169. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  170. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  171. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  172. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  173. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  174. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  175. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  176. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  177. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  178. package/build/executor/compressor/fetchSaved.js +17 -0
  179. package/build/executor/compressor/fetchSaved.js.map +1 -0
  180. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  181. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  182. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  183. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  184. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  185. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  186. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  187. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  188. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  189. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  190. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  191. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  192. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  193. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  194. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  195. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  196. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  197. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  198. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  199. package/build/executor/compressor/utils/intToByte.js +10 -0
  200. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  201. package/build/generic-swap-transaction-builder.d.ts +1 -1
  202. package/build/generic-swap-transaction-builder.js +10 -10
  203. package/build/generic-swap-transaction-builder.js.map +1 -1
  204. package/package.json +1 -1
  205. package/src/abi/concentrator/arUSD.json +568 -0
  206. package/src/abi/concentrator/arUSD5115.json +1746 -0
  207. package/src/abi/fx-protocol/FxMarket.json +1284 -0
  208. package/src/abi/fx-protocol/FxUSD.json +1227 -0
  209. package/src/abi/fx-protocol/weETHOralce.json +676 -0
  210. package/src/dex/concentrator-arusd/concentrator-arusd-e2e.test.ts +92 -0
  211. package/src/dex/concentrator-arusd/concentrator-arusd-event.ts +100 -0
  212. package/src/dex/concentrator-arusd/concentrator-arusd-integration.test.ts +104 -0
  213. package/src/dex/concentrator-arusd/concentrator-arusd.ts +269 -0
  214. package/src/dex/concentrator-arusd/concetrator-arusd-events.test.ts +97 -0
  215. package/src/dex/concentrator-arusd/config.ts +13 -0
  216. package/src/dex/concentrator-arusd/types.ts +16 -0
  217. package/src/dex/concentrator-arusd/utils.ts +36 -0
  218. package/src/dex/fx-protocol-rusd/config.ts +14 -0
  219. package/src/dex/fx-protocol-rusd/fx-protocol-e2e.test.ts +96 -0
  220. package/src/dex/fx-protocol-rusd/fx-protocol-events.test.ts +101 -0
  221. package/src/dex/fx-protocol-rusd/fx-protocol-integration.test.ts +104 -0
  222. package/src/dex/fx-protocol-rusd/fx-protocol-rusd-event.ts +112 -0
  223. package/src/dex/fx-protocol-rusd/fx-protocol-rusd.ts +282 -0
  224. package/src/dex/fx-protocol-rusd/types.ts +16 -0
  225. package/src/dex/fx-protocol-rusd/utils.ts +47 -0
  226. package/src/dex/index.ts +4 -0
  227. package/src/dex/wsteth/wsteth-integration.test.ts +0 -1
  228. package/src/executor/Executor01BytecodeBuilder.ts +4 -8
  229. package/src/executor/Executor02BytecodeBuilder.ts +2 -7
  230. package/src/executor/Executor03BytecodeBuilder.ts +34 -19
  231. package/src/generic-swap-transaction-builder.ts +3 -5
  232. package/tests/constants-e2e.ts +10 -0
  233. package/build/abi/inception/inception-ineth.json +0 -609
  234. package/build/abi/inception/inception-ratio-feed.json +0 -93
  235. package/build/abi/inception/inception-vault.json +0 -991
  236. package/build/abi/infusion/InfusionFactory.json +0 -147
  237. package/build/abi/infusion/InfusionPair.json +0 -658
  238. package/build/abi/infusion/InfusionRouter.json +0 -442
  239. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  240. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  241. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  242. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  243. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  244. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  245. package/build/dex/idle-dao/scripts.d.ts +0 -9
  246. package/build/dex/idle-dao/scripts.js +0 -552
  247. package/build/dex/idle-dao/scripts.js.map +0 -1
  248. package/build/dex/inception/config.d.ts +0 -5
  249. package/build/dex/inception/config.js +0 -112
  250. package/build/dex/inception/config.js.map +0 -1
  251. package/build/dex/inception/inception-event-pool.d.ts +0 -23
  252. package/build/dex/inception/inception-event-pool.js +0 -34
  253. package/build/dex/inception/inception-event-pool.js.map +0 -1
  254. package/build/dex/inception/inception-native.js +0 -131
  255. package/build/dex/inception/inception-native.js.map +0 -1
  256. package/build/dex/inception/inception-pool.d.ts +0 -18
  257. package/build/dex/inception/inception-pool.js +0 -32
  258. package/build/dex/inception/inception-pool.js.map +0 -1
  259. package/build/dex/inception/inception-price-feed.d.ts +0 -19
  260. package/build/dex/inception/inception-price-feed.js +0 -51
  261. package/build/dex/inception/inception-price-feed.js.map +0 -1
  262. package/build/dex/inception/inception.d.ts +0 -44
  263. package/build/dex/inception/inception.js +0 -162
  264. package/build/dex/inception/inception.js.map +0 -1
  265. package/build/dex/inception/tokens.d.ts +0 -9
  266. package/build/dex/inception/tokens.js +0 -28
  267. package/build/dex/inception/tokens.js.map +0 -1
  268. package/build/dex/inception/types.d.ts +0 -22
  269. package/build/dex/inception/types.js +0 -3
  270. package/build/dex/inception/types.js.map +0 -1
  271. package/build/dex/inception/utils.d.ts +0 -7
  272. package/build/dex/inception/utils.js +0 -58
  273. package/build/dex/inception/utils.js.map +0 -1
  274. package/build/dex/infusion/config.js +0 -25
  275. package/build/dex/infusion/config.js.map +0 -1
  276. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  277. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  278. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  279. package/build/dex/infusion/infusion.d.ts +0 -54
  280. package/build/dex/infusion/infusion.js +0 -532
  281. package/build/dex/infusion/infusion.js.map +0 -1
  282. package/build/dex/infusion/types.d.ts +0 -47
  283. package/build/dex/infusion/types.js +0 -3
  284. package/build/dex/infusion/types.js.map +0 -1
  285. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  286. package/build/dex/infusion/utils/isStablePair.js +0 -18
  287. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const computeCostL2_1 = __importDefault(require("./utils/computeCostL2"));
7
+ const intToByte_1 = __importDefault(require("./utils/intToByte"));
8
+ const searchUnusedBytes_1 = __importDefault(require("./compress_functions/searchUnusedBytes"));
9
+ const byteSubstitution_1 = __importDefault(require("./compress_functions/byteSubstitution"));
10
+ const findLongestAndSubstitute_1 = __importDefault(require("./compress_functions/findLongestAndSubstitute"));
11
+ const addressSubstitution_1 = __importDefault(require("./compress_functions/addressSubstitution"));
12
+ const addressSubstitutionFromObject_1 = __importDefault(require("./compress_functions/addressSubstitutionFromObject"));
13
+ const lodash_1 = require("lodash");
14
+ const zeroByte = '00';
15
+ const ffByte = 'ff';
16
+ const trimHex = (hex) => {
17
+ return hex.startsWith('0x') ? hex.slice(2) : hex;
18
+ };
19
+ const compress = function ({ initialCallData, addresses, options, network, }) {
20
+ if (initialCallData.length % 2 !== 0)
21
+ throw new Error('Initial data of odd length');
22
+ if (!options)
23
+ options = {};
24
+ const initialCost = (0, computeCostL2_1.default)(initialCallData);
25
+ initialCallData = trimHex(initialCallData);
26
+ let callData = initialCallData;
27
+ const savedAddresses = (0, lodash_1.pickBy)(addresses, v => v.saved);
28
+ let newAddresses = Object.keys((0, lodash_1.pickBy)(addresses, v => !v.saved)).map(address => address.substring(2).toLocaleLowerCase());
29
+ // SAVED ADDRESSES SUBSTITUTIONS
30
+ if (!options.skipAddressSubstitution) {
31
+ callData = (0, addressSubstitutionFromObject_1.default)({
32
+ callData,
33
+ addressesObject: savedAddresses,
34
+ });
35
+ }
36
+ if (!options.skipNewAddressSubstitution) {
37
+ // NEW ADDRESSES REMOVING USELESS AND HIGHLIGHTING GOOD
38
+ newAddresses = newAddresses.filter(addr => callData.includes(addr));
39
+ // NEW ADDRESSES SUBSTITUTIONS
40
+ callData = (0, addressSubstitution_1.default)({
41
+ callData,
42
+ addresses: newAddresses,
43
+ isSavedAddresses: false,
44
+ });
45
+ }
46
+ // ZEROES SUBSTITUTIONS
47
+ // I couldn't get ride of 0 around addresses because of potential zeroes absence around addresses in later call data formats
48
+ // An idea could be to have another address prefix to handle this case (one with both sides having 00 by default), but it doesn't optimize that much
49
+ let { compressedCallData, bufferOfOccurences } = (0, byteSubstitution_1.default)({
50
+ byte: zeroByte,
51
+ callData,
52
+ addressPrefix: 'RR',
53
+ newAddressPrefix: 'TT',
54
+ });
55
+ let numberOfZeroes = bufferOfOccurences;
56
+ // console.log({numberOfZeroes})
57
+ // COUNTING BYTES AND CHOSING MAX BYTE IN ZEROES
58
+ // Counting bytes occurences in numberOfZeroes
59
+ let byteCountsInZeroes = {};
60
+ for (let i = 0; i < numberOfZeroes.length; i += 2) {
61
+ const byte = numberOfZeroes.substring(i, i + 2);
62
+ if (!byteCountsInZeroes[byte])
63
+ byteCountsInZeroes[byte] = 1;
64
+ else
65
+ byteCountsInZeroes[byte]++;
66
+ }
67
+ // Finding max byte in numberOfZeroes
68
+ let maxByteInZeroes = '';
69
+ let maxInZeroes = 0;
70
+ for (let byte of Object.keys(byteCountsInZeroes)) {
71
+ if (byteCountsInZeroes[byte] > maxInZeroes) {
72
+ maxInZeroes = byteCountsInZeroes[byte];
73
+ maxByteInZeroes = byte;
74
+ }
75
+ }
76
+ // Substituting max byte of numberOfZeroes in compressedData
77
+ for (let i = 0; i < compressedCallData.length; i += 2) {
78
+ const currentByte = compressedCallData.slice(i, i + 2);
79
+ if (currentByte === zeroByte) {
80
+ if (i < compressedCallData.length - 2) {
81
+ const nextByte = compressedCallData.slice(i + 2, i + 4);
82
+ if (nextByte === maxByteInZeroes) {
83
+ compressedCallData =
84
+ compressedCallData.substring(0, i + 2) +
85
+ zeroByte +
86
+ compressedCallData.substring(i + 4);
87
+ i += 2;
88
+ }
89
+ }
90
+ }
91
+ else if (currentByte === 'RR')
92
+ i += 6;
93
+ else if (currentByte === 'TT')
94
+ i += 2;
95
+ }
96
+ // console.log({maxByteInZeroes, maxInZeroes, compressedCallData})
97
+ // SEARCH FOR UNIQUE ADDRESSES PREFIXES AND DUPLICATED STRING MARKERS
98
+ let { addressPrefix, newAddressPrefix, duplicatedStringMarkers } = (0, searchUnusedBytes_1.default)({
99
+ newAddresses,
100
+ compressedCallData,
101
+ });
102
+ // console.log({addressPrefix, newAddressPrefix, duplicatedStringMarkers})
103
+ // ADDRESSES PREFIX SUBSTITUTIONS
104
+ if (addressPrefix &&
105
+ addressPrefix !== '' &&
106
+ !options.skipAddressSubstitution) {
107
+ const regex = new RegExp('RR', 'g');
108
+ compressedCallData = compressedCallData.replace(regex, addressPrefix);
109
+ }
110
+ else if (addressPrefix === '' && !options.skipAddressSubstitution) {
111
+ // If no unused byte for addressPrefix remove the logic for address
112
+ return compress({
113
+ initialCallData: initialCallData,
114
+ addresses,
115
+ options: {
116
+ skipAddressSubstitution: true,
117
+ skipNewAddressSubstitution: true,
118
+ },
119
+ network,
120
+ });
121
+ }
122
+ else if (options.skipAddressSubstitution) {
123
+ addressPrefix = '00';
124
+ }
125
+ if (newAddressPrefix &&
126
+ newAddressPrefix !== '' &&
127
+ !options.skipNewAddressSubstitution) {
128
+ const regex = new RegExp('TT', 'g');
129
+ compressedCallData = compressedCallData.replace(regex, newAddressPrefix);
130
+ }
131
+ else if (newAddressPrefix === '' &&
132
+ newAddresses.length &&
133
+ !options.skipNewAddressSubstitution) {
134
+ // If no unused byte for newAddressPrefix remove the logic for address
135
+ return compress({
136
+ initialCallData: initialCallData,
137
+ addresses,
138
+ options: {
139
+ skipNewAddressSubstitution: true,
140
+ },
141
+ network,
142
+ });
143
+ }
144
+ // INDEX OF METHOD SUBSTITUTION
145
+ compressedCallData = ffByte + trimHex(compressedCallData);
146
+ const newAddressesString = options.skipNewAddressSubstitution
147
+ ? '00'
148
+ : (0, intToByte_1.default)(newAddresses.length) +
149
+ (newAddresses.length > 0 ? newAddressPrefix : '') +
150
+ newAddresses.join('');
151
+ const prefixCallData = addressPrefix + newAddressesString;
152
+ // SUBSTITUTING FF
153
+ const firstBytes = compressedCallData.substring(0, 2);
154
+ const compressedFFSubstituted = (0, byteSubstitution_1.default)({
155
+ byte: ffByte,
156
+ callData: compressedCallData.substring(2),
157
+ compressedCallData: firstBytes,
158
+ addressPrefix: options.skipAddressSubstitution ? 'RR' : addressPrefix,
159
+ newAddressPrefix: options.skipNewAddressSubstitution
160
+ ? 'TT'
161
+ : newAddressPrefix,
162
+ });
163
+ compressedCallData = compressedFFSubstituted.compressedCallData;
164
+ // FINDING LONGEST RECURRENT STRINGS TO COMPRESS
165
+ let { newCompressedData, nbOfDuplicatedStrings } = (0, findLongestAndSubstitute_1.default)({
166
+ compressedCallData: compressedCallData.substring(2),
167
+ markers: duplicatedStringMarkers,
168
+ });
169
+ if (newCompressedData)
170
+ compressedCallData = firstBytes + newCompressedData;
171
+ if (!maxByteInZeroes)
172
+ maxByteInZeroes = '00';
173
+ compressedCallData =
174
+ '0x' + prefixCallData + maxByteInZeroes + compressedCallData + zeroByte;
175
+ // We append the markers at the end of the string to find them back in the contract
176
+ for (let i = 0; i < nbOfDuplicatedStrings; i++) {
177
+ compressedCallData += duplicatedStringMarkers[i];
178
+ }
179
+ // 0x + address prefix (1B) | nbOfNewAddresses (1B) | newAddressPrefix (0/1B) | newAddresses (n * 20B) |
180
+ // maxByteInZeroes (1B) | FF | compressedData | 00 | duplicatedStringMarkers
181
+ const finalCost = (0, computeCostL2_1.default)(compressedCallData);
182
+ if (compressedCallData.length % 2 !== 0)
183
+ throw new Error('Data of odd length');
184
+ return { compressedData: compressedCallData, initialCost, finalCost };
185
+ };
186
+ exports.default = compress;
187
+ //# sourceMappingURL=compress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/executor/compressor/compress.ts"],"names":[],"mappings":";;;;;AAAA,0EAAgD;AAChD,kEAA0C;AAE1C,+FAAuE;AACvE,6FAAqE;AACrE,6GAAqF;AACrF,mGAA2E;AAC3E,uHAA+F;AAC/F,mCAAgC;AAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,MAAM,GAAG,IAAI,CAAC;AAoBpB,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,UAAU,EACzB,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,GACO;IACd,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC;IAE3B,MAAM,WAAW,GAAG,IAAA,uBAAW,EAAC,eAAe,CAAC,CAAC;IACjD,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAG,eAAe,CAAC;IAE/B,MAAM,cAAc,GAAG,IAAA,eAAM,EAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEvD,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAClE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CACpD,CAAC;IAEF,gCAAgC;IAChC,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;QACpC,QAAQ,GAAG,IAAA,uCAA6B,EAAC;YACvC,QAAQ;YACR,eAAe,EAAE,cAAc;SAChC,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE;QACvC,uDAAuD;QACvD,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,8BAA8B;QAC9B,QAAQ,GAAG,IAAA,6BAAmB,EAAC;YAC7B,QAAQ;YACR,SAAS,EAAE,YAAY;YACvB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;KACJ;IAED,uBAAuB;IACvB,4HAA4H;IAC5H,oJAAoJ;IACpJ,IAAI,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,IAAA,0BAAgB,EAAC;QAChE,IAAI,EAAE,QAAQ;QACd,QAAQ;QACR,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,IAAI,cAAc,GAAG,kBAAkB,CAAC;IACxC,gCAAgC;IAEhC,gDAAgD;IAChD,8CAA8C;IAC9C,IAAI,kBAAkB,GAA2B,EAAE,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACjD,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACvD,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;KACjC;IAED,qCAAqC;IACrC,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;QAChD,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE;YAC1C,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC;SACxB;KACF;IAED,4DAA4D;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxD,IAAI,QAAQ,KAAK,eAAe,EAAE;oBAChC,kBAAkB;wBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtC,QAAQ;4BACR,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtC,CAAC,IAAI,CAAC,CAAC;iBACR;aACF;SACF;aAAM,IAAI,WAAW,KAAK,IAAI;YAAE,CAAC,IAAI,CAAC,CAAC;aACnC,IAAI,WAAW,KAAK,IAAI;YAAE,CAAC,IAAI,CAAC,CAAC;KACvC;IACD,kEAAkE;IAElE,qEAAqE;IACrE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,GAC9D,IAAA,2BAAiB,EAAC;QAChB,YAAY;QACZ,kBAAkB;KACnB,CAAC,CAAC;IACL,0EAA0E;IAE1E,iCAAiC;IACjC,IACE,aAAa;QACb,aAAa,KAAK,EAAE;QACpB,CAAC,OAAO,CAAC,uBAAuB,EAChC;QACA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;KACvE;SAAM,IAAI,aAAa,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;QACnE,mEAAmE;QACnE,OAAO,QAAQ,CAAC;YACd,eAAe,EAAE,eAAe;YAChC,SAAS;YACT,OAAO,EAAE;gBACP,uBAAuB,EAAE,IAAI;gBAC7B,0BAA0B,EAAE,IAAI;aACjC;YACD,OAAO;SACR,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,uBAAuB,EAAE;QAC1C,aAAa,GAAG,IAAI,CAAC;KACtB;IAED,IACE,gBAAgB;QAChB,gBAAgB,KAAK,EAAE;QACvB,CAAC,OAAO,CAAC,0BAA0B,EACnC;QACA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;KAC1E;SAAM,IACL,gBAAgB,KAAK,EAAE;QACvB,YAAY,CAAC,MAAM;QACnB,CAAC,OAAO,CAAC,0BAA0B,EACnC;QACA,sEAAsE;QACtE,OAAO,QAAQ,CAAC;YACd,eAAe,EAAE,eAAe;YAChC,SAAS;YACT,OAAO,EAAE;gBACP,0BAA0B,EAAE,IAAI;aACjC;YACD,OAAO;SACR,CAAC,CAAC;KACJ;IAED,+BAA+B;IAC/B,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAG,OAAO,CAAC,0BAA0B;QAC3D,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAA,mBAAS,EAAC,YAAY,CAAC,MAAM,CAAC;YAC9B,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,cAAc,GAAG,aAAa,GAAG,kBAAkB,CAAC;IAE1D,kBAAkB;IAClB,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,uBAAuB,GAAG,IAAA,0BAAgB,EAAC;QAC/C,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,kBAAkB,EAAE,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;QACrE,gBAAgB,EAAE,OAAO,CAAC,0BAA0B;YAClD,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,gBAAgB;KACrB,CAAC,CAAC;IACH,kBAAkB,GAAG,uBAAuB,CAAC,kBAAkB,CAAC;IAEhE,gDAAgD;IAChD,IAAI,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,GAAG,IAAA,kCAAwB,EAAC;QAC1E,kBAAkB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IACH,IAAI,iBAAiB;QAAE,kBAAkB,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAE3E,IAAI,CAAC,eAAe;QAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,kBAAkB;QAChB,IAAI,GAAG,cAAc,GAAG,eAAe,GAAG,kBAAkB,GAAG,QAAQ,CAAC;IAE1E,mFAAmF;IACnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;QAC9C,kBAAkB,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC;KAClD;IACD,wGAAwG;IACxG,iFAAiF;IAEjF,MAAM,SAAS,GAAG,IAAA,uBAAW,EAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const addressSubstitution: ({ callData, addresses, isSavedAddresses, }: {
2
+ callData: string;
3
+ addresses: string[];
4
+ isSavedAddresses: boolean;
5
+ }) => string;
6
+ export default addressSubstitution;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const intToByte_1 = __importDefault(require("./../utils/intToByte"));
7
+ const intTo3Bytes_1 = __importDefault(require("../utils/intTo3Bytes"));
8
+ const addressSubstitution = ({ callData, addresses, isSavedAddresses, }) => {
9
+ for (let i = 0; i < addresses.length; i++) {
10
+ if (addresses[i] === '0000000000000000000000000000000000000000')
11
+ continue;
12
+ let index = callData.indexOf(addresses[i]);
13
+ if (index === -1)
14
+ continue;
15
+ while (index !== -1) {
16
+ if (index % 2 === 0) {
17
+ callData =
18
+ callData.substring(0, index) +
19
+ (isSavedAddresses ? 'RR' : 'TT') +
20
+ (!isSavedAddresses ? (0, intToByte_1.default)(i) : (0, intTo3Bytes_1.default)(i)) +
21
+ callData.substring(index + addresses[i].length);
22
+ }
23
+ index = callData.indexOf(addresses[i], index + 1);
24
+ }
25
+ }
26
+ return callData;
27
+ };
28
+ exports.default = addressSubstitution;
29
+ //# sourceMappingURL=addressSubstitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressSubstitution.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/addressSubstitution.ts"],"names":[],"mappings":";;;;;AAAA,qEAA6C;AAC7C,uEAA+C;AAE/C,MAAM,mBAAmB,GAAG,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,gBAAgB,GAKjB,EAAU,EAAE;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,0CAA0C;YAAE,SAAS;QAC1E,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE;YACnB,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE;gBACnB,QAAQ;oBACN,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;wBAC5B,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;wBAChC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAA,mBAAS,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAW,EAAC,CAAC,CAAC,CAAC;wBACnD,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aACnD;YACD,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;SACnD;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC"}
@@ -0,0 +1,10 @@
1
+ declare const addressSubstitutionFromObject: ({ callData, addressesObject, }: {
2
+ callData: string;
3
+ addressesObject: {
4
+ [key: string]: {
5
+ saved: boolean;
6
+ index: number;
7
+ };
8
+ };
9
+ }) => string;
10
+ export default addressSubstitutionFromObject;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const intTo3Bytes_1 = __importDefault(require("../utils/intTo3Bytes"));
7
+ const ZERO_ADDRESS = '0000000000000000000000000000000000000000';
8
+ const addressSubstitutionFromObject = ({ callData, addressesObject, }) => {
9
+ const addresses = [];
10
+ for (let i = 0; i < callData.length; i += 2) {
11
+ const callDataPart = callData.slice(i, i + 40);
12
+ const addressObj = addressesObject[`0x${callDataPart}`];
13
+ if (addressObj?.saved)
14
+ addresses.push(callDataPart);
15
+ }
16
+ addresses
17
+ .filter(address => {
18
+ const notZero = address !== ZERO_ADDRESS;
19
+ const inCalldata = callData.indexOf(address) !== -1;
20
+ const isSaved = addressesObject[`0x${address}`].saved;
21
+ return notZero && inCalldata && isSaved;
22
+ })
23
+ .forEach(address => {
24
+ let index = callData.indexOf(address);
25
+ const bytes3 = (0, intTo3Bytes_1.default)(addressesObject[`0x${address}`].index);
26
+ while (index !== -1) {
27
+ if (index % 2 === 0) {
28
+ callData =
29
+ callData.substring(0, index) +
30
+ 'RR' +
31
+ bytes3 +
32
+ callData.substring(index + address.length);
33
+ }
34
+ index = callData.indexOf(address, index + 1);
35
+ }
36
+ });
37
+ return callData;
38
+ };
39
+ exports.default = addressSubstitutionFromObject;
40
+ //# sourceMappingURL=addressSubstitutionFromObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressSubstitutionFromObject.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/addressSubstitutionFromObject.ts"],"names":[],"mappings":";;;;;AAAA,uEAA+C;AAE/C,MAAM,YAAY,GAAG,0CAA0C,CAAC;AAEhE,MAAM,6BAA6B,GAAG,CAAC,EACrC,QAAQ,EACR,eAAe,GAIhB,EAAU,EAAE;IACX,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;QAExD,IAAI,UAAU,EAAE,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACrD;IAED,SAAS;SACN,MAAM,CAAC,OAAO,CAAC,EAAE;QAChB,MAAM,OAAO,GAAG,OAAO,KAAK,YAAY,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;QACtD,OAAO,OAAO,IAAI,UAAU,IAAI,OAAO,CAAC;IAC1C,CAAC,CAAC;SACD,OAAO,CAAC,OAAO,CAAC,EAAE;QACjB,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,eAAe,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAElE,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE;YACnB,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE;gBACnB,QAAQ;oBACN,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;wBAC5B,IAAI;wBACJ,MAAM;wBACN,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;aAC9C;YACD,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;SAC9C;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,kBAAe,6BAA6B,CAAC"}
@@ -0,0 +1,11 @@
1
+ declare const byteSubstitution: ({ byte, callData, compressedCallData, addressPrefix, newAddressPrefix, }: {
2
+ byte: string;
3
+ callData: string;
4
+ compressedCallData?: string | undefined;
5
+ addressPrefix: string;
6
+ newAddressPrefix: string;
7
+ }) => {
8
+ bufferOfOccurences: string;
9
+ compressedCallData: string;
10
+ };
11
+ export default byteSubstitution;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const intToByte_1 = __importDefault(require("../utils/intToByte"));
7
+ const byteSubstitution = ({ byte, callData, compressedCallData, addressPrefix, newAddressPrefix, }) => {
8
+ let countNoByte = 0; // Count of non-target bytes
9
+ let countByte = 0; // Count of target bytes
10
+ let bufferOfOccurences = ''; // Stores occurrences of target bytes
11
+ if (!compressedCallData)
12
+ compressedCallData = '';
13
+ // Looping through call data byte by byte
14
+ for (let i = 0; i < callData.length; i += 2) {
15
+ let amountToIncreaseI = 0;
16
+ const currentByte = callData.slice(i, i + 2);
17
+ // Handling target byte substitution
18
+ if (currentByte === byte) {
19
+ if (countNoByte > 0 || i == 0) {
20
+ compressedCallData += byte;
21
+ countNoByte = 0;
22
+ }
23
+ // Handle byte count exceeding limit
24
+ if (++countByte > 254) {
25
+ let hexValue = (0, intToByte_1.default)(countByte);
26
+ bufferOfOccurences += hexValue;
27
+ compressedCallData += byte + hexValue;
28
+ countByte = 0;
29
+ }
30
+ continue;
31
+ }
32
+ else {
33
+ // Handle other bytes and address prefixes
34
+ if (countByte > 0) {
35
+ let hexValue = (0, intToByte_1.default)(countByte);
36
+ if (byte === 'ff' && countByte === 1)
37
+ hexValue = '00';
38
+ bufferOfOccurences += hexValue;
39
+ compressedCallData += hexValue;
40
+ countByte = 0;
41
+ }
42
+ // Check for address and new address prefixes
43
+ if (currentByte === addressPrefix || currentByte === newAddressPrefix) {
44
+ let sliceLength = currentByte === addressPrefix ? 8 : 4;
45
+ compressedCallData += callData.slice(i, i + sliceLength);
46
+ amountToIncreaseI = sliceLength - 2;
47
+ countNoByte = 0;
48
+ }
49
+ countNoByte++;
50
+ }
51
+ if (!amountToIncreaseI)
52
+ compressedCallData += callData.slice(i, i + 2);
53
+ i += amountToIncreaseI;
54
+ }
55
+ // Append remaining byte counts after loop
56
+ if (countByte > 0) {
57
+ let hexValue = (0, intToByte_1.default)(countByte);
58
+ bufferOfOccurences += hexValue;
59
+ compressedCallData += hexValue;
60
+ }
61
+ return { bufferOfOccurences, compressedCallData };
62
+ };
63
+ exports.default = byteSubstitution;
64
+ //# sourceMappingURL=byteSubstitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byteSubstitution.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/byteSubstitution.ts"],"names":[],"mappings":";;;;;AAAA,mEAA2C;AAE3C,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GAOjB,EAA8D,EAAE;IAC/D,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,4BAA4B;IACjD,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,wBAAwB;IAC3C,IAAI,kBAAkB,GAAG,EAAE,CAAC,CAAC,qCAAqC;IAElE,IAAI,CAAC,kBAAkB;QAAE,kBAAkB,GAAG,EAAE,CAAC;IAEjD,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC3C,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7C,oCAAoC;QACpC,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7B,kBAAkB,IAAI,IAAI,CAAC;gBAC3B,WAAW,GAAG,CAAC,CAAC;aACjB;YACD,oCAAoC;YACpC,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE;gBACrB,IAAI,QAAQ,GAAG,IAAA,mBAAS,EAAC,SAAS,CAAC,CAAC;gBACpC,kBAAkB,IAAI,QAAQ,CAAC;gBAC/B,kBAAkB,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACtC,SAAS,GAAG,CAAC,CAAC;aACf;YACD,SAAS;SACV;aAAM;YACL,0CAA0C;YAC1C,IAAI,SAAS,GAAG,CAAC,EAAE;gBACjB,IAAI,QAAQ,GAAG,IAAA,mBAAS,EAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,KAAK,CAAC;oBAAE,QAAQ,GAAG,IAAI,CAAC;gBACtD,kBAAkB,IAAI,QAAQ,CAAC;gBAC/B,kBAAkB,IAAI,QAAQ,CAAC;gBAC/B,SAAS,GAAG,CAAC,CAAC;aACf;YACD,6CAA6C;YAC7C,IAAI,WAAW,KAAK,aAAa,IAAI,WAAW,KAAK,gBAAgB,EAAE;gBACrE,IAAI,WAAW,GAAG,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,kBAAkB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;gBACzD,iBAAiB,GAAG,WAAW,GAAG,CAAC,CAAC;gBACpC,WAAW,GAAG,CAAC,CAAC;aACjB;YACD,WAAW,EAAE,CAAC;SACf;QACD,IAAI,CAAC,iBAAiB;YAAE,kBAAkB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC,IAAI,iBAAiB,CAAC;KACxB;IAED,0CAA0C;IAC1C,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,IAAI,QAAQ,GAAG,IAAA,mBAAS,EAAC,SAAS,CAAC,CAAC;QACpC,kBAAkB,IAAI,QAAQ,CAAC;QAC/B,kBAAkB,IAAI,QAAQ,CAAC;KAChC;IAED,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ declare const ffSubstitution: ({ compressedCallData, indexOfMethods, addressPrefix, newAddressPrefix, }: {
2
+ compressedCallData: string;
3
+ indexOfMethods: number;
4
+ addressPrefix: string;
5
+ newAddressPrefix: string;
6
+ }) => string;
7
+ export default ffSubstitution;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const intToByte_1 = __importDefault(require("../utils/intToByte"));
7
+ const ffByte = 'ff';
8
+ const zeroByte = '00';
9
+ const ffSubstitution = ({ compressedCallData, indexOfMethods, addressPrefix, newAddressPrefix, }) => {
10
+ let ffCount = 0;
11
+ let maxI;
12
+ const startFFSearch = indexOfMethods > -1 ? 2 : 10;
13
+ for (let i = startFFSearch; i < compressedCallData.length; i += 2) {
14
+ const byte = compressedCallData.substring(i, i + 2);
15
+ maxI = i;
16
+ if (byte === ffByte) {
17
+ if (++ffCount > 254) {
18
+ // in case more than 255 bytes of ff
19
+ compressedCallData =
20
+ compressedCallData.substring(0, i + (1 - ffCount) * 2) +
21
+ (0, intToByte_1.default)(ffCount) +
22
+ compressedCallData.substring(i);
23
+ i -= ffCount * 2;
24
+ i += 2;
25
+ ffCount = 0;
26
+ }
27
+ continue;
28
+ }
29
+ if (ffCount > 0) {
30
+ if (ffCount === 1)
31
+ compressedCallData =
32
+ compressedCallData.substring(0, i) +
33
+ zeroByte +
34
+ compressedCallData.substring(i);
35
+ else {
36
+ compressedCallData =
37
+ compressedCallData.substring(0, i + (1 - ffCount) * 2) +
38
+ (0, intToByte_1.default)(ffCount) +
39
+ compressedCallData.substring(i);
40
+ i -= ffCount * 2;
41
+ }
42
+ i += 2;
43
+ ffCount = 0;
44
+ }
45
+ if (byte === addressPrefix)
46
+ i += 6;
47
+ if (byte === newAddressPrefix)
48
+ i += 2;
49
+ }
50
+ // console.log({ maxI: max, length: compressedCallData.length, compressedCallData });
51
+ return compressedCallData;
52
+ };
53
+ exports.default = ffSubstitution;
54
+ //# sourceMappingURL=ffSubstitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffSubstitution.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/ffSubstitution.ts"],"names":[],"mappings":";;;;;AAAA,mEAA2C;AAE3C,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEtB,MAAM,cAAc,GAAG,CAAC,EACtB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,GAMjB,EAAU,EAAE;IACX,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,IAAY,CAAC;IACjB,MAAM,aAAa,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACjE,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,CAAC;QACT,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,EAAE,OAAO,GAAG,GAAG,EAAE;gBACnB,oCAAoC;gBACpC,kBAAkB;oBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;wBACtD,IAAA,mBAAS,EAAC,OAAO,CAAC;wBAClB,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;gBACjB,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,GAAG,CAAC,CAAC;aACb;YACD,SAAS;SACV;QACD,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,IAAI,OAAO,KAAK,CAAC;gBACf,kBAAkB;oBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClC,QAAQ;wBACR,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAC/B;gBACH,kBAAkB;oBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;wBACtD,IAAA,mBAAS,EAAC,OAAO,CAAC;wBAClB,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;aAClB;YACD,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,GAAG,CAAC,CAAC;SACb;QACD,IAAI,IAAI,KAAK,aAAa;YAAE,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,gBAAgB;YAAE,CAAC,IAAI,CAAC,CAAC;KACvC;IACD,qFAAqF;IACrF,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ declare const findLongestAndSubstitute: ({ compressedCallData, markers, }: {
2
+ compressedCallData: string;
3
+ markers?: string[] | undefined;
4
+ }) => {
5
+ newCompressedData: string;
6
+ nbOfDuplicatedStrings: number;
7
+ };
8
+ export default findLongestAndSubstitute;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const findLongestDuplicatedString_1 = __importDefault(require("../utils/findLongestDuplicatedString"));
7
+ const findLongestAndSubstitute = ({ compressedCallData, markers, }) => {
8
+ if (!markers)
9
+ markers = [];
10
+ for (let i = 0; i < markers.length; i++) {
11
+ if (!markers[i] || markers[i] === '')
12
+ return {
13
+ newCompressedData: compressedCallData,
14
+ nbOfDuplicatedStrings: i,
15
+ };
16
+ const marker = markers[i];
17
+ let longestDuplicatedStringInCompressedData = (0, findLongestDuplicatedString_1.default)(compressedCallData);
18
+ // Checking if the length of the longest duplicated string is significant
19
+ // TODO: better check conditions to enter this (nb of occurences as well as length)
20
+ if (longestDuplicatedStringInCompressedData.length >= 8) {
21
+ // Creating regular expressions to find the longest duplicated string
22
+ const index = compressedCallData.indexOf(longestDuplicatedStringInCompressedData);
23
+ // If a match is found, surrounder the longest duplicated string with the marker in the compressed data
24
+ // and substitute the other occurences
25
+ if (index > -1) {
26
+ compressedCallData =
27
+ compressedCallData.substring(0, index) +
28
+ marker +
29
+ compressedCallData.substring(index, index + longestDuplicatedStringInCompressedData.length) +
30
+ marker +
31
+ compressedCallData.substring(index + longestDuplicatedStringInCompressedData.length);
32
+ let otherIndex = compressedCallData.indexOf(longestDuplicatedStringInCompressedData, index + 4 + longestDuplicatedStringInCompressedData.length);
33
+ while (otherIndex !== -1) {
34
+ if (otherIndex % 2 === 0) {
35
+ compressedCallData =
36
+ compressedCallData.substring(0, otherIndex) +
37
+ marker +
38
+ compressedCallData.substring(otherIndex + longestDuplicatedStringInCompressedData.length);
39
+ otherIndex = compressedCallData.indexOf(longestDuplicatedStringInCompressedData, otherIndex + 2);
40
+ }
41
+ else {
42
+ otherIndex = compressedCallData.indexOf(longestDuplicatedStringInCompressedData, otherIndex + 1);
43
+ }
44
+ }
45
+ }
46
+ else
47
+ return {
48
+ newCompressedData: compressedCallData,
49
+ nbOfDuplicatedStrings: i,
50
+ };
51
+ }
52
+ else {
53
+ // If the longest duplicated string is not significant, return the current state of compressed data and count of duplicated strings
54
+ return {
55
+ newCompressedData: compressedCallData,
56
+ nbOfDuplicatedStrings: i,
57
+ };
58
+ }
59
+ }
60
+ // After processing for all markers, return the final compressed data and the total number of duplicated strings found
61
+ return {
62
+ newCompressedData: compressedCallData,
63
+ nbOfDuplicatedStrings: markers.length,
64
+ };
65
+ };
66
+ exports.default = findLongestAndSubstitute;
67
+ //# sourceMappingURL=findLongestAndSubstitute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findLongestAndSubstitute.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/findLongestAndSubstitute.ts"],"names":[],"mappings":";;;;;AAAA,uGAA+E;AAE/E,MAAM,wBAAwB,GAAG,CAAC,EAChC,kBAAkB,EAClB,OAAO,GAIR,EAAgE,EAAE;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;YAClC,OAAO;gBACL,iBAAiB,EAAE,kBAAkB;gBACrC,qBAAqB,EAAE,CAAC;aACzB,CAAC;QAEJ,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,uCAAuC,GACzC,IAAA,qCAA2B,EAAC,kBAAkB,CAAC,CAAC;QAElD,yEAAyE;QACzE,mFAAmF;QACnF,IAAI,uCAAuC,CAAC,MAAM,IAAI,CAAC,EAAE;YACvD,qEAAqE;YACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CACtC,uCAAuC,CACxC,CAAC;YAEF,uGAAuG;YACvG,sCAAsC;YACtC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,kBAAkB;oBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;wBACtC,MAAM;wBACN,kBAAkB,CAAC,SAAS,CAC1B,KAAK,EACL,KAAK,GAAG,uCAAuC,CAAC,MAAM,CACvD;wBACD,MAAM;wBACN,kBAAkB,CAAC,SAAS,CAC1B,KAAK,GAAG,uCAAuC,CAAC,MAAM,CACvD,CAAC;gBAEJ,IAAI,UAAU,GAAG,kBAAkB,CAAC,OAAO,CACzC,uCAAuC,EACvC,KAAK,GAAG,CAAC,GAAG,uCAAuC,CAAC,MAAM,CAC3D,CAAC;gBACF,OAAO,UAAU,KAAK,CAAC,CAAC,EAAE;oBACxB,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE;wBACxB,kBAAkB;4BAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC;gCAC3C,MAAM;gCACN,kBAAkB,CAAC,SAAS,CAC1B,UAAU,GAAG,uCAAuC,CAAC,MAAM,CAC5D,CAAC;wBACJ,UAAU,GAAG,kBAAkB,CAAC,OAAO,CACrC,uCAAuC,EACvC,UAAU,GAAG,CAAC,CACf,CAAC;qBACH;yBAAM;wBACL,UAAU,GAAG,kBAAkB,CAAC,OAAO,CACrC,uCAAuC,EACvC,UAAU,GAAG,CAAC,CACf,CAAC;qBACH;iBACF;aACF;;gBACC,OAAO;oBACL,iBAAiB,EAAE,kBAAkB;oBACrC,qBAAqB,EAAE,CAAC;iBACzB,CAAC;SACL;aAAM;YACL,mIAAmI;YACnI,OAAO;gBACL,iBAAiB,EAAE,kBAAkB;gBACrC,qBAAqB,EAAE,CAAC;aACzB,CAAC;SACH;KACF;IAED,sHAAsH;IACtH,OAAO;QACL,iBAAiB,EAAE,kBAAkB;QACrC,qBAAqB,EAAE,OAAO,CAAC,MAAM;KACtC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ declare const findLongestAndSubstitute: ({ compressedCallData, markers, }: {
2
+ compressedCallData: string;
3
+ markers?: string[] | undefined;
4
+ }) => {
5
+ newCompressedData: string;
6
+ nbOfDuplicatedStrings: number;
7
+ };
8
+ export default findLongestAndSubstitute;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const findLongestDuplicatedString_1 = __importDefault(require("../utils/findLongestDuplicatedString"));
7
+ const findLongestAndSubstitute = ({ compressedCallData, markers, }) => {
8
+ if (!markers)
9
+ markers = [];
10
+ for (let i = 0; i < markers.length; i++) {
11
+ if (!markers[i] || markers[i] === '')
12
+ return {
13
+ newCompressedData: compressedCallData,
14
+ nbOfDuplicatedStrings: i,
15
+ };
16
+ const marker = markers[i];
17
+ let longestDuplicatedStringInCompressedData = (0, findLongestDuplicatedString_1.default)(compressedCallData);
18
+ // Checking if the length of the longest duplicated string is significant
19
+ // TODO: better check conditions to enter this (nb of occurences as well as length)
20
+ if (longestDuplicatedStringInCompressedData.length >= 8) {
21
+ // Creating regular expressions to find the longest duplicated string
22
+ const regexLongest = new RegExp('((^[a-zA-Z0-9]{2})*)' + longestDuplicatedStringInCompressedData);
23
+ const match = regexLongest.exec(compressedCallData);
24
+ // If a match is found, surrounder the longest duplicated string with the marker in the compressed data
25
+ // and substitute the other occurences
26
+ if (match) {
27
+ const indexOfLongest = match.index + match[1].length;
28
+ const regexLongestGlobal = new RegExp('((^[a-zA-Z0-9]{2})*)' + longestDuplicatedStringInCompressedData, 'g');
29
+ compressedCallData =
30
+ compressedCallData.substring(0, indexOfLongest) +
31
+ marker +
32
+ compressedCallData.substring(indexOfLongest, indexOfLongest + longestDuplicatedStringInCompressedData.length) +
33
+ marker +
34
+ compressedCallData
35
+ .substring(indexOfLongest + longestDuplicatedStringInCompressedData.length)
36
+ .replace(regexLongestGlobal, function (m, p1) {
37
+ return p1 + marker;
38
+ });
39
+ }
40
+ else
41
+ return {
42
+ newCompressedData: compressedCallData,
43
+ nbOfDuplicatedStrings: i,
44
+ };
45
+ }
46
+ else {
47
+ // If the longest duplicated string is not significant, return the current state of compressed data and count of duplicated strings
48
+ return {
49
+ newCompressedData: compressedCallData,
50
+ nbOfDuplicatedStrings: i,
51
+ };
52
+ }
53
+ }
54
+ // After processing for all markers, return the final compressed data and the total number of duplicated strings found
55
+ return {
56
+ newCompressedData: compressedCallData,
57
+ nbOfDuplicatedStrings: markers.length,
58
+ };
59
+ };
60
+ exports.default = findLongestAndSubstitute;
61
+ //# sourceMappingURL=findLongestAndSubstitute_old.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findLongestAndSubstitute_old.js","sourceRoot":"","sources":["../../../../src/executor/compressor/compress_functions/findLongestAndSubstitute_old.ts"],"names":[],"mappings":";;;;;AAAA,uGAA+E;AAE/E,MAAM,wBAAwB,GAAG,CAAC,EAChC,kBAAkB,EAClB,OAAO,GAIR,EAAgE,EAAE;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;YAClC,OAAO;gBACL,iBAAiB,EAAE,kBAAkB;gBACrC,qBAAqB,EAAE,CAAC;aACzB,CAAC;QAEJ,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,uCAAuC,GACzC,IAAA,qCAA2B,EAAC,kBAAkB,CAAC,CAAC;QAElD,yEAAyE;QACzE,mFAAmF;QACnF,IAAI,uCAAuC,CAAC,MAAM,IAAI,CAAC,EAAE;YACvD,qEAAqE;YACrE,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,sBAAsB,GAAG,uCAAuC,CACjE,CAAC;YACF,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAEpD,uGAAuG;YACvG,sCAAsC;YACtC,IAAI,KAAK,EAAE;gBACT,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrD,MAAM,kBAAkB,GAAG,IAAI,MAAM,CACnC,sBAAsB,GAAG,uCAAuC,EAChE,GAAG,CACJ,CAAC;gBACF,kBAAkB;oBAChB,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC;wBAC/C,MAAM;wBACN,kBAAkB,CAAC,SAAS,CAC1B,cAAc,EACd,cAAc,GAAG,uCAAuC,CAAC,MAAM,CAChE;wBACD,MAAM;wBACN,kBAAkB;6BACf,SAAS,CACR,cAAc,GAAG,uCAAuC,CAAC,MAAM,CAChE;6BACA,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAE,EAAE;4BAC1C,OAAO,EAAE,GAAG,MAAM,CAAC;wBACrB,CAAC,CAAC,CAAC;aACR;;gBACC,OAAO;oBACL,iBAAiB,EAAE,kBAAkB;oBACrC,qBAAqB,EAAE,CAAC;iBACzB,CAAC;SACL;aAAM;YACL,mIAAmI;YACnI,OAAO;gBACL,iBAAiB,EAAE,kBAAkB;gBACrC,qBAAqB,EAAE,CAAC;aACzB,CAAC;SACH;KACF;IAED,sHAAsH;IACtH,OAAO;QACL,iBAAiB,EAAE,kBAAkB;QACrC,qBAAqB,EAAE,OAAO,CAAC,MAAM;KACtC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const reverseAddressSubstitution: ({ callData, addresses, isSavedAddresses, }: {
2
+ callData: string;
3
+ addresses: string[];
4
+ isSavedAddresses: boolean;
5
+ }) => string;
6
+ export default reverseAddressSubstitution;