@paraswap/dex-lib 4.8.26 → 4.8.27

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 (268) hide show
  1. package/build/dex/balancer-v2/balancer-v2.d.ts +0 -1
  2. package/build/dex/balancer-v2/balancer-v2.js +0 -4
  3. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  4. package/build/dex/bebop/bebop.d.ts +0 -1
  5. package/build/dex/bebop/bebop.js +0 -8
  6. package/build/dex/bebop/bebop.js.map +1 -1
  7. package/build/dex/cables/cables.d.ts +0 -1
  8. package/build/dex/cables/cables.js +0 -3
  9. package/build/dex/cables/cables.js.map +1 -1
  10. package/build/dex/curve-v1/curve-v1.d.ts +0 -1
  11. package/build/dex/curve-v1/curve-v1.js +0 -4
  12. package/build/dex/curve-v1/curve-v1.js.map +1 -1
  13. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +0 -1
  14. package/build/dex/curve-v1-factory/curve-v1-factory.js +0 -4
  15. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  16. package/build/dex/curve-v2/curve-v2.d.ts +0 -1
  17. package/build/dex/curve-v2/curve-v2.js +0 -4
  18. package/build/dex/curve-v2/curve-v2.js.map +1 -1
  19. package/build/dex/hashflow/hashflow.d.ts +0 -1
  20. package/build/dex/hashflow/hashflow.js +0 -5
  21. package/build/dex/hashflow/hashflow.js.map +1 -1
  22. package/build/dex/idex.d.ts +0 -1
  23. package/build/dex/lite-psm/lite-psm.d.ts +0 -1
  24. package/build/dex/lite-psm/lite-psm.js +0 -3
  25. package/build/dex/lite-psm/lite-psm.js.map +1 -1
  26. package/build/dex/native/native.d.ts +0 -1
  27. package/build/dex/native/native.js +0 -6
  28. package/build/dex/native/native.js.map +1 -1
  29. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +0 -1
  30. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -5
  31. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  32. package/build/dex/solidly-v3/solidly-v3.d.ts +0 -1
  33. package/build/dex/solidly-v3/solidly-v3.js +0 -4
  34. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  35. package/build/dex/uniswap-v3/uniswap-v3.d.ts +0 -1
  36. package/build/dex/uniswap-v3/uniswap-v3.js +0 -4
  37. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  38. package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
  39. package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
  40. package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
  41. package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
  42. package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
  43. package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
  44. package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
  45. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
  46. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
  47. package/build/implementations/local-paraswap-sdk.js +9 -4
  48. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  49. package/build/tenderly-simulation.d.ts +221 -0
  50. package/build/tenderly-simulation.js +517 -0
  51. package/build/tenderly-simulation.js.map +1 -0
  52. package/package.json +1 -1
  53. package/build/abi/BProtocol.json +0 -1155
  54. package/build/abi/Jarvis.json +0 -1172
  55. package/build/abi/MStableAsset.json +0 -1545
  56. package/build/abi/OneInchLp.json +0 -1304
  57. package/build/abi/Onebit.json +0 -736
  58. package/build/abi/Shell.json +0 -1294
  59. package/build/abi/TraderJoeV2Router.json +0 -50
  60. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  61. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  62. package/build/abi/infusion/InfusionFactory.json +0 -147
  63. package/build/abi/infusion/InfusionPair.json +0 -658
  64. package/build/abi/infusion/InfusionRouter.json +0 -442
  65. package/build/abi/maker-psm/pot.json +0 -322
  66. package/build/abi/maker-psm/psm.json +0 -243
  67. package/build/abi/maker-psm/vat.json +0 -363
  68. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
  69. package/build/abi/quick-perps/fast-price-events.json +0 -70
  70. package/build/abi/quick-perps/fast-price-feed.json +0 -741
  71. package/build/abi/quick-perps/reader.json +0 -313
  72. package/build/abi/quick-perps/vault-price-feed.json +0 -323
  73. package/build/abi/quick-perps/vault.json +0 -1953
  74. package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
  75. package/build/abi/uniswap-v2/mdex-factory.json +0 -759
  76. package/build/abi/wUSDM.json +0 -757
  77. package/build/abi/zrx.v2.json +0 -1967
  78. package/build/abi/zrx.v3.json +0 -3454
  79. package/build/abi/zrx.v4.json +0 -2193
  80. package/build/dex/OneInchLp.d.ts +0 -24
  81. package/build/dex/OneInchLp.js +0 -43
  82. package/build/dex/OneInchLp.js.map +0 -1
  83. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  84. package/build/dex/bProtocol/bProtocol.js +0 -56
  85. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  86. package/build/dex/bProtocol/types.d.ts +0 -11
  87. package/build/dex/bProtocol/types.js +0 -8
  88. package/build/dex/bProtocol/types.js.map +0 -1
  89. package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
  90. package/build/dex/ekubo/pools/base-pool.js +0 -184
  91. package/build/dex/ekubo/pools/base-pool.js.map +0 -1
  92. package/build/dex/ekubo/pools/iface.d.ts +0 -46
  93. package/build/dex/ekubo/pools/iface.js +0 -75
  94. package/build/dex/ekubo/pools/iface.js.map +0 -1
  95. package/build/dex/ekubo/pools/math/price.d.ts +0 -7
  96. package/build/dex/ekubo/pools/math/price.js +0 -112
  97. package/build/dex/ekubo/pools/math/price.js.map +0 -1
  98. package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
  99. package/build/dex/ekubo/pools/oracle-pool.js +0 -19
  100. package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
  101. package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
  102. package/build/dex/ekubo/pools/pool-utils.js +0 -240
  103. package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
  104. package/build/dex/idle-dao/config.d.ts +0 -5
  105. package/build/dex/idle-dao/config.js +0 -24
  106. package/build/dex/idle-dao/config.js.map +0 -1
  107. package/build/dex/idle-dao/idle-dao.d.ts +0 -42
  108. package/build/dex/idle-dao/idle-dao.js +0 -279
  109. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  110. package/build/dex/idle-dao/token_list.d.ts +0 -4
  111. package/build/dex/idle-dao/token_list.js +0 -289
  112. package/build/dex/idle-dao/token_list.js.map +0 -1
  113. package/build/dex/idle-dao/tokens.d.ts +0 -9
  114. package/build/dex/idle-dao/tokens.js +0 -68
  115. package/build/dex/idle-dao/tokens.js.map +0 -1
  116. package/build/dex/idle-dao/types.d.ts +0 -35
  117. package/build/dex/idle-dao/types.js +0 -11
  118. package/build/dex/idle-dao/types.js.map +0 -1
  119. package/build/dex/idle-dao/utils.d.ts +0 -8
  120. package/build/dex/idle-dao/utils.js +0 -149
  121. package/build/dex/idle-dao/utils.js.map +0 -1
  122. package/build/dex/infusion/config.d.ts +0 -3
  123. package/build/dex/infusion/config.js +0 -20
  124. package/build/dex/infusion/config.js.map +0 -1
  125. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  126. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  127. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  128. package/build/dex/infusion/infusion.d.ts +0 -51
  129. package/build/dex/infusion/infusion.js +0 -500
  130. package/build/dex/infusion/infusion.js.map +0 -1
  131. package/build/dex/infusion/types.d.ts +0 -45
  132. package/build/dex/infusion/types.js +0 -3
  133. package/build/dex/infusion/types.js.map +0 -1
  134. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  135. package/build/dex/infusion/utils/isStablePair.js +0 -18
  136. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
  137. package/build/dex/jarvis.d.ts +0 -56
  138. package/build/dex/jarvis.js +0 -163
  139. package/build/dex/jarvis.js.map +0 -1
  140. package/build/dex/mStable.d.ts +0 -44
  141. package/build/dex/mStable.js +0 -75
  142. package/build/dex/mStable.js.map +0 -1
  143. package/build/dex/maker-psm/config.d.ts +0 -11
  144. package/build/dex/maker-psm/config.js +0 -53
  145. package/build/dex/maker-psm/config.js.map +0 -1
  146. package/build/dex/maker-psm/maker-psm.d.ts +0 -103
  147. package/build/dex/maker-psm/maker-psm.js +0 -493
  148. package/build/dex/maker-psm/maker-psm.js.map +0 -1
  149. package/build/dex/maker-psm/types.d.ts +0 -39
  150. package/build/dex/maker-psm/types.js +0 -3
  151. package/build/dex/maker-psm/types.js.map +0 -1
  152. package/build/dex/onebit/onebit.d.ts +0 -16
  153. package/build/dex/onebit/onebit.js +0 -61
  154. package/build/dex/onebit/onebit.js.map +0 -1
  155. package/build/dex/onebit/types.d.ts +0 -14
  156. package/build/dex/onebit/types.js +0 -8
  157. package/build/dex/onebit/types.js.map +0 -1
  158. package/build/dex/quick-perps/config.d.ts +0 -11
  159. package/build/dex/quick-perps/config.js +0 -27
  160. package/build/dex/quick-perps/config.js.map +0 -1
  161. package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
  162. package/build/dex/quick-perps/fast-price-feed.js +0 -184
  163. package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
  164. package/build/dex/quick-perps/pool.d.ts +0 -21
  165. package/build/dex/quick-perps/pool.js +0 -229
  166. package/build/dex/quick-perps/pool.js.map +0 -1
  167. package/build/dex/quick-perps/quick-perps.d.ts +0 -53
  168. package/build/dex/quick-perps/quick-perps.js +0 -247
  169. package/build/dex/quick-perps/quick-perps.js.map +0 -1
  170. package/build/dex/quick-perps/types.d.ts +0 -98
  171. package/build/dex/quick-perps/types.js +0 -3
  172. package/build/dex/quick-perps/types.js.map +0 -1
  173. package/build/dex/quick-perps/usdq.d.ts +0 -15
  174. package/build/dex/quick-perps/usdq.js +0 -62
  175. package/build/dex/quick-perps/usdq.js.map +0 -1
  176. package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
  177. package/build/dex/quick-perps/vault-price-feed.js +0 -203
  178. package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
  179. package/build/dex/quick-perps/vault-utils.d.ts +0 -8
  180. package/build/dex/quick-perps/vault-utils.js +0 -42
  181. package/build/dex/quick-perps/vault-utils.js.map +0 -1
  182. package/build/dex/quick-perps/vault.d.ts +0 -46
  183. package/build/dex/quick-perps/vault.js +0 -182
  184. package/build/dex/quick-perps/vault.js.map +0 -1
  185. package/build/dex/se-vlr/config.d.ts +0 -3
  186. package/build/dex/se-vlr/config.js +0 -24
  187. package/build/dex/se-vlr/config.js.map +0 -1
  188. package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
  189. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  190. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  191. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  192. package/build/dex/se-vlr/se-vlr.js +0 -131
  193. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  194. package/build/dex/se-vlr/types.d.ts +0 -6
  195. package/build/dex/se-vlr/types.js +0 -3
  196. package/build/dex/se-vlr/types.js.map +0 -1
  197. package/build/dex/shell.d.ts +0 -25
  198. package/build/dex/shell.js +0 -41
  199. package/build/dex/shell.js.map +0 -1
  200. package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
  201. package/build/dex/solidly/forks-override/aerodrome.js +0 -46
  202. package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
  203. package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
  204. package/build/dex/solidly/forks-override/chronos.js +0 -141
  205. package/build/dex/solidly/forks-override/chronos.js.map +0 -1
  206. package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
  207. package/build/dex/solidly/forks-override/usdfi.js +0 -15
  208. package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
  209. package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
  210. package/build/dex/solidly/forks-override/velocimeter.js +0 -77
  211. package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
  212. package/build/dex/trader-joe-v2.d.ts +0 -40
  213. package/build/dex/trader-joe-v2.js +0 -74
  214. package/build/dex/trader-joe-v2.js.map +0 -1
  215. package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
  216. package/build/dex/uniswap-v2/dfyn.js +0 -61
  217. package/build/dex/uniswap-v2/dfyn.js.map +0 -1
  218. package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
  219. package/build/dex/uniswap-v2/excalibur.js +0 -47
  220. package/build/dex/uniswap-v2/excalibur.js.map +0 -1
  221. package/build/dex/uniswap-v2/mdex.d.ts +0 -24
  222. package/build/dex/uniswap-v2/mdex.js +0 -50
  223. package/build/dex/uniswap-v2/mdex.js.map +0 -1
  224. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
  225. package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
  226. package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
  227. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  228. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  229. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  230. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
  231. package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
  232. package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
  233. package/build/dex/usual-bond/config.d.ts +0 -3
  234. package/build/dex/usual-bond/config.js +0 -13
  235. package/build/dex/usual-bond/config.js.map +0 -1
  236. package/build/dex/usual-bond/types.d.ts +0 -7
  237. package/build/dex/usual-bond/types.js +0 -3
  238. package/build/dex/usual-bond/types.js.map +0 -1
  239. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  240. package/build/dex/usual-bond/usual-bond.js +0 -176
  241. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  242. package/build/dex/wusdm/config.d.ts +0 -3
  243. package/build/dex/wusdm/config.js +0 -43
  244. package/build/dex/wusdm/config.js.map +0 -1
  245. package/build/dex/wusdm/constants.d.ts +0 -2
  246. package/build/dex/wusdm/constants.js +0 -6
  247. package/build/dex/wusdm/constants.js.map +0 -1
  248. package/build/dex/wusdm/types.d.ts +0 -18
  249. package/build/dex/wusdm/types.js +0 -11
  250. package/build/dex/wusdm/types.js.map +0 -1
  251. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  252. package/build/dex/wusdm/wusdm-pool.js +0 -74
  253. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  254. package/build/dex/wusdm/wusdm.d.ts +0 -46
  255. package/build/dex/wusdm/wusdm.js +0 -243
  256. package/build/dex/wusdm/wusdm.js.map +0 -1
  257. package/build/dex/zerox/config.d.ts +0 -2
  258. package/build/dex/zerox/config.js +0 -33
  259. package/build/dex/zerox/config.js.map +0 -1
  260. package/build/dex/zerox/index.d.ts +0 -22
  261. package/build/dex/zerox/index.js +0 -225
  262. package/build/dex/zerox/index.js.map +0 -1
  263. package/build/dex/zerox/order.d.ts +0 -88
  264. package/build/dex/zerox/order.js +0 -53
  265. package/build/dex/zerox/order.js.map +0 -1
  266. package/build/dex/zerox/types.d.ts +0 -73
  267. package/build/dex/zerox/types.js +0 -21
  268. package/build/dex/zerox/types.js.map +0 -1
@@ -0,0 +1,517 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TenderlySimulator = void 0;
40
+ /* eslint-disable no-console */
41
+ require("dotenv/config");
42
+ const axios_1 = __importDefault(require("axios"));
43
+ const ethers_1 = require("ethers");
44
+ const fs = __importStar(require("fs/promises"));
45
+ const path = __importStar(require("path"));
46
+ const constants_1 = require("./constants");
47
+ const lodash_1 = require("lodash");
48
+ let TENDERLY_TOKEN = process.env.TENDERLY_TOKEN;
49
+ let TENDERLY_ACCOUNT_ID = process.env.TENDERLY_ACCOUNT_ID;
50
+ let TENDERLY_PROJECT = process.env.TENDERLY_PROJECT;
51
+ let TENDERLY_VNET_ID = process.env.TENDERLY_VNET_ID;
52
+ class TokenStorageSlotsCache {
53
+ static cache = null;
54
+ static TOKEN_FILE_STORAGE_SLOTS = null;
55
+ static TOKEN_STORAGE_SLOTS_FILEPATH = path.join(__dirname, '../tests/token-storage-slots.json');
56
+ static setRedisCache(cache) {
57
+ TokenStorageSlotsCache.cache = cache ?? null;
58
+ }
59
+ static redisKey(chainId) {
60
+ return `token_storage_slots_${chainId}`;
61
+ }
62
+ static async loadTokenFileStorageSlots() {
63
+ return JSON.parse(await fs.readFile(TokenStorageSlotsCache.TOKEN_STORAGE_SLOTS_FILEPATH, {
64
+ encoding: 'utf-8',
65
+ }));
66
+ }
67
+ static async saveTokenFileStorageSlots() {
68
+ await fs.writeFile(TokenStorageSlotsCache.TOKEN_STORAGE_SLOTS_FILEPATH, JSON.stringify(TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS, null, 2) +
69
+ '\n', { encoding: 'utf-8' });
70
+ }
71
+ static async getTokenStorageSlots(chainId, token) {
72
+ const normalizedToken = token.toLowerCase();
73
+ if (TokenStorageSlotsCache.cache) {
74
+ try {
75
+ const cached = await TokenStorageSlotsCache.cache.hget(TokenStorageSlotsCache.redisKey(chainId), normalizedToken);
76
+ if (cached) {
77
+ return JSON.parse(cached);
78
+ }
79
+ }
80
+ catch (e) {
81
+ // Redis error — fall through to return null
82
+ }
83
+ return null;
84
+ }
85
+ if (!TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS) {
86
+ TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS =
87
+ await TokenStorageSlotsCache.loadTokenFileStorageSlots();
88
+ }
89
+ return (TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId]?.[normalizedToken] ?? null);
90
+ }
91
+ static async setTokenStorageSlots(chainId, token, slots) {
92
+ const normalizedToken = token.toLowerCase();
93
+ if (TokenStorageSlotsCache.cache) {
94
+ void TokenStorageSlotsCache.cache.hset(TokenStorageSlotsCache.redisKey(chainId), normalizedToken, JSON.stringify(slots));
95
+ return;
96
+ }
97
+ if (!TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS) {
98
+ TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS =
99
+ await TokenStorageSlotsCache.loadTokenFileStorageSlots();
100
+ }
101
+ TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS ||= {};
102
+ TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId] ||= {};
103
+ TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId][normalizedToken] =
104
+ slots;
105
+ void TokenStorageSlotsCache.saveTokenFileStorageSlots();
106
+ }
107
+ }
108
+ class TenderlySimulator {
109
+ // public constants
110
+ static DEFAULT_OWNER = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
111
+ static DEFAULT_SPENDER = '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
112
+ // singleton
113
+ static instance;
114
+ constructor() { }
115
+ static getInstance(cache, tenderlyToken, tenderlyProject, tenderlyAccountId) {
116
+ if (!TenderlySimulator.instance) {
117
+ TenderlySimulator.instance = new TenderlySimulator();
118
+ }
119
+ if (cache) {
120
+ TokenStorageSlotsCache.setRedisCache(cache);
121
+ }
122
+ if (tenderlyToken) {
123
+ TENDERLY_TOKEN = tenderlyToken;
124
+ }
125
+ if (tenderlyProject) {
126
+ TENDERLY_PROJECT = tenderlyProject;
127
+ }
128
+ if (tenderlyAccountId) {
129
+ TENDERLY_ACCOUNT_ID = tenderlyAccountId;
130
+ }
131
+ return TenderlySimulator.instance;
132
+ }
133
+ async simulateTransaction(request, forceSimulationAPI = false) {
134
+ if (TENDERLY_VNET_ID && !forceSimulationAPI) {
135
+ return this.simulateWithTenderlyVNet(request);
136
+ }
137
+ else {
138
+ return this.simulateWithTenderlySimulationAPI(request);
139
+ }
140
+ }
141
+ async simulateWithTenderlySimulationAPI(request) {
142
+ const data = {
143
+ network_id: request.chainId,
144
+ from: request.from,
145
+ to: request.to,
146
+ input: request.data,
147
+ value: request.value,
148
+ save: true,
149
+ save_if_fails: true,
150
+ state_objects: request.stateOverride,
151
+ block_number: request.blockNumber,
152
+ };
153
+ console.log('Sending transaction simulation with params:');
154
+ console.log(JSON.stringify(data, null, 2));
155
+ const { data: { transaction, simulation }, } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/simulate`, data, {
156
+ headers: {
157
+ 'X-Access-Key': TENDERLY_TOKEN,
158
+ },
159
+ });
160
+ const url = `https://dashboard.tenderly.co/${TENDERLY_ACCOUNT_ID}/${TENDERLY_PROJECT}/simulator/${simulation.id}`;
161
+ console.log('Successfully simulated a transaction:');
162
+ console.log(`Simulation URL - ${url}`);
163
+ return { transaction, simulation };
164
+ }
165
+ async simulateWithTenderlyVNet(request) {
166
+ const data = {
167
+ network_id: request.chainId,
168
+ from: request.from,
169
+ to: request.to,
170
+ input: request.data,
171
+ value: request.value,
172
+ save: true,
173
+ save_if_fails: true,
174
+ state_objects: request.stateOverride,
175
+ block_number: request.blockNumber,
176
+ };
177
+ console.log('Sending transaction simulation with params:');
178
+ console.log(JSON.stringify(data, null, 2));
179
+ const { data: { transaction, simulation }, } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/testnet/${TENDERLY_VNET_ID}/simulate`, data, {
180
+ headers: {
181
+ 'X-Access-Key': TENDERLY_TOKEN,
182
+ },
183
+ });
184
+ const url = `https://dashboard.tenderly.co/${TENDERLY_ACCOUNT_ID}/${TENDERLY_PROJECT}/testnet/${TENDERLY_VNET_ID}/simulator/${simulation.id}`;
185
+ console.log('Successfully simulated a transaction:');
186
+ console.log(`Simulation URL - ${url}`);
187
+ return { transaction, simulation };
188
+ }
189
+ async getSimulatedTransactionDetails(id) {
190
+ try {
191
+ const { data } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/simulations/${id}`, {}, { headers: { 'X-Access-Key': TENDERLY_TOKEN } });
192
+ return data;
193
+ }
194
+ catch (e) {
195
+ console.error(e);
196
+ return null;
197
+ }
198
+ }
199
+ getSLOADCalls = (callTrace, parentCall = null) => {
200
+ const results = [];
201
+ if (callTrace.call_type === 'SLOAD') {
202
+ results.push({ ...callTrace, parentCall });
203
+ }
204
+ if (callTrace.calls) {
205
+ for (const call of callTrace.calls) {
206
+ results.push(...this.getSLOADCalls(call, callTrace));
207
+ }
208
+ }
209
+ return results;
210
+ };
211
+ /**
212
+ *
213
+ * @param balanceOfSlot storage slot of `balanceOf` mapping
214
+ * @param owner account's address
215
+ * @param isVyper `true` if contract is written in Vyper
216
+ */
217
+ calculateAddressBalanceSlot(balanceOfSlot, owner, isVyper = false) {
218
+ return isVyper
219
+ ? this.calculateVyperAddressBalanceSlot(balanceOfSlot, owner)
220
+ : this.calculateSolidityAddressBalanceSlot(balanceOfSlot, owner);
221
+ }
222
+ /**
223
+ *
224
+ * @param balanceOfSlot storage slot of `balanceOf` mapping
225
+ * @param owner account's address
226
+ */
227
+ calculateSolidityAddressBalanceSlot(balanceOfSlot, owner) {
228
+ return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(owner, 32), balanceOfSlot]));
229
+ }
230
+ /**
231
+ *
232
+ * @param balanceOfSlot storage slot of `balanceOf` mapping
233
+ * @param owner account's address
234
+ */
235
+ calculateVyperAddressBalanceSlot(balanceOfSlot, owner) {
236
+ return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([balanceOfSlot, ethers_1.ethers.utils.hexZeroPad(owner, 32)]));
237
+ }
238
+ /**
239
+ *
240
+ * @param allowanceSlot storage slot of `allowance` mapping
241
+ * @param owner account's address
242
+ * @param spender spender's address
243
+ * @param isVyper `true` if contract is written in Vyper
244
+ */
245
+ calculateAddressAllowanceSlot(allowanceSlot, owner, spender, isVyper = false) {
246
+ return isVyper
247
+ ? this.calculateVyperAddressAllowanceSlot(allowanceSlot, owner, spender)
248
+ : this.calculateSolidityAddressAllowanceSlot(allowanceSlot, owner, spender);
249
+ }
250
+ /**
251
+ *
252
+ * @param allowanceSlot storage slot of `allowance` mapping
253
+ * @param owner account's address
254
+ * @param spender spender's address
255
+ */
256
+ calculateSolidityAddressAllowanceSlot(allowanceSlot, owner, spender) {
257
+ const slotHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
258
+ ethers_1.ethers.utils.hexZeroPad(owner, 32),
259
+ ethers_1.ethers.utils.hexZeroPad(allowanceSlot, 32),
260
+ ]));
261
+ return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(spender, 32), slotHash]));
262
+ }
263
+ /**
264
+ *
265
+ * @param allowanceSlot storage slot of `allowance` mapping
266
+ * @param owner account's address
267
+ * @param spender spender's address
268
+ */
269
+ calculateVyperAddressAllowanceSlot(allowanceSlot, owner, spender) {
270
+ const slotHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
271
+ ethers_1.ethers.utils.hexZeroPad(allowanceSlot, 32),
272
+ ethers_1.ethers.utils.hexZeroPad(owner, 32),
273
+ ]));
274
+ return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([slotHash, ethers_1.ethers.utils.hexZeroPad(spender, 32)]));
275
+ }
276
+ buildBalanceOfSimulationRequest(chainId, token, owner) {
277
+ const iface = new ethers_1.ethers.utils.Interface([
278
+ 'function balanceOf(address owner) view returns (uint)',
279
+ ]);
280
+ return {
281
+ from: ethers_1.ethers.constants.AddressZero,
282
+ to: token,
283
+ data: iface.encodeFunctionData('balanceOf', [owner]),
284
+ chainId,
285
+ };
286
+ }
287
+ buildAllowanceSimulationRequest(chainId, token, owner, spender) {
288
+ const iface = new ethers_1.ethers.utils.Interface([
289
+ 'function allowance(address owner, address spender) view returns (uint)',
290
+ ]);
291
+ return {
292
+ from: ethers_1.ethers.constants.AddressZero,
293
+ to: token,
294
+ data: iface.encodeFunctionData('allowance', [owner, spender]),
295
+ chainId,
296
+ };
297
+ }
298
+ /**
299
+ * Finds the slot of the `balanceOf` mapping in given token contract's storage.
300
+ * Supports `Solidity` and `Vyper` contracts
301
+ * @param chainId token chain id
302
+ * @param token token address
303
+ */
304
+ async findTokenBalanceOfSlot(chainId, token) {
305
+ const account = TenderlySimulator.DEFAULT_OWNER;
306
+ const balanceOfSimulationRequest = this.buildBalanceOfSimulationRequest(chainId, token, account);
307
+ const { simulation: { id: simulationId }, } = await this.simulateTransaction(balanceOfSimulationRequest, true);
308
+ const simulationDetails = await this.getSimulatedTransactionDetails(simulationId);
309
+ if (!simulationDetails) {
310
+ throw `No simulation with id ${simulationId} details found`;
311
+ }
312
+ const callTrace = simulationDetails.transaction.transaction_info.call_trace;
313
+ const sloadCalls = this.getSLOADCalls(callTrace);
314
+ // token's storage slots that were read during the `balanceOf` call
315
+ const readSlots = sloadCalls
316
+ .map(call => ({
317
+ slot: call.storage_slot?.[0],
318
+ address: call.storage_address,
319
+ parentCallType: call.parentCall ? call.parentCall.call_type : null,
320
+ }))
321
+ .filter(({ slot }) => !!slot);
322
+ const startingPoints = [
323
+ // regular contract
324
+ 0n,
325
+ // ERC20Upgradeable
326
+ BigInt('0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00'),
327
+ ];
328
+ for (const startingPoint of startingPoints) {
329
+ for (let i = startingPoint; i < startingPoint + 1000n; i += 1n) {
330
+ const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
331
+ // try solidity slot
332
+ const solitidyBalanceOfSlot = this.calculateSolidityAddressBalanceSlot(candidateSlot, account);
333
+ const foundSoliditySlot = readSlots.find(({ slot }) => slot === solitidyBalanceOfSlot);
334
+ if (foundSoliditySlot) {
335
+ return foundSoliditySlot.address !== token.toLowerCase() &&
336
+ foundSoliditySlot.parentCallType !== 'DELEGATECALL'
337
+ ? { slot: candidateSlot, stateProxy: foundSoliditySlot.address }
338
+ : { slot: candidateSlot };
339
+ }
340
+ // try vyper slot
341
+ const vyperBalanceOfSlot = this.calculateVyperAddressBalanceSlot(candidateSlot, account);
342
+ const foundVyperSlot = readSlots.find(({ slot }) => slot === vyperBalanceOfSlot);
343
+ if (foundVyperSlot) {
344
+ return foundVyperSlot.address === token.toLowerCase() &&
345
+ foundVyperSlot.parentCallType !== 'DELEGATECALL'
346
+ ? {
347
+ slot: candidateSlot,
348
+ isVyper: true,
349
+ stateProxy: foundVyperSlot.address,
350
+ }
351
+ : { slot: candidateSlot, isVyper: true };
352
+ }
353
+ }
354
+ }
355
+ throw new Error(`Could not find a 'balanceOf' mapping slot for token ${token} on chain ${chainId}`);
356
+ }
357
+ /**
358
+ * Finds the slot of the `allowance` mapping in given token contract's storage
359
+ * Supports `Solidity` and `Vyper` contracts
360
+ * @param chainId token chain id
361
+ * @param token token address
362
+ */
363
+ async findTokenAllowanceSlot(chainId, token) {
364
+ const account = TenderlySimulator.DEFAULT_OWNER;
365
+ const spender = TenderlySimulator.DEFAULT_SPENDER;
366
+ const allowanceSimulationRequest = this.buildAllowanceSimulationRequest(chainId, token, account, spender);
367
+ const { simulation: { id: simulationId }, } = await this.simulateTransaction(allowanceSimulationRequest, true);
368
+ const simulationDetails = await this.getSimulatedTransactionDetails(simulationId);
369
+ if (!simulationDetails) {
370
+ throw `No simulation with id ${simulationId} details found`;
371
+ }
372
+ const callTrace = simulationDetails.transaction.transaction_info.call_trace;
373
+ // console.log(callTrace);
374
+ const sloadCalls = this.getSLOADCalls(callTrace);
375
+ // token's storage slots that were read during the `allowance` call
376
+ const readSlots = sloadCalls
377
+ .map(call => ({
378
+ slot: call.storage_slot?.[0],
379
+ address: call.storage_address,
380
+ parentCallType: call.parentCall ? call.parentCall.call_type : null,
381
+ }))
382
+ .filter(({ slot }) => !!slot);
383
+ console.log(readSlots);
384
+ const startingPoints = [
385
+ // regular contract
386
+ 0n,
387
+ // ERC20Upgradeable
388
+ BigInt('0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00'),
389
+ ];
390
+ for (const init of startingPoints) {
391
+ for (let i = init; i < init + 1000n; i += 1n) {
392
+ const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
393
+ // try solidity
394
+ const solidityAllowanceSlot = this.calculateSolidityAddressAllowanceSlot(candidateSlot, account, spender);
395
+ const foundSoliditySlot = readSlots.find(({ slot }) => solidityAllowanceSlot === slot);
396
+ if (foundSoliditySlot) {
397
+ return token.toLowerCase() !== foundSoliditySlot.address &&
398
+ foundSoliditySlot.parentCallType !== 'DELEGATECALL'
399
+ ? {
400
+ slot: candidateSlot,
401
+ stateProxy: foundSoliditySlot.address,
402
+ }
403
+ : {
404
+ slot: candidateSlot,
405
+ };
406
+ }
407
+ // try vyper
408
+ const vyperAllowanceSlot = this.calculateVyperAddressAllowanceSlot(candidateSlot, account, spender);
409
+ const foundVyperSlot = readSlots.find(({ slot }) => vyperAllowanceSlot === slot);
410
+ if (foundVyperSlot) {
411
+ return token.toLowerCase() !== foundVyperSlot.address &&
412
+ foundVyperSlot.parentCallType !== 'DELEGATECALL'
413
+ ? {
414
+ slot: candidateSlot,
415
+ stateProxy: foundVyperSlot.address,
416
+ }
417
+ : {
418
+ slot: candidateSlot,
419
+ };
420
+ }
421
+ }
422
+ }
423
+ throw new Error(`Could not find a 'allowance' mapping slot for token ${token} on chain ${chainId}`);
424
+ }
425
+ /**
426
+ * Returns storage slots for the given token contract.
427
+ * @param chainId Token chain ID
428
+ * @param token Token address. Doesn't have to be normalized
429
+ */
430
+ async getTokenStorageSlots(chainId, token) {
431
+ const normalizedToken = token.toLowerCase();
432
+ if (normalizedToken === constants_1.ETHER_ADDRESS) {
433
+ throw new Error('Cannot provide storage slots for native token');
434
+ }
435
+ // check cache
436
+ const cachedSlots = await TokenStorageSlotsCache.getTokenStorageSlots(chainId, normalizedToken);
437
+ // return if cached
438
+ if (cachedSlots) {
439
+ return cachedSlots;
440
+ }
441
+ // find the slots
442
+ const [balanceSlot, allowanceSlot] = await Promise.all([
443
+ this.findTokenBalanceOfSlot(chainId, token),
444
+ this.findTokenAllowanceSlot(chainId, token),
445
+ ]);
446
+ // save the slots and return
447
+ const slots = {
448
+ balanceSlot: balanceSlot.slot,
449
+ allowanceSlot: allowanceSlot.slot,
450
+ isVyper: balanceSlot.isVyper,
451
+ stateProxy: balanceSlot.stateProxy,
452
+ };
453
+ // no need to await
454
+ void TokenStorageSlotsCache.setTokenStorageSlots(chainId, token, slots);
455
+ return slots;
456
+ }
457
+ /**
458
+ * Adds native balance override to an existing `StateOverride` object
459
+ * @param stateOverride object to add the override to
460
+ * @param account address to be given the balance
461
+ * @param amount token amount in wei
462
+ */
463
+ addBalanceOverride(stateOverride, account, amount) {
464
+ // add the balance override
465
+ stateOverride[account] ||= {};
466
+ stateOverride[account].balance = amount.toString();
467
+ }
468
+ /**
469
+ * Adds token balance override to an existing `StateOverride` object
470
+ * @param stateOverride object to add the override to
471
+ * @param chainId token chain ID
472
+ * @param token token address
473
+ * @param account address to be given the balance
474
+ * @param amount token amount in wei
475
+ */
476
+ async addTokenBalanceOverride(stateOverride, chainId, token, account, amount) {
477
+ // get mapping slots
478
+ const tokenSlots = await this.getTokenStorageSlots(chainId, token);
479
+ // calculate balance slot
480
+ const slotToOverride = this.calculateAddressBalanceSlot(tokenSlots.balanceSlot, account, tokenSlots.isVyper);
481
+ // add the balance override
482
+ const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
483
+ stateOverride[address] ||= {};
484
+ stateOverride[address].storage ||= {};
485
+ stateOverride[address].storage[slotToOverride] =
486
+ ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]);
487
+ if (tokenSlots.additionalOverrides) {
488
+ (0, lodash_1.merge)(stateOverride, tokenSlots.additionalOverrides);
489
+ }
490
+ }
491
+ /**
492
+ * Adds token allowance override to an existing `StateOverride` object
493
+ * @param stateOverride object to add the override to
494
+ * @param chainId token chain ID
495
+ * @param token token address
496
+ * @param account owner address
497
+ * @param spender spender address
498
+ * @param amount token amount in wei
499
+ */
500
+ async addAllowanceOverride(stateOverride, chainId, token, account, spender, amount) {
501
+ // get mapping slots
502
+ const tokenSlots = await this.getTokenStorageSlots(chainId, token);
503
+ // calculate allowance slot
504
+ const slotToOverride = this.calculateAddressAllowanceSlot(tokenSlots.allowanceSlot, account, spender, tokenSlots.isVyper);
505
+ // add the allowance override
506
+ const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
507
+ stateOverride[address] ||= {};
508
+ stateOverride[address].storage ||= {};
509
+ stateOverride[address].storage[slotToOverride] =
510
+ ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]);
511
+ if (tokenSlots.additionalOverrides) {
512
+ (0, lodash_1.merge)(stateOverride, tokenSlots.additionalOverrides);
513
+ }
514
+ }
515
+ }
516
+ exports.TenderlySimulator = TenderlySimulator;
517
+ //# sourceMappingURL=tenderly-simulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenderly-simulation.js","sourceRoot":"","sources":["../src/tenderly-simulation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "4.8.26",
3
+ "version": "4.8.27",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",