@paraswap/dex-lib 2.42.27 → 2.42.29

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 (121) hide show
  1. package/build/abi/solidly-v3/SolidlyV3Pool.abi.json +738 -0
  2. package/build/abi/solidly-v3/SolidlyV3StateMulticall.abi.json +375 -0
  3. package/build/config.js +2 -2
  4. package/build/dex/index.js +4 -2
  5. package/build/dex/index.js.map +1 -1
  6. package/build/dex/solidly-v3/config.d.ts +9 -0
  7. package/build/dex/solidly-v3/config.js +58 -0
  8. package/build/dex/solidly-v3/config.js.map +1 -0
  9. package/build/dex/solidly-v3/constants.d.ts +27 -0
  10. package/build/dex/solidly-v3/constants.js +34 -0
  11. package/build/dex/solidly-v3/constants.js.map +1 -0
  12. package/build/dex/solidly-v3/contract-math/BitMath.d.ts +4 -0
  13. package/build/dex/solidly-v3/contract-math/BitMath.js +93 -0
  14. package/build/dex/solidly-v3/contract-math/BitMath.js.map +1 -0
  15. package/build/dex/solidly-v3/contract-math/FixedPoint128.d.ts +3 -0
  16. package/build/dex/solidly-v3/contract-math/FixedPoint128.js +8 -0
  17. package/build/dex/solidly-v3/contract-math/FixedPoint128.js.map +1 -0
  18. package/build/dex/solidly-v3/contract-math/FixedPoint96.d.ts +4 -0
  19. package/build/dex/solidly-v3/contract-math/FixedPoint96.js +9 -0
  20. package/build/dex/solidly-v3/contract-math/FixedPoint96.js.map +1 -0
  21. package/build/dex/solidly-v3/contract-math/FullMath.d.ts +4 -0
  22. package/build/dex/solidly-v3/contract-math/FullMath.js +19 -0
  23. package/build/dex/solidly-v3/contract-math/FullMath.js.map +1 -0
  24. package/build/dex/solidly-v3/contract-math/LiquidityMath.d.ts +3 -0
  25. package/build/dex/solidly-v3/contract-math/LiquidityMath.js +22 -0
  26. package/build/dex/solidly-v3/contract-math/LiquidityMath.js.map +1 -0
  27. package/build/dex/solidly-v3/contract-math/SqrtPriceMath.d.ts +10 -0
  28. package/build/dex/solidly-v3/contract-math/SqrtPriceMath.js +91 -0
  29. package/build/dex/solidly-v3/contract-math/SqrtPriceMath.js.map +1 -0
  30. package/build/dex/solidly-v3/contract-math/SwapMath.d.ts +8 -0
  31. package/build/dex/solidly-v3/contract-math/SwapMath.js +70 -0
  32. package/build/dex/solidly-v3/contract-math/SwapMath.js.map +1 -0
  33. package/build/dex/solidly-v3/contract-math/Tick.d.ts +7 -0
  34. package/build/dex/solidly-v3/contract-math/Tick.js +36 -0
  35. package/build/dex/solidly-v3/contract-math/Tick.js.map +1 -0
  36. package/build/dex/solidly-v3/contract-math/TickBitMap.d.ts +7 -0
  37. package/build/dex/solidly-v3/contract-math/TickBitMap.js +84 -0
  38. package/build/dex/solidly-v3/contract-math/TickBitMap.js.map +1 -0
  39. package/build/dex/solidly-v3/contract-math/TickMath.d.ts +8 -0
  40. package/build/dex/solidly-v3/contract-math/TickMath.js +162 -0
  41. package/build/dex/solidly-v3/contract-math/TickMath.js.map +1 -0
  42. package/build/dex/solidly-v3/contract-math/UnsafeMath.d.ts +3 -0
  43. package/build/dex/solidly-v3/contract-math/UnsafeMath.js +10 -0
  44. package/build/dex/solidly-v3/contract-math/UnsafeMath.js.map +1 -0
  45. package/build/dex/solidly-v3/contract-math/uniswap-v3-math.d.ts +31 -0
  46. package/build/dex/solidly-v3/contract-math/uniswap-v3-math.js +363 -0
  47. package/build/dex/solidly-v3/contract-math/uniswap-v3-math.js.map +1 -0
  48. package/build/dex/solidly-v3/contract-math/utils.d.ts +7 -0
  49. package/build/dex/solidly-v3/contract-math/utils.js +39 -0
  50. package/build/dex/solidly-v3/contract-math/utils.js.map +1 -0
  51. package/build/dex/solidly-v3/solidly-v3-factory.d.ts +26 -0
  52. package/build/dex/solidly-v3/solidly-v3-factory.js +44 -0
  53. package/build/dex/solidly-v3/solidly-v3-factory.js.map +1 -0
  54. package/build/dex/solidly-v3/solidly-v3-pool.d.ts +44 -0
  55. package/build/dex/solidly-v3/solidly-v3-pool.js +298 -0
  56. package/build/dex/solidly-v3/solidly-v3-pool.js.map +1 -0
  57. package/build/dex/solidly-v3/solidly-v3.d.ts +67 -0
  58. package/build/dex/solidly-v3/solidly-v3.js +590 -0
  59. package/build/dex/solidly-v3/solidly-v3.js.map +1 -0
  60. package/build/dex/solidly-v3/types.d.ts +132 -0
  61. package/build/dex/solidly-v3/types.js +9 -0
  62. package/build/dex/solidly-v3/types.js.map +1 -0
  63. package/build/dex/solidly-v3/utils.d.ts +6 -0
  64. package/build/dex/solidly-v3/utils.js +53 -0
  65. package/build/dex/solidly-v3/utils.js.map +1 -0
  66. package/build/dex/trader-joe-v2-1-2/config.d.ts +4 -0
  67. package/build/dex/trader-joe-v2-1-2/config.js +15 -0
  68. package/build/dex/trader-joe-v2-1-2/config.js.map +1 -0
  69. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.d.ts +39 -0
  70. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js +64 -0
  71. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2-pool.js.map +1 -0
  72. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.d.ts +37 -0
  73. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js +126 -0
  74. package/build/dex/trader-joe-v2-1-2/trader-joe-v2-1-2.js.map +1 -0
  75. package/build/dex/trader-joe-v2-1-2/types.d.ts +6 -0
  76. package/build/dex/trader-joe-v2-1-2/types.js +3 -0
  77. package/build/dex/trader-joe-v2-1-2/types.js.map +1 -0
  78. package/build/dex/trader-joe-v2_1/config.d.ts +4 -0
  79. package/build/dex/trader-joe-v2_1/config.js +48 -0
  80. package/build/dex/trader-joe-v2_1/config.js.map +1 -0
  81. package/build/dex/trader-joe-v2_1/constants.d.ts +15 -0
  82. package/build/dex/trader-joe-v2_1/constants.js +17 -0
  83. package/build/dex/trader-joe-v2_1/constants.js.map +1 -0
  84. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.d.ts +0 -0
  85. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js +183 -0
  86. package/build/dex/trader-joe-v2_1/trader-joe-v2.1.js.map +1 -0
  87. package/build/dex/trader-joe-v2_1/types.d.ts +39 -0
  88. package/build/dex/trader-joe-v2_1/types.js +3 -0
  89. package/build/dex/trader-joe-v2_1/types.js.map +1 -0
  90. package/build/dex/wombat/wombat-pool-poller.d.ts +22 -0
  91. package/build/dex/wombat/wombat-pool-poller.js +164 -0
  92. package/build/dex/wombat/wombat-pool-poller.js.map +1 -0
  93. package/package.json +1 -1
  94. package/src/abi/solidly-v3/SolidlyV3Pool.abi.json +738 -0
  95. package/src/abi/solidly-v3/SolidlyV3StateMulticall.abi.json +375 -0
  96. package/src/config.ts +2 -2
  97. package/src/dex/index.ts +4 -2
  98. package/src/dex/solidly-v3/config.ts +64 -0
  99. package/src/dex/solidly-v3/constants.ts +42 -0
  100. package/src/dex/solidly-v3/contract-math/BitMath.ts +90 -0
  101. package/src/dex/solidly-v3/contract-math/FixedPoint128.ts +3 -0
  102. package/src/dex/solidly-v3/contract-math/FixedPoint96.ts +4 -0
  103. package/src/dex/solidly-v3/contract-math/FullMath.ts +30 -0
  104. package/src/dex/solidly-v3/contract-math/LiquidityMath.ts +17 -0
  105. package/src/dex/solidly-v3/contract-math/SqrtPriceMath.ts +226 -0
  106. package/src/dex/solidly-v3/contract-math/SwapMath.ts +139 -0
  107. package/src/dex/solidly-v3/contract-math/Tick.ts +66 -0
  108. package/src/dex/solidly-v3/contract-math/TickBitMap.ts +123 -0
  109. package/src/dex/solidly-v3/contract-math/TickMath.ts +211 -0
  110. package/src/dex/solidly-v3/contract-math/UnsafeMath.ts +5 -0
  111. package/src/dex/solidly-v3/contract-math/uniswap-v3-math.ts +570 -0
  112. package/src/dex/solidly-v3/contract-math/utils.ts +50 -0
  113. package/src/dex/solidly-v3/solidly-v3-e2e.test.ts +124 -0
  114. package/src/dex/solidly-v3/solidly-v3-events.test.ts +144 -0
  115. package/src/dex/solidly-v3/solidly-v3-factory.ts +73 -0
  116. package/src/dex/solidly-v3/solidly-v3-integration.test.ts +358 -0
  117. package/src/dex/solidly-v3/solidly-v3-pool.ts +494 -0
  118. package/src/dex/solidly-v3/solidly-v3.ts +988 -0
  119. package/src/dex/solidly-v3/types.ts +158 -0
  120. package/src/dex/solidly-v3/utils.ts +71 -0
  121. package/src/dex/uniswap-v3/uniswap-v3-events.test.ts +3 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._reduceTicks = exports._reduceTickBitmap = exports._gt = exports._lt = exports._mulmod = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ function _mulmod(x, y, m) {
6
+ return m === 0n ? 0n : (x * y) % m;
7
+ }
8
+ exports._mulmod = _mulmod;
9
+ function _lt(x, y) {
10
+ return x < y ? 1n : 0n;
11
+ }
12
+ exports._lt = _lt;
13
+ function _gt(x, y) {
14
+ return x > y ? 1n : 0n;
15
+ }
16
+ exports._gt = _gt;
17
+ function _reduceTickBitmap(tickBitmap, tickBitmapToReduce) {
18
+ return tickBitmapToReduce.reduce((acc, curr) => {
19
+ const { index, value } = curr;
20
+ acc[index] = (0, utils_1.bigIntify)(value);
21
+ return acc;
22
+ }, tickBitmap);
23
+ }
24
+ exports._reduceTickBitmap = _reduceTickBitmap;
25
+ function _reduceTicks(ticks, ticksToReduce) {
26
+ return ticksToReduce.reduce((acc, curr) => {
27
+ const { index, value } = curr;
28
+ if (value.initialized) {
29
+ acc[index] = {
30
+ liquidityGross: (0, utils_1.bigIntify)(value.liquidityGross),
31
+ liquidityNet: (0, utils_1.bigIntify)(value.liquidityNet),
32
+ initialized: value.initialized,
33
+ };
34
+ }
35
+ return acc;
36
+ }, ticks);
37
+ }
38
+ exports._reduceTicks = _reduceTicks;
39
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/dex/solidly-v3/contract-math/utils.ts"],"names":[],"mappings":";;;AAMA,0CAA2C;AAE3C,SAAgB,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACrD,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAFD,0BAEC;AAED,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzB,CAAC;AAFD,kBAEC;AAED,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzB,CAAC;AAFD,kBAEC;AAED,SAAgB,iBAAiB,CAC/B,UAA0C,EAC1C,kBAAqD;IAErD,OAAO,kBAAkB,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC,EACD,UAAU,CACX,CAAC;AACJ,CAAC;AAZD,8CAYC;AAED,SAAgB,YAAY,CAC1B,KAAuC,EACvC,aAA8C;IAE9C,OAAO,aAAa,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAClE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,KAAK,CAAC,WAAW,EAAE;YACrB,GAAG,CAAC,KAAK,CAAC,GAAG;gBACX,cAAc,EAAE,IAAA,iBAAS,EAAC,KAAK,CAAC,cAAc,CAAC;gBAC/C,YAAY,EAAE,IAAA,iBAAS,EAAC,KAAK,CAAC,YAAY,CAAC;gBAC3C,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC;AAfD,oCAeC"}
@@ -0,0 +1,26 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { IDexHelper } from '../../dex-helper/idex-helper';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { Address, Log, Logger } from '../../types';
6
+ import { LogDescription } from 'ethers/lib/utils';
7
+ import { FactoryState } from './types';
8
+ export declare type OnPoolCreatedCallback = ({ token0, token1, tickSpacing, }: {
9
+ token0: string;
10
+ token1: string;
11
+ tickSpacing: bigint;
12
+ }) => Promise<void>;
13
+ export declare class SolidlyV3Factory extends StatefulEventSubscriber<FactoryState> {
14
+ readonly dexHelper: IDexHelper;
15
+ protected readonly factoryAddress: Address;
16
+ protected readonly onPoolCreated: OnPoolCreatedCallback;
17
+ handlers: {
18
+ [event: string]: (event: any) => Promise<void>;
19
+ };
20
+ logDecoder: (log: Log) => any;
21
+ readonly factoryIface: Interface;
22
+ constructor(dexHelper: IDexHelper, parentName: string, factoryAddress: Address, logger: Logger, onPoolCreated: OnPoolCreatedCallback, mapKey?: string);
23
+ generateState(): FactoryState;
24
+ protected processLog(_: DeepReadonly<FactoryState>, log: Readonly<Log>): Promise<FactoryState>;
25
+ handleNewPool(event: LogDescription): Promise<void>;
26
+ }
@@ -0,0 +1,44 @@
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.SolidlyV3Factory = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const UniswapV3Factory_abi_json_1 = __importDefault(require("../../abi/uniswap-v3/UniswapV3Factory.abi.json"));
9
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
10
+ /*
11
+ * "Stateless" event subscriber in order to capture "PoolCreated" event on new pools created.
12
+ * State is present, but it's a placeholder to actually make the events reach handlers (if there's no previous state - `processBlockLogs` is not called)
13
+ */
14
+ class SolidlyV3Factory extends stateful_event_subscriber_1.StatefulEventSubscriber {
15
+ constructor(dexHelper, parentName, factoryAddress, logger, onPoolCreated, mapKey = '') {
16
+ super(parentName, `${parentName} Factory`, dexHelper, logger, true, mapKey);
17
+ this.dexHelper = dexHelper;
18
+ this.factoryAddress = factoryAddress;
19
+ this.onPoolCreated = onPoolCreated;
20
+ this.handlers = {};
21
+ this.factoryIface = new abi_1.Interface(UniswapV3Factory_abi_json_1.default);
22
+ this.addressesSubscribed = [factoryAddress];
23
+ this.logDecoder = (log) => this.factoryIface.parseLog(log);
24
+ this.handlers['PoolCreated'] = this.handleNewPool.bind(this);
25
+ }
26
+ generateState() {
27
+ return {};
28
+ }
29
+ async processLog(_, log) {
30
+ const event = this.logDecoder(log);
31
+ if (event.name in this.handlers) {
32
+ await this.handlers[event.name](event);
33
+ }
34
+ return {};
35
+ }
36
+ async handleNewPool(event) {
37
+ const token0 = event.args.token0.toLowerCase();
38
+ const token1 = event.args.token1.toLowerCase();
39
+ const tickSpacing = BigInt(event.args.tickSpacing);
40
+ await this.onPoolCreated({ token0, token1, tickSpacing });
41
+ }
42
+ }
43
+ exports.SolidlyV3Factory = SolidlyV3Factory;
44
+ //# sourceMappingURL=solidly-v3-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidly-v3-factory.js","sourceRoot":"","sources":["../../../src/dex/solidly-v3/solidly-v3-factory.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA+C;AAE/C,+GAAwE;AAExE,+EAA0E;AAe1E;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,mDAAqC;IASzE,YACW,SAAqB,EAC9B,UAAkB,EACC,cAAuB,EAC1C,MAAc,EACK,aAAoC,EACvD,SAAiB,EAAE;QAEnB,KAAK,CAAC,UAAU,EAAE,GAAG,UAAU,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAPnE,cAAS,GAAT,SAAS,CAAY;QAEX,mBAAc,GAAd,cAAc,CAAS;QAEvB,kBAAa,GAAb,aAAa,CAAuB;QAbzD,aAAQ,GAEJ,EAAE,CAAC;QAIS,iBAAY,GAAG,IAAI,eAAS,CAAC,mCAAU,CAAC,CAAC;QAYvD,IAAI,CAAC,mBAAmB,GAAG,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,CAA6B,EAC7B,GAAkB;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;SACxC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAqB;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAjDD,4CAiDC"}
@@ -0,0 +1,44 @@
1
+ import { Contract } from 'web3-eth-contract';
2
+ import { Interface } from '@ethersproject/abi';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ import { Log, Logger, BlockHeader, Address } from '../../types';
5
+ import { InitializeStateOptions, StatefulEventSubscriber } from '../../stateful-event-subscriber';
6
+ import { IDexHelper } from '../../dex-helper/idex-helper';
7
+ import { PoolState, DecodeStateMultiCallFunc } from './types';
8
+ export declare class SolidlyV3EventPool extends StatefulEventSubscriber<PoolState> {
9
+ readonly dexHelper: IDexHelper;
10
+ readonly stateMultiContract: Contract;
11
+ readonly decodeStateMultiCallResultWithRelativeBitmaps: DecodeStateMultiCallFunc | undefined;
12
+ readonly erc20Interface: Interface;
13
+ protected readonly factoryAddress: Address;
14
+ readonly tickSpacing: bigint;
15
+ readonly poolInitCodeHash: string;
16
+ handlers: {
17
+ [event: string]: (event: any, pool: PoolState, log: Log, blockHeader: Readonly<BlockHeader>) => PoolState;
18
+ };
19
+ logDecoder: (log: Log) => any;
20
+ readonly token0: Address;
21
+ readonly token1: Address;
22
+ _poolAddress?: Address;
23
+ private _stateRequestCallData?;
24
+ readonly poolIface: Interface;
25
+ initFailed: boolean;
26
+ initRetryAttemptCount: number;
27
+ readonly tickSpacingAsString: string;
28
+ constructor(dexHelper: IDexHelper, parentName: string, stateMultiContract: Contract, decodeStateMultiCallResultWithRelativeBitmaps: DecodeStateMultiCallFunc | undefined, erc20Interface: Interface, factoryAddress: Address, tickSpacing: bigint, token0: Address, token1: Address, logger: Logger, mapKey: string | undefined, poolInitCodeHash: string);
29
+ get poolAddress(): Address;
30
+ set poolAddress(address: Address);
31
+ initialize(blockNumber: number, options?: InitializeStateOptions<PoolState>): Promise<void>;
32
+ protected processBlockLogs(state: DeepReadonly<PoolState>, logs: Readonly<Log>[], blockHeader: Readonly<BlockHeader>): Promise<DeepReadonly<PoolState> | null>;
33
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): DeepReadonly<PoolState> | null;
34
+ private _getStateRequestCallData;
35
+ getBitmapRangeToRequest(): bigint;
36
+ generateState(blockNumber: number): Promise<Readonly<PoolState>>;
37
+ handleSwapEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
38
+ handleBurnEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
39
+ handleMintEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
40
+ handleCollectEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
41
+ handleFlashEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
42
+ handleSetFeeEvent(event: any, pool: PoolState, log: Log, blockHeader: BlockHeader): PoolState;
43
+ private _computePoolAddress;
44
+ }
@@ -0,0 +1,298 @@
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.SolidlyV3EventPool = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const abi_1 = require("@ethersproject/abi");
9
+ const ethers_1 = require("ethers");
10
+ const ts_essentials_1 = require("ts-essentials");
11
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
12
+ const SolidlyV3Pool_abi_json_1 = __importDefault(require("../../abi/solidly-v3/SolidlyV3Pool.abi.json"));
13
+ const utils_1 = require("../../utils");
14
+ const uniswap_v3_math_1 = require("./contract-math/uniswap-v3-math");
15
+ const constants_1 = require("./constants");
16
+ const TickBitMap_1 = require("./contract-math/TickBitMap");
17
+ const decoders_1 = require("../../lib/decoders");
18
+ const utils_2 = require("./utils");
19
+ const utils_3 = require("./contract-math/utils");
20
+ const FEES_TO_TICK_SPACING = {
21
+ 500: 10n,
22
+ };
23
+ class SolidlyV3EventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
24
+ constructor(dexHelper, parentName, stateMultiContract, decodeStateMultiCallResultWithRelativeBitmaps, erc20Interface, factoryAddress, tickSpacing, token0, token1, logger, mapKey = '', poolInitCodeHash) {
25
+ super(parentName, `${token0}_${token1}_${tickSpacing}`, dexHelper, logger, true, mapKey);
26
+ this.dexHelper = dexHelper;
27
+ this.stateMultiContract = stateMultiContract;
28
+ this.decodeStateMultiCallResultWithRelativeBitmaps = decodeStateMultiCallResultWithRelativeBitmaps;
29
+ this.erc20Interface = erc20Interface;
30
+ this.factoryAddress = factoryAddress;
31
+ this.tickSpacing = tickSpacing;
32
+ this.poolInitCodeHash = poolInitCodeHash;
33
+ this.handlers = {};
34
+ this.poolIface = new abi_1.Interface(SolidlyV3Pool_abi_json_1.default);
35
+ this.initFailed = false;
36
+ this.initRetryAttemptCount = 0;
37
+ // this.feeCodeAsString = feeCode.toString();
38
+ this.tickSpacingAsString = tickSpacing.toString();
39
+ this.token0 = token0.toLowerCase();
40
+ this.token1 = token1.toLowerCase();
41
+ this.logDecoder = (log) => this.poolIface.parseLog(log);
42
+ this.addressesSubscribed = new Array(1);
43
+ // Add handlers
44
+ this.handlers['Swap'] = this.handleSwapEvent.bind(this);
45
+ this.handlers['Burn'] = this.handleBurnEvent.bind(this);
46
+ this.handlers['Mint'] = this.handleMintEvent.bind(this);
47
+ // Wen need them to keep balance of the pool up to date
48
+ this.handlers['Collect'] = this.handleCollectEvent.bind(this);
49
+ // Almost the same as Collect, but for pool owners
50
+ this.handlers['CollectProtocol'] = this.handleCollectEvent.bind(this);
51
+ this.handlers['Flash'] = this.handleFlashEvent.bind(this);
52
+ this.handlers['SetFee'] = this.handleSetFeeEvent.bind(this);
53
+ }
54
+ get poolAddress() {
55
+ if (this._poolAddress === undefined) {
56
+ this._poolAddress = this._computePoolAddress(this.token0, this.token1, this.tickSpacing);
57
+ }
58
+ return this._poolAddress;
59
+ }
60
+ set poolAddress(address) {
61
+ this._poolAddress = address.toLowerCase();
62
+ }
63
+ async initialize(blockNumber, options) {
64
+ await super.initialize(blockNumber, options);
65
+ }
66
+ async processBlockLogs(state, logs, blockHeader) {
67
+ const newState = await super.processBlockLogs(state, logs, blockHeader);
68
+ if (newState && !newState.isValid) {
69
+ return await this.generateState(blockHeader.number);
70
+ }
71
+ return newState;
72
+ }
73
+ processLog(state, log, blockHeader) {
74
+ try {
75
+ const event = this.logDecoder(log);
76
+ const uniswapV3EventLoggingSampleRate = this.dexHelper.config.data.uniswapV3EventLoggingSampleRate;
77
+ if (!this.dexHelper.config.isSlave &&
78
+ uniswapV3EventLoggingSampleRate &&
79
+ (0, utils_1.isSampled)(uniswapV3EventLoggingSampleRate)) {
80
+ this.logger.info(`event=${event.name} - block=${blockHeader.number}. Log sampled at rate ${uniswapV3EventLoggingSampleRate * 100}%`);
81
+ }
82
+ if (event.name in this.handlers) {
83
+ // Because we have observations in array which is mutable by nature, there is a
84
+ // ts compile error: https://stackoverflow.com/questions/53412934/disable-allowing-assigning-readonly-types-to-non-readonly-types
85
+ // And there is no good workaround, so turn off the type checker for this line
86
+ const _state = lodash_1.default.cloneDeep(state);
87
+ try {
88
+ return this.handlers[event.name](event, _state, log, blockHeader);
89
+ }
90
+ catch (e) {
91
+ if (e instanceof Error &&
92
+ e.message.endsWith(constants_1.OUT_OF_RANGE_ERROR_POSTFIX)) {
93
+ this.logger.warn(`${this.parentName}: Pool ${this.poolAddress} on ${this.dexHelper.config.data.network} is out of TickBitmap requested range. Re-query the state. ${JSON.stringify(event)}`, e);
94
+ }
95
+ else {
96
+ this.logger.error(`${this.parentName}: Pool ${this.poolAddress}, ` +
97
+ `network=${this.dexHelper.config.data.network}: Unexpected ` +
98
+ `error while handling event on blockNumber=${blockHeader.number}, ` +
99
+ `blockHash=${blockHeader.hash} and parentHash=${blockHeader.parentHash} for UniswapV3, ${JSON.stringify(event)}`, e);
100
+ }
101
+ _state.isValid = false;
102
+ return _state;
103
+ }
104
+ }
105
+ }
106
+ catch (e) {
107
+ (0, utils_1.catchParseLogError)(e, this.logger);
108
+ }
109
+ return null; // ignore unrecognized event
110
+ }
111
+ _getStateRequestCallData() {
112
+ if (!this._stateRequestCallData) {
113
+ const callData = [
114
+ {
115
+ target: this.token0,
116
+ callData: this.erc20Interface.encodeFunctionData('balanceOf', [
117
+ this.poolAddress,
118
+ ]),
119
+ decodeFunction: decoders_1.uint256ToBigInt,
120
+ },
121
+ {
122
+ target: this.token1,
123
+ callData: this.erc20Interface.encodeFunctionData('balanceOf', [
124
+ this.poolAddress,
125
+ ]),
126
+ decodeFunction: decoders_1.uint256ToBigInt,
127
+ },
128
+ {
129
+ target: this.stateMultiContract.options.address,
130
+ callData: this.stateMultiContract.methods
131
+ .getFullStateWithRelativeBitmaps(this.factoryAddress, this.token0, this.token1, this.tickSpacing, this.getBitmapRangeToRequest(), this.getBitmapRangeToRequest())
132
+ .encodeABI(),
133
+ decodeFunction: this.decodeStateMultiCallResultWithRelativeBitmaps !== undefined
134
+ ? this.decodeStateMultiCallResultWithRelativeBitmaps
135
+ : utils_2.decodeStateMultiCallResultWithRelativeBitmaps,
136
+ },
137
+ ];
138
+ this._stateRequestCallData = callData;
139
+ }
140
+ return this._stateRequestCallData;
141
+ }
142
+ getBitmapRangeToRequest() {
143
+ return constants_1.TICK_BITMAP_TO_USE + constants_1.TICK_BITMAP_BUFFER;
144
+ }
145
+ async generateState(blockNumber) {
146
+ const callData = this._getStateRequestCallData();
147
+ const [resBalance0, resBalance1, resState] = await this.dexHelper.multiWrapper.tryAggregate(false, callData, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
148
+ // Quite ugly solution, but this is the one that fits to current flow.
149
+ // I think UniswapV3 callbacks subscriptions are complexified for no reason.
150
+ // Need to be revisited later
151
+ (0, ts_essentials_1.assert)(resState.success, 'Pool does not exist');
152
+ const [balance0, balance1, _state] = [
153
+ resBalance0.returnData,
154
+ resBalance1.returnData,
155
+ resState.returnData,
156
+ ];
157
+ const tickBitmap = {};
158
+ const ticks = {};
159
+ (0, utils_3._reduceTickBitmap)(tickBitmap, _state.tickBitmap);
160
+ (0, utils_3._reduceTicks)(ticks, _state.ticks);
161
+ const currentTick = (0, utils_1.bigIntify)(_state.slot0.tick);
162
+ const tickSpacing = (0, utils_1.bigIntify)(_state.tickSpacing);
163
+ const fee = (0, utils_1.bigIntify)(_state.slot0.fee);
164
+ const startTickBitmap = TickBitMap_1.TickBitMap.position(currentTick / tickSpacing)[0];
165
+ const requestedRange = this.getBitmapRangeToRequest();
166
+ return {
167
+ pool: _state.pool,
168
+ blockTimestamp: (0, utils_1.bigIntify)(_state.blockTimestamp),
169
+ slot0: {
170
+ sqrtPriceX96: (0, utils_1.bigIntify)(_state.slot0.sqrtPriceX96),
171
+ tick: currentTick,
172
+ fee: (0, utils_1.bigIntify)(_state.slot0.fee),
173
+ },
174
+ liquidity: (0, utils_1.bigIntify)(_state.liquidity),
175
+ tickSpacing,
176
+ maxLiquidityPerTick: (0, utils_1.bigIntify)(_state.maxLiquidityPerTick),
177
+ tickBitmap,
178
+ ticks,
179
+ isValid: true,
180
+ startTickBitmap,
181
+ lowestKnownTick: (BigInt.asIntN(24, startTickBitmap - requestedRange) << 8n) *
182
+ tickSpacing,
183
+ highestKnownTick: ((BigInt.asIntN(24, startTickBitmap + requestedRange) << 8n) +
184
+ BigInt.asIntN(24, 255n)) *
185
+ tickSpacing,
186
+ balance0,
187
+ balance1,
188
+ };
189
+ }
190
+ handleSwapEvent(event, pool, log, blockHeader) {
191
+ const newSqrtPriceX96 = (0, utils_1.bigIntify)(event.args.sqrtPriceX96);
192
+ const amount0 = (0, utils_1.bigIntify)(event.args.amount0);
193
+ const amount1 = (0, utils_1.bigIntify)(event.args.amount1);
194
+ const newTick = (0, utils_1.bigIntify)(event.args.tick);
195
+ const newLiquidity = (0, utils_1.bigIntify)(event.args.liquidity);
196
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
197
+ if (amount0 <= 0n && amount1 <= 0n) {
198
+ this.logger.error(`${this.parentName}: amount0 <= 0n && amount1 <= 0n for ` +
199
+ `${this.poolAddress} and ${blockHeader.number}. Check why it happened`);
200
+ pool.isValid = false;
201
+ return pool;
202
+ }
203
+ else {
204
+ const zeroForOne = amount0 > 0n;
205
+ uniswap_v3_math_1.uniswapV3Math.swapFromEvent(pool, newSqrtPriceX96, newTick, newLiquidity, zeroForOne);
206
+ if (zeroForOne) {
207
+ if (amount1 < 0n) {
208
+ pool.balance1 -= BigInt.asUintN(256, -amount1);
209
+ }
210
+ else {
211
+ this.logger.error(`In swapEvent for pool ${pool.pool} received incorrect values ${zeroForOne} and ${amount1}`);
212
+ pool.isValid = false;
213
+ }
214
+ // This is not correct fully, because pool may get more tokens then it needs, but
215
+ // it is not accounted in internal state, it should be good enough
216
+ pool.balance0 += BigInt.asUintN(256, amount0);
217
+ }
218
+ else {
219
+ if (amount0 < 0n) {
220
+ pool.balance0 -= BigInt.asUintN(256, -amount0);
221
+ }
222
+ else {
223
+ this.logger.error(`In swapEvent for pool ${pool.pool} received incorrect values ${zeroForOne} and ${amount0}`);
224
+ pool.isValid = false;
225
+ }
226
+ pool.balance1 += BigInt.asUintN(256, amount1);
227
+ }
228
+ return pool;
229
+ }
230
+ }
231
+ handleBurnEvent(event, pool, log, blockHeader) {
232
+ const amount = (0, utils_1.bigIntify)(event.args.amount);
233
+ const tickLower = (0, utils_1.bigIntify)(event.args.tickLower);
234
+ const tickUpper = (0, utils_1.bigIntify)(event.args.tickUpper);
235
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
236
+ uniswap_v3_math_1.uniswapV3Math._modifyPosition(pool, {
237
+ tickLower,
238
+ tickUpper,
239
+ liquidityDelta: -BigInt.asIntN(128, BigInt.asIntN(256, amount)),
240
+ });
241
+ // From this transaction I conclude that there is no balance change from
242
+ // Burn event: https://dashboard.tenderly.co/tx/mainnet/0xfccf5341147ac3ad0e66452273d12dfc3219e81f8fb369a6cdecfb24b9b9d078/logs
243
+ // And it aligns with UniswapV3 doc:
244
+ // https://github.com/Uniswap/v3-core/blob/05c10bf6d547d6121622ac51c457f93775e1df09/contracts/interfaces/pool/IUniswapV3PoolActions.sol#L59
245
+ // It just updates positions and tokensOwed which may be requested calling collect
246
+ // So, we don't need to update pool.balances0 and pool.balances1 here
247
+ return pool;
248
+ }
249
+ handleMintEvent(event, pool, log, blockHeader) {
250
+ const amount = (0, utils_1.bigIntify)(event.args.amount);
251
+ const tickLower = (0, utils_1.bigIntify)(event.args.tickLower);
252
+ const tickUpper = (0, utils_1.bigIntify)(event.args.tickUpper);
253
+ const amount0 = (0, utils_1.bigIntify)(event.args.amount0);
254
+ const amount1 = (0, utils_1.bigIntify)(event.args.amount1);
255
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
256
+ uniswap_v3_math_1.uniswapV3Math._modifyPosition(pool, {
257
+ tickLower,
258
+ tickUpper,
259
+ liquidityDelta: amount,
260
+ });
261
+ pool.balance0 += amount0;
262
+ pool.balance1 += amount1;
263
+ return pool;
264
+ }
265
+ handleCollectEvent(event, pool, log, blockHeader) {
266
+ const amount0 = (0, utils_1.bigIntify)(event.args.amount0);
267
+ const amount1 = (0, utils_1.bigIntify)(event.args.amount1);
268
+ pool.balance0 -= amount0;
269
+ pool.balance1 -= amount1;
270
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
271
+ return pool;
272
+ }
273
+ handleFlashEvent(event, pool, log, blockHeader) {
274
+ const paid0 = (0, utils_1.bigIntify)(event.args.paid0);
275
+ const paid1 = (0, utils_1.bigIntify)(event.args.paid1);
276
+ pool.balance0 += paid0;
277
+ pool.balance1 += paid1;
278
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
279
+ return pool;
280
+ }
281
+ handleSetFeeEvent(event, pool, log, blockHeader) {
282
+ const feeNew = (0, utils_1.bigIntify)(event.args.feeNew);
283
+ pool.slot0.fee = feeNew;
284
+ pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
285
+ return pool;
286
+ }
287
+ _computePoolAddress(token0, token1, tickSpacing) {
288
+ // https://github.com/Uniswap/v3-periphery/blob/main/contracts/libraries/PoolAddress.sol
289
+ if (token0 > token1)
290
+ [token0, token1] = [token1, token0];
291
+ const encodedKey = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'address', 'int24'],
292
+ // [token0, token1, BigInt.asUintN(24, fee)],
293
+ [token0, token1, BigInt.asUintN(24, tickSpacing)]));
294
+ return ethers_1.ethers.utils.getCreate2Address(this.factoryAddress, encodedKey, this.poolInitCodeHash);
295
+ }
296
+ }
297
+ exports.SolidlyV3EventPool = SolidlyV3EventPool;
298
+ //# sourceMappingURL=solidly-v3-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidly-v3-pool.js","sourceRoot":"","sources":["../../../src/dex/solidly-v3/solidly-v3-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /// <reference types="node" />
2
+ import { Interface } from '@ethersproject/abi';
3
+ import { Token, Address, ExchangePrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, PoolPrices, PreprocessTransactionOptions, ExchangeTxInfo } from '../../types';
4
+ import { SwapSide, Network } from '../../constants';
5
+ import { IDex } from '../../dex/idex';
6
+ import { IDexHelper } from '../../dex-helper/idex-helper';
7
+ import { DexParams, SolidlyV3Data, UniswapV3Param } from './types';
8
+ import { SimpleExchange } from '../simple-exchange';
9
+ import { SolidlyV3EventPool } from './solidly-v3-pool';
10
+ import { OptimalSwapExchange } from '@paraswap/core';
11
+ import { OnPoolCreatedCallback } from './solidly-v3-factory';
12
+ export declare class SolidlyV3 extends SimpleExchange implements IDex<SolidlyV3Data, UniswapV3Param> {
13
+ protected network: Network;
14
+ protected dexHelper: IDexHelper;
15
+ protected adapters: import("../../types").AdapterMappings;
16
+ readonly poolIface: Interface;
17
+ readonly quoterIface: Interface;
18
+ protected config: DexParams;
19
+ protected poolsToPreload: {
20
+ token0: string;
21
+ token1: string;
22
+ }[];
23
+ readonly isFeeOnTransferSupported: boolean;
24
+ readonly eventPools: Record<string, SolidlyV3EventPool | null>;
25
+ readonly hasConstantPriceLargeAmounts = false;
26
+ readonly needWrapNative = true;
27
+ readonly directSwapIface: Interface;
28
+ intervalTask?: NodeJS.Timeout;
29
+ static dexKeysWithNetwork: {
30
+ key: string;
31
+ networks: Network[];
32
+ }[];
33
+ logger: Logger;
34
+ private stateMultiContract;
35
+ private notExistingPoolSetKey;
36
+ private readonly factory;
37
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings, poolIface?: Interface, quoterIface?: Interface, config?: DexParams, poolsToPreload?: {
38
+ token0: string;
39
+ token1: string;
40
+ }[]);
41
+ get supportedTickSpacings(): bigint[];
42
+ getAdapters(side: SwapSide): {
43
+ name: string;
44
+ index: number;
45
+ }[] | null;
46
+ getPoolIdentifier(srcAddress: Address, destAddress: Address, tickSpacing: bigint): string;
47
+ initializePricing(blockNumber: number): Promise<void>;
48
+ onPoolCreatedDeleteFromNonExistingSet: OnPoolCreatedCallback;
49
+ getPool(srcAddress: Address, destAddress: Address, tickSpacing: bigint, blockNumber: number): Promise<SolidlyV3EventPool | null>;
50
+ addMasterPool(poolKey: string, blockNumber: number): Promise<boolean>;
51
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
52
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<SolidlyV3Data>>;
53
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SolidlyV3Data, side: SwapSide): AdapterExchangeParam;
54
+ getCalldataGasCost(poolPrices: PoolPrices<SolidlyV3Data>): number | number[];
55
+ getTokenFromAddress(address: Address): Token;
56
+ preProcessTransaction(optimalSwapExchange: OptimalSwapExchange<SolidlyV3Data>, srcToken: Token, _0: Token, _1: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<SolidlyV3Data>, ExchangeTxInfo]>;
57
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SolidlyV3Data, side: SwapSide): Promise<SimpleExchangeParam>;
58
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
59
+ private _getPoolsFromIdentifiers;
60
+ private _getLoweredAddresses;
61
+ private _sortTokens;
62
+ private _toLowerForAllConfigAddresses;
63
+ private _getOutputs;
64
+ private _querySubgraph;
65
+ private _encodePath;
66
+ releaseResources(): void;
67
+ }