@paraswap/dex-lib 4.0.21 → 4.0.22-bal-v2-base-subgraph.0

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 (164) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/build/abi/integral/factory.json +333 -0
  10. package/build/abi/integral/oracle.json +501 -0
  11. package/build/abi/{inception/inception-ineth-pool.json → integral/pool.json} +522 -543
  12. package/build/abi/{wombat/pool.json → integral/relayer.json} +720 -473
  13. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  14. package/build/dex/aave-v1/aave-v1.js +0 -23
  15. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  16. package/build/dex/balancer-v2/config.js +1 -1
  17. package/build/dex/balancer-v2/config.js.map +1 -1
  18. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +49 -0
  19. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +104 -0
  20. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +1 -0
  21. package/build/dex/integral/config.d.ts +4 -0
  22. package/build/dex/integral/config.js +20 -0
  23. package/build/dex/integral/config.js.map +1 -0
  24. package/build/dex/integral/context.d.ts +40 -0
  25. package/build/dex/integral/context.js +158 -0
  26. package/build/dex/integral/context.js.map +1 -0
  27. package/build/dex/integral/integral-factory.d.ts +24 -0
  28. package/build/dex/integral/integral-factory.js +95 -0
  29. package/build/dex/integral/integral-factory.js.map +1 -0
  30. package/build/dex/integral/integral-pool.d.ts +50 -0
  31. package/build/dex/integral/integral-pool.js +149 -0
  32. package/build/dex/integral/integral-pool.js.map +1 -0
  33. package/build/dex/integral/integral-pricing.d.ts +18 -0
  34. package/build/dex/integral/integral-pricing.js +114 -0
  35. package/build/dex/integral/integral-pricing.js.map +1 -0
  36. package/build/dex/integral/integral-relayer.d.ts +42 -0
  37. package/build/dex/integral/integral-relayer.js +192 -0
  38. package/build/dex/integral/integral-relayer.js.map +1 -0
  39. package/build/dex/integral/integral-token.d.ts +27 -0
  40. package/build/dex/integral/integral-token.js +59 -0
  41. package/build/dex/integral/integral-token.js.map +1 -0
  42. package/build/dex/integral/integral.d.ts +41 -0
  43. package/build/dex/integral/integral.js +376 -0
  44. package/build/dex/integral/integral.js.map +1 -0
  45. package/build/dex/integral/types.d.ts +85 -0
  46. package/build/dex/integral/types.js +9 -0
  47. package/build/dex/integral/types.js.map +1 -0
  48. package/build/dex/integral/utils-e2e.d.ts +9 -0
  49. package/build/dex/integral/utils-e2e.js +131 -0
  50. package/build/dex/integral/utils-e2e.js.map +1 -0
  51. package/build/dex/integral/utils.d.ts +17 -0
  52. package/build/dex/integral/utils.js +94 -0
  53. package/build/dex/integral/utils.js.map +1 -0
  54. package/build/dex/jarvis.d.ts +1 -2
  55. package/build/dex/jarvis.js +0 -58
  56. package/build/dex/jarvis.js.map +1 -1
  57. package/build/dex/maverick-v1/config.js +1 -1
  58. package/build/dex/maverick-v1/config.js.map +1 -1
  59. package/build/dex/platypus/platypus.d.ts +1 -2
  60. package/build/dex/platypus/platypus.js +0 -45
  61. package/build/dex/platypus/platypus.js.map +1 -1
  62. package/build/dex/stable-pool.js +8 -1
  63. package/build/dex/stable-pool.js.map +1 -1
  64. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  65. package/build/dex/swaap-v1/swaap-v1.js +0 -14
  66. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  67. package/build/dex/trader-joe-v2.1/optimizer.d.ts +2 -0
  68. package/build/dex/trader-joe-v2.1/optimizer.js +47 -0
  69. package/build/dex/trader-joe-v2.1/optimizer.js.map +1 -0
  70. package/build/dex/uniswap-v3/config.js +1 -1
  71. package/build/dex/uniswap-v3/config.js.map +1 -1
  72. package/build/dex/zerox/index.d.ts +26 -4
  73. package/build/dex/zerox/index.js +42 -50
  74. package/build/dex/zerox/index.js.map +1 -1
  75. package/build/dex/zerox/types.d.ts +0 -29
  76. package/build/dex/zerox/types.js +1 -8
  77. package/build/dex/zerox/types.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +165 -102
  80. package/src/dex/balancer-v2/balancer-v2-integration.test.ts +238 -80
  81. package/src/dex/balancer-v2/config.ts +1 -2
  82. package/src/dex/maverick-v1/config.ts +1 -2
  83. package/src/dex/uniswap-v3/config.ts +1 -2
  84. package/.vscode/launch.json +0 -53
  85. package/.vscode/settings.json +0 -2
  86. package/.vscode/tasks.json +0 -15
  87. package/build/abi/inception/inception-ratio-feed.json +0 -329
  88. package/build/abi/inception/inception-vault.json +0 -991
  89. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  90. package/build/abi/usual-m-smart-m/usualM.abi.json +0 -483
  91. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  92. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  93. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  94. package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +0 -729
  95. package/build/dex/balancer-v3/abi/balancerBatchRouter.js +0 -732
  96. package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +0 -1
  97. package/build/dex/balancer-v3/abi/balancerRouter.d.ts +0 -1406
  98. package/build/dex/balancer-v3/abi/balancerRouter.js +0 -1175
  99. package/build/dex/balancer-v3/abi/balancerRouter.js.map +0 -1
  100. package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +0 -2081
  101. package/build/dex/balancer-v3/abi/vaultExtension.V3.js +0 -1851
  102. package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +0 -1
  103. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.d.ts +0 -34
  104. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js +0 -406
  105. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js.map +0 -1
  106. package/build/dex/inception/config.d.ts +0 -4
  107. package/build/dex/inception/config.js +0 -109
  108. package/build/dex/inception/config.js.map +0 -1
  109. package/build/dex/inception/inception-event-pool.d.ts +0 -16
  110. package/build/dex/inception/inception-event-pool.js +0 -49
  111. package/build/dex/inception/inception-event-pool.js.map +0 -1
  112. package/build/dex/inception/inception.d.ts +0 -43
  113. package/build/dex/inception/inception.js +0 -180
  114. package/build/dex/inception/inception.js.map +0 -1
  115. package/build/dex/inception/tokens.d.ts +0 -9
  116. package/build/dex/inception/tokens.js +0 -28
  117. package/build/dex/inception/tokens.js.map +0 -1
  118. package/build/dex/inception/types.d.ts +0 -22
  119. package/build/dex/inception/types.js +0 -3
  120. package/build/dex/inception/types.js.map +0 -1
  121. package/build/dex/inception/utils.d.ts +0 -7
  122. package/build/dex/inception/utils.js +0 -58
  123. package/build/dex/inception/utils.js.map +0 -1
  124. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  125. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  126. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  127. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  128. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  129. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +0 -1
  130. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  131. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  132. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  133. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  134. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  135. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  136. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  137. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
  138. package/build/dex/uniswap-v3/uniswap-v3-pricing.d.ts +0 -4
  139. package/build/dex/uniswap-v3/uniswap-v3-pricing.js +0 -43
  140. package/build/dex/uniswap-v3/uniswap-v3-pricing.js.map +0 -1
  141. package/build/dex/uniswap-v3/uniswap-v3-worker.d.ts +0 -1
  142. package/build/dex/uniswap-v3/uniswap-v3-worker.js +0 -10
  143. package/build/dex/uniswap-v3/uniswap-v3-worker.js.map +0 -1
  144. package/build/dex/usual/usual-m-smart-m.d.ts +0 -17
  145. package/build/dex/usual/usual-m-smart-m.js +0 -50
  146. package/build/dex/usual/usual-m-smart-m.js.map +0 -1
  147. package/build/dex/usual-m-smart-m/config.d.ts +0 -3
  148. package/build/dex/usual-m-smart-m/config.js +0 -13
  149. package/build/dex/usual-m-smart-m/config.js.map +0 -1
  150. package/build/dex/usual-m-smart-m/types.d.ts +0 -7
  151. package/build/dex/usual-m-smart-m/types.js +0 -3
  152. package/build/dex/usual-m-smart-m/types.js.map +0 -1
  153. package/build/dex/usual-m-smart-m/usual-m-smart-m.d.ts +0 -35
  154. package/build/dex/usual-m-smart-m/usual-m-smart-m.js +0 -161
  155. package/build/dex/usual-m-smart-m/usual-m-smart-m.js.map +0 -1
  156. package/build/dex/usual-m-usd0/config.d.ts +0 -3
  157. package/build/dex/usual-m-usd0/config.js +0 -14
  158. package/build/dex/usual-m-usd0/config.js.map +0 -1
  159. package/build/dex/usual-m-usd0/types.d.ts +0 -8
  160. package/build/dex/usual-m-usd0/types.js +0 -3
  161. package/build/dex/usual-m-usd0/types.js.map +0 -1
  162. package/build/dex/usual-m-usd0/usual-m-usd0.d.ts +0 -35
  163. package/build/dex/usual-m-usd0/usual-m-usd0.js +0 -159
  164. package/build/dex/usual-m-usd0/usual-m-usd0.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegralToken = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
6
+ class IntegralToken extends stateful_event_subscriber_1.StatefulEventSubscriber {
7
+ constructor(network, dexHelper, parentName, erc20Interface, tokenAddress, relayerAddress, onTransfer, logger, mapKey = '') {
8
+ super(parentName, `ERC20 Token`, dexHelper, logger, true, mapKey);
9
+ this.network = network;
10
+ this.dexHelper = dexHelper;
11
+ this.erc20Interface = erc20Interface;
12
+ this.tokenAddress = tokenAddress;
13
+ this.relayerAddress = relayerAddress;
14
+ this.onTransfer = onTransfer;
15
+ this.handlers = {};
16
+ this.addressesSubscribed = [tokenAddress];
17
+ this.logDecoder = (log) => {
18
+ let ret;
19
+ try {
20
+ ret = this.erc20Interface.parseLog(log);
21
+ }
22
+ catch (error) {
23
+ if (error instanceof Error) {
24
+ if (error.message.startsWith('no matching event')) {
25
+ // ignore custom events for some tokens
26
+ return null;
27
+ }
28
+ }
29
+ throw error;
30
+ }
31
+ return ret;
32
+ };
33
+ this.handlers['Transfer'] = this.handleTransfer.bind(this);
34
+ }
35
+ async generateState() {
36
+ return {};
37
+ }
38
+ getPoolIdentifierData() {
39
+ return { token: this.tokenAddress };
40
+ }
41
+ async processLog(state, log, blockHeader) {
42
+ const event = this.logDecoder(log);
43
+ if (event && event.name in this.handlers) {
44
+ await this.handlers[event.name](event, state, blockHeader);
45
+ }
46
+ return state;
47
+ }
48
+ async handleTransfer(event, state, _blockHeader) {
49
+ const from = event.args[0].toLowerCase();
50
+ const to = event.args[1].toLowerCase();
51
+ if (from === this.relayerAddress || to === this.relayerAddress) {
52
+ const amount = ethers_1.BigNumber.from(event.args[2]).toBigInt();
53
+ await this.onTransfer(this.tokenAddress, from, to, amount, _blockHeader.number);
54
+ }
55
+ return state;
56
+ }
57
+ }
58
+ exports.IntegralToken = IntegralToken;
59
+ //# sourceMappingURL=integral-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integral-token.js","sourceRoot":"","sources":["../../../src/dex/integral/integral-token.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAInC,+EAA0E;AAa1E,MAAa,aAAc,SAAQ,mDAAmC;IAWpE,YACW,OAAgB,EAChB,SAAqB,EAC9B,UAAkB,EACC,cAAyB,EACnC,YAAqB,EACrB,cAAuB,EACb,UAA8B,EACjD,MAAc,EACd,SAAiB,EAAE;QAEnB,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAVzD,YAAO,GAAP,OAAO,CAAS;QAChB,cAAS,GAAT,SAAS,CAAY;QAEX,mBAAc,GAAd,cAAc,CAAW;QACnC,iBAAY,GAAZ,YAAY,CAAS;QACrB,mBAAc,GAAd,cAAc,CAAS;QACb,eAAU,GAAV,UAAU,CAAoB;QAjBnD,aAAQ,GAMJ,EAAE,CAAC;QAgBL,IAAI,CAAC,mBAAmB,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC;YACR,IAAI;gBACF,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACzC;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,KAAK,YAAY,KAAK,EAAE;oBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;wBACjD,uCAAuC;wBACvC,OAAO,IAAI,CAAC;qBACb;iBACF;gBACD,MAAM,KAAK,CAAC;aACb;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,qBAAqB;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAAiB,EACjB,GAAkB,EAClB,WAAkC;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;SAC5D;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAqB,EACrB,KAAiB,EACjB,YAAmC;QAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,IAAI,EAAE,KAAK,IAAI,CAAC,cAAc,EAAE;YAC9D,MAAM,MAAM,GAAG,kBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,CAAC,UAAU,CACnB,IAAI,CAAC,YAAY,EACjB,IAAI,EACJ,EAAE,EACF,MAAM,EACN,YAAY,CAAC,MAAM,CACpB,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAjFD,sCAiFC"}
@@ -0,0 +1,41 @@
1
+ import { Token, Address, ExchangePrices, AdapterExchangeParam, PoolLiquidity, Logger, PoolPrices, NumberAsString, DexExchangeParam } from '../../types';
2
+ import { SwapSide, Network } from '../../constants';
3
+ import { Context, IDex } from '../idex';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { IntegralData, QuotingProps } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ export declare class Integral extends SimpleExchange implements IDex<IntegralData> {
8
+ readonly network: Network;
9
+ readonly dexKey: string;
10
+ readonly dexHelper: IDexHelper;
11
+ protected adapters: import("../../types").AdapterMappings;
12
+ protected subgraphURL: string | undefined;
13
+ readonly hasConstantPriceLargeAmounts = false;
14
+ private readonly context;
15
+ readonly isFeeOnTransferSupported = false;
16
+ static dexKeysWithNetwork: {
17
+ key: string;
18
+ networks: Network[];
19
+ }[];
20
+ logger: Logger;
21
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings);
22
+ initializePricing(blockNumber: number): Promise<void>;
23
+ getAdapters(side: SwapSide): {
24
+ name: string;
25
+ index: number;
26
+ }[] | null;
27
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
28
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<IntegralData>>;
29
+ getCalldataGasCost(poolPrices: PoolPrices<IntegralData>): number | number[];
30
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: IntegralData, side: SwapSide): AdapterExchangeParam;
31
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: IntegralData, side: SwapSide, _: Context, executorAddress: Address): DexExchangeParam;
32
+ updatePoolState(): Promise<void>;
33
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
34
+ getPriceOnChain(tokenIn: Token, tokenOut: Token, inverted: boolean, blockNumber: number): Promise<QuotingProps | null>;
35
+ private getQuotingProps;
36
+ private quoteSell;
37
+ private quoteBuy;
38
+ private checkLimits;
39
+ private getStates;
40
+ private getMaxLimits;
41
+ }
@@ -0,0 +1,376 @@
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.Integral = void 0;
30
+ const lodash_1 = __importDefault(require("lodash"));
31
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
32
+ const constants_1 = require("../../constants");
33
+ const utils_1 = require("../../utils");
34
+ const types_1 = require("./types");
35
+ const simple_exchange_1 = require("../simple-exchange");
36
+ const config_1 = require("./config");
37
+ const relayer_json_1 = __importDefault(require("../../abi/integral/relayer.json"));
38
+ const abi_1 = require("@ethersproject/abi");
39
+ const bigint_constants_1 = require("../../bigint-constants");
40
+ const utils_2 = require("./utils");
41
+ const context_1 = require("./context");
42
+ const utils_3 = require("./utils");
43
+ const PRECISION = bigint_constants_1.BI_POWS[18];
44
+ const SUBGRAPH_TIMEOUT = 20 * 1000;
45
+ const SWAP_ORDER_TIMEOUT = Math.floor(Date.now() / 1000) + 24 * 3600;
46
+ const relayerInterface = new abi_1.Interface(relayer_json_1.default);
47
+ class Integral extends simple_exchange_1.SimpleExchange {
48
+ constructor(network, dexKey, dexHelper, adapters = config_1.Adapters[network] || {}) {
49
+ super(dexHelper, dexKey);
50
+ this.network = network;
51
+ this.dexKey = dexKey;
52
+ this.dexHelper = dexHelper;
53
+ this.adapters = adapters;
54
+ this.hasConstantPriceLargeAmounts = false;
55
+ this.isFeeOnTransferSupported = false;
56
+ this.logger = dexHelper.getLogger(dexKey);
57
+ this.context = context_1.IntegralContext.initialize(network, dexKey, dexHelper, this.erc20Interface, config_1.IntegralConfig[dexKey][network].factoryAddress.toLowerCase(), config_1.IntegralConfig[dexKey][network].relayerAddress.toLowerCase());
58
+ this.subgraphURL = config_1.IntegralConfig[dexKey][network].subgraphURL;
59
+ }
60
+ async initializePricing(blockNumber) {
61
+ await this.context.factory.initialize(blockNumber);
62
+ const factoryState = this.context.factory.getState(blockNumber);
63
+ if (factoryState) {
64
+ await this.context.addPools(factoryState.pools, blockNumber, true);
65
+ }
66
+ }
67
+ // Returns the list of contract adapters (name and index)
68
+ // for a buy/sell. Return null if there are no adapters.
69
+ getAdapters(side) {
70
+ return this.adapters[side] ? this.adapters[side] : null;
71
+ }
72
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
73
+ const src = this.dexHelper.config.wrapETH(srcToken);
74
+ const dest = this.dexHelper.config.wrapETH(destToken);
75
+ if (src.address.toLowerCase() === dest.address.toLowerCase()) {
76
+ return [];
77
+ }
78
+ const tokenAddresses = [
79
+ src.address.toLowerCase(),
80
+ dest.address.toLowerCase(),
81
+ ]
82
+ .sort((a, b) => (a > b ? 1 : -1))
83
+ .join('_');
84
+ const poolIdentifier = `${this.dexKey}_${tokenAddresses}`;
85
+ return [poolIdentifier];
86
+ }
87
+ // Returns pool prices for amounts.
88
+ // If limitPools is defined only pools in limitPools
89
+ // should be used. If limitPools is undefined then
90
+ // any pools can be used.
91
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
92
+ const src = this.dexHelper.config.wrapETH(srcToken);
93
+ const dest = this.dexHelper.config.wrapETH(destToken);
94
+ if (src.address.toLowerCase() === dest.address.toLowerCase()) {
95
+ return null;
96
+ }
97
+ const poolIdentifier = (0, utils_2.getPoolIdentifier)(this.dexKey, src.address, dest.address);
98
+ if (limitPools && limitPools.every(p => p !== poolIdentifier)) {
99
+ return null;
100
+ }
101
+ const props = await this.getQuotingProps(src, dest, blockNumber);
102
+ if (!props) {
103
+ return null;
104
+ }
105
+ const unitAmount = (0, utils_1.getBigIntPow)(side == constants_1.SwapSide.SELL ? src.decimals : dest.decimals);
106
+ const unit = side == constants_1.SwapSide.SELL
107
+ ? this.quoteSell(unitAmount, props, false)
108
+ : this.quoteBuy(unitAmount, props, false);
109
+ try {
110
+ const prices = side == constants_1.SwapSide.SELL
111
+ ? amounts.map(amount => this.quoteSell(amount, props))
112
+ : amounts.map(amount => this.quoteBuy(amount, props));
113
+ return [
114
+ {
115
+ prices: prices,
116
+ unit: unit,
117
+ data: {
118
+ relayer: this.context.relayerAddress,
119
+ },
120
+ exchange: this.dexKey,
121
+ poolIdentifier,
122
+ gasCost: 350000,
123
+ poolAddresses: [props.poolAddress],
124
+ },
125
+ ];
126
+ }
127
+ catch (e) {
128
+ this.logger.error(`Error_getPricesVolume could not get price with error:`, e);
129
+ return null;
130
+ }
131
+ }
132
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
133
+ getCalldataGasCost(poolPrices) {
134
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
135
+ }
136
+ // Encode params required by the exchange adapter
137
+ // Used for multiSwap, buy & megaSwap
138
+ // Hint: abiCoder.encodeParameter() could be useful
139
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
140
+ const { relayer: exchange } = data;
141
+ // Encode here the payload for adapter
142
+ const payload = '0x';
143
+ return {
144
+ targetExchange: exchange,
145
+ payload,
146
+ networkFee: '0',
147
+ };
148
+ }
149
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side, _, executorAddress) {
150
+ const tokenIn = this.dexHelper.config.wrapETH(srcToken);
151
+ const tokenOut = this.dexHelper.config.wrapETH(destToken);
152
+ const swapData = relayerInterface.encodeFunctionData(side === constants_1.SwapSide.SELL ? types_1.IntegralFunctions.swap : types_1.IntegralFunctions.buy, [
153
+ {
154
+ ...{
155
+ tokenIn,
156
+ tokenOut,
157
+ wrapUnwrap: (0, utils_1.isETHAddress)(srcToken) || (0, utils_1.isETHAddress)(destToken),
158
+ to: recipient,
159
+ submitDeadline: SWAP_ORDER_TIMEOUT,
160
+ },
161
+ ...(side === constants_1.SwapSide.SELL
162
+ ? { amountIn: srcAmount, amountOutMin: destAmount }
163
+ : { amountInMax: srcAmount, amountOut: destAmount }),
164
+ },
165
+ ]);
166
+ return {
167
+ needWrapNative: this.needWrapNative,
168
+ dexFuncHasRecipient: true,
169
+ exchangeData: swapData,
170
+ targetExchange: this.context.relayerAddress,
171
+ returnAmountPos: undefined,
172
+ };
173
+ }
174
+ async updatePoolState() { }
175
+ async getTopPoolsForToken(tokenAddress, limit) {
176
+ if (!this.subgraphURL) {
177
+ return [];
178
+ }
179
+ const query = `
180
+ query ($token: Bytes!, $limit: Int) {
181
+ pools0: pairs(
182
+ first: $limit
183
+ orderBy: reserveUSD
184
+ orderDirection: desc
185
+ where: {token0: $token}
186
+ ) {
187
+ id
188
+ token0 {
189
+ id
190
+ decimals
191
+ }
192
+ token1 {
193
+ id
194
+ decimals
195
+ }
196
+ reserveUSD
197
+ }
198
+ pools1: pairs(
199
+ first: $limit
200
+ orderBy: reserveUSD
201
+ orderDirection: desc
202
+ where: {token1: $token}
203
+ ) {
204
+ id
205
+ token0 {
206
+ id
207
+ decimals
208
+ }
209
+ token1 {
210
+ id
211
+ decimals
212
+ }
213
+ reserveUSD
214
+ }
215
+ }`;
216
+ const { data } = await this.dexHelper.httpRequest.querySubgraph(this.subgraphURL, {
217
+ query,
218
+ variables: { token: tokenAddress.toLowerCase(), limit },
219
+ }, { timeout: SUBGRAPH_TIMEOUT });
220
+ if (!(data && data.pools0 && data.pools1))
221
+ throw new Error("Couldn't fetch the pools from the subgraph");
222
+ const pools0 = lodash_1.default.map(data.pools0, pool => ({
223
+ exchange: this.dexKey,
224
+ address: pool.id.toLowerCase(),
225
+ connectorTokens: [
226
+ {
227
+ address: pool.token1.id.toLowerCase(),
228
+ decimals: parseInt(pool.token1.decimals),
229
+ },
230
+ ],
231
+ liquidityUSD: parseFloat(pool.reserveUSD),
232
+ }));
233
+ const pools1 = lodash_1.default.map(data.pools1, pool => ({
234
+ exchange: this.dexKey,
235
+ address: pool.id.toLowerCase(),
236
+ connectorTokens: [
237
+ {
238
+ address: pool.token0.id.toLowerCase(),
239
+ decimals: parseInt(pool.token0.decimals),
240
+ },
241
+ ],
242
+ liquidityUSD: parseFloat(pool.reserveUSD),
243
+ }));
244
+ return lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, limit);
245
+ }
246
+ async getPriceOnChain(tokenIn, tokenOut, inverted, blockNumber) {
247
+ try {
248
+ const calldata = [
249
+ {
250
+ target: this.context.relayerAddress,
251
+ callData: relayerInterface.encodeFunctionData('getPoolState', [
252
+ tokenIn.address,
253
+ tokenOut.address,
254
+ ]),
255
+ },
256
+ ];
257
+ const data = await this.dexHelper.multiContract.methods
258
+ .aggregate(calldata)
259
+ .call({}, blockNumber);
260
+ const result = relayerInterface.decodeFunctionResult('getPoolState', data.returnData[0]);
261
+ const _limits = inverted
262
+ ? [result.limitMin1, result.limitMax1]
263
+ : [result.limitMin0, result.limitMax0];
264
+ const limits = [
265
+ BigInt(_limits[0].toString()),
266
+ BigInt(_limits[1].toString()),
267
+ ];
268
+ const [decimals0, decimals1] = inverted
269
+ ? [tokenOut.decimals, tokenIn.decimals]
270
+ : [tokenIn.decimals, tokenOut.decimals];
271
+ return {
272
+ price: BigInt(result.price.toString()),
273
+ poolAddress: result.poolAddress,
274
+ fee: BigInt(result.fee.toString()),
275
+ tokenOutLimits: limits,
276
+ decimalsConverter: (0, utils_2.getDecimalsConverter)(decimals0, decimals1, inverted),
277
+ };
278
+ }
279
+ catch (e) {
280
+ this.logger.error(`Error_getPriceOnChain could not get data with error:`, e);
281
+ return null;
282
+ }
283
+ }
284
+ async getQuotingProps(src, dest, blockNumber) {
285
+ const poolId = (0, utils_2.getPoolIdentifier)(this.dexKey, src.address, dest.address);
286
+ const inverted = (0, utils_2.isInverted)(src.address, dest.address);
287
+ const states = this.getStates(poolId, blockNumber);
288
+ if (!states) {
289
+ const resp = await this.getPriceOnChain(src, dest, inverted, blockNumber);
290
+ return resp;
291
+ }
292
+ const { base, poolAddress, relayer, relayerTokens } = states;
293
+ const price = (0, utils_2.getPrice)(states, inverted);
294
+ const token0 = (0, utils_2.sortTokens)(src.address, dest.address)[0];
295
+ const { max0, max1 } = this.getMaxLimits(poolAddress, relayer, relayerTokens);
296
+ return {
297
+ price,
298
+ poolAddress: states.poolAddress,
299
+ fee: relayer.swapFee,
300
+ tokenOutLimits: dest.address === token0
301
+ ? [relayer.limits.min0, max0]
302
+ : [relayer.limits.min1, max1],
303
+ decimalsConverter: (0, utils_2.getDecimalsConverter)(base.decimals0, base.decimals1, inverted),
304
+ };
305
+ }
306
+ quoteSell(amountIn, props, checkLimit = true) {
307
+ if (amountIn === 0n) {
308
+ return 0n;
309
+ }
310
+ const fee = (amountIn * props.fee) / PRECISION;
311
+ const amountInMinusFee = amountIn - fee;
312
+ const amountOut = (amountInMinusFee * props.price) / props.decimalsConverter;
313
+ if (checkLimit && !this.checkLimits(amountOut, props.tokenOutLimits)) {
314
+ return 0n;
315
+ // throw new Error(
316
+ // `Out of Limits - amountOut ${amountOut} not in between limits ${props.tokenOutLimits}`,
317
+ // );
318
+ }
319
+ return amountOut;
320
+ }
321
+ quoteBuy(amountOut, props, checkLimit = true) {
322
+ if (amountOut === 0n) {
323
+ return 0n;
324
+ }
325
+ if (checkLimit && !this.checkLimits(amountOut, props.tokenOutLimits)) {
326
+ return 0n;
327
+ // throw new Error(
328
+ // `Out of Limits - amountOut ${amountOut} not in between limits ${props.tokenOutLimits}`,
329
+ // );
330
+ }
331
+ const amountIn = (0, utils_3.ceil_div)(amountOut * props.decimalsConverter, props.price);
332
+ if (amountIn <= 0n) {
333
+ return 0n;
334
+ }
335
+ const amountInPlusFee = (0, utils_3.ceil_div)(amountIn * PRECISION, PRECISION - props.fee);
336
+ return amountInPlusFee;
337
+ }
338
+ checkLimits(amount, limits) {
339
+ if (amount < limits[0] || amount > limits[1]) {
340
+ return false;
341
+ }
342
+ return true;
343
+ }
344
+ getStates(poolId, blockNumber) {
345
+ const poolStates = this.context.pools[poolId];
346
+ if (poolStates && poolStates.base) {
347
+ const base = poolStates.base.getState(blockNumber);
348
+ const pricing = poolStates.pricing && poolStates.pricing.getState(blockNumber);
349
+ const relayerState = this.context.relayer.getState(blockNumber);
350
+ const relayer = relayerState && relayerState.pools[poolStates.base.poolAddress];
351
+ return base && pricing && relayer
352
+ ? {
353
+ base,
354
+ pricing,
355
+ relayer,
356
+ relayerTokens: relayerState.tokens,
357
+ poolAddress: poolStates.base.poolAddress,
358
+ }
359
+ : null;
360
+ }
361
+ else {
362
+ return null;
363
+ }
364
+ }
365
+ getMaxLimits(poolAddress, relayer, relayerTokens) {
366
+ const { token0, token1 } = this.context.relayer.getPools()[poolAddress.toLowerCase()];
367
+ const max0 = (relayerTokens[token0].balance * relayer.limits.maxMultiplier0) /
368
+ 10n ** 18n;
369
+ const max1 = (relayerTokens[token1].balance * relayer.limits.maxMultiplier1) /
370
+ 10n ** 18n;
371
+ return { max0, max1 };
372
+ }
373
+ }
374
+ exports.Integral = Integral;
375
+ Integral.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.IntegralConfig);
376
+ //# sourceMappingURL=integral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integral.js","sourceRoot":"","sources":["../../../src/dex/integral/integral.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { Address } from '../../types';
2
+ import { IntegralEventPool } from './integral-pool';
3
+ import { PoolState as UniswapPoolState } from '../uniswap-v3/types';
4
+ import { BigNumber } from 'ethers';
5
+ import { IntegralPricing } from './integral-pricing';
6
+ export declare type Requires<Class, Prop extends keyof Class> = Class & Required<Pick<Class, Prop>>;
7
+ export declare type IntegralPool = {
8
+ base?: IntegralEventPool;
9
+ pricing?: IntegralPricing;
10
+ enabled: boolean;
11
+ };
12
+ export declare type QuotingProps = {
13
+ poolAddress: Address;
14
+ price: bigint;
15
+ fee: bigint;
16
+ tokenOutLimits: [bigint, bigint];
17
+ decimalsConverter: bigint;
18
+ };
19
+ export declare type PoolState = {
20
+ swapFee: bigint;
21
+ mintFee: bigint;
22
+ burnFee: bigint;
23
+ decimals0: number;
24
+ decimals1: number;
25
+ oracle: Address;
26
+ uniswapPool: Address;
27
+ uniswapPoolFee: bigint;
28
+ };
29
+ export declare type RelayerPoolState = {
30
+ isEnabled: boolean;
31
+ swapFee: bigint;
32
+ twapInterval: number;
33
+ limits: {
34
+ min0: bigint;
35
+ min1: bigint;
36
+ maxMultiplier0: bigint;
37
+ maxMultiplier1: bigint;
38
+ };
39
+ };
40
+ export declare type RelayerTokensState = {
41
+ [tokenAddress: string]: {
42
+ balance: bigint;
43
+ };
44
+ };
45
+ export declare type RelayerState = {
46
+ pools: {
47
+ [poolAddress: string]: RelayerPoolState;
48
+ };
49
+ tokens: RelayerTokensState;
50
+ };
51
+ export declare type PoolInitProps = {
52
+ [poolAddress: string]: {
53
+ token0: Address;
54
+ token1: Address;
55
+ };
56
+ };
57
+ export declare type FactoryState = {
58
+ pools: PoolInitProps;
59
+ };
60
+ export declare type PoolStates = {
61
+ base: PoolState;
62
+ relayer: RelayerPoolState;
63
+ relayerTokens: RelayerTokensState;
64
+ pricing: UniswapPoolState;
65
+ poolAddress: Address;
66
+ };
67
+ export declare type TokenState = Record<string, never>;
68
+ export declare type IntegralData = {
69
+ relayer: Address;
70
+ };
71
+ export declare type DexParams = {
72
+ factoryAddress: string;
73
+ relayerAddress: string;
74
+ subgraphURL?: string;
75
+ };
76
+ export declare enum IntegralFunctions {
77
+ swap = "sell",
78
+ buy = "buy"
79
+ }
80
+ export declare type Observation = {
81
+ blockTimestamp: number;
82
+ initialized: boolean;
83
+ secondsPerLiquidityCumulativeX128: BigNumber;
84
+ tickCumulative: BigNumber;
85
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegralFunctions = void 0;
4
+ var IntegralFunctions;
5
+ (function (IntegralFunctions) {
6
+ IntegralFunctions["swap"] = "sell";
7
+ IntegralFunctions["buy"] = "buy";
8
+ })(IntegralFunctions = exports.IntegralFunctions || (exports.IntegralFunctions = {}));
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/integral/types.ts"],"names":[],"mappings":";;;AA8EA,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,gCAAW,CAAA;AACb,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B"}
@@ -0,0 +1,9 @@
1
+ import { Address } from '../../types';
2
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
3
+ import { Provider } from '@ethersproject/providers';
4
+ export declare function updateEventSubscriber<SubscriberState>(eventSubscriber: StatefulEventSubscriber<SubscriberState>, subscribedAddress: Address[], fetchState: (blocknumber: number) => Promise<SubscriberState>, blockNumber: number, cacheKey: string, provider: Provider): Promise<void>;
5
+ export declare function checkEventSubscriber<SubscriberState>(eventSubscriber: StatefulEventSubscriber<SubscriberState>, fetchState: (blocknumber: number) => Promise<SubscriberState>, blockNumber: number, cacheKey: string, stateCompare?: (state: SubscriberState, expectedState: SubscriberState) => void): Promise<void>;
6
+ export declare function deepTypecast<T>(obj: any, checker: (val: any) => boolean, caster: (val: T) => any): any;
7
+ export declare function getSavedConfig<Config>(blockNumber: number, cacheKey: string): Config | undefined;
8
+ export declare function saveConfig<Config>(blockNumber: number, cacheKey: string, config: Config): void;
9
+ export declare function getSavedState<SubscriberState>(blockNumber: number, cacheKey: string): SubscriberState | undefined;