@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
@@ -1 +1 @@
1
- {"version":3,"file":"stable-pool.js","sourceRoot":"","sources":["../../src/dex/stable-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stable-pool.js","sourceRoot":"","sources":["../../src/dex/stable-pool.ts"],"names":[],"mappings":"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"}
@@ -77,26 +77,26 @@ class TraderJoeV21 extends simple_exchange_1.SimpleExchange {
77
77
  const swapFunction = side === constants_1.SwapSide.SELL
78
78
  ? TraderJoeV2RouterFunctions.swapExactTokensForTokens
79
79
  : TraderJoeV2RouterFunctions.swapTokensForExactTokens;
80
+ const placeholder = (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)();
80
81
  const swapFunctionParams = side === constants_1.SwapSide.SELL
81
82
  ? [
82
83
  srcAmount,
83
84
  destAmount,
84
85
  [[data.binStep], ['2'], [srcToken, destToken]],
85
86
  recipient,
86
- (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
87
+ placeholder,
87
88
  ]
88
89
  : [
89
90
  destAmount,
90
91
  srcAmount,
91
92
  [[data.binStep], ['2'], [srcToken, destToken]],
92
93
  recipient,
93
- (0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
94
+ placeholder,
94
95
  ];
95
96
  const swapData = this.exchangeRouterInterface.encodeFunctionData(swapFunction, swapFunctionParams);
96
97
  return {
97
98
  needWrapNative: this.needWrapNative,
98
99
  dexFuncHasRecipient: true,
99
- dexFuncHasDestToken: true,
100
100
  exchangeData: swapData,
101
101
  targetExchange: this.routerAddress,
102
102
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trader-joe-v2.1.js","sourceRoot":"","sources":["../../src/dex/trader-joe-v2.1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trader-joe-v2.1.js","sourceRoot":"","sources":["../../src/dex/trader-joe-v2.1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { UnoptimizedRate } from '../../types';
2
+ export declare function uniswapOptimizer(rate: UnoptimizedRate): UnoptimizedRate;
@@ -0,0 +1,75 @@
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.uniswapOptimizer = void 0;
7
+ const utils_1 = require("../../utils");
8
+ const constants_1 = require("./constants");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ // Refactor the optimization of swap rates for better clarity and efficiency
11
+ function uniswapOptimizer(rate) {
12
+ const optimizeSwapRoute = (swaps) => {
13
+ let lastOptimizedSwap = null;
14
+ const optimizedSwaps = swaps.reduce((accumulatedSwaps, currentSwap) => {
15
+ const isUniswapSwap = currentSwap.swapExchanges.length === 1 &&
16
+ isSwapExchangeAUniswapFork(currentSwap.swapExchanges[0].exchange);
17
+ if (!isUniswapSwap) {
18
+ lastOptimizedSwap = null;
19
+ accumulatedSwaps.push(currentSwap);
20
+ return accumulatedSwaps;
21
+ }
22
+ if (canBeMergedWithLastSwap(lastOptimizedSwap, currentSwap)) {
23
+ lastOptimizedSwap = mergeSwaps(lastOptimizedSwap, currentSwap);
24
+ }
25
+ else {
26
+ lastOptimizedSwap = lodash_1.default.cloneDeep(currentSwap);
27
+ accumulatedSwaps.push(lastOptimizedSwap);
28
+ }
29
+ return accumulatedSwaps;
30
+ }, []);
31
+ return optimizedSwaps;
32
+ };
33
+ rate.bestRoute = rate.bestRoute.map(route => ({
34
+ ...route,
35
+ swaps: optimizeSwapRoute(route.swaps),
36
+ }));
37
+ return rate;
38
+ }
39
+ exports.uniswapOptimizer = uniswapOptimizer;
40
+ function isSwapExchangeAUniswapFork(exchangeName) {
41
+ return constants_1.AllUniswapForks.some(fork => fork.toLowerCase() === exchangeName.toLowerCase());
42
+ }
43
+ function canBeMergedWithLastSwap(lastSwap, currentSwap) {
44
+ return (!!lastSwap &&
45
+ lodash_1.default.last(lastSwap.swapExchanges[0].data.path).toLowerCase() ===
46
+ currentSwap.swapExchanges[0].data.path[0].toLowerCase());
47
+ }
48
+ function mergeSwaps(lastSwap, currentSwap) {
49
+ lastSwap.swapExchanges[0].data.path.push(currentSwap.swapExchanges[0].data.path[1]);
50
+ lastSwap.swapExchanges[0].exchange = deriveExchangeName(lastSwap, currentSwap);
51
+ lastSwap.swapExchanges[0].data.pools.push(currentSwap.swapExchanges[0].data.pools[0]);
52
+ lastSwap.swapExchanges[0].poolAddresses.push(currentSwap.swapExchanges[0].poolAddresses[0]);
53
+ lastSwap.swapExchanges[0].data.gasUSD = calculateCombinedGasUSD(lastSwap, currentSwap);
54
+ if ((0, utils_1.isETHAddress)(currentSwap.destToken)) {
55
+ lastSwap.swapExchanges[0].data.weth =
56
+ currentSwap.swapExchanges[0].data.weth;
57
+ }
58
+ lastSwap.destToken = currentSwap.destToken;
59
+ lastSwap.destDecimals = currentSwap.destDecimals;
60
+ lastSwap.swapExchanges[0].destAmount =
61
+ currentSwap.swapExchanges[0].destAmount;
62
+ return lastSwap;
63
+ }
64
+ function deriveExchangeName(lastSwap, currentSwap) {
65
+ return lastSwap.swapExchanges[0].exchange ===
66
+ currentSwap.swapExchanges[0].exchange
67
+ ? lastSwap.swapExchanges[0].exchange
68
+ : 'UniswapForkOptimized';
69
+ }
70
+ function calculateCombinedGasUSD(lastSwap, currentSwap) {
71
+ const lastGasUSD = parseFloat(lastSwap.swapExchanges[0].data.gasUSD);
72
+ const currentGasUSD = parseFloat(currentSwap.swapExchanges[0].data.gasUSD);
73
+ return (lastGasUSD + currentGasUSD).toFixed(6);
74
+ }
75
+ //# sourceMappingURL=uniswap-v2-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-v2-optimizer.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v2/uniswap-v2-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { OptimalRate } from '@paraswap/core';
2
+ import { DexExchangeParam } from '../types';
3
+ import { DepositWithdrawReturn } from '../dex/weth/types';
4
+ export interface IExecutorBytecodeBuilder {
5
+ buildByteCode(priceRoute: OptimalRate, exchangeDataList: DexExchangeParam[], maybeWethCallData?: DepositWithdrawReturn): string;
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IExecutorBytecodeBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IExecutorBytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/IExecutorBytecodeBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { OptimalRate } from '../../types';
2
+ export declare type ContractsAugustusV6 = {
3
+ AugustusV6: string;
4
+ Executor01: string;
5
+ Executor02: string;
6
+ Executor03: string;
7
+ };
8
+ export declare function runE2ETest(priceRoute: OptimalRate, senderAddress: string, forkId: string, lastTransactionId: string, contracts: ContractsAugustusV6): Promise<void>;
@@ -0,0 +1,175 @@
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.runE2ETest = void 0;
30
+ /* eslint-disable no-console */
31
+ const abi_1 = require("@ethersproject/abi");
32
+ const local_paraswap_sdk_1 = require("../../implementations/local-paraswap-sdk");
33
+ const tenderly_simulation_1 = require("../../../tests/tenderly-simulation");
34
+ const constants_1 = require("../../constants");
35
+ const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
36
+ const config_1 = require("../../config");
37
+ const constants_e2e_1 = require("../../../tests/constants-e2e");
38
+ const util = __importStar(require("util"));
39
+ const utils_1 = require("../../../tests/utils");
40
+ const erc20Interface = new abi_1.Interface(erc20_json_1.default);
41
+ function send1WeiTo(token, to, network) {
42
+ const tokens = constants_e2e_1.Tokens[network];
43
+ const tokenSymbol = Object.keys(tokens).find(tokenSymbol => {
44
+ const curToken = tokens[tokenSymbol];
45
+ return curToken.address === token;
46
+ });
47
+ const holders = constants_e2e_1.Holders[network];
48
+ const holder = holders[tokenSymbol];
49
+ return {
50
+ from: holder,
51
+ to: token,
52
+ data: erc20Interface.encodeFunctionData('transfer', [to, '1']),
53
+ value: '0',
54
+ };
55
+ }
56
+ function checkBalanceOf(token, holder) {
57
+ return {
58
+ from: constants_1.NULL_ADDRESS,
59
+ to: token,
60
+ data: erc20Interface.encodeFunctionData('balanceOf', [holder]),
61
+ value: '0',
62
+ };
63
+ }
64
+ function allowAugustusV6(tokenAddress, holderAddress, network) {
65
+ const augustusV6Address = (0, config_1.generateConfig)(network).augustusV6Address;
66
+ return {
67
+ from: holderAddress,
68
+ to: tokenAddress,
69
+ data: erc20Interface.encodeFunctionData('approve', [
70
+ augustusV6Address,
71
+ constants_1.MAX_UINT,
72
+ ]),
73
+ value: '0',
74
+ };
75
+ }
76
+ const getAllExchanges = (data) => {
77
+ const exchanges = new Set();
78
+ data.bestRoute.forEach(route => {
79
+ route.swaps.forEach(swap => {
80
+ swap.swapExchanges.forEach(swapExchange => {
81
+ exchanges.add(swapExchange.exchange);
82
+ });
83
+ });
84
+ });
85
+ return Array.from(exchanges);
86
+ };
87
+ async function runE2ETest(priceRoute, senderAddress, forkId, lastTransactionId, contracts) {
88
+ const { network, srcToken, destToken, side, contractMethod } = priceRoute;
89
+ const ts = new tenderly_simulation_1.TenderlySimulation(network, forkId, lastTransactionId);
90
+ await ts.setup();
91
+ if (srcToken.toLowerCase() !== constants_1.ETHER_ADDRESS.toLowerCase()) {
92
+ const augustusV6Allowance = await ts.simulate(allowAugustusV6(srcToken, senderAddress, network));
93
+ if (!augustusV6Allowance.success)
94
+ console.log(augustusV6Allowance.url);
95
+ expect(augustusV6Allowance.success).toEqual(true);
96
+ }
97
+ // The API currently doesn't allow for specifying poolIdentifiers
98
+ const paraswap = new local_paraswap_sdk_1.LocalParaswapSDK(network, getAllExchanges(priceRoute), '');
99
+ paraswap.dexHelper.config.data.augustusV6Address = contracts.AugustusV6;
100
+ paraswap.dexHelper.config.data.executorsAddresses = { ...contracts };
101
+ if (paraswap.initializePricing)
102
+ await paraswap.initializePricing();
103
+ await (0, utils_1.sleep)(2000);
104
+ if (paraswap.dexHelper?.replaceProviderWithRPC) {
105
+ paraswap.dexHelper?.replaceProviderWithRPC(`https://rpc.tenderly.co/fork/${ts.forkId}`);
106
+ }
107
+ try {
108
+ console.log('PRICE ROUTE: ', util.inspect(priceRoute, false, null, true));
109
+ expect(parseFloat(priceRoute.destAmount)).toBeGreaterThan(0);
110
+ const config = (0, config_1.generateConfig)(network);
111
+ const augustusV6Address = config.augustusV6Address;
112
+ const executorsAddresses = Object.values(config.executorsAddresses);
113
+ const addresses = [...executorsAddresses, augustusV6Address];
114
+ // for await (const a of addresses) {
115
+ // const src =
116
+ // srcToken.address.toLowerCase() === ETHER_ADDRESS
117
+ // ? config.wrappedNativeTokenAddress
118
+ // : srcToken.address.toLowerCase();
119
+ // const dest =
120
+ // destToken.address.toLowerCase() === ETHER_ADDRESS
121
+ // ? config.wrappedNativeTokenAddress
122
+ // : destToken.address.toLowerCase();
123
+ // if (priceRoute.bestRoute[0].swaps.length > 0) {
124
+ // const intermediateToken =
125
+ // priceRoute.bestRoute[0].swaps[0].destToken.toLowerCase() ===
126
+ // ETHER_ADDRESS
127
+ // ? config.wrappedNativeTokenAddress
128
+ // : priceRoute.bestRoute[0].swaps[0].destToken.toLowerCase();
129
+ // await ts.simulate(send1WeiTo(intermediateToken, a, network));
130
+ // }
131
+ // await ts.simulate(send1WeiTo(src, a, network));
132
+ // await ts.simulate(send1WeiTo(dest, a, network));
133
+ // }
134
+ // //
135
+ // // for await (const a of addresses) {
136
+ // // const src =
137
+ // // srcToken.address.toLowerCase() === ETHER_ADDRESS
138
+ // // ? config.wrappedNativeTokenAddress
139
+ // // : srcToken.address.toLowerCase();
140
+ // // const dest =
141
+ // // destToken.address.toLowerCase() === ETHER_ADDRESS
142
+ // // ? config.wrappedNativeTokenAddress
143
+ // // : destToken.address.toLowerCase();
144
+ // //
145
+ // // if (priceRoute.bestRoute[0].swaps.length > 0) {
146
+ // // const intermediateToken =
147
+ // // priceRoute.bestRoute[0].swaps[0].destToken.toLowerCase() ===
148
+ // // ETHER_ADDRESS
149
+ // // ? config.wrappedNativeTokenAddress
150
+ // // : priceRoute.bestRoute[0].swaps[0].destToken.toLowerCase();
151
+ // //
152
+ // // await ts.simulate(checkBalanceOf(intermediateToken, a));
153
+ // // }
154
+ // //
155
+ // // await ts.simulate(checkBalanceOf(src, a));
156
+ // // await ts.simulate(checkBalanceOf(dest, a));
157
+ // // }
158
+ // Calculate slippage. Default is 1%
159
+ const _slippage = 100;
160
+ const minMaxAmount = (side === constants_1.SwapSide.SELL
161
+ ? BigInt(priceRoute.destAmount) * (10000n - BigInt(_slippage))
162
+ : BigInt(priceRoute.srcAmount) * (10000n + BigInt(_slippage))) / 10000n;
163
+ const swapParams = await paraswap.buildTransaction(priceRoute, minMaxAmount, senderAddress);
164
+ const swapTx = await ts.simulate(swapParams);
165
+ console.log(`Tenderly URL: ${swapTx.url}`);
166
+ expect(swapTx.success).toEqual(true);
167
+ }
168
+ finally {
169
+ if (paraswap.releaseResources) {
170
+ await paraswap.releaseResources();
171
+ }
172
+ }
173
+ }
174
+ exports.runE2ETest = runE2ETest;
175
+ //# sourceMappingURL=utils-e2e-v6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-e2e-v6.js","sourceRoot":"","sources":["../../../src/executor/tests/utils-e2e-v6.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "3.0.0-fix-for-rc",
3
+ "version": "3.0.1",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -36,3 +36,4 @@ export const FACTORY_MAX_PLAIN_COINS = 4;
36
36
  export const FACTORY_MAX_PLAIN_IMPLEMENTATIONS_FOR_COIN = 10;
37
37
 
38
38
  export const DIRECT_METHOD_NAME = 'directCurveV1Swap';
39
+ export const DIRECT_METHOD_NAME_V6 = 'swapExactAmountInOnCurveV1';
@@ -28,6 +28,7 @@ import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
28
28
  import {
29
29
  getBigIntPow,
30
30
  getDexKeysWithNetwork,
31
+ isETHAddress,
31
32
  isSrcTokenTransferFeeToBeExchanged,
32
33
  uuidToBytes16,
33
34
  } from '../../utils';
@@ -42,6 +43,8 @@ import {
42
43
  ImplementationNames,
43
44
  PoolConstants,
44
45
  DirectCurveV1Param,
46
+ CurveV1FactoryDirectSwap,
47
+ DirectCurveV1FactoryParamV6,
45
48
  } from './types';
46
49
  import {
47
50
  getLocalDeadlineAsFriendlyPlaceholder,
@@ -75,6 +78,11 @@ import { CustomBasePoolForFactory } from './state-polling-pools/custom-pool-poll
75
78
  import ImplementationConstants from './price-handlers/functions/constants';
76
79
  import { applyTransferFee } from '../../lib/token-transfer-fee';
77
80
  import { PriceHandler } from './price-handlers/price-handler';
81
+ import { hexConcat, hexZeroPad, hexlify } from 'ethers/lib/utils';
82
+ import { packCurveData } from '../../lib/curve/encoder';
83
+ import { encodeCurveAssets } from '../curve-v1/packer';
84
+
85
+ import { DIRECT_METHOD_NAME_V6 } from './constants';
78
86
 
79
87
  const DefaultCoinsABI: AbiItem = {
80
88
  type: 'function',
@@ -95,7 +103,8 @@ const DefaultCoinsABI: AbiItem = {
95
103
 
96
104
  export class CurveV1Factory
97
105
  extends SimpleExchange
98
- implements IDex<CurveV1FactoryData, DirectCurveV1Param>
106
+ implements
107
+ IDex<CurveV1FactoryData, DirectCurveV1Param | CurveV1FactoryDirectSwap>
99
108
  {
100
109
  readonly hasConstantPriceLargeAmounts = false;
101
110
  readonly needWrapNative = false;
@@ -954,7 +963,6 @@ export class CurveV1Factory
954
963
  ];
955
964
  }
956
965
 
957
- // FIXME: need v6 function
958
966
  getDirectParam(
959
967
  srcToken: Address,
960
968
  destToken: Address,
@@ -1016,6 +1024,70 @@ export class CurveV1Factory
1016
1024
  };
1017
1025
  }
1018
1026
 
1027
+ getDirectParamV6(
1028
+ srcToken: Address,
1029
+ destToken: Address,
1030
+ fromAmount: NumberAsString,
1031
+ toAmount: NumberAsString,
1032
+ quotedAmount: NumberAsString,
1033
+ data: CurveV1FactoryData,
1034
+ side: SwapSide,
1035
+ permit: string,
1036
+ uuid: string,
1037
+ partnerAndFee: string,
1038
+ beneficiary: string,
1039
+ blockNumber: number,
1040
+ contractMethod?: string,
1041
+ ) {
1042
+ if (contractMethod !== DIRECT_METHOD_NAME_V6) {
1043
+ throw new Error(`Invalid contract method ${contractMethod}`);
1044
+ }
1045
+ assert(side === SwapSide.SELL, 'Buy not supported');
1046
+
1047
+ const metadata = hexConcat([
1048
+ hexZeroPad(uuidToBytes16(uuid), 16),
1049
+ hexZeroPad(hexlify(blockNumber), 16),
1050
+ ]);
1051
+
1052
+ const swapParams: DirectCurveV1FactoryParamV6 = [
1053
+ packCurveData(
1054
+ data.exchange,
1055
+ !data.isApproved, // approve flag, if not approved then set to true
1056
+ isETHAddress(destToken) ? 0 : isETHAddress(srcToken) ? 3 : 0,
1057
+ data.underlyingSwap
1058
+ ? CurveV1SwapType.EXCHANGE_UNDERLYING
1059
+ : CurveV1SwapType.EXCHANGE,
1060
+ ).toString(),
1061
+ encodeCurveAssets(data.i, data.j).toString(),
1062
+ srcToken,
1063
+ destToken,
1064
+ fromAmount,
1065
+ toAmount,
1066
+ quotedAmount,
1067
+ metadata,
1068
+ beneficiary,
1069
+ ];
1070
+
1071
+ const encodeParams: CurveV1FactoryDirectSwap = [
1072
+ swapParams,
1073
+ partnerAndFee,
1074
+ permit,
1075
+ ];
1076
+
1077
+ const encoder = (...params: CurveV1FactoryDirectSwap) => {
1078
+ return this.augustusV6Interface.encodeFunctionData(
1079
+ DIRECT_METHOD_NAME_V6,
1080
+ [...params],
1081
+ );
1082
+ };
1083
+
1084
+ return {
1085
+ encoder,
1086
+ params: encodeParams,
1087
+ networkFee: '0',
1088
+ };
1089
+ }
1090
+
1019
1091
  static getDirectFunctionName(): string[] {
1020
1092
  return [DIRECT_METHOD_NAME];
1021
1093
  }
@@ -1051,6 +1123,10 @@ export class CurveV1Factory
1051
1123
  );
1052
1124
  }
1053
1125
 
1126
+ static getDirectFunctionNameV6(): string[] {
1127
+ return [DIRECT_METHOD_NAME_V6];
1128
+ }
1129
+
1054
1130
  getDexParam(
1055
1131
  srcToken: Address,
1056
1132
  destToken: Address,
@@ -223,3 +223,21 @@ export type DirectCurveV1Param = [
223
223
  permit: string,
224
224
  uuid: string,
225
225
  ];
226
+
227
+ export type DirectCurveV1FactoryParamV6 = [
228
+ curveData: NumberAsString,
229
+ curveAssets: NumberAsString,
230
+ srcToken: Address,
231
+ destToken: Address,
232
+ fromAmount: NumberAsString,
233
+ toAmount: NumberAsString,
234
+ quotedAmount: NumberAsString,
235
+ metadata: string,
236
+ beneficiary: Address,
237
+ ];
238
+
239
+ export type CurveV1FactoryDirectSwap = [
240
+ params: DirectCurveV1FactoryParamV6,
241
+ partnerAndFee: string,
242
+ permit: string,
243
+ ];
@@ -0,0 +1,114 @@
1
+ import { UnoptimizedRate, OptimalSwap, Address } from '../../types';
2
+ import { isETHAddress } from '../../utils';
3
+ import { AllUniswapForks } from './constants';
4
+ import _ from 'lodash';
5
+
6
+ // Refactor the optimization of swap rates for better clarity and efficiency
7
+ export function uniswapOptimizer(rate: UnoptimizedRate): UnoptimizedRate {
8
+ const optimizeSwapRoute = (swaps: OptimalSwap[]): OptimalSwap[] => {
9
+ let lastOptimizedSwap: OptimalSwap | null = null;
10
+ const optimizedSwaps = swaps.reduce<OptimalSwap[]>(
11
+ (accumulatedSwaps, currentSwap) => {
12
+ const isUniswapSwap =
13
+ currentSwap.swapExchanges.length === 1 &&
14
+ isSwapExchangeAUniswapFork(currentSwap.swapExchanges[0].exchange);
15
+
16
+ if (!isUniswapSwap) {
17
+ lastOptimizedSwap = null;
18
+ accumulatedSwaps.push(currentSwap);
19
+ return accumulatedSwaps;
20
+ }
21
+
22
+ if (canBeMergedWithLastSwap(lastOptimizedSwap, currentSwap)) {
23
+ lastOptimizedSwap = mergeSwaps(lastOptimizedSwap!, currentSwap);
24
+ } else {
25
+ lastOptimizedSwap = _.cloneDeep(currentSwap);
26
+ accumulatedSwaps.push(lastOptimizedSwap);
27
+ }
28
+
29
+ return accumulatedSwaps;
30
+ },
31
+ [],
32
+ );
33
+
34
+ return optimizedSwaps;
35
+ };
36
+
37
+ rate.bestRoute = rate.bestRoute.map(route => ({
38
+ ...route,
39
+ swaps: optimizeSwapRoute(route.swaps),
40
+ }));
41
+
42
+ return rate;
43
+ }
44
+
45
+ function isSwapExchangeAUniswapFork(exchangeName: string): boolean {
46
+ return AllUniswapForks.some(
47
+ fork => fork.toLowerCase() === exchangeName.toLowerCase(),
48
+ );
49
+ }
50
+
51
+ function canBeMergedWithLastSwap(
52
+ lastSwap: OptimalSwap | null,
53
+ currentSwap: OptimalSwap,
54
+ ): boolean {
55
+ return (
56
+ !!lastSwap &&
57
+ _.last(<Address[]>lastSwap.swapExchanges[0].data.path)!.toLowerCase() ===
58
+ currentSwap.swapExchanges[0].data.path[0].toLowerCase()
59
+ );
60
+ }
61
+
62
+ function mergeSwaps(
63
+ lastSwap: OptimalSwap,
64
+ currentSwap: OptimalSwap,
65
+ ): OptimalSwap {
66
+ lastSwap.swapExchanges[0].data.path.push(
67
+ currentSwap.swapExchanges[0].data.path[1],
68
+ );
69
+ lastSwap.swapExchanges[0].exchange = deriveExchangeName(
70
+ lastSwap,
71
+ currentSwap,
72
+ );
73
+ lastSwap.swapExchanges[0].data.pools.push(
74
+ currentSwap.swapExchanges[0].data.pools[0],
75
+ );
76
+ lastSwap.swapExchanges[0].poolAddresses!.push(
77
+ currentSwap.swapExchanges[0].poolAddresses![0],
78
+ );
79
+ lastSwap.swapExchanges[0].data.gasUSD = calculateCombinedGasUSD(
80
+ lastSwap,
81
+ currentSwap,
82
+ );
83
+
84
+ if (isETHAddress(currentSwap.destToken)) {
85
+ lastSwap.swapExchanges[0].data.weth =
86
+ currentSwap.swapExchanges[0].data.weth;
87
+ }
88
+
89
+ lastSwap.destToken = currentSwap.destToken;
90
+ lastSwap.destDecimals = currentSwap.destDecimals;
91
+ lastSwap.swapExchanges[0].destAmount =
92
+ currentSwap.swapExchanges[0].destAmount;
93
+
94
+ return lastSwap;
95
+ }
96
+
97
+ function deriveExchangeName(
98
+ lastSwap: OptimalSwap,
99
+ currentSwap: OptimalSwap,
100
+ ): string {
101
+ return lastSwap.swapExchanges[0].exchange ===
102
+ currentSwap.swapExchanges[0].exchange
103
+ ? lastSwap.swapExchanges[0].exchange
104
+ : 'UniswapForkOptimized';
105
+ }
106
+
107
+ function calculateCombinedGasUSD(
108
+ lastSwap: OptimalSwap,
109
+ currentSwap: OptimalSwap,
110
+ ): string {
111
+ const lastGasUSD = parseFloat(lastSwap.swapExchanges[0].data.gasUSD);
112
+ const currentGasUSD = parseFloat(currentSwap.swapExchanges[0].data.gasUSD);
113
+ return (lastGasUSD + currentGasUSD).toFixed(6);
114
+ }