@paraswap/dex-lib 3.8.21-traderjoe-multihop.2 → 3.8.21

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 (256) hide show
  1. package/build/abi/AaveV1_lending_pool.json +27 -0
  2. package/build/abi/inception/inception-ineth-pool.json +1062 -0
  3. package/build/abi/inception/inception-ineth.json +609 -0
  4. package/build/abi/inception/inception-ratio-feed.json +93 -0
  5. package/build/abi/inception/inception-vault.json +991 -0
  6. package/build/abi/infusion/InfusionFactory.json +147 -0
  7. package/build/abi/infusion/InfusionPair.json +658 -0
  8. package/build/abi/infusion/InfusionRouter.json +442 -0
  9. package/build/abi/lite-psm/dai.json +333 -0
  10. package/build/abi/lite-psm/psm.json +468 -0
  11. package/build/abi/lite-psm/usdc.json +814 -0
  12. package/build/abi/oswap/oswap.abi.json +452 -0
  13. package/build/abi/platypus/asset.json +490 -0
  14. package/build/abi/platypus/avax-pool.json +820 -0
  15. package/build/abi/platypus/oracle.json +119 -0
  16. package/build/abi/platypus/pool.json +677 -0
  17. package/build/abi/smardex/all/smardex-router.json +648 -0
  18. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  19. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  20. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  21. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  22. package/build/abi/swaap-v1/pool.json +1346 -0
  23. package/build/dex/aave-v1/aave-v1.d.ts +34 -0
  24. package/build/dex/aave-v1/aave-v1.js +180 -0
  25. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  26. package/build/dex/aave-v1/config.d.ts +11 -0
  27. package/build/dex/aave-v1/config.js +20 -0
  28. package/build/dex/aave-v1/config.js.map +1 -0
  29. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  30. package/build/dex/aave-v1/tokens.d.ts +3 -0
  31. package/build/dex/aave-v1/tokens.js +50 -0
  32. package/build/dex/aave-v1/tokens.js.map +1 -0
  33. package/build/dex/aave-v1/types.d.ts +12 -0
  34. package/build/dex/aave-v1/types.js +3 -0
  35. package/build/dex/aave-v1/types.js.map +1 -0
  36. package/build/dex/idle-dao/idle-dao-pool.d.ts +56 -0
  37. package/build/dex/idle-dao/idle-dao-pool.js +176 -0
  38. package/build/dex/idle-dao/idle-dao-pool.js.map +1 -0
  39. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +16 -0
  40. package/build/dex/idle-dao/idle-dao-pooling-pool.js +57 -0
  41. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +1 -0
  42. package/build/dex/idle-dao/scripts.d.ts +9 -0
  43. package/build/dex/idle-dao/scripts.js +552 -0
  44. package/build/dex/idle-dao/scripts.js.map +1 -0
  45. package/build/dex/inception/config.d.ts +5 -0
  46. package/build/dex/inception/config.js +112 -0
  47. package/build/dex/inception/config.js.map +1 -0
  48. package/build/dex/inception/inception-event-pool.d.ts +23 -0
  49. package/build/dex/inception/inception-event-pool.js +34 -0
  50. package/build/dex/inception/inception-event-pool.js.map +1 -0
  51. package/build/dex/inception/inception-native.d.ts +43 -0
  52. package/build/dex/inception/inception-native.js +131 -0
  53. package/build/dex/inception/inception-native.js.map +1 -0
  54. package/build/dex/inception/inception-pool.d.ts +18 -0
  55. package/build/dex/inception/inception-pool.js +32 -0
  56. package/build/dex/inception/inception-pool.js.map +1 -0
  57. package/build/dex/inception/inception-price-feed.d.ts +19 -0
  58. package/build/dex/inception/inception-price-feed.js +51 -0
  59. package/build/dex/inception/inception-price-feed.js.map +1 -0
  60. package/build/dex/inception/inception.d.ts +44 -0
  61. package/build/dex/inception/inception.js +162 -0
  62. package/build/dex/inception/inception.js.map +1 -0
  63. package/build/dex/inception/tokens.d.ts +9 -0
  64. package/build/dex/inception/tokens.js +28 -0
  65. package/build/dex/inception/tokens.js.map +1 -0
  66. package/build/dex/inception/types.d.ts +22 -0
  67. package/build/dex/inception/types.js +3 -0
  68. package/build/dex/inception/types.js.map +1 -0
  69. package/build/dex/inception/utils.d.ts +7 -0
  70. package/build/dex/inception/utils.js +58 -0
  71. package/build/dex/inception/utils.js.map +1 -0
  72. package/build/dex/index.js +2 -0
  73. package/build/dex/index.js.map +1 -1
  74. package/build/dex/infusion/config.d.ts +4 -0
  75. package/build/dex/infusion/config.js +25 -0
  76. package/build/dex/infusion/config.js.map +1 -0
  77. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  78. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  79. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  80. package/build/dex/infusion/infusion.d.ts +54 -0
  81. package/build/dex/infusion/infusion.js +510 -0
  82. package/build/dex/infusion/infusion.js.map +1 -0
  83. package/build/dex/infusion/types.d.ts +47 -0
  84. package/build/dex/infusion/types.js +3 -0
  85. package/build/dex/infusion/types.js.map +1 -0
  86. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  87. package/build/dex/infusion/utils/isStablePair.js +18 -0
  88. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  89. package/build/dex/lite-psm/config.d.ts +3 -0
  90. package/build/dex/lite-psm/config.js +29 -0
  91. package/build/dex/lite-psm/config.js.map +1 -0
  92. package/build/dex/lite-psm/lite-psm-event-pool.d.ts +29 -0
  93. package/build/dex/lite-psm/lite-psm-event-pool.js +164 -0
  94. package/build/dex/lite-psm/lite-psm-event-pool.js.map +1 -0
  95. package/build/dex/lite-psm/lite-psm.d.ts +52 -0
  96. package/build/dex/lite-psm/lite-psm.js +341 -0
  97. package/build/dex/lite-psm/lite-psm.js.map +1 -0
  98. package/build/dex/lite-psm/types.d.ts +40 -0
  99. package/build/dex/lite-psm/types.js +3 -0
  100. package/build/dex/lite-psm/types.js.map +1 -0
  101. package/build/dex/maker-psm/maker-psm.js +4 -1
  102. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  103. package/build/dex/oswap/config.d.ts +5 -0
  104. package/build/dex/oswap/config.js +31 -0
  105. package/build/dex/oswap/config.js.map +1 -0
  106. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  107. package/build/dex/oswap/oswap-pool.js +150 -0
  108. package/build/dex/oswap/oswap-pool.js.map +1 -0
  109. package/build/dex/oswap/oswap.d.ts +46 -0
  110. package/build/dex/oswap/oswap.js +273 -0
  111. package/build/dex/oswap/oswap.js.map +1 -0
  112. package/build/dex/oswap/types.d.ts +20 -0
  113. package/build/dex/oswap/types.js +3 -0
  114. package/build/dex/oswap/types.js.map +1 -0
  115. package/build/dex/platypus/asset.d.ts +14 -0
  116. package/build/dex/platypus/asset.js +97 -0
  117. package/build/dex/platypus/asset.js.map +1 -0
  118. package/build/dex/platypus/config.d.ts +11 -0
  119. package/build/dex/platypus/config.js +69 -0
  120. package/build/dex/platypus/config.js.map +1 -0
  121. package/build/dex/platypus/platypus.d.ts +63 -0
  122. package/build/dex/platypus/platypus.js +473 -0
  123. package/build/dex/platypus/platypus.js.map +1 -0
  124. package/build/dex/platypus/pool-avax.d.ts +8 -0
  125. package/build/dex/platypus/pool-avax.js +54 -0
  126. package/build/dex/platypus/pool-avax.js.map +1 -0
  127. package/build/dex/platypus/pool-base.d.ts +19 -0
  128. package/build/dex/platypus/pool-base.js +86 -0
  129. package/build/dex/platypus/pool-base.js.map +1 -0
  130. package/build/dex/platypus/pool-pure.d.ts +8 -0
  131. package/build/dex/platypus/pool-pure.js +37 -0
  132. package/build/dex/platypus/pool-pure.js.map +1 -0
  133. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  134. package/build/dex/platypus/pool-subscriber.js +167 -0
  135. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  136. package/build/dex/platypus/pool.d.ts +8 -0
  137. package/build/dex/platypus/pool.js +58 -0
  138. package/build/dex/platypus/pool.js.map +1 -0
  139. package/build/dex/platypus/types.d.ts +92 -0
  140. package/build/dex/platypus/types.js +10 -0
  141. package/build/dex/platypus/types.js.map +1 -0
  142. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  143. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  144. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  145. package/build/dex/smardex/config.d.ts +4 -0
  146. package/build/dex/smardex/config.js +64 -0
  147. package/build/dex/smardex/config.js.map +1 -0
  148. package/build/dex/smardex/constants.d.ts +18 -0
  149. package/build/dex/smardex/constants.js +33 -0
  150. package/build/dex/smardex/constants.js.map +1 -0
  151. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  152. package/build/dex/smardex/sdk/constants.js +13 -0
  153. package/build/dex/smardex/sdk/constants.js.map +1 -0
  154. package/build/dex/smardex/sdk/core.d.ts +113 -0
  155. package/build/dex/smardex/sdk/core.js +499 -0
  156. package/build/dex/smardex/sdk/core.js.map +1 -0
  157. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  158. package/build/dex/smardex/sdk/errors.js +22 -0
  159. package/build/dex/smardex/sdk/errors.js.map +1 -0
  160. package/build/dex/smardex/sdk/types.d.ts +62 -0
  161. package/build/dex/smardex/sdk/types.js +3 -0
  162. package/build/dex/smardex/sdk/types.js.map +1 -0
  163. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  164. package/build/dex/smardex/sdk/utils.js +133 -0
  165. package/build/dex/smardex/sdk/utils.js.map +1 -0
  166. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  167. package/build/dex/smardex/smardex-event-pool.js +119 -0
  168. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  169. package/build/dex/smardex/smardex.d.ts +65 -0
  170. package/build/dex/smardex/smardex.js +519 -0
  171. package/build/dex/smardex/smardex.js.map +1 -0
  172. package/build/dex/smardex/types.d.ts +55 -0
  173. package/build/dex/smardex/types.js +3 -0
  174. package/build/dex/smardex/types.js.map +1 -0
  175. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  176. package/build/dex/solidly/forks-override/cone.js +53 -0
  177. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  178. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  179. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  180. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  181. package/build/dex/swaap-v1/config.d.ts +17 -0
  182. package/build/dex/swaap-v1/config.js +56 -0
  183. package/build/dex/swaap-v1/config.js.map +1 -0
  184. package/build/dex/swaap-v1/constants.d.ts +6 -0
  185. package/build/dex/swaap-v1/constants.js +17 -0
  186. package/build/dex/swaap-v1/constants.js.map +1 -0
  187. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  188. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  189. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  190. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  191. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  192. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  193. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  194. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  195. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  196. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  197. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  198. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  199. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  200. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  201. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  202. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  203. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  204. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  205. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  206. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  207. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  208. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  209. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  210. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  211. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  212. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  213. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  214. package/build/dex/swaap-v1/swaap-v1.d.ts +62 -0
  215. package/build/dex/swaap-v1/swaap-v1.js +379 -0
  216. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  217. package/build/dex/swaap-v1/types.d.ts +106 -0
  218. package/build/dex/swaap-v1/types.js +9 -0
  219. package/build/dex/swaap-v1/types.js.map +1 -0
  220. package/build/dex/trader-joe-v2.1/base.js +16 -5
  221. package/build/dex/trader-joe-v2.1/base.js.map +1 -1
  222. package/build/dex/trader-joe-v2.1/types.d.ts +3 -3
  223. package/build/dex-helper/dummy-dex-helper.js +1 -1
  224. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  225. package/package.json +1 -1
  226. package/src/abi/lite-psm/dai.json +333 -0
  227. package/src/abi/lite-psm/psm.json +468 -0
  228. package/src/abi/lite-psm/usdc.json +814 -0
  229. package/src/dex/index.ts +2 -0
  230. package/src/dex/lite-psm/config.ts +29 -0
  231. package/src/dex/lite-psm/lite-psm-e2e.test.ts +79 -0
  232. package/src/dex/lite-psm/lite-psm-event-pool.ts +216 -0
  233. package/src/dex/lite-psm/lite-psm-events.test.ts +61 -0
  234. package/src/dex/lite-psm/lite-psm-integration.test.ts +99 -0
  235. package/src/dex/lite-psm/lite-psm.ts +523 -0
  236. package/src/dex/lite-psm/types.ts +46 -0
  237. package/src/dex/maker-psm/maker-psm.ts +4 -1
  238. package/src/dex/trader-joe-v2.1/base.ts +16 -5
  239. package/src/dex/trader-joe-v2.1/types.ts +3 -3
  240. package/src/dex-helper/dummy-dex-helper.ts +1 -1
  241. package/.idea/aws.xml +0 -17
  242. package/.idea/codeStyles/Project.xml +0 -19
  243. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  244. package/.idea/misc.xml +0 -6
  245. package/.idea/modules.xml +0 -8
  246. package/.idea/paraswap-dex-lib.iml +0 -9
  247. package/.idea/prettier.xml +0 -7
  248. package/.idea/vcs.xml +0 -6
  249. package/build/abi/maverick-v2/MaverickV2Router.json +0 -778
  250. package/build/dex/trader-joe-v2.1/optimizer.d.ts +0 -2
  251. package/build/dex/trader-joe-v2.1/optimizer.js +0 -47
  252. package/build/dex/trader-joe-v2.1/optimizer.js.map +0 -1
  253. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +0 -7
  254. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +0 -20
  255. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +0 -1
  256. package/src/dex/trader-joe-v2.1/optimizer.ts +0 -60
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE1C,0CAA0C;AAC7B,QAAA,aAAa,GAA4B;IACpD,OAAO,EAAE;QACP,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,GAAG,EAAE;gBACH,OAAO,EAAE,4CAA4C;gBACrD,QAAQ,EAAE,EAAE;aACb;YACD,UAAU,EAAE,4CAA4C;YACxD,KAAK,EAAE;gBACL;oBACE,GAAG,EAAE;wBACH,OAAO,EAAE,4CAA4C;wBACrD,QAAQ,EAAE,CAAC;qBACZ;oBACD,cAAc,EAAE,4CAA4C;oBAC5D,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,UAAU,EACR,oEAAoE,EAAE,6BAA6B;iBACtG;aACF;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { Contract } from 'web3-eth-contract';
3
+ import { Address, Log, Logger } from '../../types';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { PoolState, PoolConfig } from './types';
7
+ export declare function getOnChainState(multiContract: Contract, poolConfigs: PoolConfig[], vatAddress: Address, blockNumber: number | 'latest', daiAddress: Address): Promise<PoolState[]>;
8
+ export declare class LitePsmEventPool extends StatefulEventSubscriber<PoolState> {
9
+ protected network: number;
10
+ protected dexHelper: IDexHelper;
11
+ poolConfig: PoolConfig;
12
+ protected vatAddress: Address;
13
+ handlers: {
14
+ [event: string]: (event: any, pool: PoolState, log: Log) => PoolState;
15
+ };
16
+ logDecoder: (log: Log) => any;
17
+ to18ConversionFactor: bigint;
18
+ bytes32Tout: string;
19
+ bytes32Tin: string;
20
+ daiAddress: Address;
21
+ constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, poolConfig: PoolConfig, vatAddress: Address);
22
+ handleFile(event: any, pool: PoolState, log: Log): PoolState;
23
+ handleTransfer(event: any, pool: PoolState, log: Log): PoolState;
24
+ handleTransferDAI(event: any, pool: PoolState, log: Log): PoolState;
25
+ handleTransferGEM(event: any, pool: PoolState, log: Log): PoolState;
26
+ getIdentifier(): string;
27
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
28
+ generateState(blockNumber: number | 'latest'): Promise<Readonly<PoolState>>;
29
+ }
@@ -0,0 +1,164 @@
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
+ exports.LitePsmEventPool = exports.getOnChainState = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
9
+ const utils_1 = require("../../utils");
10
+ const config_1 = require("./config");
11
+ const psm_json_1 = __importDefault(require("../../abi/maker-psm/psm.json"));
12
+ const vat_json_1 = __importDefault(require("../../abi/maker-psm/vat.json"));
13
+ const utils_2 = require("../../lib/tokens/utils");
14
+ const dai_json_1 = __importDefault(require("../../abi/lite-psm/dai.json"));
15
+ const usdc_json_1 = __importDefault(require("../../abi/lite-psm/usdc.json"));
16
+ const vatInterface = new abi_1.Interface(vat_json_1.default);
17
+ const psmInterface = new abi_1.Interface(psm_json_1.default);
18
+ const daiInterface = new abi_1.Interface(dai_json_1.default);
19
+ const usdcInterface = new abi_1.Interface(usdc_json_1.default);
20
+ const bigIntify = (b) => BigInt(b.toString());
21
+ async function getOnChainState(multiContract, poolConfigs, vatAddress, blockNumber, daiAddress) {
22
+ const callData = poolConfigs
23
+ .map(c => [
24
+ {
25
+ target: c.psmAddress,
26
+ callData: psmInterface.encodeFunctionData('tin', []),
27
+ },
28
+ {
29
+ target: c.psmAddress,
30
+ callData: psmInterface.encodeFunctionData('tout', []),
31
+ },
32
+ {
33
+ target: vatAddress,
34
+ callData: vatInterface.encodeFunctionData('ilks', [c.identifier]),
35
+ },
36
+ // dai liquidity
37
+ // ceiling for `sellGem`
38
+ {
39
+ target: daiAddress,
40
+ callData: utils_2.erc20Iface.encodeFunctionData('balanceOf', [c.psmAddress]),
41
+ },
42
+ // gem liquidity
43
+ // ceiling for `buyGem`
44
+ {
45
+ target: c.gem.address,
46
+ callData: utils_2.erc20Iface.encodeFunctionData('balanceOf', [c.pocketAddress]),
47
+ },
48
+ ])
49
+ .flat();
50
+ const res = await multiContract.methods
51
+ .aggregate(callData)
52
+ .call({}, blockNumber);
53
+ let i = 0;
54
+ const result = poolConfigs.map(c => {
55
+ const tin = bigIntify(psmInterface.decodeFunctionResult('tin', res.returnData[i++])[0]);
56
+ const tout = bigIntify(psmInterface.decodeFunctionResult('tout', res.returnData[i++])[0]);
57
+ const ilks = vatInterface.decodeFunctionResult('ilks', res.returnData[i++]);
58
+ const rate = bigIntify(ilks.rate);
59
+ const daiBalance = bigIntify(utils_2.erc20Iface.decodeFunctionResult('balanceOf', res.returnData[i++])[0]);
60
+ const gemBalance = bigIntify(utils_2.erc20Iface.decodeFunctionResult('balanceOf', res.returnData[i++])[0]);
61
+ const response = {
62
+ tin,
63
+ tout,
64
+ daiBalance,
65
+ gemBalance,
66
+ rate,
67
+ };
68
+ return response;
69
+ });
70
+ return result;
71
+ }
72
+ exports.getOnChainState = getOnChainState;
73
+ class LitePsmEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
74
+ constructor(parentName, network, dexHelper, logger, poolConfig, vatAddress) {
75
+ super(parentName, poolConfig.identifier, dexHelper, logger);
76
+ this.network = network;
77
+ this.dexHelper = dexHelper;
78
+ this.poolConfig = poolConfig;
79
+ this.vatAddress = vatAddress;
80
+ this.handlers = {};
81
+ this.bytes32Tout = '0x746f757400000000000000000000000000000000000000000000000000000000'; // bytes32('tout')
82
+ this.bytes32Tin = '0x74696e0000000000000000000000000000000000000000000000000000000000'; // bytes32('tin')
83
+ this.daiAddress =
84
+ config_1.LitePsmConfig[this.parentName][this.network].dai.address.toLowerCase();
85
+ this.logDecoder = (log) => {
86
+ const logAddress = log.address.toLowerCase();
87
+ if (logAddress === this.daiAddress) {
88
+ return daiInterface.parseLog(log);
89
+ }
90
+ else if (logAddress === this.poolConfig.gem.address) {
91
+ return usdcInterface.parseLog(log);
92
+ }
93
+ else {
94
+ return psmInterface.parseLog(log);
95
+ }
96
+ };
97
+ this.addressesSubscribed = [
98
+ poolConfig.psmAddress,
99
+ this.daiAddress,
100
+ this.poolConfig.gem.address,
101
+ ];
102
+ this.to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - poolConfig.gem.decimals);
103
+ // Add handlers
104
+ this.handlers['File'] = this.handleFile.bind(this);
105
+ this.handlers['Transfer'] = this.handleTransfer.bind(this);
106
+ }
107
+ handleFile(event, pool, log) {
108
+ if (event.args.what === this.bytes32Tin) {
109
+ pool.tin = bigIntify(event.args.data);
110
+ }
111
+ else if (event.args.what === this.bytes32Tout) {
112
+ pool.tout = bigIntify(event.args.data);
113
+ }
114
+ return pool;
115
+ }
116
+ handleTransfer(event, pool, log) {
117
+ if (log.address.toLowerCase() === this.daiAddress) {
118
+ return this.handleTransferDAI(event, pool, log);
119
+ }
120
+ else if (log.address.toLowerCase() === this.poolConfig.gem.address) {
121
+ return this.handleTransferGEM(event, pool, log);
122
+ }
123
+ return pool;
124
+ }
125
+ handleTransferDAI(event, pool, log) {
126
+ if (event.args?.src?.toLowerCase() === this.poolConfig.psmAddress) {
127
+ pool.daiBalance -= bigIntify(event.args.wad);
128
+ }
129
+ else if (event.args?.dst?.toLowerCase() === this.poolConfig.psmAddress) {
130
+ pool.daiBalance += bigIntify(event.args.wad);
131
+ }
132
+ return pool;
133
+ }
134
+ handleTransferGEM(event, pool, log) {
135
+ if (event.args?.from?.toLowerCase() === this.poolConfig.pocketAddress) {
136
+ pool.gemBalance -= bigIntify(event.args.value);
137
+ }
138
+ else if (event.args?.to?.toLowerCase() === this.poolConfig.pocketAddress) {
139
+ pool.gemBalance += bigIntify(event.args.value);
140
+ }
141
+ return pool;
142
+ }
143
+ getIdentifier() {
144
+ return `${this.parentName}_${this.poolConfig.psmAddress}`.toLowerCase();
145
+ }
146
+ processLog(state, log) {
147
+ try {
148
+ const event = this.logDecoder(log);
149
+ if (event.name in this.handlers) {
150
+ return this.handlers[event.name](event, state, log);
151
+ }
152
+ return state;
153
+ }
154
+ catch (e) {
155
+ this.logger.error(`Error_${this.parentName}_processLog could not parse the log with topic ${log.topics}:`, e);
156
+ return null;
157
+ }
158
+ }
159
+ async generateState(blockNumber) {
160
+ return (await getOnChainState(this.dexHelper.multiContract, [this.poolConfig], this.vatAddress, blockNumber, this.daiAddress))[0];
161
+ }
162
+ }
163
+ exports.LitePsmEventPool = LitePsmEventPool;
164
+ //# sourceMappingURL=lite-psm-event-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lite-psm-event-pool.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/lite-psm-event-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, PoolLiquidity, Logger, NumberAsString, DexExchangeParam, ExchangeTxInfo, PreprocessTransactionOptions } from '../../types';
2
+ import { SwapSide, Network } from '../../constants';
3
+ import { IDex } from '../../dex/idex';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { LitePsmData, PoolState, PoolConfig, LitePsmDirectPayload } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { OptimalSwapExchange } from '@paraswap/core';
8
+ import { LitePsmEventPool } from './lite-psm-event-pool';
9
+ export declare class LitePsm extends SimpleExchange implements IDex<LitePsmData, LitePsmDirectPayload> {
10
+ protected network: Network;
11
+ protected dexHelper: IDexHelper;
12
+ protected dai: Token;
13
+ protected vatAddress: Address;
14
+ protected poolConfigs: PoolConfig[];
15
+ protected eventPools: {
16
+ [gemAddress: string]: LitePsmEventPool;
17
+ };
18
+ readonly hasConstantPriceLargeAmounts = true;
19
+ readonly isFeeOnTransferSupported = false;
20
+ static dexKeysWithNetwork: {
21
+ key: string;
22
+ networks: Network[];
23
+ }[];
24
+ logger: Logger;
25
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, dai?: Token, vatAddress?: Address, poolConfigs?: PoolConfig[]);
26
+ static getDirectFunctionNameV6(): string[];
27
+ initializePricing(blockNumber: number): Promise<void>;
28
+ getAdapters(side: SwapSide): {
29
+ name: string;
30
+ index: number;
31
+ }[] | null;
32
+ getEventPool(srcToken: Token, destToken: Token): LitePsmEventPool | null;
33
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
34
+ getPoolState(pool: LitePsmEventPool, blockNumber: number): Promise<PoolState>;
35
+ computePrices(isSrcDai: boolean, to18ConversionFactor: bigint, side: SwapSide, amounts: bigint[], poolState: PoolState): bigint[];
36
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<LitePsmData>>;
37
+ getCalldataGasCost(poolPrices: PoolPrices<LitePsmData>): number | number[];
38
+ getPsmParams(srcToken: string, srcAmount: string, destAmount: string, data: LitePsmData, side: SwapSide): {
39
+ isGemSell: boolean;
40
+ gemAmount: string;
41
+ };
42
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: LitePsmData, side: SwapSide): AdapterExchangeParam;
43
+ getTokenFromAddress(address: Address): Token;
44
+ preProcessTransaction?(optimalSwapExchange: OptimalSwapExchange<LitePsmData>, srcToken: Token, destToken: Token, side: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<LitePsmData>, ExchangeTxInfo]>;
45
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: LitePsmData, side: SwapSide): DexExchangeParam;
46
+ getDirectParamV6(srcToken: Address, destToken: Address, fromAmount: NumberAsString, toAmount: NumberAsString, quotedAmount: NumberAsString, data: LitePsmData, side: SwapSide, permit: string, uuid: string, partnerAndFee: string, beneficiary: string, blockNumber: number, contractMethod: string): {
47
+ params: LitePsmDirectPayload;
48
+ encoder: (...params: (string | LitePsmDirectPayload)[]) => string;
49
+ networkFee: string;
50
+ };
51
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
52
+ }
@@ -0,0 +1,341 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.LitePsm = void 0;
30
+ const abi_1 = require("@ethersproject/abi");
31
+ const constants_1 = require("../../constants");
32
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
33
+ const utils_1 = require("../../utils");
34
+ const simple_exchange_1 = require("../simple-exchange");
35
+ const config_1 = require("./config");
36
+ const psm_json_1 = __importDefault(require("../../abi/lite-psm/psm.json"));
37
+ const bigint_constants_1 = require("../../bigint-constants");
38
+ const types_1 = require("../../executor/types");
39
+ const bytes_1 = require("@ethersproject/bytes");
40
+ const core_1 = require("@paraswap/core");
41
+ const ethers_1 = require("ethers");
42
+ const lite_psm_event_pool_1 = require("./lite-psm-event-pool");
43
+ const utils_2 = require("../../executor/utils");
44
+ const psmInterface = new abi_1.Interface(psm_json_1.default);
45
+ const WAD = bigint_constants_1.BI_POWS[18];
46
+ const ceilDiv = (a, b) => (a + b - 1n) / b;
47
+ class LitePsm extends simple_exchange_1.SimpleExchange {
48
+ constructor(network, dexKey, dexHelper, dai = config_1.LitePsmConfig[dexKey][network].dai, vatAddress = config_1.LitePsmConfig[dexKey][network].vatAddress, poolConfigs = config_1.LitePsmConfig[dexKey][network].pools) {
49
+ super(dexHelper, dexKey);
50
+ this.network = network;
51
+ this.dexHelper = dexHelper;
52
+ this.dai = dai;
53
+ this.vatAddress = vatAddress;
54
+ this.poolConfigs = poolConfigs;
55
+ // warning: There is limit on swap
56
+ this.hasConstantPriceLargeAmounts = true;
57
+ this.isFeeOnTransferSupported = false;
58
+ this.logger = dexHelper.getLogger(dexKey);
59
+ this.eventPools = {};
60
+ poolConfigs.forEach(p => (this.eventPools[p.gem.address.toLowerCase()] = new lite_psm_event_pool_1.LitePsmEventPool(dexKey, network, dexHelper, this.logger, p, this.vatAddress)));
61
+ }
62
+ static getDirectFunctionNameV6() {
63
+ return [core_1.ContractMethodV6.swapExactAmountInOutOnMakerPSM];
64
+ }
65
+ async initializePricing(blockNumber) {
66
+ const poolStates = await (0, lite_psm_event_pool_1.getOnChainState)(this.dexHelper.multiContract, this.poolConfigs, this.vatAddress, blockNumber, config_1.LitePsmConfig[this.dexKey][this.network].dai.address);
67
+ await Promise.all(this.poolConfigs.map(async (p, i) => {
68
+ const eventPool = this.eventPools[p.gem.address.toLowerCase()];
69
+ await eventPool.initialize(blockNumber, {
70
+ state: poolStates[i],
71
+ });
72
+ }));
73
+ }
74
+ // Returns the list of contract adapters (name and index)
75
+ // for a buy/sell. Return null if there are no adapters.
76
+ getAdapters(side) {
77
+ return null;
78
+ }
79
+ getEventPool(srcToken, destToken) {
80
+ const srcAddress = srcToken.address.toLowerCase();
81
+ const destAddress = destToken.address.toLowerCase();
82
+ return ((srcAddress === this.dai.address && this.eventPools[destAddress]) ||
83
+ (destAddress === this.dai.address && this.eventPools[srcAddress]) ||
84
+ null);
85
+ }
86
+ // Returns list of pool identifiers that can be used
87
+ // for a given swap. poolIdentifiers must be unique
88
+ // across DEXes.
89
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
90
+ const eventPool = this.getEventPool(srcToken, destToken);
91
+ if (!eventPool)
92
+ return [];
93
+ return [eventPool.getIdentifier()];
94
+ }
95
+ async getPoolState(pool, blockNumber) {
96
+ const eventState = pool.getState(blockNumber);
97
+ if (eventState)
98
+ return eventState;
99
+ const onChainState = await pool.generateState(blockNumber);
100
+ pool.setState(onChainState, blockNumber);
101
+ return onChainState;
102
+ }
103
+ computePrices(isSrcDai, to18ConversionFactor, side, amounts, poolState) {
104
+ const sellGemCheck = (dart) => {
105
+ return dart <= poolState.daiBalance;
106
+ };
107
+ const buyGemCheck = (dart) => {
108
+ return dart <= poolState.gemBalance * to18ConversionFactor;
109
+ };
110
+ return amounts.map(a => {
111
+ if (side === constants_1.SwapSide.SELL) {
112
+ if (isSrcDai) {
113
+ const gemAmt18 = (a * WAD) / (WAD + poolState.tout);
114
+ if (buyGemCheck(gemAmt18))
115
+ return gemAmt18 / to18ConversionFactor;
116
+ }
117
+ else {
118
+ const gemAmt18 = to18ConversionFactor * a;
119
+ if (sellGemCheck(gemAmt18))
120
+ return gemAmt18 - (gemAmt18 * poolState.tin) / WAD;
121
+ }
122
+ }
123
+ else {
124
+ if (isSrcDai) {
125
+ const gemAmt18 = to18ConversionFactor * a;
126
+ if (buyGemCheck(gemAmt18))
127
+ return gemAmt18 + (gemAmt18 * poolState.tout) / WAD;
128
+ }
129
+ else {
130
+ const gemAmt18 = (a * WAD) / (WAD - poolState.tin);
131
+ if (sellGemCheck(gemAmt18))
132
+ return gemAmt18 / to18ConversionFactor;
133
+ }
134
+ }
135
+ return 0n;
136
+ });
137
+ }
138
+ // Returns pool prices for amounts.
139
+ // If limitPools is defined only pools in limitPools
140
+ // should be used. If limitPools is undefined then
141
+ // any pools can be used.
142
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
143
+ const eventPool = this.getEventPool(srcToken, destToken);
144
+ if (!eventPool)
145
+ return null;
146
+ const poolIdentifier = eventPool.getIdentifier();
147
+ if (limitPools && !limitPools.includes(poolIdentifier))
148
+ return null;
149
+ const poolState = await this.getPoolState(eventPool, blockNumber);
150
+ const unitVolume = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? srcToken : destToken).decimals);
151
+ const isSrcDai = srcToken.address.toLowerCase() === this.dai.address;
152
+ const gem = isSrcDai ? destToken : srcToken;
153
+ const toll = (side === constants_1.SwapSide.SELL && isSrcDai) ||
154
+ (side === constants_1.SwapSide.BUY && !isSrcDai)
155
+ ? poolState.tout
156
+ : poolState.tin;
157
+ const [unit, ...prices] = this.computePrices(isSrcDai, eventPool.to18ConversionFactor, side, [unitVolume, ...amounts], poolState);
158
+ return [
159
+ {
160
+ prices,
161
+ unit,
162
+ data: {
163
+ toll: toll.toString(),
164
+ psmAddress: eventPool.poolConfig.psmAddress,
165
+ gemJoinAddress: eventPool.poolConfig.gemJoinAddress,
166
+ gemDecimals: gem.decimals,
167
+ },
168
+ poolAddresses: [eventPool.poolConfig.psmAddress],
169
+ exchange: this.dexKey,
170
+ gasCost: isSrcDai ? 80000 : 100000,
171
+ poolIdentifier,
172
+ },
173
+ ];
174
+ }
175
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
176
+ getCalldataGasCost(poolPrices) {
177
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
178
+ CALLDATA_GAS_COST.LENGTH_SMALL +
179
+ CALLDATA_GAS_COST.ADDRESS +
180
+ // TODO: pools have toll as zero currently but may change
181
+ CALLDATA_GAS_COST.ZERO +
182
+ // Either 1 (18 decimals) or 1e12 = 0xe8d4a51000 (6 decimals)
183
+ CALLDATA_GAS_COST.wordNonZeroBytes(poolPrices.data.gemDecimals === 6 ? 4 : 1));
184
+ }
185
+ getPsmParams(srcToken, srcAmount, destAmount, data, side) {
186
+ const isSrcDai = srcToken.toLowerCase() === this.dai.address;
187
+ const to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - data.gemDecimals);
188
+ if (side === constants_1.SwapSide.SELL) {
189
+ if (isSrcDai) {
190
+ const gemAmt18 = (BigInt(srcAmount) * WAD) / (WAD + BigInt(data.toll));
191
+ return {
192
+ isGemSell: false,
193
+ gemAmount: (gemAmt18 / to18ConversionFactor).toString(),
194
+ };
195
+ }
196
+ else {
197
+ return { isGemSell: true, gemAmount: srcAmount };
198
+ }
199
+ }
200
+ else {
201
+ if (isSrcDai) {
202
+ return { isGemSell: false, gemAmount: destAmount };
203
+ }
204
+ else {
205
+ const gemAmt = ceilDiv(BigInt(destAmount) * WAD, (WAD - BigInt(data.toll)) * to18ConversionFactor);
206
+ return {
207
+ isGemSell: true,
208
+ gemAmount: gemAmt.toString(),
209
+ };
210
+ }
211
+ }
212
+ }
213
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
214
+ return {
215
+ targetExchange: '0x',
216
+ networkFee: '0',
217
+ payload: '0x',
218
+ };
219
+ }
220
+ getTokenFromAddress(address) {
221
+ return { address, decimals: 0 };
222
+ }
223
+ async preProcessTransaction(optimalSwapExchange, srcToken, destToken, side, options) {
224
+ if (!optimalSwapExchange.data) {
225
+ throw new Error(`Error_${this.dexKey}_preProcessTransaction payload is not received`);
226
+ }
227
+ let isApproved = false;
228
+ // isApproved is only used in direct method and available only for v6, then no need to check approve for v5
229
+ // because it's either done in getSimpleParam or approve call in the adapter smart contract
230
+ if (options.version === core_1.ParaSwapVersion.V6 && options.isDirectMethod) {
231
+ isApproved = await this.dexHelper.augustusApprovals.hasApproval(options.executionContractAddress, srcToken.address, srcToken.address.toLowerCase() === this.dai.address.toLowerCase()
232
+ ? optimalSwapExchange.data.psmAddress
233
+ : optimalSwapExchange.data.gemJoinAddress);
234
+ }
235
+ return [
236
+ {
237
+ ...optimalSwapExchange,
238
+ data: { ...optimalSwapExchange.data, isApproved },
239
+ },
240
+ {},
241
+ ];
242
+ }
243
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
244
+ const { isGemSell, gemAmount } = this.getPsmParams(srcToken, srcAmount, destAmount, data, side);
245
+ let exchangeData = psmInterface.encodeFunctionData(isGemSell ? 'sellGem' : 'buyGem', [recipient, gemAmount]);
246
+ // append toll and to18ConversionFactor & set specialDexFlag = SWAP_ON_MAKER_PSM to
247
+ // - `buyGem` on Ex1 & Ex2
248
+ // - `sellGem` on Ex3
249
+ let specialDexFlag = types_1.SpecialDex.DEFAULT;
250
+ if ((side === constants_1.SwapSide.SELL && !isGemSell) ||
251
+ (side === constants_1.SwapSide.BUY && isGemSell)) {
252
+ exchangeData = (0, bytes_1.hexConcat)([
253
+ exchangeData,
254
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(BigInt(data.toll)), 32),
255
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)((0, utils_1.getBigIntPow)(18 - data.gemDecimals)), 32),
256
+ ]);
257
+ specialDexFlag = types_1.SpecialDex.SWAP_ON_MAKER_PSM;
258
+ }
259
+ return {
260
+ needWrapNative: this.needWrapNative,
261
+ dexFuncHasRecipient: true,
262
+ exchangeData,
263
+ targetExchange: data.psmAddress,
264
+ specialDexFlag,
265
+ spender: isGemSell ? data.gemJoinAddress : data.psmAddress,
266
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(psmInterface, isGemSell ? 'sellGem' : 'buyGem', isGemSell ? 'daiOutWad' : 'daiInWad'),
267
+ };
268
+ }
269
+ getDirectParamV6(srcToken, destToken, fromAmount, toAmount, quotedAmount, data, side, permit, uuid, partnerAndFee, beneficiary, blockNumber, contractMethod) {
270
+ if (!contractMethod)
271
+ throw new Error(`contractMethod need to be passed`);
272
+ if (!LitePsm.getDirectFunctionNameV6().includes(contractMethod)) {
273
+ throw new Error(`Invalid contract method ${contractMethod}`);
274
+ }
275
+ const beneficiaryParam = ethers_1.BigNumber.from(beneficiary);
276
+ const approveParam = !data.isApproved
277
+ ? ethers_1.BigNumber.from(1).shl(255)
278
+ : ethers_1.BigNumber.from(0);
279
+ const directionParam = side === constants_1.SwapSide.SELL ? ethers_1.BigNumber.from(0) : ethers_1.BigNumber.from(1).shl(254);
280
+ const beneficiaryDirectionApproveFlag = beneficiaryParam
281
+ .or(directionParam)
282
+ .or(approveParam);
283
+ const to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - data.gemDecimals);
284
+ const metadata = (0, bytes_1.hexConcat)([
285
+ (0, bytes_1.hexZeroPad)((0, utils_1.uuidToBytes16)(uuid), 16),
286
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(blockNumber), 16),
287
+ ]);
288
+ const params = [
289
+ srcToken,
290
+ // not used on the contract, but used for analytics
291
+ destToken,
292
+ fromAmount,
293
+ // TODO: Investigate `toAmount` vs `quotedAmount`
294
+ side === constants_1.SwapSide.BUY && srcToken.toLowerCase() === this.dai.address
295
+ ? toAmount
296
+ : quotedAmount,
297
+ data.toll,
298
+ to18ConversionFactor.toString(),
299
+ data.psmAddress,
300
+ data.gemJoinAddress,
301
+ metadata,
302
+ beneficiaryDirectionApproveFlag.toString(),
303
+ ];
304
+ const payload = [params, permit];
305
+ const encoder = (...params) => {
306
+ return this.augustusV6Interface.encodeFunctionData(core_1.ContractMethodV6.swapExactAmountInOutOnMakerPSM, [...params]);
307
+ };
308
+ return { params: payload, encoder, networkFee: '0' };
309
+ }
310
+ // Returns list of top pools based on liquidity. Max
311
+ // limit number pools should be returned.
312
+ async getTopPoolsForToken(tokenAddress, limit) {
313
+ const _tokenAddress = tokenAddress.toLowerCase();
314
+ // Liquidity depends on the swapping side hence we simply use the min
315
+ // Its always in terms of stable coin hence liquidityUSD = liquidity
316
+ const minLiq = (poolState, decimals) => {
317
+ const buyLimit = poolState.gemBalance * (0, utils_1.getBigIntPow)(18 - decimals);
318
+ const sellLimit = poolState.daiBalance;
319
+ return (2 *
320
+ parseInt(((buyLimit > sellLimit ? sellLimit : buyLimit) / bigint_constants_1.BI_POWS[18]).toString()));
321
+ };
322
+ const isDai = _tokenAddress === this.dai.address;
323
+ const validPoolConfigs = isDai
324
+ ? this.poolConfigs
325
+ : this.eventPools[_tokenAddress]
326
+ ? [this.eventPools[_tokenAddress].poolConfig]
327
+ : [];
328
+ if (!validPoolConfigs.length)
329
+ return [];
330
+ const poolStates = await (0, lite_psm_event_pool_1.getOnChainState)(this.dexHelper.multiContract, validPoolConfigs, this.vatAddress, 'latest', config_1.LitePsmConfig[this.dexKey][this.network].dai.address);
331
+ return validPoolConfigs.map((p, i) => ({
332
+ exchange: this.dexKey,
333
+ address: p.psmAddress,
334
+ liquidityUSD: minLiq(poolStates[i], p.gem.decimals),
335
+ connectorTokens: [isDai ? p.gem : this.dai],
336
+ }));
337
+ }
338
+ }
339
+ exports.LitePsm = LitePsm;
340
+ LitePsm.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.LitePsmConfig);
341
+ //# sourceMappingURL=lite-psm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lite-psm.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/lite-psm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA+C;AAgB/C,+CAAkE;AAClE,2EAA6D;AAC7D,uCAIqB;AAUrB,wDAAoD;AACpD,qCAAyC;AACzC,2EAAiD;AACjD,6DAAiD;AACjD,gDAAkD;AAClD,gDAAsE;AACtE,yCAIwB;AACxB,mCAAmC;AACnC,+DAA0E;AAC1E,gDAAmE;AAEnE,MAAM,YAAY,GAAG,IAAI,eAAS,CAAC,kBAAM,CAAC,CAAC;AAC3C,MAAM,GAAG,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;AAExB,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAE3D,MAAa,OACX,SAAQ,gCAAc;IActB,YACY,OAAgB,EAC1B,MAAc,EACJ,SAAqB,EACrB,MAAa,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAC/C,aAAsB,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAC/D,cAA4B,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK;QAE1E,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAPf,YAAO,GAAP,OAAO,CAAS;QAEhB,cAAS,GAAT,SAAS,CAAY;QACrB,QAAG,GAAH,GAAG,CAA4C;QAC/C,eAAU,GAAV,UAAU,CAAqD;QAC/D,gBAAW,GAAX,WAAW,CAAqD;QAf5E,kCAAkC;QACzB,iCAA4B,GAAG,IAAI,CAAC;QACpC,6BAAwB,GAAG,KAAK,CAAC;QAgBxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,WAAW,CAAC,OAAO,CACjB,CAAC,CAAC,EAAE,CACF,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,sCAAgB,CAClE,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,CAAC,MAAM,EACX,CAAC,EACD,IAAI,CAAC,UAAU,CAChB,CAAC,CACL,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,uBAAuB;QAC5B,OAAO,CAAC,uBAAgB,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,UAAU,GAAG,MAAM,IAAA,qCAAe,EACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,WAAW,EACX,sBAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CACrD,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE;gBACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,wDAAwD;IACxD,WAAW,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAe,EAAE,SAAgB;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,CACL,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,CAAC,WAAW,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,CACL,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,mDAAmD;IACnD,gBAAgB;IAChB,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,IAAsB,EACtB,WAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,aAAa,CACX,QAAiB,EACjB,oBAA4B,EAC5B,IAAc,EACd,OAAiB,EACjB,SAAoB;QAEpB,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACpC,OAAO,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,OAAO,IAAI,IAAI,SAAS,CAAC,UAAU,GAAG,oBAAoB,CAAC;QAC7D,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE;gBAC1B,IAAI,QAAQ,EAAE;oBACZ,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAI,WAAW,CAAC,QAAQ,CAAC;wBAAE,OAAO,QAAQ,GAAG,oBAAoB,CAAC;iBACnE;qBAAM;oBACL,MAAM,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAAC;oBAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC;wBACxB,OAAO,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBACtD;aACF;iBAAM;gBACL,IAAI,QAAQ,EAAE;oBACZ,MAAM,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAAC;oBAC1C,IAAI,WAAW,CAAC,QAAQ,CAAC;wBACvB,OAAO,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;iBACvD;qBAAM;oBACL,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnD,IAAI,YAAY,CAAC,QAAQ,CAAC;wBAAE,OAAO,QAAQ,GAAG,oBAAoB,CAAC;iBACpE;aACF;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,oDAAoD;IACpD,kDAAkD;IAClD,yBAAyB;IACzB,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,cAAc,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACjD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,IAAA,oBAAY,EAC7B,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,MAAM,IAAI,GACR,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;YACpC,CAAC,IAAI,KAAK,oBAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,CAAC,CAAC,SAAS,CAAC,IAAI;YAChB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;QAEpB,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAC1C,QAAQ,EACR,SAAS,CAAC,oBAAoB,EAC9B,IAAI,EACJ,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,EACxB,SAAS,CACV,CAAC;QAEF,OAAO;YACL;gBACE,MAAM;gBACN,IAAI;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;oBACrB,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU;oBAC3C,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,cAAc;oBACnD,WAAW,EAAE,GAAG,CAAC,QAAQ;iBAC1B;gBACD,aAAa,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;gBAChD,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,MAAO;gBACpC,cAAc;aACf;SACF,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,UAAmC;QACpD,OAAO,CACL,iBAAiB,CAAC,YAAY;YAC9B,iBAAiB,CAAC,YAAY;YAC9B,iBAAiB,CAAC,OAAO;YACzB,yDAAyD;YACzD,iBAAiB,CAAC,IAAI;YACtB,6DAA6D;YAC7D,iBAAiB,CAAC,gBAAgB,CAChC,UAAU,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C,CACF,CAAC;IACJ,CAAC;IAED,YAAY,CACV,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7D,MAAM,oBAAoB,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE;YAC1B,IAAI,QAAQ,EAAE;gBACZ,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,OAAO;oBACL,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC,QAAQ,GAAG,oBAAoB,CAAC,CAAC,QAAQ,EAAE;iBACxD,CAAC;aACH;iBAAM;gBACL,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;aAClD;SACF;aAAM;YACL,IAAI,QAAQ,EAAE;gBACZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;aACpD;iBAAM;gBACL,MAAM,MAAM,GAAG,OAAO,CACpB,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,EACxB,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,oBAAoB,CACjD,CAAC;gBACF,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE;iBAC7B,CAAC;aACH;SACF;IACH,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAgB;QAClC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,mBAAqD,EACrD,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,OAAqC;QAErC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,CAAC,MAAM,gDAAgD,CACrE,CAAC;SACH;QAED,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,2GAA2G;QAC3G,2FAA2F;QAC3F,IAAI,OAAO,CAAC,OAAO,KAAK,sBAAe,CAAC,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE;YACpE,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,CAC7D,OAAO,CAAC,wBAAwB,EAChC,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC/D,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU;gBACrC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAC5C,CAAC;SACH;QAED,OAAO;YACL;gBACE,GAAG,mBAAmB;gBACtB,IAAI,EAAE,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE;aAClD;YACD,EAAE;SACH,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAChD,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,IAAI,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAChD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAChC,CAAC,SAAS,EAAE,SAAS,CAAC,CACvB,CAAC;QAEF,mFAAmF;QACnF,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI,cAAc,GAAG,kBAAU,CAAC,OAAO,CAAC;QACxC,IACE,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;YACtC,CAAC,IAAI,KAAK,oBAAQ,CAAC,GAAG,IAAI,SAAS,CAAC,EACpC;YACA,YAAY,GAAG,IAAA,iBAAS,EAAC;gBACvB,YAAY;gBACZ,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;aAC7D,CAAC,CAAC;YACH,cAAc,GAAG,kBAAU,CAAC,iBAAiB,CAAC;SAC/C;QAED,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI;YACzB,YAAY;YACZ,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,cAAc;YACd,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;YAC1D,eAAe,EAAE,IAAA,mCAA2B,EAC1C,YAAY,EACZ,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAChC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CACrC;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB,CACd,QAAiB,EACjB,SAAkB,EAClB,UAA0B,EAC1B,QAAwB,EACxB,YAA4B,EAC5B,IAAiB,EACjB,IAAc,EACd,MAAc,EACd,IAAY,EACZ,aAAqB,EACrB,WAAmB,EACnB,WAAmB,EACnB,cAAsB;QAEtB,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,QAAQ,CAAC,cAAe,CAAC,EAAE;YAChE,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;SAC9D;QAED,MAAM,gBAAgB,GAAG,kBAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU;YACnC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,cAAc,GAClB,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1E,MAAM,+BAA+B,GAAG,gBAAgB;aACrD,EAAE,CAAC,cAAc,CAAC;aAClB,EAAE,CAAC,YAAY,CAAC,CAAC;QAEpB,MAAM,oBAAoB,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,IAAA,iBAAS,EAAC;YACzB,IAAA,kBAAU,EAAC,IAAA,qBAAa,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACnC,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,WAAW,CAAC,EAAE,EAAE,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAkB;YAC5B,QAAQ;YACR,mDAAmD;YACnD,SAAS;YACT,UAAU;YACV,iDAAiD;YACjD,IAAI,KAAK,oBAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO;gBAClE,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,YAAY;YAChB,IAAI,CAAC,IAAI;YACT,oBAAoB,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,cAAc;YACnB,QAAQ;YACR,+BAA+B,CAAC,QAAQ,EAAE;SAC3C,CAAC;QAEF,MAAM,OAAO,GAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,CAAC,GAAG,MAAyC,EAAE,EAAE;YAC/D,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAChD,uBAAgB,CAAC,8BAA8B,EAC/C,CAAC,GAAG,MAAM,CAAC,CACZ,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,oDAAoD;IACpD,yCAAyC;IACzC,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACjD,qEAAqE;QACrE,oEAAoE;QACpE,MAAM,MAAM,GAAG,CAAC,SAAoB,EAAE,QAAgB,EAAE,EAAE;YACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;YACvC,OAAO,CACL,CAAC;gBACD,QAAQ,CACN,CACE,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,0BAAO,CAAC,EAAE,CAAC,CAC5D,CAAC,QAAQ,EAAE,CACb,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,aAAa,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAEjD,MAAM,gBAAgB,GAAG,KAAK;YAC5B,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;gBAChC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC;gBAC7C,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,IAAA,qCAAe,EACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,gBAAgB,EAChB,IAAI,CAAC,UAAU,EACf,QAAQ,EACR,sBAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CACrD,CAAC;QAEF,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,OAAO,EAAE,CAAC,CAAC,UAAU;YACrB,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnD,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5C,CAAC,CAAC,CAAC;IACN,CAAC;;AArdH,0BAsdC;AA5ce,0BAAkB,GAC9B,IAAA,6BAAqB,EAAC,sBAAa,CAAC,CAAC"}