@paraswap/dex-lib 3.8.30 → 3.8.32-inception

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 (250) hide show
  1. package/build/abi/AaveV1_lending_pool.json +27 -0
  2. package/build/abi/Aave_GSM.json +751 -0
  3. package/build/abi/aave-gsm/Aave_GSM.json +751 -0
  4. package/build/abi/aave-gsm/IFeeStrategy.json +78 -0
  5. package/build/abi/inception/inception-ineth-pool.json +1062 -0
  6. package/build/abi/inception/inception-ineth.json +609 -0
  7. package/build/abi/inception/inception-ratio-feed.json +93 -0
  8. package/build/abi/inception/inception-vault.json +991 -0
  9. package/build/abi/platypus/asset.json +490 -0
  10. package/build/abi/platypus/avax-pool.json +820 -0
  11. package/build/abi/platypus/oracle.json +119 -0
  12. package/build/abi/platypus/pool.json +677 -0
  13. package/build/abi/smardex/all/smardex-router.json +648 -0
  14. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  15. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  16. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  17. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  18. package/build/abi/stkGHO.json +1131 -0
  19. package/build/abi/swaap-v1/pool.json +1346 -0
  20. package/build/abi/usual-bond/usd0pp.abi.json +867 -0
  21. package/build/dex/aave-gsm/aave-gsm-pool.d.ts +28 -0
  22. package/build/dex/aave-gsm/aave-gsm-pool.js +117 -0
  23. package/build/dex/aave-gsm/aave-gsm-pool.js.map +1 -0
  24. package/build/dex/aave-gsm/aave-gsm.d.ts +43 -0
  25. package/build/dex/aave-gsm/aave-gsm.js +306 -0
  26. package/build/dex/aave-gsm/aave-gsm.js.map +1 -0
  27. package/build/dex/aave-gsm/config.d.ts +3 -0
  28. package/build/dex/aave-gsm/config.js +17 -0
  29. package/build/dex/aave-gsm/config.js.map +1 -0
  30. package/build/dex/aave-gsm/types.d.ts +18 -0
  31. package/build/dex/aave-gsm/types.js +3 -0
  32. package/build/dex/aave-gsm/types.js.map +1 -0
  33. package/build/dex/aave-v1/aave-v1.d.ts +34 -0
  34. package/build/dex/aave-v1/aave-v1.js +180 -0
  35. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  36. package/build/dex/aave-v1/config.d.ts +11 -0
  37. package/build/dex/aave-v1/config.js +20 -0
  38. package/build/dex/aave-v1/config.js.map +1 -0
  39. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  40. package/build/dex/aave-v1/tokens.d.ts +3 -0
  41. package/build/dex/aave-v1/tokens.js +50 -0
  42. package/build/dex/aave-v1/tokens.js.map +1 -0
  43. package/build/dex/aave-v1/types.d.ts +12 -0
  44. package/build/dex/aave-v1/types.js +3 -0
  45. package/build/dex/aave-v1/types.js.map +1 -0
  46. package/build/dex/idle-dao/idle-dao-pool.d.ts +56 -0
  47. package/build/dex/idle-dao/idle-dao-pool.js +176 -0
  48. package/build/dex/idle-dao/idle-dao-pool.js.map +1 -0
  49. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +16 -0
  50. package/build/dex/idle-dao/idle-dao-pooling-pool.js +57 -0
  51. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +1 -0
  52. package/build/dex/idle-dao/scripts.d.ts +9 -0
  53. package/build/dex/idle-dao/scripts.js +552 -0
  54. package/build/dex/idle-dao/scripts.js.map +1 -0
  55. package/build/dex/inception/config.d.ts +4 -0
  56. package/build/dex/inception/config.js +109 -0
  57. package/build/dex/inception/config.js.map +1 -0
  58. package/build/dex/inception/inception-event-pool.d.ts +16 -0
  59. package/build/dex/inception/inception-event-pool.js +48 -0
  60. package/build/dex/inception/inception-event-pool.js.map +1 -0
  61. package/build/dex/inception/inception-native.d.ts +43 -0
  62. package/build/dex/inception/inception-native.js +131 -0
  63. package/build/dex/inception/inception-native.js.map +1 -0
  64. package/build/dex/inception/inception-pool.d.ts +18 -0
  65. package/build/dex/inception/inception-pool.js +32 -0
  66. package/build/dex/inception/inception-pool.js.map +1 -0
  67. package/build/dex/inception/inception-price-feed.d.ts +19 -0
  68. package/build/dex/inception/inception-price-feed.js +51 -0
  69. package/build/dex/inception/inception-price-feed.js.map +1 -0
  70. package/build/dex/inception/inception.d.ts +43 -0
  71. package/build/dex/inception/inception.js +180 -0
  72. package/build/dex/inception/inception.js.map +1 -0
  73. package/build/dex/inception/tokens.d.ts +9 -0
  74. package/build/dex/inception/tokens.js +28 -0
  75. package/build/dex/inception/tokens.js.map +1 -0
  76. package/build/dex/inception/types.d.ts +22 -0
  77. package/build/dex/inception/types.js +3 -0
  78. package/build/dex/inception/types.js.map +1 -0
  79. package/build/dex/inception/utils.d.ts +7 -0
  80. package/build/dex/inception/utils.js +58 -0
  81. package/build/dex/inception/utils.js.map +1 -0
  82. package/build/dex/index.js +6 -0
  83. package/build/dex/index.js.map +1 -1
  84. package/build/dex/platypus/asset.d.ts +14 -0
  85. package/build/dex/platypus/asset.js +97 -0
  86. package/build/dex/platypus/asset.js.map +1 -0
  87. package/build/dex/platypus/config.d.ts +11 -0
  88. package/build/dex/platypus/config.js +69 -0
  89. package/build/dex/platypus/config.js.map +1 -0
  90. package/build/dex/platypus/platypus.d.ts +63 -0
  91. package/build/dex/platypus/platypus.js +473 -0
  92. package/build/dex/platypus/platypus.js.map +1 -0
  93. package/build/dex/platypus/pool-avax.d.ts +8 -0
  94. package/build/dex/platypus/pool-avax.js +54 -0
  95. package/build/dex/platypus/pool-avax.js.map +1 -0
  96. package/build/dex/platypus/pool-base.d.ts +19 -0
  97. package/build/dex/platypus/pool-base.js +86 -0
  98. package/build/dex/platypus/pool-base.js.map +1 -0
  99. package/build/dex/platypus/pool-pure.d.ts +8 -0
  100. package/build/dex/platypus/pool-pure.js +37 -0
  101. package/build/dex/platypus/pool-pure.js.map +1 -0
  102. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  103. package/build/dex/platypus/pool-subscriber.js +167 -0
  104. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  105. package/build/dex/platypus/pool.d.ts +8 -0
  106. package/build/dex/platypus/pool.js +58 -0
  107. package/build/dex/platypus/pool.js.map +1 -0
  108. package/build/dex/platypus/types.d.ts +92 -0
  109. package/build/dex/platypus/types.js +10 -0
  110. package/build/dex/platypus/types.js.map +1 -0
  111. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  112. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  113. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  114. package/build/dex/smardex/config.d.ts +4 -0
  115. package/build/dex/smardex/config.js +64 -0
  116. package/build/dex/smardex/config.js.map +1 -0
  117. package/build/dex/smardex/constants.d.ts +18 -0
  118. package/build/dex/smardex/constants.js +33 -0
  119. package/build/dex/smardex/constants.js.map +1 -0
  120. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  121. package/build/dex/smardex/sdk/constants.js +13 -0
  122. package/build/dex/smardex/sdk/constants.js.map +1 -0
  123. package/build/dex/smardex/sdk/core.d.ts +113 -0
  124. package/build/dex/smardex/sdk/core.js +499 -0
  125. package/build/dex/smardex/sdk/core.js.map +1 -0
  126. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  127. package/build/dex/smardex/sdk/errors.js +22 -0
  128. package/build/dex/smardex/sdk/errors.js.map +1 -0
  129. package/build/dex/smardex/sdk/types.d.ts +62 -0
  130. package/build/dex/smardex/sdk/types.js +3 -0
  131. package/build/dex/smardex/sdk/types.js.map +1 -0
  132. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  133. package/build/dex/smardex/sdk/utils.js +133 -0
  134. package/build/dex/smardex/sdk/utils.js.map +1 -0
  135. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  136. package/build/dex/smardex/smardex-event-pool.js +119 -0
  137. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  138. package/build/dex/smardex/smardex.d.ts +65 -0
  139. package/build/dex/smardex/smardex.js +519 -0
  140. package/build/dex/smardex/smardex.js.map +1 -0
  141. package/build/dex/smardex/types.d.ts +55 -0
  142. package/build/dex/smardex/types.js +3 -0
  143. package/build/dex/smardex/types.js.map +1 -0
  144. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  145. package/build/dex/solidly/forks-override/cone.js +53 -0
  146. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  147. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  148. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  149. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  150. package/build/dex/stkgho/config.d.ts +3 -0
  151. package/build/dex/stkgho/config.js +14 -0
  152. package/build/dex/stkgho/config.js.map +1 -0
  153. package/build/dex/stkgho/stkgho-pool.d.ts +41 -0
  154. package/build/dex/stkgho/stkgho-pool.js +81 -0
  155. package/build/dex/stkgho/stkgho-pool.js.map +1 -0
  156. package/build/dex/stkgho/stkgho.d.ts +41 -0
  157. package/build/dex/stkgho/stkgho.js +163 -0
  158. package/build/dex/stkgho/stkgho.js.map +1 -0
  159. package/build/dex/stkgho/types.d.ts +11 -0
  160. package/build/dex/stkgho/types.js +3 -0
  161. package/build/dex/stkgho/types.js.map +1 -0
  162. package/build/dex/swaap-v1/config.d.ts +17 -0
  163. package/build/dex/swaap-v1/config.js +56 -0
  164. package/build/dex/swaap-v1/config.js.map +1 -0
  165. package/build/dex/swaap-v1/constants.d.ts +6 -0
  166. package/build/dex/swaap-v1/constants.js +17 -0
  167. package/build/dex/swaap-v1/constants.js.map +1 -0
  168. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  169. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  170. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  171. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  172. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  173. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  174. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  175. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  176. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  177. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  178. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  179. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  180. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  181. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  182. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  183. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  184. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  185. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  186. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  187. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  188. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  189. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  190. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  191. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  192. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  193. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  194. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  195. package/build/dex/swaap-v1/swaap-v1.d.ts +62 -0
  196. package/build/dex/swaap-v1/swaap-v1.js +379 -0
  197. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  198. package/build/dex/swaap-v1/types.d.ts +106 -0
  199. package/build/dex/swaap-v1/types.js +9 -0
  200. package/build/dex/swaap-v1/types.js.map +1 -0
  201. package/build/dex/usual-bond/config.d.ts +3 -0
  202. package/build/dex/usual-bond/config.js +13 -0
  203. package/build/dex/usual-bond/config.js.map +1 -0
  204. package/build/dex/usual-bond/types.d.ts +7 -0
  205. package/build/dex/usual-bond/types.js +3 -0
  206. package/build/dex/usual-bond/types.js.map +1 -0
  207. package/build/dex/usual-bond/usual-bond.d.ts +35 -0
  208. package/build/dex/usual-bond/usual-bond.js +162 -0
  209. package/build/dex/usual-bond/usual-bond.js.map +1 -0
  210. package/build/dex/zerox/index.d.ts +1 -1
  211. package/build/dex/zerox/index.js.map +1 -1
  212. package/package.json +2 -3
  213. package/src/abi/aave-gsm/Aave_GSM.json +751 -0
  214. package/src/abi/aave-gsm/IFeeStrategy.json +78 -0
  215. package/src/abi/inception/inception-ineth-pool.json +1062 -0
  216. package/src/abi/inception/inception-ineth.json +609 -0
  217. package/src/abi/inception/inception-ratio-feed.json +93 -0
  218. package/src/abi/inception/inception-vault.json +991 -0
  219. package/src/abi/stkGHO.json +1131 -0
  220. package/src/dex/aave-gsm/aave-gsm-e2e.test.ts +109 -0
  221. package/src/dex/aave-gsm/aave-gsm-events.test.ts +79 -0
  222. package/src/dex/aave-gsm/aave-gsm-integration.test.ts +522 -0
  223. package/src/dex/aave-gsm/aave-gsm-pool.ts +178 -0
  224. package/src/dex/aave-gsm/aave-gsm.ts +410 -0
  225. package/src/dex/aave-gsm/config.ts +16 -0
  226. package/src/dex/aave-gsm/types.ts +23 -0
  227. package/src/dex/inception/config.ts +109 -0
  228. package/src/dex/inception/inception-e2e.test.ts +67 -0
  229. package/src/dex/inception/inception-event-pool.ts +58 -0
  230. package/src/dex/inception/inception-events.test.ts +66 -0
  231. package/src/dex/inception/inception-integration.test.ts +76 -0
  232. package/src/dex/inception/inception.ts +238 -0
  233. package/src/dex/inception/tokens.ts +37 -0
  234. package/src/dex/inception/types.ts +26 -0
  235. package/src/dex/inception/utils.ts +71 -0
  236. package/src/dex/index.ts +6 -0
  237. package/src/dex/stkgho/config.ts +14 -0
  238. package/src/dex/stkgho/stkgho-e2e.test.ts +77 -0
  239. package/src/dex/stkgho/stkgho-events.test.ts +79 -0
  240. package/src/dex/stkgho/stkgho-integration.test.ts +226 -0
  241. package/src/dex/stkgho/stkgho-pool.ts +111 -0
  242. package/src/dex/stkgho/stkgho.ts +221 -0
  243. package/src/dex/stkgho/types.ts +14 -0
  244. package/tests/constants-e2e.ts +110 -7
  245. package/.idea/codeStyles/Project.xml +0 -59
  246. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  247. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  248. package/.idea/modules.xml +0 -8
  249. package/.idea/paraswap-dex-lib.iml +0 -12
  250. package/.idea/vcs.xml +0 -6
@@ -0,0 +1,109 @@
1
+ import { DexParams, PricePoolParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ import { Network } from '../../constants';
4
+
5
+ export const InceptionConfig: DexConfigMap<DexParams[]> = {
6
+ InceptionLRT: {
7
+ [Network.MAINNET]: [
8
+ {
9
+ symbol: 'instETH',
10
+ token: '0x7FA768E035F956c41d6aeaa3Bd857e7E5141CAd5',
11
+ vault: '0x814CC6B8fd2555845541FB843f37418b05977d8d',
12
+ baseToken: '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',
13
+ baseTokenSlug: 'STETH',
14
+ },
15
+ {
16
+ symbol: 'inrETH',
17
+ token: '0x80d69e79258FE9D056c822461c4eb0B4ca8802E2',
18
+ vault: '0x1Aa53BC4Beb82aDf7f5EDEE9e3bBF3434aD59F12',
19
+ baseToken: '0xae78736Cd615f374D3085123A210448E74Fc6393',
20
+ baseTokenSlug: 'rETH',
21
+ },
22
+ {
23
+ symbol: 'inoETH',
24
+ token: '0x9181f633e9b9f15a32d5e37094f4c93b333e0e92',
25
+ vault: '0x4878F636A9Aa314B776Ac51A25021C44CAF86bEd',
26
+ baseToken: '0x856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3',
27
+ baseTokenSlug: 'oETH',
28
+ },
29
+ {
30
+ symbol: 'inosETH',
31
+ token: '0xfD07fD5EBEa6F24888a397997E262179Bf494336',
32
+ vault: '0xA9F8c770661BeE8DF2D026edB1Cb6FF763C780FF',
33
+ baseToken: '0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38',
34
+ baseTokenSlug: 'osETH',
35
+ },
36
+ {
37
+ symbol: 'inankrETH',
38
+ token: '0xfa2629B9cF3998D52726994E0FcdB750224D8B9D',
39
+ vault: '0x36B429439AB227fAB170A4dFb3321741c8815e55',
40
+ baseToken: '0xE95A203B1a91a908F9B9CE46459d101078c2c3cb',
41
+ baseTokenSlug: 'AnkETH',
42
+ },
43
+ {
44
+ symbol: 'incbETH',
45
+ token: '0xbf19eead55a6b100667f04f8fbc5371e03e8ab2e',
46
+ vault: '0xfE715358368416E01d3A961D3a037b7359735d5e',
47
+ baseToken: '0xBe9895146f7AF43049ca1c1AE358B0541Ea49704',
48
+ baseTokenSlug: 'cbETH',
49
+ },
50
+ {
51
+ symbol: 'inwbETH',
52
+ token: '0xda9b11cd701e10c2ec1a284f80820edd128c5246',
53
+ vault: '0xC0660932C5dCaD4A1409b7975d147203B1e9A2B6',
54
+ baseToken: '0xa2E3356610840701BDf5611a53974510Ae27E2e1',
55
+ baseTokenSlug: 'wbETH',
56
+ },
57
+ {
58
+ symbol: 'inswETH',
59
+ token: '0xc3ade5ace1bbb033ccae8177c12ecbfa16bd6a9d',
60
+ vault: '0xc4181dC7BB31453C4A48689ce0CBe975e495321c',
61
+ baseToken: '0xf951E335afb289353dc249e82926178EaC7DEd78',
62
+ baseTokenSlug: 'SWETH',
63
+ },
64
+ {
65
+ symbol: 'inETHx',
66
+ token: '0x57a5a0567187ff4a8dcc1a9bba86155e355878f2',
67
+ vault: '0x90E80E25ABDB6205B08DeBa29a87f7eb039023C2',
68
+ baseToken: '0xA35b1B31Ce002FBF2058D22F30f95D405200A15b',
69
+ baseTokenSlug: 'ETHx',
70
+ },
71
+ {
72
+ symbol: 'insfrxETH',
73
+ token: '0x668308d77be3533c909a692302cb4d135bf8041c',
74
+ vault: '0x295234B7E370a5Db2D2447aCA83bc7448f151161',
75
+ baseToken: '0xac3E018457B222d93114458476f3E3416Abbe38F',
76
+ baseTokenSlug: 'sfrxETH',
77
+ },
78
+ {
79
+ symbol: 'inmETH',
80
+ token: '0xeCf3672A6d2147E2A77f07069Fb48d8Cf6F6Fbf9',
81
+ vault: '0xd0ee89d82183D7Ddaef14C6b4fC0AA742F426355',
82
+ baseToken: '0xd5F7838F5C461fefF7FE49ea5ebaF7728bB0ADfa',
83
+ baseTokenSlug: 'mETH',
84
+ },
85
+ {
86
+ symbol: 'inlsETH',
87
+ token: '0x94b888e11a9e960a9c3b3528eb6ac807b27ca62e',
88
+ vault: '0x6E17a8b5D33e6DBdB9fC61d758BF554b6AD93322',
89
+ baseToken: '0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549',
90
+ baseTokenSlug: 'lsETH',
91
+ },
92
+ {
93
+ symbol: 'inETH',
94
+ token: '0xf073bAC22DAb7FaF4a3Dd6c6189a70D54110525C',
95
+ vault: '0x46199cAa0e453971cedf97f926368d9E5415831a',
96
+ baseToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
97
+ baseTokenSlug: 'ETH',
98
+ },
99
+ ],
100
+ },
101
+ };
102
+
103
+ export const InceptionPricePoolConfig: DexConfigMap<PricePoolParams> = {
104
+ InceptionLRT: {
105
+ [Network.MAINNET]: {
106
+ ratioFeed: '0xFd73Be536503B5Aa80Bf99D1Fd65b1306c69B191',
107
+ },
108
+ },
109
+ };
@@ -0,0 +1,67 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import { testE2E } from '../../../tests/utils-e2e';
6
+ import { Holders, Tokens } from '../../../tests/constants-e2e';
7
+ import { ContractMethod, Network, SwapSide } from '../../constants';
8
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
9
+ import { generateConfig } from '../../config';
10
+ import { InceptionConfig } from './config';
11
+ import { DexParams } from './types';
12
+
13
+ function testForNetwork(
14
+ network: Network,
15
+ inceptionName: string,
16
+ configs: DexParams[],
17
+ ) {
18
+ const provider = new StaticJsonRpcProvider(
19
+ generateConfig(network).privateHttpProvider,
20
+ network,
21
+ );
22
+
23
+ for (const config of configs) {
24
+ const baseSlug = config.baseTokenSlug;
25
+ const tokens = Tokens[network];
26
+ const holders = Holders[network];
27
+ const inceptionSlug = config.symbol;
28
+
29
+ const sideToContractMethods = new Map([
30
+ [SwapSide.SELL, [ContractMethod.swapExactAmountIn]],
31
+ ]);
32
+
33
+ describe(`${inceptionSlug}`, () => {
34
+ sideToContractMethods.forEach((contractMethods, side) =>
35
+ describe(`${side}`, () => {
36
+ contractMethods.forEach((contractMethod: ContractMethod) => {
37
+ describe(`${contractMethod}`, () => {
38
+ it(`${baseSlug} -> ${inceptionSlug}`, async () => {
39
+ await testE2E(
40
+ tokens[baseSlug],
41
+ tokens[inceptionSlug],
42
+ holders[baseSlug],
43
+ '100000000',
44
+ side,
45
+ inceptionName,
46
+ contractMethod,
47
+ network,
48
+ provider,
49
+ );
50
+ });
51
+ });
52
+ });
53
+ }),
54
+ );
55
+ });
56
+ }
57
+ }
58
+
59
+ describe('Inception E2E', () => {
60
+ describe('Mainnet', () => {
61
+ const network = Network.MAINNET;
62
+
63
+ Object.entries(InceptionConfig).forEach(([inceptionName, chainConfig]) => {
64
+ testForNetwork(network, inceptionName, chainConfig[network]);
65
+ });
66
+ });
67
+ });
@@ -0,0 +1,58 @@
1
+ import _ from 'lodash';
2
+ import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
3
+ import { BlockHeader, Log, Logger } from '../../types';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { PoolConfig, PoolState } from './types';
7
+ import { getOnChainState } from './utils';
8
+ import { Interface } from '@ethersproject/abi';
9
+ import INCEPTION_RATIO_FEED from '../../abi/inception/inception-ratio-feed.json';
10
+ import { getTokenFromAddress } from './tokens';
11
+
12
+ export class InceptionEventPool extends StatefulEventSubscriber<PoolState> {
13
+ protected ratioFeedInterface: Interface = new Interface(INCEPTION_RATIO_FEED);
14
+ constructor(
15
+ parentName: string,
16
+ protected network: number,
17
+ protected dexHelper: IDexHelper,
18
+ logger: Logger,
19
+ public poolConfig: PoolConfig,
20
+ public poolInterface: Interface,
21
+ ) {
22
+ super(parentName, 'pool', dexHelper, logger);
23
+ }
24
+
25
+ protected processLog(
26
+ state: DeepReadonly<PoolState>,
27
+ log: Readonly<Log>,
28
+ blockHeader: Readonly<BlockHeader>,
29
+ ): AsyncOrSync<DeepReadonly<PoolState> | null> {
30
+ try {
31
+ const parsed = this.ratioFeedInterface.parseLog(log);
32
+ const _state: PoolState = _.cloneDeep(state);
33
+ switch (parsed.name) {
34
+ case 'RatioUpdated': {
35
+ const tokenInfo = getTokenFromAddress(this.network, parsed.args[0]);
36
+ _state[tokenInfo.symbol.toLowerCase()] = {
37
+ ratio: BigInt(parsed.args[2].toString()),
38
+ };
39
+ return _state;
40
+ }
41
+ default:
42
+ return _state;
43
+ }
44
+ } catch (e) {
45
+ this.logger.error('Failed to parse log', e);
46
+ return null;
47
+ }
48
+ }
49
+
50
+ async generateState(blockNumber: number): Promise<Readonly<PoolState>> {
51
+ return getOnChainState(
52
+ this.dexHelper.multiContract,
53
+ this.poolInterface,
54
+ this.network,
55
+ blockNumber,
56
+ );
57
+ }
58
+ }
@@ -0,0 +1,66 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+ import { InceptionEventPool } from './inception-event-pool';
4
+ import { InceptionPricePoolConfig } from './config';
5
+ import { Network } from '../../constants';
6
+ import { DummyDexHelper } from '../../dex-helper/index';
7
+ import INCEPTION_VAULT_ABI from '../../abi/inception/inception-vault.json';
8
+ import { testEventSubscriber } from '../../../tests/utils-events';
9
+ import { PoolState } from './types';
10
+ import { Interface } from '@ethersproject/abi';
11
+ import { setTokensOnNetwork } from './tokens';
12
+ import { getTokenList } from './utils';
13
+
14
+ jest.setTimeout(50 * 1000);
15
+ const dexKey = 'InceptionLRT';
16
+ const network = Network.MAINNET;
17
+ const ratioFeedAddress = InceptionPricePoolConfig[dexKey][network].ratioFeed;
18
+ const poolInterface = new Interface(INCEPTION_VAULT_ABI);
19
+
20
+ async function fetchPoolState(
21
+ inceptionEventPool: InceptionEventPool,
22
+ blockNumber: number,
23
+ ): Promise<PoolState> {
24
+ return inceptionEventPool.generateState(blockNumber);
25
+ }
26
+
27
+ describe('Inception Event', function () {
28
+ const blockNumbers: { [eventName: string]: number[] } = {
29
+ RatioUpdated: [20438963, 20431766, 20424602],
30
+ };
31
+
32
+ describe('InceptionEventPool', function () {
33
+ Object.keys(blockNumbers).forEach((event: string) => {
34
+ blockNumbers[event].forEach((blockNumber: number) => {
35
+ it(`Should return the correct state after the ${blockNumber}: ${event}`, async function () {
36
+ const dexHelper = new DummyDexHelper(network);
37
+ const logger = dexHelper.getLogger(dexKey);
38
+ const inceptionEventPool = new InceptionEventPool(
39
+ dexKey,
40
+ network,
41
+ dexHelper,
42
+ logger,
43
+ {
44
+ ratioFeedAddress: ratioFeedAddress,
45
+ initState: {},
46
+ },
47
+ poolInterface,
48
+ );
49
+
50
+ const tokenList = await getTokenList(network);
51
+ setTokensOnNetwork(network, tokenList);
52
+
53
+ await testEventSubscriber(
54
+ inceptionEventPool,
55
+ inceptionEventPool.addressesSubscribed,
56
+ (_blockNumber: number) =>
57
+ fetchPoolState(inceptionEventPool, _blockNumber),
58
+ blockNumber,
59
+ `${dexKey}_${ratioFeedAddress}`.toLowerCase(),
60
+ dexHelper.provider,
61
+ );
62
+ });
63
+ });
64
+ });
65
+ });
66
+ });
@@ -0,0 +1,76 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+
4
+ import { DummyDexHelper } from '../../dex-helper/index';
5
+ import { Network, SwapSide } from '../../constants';
6
+ import { BI_POWS } from '../../bigint-constants';
7
+ import { Inception } from './inception';
8
+ import { checkPoolPrices, checkPoolsLiquidity } from '../../../tests/utils';
9
+ import { Tokens } from '../../../tests/constants-e2e';
10
+ import { InceptionConfig } from './config';
11
+
12
+ const network = Network.MAINNET;
13
+ const dexKey = 'InceptionLRT';
14
+ const dexHelper = new DummyDexHelper(network);
15
+
16
+ describe('Inception', function () {
17
+ let blockNumber: number;
18
+ let inception: Inception;
19
+
20
+ beforeAll(async () => {
21
+ blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
22
+ inception = new Inception(network, dexKey, dexHelper);
23
+ await inception.initializePricing(blockNumber);
24
+ });
25
+
26
+ InceptionConfig[dexKey][network].forEach(Pair => {
27
+ const TokenASymbol = Pair.baseTokenSlug;
28
+ const TokenA = Tokens[network][TokenASymbol];
29
+
30
+ const TokenBSymbol = Pair.symbol;
31
+ const TokenB = Tokens[network][TokenBSymbol];
32
+ const TokenBAmounts = [0n, BI_POWS[6], 2000000n];
33
+
34
+ describe(`deposit() Swap Function for ${TokenBSymbol} <> ${TokenASymbol}`, () => {
35
+ it('getPoolIdentifiers and getPricesVolume SELL', async function () {
36
+ const pools = await inception.getPoolIdentifiers(
37
+ TokenB,
38
+ TokenA,
39
+ SwapSide.SELL,
40
+ blockNumber,
41
+ );
42
+ console.log(
43
+ `${TokenBSymbol} <> ${TokenASymbol} Pool Identifiers: `,
44
+ pools,
45
+ );
46
+
47
+ expect(pools.length).toBeGreaterThan(0);
48
+
49
+ const poolPrices = await inception.getPricesVolume(
50
+ TokenB,
51
+ TokenA,
52
+ TokenBAmounts,
53
+ SwapSide.SELL,
54
+ blockNumber,
55
+ pools,
56
+ );
57
+ console.log(
58
+ `${TokenBSymbol} <> ${TokenASymbol} Pool Prices: `,
59
+ poolPrices,
60
+ );
61
+
62
+ expect(poolPrices).not.toBeNull();
63
+ checkPoolPrices(poolPrices!, TokenBAmounts, SwapSide.SELL, dexKey);
64
+ });
65
+
66
+ it('getTopPoolsForToken', async function () {
67
+ const poolLiquidity = await inception.getTopPoolsForToken(
68
+ TokenA.address,
69
+ 10,
70
+ );
71
+
72
+ checkPoolsLiquidity(poolLiquidity, TokenA.address, dexKey);
73
+ });
74
+ });
75
+ });
76
+ });
@@ -0,0 +1,238 @@
1
+ import { Interface, JsonFragment } from '@ethersproject/abi';
2
+ import { AsyncOrSync } from 'ts-essentials';
3
+ import { NumberAsString, SwapSide } from '@paraswap/core';
4
+ import {
5
+ AdapterExchangeParam,
6
+ Address,
7
+ DexExchangeParam,
8
+ ExchangePrices,
9
+ Logger,
10
+ PoolLiquidity,
11
+ PoolPrices,
12
+ Token,
13
+ } from '../../types';
14
+ import INCEPTION_ABI from '../../abi/inception/inception-vault.json';
15
+ import INCEPTION_POOL_ABI from '../../abi/inception/inception-ineth-pool.json';
16
+ import { Network, NULL_ADDRESS } from '../../constants';
17
+ import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
18
+ import { getDexKeysWithNetwork, Utils } from '../../utils';
19
+ import { IDex } from '../../dex/idex';
20
+ import { IDexHelper } from '../../dex-helper/idex-helper';
21
+ import { DexParams, InceptionDexData, PoolState } from './types';
22
+ import { SimpleExchange } from '../simple-exchange';
23
+ import { InceptionConfig, InceptionPricePoolConfig } from './config';
24
+ import { getTokenFromAddress, setTokensOnNetwork, Tokens } from './tokens';
25
+ import { getOnChainState, getTokenList } from './utils';
26
+ import { InceptionEventPool } from './inception-event-pool';
27
+
28
+ const DECIMALS = BigInt(1e18);
29
+
30
+ export class Inception
31
+ extends SimpleExchange
32
+ implements IDex<InceptionDexData>
33
+ {
34
+ protected vaultInterface: Interface;
35
+ protected poolInterface: Interface;
36
+
37
+ readonly hasConstantPriceLargeAmounts = false;
38
+ readonly needWrapNative = false;
39
+ readonly isFeeOnTransferSupported = false;
40
+
41
+ public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
42
+ getDexKeysWithNetwork(InceptionConfig);
43
+
44
+ logger: Logger;
45
+
46
+ private eventPool: InceptionEventPool;
47
+
48
+ constructor(
49
+ readonly network: Network,
50
+ readonly dexKey: string,
51
+ readonly dexHelper: IDexHelper,
52
+ protected config = InceptionConfig[dexKey][network],
53
+ ) {
54
+ super(dexHelper, dexKey);
55
+ this.logger = dexHelper.getLogger(dexKey);
56
+ this.vaultInterface = new Interface(INCEPTION_ABI as JsonFragment[]);
57
+ this.poolInterface = new Interface(INCEPTION_POOL_ABI as JsonFragment[]);
58
+ this.eventPool = new InceptionEventPool(
59
+ dexKey,
60
+ network,
61
+ dexHelper,
62
+ this.logger,
63
+ {
64
+ ratioFeedAddress: InceptionPricePoolConfig[dexKey][network].ratioFeed,
65
+ initState: {},
66
+ },
67
+ this.poolInterface,
68
+ );
69
+ }
70
+
71
+ async initializePricing(blockNumber: number) {
72
+ const poolState = await getOnChainState(
73
+ this.dexHelper.multiContract,
74
+ this.vaultInterface,
75
+ this.network,
76
+ blockNumber,
77
+ );
78
+
79
+ await this.eventPool.initialize(blockNumber, {
80
+ state: poolState,
81
+ });
82
+ await this.initializeTokens();
83
+ }
84
+
85
+ async initializeTokens() {
86
+ let tokenList = await getTokenList(this.network);
87
+
88
+ setTokensOnNetwork(this.network, tokenList);
89
+ }
90
+
91
+ getAdapters(side: SwapSide): { name: string; index: number }[] | null {
92
+ return null;
93
+ }
94
+
95
+ async getPoolIdentifiers(
96
+ srcToken: Token,
97
+ destToken: Token,
98
+ side: SwapSide,
99
+ blockNumber: number,
100
+ ): Promise<string[]> {
101
+ return [
102
+ this.dexKey +
103
+ '-' +
104
+ [srcToken.address.toLowerCase(), destToken.address.toLowerCase()]
105
+ .sort((a, b) => (a > b ? 1 : -1))
106
+ .join('_'),
107
+ ];
108
+ }
109
+
110
+ async getPoolState(
111
+ pool: InceptionEventPool,
112
+ blockNumber: number,
113
+ ): Promise<PoolState> {
114
+ const eventState = pool.getState(blockNumber);
115
+ if (eventState) return eventState;
116
+ const onChainState = await pool.generateState(blockNumber);
117
+ pool.setState(onChainState, blockNumber);
118
+ return onChainState;
119
+ }
120
+
121
+ async getPricesVolume(
122
+ srcToken: Token,
123
+ destToken: Token,
124
+ amounts: bigint[],
125
+ side: SwapSide,
126
+ blockNumber: number,
127
+ limitPools?: string[],
128
+ ): Promise<null | ExchangePrices<InceptionDexData>> {
129
+ if (side === SwapSide.BUY) {
130
+ return null;
131
+ }
132
+
133
+ const src = getTokenFromAddress(this.network, srcToken.address);
134
+ const dest = getTokenFromAddress(this.network, destToken.address);
135
+
136
+ if (src !== dest) {
137
+ return null;
138
+ }
139
+
140
+ const poolState = await this.getPoolState(this.eventPool, blockNumber);
141
+ if (!poolState) return null;
142
+
143
+ return [
144
+ {
145
+ prices: amounts.map(amount => {
146
+ const ratio = poolState[src.symbol.toLowerCase()].ratio;
147
+ return (ratio * amount) / DECIMALS;
148
+ }),
149
+ unit: DECIMALS,
150
+ gasCost: 120_000,
151
+ exchange: this.dexKey,
152
+ data: {
153
+ exchange: dest.vault,
154
+ },
155
+ poolAddresses: [src.token.toLowerCase()],
156
+ },
157
+ ];
158
+ }
159
+
160
+ getCalldataGasCost(
161
+ poolPrices: PoolPrices<InceptionDexData>,
162
+ ): number | number[] {
163
+ return CALLDATA_GAS_COST.DEX_OVERHEAD + CALLDATA_GAS_COST.LENGTH_SMALL;
164
+ }
165
+
166
+ getAdapterParam(): AdapterExchangeParam {
167
+ return {
168
+ targetExchange: NULL_ADDRESS,
169
+ payload: '0x',
170
+ networkFee: '0',
171
+ };
172
+ }
173
+
174
+ getDexParam(
175
+ srcToken: Address,
176
+ destToken: Address,
177
+ srcAmount: NumberAsString,
178
+ destAmount: NumberAsString,
179
+ recipient: Address,
180
+ data: InceptionDexData,
181
+ side: SwapSide,
182
+ ): DexExchangeParam {
183
+ const dexParams = getTokenFromAddress(this.network, srcToken);
184
+
185
+ const isNative = dexParams.baseTokenSlug === 'ETH';
186
+ let swapData;
187
+ let dexFuncHasRecipient;
188
+ if (isNative) {
189
+ swapData = this.poolInterface.encodeFunctionData('stake()', []);
190
+ dexFuncHasRecipient = false;
191
+ } else {
192
+ swapData = this.vaultInterface.encodeFunctionData('deposit', [
193
+ srcAmount,
194
+ recipient,
195
+ ]);
196
+ dexFuncHasRecipient = true;
197
+ }
198
+
199
+ return {
200
+ needWrapNative: false,
201
+ dexFuncHasRecipient,
202
+ exchangeData: swapData,
203
+ targetExchange: dexParams.vault,
204
+ swappedAmountNotPresentInExchangeData: true,
205
+ returnAmountPos: undefined,
206
+ };
207
+ }
208
+
209
+ async updatePoolState(): Promise<void> {}
210
+
211
+ async getTopPoolsForToken(
212
+ tokenAddress: Address,
213
+ limit: number,
214
+ ): Promise<PoolLiquidity[]> {
215
+ await this.initializeTokens();
216
+
217
+ const token: DexParams = getTokenFromAddress(this.network, tokenAddress);
218
+
219
+ if (token) {
220
+ return [
221
+ {
222
+ liquidityUSD: 1e9,
223
+ exchange: this.dexKey,
224
+ address: token.vault,
225
+ connectorTokens: [
226
+ {
227
+ address: token.token,
228
+ decimals: 1e18,
229
+ },
230
+ ],
231
+ },
232
+ ];
233
+ }
234
+ return [];
235
+ }
236
+
237
+ releaseResources(): AsyncOrSync<void> {}
238
+ }
@@ -0,0 +1,37 @@
1
+ import { Network } from '../../constants';
2
+ import { DexParams } from './types';
3
+
4
+ export const Tokens: { [network: number]: { [symbol: string]: DexParams } } =
5
+ {};
6
+
7
+ const TokensByAddress: {
8
+ [network: number]: { [address: string]: DexParams };
9
+ } = {};
10
+
11
+ export function setTokensOnNetwork(network: Network, tokens: DexParams[]) {
12
+ if (Tokens[network] === undefined) {
13
+ Tokens[network] = {};
14
+ }
15
+
16
+ if (TokensByAddress[network] === undefined) {
17
+ TokensByAddress[network] = {};
18
+ }
19
+
20
+ for (let token of tokens) {
21
+ token.vault = token.vault.toLowerCase();
22
+ token.token = token.token.toLowerCase();
23
+ token.baseToken = token.baseToken.toLowerCase();
24
+
25
+ Tokens[network][token.symbol] = token;
26
+ TokensByAddress[network][token.vault] = token;
27
+ TokensByAddress[network][token.token] = token;
28
+ TokensByAddress[network][token.baseToken] = token;
29
+ }
30
+ }
31
+
32
+ export function getTokenFromAddress(
33
+ network: Network,
34
+ address: string,
35
+ ): DexParams {
36
+ return TokensByAddress[network]?.[address.toLowerCase()];
37
+ }
@@ -0,0 +1,26 @@
1
+ export type PoolState = {
2
+ [symbol: string]: {
3
+ ratio: bigint;
4
+ };
5
+ };
6
+
7
+ export type PoolConfig = {
8
+ ratioFeedAddress: string;
9
+ initState: PoolState;
10
+ };
11
+
12
+ export type InceptionDexData = {
13
+ exchange: string;
14
+ };
15
+
16
+ export type DexParams = {
17
+ symbol: string;
18
+ vault: string;
19
+ token: string;
20
+ baseToken: string;
21
+ baseTokenSlug: string;
22
+ };
23
+
24
+ export type PricePoolParams = {
25
+ ratioFeed: string;
26
+ };