@paraswap/dex-lib 3.0.2 → 3.0.3-fix-for-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dex/bProtocol.js +1 -0
- package/build/dex/bProtocol.js.map +1 -1
- package/build/dex/bancor.js +1 -0
- package/build/dex/bancor.js.map +1 -1
- package/build/dex/compound.js +1 -0
- package/build/dex/compound.js.map +1 -1
- package/build/dex/dodo-v1.js +1 -0
- package/build/dex/dodo-v1.js.map +1 -1
- package/build/dex/lido.js +1 -0
- package/build/dex/lido.js.map +1 -1
- package/build/dex/onebit.js +1 -0
- package/build/dex/onebit.js.map +1 -1
- package/build/dex/smoothy.d.ts +1 -1
- package/build/dex/smoothy.js +3 -2
- package/build/dex/smoothy.js.map +1 -1
- package/build/dex/stable-pool.d.ts +1 -1
- package/build/dex/stable-pool.js +2 -1
- package/build/dex/stable-pool.js.map +1 -1
- package/build/dex/trader-joe-v2.1.js +3 -3
- package/build/dex/trader-joe-v2.1.js.map +1 -1
- package/build/executor/Executor02BytecodeBuilder.js +1 -1
- package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
- package/package.json +1 -1
- package/src/executor/Executor02BytecodeBuilder.ts +1 -1
- package/tests/debug-price-route.json +1 -67
- package/.vscode/launch.json +0 -72
- package/.vscode/settings.json +0 -2
- package/.vscode/tasks.json +0 -15
- package/build/abi/AugustusV6.abi.json +0 -1454
- package/build/dex/algebra/scripts/validate-state-v1-1.d.ts +0 -1
- package/build/dex/algebra/scripts/validate-state-v1-1.js +0 -206
- package/build/dex/algebra/scripts/validate-state-v1-1.js.map +0 -1
- package/build/dex/augustus-approvals-helper.d.ts +0 -22
- package/build/dex/augustus-approvals-helper.js +0 -110
- package/build/dex/augustus-approvals-helper.js.map +0 -1
- package/build/dex/camelot/scripts/validate-state.d.ts +0 -1
- package/build/dex/camelot/scripts/validate-state.js +0 -84
- package/build/dex/camelot/scripts/validate-state.js.map +0 -1
- package/build/dex/generic-rfq/test-v6/constants.d.ts +0 -1
- package/build/dex/generic-rfq/test-v6/constants.js +0 -5
- package/build/dex/generic-rfq/test-v6/constants.js.map +0 -1
- package/build/dex/generic-rfq/test-v6/get-config.d.ts +0 -1
- package/build/dex/generic-rfq/test-v6/get-config.js +0 -63
- package/build/dex/generic-rfq/test-v6/get-config.js.map +0 -1
- package/build/dex/generic-rfq/test-v6/types.d.ts +0 -14
- package/build/dex/generic-rfq/test-v6/types.js +0 -3
- package/build/dex/generic-rfq/test-v6/types.js.map +0 -1
- package/build/dex/generic-rfq/tokens.json +0 -570
- package/build/dex/uniswap-v2/uniswap-v2-optimizer.d.ts +0 -2
- package/build/dex/uniswap-v2/uniswap-v2-optimizer.js +0 -75
- package/build/dex/uniswap-v2/uniswap-v2-optimizer.js.map +0 -1
- package/build/executor/IExecutorBytecodeBuilder.d.ts +0 -6
- package/build/executor/IExecutorBytecodeBuilder.js +0 -3
- package/build/executor/IExecutorBytecodeBuilder.js.map +0 -1
- package/build/executor/tests/utils-e2e-v6.d.ts +0 -8
- package/build/executor/tests/utils-e2e-v6.js +0 -175
- package/build/executor/tests/utils-e2e-v6.js.map +0 -1
|
@@ -1,175 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-e2e-v6.js","sourceRoot":"","sources":["../../../src/executor/tests/utils-e2e-v6.ts"],"names":[],"mappings":"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"}
|