@paraswap/dex-lib 2.12.12-rfqtests.0 → 2.12.12

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 (102) hide show
  1. package/build/abi/augustus.json +375 -0
  2. package/build/abi/woo-fi-v2/IntegrationHelper.abi.json +116 -0
  3. package/build/abi/woo-fi-v2/WooOracleV2.abi.json +358 -0
  4. package/build/abi/woo-fi-v2/WooPPV2.abi.json +580 -0
  5. package/build/config.js +3 -3
  6. package/build/dex/aave-v3/tokens/arbitrum.json +20 -20
  7. package/build/dex/aave-v3/tokens/avalanche.json +44 -20
  8. package/build/dex/aave-v3/tokens/fantom.json +30 -30
  9. package/build/dex/aave-v3/tokens/optimism.json +18 -18
  10. package/build/dex/aave-v3/tokens/polygon.json +60 -42
  11. package/build/dex/generic-rfq/validators.d.ts +1 -1
  12. package/build/dex/generic-rfq/validators.js +26 -36
  13. package/build/dex/generic-rfq/validators.js.map +1 -1
  14. package/build/dex/hashflow/rate-fetcher.d.ts +14 -0
  15. package/build/dex/hashflow/rate-fetcher.js +37 -0
  16. package/build/dex/hashflow/rate-fetcher.js.map +1 -0
  17. package/build/dex/hashflow/validators.d.ts +3 -0
  18. package/build/dex/hashflow/validators.js +12 -0
  19. package/build/dex/hashflow/validators.js.map +1 -0
  20. package/build/dex/{test-aave-v3 → test-dex}/config.d.ts +1 -1
  21. package/build/dex/{test-aave-v3 → test-dex}/config.js +3 -3
  22. package/build/dex/test-dex/config.js.map +1 -0
  23. package/build/dex/{test-aave-v3/test-aave-v3-pool.d.ts → test-dex/test-dex-pool.d.ts} +3 -3
  24. package/build/dex/{test-aave-v3/test-aave-v3-pool.js → test-dex/test-dex-pool.js} +7 -7
  25. package/build/dex/test-dex/test-dex-pool.js.map +1 -0
  26. package/build/dex/{test-aave-v3/test-aave-v3.d.ts → test-dex/test-dex.d.ts} +8 -8
  27. package/build/dex/{test-aave-v3/test-aave-v3.js → test-dex/test-dex.js} +7 -7
  28. package/build/dex/test-dex/test-dex.js.map +1 -0
  29. package/build/dex/{test-aave-v3 → test-dex}/types.d.ts +1 -1
  30. package/build/dex/{test-aave-v3 → test-dex}/types.js.map +1 -1
  31. package/build/dex/uniswap-v3/config.js +13 -0
  32. package/build/dex/uniswap-v3/config.js.map +1 -1
  33. package/build/dex/woo-fi-v2/config.d.ts +4 -0
  34. package/build/dex/woo-fi-v2/config.js +87 -0
  35. package/build/dex/woo-fi-v2/config.js.map +1 -0
  36. package/build/dex/woo-fi-v2/constants.d.ts +5 -0
  37. package/build/dex/woo-fi-v2/constants.js +15 -0
  38. package/build/dex/woo-fi-v2/constants.js.map +1 -0
  39. package/build/dex/woo-fi-v2/decoders.d.ts +6 -0
  40. package/build/dex/woo-fi-v2/decoders.js +29 -0
  41. package/build/dex/woo-fi-v2/decoders.js.map +1 -0
  42. package/build/dex/woo-fi-v2/types.d.ts +41 -0
  43. package/build/dex/woo-fi-v2/types.js +3 -0
  44. package/build/dex/woo-fi-v2/types.js.map +1 -0
  45. package/build/dex/woo-fi-v2/utils.d.ts +2 -0
  46. package/build/dex/woo-fi-v2/utils.js +24 -0
  47. package/build/dex/woo-fi-v2/utils.js.map +1 -0
  48. package/build/dex/woo-fi-v2/woo-fi-math.d.ts +16 -0
  49. package/build/dex/woo-fi-v2/woo-fi-math.js +137 -0
  50. package/build/dex/woo-fi-v2/woo-fi-math.js.map +1 -0
  51. package/build/dex/woo-fi-v2/woo-fi-v2-math.d.ts +16 -0
  52. package/build/dex/woo-fi-v2/woo-fi-v2-math.js +137 -0
  53. package/build/dex/woo-fi-v2/woo-fi-v2-math.js.map +1 -0
  54. package/build/dex/woo-fi-v2/woo-fi-v2-pool.d.ts +12 -0
  55. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js +79 -0
  56. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js.map +1 -0
  57. package/build/dex/woo-fi-v2/woo-fi-v2.d.ts +52 -0
  58. package/build/dex/woo-fi-v2/woo-fi-v2.js +310 -0
  59. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -0
  60. package/build/lib/log-messages-suppressor.d.ts +30 -0
  61. package/build/lib/log-messages-suppressor.js +107 -0
  62. package/build/lib/log-messages-suppressor.js.map +1 -0
  63. package/build/lib/stateful-rpc-poller/state-polling-manager.d.ts +23 -0
  64. package/build/lib/stateful-rpc-poller/state-polling-manager.js +173 -0
  65. package/build/lib/stateful-rpc-poller/state-polling-manager.js.map +1 -0
  66. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.d.ts +72 -0
  67. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.js +369 -0
  68. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.js.map +1 -0
  69. package/build/lib/stateful-rpc-poller/types.d.ts +35 -0
  70. package/build/lib/stateful-rpc-poller/types.js +10 -0
  71. package/build/lib/stateful-rpc-poller/types.js.map +1 -0
  72. package/build/lib/stateful-rpc-poller/utils.d.ts +4 -0
  73. package/build/lib/stateful-rpc-poller/utils.js +17 -0
  74. package/build/lib/stateful-rpc-poller/utils.js.map +1 -0
  75. package/build/lib/validators.d.ts +7 -0
  76. package/build/lib/validators.js +27 -0
  77. package/build/lib/validators.js.map +1 -0
  78. package/package.json +1 -1
  79. package/src/config.ts +3 -3
  80. package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +71 -85
  81. package/src/dex/generic-rfq/validators.test.ts +32 -6
  82. package/src/dex/generic-rfq/validators.ts +32 -57
  83. package/src/dex/uniswap-v3/config.ts +13 -0
  84. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +76 -0
  85. package/tests/constants-e2e.ts +0 -2
  86. package/tests/utils-e2e.ts +48 -59
  87. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  88. package/.idea/misc.xml +0 -6
  89. package/.idea/modules.xml +0 -8
  90. package/.idea/vcs.xml +0 -6
  91. package/.vscode/launch.json +0 -21
  92. package/build/dex/aave-v3/tokens/mainnet.json +0 -44
  93. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +0 -79
  94. package/build/dex/balancer-v2/VirtualBoostedPool.js +0 -382
  95. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +0 -1
  96. package/build/dex/test-aave-v3/config.js.map +0 -1
  97. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +0 -1
  98. package/build/dex/test-aave-v3/test-aave-v3.js.map +0 -1
  99. package/src/dex/generic-rfq/generic-rfq-e2e-arbitrum.test.ts +0 -360
  100. package/src/dex/generic-rfq/generic-rfq-e2e-bsc.test.ts +0 -346
  101. package/src/dex/generic-rfq/generic-rfq-e2e-polygon.test.ts +0 -360
  102. /package/build/dex/{test-aave-v3 → test-dex}/types.js +0 -0
@@ -0,0 +1,16 @@
1
+ import { PoolState, TokenState } from './types';
2
+ import { Address, Logger } from '../../types';
3
+ export declare class WooFiV2Math {
4
+ private readonly logger;
5
+ private readonly _quoteToken;
6
+ state: PoolState;
7
+ constructor(logger: Logger, _quoteToken: Address);
8
+ query(fromToken: Address, toToken: Address, fromAmounts: bigint[]): bigint[] | null;
9
+ _querySellBase(baseToken: Address, baseAmounts: bigint[]): bigint[] | null;
10
+ _querySellQuote(baseToken: Address, quoteAmounts: bigint[]): bigint[] | null;
11
+ _queryBaseToBase(baseToken1: Address, baseToken2: Address, base1Amounts: bigint[]): bigint[] | null;
12
+ protected _takeFeeAndCheckReserve(amounts: bigint[], feeRate: bigint): bigint[];
13
+ protected _takeFee(amounts: bigint[], feeRate: bigint): bigint[];
14
+ protected _calcQuoteAmountSellBase(baseToken: Address, baseAmounts: bigint[], state: TokenState): bigint[];
15
+ protected _calcBaseAmountSellQuote(baseToken: string, quoteAmounts: bigint[], state: TokenState): bigint[];
16
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WooFiV2Math = void 0;
4
+ const bigint_constants_1 = require("../../bigint-constants");
5
+ const constants_1 = require("./constants");
6
+ function handleMathError(e, logger) {
7
+ if (e instanceof Error && e.message.startsWith('WooGuardian:')) {
8
+ logger.warn('WooFi Guardian check Error:', e);
9
+ return;
10
+ }
11
+ logger.error('Unexpected error in WooFi math:', e);
12
+ }
13
+ function max(a, b) {
14
+ return a > b ? a : b;
15
+ }
16
+ class WooFiV2Math {
17
+ constructor(logger, _quoteToken) {
18
+ this.logger = logger;
19
+ this._quoteToken = _quoteToken;
20
+ this.state = constants_1.NULL_STATE;
21
+ }
22
+ query(fromToken, toToken, fromAmounts) {
23
+ try {
24
+ if (fromToken === this._quoteToken) {
25
+ return this._querySellQuote(toToken, fromAmounts);
26
+ }
27
+ else if (toToken === this._quoteToken) {
28
+ return this._querySellBase(fromToken, fromAmounts);
29
+ }
30
+ else {
31
+ return this._queryBaseToBase(fromToken, toToken, fromAmounts);
32
+ }
33
+ }
34
+ catch (e) {
35
+ handleMathError(e, this.logger);
36
+ return null;
37
+ }
38
+ }
39
+ _querySellBase(baseToken, baseAmounts) {
40
+ try {
41
+ const _state = this.state.tokenStates[baseToken];
42
+ let quoteAmounts = this._calcQuoteAmountSellBase(baseToken, baseAmounts, _state);
43
+ quoteAmounts = quoteAmounts.map(amount => {
44
+ return amount <= this.state.tokenInfos[this._quoteToken].reserve
45
+ ? amount
46
+ : 0n;
47
+ });
48
+ const feeRate = this.state.tokenInfos[baseToken].feeRate;
49
+ return this._takeFee(quoteAmounts, feeRate);
50
+ }
51
+ catch (e) {
52
+ handleMathError(e, this.logger);
53
+ return null;
54
+ }
55
+ }
56
+ _querySellQuote(baseToken, quoteAmounts) {
57
+ try {
58
+ const feeRate = this.state.tokenInfos[baseToken].feeRate;
59
+ quoteAmounts = this._takeFee(quoteAmounts, feeRate);
60
+ const _state = this.state.tokenStates[baseToken];
61
+ let toAmounts = this._calcBaseAmountSellQuote(baseToken, quoteAmounts, _state);
62
+ const baseReserve = this.state.tokenInfos[baseToken].reserve;
63
+ return toAmounts.map(amount => {
64
+ return amount <= baseReserve ? amount : 0n;
65
+ });
66
+ }
67
+ catch (e) {
68
+ handleMathError(e, this.logger);
69
+ return null;
70
+ }
71
+ }
72
+ _queryBaseToBase(baseToken1, baseToken2, base1Amounts) {
73
+ try {
74
+ let state1 = this.state.tokenStates[baseToken1];
75
+ let state2 = this.state.tokenStates[baseToken2];
76
+ const feeRate1 = this.state.tokenInfos[baseToken1].feeRate;
77
+ const feeRate2 = this.state.tokenInfos[baseToken2].feeRate;
78
+ const spread = max(state1.spread, state2.spread) / 2n;
79
+ const feeRate = max(feeRate1, feeRate2);
80
+ state1.spread = spread;
81
+ state2.spread = spread;
82
+ let quoteAmounts = this._calcQuoteAmountSellBase(baseToken1, base1Amounts, state1);
83
+ quoteAmounts = this._takeFeeAndCheckReserve(quoteAmounts, feeRate);
84
+ let toAmounts = this._calcBaseAmountSellQuote(baseToken2, quoteAmounts, state2);
85
+ return toAmounts.map(toAmount => {
86
+ return toAmount <= this.state.tokenInfos[baseToken2].reserve
87
+ ? toAmount
88
+ : 0n;
89
+ });
90
+ }
91
+ catch (e) {
92
+ handleMathError(e, this.logger);
93
+ return null;
94
+ }
95
+ }
96
+ _takeFeeAndCheckReserve(amounts, feeRate) {
97
+ return amounts.map(amount => {
98
+ if (amount === 0n)
99
+ return 0n;
100
+ const lpFee = (amount * feeRate) / bigint_constants_1.BI_POWS[5];
101
+ const reserve = this.state.tokenInfos[this._quoteToken].reserve;
102
+ return lpFee > reserve ? 0n : amount - lpFee;
103
+ });
104
+ }
105
+ _takeFee(amounts, feeRate) {
106
+ return amounts.map(amount => {
107
+ const lpFee = (amount * feeRate) / bigint_constants_1.BI_POWS[5];
108
+ return amount === 0n ? 0n : amount - lpFee;
109
+ });
110
+ }
111
+ _calcQuoteAmountSellBase(baseToken, baseAmounts, state) {
112
+ let { priceDec, quoteDec, baseDec } = this.state.decimals[baseToken];
113
+ return baseAmounts.map(baseAmount => {
114
+ if (baseAmount === 0n)
115
+ return 0n;
116
+ const coef = bigint_constants_1.BI_POWS[18] -
117
+ (state.coeff * baseAmount * state.price) / baseDec / priceDec -
118
+ state.spread;
119
+ return ((((baseAmount * quoteDec * state.price) / priceDec) * coef) /
120
+ bigint_constants_1.BI_POWS[18] /
121
+ baseDec);
122
+ });
123
+ }
124
+ _calcBaseAmountSellQuote(baseToken, quoteAmounts, state) {
125
+ let { priceDec, quoteDec, baseDec } = this.state.decimals[baseToken];
126
+ return quoteAmounts.map(quoteAmount => {
127
+ if (quoteAmount === 0n)
128
+ return 0n;
129
+ const coef = bigint_constants_1.BI_POWS[18] - (quoteAmount * state.coeff) / quoteDec - state.spread;
130
+ return ((((quoteAmount * baseDec * priceDec) / state.price) * coef) /
131
+ bigint_constants_1.BI_POWS[18] /
132
+ quoteDec);
133
+ });
134
+ }
135
+ }
136
+ exports.WooFiV2Math = WooFiV2Math;
137
+ //# sourceMappingURL=woo-fi-v2-math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woo-fi-v2-math.js","sourceRoot":"","sources":["../../../src/dex/woo-fi-v2/woo-fi-v2-math.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { IDexHelper } from '../../dex-helper/idex-helper';
2
+ import { DexParams, MulticallResultOutputs, PoolState } from './types';
3
+ import { StatefulRpcPoller } from '../../lib/stateful-rpc-poller/stateful-rpc-poller';
4
+ import { MultiCallParams } from '../../lib/multi-wrapper';
5
+ import { Token } from '../../types';
6
+ export declare class WooFiV2PollingPool extends StatefulRpcPoller<PoolState, MulticallResultOutputs> {
7
+ protected config: DexParams;
8
+ protected tokens: Token[];
9
+ constructor(dexKey: string, poolIdentifier: string, dexHelper: IDexHelper, config: DexParams, tokens: Token[]);
10
+ protected _getFetchStateMultiCalls(): MultiCallParams<MulticallResultOutputs>[];
11
+ protected _parseStateFromMultiResults(multiOutputs: MulticallResultOutputs[]): PoolState;
12
+ }
@@ -0,0 +1,79 @@
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.WooFiV2PollingPool = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const stateful_rpc_poller_1 = require("../../lib/stateful-rpc-poller/stateful-rpc-poller");
9
+ const utils_1 = require("../../lib/stateful-rpc-poller/utils");
10
+ const state_polling_manager_1 = require("../../lib/stateful-rpc-poller/state-polling-manager");
11
+ const decoders_1 = require("../../lib/decoders");
12
+ const utils_2 = require("./utils");
13
+ const decoders_2 = require("./decoders");
14
+ class WooFiV2PollingPool extends stateful_rpc_poller_1.StatefulRpcPoller {
15
+ constructor(dexKey, poolIdentifier, dexHelper, config,
16
+ // It already includes quoteToken
17
+ tokens) {
18
+ const callbacks = (0, utils_1.pollingManagerCbExtractor)(state_polling_manager_1.StatePollingManager.getInstance(dexHelper));
19
+ super(dexKey, poolIdentifier, dexHelper, 0, 0, false, callbacks);
20
+ this.config = config;
21
+ this.tokens = tokens;
22
+ }
23
+ _getFetchStateMultiCalls() {
24
+ return [
25
+ {
26
+ target: this.config.wooPPV2Address,
27
+ callData: utils_2.ifaces.PPV2.encodeFunctionData('paused', []),
28
+ decodeFunction: decoders_1.booleanDecode,
29
+ },
30
+ {
31
+ target: this.config.wooOracleV2Address,
32
+ callData: utils_2.ifaces.oracleV2.encodeFunctionData('timestamp', []),
33
+ decodeFunction: decoders_1.uint256ToBigInt,
34
+ },
35
+ ].concat(this.tokens
36
+ .map(t => [
37
+ {
38
+ target: this.config.wooPPV2Address,
39
+ callData: utils_2.ifaces.PPV2.encodeFunctionData('tokenInfos', [t.address]),
40
+ decodeFunction: decoders_2.tokenInfoDecoder,
41
+ },
42
+ {
43
+ target: this.config.wooPPV2Address,
44
+ callData: utils_2.ifaces.PPV2.encodeFunctionData('decimalInfo', [
45
+ t.address,
46
+ ]),
47
+ decodeFunction: decoders_2.decimalInfoDecoder,
48
+ },
49
+ {
50
+ target: this.config.wooOracleV2Address,
51
+ callData: utils_2.ifaces.oracleV2.encodeFunctionData('state', [t.address]),
52
+ decodeFunction: decoders_2.stateDecoder,
53
+ },
54
+ ])
55
+ .flat());
56
+ }
57
+ _parseStateFromMultiResults(multiOutputs) {
58
+ const [isPaused, oracleTimestamp, ...remained] = multiOutputs;
59
+ const tokenInfos = {};
60
+ const decimals = {};
61
+ const tokenStates = {};
62
+ lodash_1.default.chunk(remained, 3).forEach((chunk, i) => {
63
+ const [tokenInfo, decimalInfo, tokenState] = chunk;
64
+ const token = this.tokens[i];
65
+ tokenInfos[token.address] = tokenInfo;
66
+ decimals[token.address] = decimalInfo;
67
+ tokenStates[token.address] = tokenState;
68
+ });
69
+ return {
70
+ tokenInfos,
71
+ tokenStates,
72
+ decimals,
73
+ oracleTimestamp,
74
+ isPaused,
75
+ };
76
+ }
77
+ }
78
+ exports.WooFiV2PollingPool = WooFiV2PollingPool;
79
+ //# sourceMappingURL=woo-fi-v2-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woo-fi-v2-pool.js","sourceRoot":"","sources":["../../../src/dex/woo-fi-v2/woo-fi-v2-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger } from '../../types';
2
+ import { SwapSide, Network } from '../../constants';
3
+ import { IDex } from '../../dex/idex';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { WooFiV2Data, DexParams } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { WooFiV2PollingPool } from './woo-fi-v2-pool';
8
+ import { WooFiV2Math } from './woo-fi-v2-math';
9
+ import { StatePollingManager } from '../../lib/stateful-rpc-poller/state-polling-manager';
10
+ export declare class WooFiV2 extends SimpleExchange implements IDex<WooFiV2Data> {
11
+ protected network: Network;
12
+ readonly dexHelper: IDexHelper;
13
+ protected adapters: import("../../types").AdapterMappings;
14
+ readonly config: DexParams;
15
+ readonly math: WooFiV2Math;
16
+ protected pollingManager: StatePollingManager;
17
+ protected pollingPool?: WooFiV2PollingPool;
18
+ readonly hasConstantPriceLargeAmounts = false;
19
+ readonly needWrapNative = true;
20
+ readonly isFeeOnTransferSupported = false;
21
+ readonly quoteTokenAddress: Address;
22
+ protected _baseTokens?: Token[];
23
+ protected rebateTo?: Address;
24
+ tokenByAddress?: Record<Address, Token>;
25
+ vaultUSDBalance: number;
26
+ static dexKeysWithNetwork: {
27
+ key: string;
28
+ networks: Network[];
29
+ }[];
30
+ logger: Logger;
31
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings, config?: DexParams);
32
+ private _toLowerForAllConfigAddresses;
33
+ get baseTokens(): Token[];
34
+ initializePricing(blockNumber: number): Promise<void>;
35
+ getAdapters(side: SwapSide): {
36
+ name: string;
37
+ index: number;
38
+ }[] | null;
39
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
40
+ getIdentifier(): string;
41
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<WooFiV2Data>>;
42
+ getCalldataGasCost(poolPrices: PoolPrices<WooFiV2Data>): number | number[];
43
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: WooFiV2Data, side: SwapSide): AdapterExchangeParam;
44
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: WooFiV2Data, side: SwapSide): Promise<SimpleExchangeParam>;
45
+ updatePoolState(): Promise<void>;
46
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
47
+ private _initializeTokenByAddress;
48
+ _fetchBaseTokensAndFeeWallet(): Promise<Address[]>;
49
+ _fetchDecimals(baseTokenAddresses: Address[]): Promise<number[]>;
50
+ initializeTokensAndAddresses(): Promise<void>;
51
+ private _initializePollingPool;
52
+ }
@@ -0,0 +1,310 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.WooFiV2 = void 0;
27
+ const constants_1 = require("../../constants");
28
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
29
+ const utils_1 = require("../../utils");
30
+ const decoders_1 = require("../../lib/decoders");
31
+ const simple_exchange_1 = require("../simple-exchange");
32
+ const config_1 = require("./config");
33
+ const woo_fi_v2_pool_1 = require("./woo-fi-v2-pool");
34
+ const woo_fi_v2_math_1 = require("./woo-fi-v2-math");
35
+ const constants_2 = require("./constants");
36
+ const ts_essentials_1 = require("ts-essentials");
37
+ const ethers_1 = require("ethers");
38
+ const decoders_2 = require("../../lib/decoders");
39
+ const utils_2 = require("./utils");
40
+ const state_polling_manager_1 = require("../../lib/stateful-rpc-poller/state-polling-manager");
41
+ class WooFiV2 extends simple_exchange_1.SimpleExchange {
42
+ constructor(network, dexKey, dexHelper, adapters = config_1.Adapters[network] || {}, config = config_1.WooFiV2Config[dexKey][network]) {
43
+ super(dexHelper, dexKey);
44
+ this.network = network;
45
+ this.dexHelper = dexHelper;
46
+ this.adapters = adapters;
47
+ this.config = config;
48
+ this.hasConstantPriceLargeAmounts = false;
49
+ this.needWrapNative = true;
50
+ this.isFeeOnTransferSupported = false;
51
+ this.vaultUSDBalance = 0;
52
+ const loggerName = `${dexKey}-${network}`;
53
+ this.logger = dexHelper.getLogger(loggerName);
54
+ // Normalise once all config addresses and use across all scenarios
55
+ this.config = this._toLowerForAllConfigAddresses();
56
+ this.quoteTokenAddress = this.config.quoteToken.address;
57
+ // Do not do it singleton, because different networks will have different
58
+ // states at the same time
59
+ this.math = new woo_fi_v2_math_1.WooFiV2Math(dexHelper.getLogger(`${loggerName}_math`), this.quoteTokenAddress);
60
+ this.pollingManager = state_polling_manager_1.StatePollingManager.getInstance(dexHelper);
61
+ }
62
+ _toLowerForAllConfigAddresses() {
63
+ // If new config property will be added, the TS will throw compile error
64
+ const newConfig = {
65
+ wooPPV2Address: this.config.wooPPV2Address.toLowerCase(),
66
+ wooOracleV2Address: this.config.wooOracleV2Address.toLowerCase(),
67
+ integrationHelperAddress: this.config.integrationHelperAddress.toLowerCase(),
68
+ quoteToken: {
69
+ ...this.config.quoteToken,
70
+ address: this.config.quoteToken.address.toLowerCase(),
71
+ },
72
+ };
73
+ return newConfig;
74
+ }
75
+ get baseTokens() {
76
+ if (!this._baseTokens) {
77
+ throw new Error(`Base tokens are not set for ${this.dexKey}-${this.network}. Not properly initialized`);
78
+ }
79
+ return this._baseTokens;
80
+ }
81
+ async initializePricing(blockNumber) {
82
+ await this.initializeTokensAndAddresses();
83
+ this._initializePollingPool();
84
+ }
85
+ getAdapters(side) {
86
+ return this.adapters[side] ? this.adapters[side] : null;
87
+ }
88
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
89
+ if (side === constants_1.SwapSide.BUY)
90
+ return [];
91
+ if (this.tokenByAddress === undefined) {
92
+ this.logger.error(`tokenByAddress is undefined in getPoolIdentifiers`);
93
+ return [];
94
+ }
95
+ const _srcToken = this.dexHelper.config.wrapETH(srcToken);
96
+ const _destToken = this.dexHelper.config.wrapETH(destToken);
97
+ const _srcAddress = _srcToken.address.toLowerCase();
98
+ const _destAddress = _destToken.address.toLowerCase();
99
+ if (_srcAddress === _destAddress)
100
+ return [];
101
+ if (!this.tokenByAddress[_srcAddress] ||
102
+ !this.tokenByAddress[_destAddress]) {
103
+ return [];
104
+ }
105
+ return [this.getIdentifier()];
106
+ }
107
+ getIdentifier() {
108
+ return `${this.dexKey}_wooppv2`;
109
+ }
110
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
111
+ if (side === constants_1.SwapSide.BUY)
112
+ return null;
113
+ try {
114
+ if (this.tokenByAddress === undefined) {
115
+ this.logger.error(`tokenByAddress is undefined in getPricesVolume`);
116
+ return null;
117
+ }
118
+ const _srcToken = this.dexHelper.config.wrapETH(srcToken);
119
+ const _destToken = this.dexHelper.config.wrapETH(destToken);
120
+ const _srcAddress = _srcToken.address.toLowerCase();
121
+ const _destAddress = _destToken.address.toLowerCase();
122
+ if (_srcAddress === _destAddress)
123
+ return null;
124
+ if (!this.tokenByAddress[_srcAddress] ||
125
+ !this.tokenByAddress[_destAddress])
126
+ return null;
127
+ const expectedIdentifier = this.getIdentifier();
128
+ if (limitPools !== undefined &&
129
+ !limitPools.some(p => p === expectedIdentifier))
130
+ return null;
131
+ const unitVolume = (0, utils_1.getBigIntPow)(_srcToken.decimals);
132
+ const _amounts = [unitVolume, ...amounts.slice(1)];
133
+ (0, ts_essentials_1.assert)(this.pollingPool, 'pollingPool is not initialized in getPricesVolume');
134
+ const state = await this.pollingPool.getState(blockNumber);
135
+ if (state === null) {
136
+ this.logger.error(`State is null in getPricesVolume`);
137
+ return null;
138
+ }
139
+ if (state.value.isPaused) {
140
+ this.logger.warn(`${this.dexKey} is paused on ${this.network} in getPricesVolume`);
141
+ return null;
142
+ }
143
+ this.math.state = state.value;
144
+ const _prices = this.math.query(_srcAddress, _destAddress, _amounts);
145
+ if (!_prices)
146
+ return null;
147
+ const unit = _prices[0];
148
+ return [
149
+ {
150
+ unit,
151
+ prices: [0n, ..._prices.slice(1)],
152
+ data: {},
153
+ poolIdentifier: expectedIdentifier,
154
+ exchange: this.dexKey,
155
+ gasCost: constants_2.WOO_FI_V2_GAS_COST,
156
+ poolAddresses: [this.config.wooPPV2Address],
157
+ },
158
+ ];
159
+ }
160
+ catch (e) {
161
+ this.logger.error(`Error_getPricesVolume ${srcToken.symbol || srcToken.address}, ${destToken.symbol || destToken.address}, ${side}:`, e);
162
+ return null;
163
+ }
164
+ }
165
+ getCalldataGasCost(poolPrices) {
166
+ return CALLDATA_GAS_COST.DEX_OVERHEAD + CALLDATA_GAS_COST.ADDRESS;
167
+ }
168
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
169
+ if (side === constants_1.SwapSide.BUY)
170
+ throw new Error(`Buy not supported`);
171
+ let rebateTo = this.rebateTo;
172
+ if (rebateTo === undefined) {
173
+ this.logger.error(`rebateTo is undefined in getAdapterParam`);
174
+ rebateTo = constants_1.NULL_ADDRESS;
175
+ }
176
+ const payload = this.abiCoder.encodeParameter('address', rebateTo);
177
+ return {
178
+ targetExchange: this.config.wooPPV2Address,
179
+ payload,
180
+ networkFee: '0',
181
+ };
182
+ }
183
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
184
+ if (side === constants_1.SwapSide.BUY)
185
+ throw new Error(`Buy not supported`);
186
+ const _srcToken = srcToken.toLowerCase();
187
+ const _destToken = destToken.toLowerCase();
188
+ let rebateTo = this.rebateTo;
189
+ if (rebateTo === undefined) {
190
+ this.logger.error(`rebateTo is undefined in getAdapterParam`);
191
+ rebateTo = constants_1.NULL_ADDRESS;
192
+ }
193
+ const swapData = utils_2.ifaces.PPV2.encodeFunctionData('swap', [
194
+ _srcToken,
195
+ _destToken,
196
+ srcAmount,
197
+ constants_2.MIN_CONVERSION_RATE,
198
+ this.augustusAddress,
199
+ rebateTo,
200
+ ]);
201
+ const transferParams = this.erc20Interface.encodeFunctionData('transfer', [
202
+ this.config.wooPPV2Address,
203
+ srcAmount,
204
+ ]);
205
+ return {
206
+ callees: [srcToken, this.config.wooPPV2Address],
207
+ calldata: [transferParams, swapData],
208
+ values: ['0', '0'],
209
+ networkFee: '0',
210
+ };
211
+ }
212
+ async updatePoolState() {
213
+ await this.initializeTokensAndAddresses();
214
+ this._initializePollingPool();
215
+ if (this.tokenByAddress === undefined) {
216
+ this.logger.error(`tokenByAddress is undefined in updatePoolState`);
217
+ return;
218
+ }
219
+ (0, ts_essentials_1.assert)(this.pollingPool, 'pollingPool is not initialized in updatePoolState');
220
+ const state = await this.pollingPool.getState();
221
+ if (!state) {
222
+ this.logger.error(`Failed to updatePoolState. State is null. VaultUSDBalance: ${this.vaultUSDBalance} was not updated`);
223
+ return;
224
+ }
225
+ const tokenBalancesUSD = await Promise.all(Object.values(this.tokenByAddress).map(t => this.dexHelper.getTokenUSDPrice(t, state.value.tokenInfos[t.address].reserve)));
226
+ this.vaultUSDBalance = tokenBalancesUSD.reduce((sum, curr) => sum + curr);
227
+ }
228
+ async getTopPoolsForToken(tokenAddress, limit) {
229
+ const wrappedTokenAddress = this.dexHelper.config
230
+ .wrapETH({ address: tokenAddress, decimals: 0 })
231
+ .address.toLowerCase();
232
+ if (this.tokenByAddress === undefined) {
233
+ this.logger.error(`tokenByAddress is undefined in getTopPoolsForToken`);
234
+ return [];
235
+ }
236
+ if (!this.tokenByAddress[wrappedTokenAddress])
237
+ return [];
238
+ (0, ts_essentials_1.assert)(this.pollingPool, 'pollingPool is not initialized in getTopPoolsForToken');
239
+ const latestState = await this.pollingPool.getState();
240
+ if (!latestState)
241
+ return [];
242
+ if (latestState.value.isPaused) {
243
+ this.logger.warn(`Paused on ${this.network} in getTopPoolsForToken`);
244
+ return [];
245
+ }
246
+ const connectorTokens = wrappedTokenAddress === this.quoteTokenAddress
247
+ ? this.baseTokens
248
+ : [this.tokenByAddress[this.quoteTokenAddress]];
249
+ return [
250
+ {
251
+ exchange: this.dexKey,
252
+ address: this.config.wooPPV2Address,
253
+ connectorTokens,
254
+ liquidityUSD: this.vaultUSDBalance,
255
+ },
256
+ ];
257
+ }
258
+ _initializeTokenByAddress(baseTokens) {
259
+ this.tokenByAddress = baseTokens.reduce((acc, cur) => {
260
+ acc[cur.address] = cur;
261
+ return acc;
262
+ }, { [this.quoteTokenAddress]: this.config.quoteToken });
263
+ }
264
+ async _fetchBaseTokensAndFeeWallet() {
265
+ return (await this.dexHelper.multiWrapper.aggregate([
266
+ {
267
+ target: this.augustusAddress,
268
+ callData: this.augustusInterface.encodeFunctionData('getFeeWallet', []),
269
+ decodeFunction: decoders_2.addressDecode,
270
+ },
271
+ {
272
+ target: this.config.integrationHelperAddress,
273
+ callData: utils_2.ifaces.integrationHelper.encodeFunctionData('allBaseTokens'),
274
+ decodeFunction: decoders_1.addressArrayDecode,
275
+ },
276
+ ])).flat();
277
+ }
278
+ async _fetchDecimals(baseTokenAddresses) {
279
+ return this.dexHelper.multiWrapper.aggregate(baseTokenAddresses.map(address => {
280
+ return {
281
+ target: address,
282
+ callData: this.erc20Interface.encodeFunctionData('decimals'),
283
+ decodeFunction: decoders_1.uint8ToNumber,
284
+ };
285
+ }));
286
+ }
287
+ async initializeTokensAndAddresses() {
288
+ const [rebateTo, ...baseTokenAddresses] = await this._fetchBaseTokensAndFeeWallet();
289
+ (0, ts_essentials_1.assert)(ethers_1.ethers.utils.isAddress(rebateTo), 'Invalid rebateTo address');
290
+ this.rebateTo = rebateTo;
291
+ const decimals = await this._fetchDecimals(baseTokenAddresses);
292
+ (0, ts_essentials_1.assert)(decimals.length === baseTokenAddresses.length, 'Decimals length mismatch');
293
+ this._baseTokens = baseTokenAddresses.reduce((acc, curr, i) => {
294
+ acc.push({
295
+ address: curr,
296
+ decimals: decimals[i],
297
+ });
298
+ return acc;
299
+ }, []);
300
+ this._initializeTokenByAddress(this.baseTokens);
301
+ }
302
+ _initializePollingPool() {
303
+ (0, ts_essentials_1.assert)(this.tokenByAddress, 'tokenByAddress is not properly');
304
+ this.pollingPool = new woo_fi_v2_pool_1.WooFiV2PollingPool(this.dexKey, this.getIdentifier(), this.dexHelper, this.config, Object.values(this.tokenByAddress));
305
+ this.pollingManager.initializeAllPendingPools();
306
+ }
307
+ }
308
+ exports.WooFiV2 = WooFiV2;
309
+ WooFiV2.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.WooFiV2Config);
310
+ //# sourceMappingURL=woo-fi-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woo-fi-v2.js","sourceRoot":"","sources":["../../../src/dex/woo-fi-v2/woo-fi-v2.ts"],"names":[],"mappings":"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"}