@paraswap/dex-lib 2.19.0 → 2.19.1-swaap-v2.2
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/.idea/aws.xml +17 -0
- package/.idea/codeStyles/Project.xml +19 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/paraswap-dex-lib.iml +9 -0
- package/.idea/vcs.xml +6 -0
- package/build/abi/swaap-v2/vault.json +918 -0
- package/build/config.js +4 -2
- package/build/config.js.map +1 -1
- package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
- package/build/dex/aave-v3/tokens/avalanche.json +74 -0
- package/build/dex/aave-v3/tokens/fantom.json +62 -0
- package/build/dex/aave-v3/tokens/optimism.json +50 -0
- package/build/dex/aave-v3/tokens/polygon.json +116 -0
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/pancakeswap-v3/types.d.ts +14 -0
- package/build/dex/pancakeswap-v3/types.js +3 -0
- package/build/dex/pancakeswap-v3/types.js.map +1 -0
- package/build/dex/swaap-v2/config.d.ts +4 -0
- package/build/dex/swaap-v2/config.js +19 -0
- package/build/dex/swaap-v2/config.js.map +1 -0
- package/build/dex/swaap-v2/constants.d.ts +13 -0
- package/build/dex/swaap-v2/constants.js +17 -0
- package/build/dex/swaap-v2/constants.js.map +1 -0
- package/build/dex/swaap-v2/rate-fetcher.d.ts +16 -0
- package/build/dex/swaap-v2/rate-fetcher.js +101 -0
- package/build/dex/swaap-v2/rate-fetcher.js.map +1 -0
- package/build/dex/swaap-v2/swaap-v2.d.ts +61 -0
- package/build/dex/swaap-v2/swaap-v2.js +550 -0
- package/build/dex/swaap-v2/swaap-v2.js.map +1 -0
- package/build/dex/swaap-v2/types.d.ts +76 -0
- package/build/dex/swaap-v2/types.js +7 -0
- package/build/dex/swaap-v2/types.js.map +1 -0
- package/build/dex/swaap-v2/utils.d.ts +7 -0
- package/build/dex/swaap-v2/utils.js +34 -0
- package/build/dex/swaap-v2/utils.js.map +1 -0
- package/build/dex/swaap-v2/validators.d.ts +6 -0
- package/build/dex/swaap-v2/validators.js +125 -0
- package/build/dex/swaap-v2/validators.js.map +1 -0
- package/build/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/abi/swaap-v2/vault.json +918 -0
- package/src/config.ts +5 -2
- package/src/dex/index.ts +2 -0
- package/src/dex/swaap-v2/config.ts +19 -0
- package/src/dex/swaap-v2/constants.ts +25 -0
- package/src/dex/swaap-v2/rate-fetcher.ts +165 -0
- package/src/dex/swaap-v2/swaap-v2-e2e.test.ts +199 -0
- package/src/dex/swaap-v2/swaap-v2-integration.test.ts +145 -0
- package/src/dex/swaap-v2/swaap-v2.ts +871 -0
- package/src/dex/swaap-v2/types.ts +88 -0
- package/src/dex/swaap-v2/utils.ts +44 -0
- package/src/dex/swaap-v2/validators.ts +130 -0
- package/src/types.ts +1 -0
- package/tests/constants-e2e.ts +1 -1
- package/tests/utils-e2e.ts +5 -0
- package/build/abi/DirectSwap.json +0 -1008
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateFetcher = void 0;
|
|
4
|
+
const fetcher_1 = require("../../lib/fetcher/fetcher");
|
|
5
|
+
const validators_1 = require("../../lib/validators");
|
|
6
|
+
const validators_2 = require("./validators");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
class RateFetcher {
|
|
10
|
+
constructor(dexHelper, dexKey, logger, config) {
|
|
11
|
+
this.dexHelper = dexHelper;
|
|
12
|
+
this.dexKey = dexKey;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.pricesCacheTTL = config.rateConfig.pricesCacheTTLSecs;
|
|
15
|
+
this.rateFetcher = new fetcher_1.Fetcher(dexHelper.httpRequest, {
|
|
16
|
+
info: {
|
|
17
|
+
requestOptions: config.rateConfig.pricesReqParams,
|
|
18
|
+
caster: (data) => {
|
|
19
|
+
return (0, validators_1.validateAndCast)(data, validators_2.priceLevelsResponseValidator);
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
handler: this.handleRatesResponse.bind(this),
|
|
23
|
+
}, config.rateConfig.pricesIntervalMs, logger);
|
|
24
|
+
}
|
|
25
|
+
start() {
|
|
26
|
+
this.rateFetcher.startPolling();
|
|
27
|
+
}
|
|
28
|
+
stop() {
|
|
29
|
+
this.rateFetcher.stopPolling();
|
|
30
|
+
}
|
|
31
|
+
handleRatesResponse(resp) {
|
|
32
|
+
if (!resp.success) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const levels = Object.keys(resp.levels)
|
|
36
|
+
.map(pairName => {
|
|
37
|
+
const pair = resp.levels[pairName];
|
|
38
|
+
if (!pair) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const levels = resp.levels[pairName];
|
|
42
|
+
if (!levels.asks || !levels.bids) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const pairSplit = pairName.split('/');
|
|
46
|
+
const baseAddress = pairSplit[0];
|
|
47
|
+
const quoteAddress = pairSplit[1];
|
|
48
|
+
pair.base = (0, utils_1.normalizeTokenAddress)(baseAddress);
|
|
49
|
+
pair.quote = (0, utils_1.normalizeTokenAddress)(quoteAddress);
|
|
50
|
+
return pair;
|
|
51
|
+
})
|
|
52
|
+
.filter((p) => p != null);
|
|
53
|
+
this.dexHelper.cache.setex(this.dexKey, this.dexHelper.config.data.network, `${(0, utils_1.getPriceLevelsCacheKey)(this.dexKey)}`, this.pricesCacheTTL, JSON.stringify(levels));
|
|
54
|
+
}
|
|
55
|
+
async getQuote(networkId, _srcToken, _destToken, srcAmount, side, userAddress, aggregatorRecipient, tolerance, requestParameters) {
|
|
56
|
+
const srcToken = this.dexHelper.config.wrapETH(_srcToken);
|
|
57
|
+
const destToken = this.dexHelper.config.wrapETH(_destToken);
|
|
58
|
+
if (BigInt(srcAmount) === 0n) {
|
|
59
|
+
throw new Error('geQuote failed with srcAmount == 0');
|
|
60
|
+
}
|
|
61
|
+
const _payload = {
|
|
62
|
+
network_id: networkId,
|
|
63
|
+
origin: userAddress,
|
|
64
|
+
sender: aggregatorRecipient,
|
|
65
|
+
recipient: aggregatorRecipient,
|
|
66
|
+
timestamp: Math.round(Date.now() / 1000),
|
|
67
|
+
order_type: side,
|
|
68
|
+
token_in: srcToken.address,
|
|
69
|
+
token_out: destToken.address,
|
|
70
|
+
amount: srcAmount,
|
|
71
|
+
tolerance: tolerance,
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
let payload = {
|
|
75
|
+
data: _payload,
|
|
76
|
+
...requestParameters,
|
|
77
|
+
timeout: constants_1.SWAAP_RFQ_QUOTE_TIMEOUT_MS,
|
|
78
|
+
};
|
|
79
|
+
this.logger.info('GetQuote Request:', JSON.stringify(payload).replace(/(?:\r\n|\r|\n)/g, ' '));
|
|
80
|
+
const { data } = await this.dexHelper.httpRequest.request(payload);
|
|
81
|
+
this.logger.info('GetQuote Response: ', JSON.stringify(data).replace(/(?:\r\n|\r|\n)/g, ' '));
|
|
82
|
+
const quoteResp = (0, validators_1.validateAndCast)(data, validators_2.getQuoteResponseValidator);
|
|
83
|
+
return {
|
|
84
|
+
id: quoteResp.id,
|
|
85
|
+
calldata: quoteResp.calldata,
|
|
86
|
+
router: quoteResp.router,
|
|
87
|
+
expiration: quoteResp.expiration,
|
|
88
|
+
amount: quoteResp.amount,
|
|
89
|
+
guaranteed_price: quoteResp.guaranteed_price,
|
|
90
|
+
success: quoteResp.success,
|
|
91
|
+
recipient: quoteResp.recipient,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
this.logger.error(e);
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.RateFetcher = RateFetcher;
|
|
101
|
+
//# sourceMappingURL=rate-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-fetcher.js","sourceRoot":"","sources":["../../../src/dex/swaap-v2/rate-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, ExchangeTxInfo, OptimalSwapExchange, PreprocessTransactionOptions } from '../../types';
|
|
2
|
+
import { SwapSide, Network } from '../../constants';
|
|
3
|
+
import { IDex } from '../idex';
|
|
4
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
5
|
+
import { SwaapV2Data, SwaapV2PriceLevel, SwaapV2PriceLevels, SwaapV2APIParameters } from './types';
|
|
6
|
+
import { SimpleExchange } from '../simple-exchange';
|
|
7
|
+
import BigNumber from 'bignumber.js';
|
|
8
|
+
import { Interface } from 'ethers/lib/utils';
|
|
9
|
+
import { Method } from '../../dex-helper/irequest-wrapper';
|
|
10
|
+
export declare class SwaapV2 extends SimpleExchange implements IDex<SwaapV2Data> {
|
|
11
|
+
readonly network: Network;
|
|
12
|
+
readonly dexKey: string;
|
|
13
|
+
readonly dexHelper: IDexHelper;
|
|
14
|
+
protected adapters: import("../../types").AdapterMappings;
|
|
15
|
+
protected routerInterface: Interface;
|
|
16
|
+
readonly isStatePollingDex = true;
|
|
17
|
+
readonly hasConstantPriceLargeAmounts = false;
|
|
18
|
+
readonly needWrapNative = false;
|
|
19
|
+
readonly isFeeOnTransferSupported = false;
|
|
20
|
+
private rateFetcher;
|
|
21
|
+
private tokensMap;
|
|
22
|
+
private swaapV2AuthToken;
|
|
23
|
+
static dexKeysWithNetwork: {
|
|
24
|
+
key: string;
|
|
25
|
+
networks: Network[];
|
|
26
|
+
}[];
|
|
27
|
+
logger: Logger;
|
|
28
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings, routerInterface?: Interface);
|
|
29
|
+
initializePricing(blockNumber: number): Promise<void>;
|
|
30
|
+
getAdapters(side: SwapSide): {
|
|
31
|
+
name: string;
|
|
32
|
+
index: number;
|
|
33
|
+
}[] | null;
|
|
34
|
+
getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
|
|
35
|
+
computePricesFromLevelsBids(amounts: BigNumber[], asksAndBids: SwaapV2PriceLevels, srcToken: Token, destToken: Token, side: SwapSide): bigint[];
|
|
36
|
+
inversePrice(priceLevel: SwaapV2PriceLevel): SwaapV2PriceLevel;
|
|
37
|
+
invertPrices(levels: SwaapV2PriceLevel[]): SwaapV2PriceLevel[];
|
|
38
|
+
computeLevelsQuote(amounts: BigNumber[], levels: SwaapV2PriceLevel[], srcToken: Token, destToken: Token, side: SwapSide): bigint[];
|
|
39
|
+
getCachedLevels(): Promise<Record<string, SwaapV2PriceLevels> | null>;
|
|
40
|
+
normalizeToken(token: Token): Token;
|
|
41
|
+
getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<SwaapV2Data>>;
|
|
42
|
+
getBaseToken(poolIdentifier: string): string;
|
|
43
|
+
getLevels(askAndBids: SwaapV2PriceLevels, side: SwapSide, poolIdentifier: string): SwaapV2PriceLevel[];
|
|
44
|
+
preProcessTransaction(optimalSwapExchange: OptimalSwapExchange<SwaapV2Data>, srcToken: Token, destToken: Token, side: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<SwaapV2Data>, ExchangeTxInfo]>;
|
|
45
|
+
restrict(ttl?: number): Promise<boolean>;
|
|
46
|
+
isRestricted(): Promise<boolean>;
|
|
47
|
+
isBlacklisted(txOrigin: Address): Promise<boolean>;
|
|
48
|
+
getBlackListKey(address: Address): string;
|
|
49
|
+
setBlacklist(txOrigin: Address, ttl?: number): Promise<boolean>;
|
|
50
|
+
getCalldataGasCost(poolPrices: PoolPrices<SwaapV2Data>): number | number[];
|
|
51
|
+
getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SwaapV2Data, side: SwapSide): AdapterExchangeParam;
|
|
52
|
+
getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: SwaapV2Data, side: SwapSide): Promise<SimpleExchangeParam>;
|
|
53
|
+
computeMaxLiquidity: (levels: SwaapV2PriceLevels, tokenAddress: string) => number;
|
|
54
|
+
getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
|
|
55
|
+
getTokenFromAddress(address: Address): Token;
|
|
56
|
+
releaseResources(): void;
|
|
57
|
+
getPriceLevelsReqParams(): SwaapV2APIParameters;
|
|
58
|
+
getQuoteReqParams(): SwaapV2APIParameters;
|
|
59
|
+
getTokensReqParams(): SwaapV2APIParameters;
|
|
60
|
+
getAPIReqParams(endpoint: string, method: Method): SwaapV2APIParameters;
|
|
61
|
+
}
|