@paraswap/dex-lib 2.16.4 → 2.16.5

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.
@@ -0,0 +1,48 @@
1
+ import { Address, Token } from '../../types';
2
+ export declare type TokenInfo = {
3
+ reserve: bigint;
4
+ R: bigint;
5
+ threshold: bigint;
6
+ target: bigint;
7
+ lastResetTimestamp: bigint;
8
+ };
9
+ export declare type TokenState = {
10
+ priceNow: bigint;
11
+ spreadNow: bigint;
12
+ coeffNow: bigint;
13
+ };
14
+ export declare type RefInfo = {
15
+ chainlinkRefOracle: Address;
16
+ refPriceFixCoeff: bigint;
17
+ minInputAmount: bigint;
18
+ maxInputAmount: bigint;
19
+ bound: bigint;
20
+ };
21
+ export declare type LatestRoundData = {
22
+ answer: bigint;
23
+ };
24
+ export declare type PoolState = {
25
+ feeRates: Record<Address, bigint>;
26
+ tokenInfos: Record<Address, TokenInfo>;
27
+ tokenStates: Record<Address, TokenState>;
28
+ oracleTimestamp: bigint;
29
+ isPaused: boolean;
30
+ guardian: {
31
+ globalBound: bigint;
32
+ refInfos: Record<Address, RefInfo>;
33
+ };
34
+ chainlink: {
35
+ latestRoundDatas: Record<Address, LatestRoundData>;
36
+ };
37
+ wooPPBalances: Record<Address, bigint>;
38
+ };
39
+ export declare type WooFiData = {};
40
+ export declare type DexParams = {
41
+ wooPPAddress: Address;
42
+ wooOracleAddress: Address;
43
+ wooFeeManagerAddress: Address;
44
+ wooGuardianAddress: Address;
45
+ quoteToken: Token;
46
+ baseTokens: Record<string, Token>;
47
+ rebateTo: Address;
48
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/woo-fi/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ declare class WooFiDecimalMath {
2
+ readonly ONE: bigint;
3
+ readonly TWO: bigint;
4
+ readonly ONE2: bigint;
5
+ mulFloor(target: bigint, d: bigint): bigint;
6
+ mulCeil(target: bigint, d: bigint): bigint;
7
+ divFloor(target: bigint, d: bigint): bigint;
8
+ divCeil(target: bigint, d: bigint): bigint;
9
+ reciprocalFloor(target: bigint): bigint;
10
+ reciprocalCeil(target: bigint): bigint;
11
+ private _divCeil;
12
+ }
13
+ export declare const wooFiDecimalMath: WooFiDecimalMath;
14
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wooFiDecimalMath = void 0;
4
+ const bigint_constants_1 = require("../../bigint-constants");
5
+ class WooFiDecimalMath {
6
+ constructor() {
7
+ this.ONE = bigint_constants_1.BI_POWS[18];
8
+ this.TWO = 2n * bigint_constants_1.BI_POWS[18];
9
+ this.ONE2 = bigint_constants_1.BI_POWS[36];
10
+ }
11
+ mulFloor(target, d) {
12
+ // target.mul(d) / (10**18);
13
+ return (target * d) / bigint_constants_1.BI_POWS[18];
14
+ }
15
+ mulCeil(target, d) {
16
+ // _divCeil(target.mul(d), 10 ** 18);
17
+ return this._divCeil(target * d, bigint_constants_1.BI_POWS[18]);
18
+ }
19
+ divFloor(target, d) {
20
+ // target.mul(10 ** 18).div(d);
21
+ return (target * bigint_constants_1.BI_POWS[18]) / d;
22
+ }
23
+ divCeil(target, d) {
24
+ // _divCeil(target.mul(10 ** 18), d);
25
+ return this._divCeil(target * bigint_constants_1.BI_POWS[18], d);
26
+ }
27
+ reciprocalFloor(target) {
28
+ // uint256(10 ** 36).div(target);
29
+ return bigint_constants_1.BI_POWS[36] / target;
30
+ }
31
+ reciprocalCeil(target) {
32
+ // _divCeil(uint256(10 ** 36), target);
33
+ return this._divCeil(bigint_constants_1.BI_POWS[36], target);
34
+ }
35
+ _divCeil(a, b) {
36
+ const quotient = a / b;
37
+ const remainder = a - quotient * b;
38
+ return remainder > 0n ? quotient + 1n : quotient;
39
+ }
40
+ }
41
+ exports.wooFiDecimalMath = new WooFiDecimalMath();
42
+ //# sourceMappingURL=woo-fi-decimal-math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woo-fi-decimal-math.js","sourceRoot":"","sources":["../../../src/dex/woo-fi/woo-fi-decimal-math.ts"],"names":[],"mappings":";;;AAAA,6DAAiD;AAEjD,MAAM,gBAAgB;IAAtB;QACW,QAAG,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;QAClB,QAAG,GAAG,EAAE,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;QACvB,SAAI,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;IAqC9B,CAAC;IAnCC,QAAQ,CAAC,MAAc,EAAE,CAAS;QAChC,4BAA4B;QAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,CAAS;QAC/B,qCAAqC;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,0BAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,CAAS;QAChC,+BAA+B;QAC/B,OAAO,CAAC,MAAM,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,CAAS;QAC/B,qCAAqC;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,0BAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,iCAAiC;QACjC,OAAO,0BAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,uCAAuC;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,0BAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEO,QAAQ,CAAC,CAAS,EAAE,CAAS;QACnC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACnC,OAAO,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnD,CAAC;CACF;AAEY,QAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { PoolState, TokenInfo } from './types';
2
+ import { wooFiDecimalMath } from './woo-fi-decimal-math';
3
+ import { Address, Logger } from '../../types';
4
+ export declare class WooFiMath {
5
+ private readonly logger;
6
+ private readonly _quoteToken;
7
+ readonly dMath: typeof wooFiDecimalMath;
8
+ private readonly _MIN_INPUT_DEFAULT;
9
+ private readonly _MAX_INPUT_DEFAULT;
10
+ state: PoolState;
11
+ constructor(logger: Logger, _quoteToken: Address);
12
+ querySellBase(baseToken: Address, baseAmounts: bigint[]): bigint[] | null;
13
+ querySellQuote(baseToken: Address, quoteAmounts: bigint[]): bigint[] | null;
14
+ protected _takeFee(amounts: bigint[], feeRate: bigint): bigint[];
15
+ protected _getQuoteAmountSellBase(baseToken: Address, baseAmounts: bigint[]): bigint[];
16
+ protected _getBaseAmountSellQuote(baseToken: string, quoteAmounts: bigint[]): bigint[];
17
+ protected _getBoughtAmount(baseInfo: TokenInfo, quoteInfo: TokenInfo, p: bigint, k: bigint, isSellBase: boolean): {
18
+ baseBought: bigint;
19
+ quoteBought: bigint;
20
+ };
21
+ protected _getBaseAmountLowBaseSide(p: bigint, k: bigint, r: bigint, quoteAmount: bigint): bigint;
22
+ protected _getQuoteAmountLowQuoteSide(p: bigint, k: bigint, r: bigint, baseAmount: bigint): bigint;
23
+ protected _getBaseAmountLowQuoteSide(p: bigint, k: bigint, r: bigint, quoteAmount: bigint): bigint;
24
+ protected _getQuoteAmountLowBaseSide(p: bigint, k: bigint, r: bigint, baseAmount: bigint): bigint;
25
+ protected _autoUpdate(quoteTokenAddress: string, baseTokenAddress: string): void;
26
+ private _checkInputAmount;
27
+ private _checkSwapAmount;
28
+ checkSwapPrice(price: bigint, fromToken: Address, toToken: Address): void;
29
+ private _refPrice;
30
+ private _boundForTokens;
31
+ }
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WooFiMath = void 0;
4
+ const woo_fi_decimal_math_1 = require("./woo-fi-decimal-math");
5
+ const bigint_constants_1 = require("../../bigint-constants");
6
+ const utils_1 = require("../../utils");
7
+ const constants_1 = require("./constants");
8
+ const constants_2 = require("../../constants");
9
+ function handleMathError(e, logger) {
10
+ if (e instanceof Error && e.message.startsWith('WooGuardian:')) {
11
+ logger.warn('WooFi Guardian check Error:', e);
12
+ return;
13
+ }
14
+ logger.error('Unexpected error in WooFi math:', e);
15
+ }
16
+ class WooFiMath {
17
+ constructor(logger, _quoteToken) {
18
+ this.logger = logger;
19
+ this._quoteToken = _quoteToken;
20
+ // dMath = decimalMath
21
+ this.dMath = woo_fi_decimal_math_1.wooFiDecimalMath;
22
+ this._MIN_INPUT_DEFAULT = bigint_constants_1.BI_POWS[16]; // 0.01 xToken
23
+ this._MAX_INPUT_DEFAULT = bigint_constants_1.BI_POWS[20]; // 100 xToken
24
+ this.state = constants_1.NULL_STATE;
25
+ }
26
+ querySellBase(baseToken, baseAmounts) {
27
+ try {
28
+ const _baseAmounts = baseAmounts.map(baseAmount => {
29
+ try {
30
+ this._checkInputAmount(baseToken, baseAmount);
31
+ return baseAmount;
32
+ }
33
+ catch (e) {
34
+ if (e instanceof Error &&
35
+ e.message.includes('WooGuardian: inputAmount')) {
36
+ return 0n;
37
+ }
38
+ throw e;
39
+ }
40
+ });
41
+ this._autoUpdate(this._quoteToken, baseToken);
42
+ const quoteAmounts = this._getQuoteAmountSellBase(baseToken, _baseAmounts);
43
+ const feeRate = this.state.feeRates[baseToken];
44
+ return this._takeFee(quoteAmounts, feeRate);
45
+ }
46
+ catch (e) {
47
+ handleMathError(e, this.logger);
48
+ return null;
49
+ }
50
+ }
51
+ querySellQuote(baseToken, quoteAmounts) {
52
+ try {
53
+ let _quoteAmounts = quoteAmounts.map(quoteAmount => {
54
+ try {
55
+ this._checkInputAmount(this._quoteToken, quoteAmount);
56
+ return quoteAmount;
57
+ }
58
+ catch (e) {
59
+ if (e instanceof Error &&
60
+ e.message.startsWith('Error message: WooGuardian: inputAmount')) {
61
+ return 0n;
62
+ }
63
+ throw e;
64
+ }
65
+ });
66
+ this._autoUpdate(this._quoteToken, baseToken);
67
+ const feeRate = this.state.feeRates[baseToken];
68
+ _quoteAmounts = this._takeFee(_quoteAmounts, feeRate);
69
+ return this._getBaseAmountSellQuote(baseToken, _quoteAmounts);
70
+ }
71
+ catch (e) {
72
+ handleMathError(e, this.logger);
73
+ return null;
74
+ }
75
+ }
76
+ _takeFee(amounts, feeRate) {
77
+ return amounts.map(amount => {
78
+ const lpFee = this.dMath.mulCeil(amount, feeRate);
79
+ return amount === 0n ? 0n : amount - lpFee;
80
+ });
81
+ }
82
+ _getQuoteAmountSellBase(baseToken, baseAmounts) {
83
+ const quoteInfo = this.state.tokenInfos[this._quoteToken];
84
+ const baseInfo = this.state.tokenInfos[baseToken];
85
+ let { priceNow: p, spreadNow: s, coeffNow: k, } = this.state.tokenStates[baseToken];
86
+ this.checkSwapPrice(p, baseToken, this._quoteToken);
87
+ // price: p * (1 - s / 2)
88
+ p = this.dMath.mulFloor(p, this.dMath.ONE - this.dMath.divCeil(s, this.dMath.TWO));
89
+ const { baseBought, quoteBought } = this._getBoughtAmount(baseInfo, quoteInfo, p, k, true);
90
+ return baseAmounts.map(baseAmount => {
91
+ if (baseAmount === 0n)
92
+ return 0n;
93
+ let quoteAmount;
94
+ if (baseBought > 0n) {
95
+ const quoteSold = this._getQuoteAmountLowBaseSide(p, k, baseInfo.R, baseBought);
96
+ if (baseAmount > baseBought) {
97
+ const newBaseSold = baseAmount - baseBought;
98
+ quoteAmount =
99
+ quoteSold +
100
+ this._getQuoteAmountLowQuoteSide(p, k, this.dMath.ONE, newBaseSold);
101
+ }
102
+ else {
103
+ const newBaseBought = baseBought - baseAmount;
104
+ quoteAmount =
105
+ quoteSold -
106
+ this._getQuoteAmountLowBaseSide(p, k, baseInfo.R, newBaseBought);
107
+ }
108
+ }
109
+ else {
110
+ const baseSold = this._getBaseAmountLowQuoteSide(p, k, this.dMath.ONE, quoteBought);
111
+ const newBaseSold = baseAmount + baseSold;
112
+ const newQuoteBought = this._getQuoteAmountLowQuoteSide(p, k, this.dMath.ONE, newBaseSold);
113
+ quoteAmount =
114
+ newQuoteBought > quoteBought ? newQuoteBought - quoteBought : 0n;
115
+ }
116
+ this._checkSwapAmount(baseToken, this._quoteToken, baseAmount, quoteAmount);
117
+ if (quoteAmount > this.state.wooPPBalances[this._quoteToken]) {
118
+ // require(quoteAmount <= IERC20(quoteToken).balanceOf(address(this)), 'WooPP: INSUFF_QUOTE');
119
+ return 0n;
120
+ }
121
+ return quoteAmount;
122
+ });
123
+ }
124
+ _getBaseAmountSellQuote(baseToken, quoteAmounts) {
125
+ const quoteInfo = this.state.tokenInfos[this._quoteToken];
126
+ const baseInfo = this.state.tokenInfos[baseToken];
127
+ let { priceNow: p, spreadNow: s, coeffNow: k, } = this.state.tokenStates[baseToken];
128
+ this.checkSwapPrice(p, baseToken, this._quoteToken);
129
+ // price: p * (1 + s / 2)
130
+ p = this.dMath.mulCeil(p, this.dMath.ONE + this.dMath.divCeil(s, this.dMath.TWO));
131
+ const { baseBought, quoteBought } = this._getBoughtAmount(baseInfo, quoteInfo, p, k, false);
132
+ return quoteAmounts.map(quoteAmount => {
133
+ if (quoteAmount === 0n)
134
+ return 0n;
135
+ let baseAmount;
136
+ if (quoteBought > 0) {
137
+ const baseSold = this._getBaseAmountLowQuoteSide(p, k, baseInfo.R, quoteBought);
138
+ if (quoteAmount > quoteBought) {
139
+ const newQuoteSold = quoteAmount - quoteBought;
140
+ baseAmount =
141
+ baseSold +
142
+ this._getBaseAmountLowBaseSide(p, k, this.dMath.ONE, newQuoteSold);
143
+ }
144
+ else {
145
+ const newQuoteBought = quoteBought - quoteAmount;
146
+ baseAmount =
147
+ baseSold -
148
+ this._getBaseAmountLowQuoteSide(p, k, baseInfo.R, newQuoteBought);
149
+ }
150
+ }
151
+ else {
152
+ const quoteSold = this._getQuoteAmountLowBaseSide(p, k, this.dMath.ONE, baseBought);
153
+ const newQuoteSold = quoteAmount + quoteSold;
154
+ const newBaseBought = this._getBaseAmountLowBaseSide(p, k, this.dMath.ONE, newQuoteSold);
155
+ baseAmount =
156
+ newBaseBought > baseBought ? newBaseBought - baseBought : 0n;
157
+ }
158
+ this._checkSwapAmount(this._quoteToken, baseToken, quoteAmount, baseAmount);
159
+ if (baseAmount > this.state.wooPPBalances[baseToken]) {
160
+ // require(baseAmount <= IERC20(baseToken).balanceOf(address(this)), 'WooPP: INSUFF_BASE');
161
+ return 0n;
162
+ }
163
+ return baseAmount;
164
+ });
165
+ }
166
+ _getBoughtAmount(baseInfo, quoteInfo, p, k, isSellBase) {
167
+ let baseBought = 0n;
168
+ let quoteBought = 0n;
169
+ let baseSold = 0n;
170
+ if (baseInfo.reserve < baseInfo.target) {
171
+ baseBought = baseInfo.target - baseInfo.reserve;
172
+ }
173
+ else {
174
+ baseSold = baseInfo.reserve - baseInfo.target;
175
+ }
176
+ let quoteSold = 0n;
177
+ if (quoteInfo.reserve < quoteInfo.target) {
178
+ quoteBought = quoteInfo.target - quoteInfo.reserve;
179
+ }
180
+ else {
181
+ quoteSold = quoteInfo.reserve - quoteInfo.target;
182
+ }
183
+ if (this.dMath.mulCeil(baseSold, p) > quoteSold) {
184
+ baseSold = baseSold - this.dMath.divFloor(quoteSold, p);
185
+ quoteSold = 0n;
186
+ }
187
+ else {
188
+ quoteSold = quoteSold - this.dMath.mulCeil(baseSold, p);
189
+ baseSold = 0n;
190
+ }
191
+ const virtualBaseBought = this._getBaseAmountLowBaseSide(p, k, this.dMath.ONE, quoteSold);
192
+ if (isSellBase === virtualBaseBought < baseBought) {
193
+ baseBought = virtualBaseBought;
194
+ }
195
+ const virtualQuoteBought = this._getQuoteAmountLowQuoteSide(p, k, this.dMath.ONE, baseSold);
196
+ if (isSellBase === virtualQuoteBought > quoteBought) {
197
+ quoteBought = virtualQuoteBought;
198
+ }
199
+ return { baseBought, quoteBought };
200
+ }
201
+ _getBaseAmountLowBaseSide(p, k, r, quoteAmount) {
202
+ // priceFactor = 1 + k * quoteAmount * r;
203
+ const priceFactor = this.dMath.ONE +
204
+ this.dMath.mulCeil(this.dMath.mulCeil(k, quoteAmount), r);
205
+ // quoteAmount / p / priceFactor;
206
+ return this.dMath.divFloor(this.dMath.divFloor(quoteAmount, p), priceFactor);
207
+ }
208
+ _getQuoteAmountLowQuoteSide(p, k, r, baseAmount) {
209
+ // priceFactor = 1 + k * baseAmount * p * r;
210
+ const priceFactor = this.dMath.ONE +
211
+ this.dMath.mulCeil(this.dMath.mulCeil(this.dMath.mulCeil(k, baseAmount), p), r);
212
+ // baseAmount * p / priceFactor;
213
+ return this.dMath.divFloor(this.dMath.mulFloor(baseAmount, p), priceFactor);
214
+ }
215
+ _getBaseAmountLowQuoteSide(p, k, r, quoteAmount) {
216
+ // priceFactor = (1 - k * quoteAmount * r);
217
+ const priceFactor = this.dMath.ONE -
218
+ this.dMath.mulFloor(this.dMath.mulFloor(k, quoteAmount), r);
219
+ // quoteAmount / p / priceFactor;
220
+ return this.dMath.divFloor(this.dMath.divFloor(quoteAmount, p), priceFactor);
221
+ }
222
+ _getQuoteAmountLowBaseSide(p, k, r, baseAmount) {
223
+ // priceFactor = 1 - k * baseAmount * p * r;
224
+ const priceFactor = this.dMath.ONE -
225
+ this.dMath.mulFloor(this.dMath.mulFloor(this.dMath.mulFloor(k, baseAmount), p), r);
226
+ // baseAmount * p / priceFactor;
227
+ return this.dMath.divFloor(this.dMath.mulFloor(baseAmount, p), priceFactor);
228
+ }
229
+ _autoUpdate(quoteTokenAddress, baseTokenAddress) {
230
+ const quoteInfo = this.state.tokenInfos[quoteTokenAddress];
231
+ const baseInfo = this.state.tokenInfos[baseTokenAddress];
232
+ if (this.state.oracleTimestamp !== baseInfo.lastResetTimestamp) {
233
+ baseInfo.target =
234
+ baseInfo.threshold > baseInfo.reserve
235
+ ? baseInfo.threshold
236
+ : baseInfo.reserve;
237
+ baseInfo.lastResetTimestamp = this.state.oracleTimestamp;
238
+ }
239
+ if (this.state.oracleTimestamp !== quoteInfo.lastResetTimestamp) {
240
+ quoteInfo.target =
241
+ quoteInfo.threshold > quoteInfo.reserve
242
+ ? quoteInfo.threshold
243
+ : quoteInfo.reserve;
244
+ quoteInfo.lastResetTimestamp = this.state.oracleTimestamp;
245
+ }
246
+ }
247
+ _checkInputAmount(token, inputAmount) {
248
+ (0, utils_1._require)(inputAmount < bigint_constants_1.BI_MAX_UINT96, `WooGuardian: inputAmount_uint96_OVERFLOW in _checkInputAmount for ${token}`);
249
+ const info = this.state.guardian.refInfos[token];
250
+ const minInputAmount = info.minInputAmount != 0n ? info.minInputAmount : this._MIN_INPUT_DEFAULT;
251
+ const maxInputAmount = info.maxInputAmount != 0n ? info.maxInputAmount : this._MAX_INPUT_DEFAULT;
252
+ (0, utils_1._require)(inputAmount >= minInputAmount, `WooGuardian: inputAmount_LTM in _checkInputAmount for ${token}`);
253
+ (0, utils_1._require)(inputAmount <= maxInputAmount, `WooGuardian: inputAmount_GTM in _checkInputAmount for ${token}`);
254
+ }
255
+ _checkSwapAmount(fromToken, toToken, fromAmount, toAmount) {
256
+ if (this.state.guardian.refInfos[fromToken].chainlinkRefOracle ===
257
+ constants_2.NULL_ADDRESS ||
258
+ this.state.guardian.refInfos[toToken].chainlinkRefOracle === constants_2.NULL_ADDRESS) {
259
+ return;
260
+ }
261
+ const refPrice = this._refPrice(fromToken, toToken);
262
+ const refToAmount = this.dMath.mulFloor(fromAmount, refPrice);
263
+ const bound = this._boundForTokens(fromToken, toToken);
264
+ (0, utils_1._require)(this.dMath.mulFloor(refToAmount, bigint_constants_1.BI_POWS[18] - bound) <= toAmount &&
265
+ toAmount <= this.dMath.mulCeil(refToAmount, bigint_constants_1.BI_POWS[18] + bound), `WooGuardian: TO_AMOUNT_UNRELIABLE in _checkSwapAmount for ${toToken}`);
266
+ }
267
+ checkSwapPrice(price, fromToken, toToken) {
268
+ if (this.state.guardian.refInfos[fromToken].chainlinkRefOracle ===
269
+ constants_2.NULL_ADDRESS ||
270
+ this.state.guardian.refInfos[toToken].chainlinkRefOracle === constants_2.NULL_ADDRESS) {
271
+ return;
272
+ }
273
+ const refPrice = this._refPrice(fromToken, toToken);
274
+ const bound = this._boundForTokens(fromToken, toToken);
275
+ (0, utils_1._require)(this.dMath.mulFloor(refPrice, bigint_constants_1.BI_POWS[18] - bound) <= price &&
276
+ price <= this.dMath.mulCeil(refPrice, bigint_constants_1.BI_POWS[18] + bound), `WooGuardian: PRICE_UNRELIABLE in checkSwapPrice fromToken=${fromToken} and toToken=${toToken}`);
277
+ }
278
+ _refPrice(fromToken, toToken) {
279
+ const baseInfo = this.state.guardian.refInfos[fromToken];
280
+ const quoteInfo = this.state.guardian.refInfos[toToken];
281
+ (0, utils_1._require)(baseInfo.chainlinkRefOracle !== constants_2.NULL_ADDRESS, `WooGuardian: fromToken_RefOracle_INVALID: ${fromToken}`);
282
+ (0, utils_1._require)(quoteInfo.chainlinkRefOracle !== constants_2.NULL_ADDRESS, `WooGuardian: toToken_RefOracle_INVALID: ${toToken}`);
283
+ const { answer: rawBaseRefPrice } = this.state.chainlink.latestRoundDatas[baseInfo.chainlinkRefOracle];
284
+ (0, utils_1._require)(rawBaseRefPrice >= 0, `WooGuardian: INVALID_CHAINLINK_PRICE in _refPrice for ${fromToken}`);
285
+ const { answer: rawQuoteRefPrice } = this.state.chainlink.latestRoundDatas[quoteInfo.chainlinkRefOracle];
286
+ (0, utils_1._require)(rawQuoteRefPrice >= 0, `WooGuardian: INVALID_CHAINLINK_QUOTE_PRICE in _refPrice for ${toToken}`);
287
+ const baseRefPrice = rawBaseRefPrice * baseInfo.refPriceFixCoeff;
288
+ const quoteRefPrice = rawQuoteRefPrice * quoteInfo.refPriceFixCoeff;
289
+ return this.dMath.divFloor(baseRefPrice, quoteRefPrice);
290
+ }
291
+ _boundForTokens(token1, token2) {
292
+ const info1 = this.state.guardian.refInfos[token1];
293
+ const bound1 = info1.bound !== 0n ? info1.bound : this.state.guardian.globalBound;
294
+ const info2 = this.state.guardian.refInfos[token2];
295
+ const bound2 = info2.bound != 0n ? info2.bound : this.state.guardian.globalBound;
296
+ return bound1 > bound2 ? bound1 : bound2;
297
+ }
298
+ }
299
+ exports.WooFiMath = WooFiMath;
300
+ //# sourceMappingURL=woo-fi-math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woo-fi-math.js","sourceRoot":"","sources":["../../../src/dex/woo-fi/woo-fi-math.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Interface, Result } from '@ethersproject/abi';
2
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger } from '../../types';
3
+ import { SwapSide, Network } from '../../constants';
4
+ import { IDex } from '../../dex/idex';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { DexParams, PoolState, WooFiData } from './types';
7
+ import { SimpleExchange } from '../simple-exchange';
8
+ import { WooFiMath } from './woo-fi-math';
9
+ export declare class WooFi extends SimpleExchange implements IDex<WooFiData> {
10
+ protected network: Network;
11
+ protected dexHelper: IDexHelper;
12
+ protected adapters: import("../../types").AdapterMappings;
13
+ readonly config: DexParams;
14
+ readonly math: WooFiMath;
15
+ latestState: PoolState | null;
16
+ latestBlockNumber: number;
17
+ vaultUSDBalance: number;
18
+ tokenByAddress: Record<Address, Token>;
19
+ private _refInfos;
20
+ private _encodedStateRequestCalldata?;
21
+ static readonly ifaces: {
22
+ PP: Interface;
23
+ fee: Interface;
24
+ oracle: Interface;
25
+ guardian: Interface;
26
+ chainlink: Interface;
27
+ erc20BalanceOf: Interface;
28
+ };
29
+ readonly hasConstantPriceLargeAmounts = false;
30
+ readonly needWrapNative = true;
31
+ readonly isFeeOnTransferSupported = false;
32
+ readonly quoteTokenAddress: Address;
33
+ static dexKeysWithNetwork: {
34
+ key: string;
35
+ networks: Network[];
36
+ }[];
37
+ logger: Logger;
38
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings, config?: DexParams);
39
+ private _toLowerForAllConfigAddresses;
40
+ private _getRefInfos;
41
+ get baseTokens(): Token[];
42
+ get isRefInfosEmpty(): boolean;
43
+ protected _fillTokenInfoState(state: PoolState, address: string, values: Result): void;
44
+ private _readChanLinkResponse;
45
+ protected _getStateRequestCallData(): {
46
+ target: string;
47
+ callData: string;
48
+ }[];
49
+ private _fetchStateForBlockNumber;
50
+ initializePricing(blockNumber: number): Promise<void>;
51
+ getAdapters(side: SwapSide): {
52
+ name: string;
53
+ index: number;
54
+ }[] | null;
55
+ getIdentifier(isSrcQuote: boolean): string;
56
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
57
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<WooFiData>>;
58
+ getCalldataGasCost(poolPrices: PoolPrices<WooFiData>): number | number[];
59
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: WooFiData, side: SwapSide): AdapterExchangeParam;
60
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: WooFiData, side: SwapSide): Promise<SimpleExchangeParam>;
61
+ updatePoolState(): Promise<void>;
62
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
63
+ getState(blockNumber?: number): Promise<PoolState>;
64
+ private _identifyQuote;
65
+ }