@paraswap/dex-lib 2.34.0 → 2.35.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.
Files changed (69) hide show
  1. package/build/abi/api3-proxy.json +46 -0
  2. package/build/abi/api3-server-v1.json +463 -0
  3. package/build/abi/quick-perps/fast-price-events.json +70 -0
  4. package/build/abi/quick-perps/fast-price-feed.json +741 -0
  5. package/build/abi/quick-perps/reader.json +313 -0
  6. package/build/abi/quick-perps/vault-price-feed.json +323 -0
  7. package/build/abi/quick-perps/vault.json +1953 -0
  8. package/build/composed-event-subscriber.js +8 -2
  9. package/build/composed-event-subscriber.js.map +1 -1
  10. package/build/config.js +2 -2
  11. package/build/dex/index.js +2 -0
  12. package/build/dex/index.js.map +1 -1
  13. package/build/dex/quick-perps/config.d.ts +11 -0
  14. package/build/dex/quick-perps/config.js +27 -0
  15. package/build/dex/quick-perps/config.js.map +1 -0
  16. package/build/dex/quick-perps/fast-price-feed.d.ts +26 -0
  17. package/build/dex/quick-perps/fast-price-feed.js +176 -0
  18. package/build/dex/quick-perps/fast-price-feed.js.map +1 -0
  19. package/build/dex/quick-perps/pool.d.ts +21 -0
  20. package/build/dex/quick-perps/pool.js +210 -0
  21. package/build/dex/quick-perps/pool.js.map +1 -0
  22. package/build/dex/quick-perps/quick-perps.d.ts +52 -0
  23. package/build/dex/quick-perps/quick-perps.js +205 -0
  24. package/build/dex/quick-perps/quick-perps.js.map +1 -0
  25. package/build/dex/quick-perps/types.d.ts +98 -0
  26. package/build/dex/quick-perps/types.js +3 -0
  27. package/build/dex/quick-perps/types.js.map +1 -0
  28. package/build/dex/quick-perps/usdq.d.ts +15 -0
  29. package/build/dex/quick-perps/usdq.js +61 -0
  30. package/build/dex/quick-perps/usdq.js.map +1 -0
  31. package/build/dex/quick-perps/vault-price-feed.d.ts +43 -0
  32. package/build/dex/quick-perps/vault-price-feed.js +194 -0
  33. package/build/dex/quick-perps/vault-price-feed.js.map +1 -0
  34. package/build/dex/quick-perps/vault-utils.d.ts +8 -0
  35. package/build/dex/quick-perps/vault-utils.js +41 -0
  36. package/build/dex/quick-perps/vault-utils.js.map +1 -0
  37. package/build/dex/quick-perps/vault.d.ts +46 -0
  38. package/build/dex/quick-perps/vault.js +166 -0
  39. package/build/dex/quick-perps/vault.js.map +1 -0
  40. package/build/lib/api3-feed.d.ts +26 -0
  41. package/build/lib/api3-feed.js +82 -0
  42. package/build/lib/api3-feed.js.map +1 -0
  43. package/package.json +1 -1
  44. package/src/abi/api3-proxy.json +46 -0
  45. package/src/abi/api3-server-v1.json +463 -0
  46. package/src/abi/quick-perps/fast-price-events.json +70 -0
  47. package/src/abi/quick-perps/fast-price-feed.json +741 -0
  48. package/src/abi/quick-perps/reader.json +313 -0
  49. package/src/abi/quick-perps/vault-price-feed.json +323 -0
  50. package/src/abi/quick-perps/vault.json +1953 -0
  51. package/src/composed-event-subscriber.ts +16 -11
  52. package/src/config.ts +2 -2
  53. package/src/dex/index.ts +2 -0
  54. package/src/dex/quick-perps/config.ts +31 -0
  55. package/src/dex/quick-perps/fast-price-feed.ts +279 -0
  56. package/src/dex/quick-perps/pool.ts +372 -0
  57. package/src/dex/quick-perps/quick-perps-e2e.test.ts +65 -0
  58. package/src/dex/quick-perps/quick-perps-events.test.ts +101 -0
  59. package/src/dex/quick-perps/quick-perps-integration.test.ts +153 -0
  60. package/src/dex/quick-perps/quick-perps.ts +292 -0
  61. package/src/dex/quick-perps/types.ts +97 -0
  62. package/src/dex/quick-perps/usdq.ts +83 -0
  63. package/src/dex/quick-perps/vault-price-feed.ts +322 -0
  64. package/src/dex/quick-perps/vault-utils.ts +53 -0
  65. package/src/dex/quick-perps/vault.ts +290 -0
  66. package/src/lib/api3-feed.ts +140 -0
  67. package/tests/constants-e2e.ts +29 -0
  68. package/tests/tenderly-simulation.ts +46 -2
  69. package/tests/utils-e2e.ts +18 -10
@@ -0,0 +1,194 @@
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.VaultPriceFeed = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const vault_price_feed_json_1 = __importDefault(require("../../abi/quick-perps/vault-price-feed.json"));
9
+ class VaultPriceFeed {
10
+ constructor(config, primaryPrices, secondaryPrice) {
11
+ this.primaryPrices = primaryPrices;
12
+ this.secondaryPrice = secondaryPrice;
13
+ this.BASIS_POINTS_DIVISOR = 10000n;
14
+ this.PRICE_PRECISION = 10n ** 30n;
15
+ this.ONE_USD = this.PRICE_PRECISION;
16
+ this.isSecondaryPriceEnabled = config.isSecondaryPriceEnabled;
17
+ this.strictStableTokens = config.strictStableTokens;
18
+ this.spreadBasisPoints = config.spreadBasisPoints;
19
+ this.adjustmentBasisPoints = config.adjustmentBasisPoints;
20
+ this.isAdjustmentAdditive = config.isAdjustmentAdditive;
21
+ this.priceDecimals = config.priceDecimals;
22
+ this.maxStrictPriceDeviation = config.maxStrictPriceDeviation;
23
+ }
24
+ getPrice(state, _token, _maximize, _includeAmmPrice, _useSwapPricing) {
25
+ let price = this.getPriceV1(state, _token, _maximize, _includeAmmPrice);
26
+ const adjustmentBps = this.adjustmentBasisPoints[_token];
27
+ if (adjustmentBps > 0n) {
28
+ const isAdditive = this.isAdjustmentAdditive[_token];
29
+ if (isAdditive) {
30
+ price =
31
+ (price * (this.BASIS_POINTS_DIVISOR + adjustmentBps)) /
32
+ this.BASIS_POINTS_DIVISOR;
33
+ }
34
+ else {
35
+ price =
36
+ (price * (this.BASIS_POINTS_DIVISOR - adjustmentBps)) /
37
+ this.BASIS_POINTS_DIVISOR;
38
+ }
39
+ }
40
+ return price;
41
+ }
42
+ getPriceV1(state, _token, _maximize, _includeAmmPrice) {
43
+ let price = this.getPrimaryPrice(state, _token, _maximize);
44
+ if (this.isSecondaryPriceEnabled) {
45
+ price = this.getSecondaryPrice(state, _token, price, _maximize);
46
+ }
47
+ if (this.strictStableTokens[_token]) {
48
+ const delta = price > this.ONE_USD ? price - this.ONE_USD : this.ONE_USD - price;
49
+ if (delta <= this.maxStrictPriceDeviation) {
50
+ return this.ONE_USD;
51
+ }
52
+ // if _maximize and price is e.g. 1.02, return 1.02
53
+ if (_maximize && price > this.ONE_USD) {
54
+ return price;
55
+ }
56
+ // if !_maximize and price is e.g. 0.98, return 0.98
57
+ if (!_maximize && price < this.ONE_USD) {
58
+ return price;
59
+ }
60
+ return this.ONE_USD;
61
+ }
62
+ const _spreadBasisPoints = this.spreadBasisPoints[_token];
63
+ if (_maximize) {
64
+ return ((price * (this.BASIS_POINTS_DIVISOR + _spreadBasisPoints)) /
65
+ this.BASIS_POINTS_DIVISOR);
66
+ }
67
+ return ((price * (this.BASIS_POINTS_DIVISOR - _spreadBasisPoints)) /
68
+ this.BASIS_POINTS_DIVISOR);
69
+ }
70
+ getAmmPrice(state, token) {
71
+ throw new Error('getAmmPrice implementation is not complete, developers should disable the dex or complete the implementation');
72
+ }
73
+ getPrimaryPrice(state, _token, _maximize) {
74
+ // const priceFeedAddress = this.priceFeeds[_token];
75
+ // require(priceFeedAddress != address(0), "VaultPriceFeed: invalid price feed");
76
+ // if (chainlinkFlags != address(0)) {
77
+ // bool isRaised = IChainlinkFlags(chainlinkFlags).getFlag(FLAG_ARBITRUM_SEQ_OFFLINE);
78
+ // if (isRaised) {
79
+ // // If flag is raised we shouldn't perform any critical operations
80
+ // revert("Chainlink feeds are not being updated");
81
+ // }
82
+ // }
83
+ // IPriceFeed priceFeed = IPriceFeed(priceFeedAddress);
84
+ let price = 0n;
85
+ // const roundId = priceFeed.latestRound;
86
+ // for (let i = 0; i < this.priceSampleSpace; i++) {
87
+ // if (roundId <= i) {
88
+ // break;
89
+ // }
90
+ // if (i == 0) {
91
+ // const _p = priceFeed.latestAnswer();
92
+ // require(_p > 0, "VaultPriceFeed: invalid price");
93
+ // p = uint256(_p);
94
+ // } else {
95
+ // (, int256 _p, , ,) = priceFeed.getRoundData(roundId - i);
96
+ // require(_p > 0, "VaultPriceFeed: invalid price");
97
+ // p = uint256(_p);
98
+ // }
99
+ // if (price == 0n) {
100
+ // price = p;
101
+ // continue;
102
+ // }
103
+ // if (_maximize && p > price) {
104
+ // price = p;
105
+ // continue;
106
+ // }
107
+ // if (!_maximize && p < price) {
108
+ // price = p;
109
+ // }
110
+ // }
111
+ price = this.primaryPrices[_token].getLatestData(state);
112
+ // require(price > 0n, "VaultPriceFeed: could not fetch price");
113
+ if (price <= 0n)
114
+ throw new Error('VaultPriceFeed: could not fetch price');
115
+ // normalize price precision
116
+ const _priceDecimals = this.priceDecimals[_token];
117
+ return (price * this.PRICE_PRECISION) / BigInt(10 ** _priceDecimals);
118
+ }
119
+ getSecondaryPrice(state, _token, _referencePrice, _maximize) {
120
+ return this.secondaryPrice.getPrice(state, _token, _referencePrice, _maximize);
121
+ }
122
+ static getConfigMulticallInputs(vaultPriceFeedAddress, tokenAddresses) {
123
+ return [
124
+ {
125
+ target: vaultPriceFeedAddress,
126
+ callData: VaultPriceFeed.interface.encodeFunctionData('isSecondaryPriceEnabled'),
127
+ },
128
+ ...tokenAddresses.map(t => ({
129
+ target: vaultPriceFeedAddress,
130
+ callData: VaultPriceFeed.interface.encodeFunctionData('strictStableTokens', [t]),
131
+ })),
132
+ ...tokenAddresses.map(t => ({
133
+ target: vaultPriceFeedAddress,
134
+ callData: VaultPriceFeed.interface.encodeFunctionData('spreadBasisPoints', [t]),
135
+ })),
136
+ ...tokenAddresses.map(t => ({
137
+ target: vaultPriceFeedAddress,
138
+ callData: VaultPriceFeed.interface.encodeFunctionData('isAdjustmentAdditive', [t]),
139
+ })),
140
+ ...tokenAddresses.map(t => ({
141
+ target: vaultPriceFeedAddress,
142
+ callData: VaultPriceFeed.interface.encodeFunctionData('adjustmentBasisPoints', [t]),
143
+ })),
144
+ ...tokenAddresses.map(t => ({
145
+ target: vaultPriceFeedAddress,
146
+ callData: VaultPriceFeed.interface.encodeFunctionData('priceDecimals', [
147
+ t,
148
+ ]),
149
+ })),
150
+ {
151
+ target: vaultPriceFeedAddress,
152
+ callData: VaultPriceFeed.interface.encodeFunctionData('maxStrictPriceDeviation'),
153
+ },
154
+ ];
155
+ }
156
+ static getConfig(multicallOutputs, tokenAddress) {
157
+ let i = 0;
158
+ return {
159
+ isSecondaryPriceEnabled: VaultPriceFeed.interface.decodeFunctionResult('isSecondaryPriceEnabled', multicallOutputs[i++])[0],
160
+ strictStableTokens: tokenAddress.reduce((acc, t) => {
161
+ acc[t] = VaultPriceFeed.interface.decodeFunctionResult('strictStableTokens', multicallOutputs[i++])[0];
162
+ return acc;
163
+ }, {}),
164
+ spreadBasisPoints: tokenAddress.reduce((acc, t) => {
165
+ acc[t] = BigInt(VaultPriceFeed.interface
166
+ .decodeFunctionResult('spreadBasisPoints', multicallOutputs[i++])[0]
167
+ .toString());
168
+ return acc;
169
+ }, {}),
170
+ isAdjustmentAdditive: tokenAddress.reduce((acc, t) => {
171
+ acc[t] = VaultPriceFeed.interface.decodeFunctionResult('isAdjustmentAdditive', multicallOutputs[i++])[0];
172
+ return acc;
173
+ }, {}),
174
+ adjustmentBasisPoints: tokenAddress.reduce((acc, t) => {
175
+ acc[t] = BigInt(VaultPriceFeed.interface
176
+ .decodeFunctionResult('adjustmentBasisPoints', multicallOutputs[i++])[0]
177
+ .toString());
178
+ return acc;
179
+ }, {}),
180
+ priceDecimals: tokenAddress.reduce((acc, t) => {
181
+ acc[t] = parseInt(VaultPriceFeed.interface
182
+ .decodeFunctionResult('priceDecimals', multicallOutputs[i++])[0]
183
+ .toString());
184
+ return acc;
185
+ }, {}),
186
+ maxStrictPriceDeviation: BigInt(VaultPriceFeed.interface
187
+ .decodeFunctionResult('maxStrictPriceDeviation', multicallOutputs[i++])[0]
188
+ .toString()),
189
+ };
190
+ }
191
+ }
192
+ exports.VaultPriceFeed = VaultPriceFeed;
193
+ VaultPriceFeed.interface = new abi_1.Interface(vault_price_feed_json_1.default);
194
+ //# sourceMappingURL=vault-price-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-price-feed.js","sourceRoot":"","sources":["../../../src/dex/quick-perps/vault-price-feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Vault } from './vault';
2
+ import { Address } from '../../types';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ export declare class VaultUtils<State> {
5
+ protected vault: Vault<State>;
6
+ constructor(vault: Vault<State>);
7
+ getFeeBasisPoints(state: DeepReadonly<State>, _token: Address, _usdqDelta: bigint, _feeBasisPoints: bigint, _taxBasisPoints: bigint, _increment: boolean): bigint;
8
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VaultUtils = void 0;
4
+ class VaultUtils {
5
+ constructor(vault) {
6
+ this.vault = vault;
7
+ }
8
+ getFeeBasisPoints(state, _token, _usdqDelta, _feeBasisPoints, _taxBasisPoints, _increment) {
9
+ if (!this.vault.hasDynamicFees) {
10
+ return _feeBasisPoints;
11
+ }
12
+ const initialAmount = this.vault.getUSDQAmount(state, _token);
13
+ let nextAmount = initialAmount + _usdqDelta;
14
+ if (!_increment) {
15
+ nextAmount = _usdqDelta > initialAmount ? 0n : initialAmount - _usdqDelta;
16
+ }
17
+ const targetAmount = this.vault.getTargetUsdqAmount(state, _token);
18
+ if (targetAmount == 0n) {
19
+ return _feeBasisPoints;
20
+ }
21
+ const initialDiff = initialAmount > targetAmount
22
+ ? initialAmount - targetAmount
23
+ : targetAmount - initialAmount;
24
+ const nextDiff = nextAmount > targetAmount
25
+ ? nextAmount - targetAmount
26
+ : targetAmount - nextAmount;
27
+ // action improves relative asset balance
28
+ if (nextDiff < initialDiff) {
29
+ const rebateBps = (_taxBasisPoints * initialDiff) / targetAmount;
30
+ return rebateBps > _feeBasisPoints ? 0n : _feeBasisPoints - rebateBps;
31
+ }
32
+ let averageDiff = (initialDiff + nextDiff) / 2n;
33
+ if (averageDiff > targetAmount) {
34
+ averageDiff = targetAmount;
35
+ }
36
+ const taxBps = (_taxBasisPoints * averageDiff) / targetAmount;
37
+ return _feeBasisPoints + taxBps;
38
+ }
39
+ }
40
+ exports.VaultUtils = VaultUtils;
41
+ //# sourceMappingURL=vault-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-utils.js","sourceRoot":"","sources":["../../../src/dex/quick-perps/vault-utils.ts"],"names":[],"mappings":";;;AAIA,MAAa,UAAU;IACrB,YAAsB,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAE7C,iBAAiB,CACf,KAA0B,EAC1B,MAAe,EACf,UAAkB,EAClB,eAAuB,EACvB,eAAuB,EACvB,UAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAC9B,OAAO,eAAe,CAAC;SACxB;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU,CAAC;SAC3E;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,YAAY,IAAI,EAAE,EAAE;YACtB,OAAO,eAAe,CAAC;SACxB;QAED,MAAM,WAAW,GACf,aAAa,GAAG,YAAY;YAC1B,CAAC,CAAC,aAAa,GAAG,YAAY;YAC9B,CAAC,CAAC,YAAY,GAAG,aAAa,CAAC;QACnC,MAAM,QAAQ,GACZ,UAAU,GAAG,YAAY;YACvB,CAAC,CAAC,UAAU,GAAG,YAAY;YAC3B,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC;QAEhC,yCAAyC;QACzC,IAAI,QAAQ,GAAG,WAAW,EAAE;YAC1B,MAAM,SAAS,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC;YACjE,OAAO,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC;SACvE;QAED,IAAI,WAAW,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,WAAW,GAAG,YAAY,EAAE;YAC9B,WAAW,GAAG,YAAY,CAAC;SAC5B;QACD,MAAM,MAAM,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC;QAC9D,OAAO,eAAe,GAAG,MAAM,CAAC;IAClC,CAAC;CACF;AAhDD,gCAgDC"}
@@ -0,0 +1,46 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
3
+ import { PartialEventSubscriber } from '../../composed-event-subscriber';
4
+ import { Lens } from '../../lens';
5
+ import { VaultUtils } from './vault-utils';
6
+ import { VaultConfig, VaultState } from './types';
7
+ import { VaultPriceFeed } from './vault-price-feed';
8
+ import { USDQ } from './usdq';
9
+ import { MultiCallInput, MultiCallOutput, Address, Logger, Log } from '../../types';
10
+ import { BlockHeader } from 'web3-eth';
11
+ export declare class Vault<State> extends PartialEventSubscriber<State, VaultState> {
12
+ readonly vaultAddress: Address;
13
+ protected tokenAddresses: Address[];
14
+ protected vaultPriceFeed: VaultPriceFeed<State>;
15
+ protected usdq: USDQ<State>;
16
+ static readonly interface: Interface;
17
+ protected vaultUtils: VaultUtils<State>;
18
+ tokenDecimals: {
19
+ [address: string]: number;
20
+ };
21
+ stableTokens: {
22
+ [address: string]: boolean;
23
+ };
24
+ protected tokenWeights: {
25
+ [address: string]: bigint;
26
+ };
27
+ stableSwapFeeBasisPoints: bigint;
28
+ swapFeeBasisPoints: bigint;
29
+ stableTaxBasisPoints: bigint;
30
+ taxBasisPoints: bigint;
31
+ hasDynamicFees: bigint;
32
+ protected includeAmmPrice: boolean;
33
+ protected useSwapPricing: boolean;
34
+ protected totalTokenWeights: bigint;
35
+ constructor(vaultAddress: Address, tokenAddresses: Address[], config: VaultConfig, vaultPriceFeed: VaultPriceFeed<State>, usdq: USDQ<State>, lens: Lens<DeepReadonly<State>, DeepReadonly<VaultState>>, logger: Logger);
36
+ getMinPrice(state: DeepReadonly<State>, _token: Address): bigint;
37
+ getMaxPrice(state: DeepReadonly<State>, _token: Address): bigint;
38
+ getFeeBasisPoints(state: DeepReadonly<State>, _token: Address, _usdqDelta: bigint, _feeBasisPoints: bigint, _taxBasisPoints: bigint, _increment: boolean): bigint;
39
+ getTargetUsdqAmount(state: DeepReadonly<State>, _token: Address): bigint;
40
+ static getConfigMulticallInputs(vaultAddress: Address, tokenAddresses: Address[]): MultiCallInput[];
41
+ static getConfig(multicallOutputs: MultiCallOutput[], tokenAddresses: Address[]): VaultConfig;
42
+ getGenerateStateMultiCallInputs(): MultiCallInput[];
43
+ generateState(multicallOutputs: MultiCallOutput[], blockNumber?: number | 'latest'): DeepReadonly<VaultState>;
44
+ getUSDQAmount(state: DeepReadonly<State>, token: Address): bigint;
45
+ processLog(state: DeepReadonly<VaultState>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): AsyncOrSync<VaultState | null>;
46
+ }
@@ -0,0 +1,166 @@
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.Vault = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const abi_1 = require("@ethersproject/abi");
9
+ const composed_event_subscriber_1 = require("../../composed-event-subscriber");
10
+ const vault_json_1 = __importDefault(require("../../abi/quick-perps/vault.json"));
11
+ const vault_utils_1 = require("./vault-utils");
12
+ class Vault extends composed_event_subscriber_1.PartialEventSubscriber {
13
+ constructor(vaultAddress, tokenAddresses, config, vaultPriceFeed, usdq, lens, logger) {
14
+ super([vaultAddress], lens, logger);
15
+ this.vaultAddress = vaultAddress;
16
+ this.tokenAddresses = tokenAddresses;
17
+ this.vaultPriceFeed = vaultPriceFeed;
18
+ this.usdq = usdq;
19
+ this.vaultUtils = new vault_utils_1.VaultUtils(this);
20
+ this.tokenDecimals = config.tokenDecimals;
21
+ this.stableTokens = config.stableTokens;
22
+ this.tokenWeights = config.tokenWeights;
23
+ this.stableSwapFeeBasisPoints = config.stableSwapFeeBasisPoints;
24
+ this.swapFeeBasisPoints = config.swapFeeBasisPoints;
25
+ this.stableTaxBasisPoints = config.stableTaxBasisPoints;
26
+ this.taxBasisPoints = config.taxBasisPoints;
27
+ this.hasDynamicFees = config.hasDynamicFees;
28
+ this.includeAmmPrice = config.includeAmmPrice;
29
+ this.useSwapPricing = config.useSwapPricing;
30
+ this.totalTokenWeights = config.totalTokenWeights;
31
+ }
32
+ getMinPrice(state, _token) {
33
+ return this.vaultPriceFeed.getPrice(state, _token, false, this.includeAmmPrice, this.useSwapPricing);
34
+ }
35
+ getMaxPrice(state, _token) {
36
+ return this.vaultPriceFeed.getPrice(state, _token, true, this.includeAmmPrice, this.useSwapPricing);
37
+ }
38
+ getFeeBasisPoints(state, _token, _usdqDelta, _feeBasisPoints, _taxBasisPoints, _increment) {
39
+ return this.vaultUtils.getFeeBasisPoints(state, _token, _usdqDelta, _feeBasisPoints, _taxBasisPoints, _increment);
40
+ }
41
+ getTargetUsdqAmount(state, _token) {
42
+ const supply = this.usdq.getTotalSupply(state);
43
+ if (supply == 0n) {
44
+ return 0n;
45
+ }
46
+ const weight = this.tokenWeights[_token];
47
+ return (weight * supply) / this.totalTokenWeights;
48
+ }
49
+ static getConfigMulticallInputs(vaultAddress, tokenAddresses) {
50
+ return [
51
+ ...tokenAddresses.map(t => ({
52
+ target: vaultAddress,
53
+ callData: Vault.interface.encodeFunctionData('tokenDecimals', [t]),
54
+ })),
55
+ ...tokenAddresses.map(t => ({
56
+ target: vaultAddress,
57
+ callData: Vault.interface.encodeFunctionData('stableTokens', [t]),
58
+ })),
59
+ ...tokenAddresses.map(t => ({
60
+ target: vaultAddress,
61
+ callData: Vault.interface.encodeFunctionData('tokenWeights', [t]),
62
+ })),
63
+ ...[
64
+ 'stableSwapFeeBasisPoints',
65
+ 'swapFeeBasisPoints',
66
+ 'stableTaxBasisPoints',
67
+ 'taxBasisPoints',
68
+ 'hasDynamicFees',
69
+ 'includeAmmPrice',
70
+ 'useSwapPricing',
71
+ 'totalTokenWeights',
72
+ ].map(fn => ({
73
+ target: vaultAddress,
74
+ callData: Vault.interface.encodeFunctionData(fn),
75
+ })),
76
+ ];
77
+ }
78
+ static getConfig(multicallOutputs, tokenAddresses) {
79
+ let i = 0;
80
+ return {
81
+ tokenDecimals: tokenAddresses.reduce((acc, t) => {
82
+ acc[t] = parseInt(Vault.interface
83
+ .decodeFunctionResult('tokenDecimals', multicallOutputs[i++])[0]
84
+ .toString());
85
+ return acc;
86
+ }, {}),
87
+ stableTokens: tokenAddresses.reduce((acc, t) => {
88
+ acc[t] = Vault.interface.decodeFunctionResult('stableTokens', multicallOutputs[i++])[0];
89
+ return acc;
90
+ }, {}),
91
+ tokenWeights: tokenAddresses.reduce((acc, t) => {
92
+ acc[t] = BigInt(Vault.interface
93
+ .decodeFunctionResult('tokenWeights', multicallOutputs[i++])[0]
94
+ .toString());
95
+ return acc;
96
+ }, {}),
97
+ stableSwapFeeBasisPoints: BigInt(Vault.interface
98
+ .decodeFunctionResult('stableSwapFeeBasisPoints', multicallOutputs[i++])[0]
99
+ .toString()),
100
+ swapFeeBasisPoints: BigInt(Vault.interface
101
+ .decodeFunctionResult('swapFeeBasisPoints', multicallOutputs[i++])[0]
102
+ .toString()),
103
+ stableTaxBasisPoints: BigInt(Vault.interface
104
+ .decodeFunctionResult('stableTaxBasisPoints', multicallOutputs[i++])[0]
105
+ .toString()),
106
+ taxBasisPoints: BigInt(Vault.interface
107
+ .decodeFunctionResult('taxBasisPoints', multicallOutputs[i++])[0]
108
+ .toString()),
109
+ hasDynamicFees: Vault.interface.decodeFunctionResult('hasDynamicFees', multicallOutputs[i++])[0],
110
+ includeAmmPrice: Vault.interface.decodeFunctionResult('includeAmmPrice', multicallOutputs[i++])[0],
111
+ useSwapPricing: Vault.interface.decodeFunctionResult('useSwapPricing', multicallOutputs[i++])[0],
112
+ totalTokenWeights: BigInt(Vault.interface
113
+ .decodeFunctionResult('totalTokenWeights', multicallOutputs[i++])[0]
114
+ .toString()),
115
+ };
116
+ }
117
+ getGenerateStateMultiCallInputs() {
118
+ return this.tokenAddresses.map((t) => ({
119
+ target: this.vaultAddress,
120
+ callData: Vault.interface.encodeFunctionData('usdqAmounts', [t]),
121
+ }));
122
+ }
123
+ generateState(multicallOutputs, blockNumber) {
124
+ let vaultState = {
125
+ usdqAmounts: {},
126
+ };
127
+ this.tokenAddresses.forEach((t, i) => (vaultState.usdqAmounts[t] = BigInt(Vault.interface
128
+ .decodeFunctionResult('usdqAmounts', multicallOutputs[i])[0]
129
+ .toString())));
130
+ return vaultState;
131
+ }
132
+ getUSDQAmount(state, token) {
133
+ return this.lens.get()(state).usdqAmounts[token];
134
+ }
135
+ processLog(state, log, blockHeader) {
136
+ try {
137
+ const parsed = Vault.interface.parseLog(log);
138
+ const _state = lodash_1.default.cloneDeep(state);
139
+ switch (parsed.name) {
140
+ case 'IncreaseUsdqAmount': {
141
+ const tokenAddress = parsed.args.token.toLowerCase();
142
+ const amount = BigInt(parsed.args.amount.toString());
143
+ if (tokenAddress in state.usdqAmounts)
144
+ _state.usdqAmounts[tokenAddress] += amount;
145
+ return _state;
146
+ }
147
+ case 'DecreaseUsdqAmount': {
148
+ const tokenAddress = parsed.args.token.toLowerCase();
149
+ const amount = BigInt(parsed.args.amount.toString());
150
+ if (tokenAddress in state.usdqAmounts)
151
+ _state.usdqAmounts[tokenAddress] -= amount;
152
+ return _state;
153
+ }
154
+ default:
155
+ return null;
156
+ }
157
+ }
158
+ catch (e) {
159
+ this.logger.error('Failed to parse log', e);
160
+ return null;
161
+ }
162
+ }
163
+ }
164
+ exports.Vault = Vault;
165
+ Vault.interface = new abi_1.Interface(vault_json_1.default);
166
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/dex/quick-perps/vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { PartialEventSubscriber } from '../composed-event-subscriber';
3
+ import { Address, BlockHeader, Log, Logger, MultiCallInput, MultiCallOutput } from '../types';
4
+ import { Lens } from '../lens';
5
+ import { Interface } from '@ethersproject/abi';
6
+ export declare type Api3FeedSubscriberState = {
7
+ value: bigint;
8
+ timestamp: bigint;
9
+ };
10
+ export declare class Api3FeedSubscriber<State> extends PartialEventSubscriber<State, Api3FeedSubscriberState> {
11
+ private proxy;
12
+ private dataFeedId;
13
+ static readonly proxyInterface: Interface;
14
+ static readonly api3ServerV1Iface: Interface;
15
+ static readonly ANSWER_UPDATED_SIGNED_DATA: string;
16
+ static readonly ANSWER_UPDATED_BEACON_SET_DATA: string;
17
+ constructor(proxy: Address, api3Server: Address, dataFeedId: string, lens: Lens<DeepReadonly<State>, DeepReadonly<Api3FeedSubscriberState>>, logger: Logger);
18
+ static getApi3ServerV1MultiCallInput(proxy: Address): MultiCallInput;
19
+ static getDataFeedId(proxy: Address): MultiCallInput;
20
+ static decodeDataFeedId(multicallOutput: MultiCallOutput): any;
21
+ static decodeApi3ServerV1Result(multicallOutput: MultiCallOutput): Address;
22
+ processLog(state: DeepReadonly<Api3FeedSubscriberState>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): DeepReadonly<Api3FeedSubscriberState> | null;
23
+ getGenerateStateMultiCallInputs(): MultiCallInput[];
24
+ generateState(multicallOutputs: MultiCallOutput[], blockNumber?: number | 'latest'): DeepReadonly<Api3FeedSubscriberState>;
25
+ getLatestData(state: DeepReadonly<State>): bigint;
26
+ }
@@ -0,0 +1,82 @@
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.Api3FeedSubscriber = void 0;
7
+ const composed_event_subscriber_1 = require("../composed-event-subscriber");
8
+ const abi_1 = require("@ethersproject/abi");
9
+ const api3_proxy_json_1 = __importDefault(require("../abi/api3-proxy.json"));
10
+ const api3_server_v1_json_1 = __importDefault(require("../abi/api3-server-v1.json"));
11
+ class Api3FeedSubscriber extends composed_event_subscriber_1.PartialEventSubscriber {
12
+ constructor(proxy, api3Server, dataFeedId, lens, logger) {
13
+ super([api3Server], lens, logger);
14
+ this.proxy = proxy;
15
+ this.dataFeedId = dataFeedId;
16
+ }
17
+ static getApi3ServerV1MultiCallInput(proxy) {
18
+ return {
19
+ target: proxy,
20
+ callData: Api3FeedSubscriber.proxyInterface.encodeFunctionData('api3ServerV1'),
21
+ };
22
+ }
23
+ static getDataFeedId(proxy) {
24
+ return {
25
+ target: proxy,
26
+ callData: Api3FeedSubscriber.proxyInterface.encodeFunctionData('dataFeedId'),
27
+ };
28
+ }
29
+ static decodeDataFeedId(multicallOutput) {
30
+ return Api3FeedSubscriber.proxyInterface.decodeFunctionResult('dataFeedId', multicallOutput)[0];
31
+ }
32
+ static decodeApi3ServerV1Result(multicallOutput) {
33
+ return Api3FeedSubscriber.proxyInterface.decodeFunctionResult('api3ServerV1', multicallOutput)[0];
34
+ }
35
+ processLog(state, log, blockHeader) {
36
+ if (log.topics[0] === Api3FeedSubscriber.ANSWER_UPDATED_SIGNED_DATA) {
37
+ const decoded = Api3FeedSubscriber.api3ServerV1Iface.decodeEventLog('UpdatedBeaconWithSignedData', log.data, log.topics);
38
+ if (decoded.beaconId !== this.dataFeedId)
39
+ return null;
40
+ return {
41
+ value: BigInt(decoded.value.toString()),
42
+ timestamp: BigInt(decoded.timestamp.toString()),
43
+ };
44
+ }
45
+ else if (log.topics[0] === Api3FeedSubscriber.ANSWER_UPDATED_BEACON_SET_DATA) {
46
+ const decoded = Api3FeedSubscriber.api3ServerV1Iface.decodeEventLog('UpdatedBeaconSetWithBeacons', log.data, log.topics);
47
+ if (decoded.beaconSetId !== this.dataFeedId)
48
+ return null;
49
+ return {
50
+ value: BigInt(decoded.value.toString()),
51
+ timestamp: BigInt(decoded.timestamp.toString()),
52
+ };
53
+ }
54
+ else {
55
+ return null;
56
+ }
57
+ }
58
+ getGenerateStateMultiCallInputs() {
59
+ return [
60
+ {
61
+ target: this.proxy,
62
+ callData: Api3FeedSubscriber.proxyInterface.encodeFunctionData('read'),
63
+ },
64
+ ];
65
+ }
66
+ generateState(multicallOutputs, blockNumber) {
67
+ const decoded = Api3FeedSubscriber.proxyInterface.decodeFunctionResult('read', multicallOutputs[0]);
68
+ return {
69
+ value: BigInt(decoded.value.toString()),
70
+ timestamp: BigInt(decoded.timestamp.toString()),
71
+ };
72
+ }
73
+ getLatestData(state) {
74
+ return this.lens.get()(state).value;
75
+ }
76
+ }
77
+ exports.Api3FeedSubscriber = Api3FeedSubscriber;
78
+ Api3FeedSubscriber.proxyInterface = new abi_1.Interface(api3_proxy_json_1.default);
79
+ Api3FeedSubscriber.api3ServerV1Iface = new abi_1.Interface(api3_server_v1_json_1.default);
80
+ Api3FeedSubscriber.ANSWER_UPDATED_SIGNED_DATA = Api3FeedSubscriber.api3ServerV1Iface.getEventTopic('UpdatedBeaconWithSignedData');
81
+ Api3FeedSubscriber.ANSWER_UPDATED_BEACON_SET_DATA = Api3FeedSubscriber.api3ServerV1Iface.getEventTopic('UpdatedBeaconSetWithBeacons');
82
+ //# sourceMappingURL=api3-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api3-feed.js","sourceRoot":"","sources":["../../src/lib/api3-feed.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": "2.34.0",
3
+ "version": "2.35.0",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",