@paraswap/dex-lib 3.0.0-fix-for-rc → 3.0.1

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 (71) hide show
  1. package/.vscode/launch.json +72 -0
  2. package/.vscode/settings.json +2 -0
  3. package/.vscode/tasks.json +15 -0
  4. package/build/abi/AugustusV6.abi.json +1454 -0
  5. package/build/dex/algebra/scripts/validate-state-v1-1.d.ts +1 -0
  6. package/build/dex/algebra/scripts/validate-state-v1-1.js +206 -0
  7. package/build/dex/algebra/scripts/validate-state-v1-1.js.map +1 -0
  8. package/build/dex/augustus-approvals-helper.d.ts +22 -0
  9. package/build/dex/augustus-approvals-helper.js +110 -0
  10. package/build/dex/augustus-approvals-helper.js.map +1 -0
  11. package/build/dex/bProtocol.js +0 -1
  12. package/build/dex/bProtocol.js.map +1 -1
  13. package/build/dex/bancor.js +0 -1
  14. package/build/dex/bancor.js.map +1 -1
  15. package/build/dex/camelot/scripts/validate-state.d.ts +1 -0
  16. package/build/dex/camelot/scripts/validate-state.js +84 -0
  17. package/build/dex/camelot/scripts/validate-state.js.map +1 -0
  18. package/build/dex/compound.js +0 -1
  19. package/build/dex/compound.js.map +1 -1
  20. package/build/dex/curve-v1-factory/constants.d.ts +1 -0
  21. package/build/dex/curve-v1-factory/constants.js +2 -1
  22. package/build/dex/curve-v1-factory/constants.js.map +1 -1
  23. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +8 -2
  24. package/build/dex/curve-v1-factory/curve-v1-factory.js +44 -1
  25. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  26. package/build/dex/curve-v1-factory/types.d.ts +16 -0
  27. package/build/dex/dodo-v1.js +0 -1
  28. package/build/dex/dodo-v1.js.map +1 -1
  29. package/build/dex/generic-rfq/test-v6/constants.d.ts +1 -0
  30. package/build/dex/generic-rfq/test-v6/constants.js +5 -0
  31. package/build/dex/generic-rfq/test-v6/constants.js.map +1 -0
  32. package/build/dex/generic-rfq/test-v6/get-config.d.ts +1 -0
  33. package/build/dex/generic-rfq/test-v6/get-config.js +63 -0
  34. package/build/dex/generic-rfq/test-v6/get-config.js.map +1 -0
  35. package/build/dex/generic-rfq/test-v6/types.d.ts +14 -0
  36. package/build/dex/generic-rfq/test-v6/types.js +3 -0
  37. package/build/dex/generic-rfq/test-v6/types.js.map +1 -0
  38. package/build/dex/generic-rfq/tokens.json +570 -0
  39. package/build/dex/lido.js +0 -1
  40. package/build/dex/lido.js.map +1 -1
  41. package/build/dex/onebit.js +0 -1
  42. package/build/dex/onebit.js.map +1 -1
  43. package/build/dex/smoothy.d.ts +1 -1
  44. package/build/dex/smoothy.js +2 -3
  45. package/build/dex/smoothy.js.map +1 -1
  46. package/build/dex/stable-pool.d.ts +1 -1
  47. package/build/dex/stable-pool.js +1 -2
  48. package/build/dex/stable-pool.js.map +1 -1
  49. package/build/dex/trader-joe-v2.1.js +3 -3
  50. package/build/dex/trader-joe-v2.1.js.map +1 -1
  51. package/build/dex/uniswap-v2/uniswap-v2-optimizer.d.ts +2 -0
  52. package/build/dex/uniswap-v2/uniswap-v2-optimizer.js +75 -0
  53. package/build/dex/uniswap-v2/uniswap-v2-optimizer.js.map +1 -0
  54. package/build/executor/IExecutorBytecodeBuilder.d.ts +6 -0
  55. package/build/executor/IExecutorBytecodeBuilder.js +3 -0
  56. package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
  57. package/build/executor/tests/utils-e2e-v6.d.ts +8 -0
  58. package/build/executor/tests/utils-e2e-v6.js +175 -0
  59. package/build/executor/tests/utils-e2e-v6.js.map +1 -0
  60. package/package.json +1 -1
  61. package/src/dex/curve-v1-factory/constants.ts +1 -0
  62. package/src/dex/curve-v1-factory/curve-v1-factory.ts +78 -2
  63. package/src/dex/curve-v1-factory/types.ts +18 -0
  64. package/src/dex/uniswap-v2/uniswap-v2-optimizer.ts +114 -0
  65. package/tests/debug-price-route.json +67 -1
  66. package/tests/v6/price-routes/fantom/test.json +161 -0
  67. package/tests/v6/price-routes/mainnet/buy-usdc.json +233 -0
  68. package/tests/v6/price-routes/mainnet/executor-01.json +93 -0
  69. package/tests/v6/price-routes/mainnet/executor01-test copy.json +88 -0
  70. package/tests/v6/price-routes/mainnet/executor01-test.json +88 -0
  71. package/tests/v6/price-routes/polygon/test.json +109 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,206 @@
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
+ /* eslint-disable no-console */
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ dotenv_1.default.config();
9
+ const constants_1 = require("../../../constants");
10
+ const dex_helper_1 = require("../../../dex-helper");
11
+ const algebra_1 = require("../algebra");
12
+ const decoders_1 = require("../../../lib/decoders");
13
+ const utils_1 = require("../utils");
14
+ const multi_wrapper_1 = require("../../../lib/multi-wrapper");
15
+ const web3_1 = __importDefault(require("web3"));
16
+ const multi_v2_json_1 = __importDefault(require("../../../abi/multi-v2.json"));
17
+ const erc20_json_1 = __importDefault(require("../../../abi/erc20.json"));
18
+ const log4js_1 = require("../../../lib/log4js");
19
+ const utils_2 = require("ethers/lib/utils");
20
+ const AlgebraStateMulticall_abi_json_1 = __importDefault(require("../../../abi/algebra/AlgebraStateMulticall.abi.json"));
21
+ const constants_2 = require("../constants");
22
+ const ethers_1 = require("ethers");
23
+ // public RPC, replace to RPC with archive node
24
+ const web3Provider = new web3_1.default('https://fabled-falling-sound.arbitrum-mainnet.quiknode.pro/cf28df31e5ab3aadbfe9e0172fe71936199e18f7/');
25
+ // pool and tokens for specific broken tx - 0x9a296a13f7c5eb8ce838e15ecbe3888e8998a14803a1ec46838611e1ff118d6e
26
+ // const factoryAddress = '0x1a3c9b1d2f0529d97f2afc5136cc23e58f1fd35b';
27
+ // const poolAddress = '0xb1026b8e7276e7ac75410f1fcbbe21796e8f7526';
28
+ // const srcToken = {
29
+ // address: `0x82af49447d8a07e3bd95bd0d56f35241523fbab1`,
30
+ // decimals: 18,
31
+ // };
32
+ // const destToken = {
33
+ // address: '0xaf88d065e77c8cc2239327c5edb3a432268e5831',
34
+ // decimals: 6,
35
+ // };
36
+ const factoryAddress = '0x1a3c9b1d2f0529d97f2afc5136cc23e58f1fd35b';
37
+ const poolAddress = '0x19d51dc52e52407656b40b197b1bbe14294b955b';
38
+ const srcToken = {
39
+ address: `0x82aF49447D8a07e3bd95BD0d56f35241523fBab1`,
40
+ decimals: 18,
41
+ };
42
+ const destToken = {
43
+ address: '0x939727d85D99d0aC339bF1B76DfE30Ca27C19067',
44
+ decimals: 6,
45
+ };
46
+ const blockHeaders = {};
47
+ const multiContract = new web3Provider.eth.Contract(multi_v2_json_1.default, '0x7eCfBaa8742fDf5756DAC92fbc8b90a19b8815bF');
48
+ const stateMultiContract = new web3Provider.eth.Contract(AlgebraStateMulticall_abi_json_1.default, '0x2cB568442a102dF518b3D37CBD0d2884523C940B');
49
+ const multiWrapper = new multi_wrapper_1.MultiWrapper(multiContract, (0, log4js_1.getLogger)(`Ticks`));
50
+ const erc20Interface = new utils_2.Interface(erc20_json_1.default);
51
+ function getBitmapRangeToRequest() {
52
+ return constants_2.TICK_BITMAP_TO_USE + constants_2.TICK_BITMAP_BUFFER;
53
+ }
54
+ async function _fetchPoolState_v1_9SingleStep(blockNumber) {
55
+ const callData = [
56
+ {
57
+ target: srcToken.address,
58
+ callData: erc20Interface.encodeFunctionData('balanceOf', [poolAddress]),
59
+ decodeFunction: decoders_1.uint256ToBigInt,
60
+ },
61
+ {
62
+ target: destToken.address,
63
+ callData: erc20Interface.encodeFunctionData('balanceOf', [poolAddress]),
64
+ decodeFunction: decoders_1.uint256ToBigInt,
65
+ },
66
+ {
67
+ target: stateMultiContract.options.address,
68
+ callData: stateMultiContract.methods
69
+ .getFullStateWithRelativeBitmaps(factoryAddress, srcToken.address, destToken.address, getBitmapRangeToRequest(), getBitmapRangeToRequest())
70
+ .encodeABI(),
71
+ decodeFunction: utils_1.decodeStateMultiCallResultWithRelativeBitmapsV1_1,
72
+ },
73
+ ];
74
+ const [resBalance0, resBalance1, resState] = await multiWrapper.tryAggregate(false, callData, blockNumber, multiWrapper.defaultBatchSize, false);
75
+ const [balance0, balance1, _state] = [
76
+ resBalance0.returnData,
77
+ resBalance1.returnData,
78
+ resState.returnData,
79
+ ];
80
+ return [balance0, balance1, _state];
81
+ }
82
+ function preprocessField(value) {
83
+ if (typeof value === 'bigint' ||
84
+ typeof value === 'number' ||
85
+ ethers_1.ethers.BigNumber.isBigNumber(value)) {
86
+ return value.toString();
87
+ }
88
+ return value;
89
+ }
90
+ function compareAndLogDifferences(obj1, obj2, keyNames, checkEachKey = false) {
91
+ let isValid = true;
92
+ let keys = keyNames;
93
+ if (checkEachKey) {
94
+ // find common keys
95
+ const keys1 = Object.keys(obj1);
96
+ const keys2 = new Set(Object.keys(obj2));
97
+ keys = keys1.filter(key => keys2.has(key));
98
+ }
99
+ for (let fieldName of keys) {
100
+ const value1 = preprocessField(obj1[fieldName]);
101
+ const value2 = preprocessField(obj2[fieldName]);
102
+ if (value1 !== value2) {
103
+ console.log(`${fieldName.toString()} mismatch: actual: ${value1} vs pool: ${value2}`);
104
+ isValid = false;
105
+ }
106
+ }
107
+ return isValid;
108
+ }
109
+ async function isPoolStateEqualToReal(state, blockNumber) {
110
+ const [balance0, balance1, contractState] = await _fetchPoolState_v1_9SingleStep(blockNumber);
111
+ const isValidBalances = compareAndLogDifferences(state, { balance0, balance1, ...contractState }, ['balance0', 'balance1', 'liquidity', 'tickSpacing']);
112
+ const isValidGlobalState = compareAndLogDifferences(state.globalState, contractState.globalState,
113
+ // can check only for one of them, because they are directly co-related
114
+ ['price', 'tick']);
115
+ const isValidTickBitmap = compareAndLogDifferences(state.tickBitmap, contractState.tickBitmap, [], true);
116
+ let isValidTicks = true;
117
+ for (let tick of contractState.ticks) {
118
+ const stateTick = state?.ticks[tick.index];
119
+ const isValidTick = compareAndLogDifferences(stateTick, tick.value, [
120
+ 'liquidityGross',
121
+ 'liquidityNet',
122
+ // next fields doesn't affect pricing, so skip checks
123
+ // 'initialized',
124
+ // 'secondsOutside',
125
+ // 'secondsPerLiquidityOutsideX128',
126
+ // 'tickCumulativeOutside'
127
+ ]);
128
+ if (isValidTicks && !isValidTick) {
129
+ isValidTicks = false;
130
+ }
131
+ }
132
+ return (isValidBalances && isValidGlobalState && isValidTicks && isValidTickBitmap);
133
+ }
134
+ async function checkPoolStateForBlockRange(startBlockNumber, endBlockNumber) {
135
+ const network = constants_1.Network.ARBITRUM;
136
+ const dexKey = 'CamelotV3';
137
+ const dexHelper = new dex_helper_1.DummyDexHelper(network);
138
+ const algebra = new algebra_1.Algebra(network, dexKey, dexHelper);
139
+ const pool = await algebra.getPool(srcToken.address, destToken.address, startBlockNumber);
140
+ const logsToDispatch = await dexHelper.provider.getLogs({
141
+ fromBlock: startBlockNumber,
142
+ toBlock: endBlockNumber,
143
+ address: poolAddress,
144
+ });
145
+ console.log(logsToDispatch.length);
146
+ // group logs by block number
147
+ const logsByBlockNumber = {};
148
+ for (let log of logsToDispatch) {
149
+ if (!logsByBlockNumber[log.blockNumber]) {
150
+ logsByBlockNumber[log.blockNumber] = [];
151
+ }
152
+ logsByBlockNumber[log.blockNumber].push(log);
153
+ }
154
+ const sortedBlocks = Object.keys(logsByBlockNumber)
155
+ .map(Number)
156
+ .sort((a, b) => Number(a) - Number(b));
157
+ for (let blockNumber of sortedBlocks) {
158
+ if (!blockHeaders[blockNumber]) {
159
+ blockHeaders[blockNumber] = await dexHelper.web3Provider.eth.getBlock(blockNumber);
160
+ }
161
+ await pool?.update(logsByBlockNumber[blockNumber], {
162
+ [blockNumber]: blockHeaders[blockNumber],
163
+ });
164
+ }
165
+ const state = pool?.getState(startBlockNumber);
166
+ return isPoolStateEqualToReal(state, endBlockNumber);
167
+ }
168
+ async function findBreakingBlock(startBlock, endBlock) {
169
+ let left = startBlock;
170
+ let right = endBlock;
171
+ // If the state is valid at the start, then there's no breaking block in the range
172
+ if (await checkPoolStateForBlockRange(left, right)) {
173
+ return -1; // Indicates no breaking block found
174
+ }
175
+ while (left <= right) {
176
+ const mid = left + Math.floor((right - left) / 2);
177
+ const isValid = await checkPoolStateForBlockRange(startBlock, mid);
178
+ if (isValid) {
179
+ // If the state is valid up to mid, the issue must be in the second half
180
+ left = mid + 1;
181
+ }
182
+ else {
183
+ // If the state is not valid up to mid, the issue is in the first half
184
+ // But we need to check if mid is the first occurrence of the issue
185
+ if (mid === startBlock ||
186
+ (await checkPoolStateForBlockRange(startBlock, mid - 1))) {
187
+ return mid; // Found the breaking block
188
+ }
189
+ right = mid - 1;
190
+ }
191
+ }
192
+ return -1; // Should not reach here if there's a breaking block
193
+ }
194
+ async function main() {
195
+ // use findBreakingBlock to find the block where the state is broken
196
+ // console.log(await findBreakingBlock(startBlockNumber, endBlockNumber));
197
+ // previously broken block 150502863
198
+ const block = 162135953;
199
+ console.log(await checkPoolStateForBlockRange(162099100, block));
200
+ // console.log(await checkPoolStateForBlockRange(152087800, 152287800));
201
+ // console.log(await checkPoolStateForBlockRange(152100945, 152100947));
202
+ }
203
+ main()
204
+ .then(() => console.log('Done'))
205
+ .catch(e => console.error(e));
206
+ //# sourceMappingURL=validate-state-v1-1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-state-v1-1.js","sourceRoot":"","sources":["../../../../src/dex/algebra/scripts/validate-state-v1-1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Address, ParaSwapVersion } from '@paraswap/core';
2
+ import { IDexHelper } from '../dex-helper';
3
+ import { Interface } from '@ethersproject/abi';
4
+ export declare class AugustusApprovalsHelper {
5
+ protected readonly dexHelper: IDexHelper;
6
+ erc20Interface: Interface;
7
+ private cache;
8
+ protected network: number;
9
+ protected augustusAddress: Address;
10
+ protected augustusV6Address: Address | undefined;
11
+ private readonly cacheApprovesKey;
12
+ constructor(dexHelper: IDexHelper);
13
+ hasApprovals(spender: Address, tokenTargetMapping: [token: Address, target: Address][]): Promise<boolean[]>;
14
+ hasAugustusApproval(token: Address, target: Address, version?: ParaSwapVersion): Promise<boolean>;
15
+ private applyCachedApprovals;
16
+ private setCachedApprovals;
17
+ private getOnChainApprovals;
18
+ private applyOnChainApprovals;
19
+ private createCacheKey;
20
+ private splitCacheKey;
21
+ private filterKeys;
22
+ }
@@ -0,0 +1,110 @@
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.AugustusApprovalsHelper = void 0;
7
+ const core_1 = require("@paraswap/core");
8
+ const constants_1 = require("../constants");
9
+ const abi_1 = require("@ethersproject/abi");
10
+ const erc20_json_1 = __importDefault(require("../abi/erc20.json"));
11
+ const decoders_1 = require("../lib/decoders");
12
+ const DEFAULT_APPROVE_CACHE_KEY_VALUE = 'true';
13
+ class AugustusApprovalsHelper {
14
+ constructor(dexHelper) {
15
+ this.dexHelper = dexHelper;
16
+ this.network = dexHelper.config.data.network;
17
+ this.augustusAddress = dexHelper.config.data.augustusAddress;
18
+ this.augustusV6Address = dexHelper.config.data.augustusV6Address;
19
+ this.erc20Interface = new abi_1.Interface(erc20_json_1.default);
20
+ this.cache = dexHelper.cache;
21
+ this.cacheApprovesKey = `${constants_1.CACHE_PREFIX}_${this.network}_approves`;
22
+ }
23
+ async hasApprovals(spender, tokenTargetMapping) {
24
+ let approvalsMapping = {};
25
+ tokenTargetMapping.forEach(([token, target]) => {
26
+ const key = this.createCacheKey(spender, token, target);
27
+ // set approved 'true' for ETH
28
+ approvalsMapping[key] = token.toLowerCase() === constants_1.ETHER_ADDRESS;
29
+ });
30
+ approvalsMapping = await this.applyCachedApprovals(approvalsMapping);
31
+ const cachedApprovals = Object.values(approvalsMapping);
32
+ if (cachedApprovals.every(approval => approval === true))
33
+ return cachedApprovals;
34
+ approvalsMapping = await this.applyOnChainApprovals(approvalsMapping);
35
+ // to keep same order and length as input
36
+ return tokenTargetMapping
37
+ .map(([token, target]) => this.createCacheKey(spender, token, target))
38
+ .map(key => approvalsMapping[key]);
39
+ }
40
+ async hasAugustusApproval(token, target, version = core_1.ParaSwapVersion.V5) {
41
+ if (token.toLowerCase() === constants_1.ETHER_ADDRESS.toLowerCase())
42
+ return true;
43
+ const tokenTargetMapping = [[token, target]];
44
+ const spender = version === core_1.ParaSwapVersion.V6
45
+ ? this.augustusV6Address
46
+ : this.augustusAddress;
47
+ const allowances = await this.hasApprovals(spender, tokenTargetMapping);
48
+ return allowances[0];
49
+ }
50
+ async applyCachedApprovals(approvalsMapping) {
51
+ const keys = this.filterKeys(approvalsMapping);
52
+ if (keys.length === 0)
53
+ return approvalsMapping;
54
+ const approvals = await this.cache.hmget(this.cacheApprovesKey, keys);
55
+ approvals.forEach((approved, index) => {
56
+ if (approved !== null) {
57
+ approvalsMapping[keys[index]] = true;
58
+ }
59
+ });
60
+ return approvalsMapping;
61
+ }
62
+ async setCachedApprovals(approvalsMapping) {
63
+ const keys = this.filterKeys(approvalsMapping, true);
64
+ if (keys.length === 0)
65
+ return;
66
+ const values = Array(keys.length).fill(DEFAULT_APPROVE_CACHE_KEY_VALUE);
67
+ await this.cache.hmset(this.cacheApprovesKey, keys, values);
68
+ }
69
+ async getOnChainApprovals(spenderTokenTargetMapping) {
70
+ const allowanceCalldata = spenderTokenTargetMapping.map(([spender, token, target]) => ({
71
+ target: token,
72
+ callData: this.erc20Interface.encodeFunctionData('allowance', [
73
+ spender,
74
+ target,
75
+ ]),
76
+ decodeFunction: decoders_1.uint256ToBigInt,
77
+ }));
78
+ const allowances = await this.dexHelper.multiWrapper.tryAggregate(false, allowanceCalldata);
79
+ return allowances.map(allowance =>
80
+ // as we are give approvals for max amount, just check if it's not zero
81
+ allowance.success ? allowance.returnData !== 0n : false);
82
+ }
83
+ async applyOnChainApprovals(approvalsMapping) {
84
+ const keys = this.filterKeys(approvalsMapping);
85
+ if (keys.length === 0)
86
+ return approvalsMapping;
87
+ const onChainApprovals = await this.getOnChainApprovals(keys.map(key => this.splitCacheKey(key)));
88
+ if (onChainApprovals.some(v => v === true)) {
89
+ onChainApprovals.forEach((approved, index) => {
90
+ if (approved)
91
+ approvalsMapping[keys[index]] = true;
92
+ });
93
+ await this.setCachedApprovals(approvalsMapping);
94
+ }
95
+ return approvalsMapping;
96
+ }
97
+ createCacheKey(spender, token, target) {
98
+ return `${spender}_${token}_${target}`;
99
+ }
100
+ splitCacheKey(key) {
101
+ return key.split('_');
102
+ }
103
+ filterKeys(tokenTargetOnChainMapping, approved = false) {
104
+ return Object.entries(tokenTargetOnChainMapping)
105
+ .filter(([key, app]) => app === approved)
106
+ .map(([key]) => key);
107
+ }
108
+ }
109
+ exports.AugustusApprovalsHelper = AugustusApprovalsHelper;
110
+ //# sourceMappingURL=augustus-approvals-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"augustus-approvals-helper.js","sourceRoot":"","sources":["../../src/dex/augustus-approvals-helper.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,6 @@ class BProtocol extends simple_exchange_1.SimpleExchange {
44
44
  return {
45
45
  needWrapNative: this.needWrapNative,
46
46
  dexFuncHasRecipient: true,
47
- dexFuncHasDestToken: false,
48
47
  exchangeData: swapData,
49
48
  targetExchange: data.exchange,
50
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bProtocol.js","sourceRoot":"","sources":["../../src/dex/bProtocol.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA6D;AAU7D,uDAAmD;AACnD,2EAAiD;AAOjD,IAAK,kBAEJ;AAFD,WAAK,kBAAkB;IACrB,mCAAa,CAAA;AACf,CAAC,EAFI,kBAAkB,KAAlB,kBAAkB,QAEtB;AAED,MAAa,SACX,SAAQ,gCAAc;IAMtB,YAAY,SAAqB;QAC/B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,eAAS,CAC1C,wBAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,QAAQ;YAC7B,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC7C,MAAM,kBAAkB,GAAmB;YACzC,SAAS;YACT,UAAU;YACV,IAAI,CAAC,eAAe;SACrB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC9D,YAAY,EACZ,kBAAkB,CACnB,CAAC;QAEF,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC7C,MAAM,kBAAkB,GAAmB;YACzC,SAAS;YACT,UAAU;YACV,SAAS;SACV,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC9D,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI;YACzB,mBAAmB,EAAE,KAAK;YAC1B,YAAY,EAAE,QAAQ;YACtB,cAAc,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;IACJ,CAAC;;AApFH,8BAqFC;AAjFQ,iBAAO,GAAG,CAAC,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"bProtocol.js","sourceRoot":"","sources":["../../src/dex/bProtocol.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA6D;AAU7D,uDAAmD;AACnD,2EAAiD;AAOjD,IAAK,kBAEJ;AAFD,WAAK,kBAAkB;IACrB,mCAAa,CAAA;AACf,CAAC,EAFI,kBAAkB,KAAlB,kBAAkB,QAEtB;AAED,MAAa,SACX,SAAQ,gCAAc;IAMtB,YAAY,SAAqB;QAC/B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,eAAS,CAC1C,wBAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,QAAQ;YAC7B,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC7C,MAAM,kBAAkB,GAAmB;YACzC,SAAS;YACT,UAAU;YACV,IAAI,CAAC,eAAe;SACrB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC9D,YAAY,EACZ,kBAAkB,CACnB,CAAC;QAEF,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAmB,EACnB,IAAc;QAEd,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC7C,MAAM,kBAAkB,GAAmB;YACzC,SAAS;YACT,UAAU;YACV,SAAS;SACV,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAC9D,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI;YACzB,YAAY,EAAE,QAAQ;YACtB,cAAc,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;IACJ,CAAC;;AAnFH,8BAoFC;AAhFQ,iBAAO,GAAG,CAAC,WAAW,CAAC,CAAC"}
@@ -67,7 +67,6 @@ class Bancor extends simple_exchange_1.SimpleExchange {
67
67
  return {
68
68
  needWrapNative: this.needWrapNative,
69
69
  dexFuncHasRecipient: false,
70
- dexFuncHasDestToken: false,
71
70
  exchangeData: swapData,
72
71
  targetExchange: data.bancorNetwork || BANCOR_NETWORK[this.network],
73
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bancor.js","sourceRoot":"","sources":["../../src/dex/bancor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bancor.js","sourceRoot":"","sources":["../../src/dex/bancor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,84 @@
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
+ /* eslint-disable no-console */
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ dotenv_1.default.config();
9
+ const constants_1 = require("../../../constants");
10
+ const dex_helper_1 = require("../../../dex-helper");
11
+ const camelot_1 = require("../camelot");
12
+ const poolAddress = '0x19d51dc52e52407656b40b197b1bbe14294b955b';
13
+ const srcToken = {
14
+ // address: `0x82aF49447D8a07e3bd95BD0d56f35241523fBab1`,
15
+ address: `0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f`,
16
+ decimals: 18,
17
+ };
18
+ const destToken = {
19
+ address: '0x939727d85D99d0aC339bF1B76DfE30Ca27C19067',
20
+ decimals: 18,
21
+ };
22
+ const blockHeaders = {};
23
+ async function checkPoolStateForBlockRange(startBlockNumber, endBlockNumber) {
24
+ const network = constants_1.Network.ARBITRUM;
25
+ const dexKey = 'Camelot';
26
+ const dexHelper = new dex_helper_1.DummyDexHelper(network);
27
+ const camelot = new camelot_1.Camelot(network, dexKey, dexHelper);
28
+ // await camelot.batchCatchUpPairs([[srcToken, destToken]], startBlockNumber);
29
+ // const pair = await camelot.findPair(srcToken, destToken);
30
+ // const pool = pair?.pool;
31
+ // const logsToDispatch = await dexHelper.provider.getLogs({
32
+ // fromBlock: startBlockNumber,
33
+ // toBlock: endBlockNumber,
34
+ // address: poolAddress,
35
+ // });
36
+ // console.log(logsToDispatch.length);
37
+ // // group logs by block number
38
+ // const logsByBlockNumber: Record<number, any[]> = {};
39
+ // for (let log of logsToDispatch) {
40
+ // if (!logsByBlockNumber[log.blockNumber]) {
41
+ // logsByBlockNumber[log.blockNumber] = [];
42
+ // }
43
+ // logsByBlockNumber[log.blockNumber].push(log);
44
+ // }
45
+ // const sortedBlocks = Object.keys(logsByBlockNumber)
46
+ // .map(Number)
47
+ // .sort((a, b) => Number(a) - Number(b));
48
+ // for (let blockNumber of sortedBlocks) {
49
+ // if (!blockHeaders[blockNumber]) {
50
+ // blockHeaders[blockNumber] = await dexHelper.web3Provider.eth.getBlock(
51
+ // blockNumber,
52
+ // );
53
+ // }
54
+ // await pool?.update(logsByBlockNumber[blockNumber], {
55
+ // [blockNumber]: blockHeaders[blockNumber],
56
+ // });
57
+ // }
58
+ // const state = pool?.getState(startBlockNumber);
59
+ // console.log('my state', state);
60
+ // if (pair) {
61
+ // const poolStateActual = await camelot.getManyPoolStates(
62
+ // [pair],
63
+ // endBlockNumber,
64
+ // );
65
+ // console.log('actual state', poolStateActual);
66
+ // }
67
+ console.log(await camelot.getPricesVolume(srcToken, destToken, [10000000000000000000n, 10000000000000000000n], constants_1.SwapSide.SELL, endBlockNumber));
68
+ console.log(await camelot.getPricesVolume(srcToken, destToken, [10000000000000000000n, 10000000000000000000n], constants_1.SwapSide.SELL, endBlockNumber));
69
+ return true;
70
+ // return isPoolStateEqualToReal(state, endBlockNumber);
71
+ }
72
+ async function main() {
73
+ // use findBreakingBlock to find the block where the state is broken
74
+ // console.log(await findBreakingBlock(startBlockNumber, endBlockNumber));
75
+ // previously broken block 150502863
76
+ const block = 162135953;
77
+ console.log(await checkPoolStateForBlockRange(162099097, block));
78
+ // console.log(await checkPoolStateForBlockRange(152087800, 152287800));
79
+ // console.log(await checkPoolStateForBlockRange(152100945, 152100947));
80
+ }
81
+ main()
82
+ .then(() => console.log('Done'))
83
+ .catch(e => console.error(e));
84
+ //# sourceMappingURL=validate-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-state.js","sourceRoot":"","sources":["../../../../src/dex/camelot/scripts/validate-state.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,kDAAuD;AACvD,oDAAqD;AAErD,wCAAqC;AAErC,MAAM,WAAW,GAAG,4CAA4C,CAAC;AAEjE,MAAM,QAAQ,GAAG;IACf,yDAAyD;IACzD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,EAAE;CACb,CAAC;AACF,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,YAAY,GAAgC,EAAE,CAAC;AAErD,KAAK,UAAU,2BAA2B,CACxC,gBAAwB,EACxB,cAAsB;IAEtB,MAAM,OAAO,GAAG,mBAAO,CAAC,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,2BAAc,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxD,8EAA8E;IAE9E,4DAA4D;IAC5D,2BAA2B;IAE3B,4DAA4D;IAC5D,iCAAiC;IACjC,6BAA6B;IAC7B,0BAA0B;IAC1B,MAAM;IAEN,sCAAsC;IAEtC,gCAAgC;IAChC,uDAAuD;IACvD,oCAAoC;IACpC,+CAA+C;IAC/C,+CAA+C;IAC/C,MAAM;IACN,kDAAkD;IAClD,IAAI;IAEJ,sDAAsD;IACtD,iBAAiB;IACjB,4CAA4C;IAE5C,0CAA0C;IAC1C,sCAAsC;IACtC,6EAA6E;IAC7E,qBAAqB;IACrB,SAAS;IACT,MAAM;IAEN,yDAAyD;IACzD,gDAAgD;IAChD,QAAQ;IACR,IAAI;IAEJ,kDAAkD;IAClD,kCAAkC;IAElC,cAAc;IACd,6DAA6D;IAC7D,cAAc;IACd,sBAAsB;IACtB,OAAO;IACP,kDAAkD;IAClD,IAAI;IACJ,OAAO,CAAC,GAAG,CACT,MAAM,OAAO,CAAC,eAAe,CAC3B,QAAQ,EACR,SAAS,EACT,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,EAC9C,oBAAQ,CAAC,IAAI,EACb,cAAc,CACf,CACF,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,MAAM,OAAO,CAAC,eAAe,CAC3B,QAAQ,EACR,SAAS,EACT,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,EAC9C,oBAAQ,CAAC,IAAI,EACb,cAAc,CACf,CACF,CAAC;IAEF,OAAO,IAAI,CAAC;IACZ,wDAAwD;AAC1D,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,oEAAoE;IACpE,0EAA0E;IAC1E,oCAAoC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,MAAM,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,wEAAwE;IACxE,wEAAwE;AAC1E,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC/B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -48,7 +48,6 @@ class Compound extends simple_exchange_1.SimpleExchange {
48
48
  return {
49
49
  needWrapNative: this.needWrapNative,
50
50
  dexFuncHasRecipient: false,
51
- dexFuncHasDestToken: false,
52
51
  exchangeData: swapData,
53
52
  targetExchange: cToken,
54
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/dex/compound.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA6D;AAC7D,4CAAsD;AAStD,uDAAmD;AACnD,mFAA6C,CAAC,WAAW;AACzD,oCAAwC;AAQxC,IAAK,iBAGJ;AAHD,WAAK,iBAAiB;IACpB,sCAAiB,CAAA;IACjB,kCAAa,CAAA;AACf,CAAC,EAHI,iBAAiB,KAAjB,iBAAiB,QAGrB;AAED,MAAa,QACX,SAAQ,gCAAc;IAMtB,YAAY,SAAqB;QAC/B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,eAAS,CAAC,4BAAsB,CAAC,CAAC;IAC7D,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3C;YACE,YAAY,EAAE;gBACZ,MAAM,EAAE,SAAS;aAClB;SACF,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,OAAO;YACL,8CAA8C;YAC9C,cAAc,EAAE,wBAAY;YAC5B,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EACnE,CAAC,SAAS,CAAC,CACZ,CAAC;QAEN,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,CACP,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EACnE,CAAC,SAAS,CAAC,CACZ,CAAC;QAEN,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,KAAK;YAC1B,mBAAmB,EAAE,KAAK;YAC1B,YAAY,EAAE,QAAQ;YACtB,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;;AAzFH,4BA0FC;AAtFQ,gBAAO,GAAG,CAAC,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/dex/compound.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA6D;AAC7D,4CAAsD;AAStD,uDAAmD;AACnD,mFAA6C,CAAC,WAAW;AACzD,oCAAwC;AAQxC,IAAK,iBAGJ;AAHD,WAAK,iBAAiB;IACpB,sCAAiB,CAAA;IACjB,kCAAa,CAAA;AACf,CAAC,EAHI,iBAAiB,KAAjB,iBAAiB,QAGrB;AAED,MAAa,QACX,SAAQ,gCAAc;IAMtB,YAAY,SAAqB;QAC/B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,eAAS,CAAC,4BAAsB,CAAC,CAAC;IAC7D,CAAC;IAED,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3C;YACE,YAAY,EAAE;gBACZ,MAAM,EAAE,SAAS;aAClB;SACF,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,OAAO;YACL,8CAA8C;YAC9C,cAAc,EAAE,wBAAY;YAC5B,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EACnE,CAAC,SAAS,CAAC,CACZ,CAAC;QAEN,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,CACP,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAkB,EAClB,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EACnE,CAAC,SAAS,CAAC,CACZ,CAAC;QAEN,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,KAAK;YAC1B,YAAY,EAAE,QAAQ;YACtB,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;;AAxFH,4BAyFC;AArFQ,gBAAO,GAAG,CAAC,UAAU,CAAC,CAAC"}
@@ -12,3 +12,4 @@ export declare const NETWORK_ID_TO_NAME: Record<number, string>;
12
12
  export declare const FACTORY_MAX_PLAIN_COINS = 4;
13
13
  export declare const FACTORY_MAX_PLAIN_IMPLEMENTATIONS_FOR_COIN = 10;
14
14
  export declare const DIRECT_METHOD_NAME = "directCurveV1Swap";
15
+ export declare const DIRECT_METHOD_NAME_V6 = "swapExactAmountInOnCurveV1";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DIRECT_METHOD_NAME = exports.FACTORY_MAX_PLAIN_IMPLEMENTATIONS_FOR_COIN = exports.FACTORY_MAX_PLAIN_COINS = exports.NETWORK_ID_TO_NAME = exports.CURVE_API_URL = exports.CONVERGENCE_ERROR_PREFIX = exports.LIQUIDITY_FETCH_TIMEOUT_MS = exports.MIN_LIQUIDITY_IN_USD = exports.POOL_EXCHANGE_GAS_COST = exports.MAX_ALLOWED_STATE_DELAY_FACTOR = exports.LIQUIDITY_UPDATE_PERIOD_MS = exports.STATE_UPDATE_RETRY_PERIOD_MS = exports.STATE_UPDATE_PERIOD_MS = exports.MIN_AMOUNT_TO_RECEIVE = void 0;
3
+ exports.DIRECT_METHOD_NAME_V6 = exports.DIRECT_METHOD_NAME = exports.FACTORY_MAX_PLAIN_IMPLEMENTATIONS_FOR_COIN = exports.FACTORY_MAX_PLAIN_COINS = exports.NETWORK_ID_TO_NAME = exports.CURVE_API_URL = exports.CONVERGENCE_ERROR_PREFIX = exports.LIQUIDITY_FETCH_TIMEOUT_MS = exports.MIN_LIQUIDITY_IN_USD = exports.POOL_EXCHANGE_GAS_COST = exports.MAX_ALLOWED_STATE_DELAY_FACTOR = exports.LIQUIDITY_UPDATE_PERIOD_MS = exports.STATE_UPDATE_RETRY_PERIOD_MS = exports.STATE_UPDATE_PERIOD_MS = exports.MIN_AMOUNT_TO_RECEIVE = void 0;
4
4
  const constants_1 = require("../../constants");
5
5
  exports.MIN_AMOUNT_TO_RECEIVE = 1;
6
6
  exports.STATE_UPDATE_PERIOD_MS = 5 * 1000;
@@ -27,4 +27,5 @@ exports.NETWORK_ID_TO_NAME = {
27
27
  exports.FACTORY_MAX_PLAIN_COINS = 4;
28
28
  exports.FACTORY_MAX_PLAIN_IMPLEMENTATIONS_FOR_COIN = 10;
29
29
  exports.DIRECT_METHOD_NAME = 'directCurveV1Swap';
30
+ exports.DIRECT_METHOD_NAME_V6 = 'swapExactAmountInOnCurveV1';
30
31
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/curve-v1-factory/constants.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAE7B,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAE1B,QAAA,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC;AAElC,QAAA,4BAA4B,GAAG,IAAI,CAAC;AAEpC,QAAA,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEnC,QAAA,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEjD,2DAA2D;AAC9C,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAE1B,QAAA,0BAA0B,GAAG,IAAK,CAAC;AAEnC,QAAA,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD,iCAAiC;AACpB,QAAA,aAAa,GAAG,mCAAmC,CAAC;AACpD,QAAA,kBAAkB,GAA2B;IACxD,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE,UAAU;IAC7B,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE,SAAS;IAC5B,CAAC,mBAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC1B,CAAC,mBAAO,CAAC,SAAS,CAAC,EAAE,WAAW;IAChC,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC9B,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE,UAAU;CAC/B,CAAC;AAEF,0EAA0E;AAC1E,YAAY;AACC,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,0CAA0C,GAAG,EAAE,CAAC;AAEhD,QAAA,kBAAkB,GAAG,mBAAmB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/curve-v1-factory/constants.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAE7B,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAE1B,QAAA,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC;AAElC,QAAA,4BAA4B,GAAG,IAAI,CAAC;AAEpC,QAAA,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEnC,QAAA,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEjD,2DAA2D;AAC9C,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAE1B,QAAA,0BAA0B,GAAG,IAAK,CAAC;AAEnC,QAAA,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD,iCAAiC;AACpB,QAAA,aAAa,GAAG,mCAAmC,CAAC;AACpD,QAAA,kBAAkB,GAA2B;IACxD,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE,UAAU;IAC7B,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE,SAAS;IAC5B,CAAC,mBAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC1B,CAAC,mBAAO,CAAC,SAAS,CAAC,EAAE,WAAW;IAChC,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC9B,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE,UAAU;CAC/B,CAAC;AAEF,0EAA0E;AAC1E,YAAY;AACC,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,0CAA0C,GAAG,EAAE,CAAC;AAEhD,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AACzC,QAAA,qBAAqB,GAAG,4BAA4B,CAAC"}
@@ -6,10 +6,10 @@ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, Simpl
6
6
  import { SwapSide, Network } from '../../constants';
7
7
  import { IDex } from '../idex';
8
8
  import { IDexHelper } from '../../dex-helper/idex-helper';
9
- import { CurveV1FactoryData, CurveV1FactoryIfaces, DirectCurveV1Param } from './types';
9
+ import { CurveV1FactoryData, CurveV1FactoryIfaces, DirectCurveV1Param, CurveV1FactoryDirectSwap, DirectCurveV1FactoryParamV6 } from './types';
10
10
  import { SimpleExchange } from '../simple-exchange';
11
11
  import { CurveV1FactoryPoolManager } from './curve-v1-pool-manager';
12
- export declare class CurveV1Factory extends SimpleExchange implements IDex<CurveV1FactoryData, DirectCurveV1Param> {
12
+ export declare class CurveV1Factory extends SimpleExchange implements IDex<CurveV1FactoryData, DirectCurveV1Param | CurveV1FactoryDirectSwap> {
13
13
  readonly network: Network;
14
14
  readonly dexKey: string;
15
15
  readonly dexHelper: IDexHelper;
@@ -48,8 +48,14 @@ export declare class CurveV1Factory extends SimpleExchange implements IDex<Curve
48
48
  getTokenFromAddress(address: Address): Token;
49
49
  preProcessTransaction(optimalSwapExchange: OptimalSwapExchange<CurveV1FactoryData>, srcToken: Token, _0: Token, _1: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<CurveV1FactoryData>, ExchangeTxInfo]>;
50
50
  getDirectParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, expectedAmount: NumberAsString, data: CurveV1FactoryData, side: SwapSide, permit: string, uuid: string, feePercent: NumberAsString, deadline: NumberAsString, partner: string, beneficiary: string, contractMethod?: string): TxInfo<DirectCurveV1Param>;
51
+ getDirectParamV6(srcToken: Address, destToken: Address, fromAmount: NumberAsString, toAmount: NumberAsString, quotedAmount: NumberAsString, data: CurveV1FactoryData, side: SwapSide, permit: string, uuid: string, partnerAndFee: string, beneficiary: string, blockNumber: number, contractMethod?: string): {
52
+ encoder: (params: DirectCurveV1FactoryParamV6, partnerAndFee: string, permit: string) => string;
53
+ params: CurveV1FactoryDirectSwap;
54
+ networkFee: string;
55
+ };
51
56
  static getDirectFunctionName(): string[];
52
57
  getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: CurveV1FactoryData, side: SwapSide): Promise<SimpleExchangeParam>;
58
+ static getDirectFunctionNameV6(): string[];
53
59
  getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: CurveV1FactoryData, side: SwapSide): DexExchangeParam;
54
60
  updatePoolState(): Promise<void>;
55
61
  getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;