@paraswap/dex-lib 4.0.4 → 4.0.5-balancer-v3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +53 -0
- package/.vscode/settings.json +2 -0
- package/.vscode/tasks.json +15 -0
- package/build/abi/{integral/pool.json → inception/inception-ineth-pool.json} +558 -537
- package/build/abi/inception/inception-ratio-feed.json +329 -0
- package/build/abi/inception/inception-vault.json +991 -0
- package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
- package/build/abi/usual-m-smart-m/usualM.abi.json +483 -0
- package/build/abi/usual-m-usd0/usualCollateralDao.abi.json +681 -0
- package/build/abi/usual-m-wrapped-m/usualM.abi.json +509 -0
- package/build/abi/{integral/relayer.json → wombat/pool.json} +474 -721
- package/build/dex/aave-v1/aave-v1.d.ts +2 -1
- package/build/dex/aave-v1/aave-v1.js +23 -0
- package/build/dex/aave-v1/aave-v1.js.map +1 -1
- package/build/dex/aave-v2/tokens-avalanche.json +44 -0
- package/build/dex/aave-v2/tokens-mainnet.json +188 -0
- package/build/dex/aave-v2/tokens-polygon.json +44 -0
- package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +729 -0
- package/build/dex/balancer-v3/abi/balancerBatchRouter.js +732 -0
- package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +1 -0
- package/build/dex/balancer-v3/abi/balancerRouter.d.ts +1406 -0
- package/build/dex/balancer-v3/abi/balancerRouter.js +1175 -0
- package/build/dex/balancer-v3/abi/balancerRouter.js.map +1 -0
- package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +2081 -0
- package/build/dex/balancer-v3/abi/vaultExtension.V3.js +1851 -0
- package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +1 -0
- package/build/dex/balancer-v3/balancer-v3-pool.d.ts +1 -0
- package/build/dex/balancer-v3/balancer-v3-pool.js +29 -11
- package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -1
- package/build/dex/balancer-v3/balancer-v3-sepolia-pools.d.ts +34 -0
- package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js +406 -0
- package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js.map +1 -0
- package/build/dex/balancer-v3/config.js +1 -5
- package/build/dex/balancer-v3/config.js.map +1 -1
- package/build/dex/balancer-v3/getOnChainState.d.ts +9 -0
- package/build/dex/balancer-v3/getOnChainState.js +38 -5
- package/build/dex/balancer-v3/getOnChainState.js.map +1 -1
- package/build/dex/balancer-v3/types.d.ts +1 -0
- package/build/dex/inception/config.d.ts +4 -0
- package/build/dex/inception/config.js +109 -0
- package/build/dex/inception/config.js.map +1 -0
- package/build/dex/inception/inception-event-pool.d.ts +16 -0
- package/build/dex/inception/inception-event-pool.js +49 -0
- package/build/dex/inception/inception-event-pool.js.map +1 -0
- package/build/dex/inception/inception.d.ts +43 -0
- package/build/dex/inception/inception.js +180 -0
- package/build/dex/inception/inception.js.map +1 -0
- package/build/dex/inception/tokens.d.ts +9 -0
- package/build/dex/inception/tokens.js +28 -0
- package/build/dex/inception/tokens.js.map +1 -0
- package/build/dex/inception/types.d.ts +22 -0
- package/build/dex/inception/types.js +3 -0
- package/build/dex/inception/types.js.map +1 -0
- package/build/dex/inception/utils.d.ts +7 -0
- package/build/dex/inception/utils.js +58 -0
- package/build/dex/inception/utils.js.map +1 -0
- package/build/dex/jarvis.d.ts +2 -1
- package/build/dex/jarvis.js +58 -0
- package/build/dex/jarvis.js.map +1 -1
- package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
- package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
- package/build/dex/maker-psm/scripts/validate-state.js +185 -0
- package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
- package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
- package/build/dex/platypus/platypus.d.ts +2 -1
- package/build/dex/platypus/platypus.js +45 -0
- package/build/dex/platypus/platypus.js.map +1 -1
- package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
- package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
- package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
- package/build/dex/stable-pool.js +1 -8
- package/build/dex/stable-pool.js.map +1 -1
- package/build/dex/swaap-v1/swaap-v1.d.ts +2 -1
- package/build/dex/swaap-v1/swaap-v1.js +14 -0
- package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
- package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
- package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
- package/build/dex/uniswap-v3/uniswap-v3-pricing.d.ts +4 -0
- package/build/dex/uniswap-v3/uniswap-v3-pricing.js +43 -0
- package/build/dex/uniswap-v3/uniswap-v3-pricing.js.map +1 -0
- package/build/dex/uniswap-v3/uniswap-v3-worker.d.ts +1 -0
- package/build/dex/uniswap-v3/uniswap-v3-worker.js +10 -0
- package/build/dex/uniswap-v3/uniswap-v3-worker.js.map +1 -0
- package/build/dex/usual/types.d.ts +13 -0
- package/build/dex/usual/types.js +3 -0
- package/build/dex/usual/types.js.map +1 -0
- package/build/dex/usual/usual-bond.d.ts +18 -0
- package/build/dex/usual/usual-bond.js +52 -0
- package/build/dex/usual/usual-bond.js.map +1 -0
- package/build/dex/usual/usual-m-smart-m.d.ts +17 -0
- package/build/dex/usual/usual-m-smart-m.js +50 -0
- package/build/dex/usual/usual-m-smart-m.js.map +1 -0
- package/build/dex/usual/usual-m-usd0.d.ts +17 -0
- package/build/dex/usual/usual-m-usd0.js +51 -0
- package/build/dex/usual/usual-m-usd0.js.map +1 -0
- package/build/dex/usual/usual-m-wrapped-m.d.ts +17 -0
- package/build/dex/usual/usual-m-wrapped-m.js +50 -0
- package/build/dex/usual/usual-m-wrapped-m.js.map +1 -0
- package/build/dex/usual/usual.d.ts +27 -0
- package/build/dex/usual/usual.js +125 -0
- package/build/dex/usual/usual.js.map +1 -0
- package/build/dex/usual-m-smart-m/config.d.ts +3 -0
- package/build/dex/usual-m-smart-m/config.js +13 -0
- package/build/dex/usual-m-smart-m/config.js.map +1 -0
- package/build/dex/usual-m-smart-m/types.d.ts +7 -0
- package/build/dex/usual-m-smart-m/types.js +3 -0
- package/build/dex/usual-m-smart-m/types.js.map +1 -0
- package/build/dex/usual-m-smart-m/usual-m-smart-m.d.ts +35 -0
- package/build/dex/usual-m-smart-m/usual-m-smart-m.js +161 -0
- package/build/dex/usual-m-smart-m/usual-m-smart-m.js.map +1 -0
- package/build/dex/usual-m-usd0/config.d.ts +3 -0
- package/build/dex/usual-m-usd0/config.js +14 -0
- package/build/dex/usual-m-usd0/config.js.map +1 -0
- package/build/dex/usual-m-usd0/types.d.ts +8 -0
- package/build/dex/usual-m-usd0/types.js +3 -0
- package/build/dex/usual-m-usd0/types.js.map +1 -0
- package/build/dex/usual-m-usd0/usual-m-usd0.d.ts +35 -0
- package/build/dex/usual-m-usd0/usual-m-usd0.js +159 -0
- package/build/dex/usual-m-usd0/usual-m-usd0.js.map +1 -0
- package/build/dex/zerox/index.d.ts +4 -26
- package/build/dex/zerox/index.js +50 -42
- package/build/dex/zerox/index.js.map +1 -1
- package/build/dex/zerox/types.d.ts +29 -0
- package/build/dex/zerox/types.js +8 -1
- package/build/dex/zerox/types.js.map +1 -1
- package/build/lib/pub-sub.d.ts +35 -0
- package/build/lib/pub-sub.js +106 -0
- package/build/lib/pub-sub.js.map +1 -0
- package/package.json +1 -1
- package/src/dex/balancer-v3/balancer-v3-e2e.test.ts +30 -6
- package/src/dex/balancer-v3/balancer-v3-integration.test.ts +229 -1
- package/src/dex/balancer-v3/balancer-v3-pool.ts +52 -10
- package/src/dex/balancer-v3/config.ts +1 -5
- package/src/dex/balancer-v3/getOnChainState.ts +80 -6
- package/src/dex/balancer-v3/types.ts +1 -0
- package/tests/constants-e2e.ts +11 -0
- package/.idea/aws.xml +0 -17
- package/.idea/codeStyles/Project.xml +0 -19
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/paraswap-dex-lib.iml +0 -9
- package/.idea/prettier.xml +0 -7
- package/.idea/vcs.xml +0 -6
- package/build/abi/integral/factory.json +0 -333
- package/build/abi/integral/oracle.json +0 -501
- package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +0 -49
- package/build/dex/fluid-dex/fluid-dex-generate-pool.js +0 -104
- package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +0 -1
- package/build/dex/integral/config.d.ts +0 -4
- package/build/dex/integral/config.js +0 -20
- package/build/dex/integral/config.js.map +0 -1
- package/build/dex/integral/context.d.ts +0 -40
- package/build/dex/integral/context.js +0 -158
- package/build/dex/integral/context.js.map +0 -1
- package/build/dex/integral/integral-factory.d.ts +0 -24
- package/build/dex/integral/integral-factory.js +0 -95
- package/build/dex/integral/integral-factory.js.map +0 -1
- package/build/dex/integral/integral-pool.d.ts +0 -50
- package/build/dex/integral/integral-pool.js +0 -149
- package/build/dex/integral/integral-pool.js.map +0 -1
- package/build/dex/integral/integral-pricing.d.ts +0 -18
- package/build/dex/integral/integral-pricing.js +0 -114
- package/build/dex/integral/integral-pricing.js.map +0 -1
- package/build/dex/integral/integral-relayer.d.ts +0 -42
- package/build/dex/integral/integral-relayer.js +0 -192
- package/build/dex/integral/integral-relayer.js.map +0 -1
- package/build/dex/integral/integral-token.d.ts +0 -27
- package/build/dex/integral/integral-token.js +0 -59
- package/build/dex/integral/integral-token.js.map +0 -1
- package/build/dex/integral/integral.d.ts +0 -41
- package/build/dex/integral/integral.js +0 -376
- package/build/dex/integral/integral.js.map +0 -1
- package/build/dex/integral/types.d.ts +0 -85
- package/build/dex/integral/types.js +0 -9
- package/build/dex/integral/types.js.map +0 -1
- package/build/dex/integral/utils-e2e.d.ts +0 -9
- package/build/dex/integral/utils-e2e.js +0 -131
- package/build/dex/integral/utils-e2e.js.map +0 -1
- package/build/dex/integral/utils.d.ts +0 -17
- package/build/dex/integral/utils.js +0 -94
- package/build/dex/integral/utils.js.map +0 -1
- package/build/dex/trader-joe-v2.1/optimizer.d.ts +0 -2
- package/build/dex/trader-joe-v2.1/optimizer.js +0 -47
- package/build/dex/trader-joe-v2.1/optimizer.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Address } from '@paraswap/sdk';
|
|
1
2
|
import { NumberAsString } from '../../types';
|
|
2
3
|
export declare enum OrderStatus {
|
|
3
4
|
INVALID = 0,
|
|
@@ -41,4 +42,32 @@ export interface ZeroXSignedOrderV4 {
|
|
|
41
42
|
signature: any;
|
|
42
43
|
}
|
|
43
44
|
export declare type ZeroXSignedOrder = ZeroXSignedOrderV2 | ZeroXSignedOrderV4;
|
|
45
|
+
export declare enum ZeroXFunctions {
|
|
46
|
+
swapOnZeroXv2 = "swapOnZeroXv2",
|
|
47
|
+
swapOnZeroXv4 = "swapOnZeroXv4",
|
|
48
|
+
swapOnZeroXv2WithPermit = "swapOnZeroXv2WithPermit",
|
|
49
|
+
swapOnZeroXv4WithPermit = "swapOnZeroXv4WithPermit"
|
|
50
|
+
}
|
|
51
|
+
export declare type ZeroXData = {
|
|
52
|
+
version: number;
|
|
53
|
+
order: ZeroXSignedOrder;
|
|
54
|
+
};
|
|
55
|
+
export declare type SwapOnZeroXParam = [
|
|
56
|
+
srcToken: Address,
|
|
57
|
+
destToken: Address,
|
|
58
|
+
srcAmount: NumberAsString,
|
|
59
|
+
destAmount: NumberAsString,
|
|
60
|
+
exchange: Address,
|
|
61
|
+
payload: string
|
|
62
|
+
];
|
|
63
|
+
export declare type SwapOnZeroXWithPermitParam = [
|
|
64
|
+
srcToken: Address,
|
|
65
|
+
destToken: Address,
|
|
66
|
+
srcAmount: NumberAsString,
|
|
67
|
+
destAmount: NumberAsString,
|
|
68
|
+
exchange: Address,
|
|
69
|
+
payload: string,
|
|
70
|
+
permit: string
|
|
71
|
+
];
|
|
72
|
+
export declare type ZeroXParam = SwapOnZeroXParam | SwapOnZeroXWithPermitParam;
|
|
44
73
|
export {};
|
package/build/dex/zerox/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OrderStatus = void 0;
|
|
3
|
+
exports.ZeroXFunctions = exports.OrderStatus = void 0;
|
|
4
4
|
var OrderStatus;
|
|
5
5
|
(function (OrderStatus) {
|
|
6
6
|
OrderStatus[OrderStatus["INVALID"] = 0] = "INVALID";
|
|
@@ -11,4 +11,11 @@ var OrderStatus;
|
|
|
11
11
|
OrderStatus[OrderStatus["FULLY_FILLED"] = 5] = "FULLY_FILLED";
|
|
12
12
|
OrderStatus[OrderStatus["CANCELLED"] = 6] = "CANCELLED";
|
|
13
13
|
})(OrderStatus = exports.OrderStatus || (exports.OrderStatus = {}));
|
|
14
|
+
var ZeroXFunctions;
|
|
15
|
+
(function (ZeroXFunctions) {
|
|
16
|
+
ZeroXFunctions["swapOnZeroXv2"] = "swapOnZeroXv2";
|
|
17
|
+
ZeroXFunctions["swapOnZeroXv4"] = "swapOnZeroXv4";
|
|
18
|
+
ZeroXFunctions["swapOnZeroXv2WithPermit"] = "swapOnZeroXv2WithPermit";
|
|
19
|
+
ZeroXFunctions["swapOnZeroXv4WithPermit"] = "swapOnZeroXv4WithPermit";
|
|
20
|
+
})(ZeroXFunctions = exports.ZeroXFunctions || (exports.ZeroXFunctions = {}));
|
|
14
21
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/zerox/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/zerox/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,WAQX;AARD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,yFAA0B,CAAA;IAC1B,yFAA0B,CAAA;IAC1B,qDAAQ,CAAA;IACR,mDAAO,CAAA;IACP,6DAAY,CAAA;IACZ,uDAAS,CAAA;AACX,CAAC,EARW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAQtB;AAuCD,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,qEAAmD,CAAA;IACnD,qEAAmD,CAAA;AACrD,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import NodeCache from 'node-cache';
|
|
2
|
+
import { Network } from '../constants';
|
|
3
|
+
import { IDexHelper } from '../dex-helper';
|
|
4
|
+
type JsonPubSubMsg = {
|
|
5
|
+
expiresAt: number;
|
|
6
|
+
data: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
type SetPubSubMsg = string[];
|
|
9
|
+
export declare class JsonPubSub {
|
|
10
|
+
private dexHelper;
|
|
11
|
+
private dexKey;
|
|
12
|
+
channel: string;
|
|
13
|
+
network: Network;
|
|
14
|
+
localCache: NodeCache;
|
|
15
|
+
constructor(dexHelper: IDexHelper, dexKey: string, channel: string);
|
|
16
|
+
initialize(): void;
|
|
17
|
+
subscribe(): void;
|
|
18
|
+
publish(data: Record<string, unknown>, ttl: number): void;
|
|
19
|
+
handleSubscription(json: JsonPubSubMsg): void;
|
|
20
|
+
getAndCache<T>(key: string): Promise<T | null>;
|
|
21
|
+
}
|
|
22
|
+
export declare class SetPubSub {
|
|
23
|
+
private dexHelper;
|
|
24
|
+
private dexKey;
|
|
25
|
+
channel: string;
|
|
26
|
+
network: Network;
|
|
27
|
+
set: Set<string>;
|
|
28
|
+
constructor(dexHelper: IDexHelper, dexKey: string, channel: string);
|
|
29
|
+
initialize(key: string): Promise<void>;
|
|
30
|
+
subscribe(): void;
|
|
31
|
+
publish(set: SetPubSubMsg): void;
|
|
32
|
+
handleSubscription(set: SetPubSubMsg): void;
|
|
33
|
+
has(key: string): Promise<boolean>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
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.SetPubSub = exports.JsonPubSub = void 0;
|
|
7
|
+
const node_cache_1 = __importDefault(require("node-cache"));
|
|
8
|
+
class JsonPubSub {
|
|
9
|
+
dexHelper;
|
|
10
|
+
dexKey;
|
|
11
|
+
channel;
|
|
12
|
+
network;
|
|
13
|
+
localCache = new node_cache_1.default();
|
|
14
|
+
constructor(dexHelper, dexKey, channel) {
|
|
15
|
+
this.dexHelper = dexHelper;
|
|
16
|
+
this.dexKey = dexKey;
|
|
17
|
+
this.network = this.dexHelper.config.data.network;
|
|
18
|
+
this.channel = `${this.network}_${this.dexKey}_${channel}`;
|
|
19
|
+
}
|
|
20
|
+
initialize() {
|
|
21
|
+
this.subscribe();
|
|
22
|
+
}
|
|
23
|
+
subscribe() {
|
|
24
|
+
this.dexHelper.cache.subscribe(this.channel, (_, msg) => {
|
|
25
|
+
const decodedMsg = JSON.parse(msg);
|
|
26
|
+
this.handleSubscription(decodedMsg);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
publish(data, ttl) {
|
|
30
|
+
const expiresAt = Math.round(Date.now() / 1000) + ttl;
|
|
31
|
+
this.dexHelper.cache.publish(this.channel, JSON.stringify({ expiresAt, data }));
|
|
32
|
+
}
|
|
33
|
+
handleSubscription(json) {
|
|
34
|
+
const { expiresAt, data } = json;
|
|
35
|
+
const now = Math.round(Date.now() / 1000);
|
|
36
|
+
// calculating ttl as message might come with the delay
|
|
37
|
+
const ttl = expiresAt - now;
|
|
38
|
+
const keys = Object.keys(data);
|
|
39
|
+
for (const key of keys) {
|
|
40
|
+
this.localCache.set(key, data[key], ttl);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async getAndCache(key) {
|
|
44
|
+
const localValue = this.localCache.get(key);
|
|
45
|
+
if (localValue) {
|
|
46
|
+
return localValue;
|
|
47
|
+
}
|
|
48
|
+
const [value, ttl] = await Promise.all([
|
|
49
|
+
this.dexHelper.cache.get(this.dexKey, this.network, key),
|
|
50
|
+
this.dexHelper.cache.ttl(this.dexKey, this.network, key),
|
|
51
|
+
]);
|
|
52
|
+
if (value) {
|
|
53
|
+
// setting ttl same as in cache
|
|
54
|
+
// TODO-ps: check if ttl is not null
|
|
55
|
+
const parsedValue = JSON.parse(value);
|
|
56
|
+
this.localCache.set(key, parsedValue, Number(ttl));
|
|
57
|
+
return parsedValue;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.JsonPubSub = JsonPubSub;
|
|
63
|
+
class SetPubSub {
|
|
64
|
+
dexHelper;
|
|
65
|
+
dexKey;
|
|
66
|
+
channel;
|
|
67
|
+
network;
|
|
68
|
+
set = new Set();
|
|
69
|
+
constructor(dexHelper, dexKey, channel) {
|
|
70
|
+
this.dexHelper = dexHelper;
|
|
71
|
+
this.dexKey = dexKey;
|
|
72
|
+
this.network = this.dexHelper.config.data.network;
|
|
73
|
+
this.channel = `${this.network}_${this.dexKey}_${channel}`;
|
|
74
|
+
}
|
|
75
|
+
async initialize(key) {
|
|
76
|
+
// as there's no lazy load, we need to initialize the set
|
|
77
|
+
const initSet = await this.dexHelper.cache.smembers(key);
|
|
78
|
+
for (const member of initSet) {
|
|
79
|
+
this.set.add(member);
|
|
80
|
+
}
|
|
81
|
+
this.subscribe();
|
|
82
|
+
}
|
|
83
|
+
subscribe() {
|
|
84
|
+
this.dexHelper.cache.subscribe(this.channel, (_, msg) => {
|
|
85
|
+
const decodedMsg = JSON.parse(msg);
|
|
86
|
+
this.handleSubscription(decodedMsg);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
publish(set) {
|
|
90
|
+
// as there's no lazy load, also store locally
|
|
91
|
+
for (const key of set) {
|
|
92
|
+
this.set.add(key);
|
|
93
|
+
}
|
|
94
|
+
this.dexHelper.cache.publish(this.channel, JSON.stringify(set));
|
|
95
|
+
}
|
|
96
|
+
handleSubscription(set) {
|
|
97
|
+
for (const key of set) {
|
|
98
|
+
this.set.add(key);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async has(key) {
|
|
102
|
+
return this.set.has(key);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.SetPubSub = SetPubSub;
|
|
106
|
+
//# sourceMappingURL=pub-sub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pub-sub.js","sourceRoot":"","sources":["../../src/lib/pub-sub.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -216,8 +216,8 @@ describe('BalancerV3 E2E', () => {
|
|
|
216
216
|
const tokenASymbol: string = 'WXDAI';
|
|
217
217
|
const tokenBSymbol: string = 'COW';
|
|
218
218
|
|
|
219
|
-
const tokenAAmount: string = '
|
|
220
|
-
const tokenBAmount: string = '
|
|
219
|
+
const tokenAAmount: string = '100000000000000000';
|
|
220
|
+
const tokenBAmount: string = '100000000000000000';
|
|
221
221
|
const nativeTokenAmount = '100000000000000';
|
|
222
222
|
|
|
223
223
|
testForNetwork(
|
|
@@ -233,12 +233,12 @@ describe('BalancerV3 E2E', () => {
|
|
|
233
233
|
});
|
|
234
234
|
|
|
235
235
|
describe('Weighed Path', () => {
|
|
236
|
-
const tokenASymbol: string = '
|
|
237
|
-
const tokenBSymbol: string = '
|
|
236
|
+
const tokenASymbol: string = 'sDAI';
|
|
237
|
+
const tokenBSymbol: string = 'XDAI';
|
|
238
238
|
|
|
239
|
-
const tokenAAmount: string = '
|
|
239
|
+
const tokenAAmount: string = '100000000000000000';
|
|
240
240
|
const tokenBAmount: string = '100000000000000000';
|
|
241
|
-
const nativeTokenAmount = '
|
|
241
|
+
const nativeTokenAmount = '100000000000000000';
|
|
242
242
|
|
|
243
243
|
testForNetwork(
|
|
244
244
|
network,
|
|
@@ -272,4 +272,28 @@ describe('BalancerV3 E2E', () => {
|
|
|
272
272
|
);
|
|
273
273
|
});
|
|
274
274
|
});
|
|
275
|
+
|
|
276
|
+
describe('Mainnet', () => {
|
|
277
|
+
const network = Network.MAINNET;
|
|
278
|
+
|
|
279
|
+
describe('Stable Path', () => {
|
|
280
|
+
const tokenASymbol: string = 'wUSDL';
|
|
281
|
+
const tokenBSymbol: string = 'USDC';
|
|
282
|
+
|
|
283
|
+
const tokenAAmount: string = '1000000000000000000';
|
|
284
|
+
const tokenBAmount: string = '10000000';
|
|
285
|
+
const nativeTokenAmount = '0';
|
|
286
|
+
|
|
287
|
+
testForNetwork(
|
|
288
|
+
network,
|
|
289
|
+
dexKey,
|
|
290
|
+
tokenASymbol,
|
|
291
|
+
tokenBSymbol,
|
|
292
|
+
tokenAAmount,
|
|
293
|
+
tokenBAmount,
|
|
294
|
+
nativeTokenAmount,
|
|
295
|
+
false,
|
|
296
|
+
);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
275
299
|
});
|
|
@@ -187,7 +187,7 @@ async function checkOnChainPricingNonMulti(
|
|
|
187
187
|
// test match for each returned price
|
|
188
188
|
for (const price of prices) {
|
|
189
189
|
let expectedPrices: bigint[] = [];
|
|
190
|
-
if (price.data.steps.length === 1)
|
|
190
|
+
if (price.data.steps.length === 1 && !price.data.steps[0].isBuffer)
|
|
191
191
|
expectedPrices = await querySinglePathPrices(
|
|
192
192
|
network,
|
|
193
193
|
side,
|
|
@@ -831,6 +831,234 @@ describe('BalancerV3', function () {
|
|
|
831
831
|
}
|
|
832
832
|
});
|
|
833
833
|
});
|
|
834
|
+
|
|
835
|
+
describe('Buffer, Nested Rate', () => {
|
|
836
|
+
/*
|
|
837
|
+
The Gnosis pool, 0x272d6be442e30d7c87390edeb9b96f1e84cecd8d uses a rate provider that is nested.
|
|
838
|
+
So unwrap rate does not equal rate between aave wsteth and eth.
|
|
839
|
+
This particular case the rate provider accounts for growth of wsteth in terms of weth and the additional aave yield.
|
|
840
|
+
This highlighted that rateProvider can not be used for buffer wrap/unwrap which instead should use erc4626 rate.
|
|
841
|
+
*/
|
|
842
|
+
const dexHelper = new DummyDexHelper(network);
|
|
843
|
+
|
|
844
|
+
const tokens = Tokens[network];
|
|
845
|
+
const srcTokenSymbol = 'wstETH';
|
|
846
|
+
const destTokenSymbol = 'waGnowstETH';
|
|
847
|
+
|
|
848
|
+
const amountsForSell = [
|
|
849
|
+
0n,
|
|
850
|
+
1n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
851
|
+
100n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
852
|
+
];
|
|
853
|
+
|
|
854
|
+
const amountsForBuy = [
|
|
855
|
+
0n,
|
|
856
|
+
1n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
857
|
+
100n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
858
|
+
];
|
|
859
|
+
|
|
860
|
+
beforeAll(async () => {
|
|
861
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
862
|
+
balancerV3 = new BalancerV3(network, dexKey, dexHelper);
|
|
863
|
+
if (balancerV3.initializePricing) {
|
|
864
|
+
await balancerV3.initializePricing(blockNumber);
|
|
865
|
+
}
|
|
866
|
+
});
|
|
867
|
+
|
|
868
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
869
|
+
await testPricingOnNetwork(
|
|
870
|
+
balancerV3,
|
|
871
|
+
network,
|
|
872
|
+
dexKey,
|
|
873
|
+
blockNumber,
|
|
874
|
+
srcTokenSymbol,
|
|
875
|
+
destTokenSymbol,
|
|
876
|
+
SwapSide.SELL,
|
|
877
|
+
amountsForSell,
|
|
878
|
+
);
|
|
879
|
+
});
|
|
880
|
+
|
|
881
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
882
|
+
await testPricingOnNetwork(
|
|
883
|
+
balancerV3,
|
|
884
|
+
network,
|
|
885
|
+
dexKey,
|
|
886
|
+
blockNumber,
|
|
887
|
+
srcTokenSymbol,
|
|
888
|
+
destTokenSymbol,
|
|
889
|
+
SwapSide.BUY,
|
|
890
|
+
amountsForBuy,
|
|
891
|
+
);
|
|
892
|
+
});
|
|
893
|
+
});
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
describe('Mainnet', () => {
|
|
897
|
+
const network = Network.MAINNET;
|
|
898
|
+
describe('Token/Underlying With Different Decimals', () => {
|
|
899
|
+
/*
|
|
900
|
+
Mainnet Pool, 0x5dd88b3aa3143173eb26552923922bdf33f50949 has an ERC4626 token with 18 decimals that uses a 6 decimal underlying.
|
|
901
|
+
Note for maths: Instead of manually adding support for each ERC4626 implementation (e.g. stata with Ray maths) we always use an
|
|
902
|
+
18 decimal scaled rate and do 18 decimal maths to convert. We may end up loosing 100% accuracy but thats deemed acceptable.
|
|
903
|
+
*/
|
|
904
|
+
describe.only('Buffer wrap 6decimal>18decimal', () => {
|
|
905
|
+
const dexHelper = new DummyDexHelper(network);
|
|
906
|
+
|
|
907
|
+
const tokens = Tokens[network];
|
|
908
|
+
const srcTokenSymbol = 'USDC';
|
|
909
|
+
const destTokenSymbol = 'steakUSDC';
|
|
910
|
+
|
|
911
|
+
const amountsForSell = [
|
|
912
|
+
0n,
|
|
913
|
+
1n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
914
|
+
10n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
915
|
+
];
|
|
916
|
+
|
|
917
|
+
const amountsForBuy = [
|
|
918
|
+
0n,
|
|
919
|
+
1n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
920
|
+
10n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
921
|
+
];
|
|
922
|
+
|
|
923
|
+
beforeAll(async () => {
|
|
924
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
925
|
+
balancerV3 = new BalancerV3(network, dexKey, dexHelper);
|
|
926
|
+
if (balancerV3.initializePricing) {
|
|
927
|
+
await balancerV3.initializePricing(blockNumber);
|
|
928
|
+
}
|
|
929
|
+
});
|
|
930
|
+
|
|
931
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
932
|
+
await testPricingOnNetwork(
|
|
933
|
+
balancerV3,
|
|
934
|
+
network,
|
|
935
|
+
dexKey,
|
|
936
|
+
blockNumber,
|
|
937
|
+
srcTokenSymbol,
|
|
938
|
+
destTokenSymbol,
|
|
939
|
+
SwapSide.SELL,
|
|
940
|
+
amountsForSell,
|
|
941
|
+
);
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
945
|
+
await testPricingOnNetwork(
|
|
946
|
+
balancerV3,
|
|
947
|
+
network,
|
|
948
|
+
dexKey,
|
|
949
|
+
blockNumber,
|
|
950
|
+
srcTokenSymbol,
|
|
951
|
+
destTokenSymbol,
|
|
952
|
+
SwapSide.BUY,
|
|
953
|
+
amountsForBuy,
|
|
954
|
+
);
|
|
955
|
+
});
|
|
956
|
+
});
|
|
957
|
+
describe('Buffer unwrap 18decimal>6decimal', () => {
|
|
958
|
+
const dexHelper = new DummyDexHelper(network);
|
|
959
|
+
|
|
960
|
+
const tokens = Tokens[network];
|
|
961
|
+
const srcTokenSymbol = 'steakUSDC';
|
|
962
|
+
const destTokenSymbol = 'USDC';
|
|
963
|
+
|
|
964
|
+
const amountsForSell = [
|
|
965
|
+
0n,
|
|
966
|
+
1n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
967
|
+
10n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
968
|
+
];
|
|
969
|
+
|
|
970
|
+
const amountsForBuy = [
|
|
971
|
+
0n,
|
|
972
|
+
1n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
973
|
+
10n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
974
|
+
];
|
|
975
|
+
|
|
976
|
+
beforeAll(async () => {
|
|
977
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
978
|
+
balancerV3 = new BalancerV3(network, dexKey, dexHelper);
|
|
979
|
+
if (balancerV3.initializePricing) {
|
|
980
|
+
await balancerV3.initializePricing(blockNumber);
|
|
981
|
+
}
|
|
982
|
+
});
|
|
983
|
+
|
|
984
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
985
|
+
await testPricingOnNetwork(
|
|
986
|
+
balancerV3,
|
|
987
|
+
network,
|
|
988
|
+
dexKey,
|
|
989
|
+
blockNumber,
|
|
990
|
+
srcTokenSymbol,
|
|
991
|
+
destTokenSymbol,
|
|
992
|
+
SwapSide.SELL,
|
|
993
|
+
amountsForSell,
|
|
994
|
+
);
|
|
995
|
+
});
|
|
996
|
+
|
|
997
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
998
|
+
await testPricingOnNetwork(
|
|
999
|
+
balancerV3,
|
|
1000
|
+
network,
|
|
1001
|
+
dexKey,
|
|
1002
|
+
blockNumber,
|
|
1003
|
+
srcTokenSymbol,
|
|
1004
|
+
destTokenSymbol,
|
|
1005
|
+
SwapSide.BUY,
|
|
1006
|
+
amountsForBuy,
|
|
1007
|
+
);
|
|
1008
|
+
});
|
|
1009
|
+
});
|
|
1010
|
+
describe('Full boosted path', () => {
|
|
1011
|
+
const dexHelper = new DummyDexHelper(network);
|
|
1012
|
+
|
|
1013
|
+
const tokens = Tokens[network];
|
|
1014
|
+
const srcTokenSymbol = 'wUSDL';
|
|
1015
|
+
const destTokenSymbol = 'USDC';
|
|
1016
|
+
|
|
1017
|
+
const amountsForSell = [
|
|
1018
|
+
0n,
|
|
1019
|
+
1n * BI_POWS[tokens[srcTokenSymbol].decimals],
|
|
1020
|
+
];
|
|
1021
|
+
|
|
1022
|
+
const amountsForBuy = [
|
|
1023
|
+
0n,
|
|
1024
|
+
1n * BI_POWS[tokens[destTokenSymbol].decimals],
|
|
1025
|
+
];
|
|
1026
|
+
|
|
1027
|
+
beforeAll(async () => {
|
|
1028
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
1029
|
+
balancerV3 = new BalancerV3(network, dexKey, dexHelper);
|
|
1030
|
+
if (balancerV3.initializePricing) {
|
|
1031
|
+
await balancerV3.initializePricing(blockNumber);
|
|
1032
|
+
}
|
|
1033
|
+
});
|
|
1034
|
+
|
|
1035
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
1036
|
+
await testPricingOnNetwork(
|
|
1037
|
+
balancerV3,
|
|
1038
|
+
network,
|
|
1039
|
+
dexKey,
|
|
1040
|
+
blockNumber,
|
|
1041
|
+
srcTokenSymbol,
|
|
1042
|
+
destTokenSymbol,
|
|
1043
|
+
SwapSide.SELL,
|
|
1044
|
+
amountsForSell,
|
|
1045
|
+
);
|
|
1046
|
+
});
|
|
1047
|
+
|
|
1048
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
1049
|
+
await testPricingOnNetwork(
|
|
1050
|
+
balancerV3,
|
|
1051
|
+
network,
|
|
1052
|
+
dexKey,
|
|
1053
|
+
blockNumber,
|
|
1054
|
+
srcTokenSymbol,
|
|
1055
|
+
destTokenSymbol,
|
|
1056
|
+
SwapSide.BUY,
|
|
1057
|
+
amountsForBuy,
|
|
1058
|
+
);
|
|
1059
|
+
});
|
|
1060
|
+
});
|
|
1061
|
+
});
|
|
834
1062
|
});
|
|
835
1063
|
});
|
|
836
1064
|
|
|
@@ -14,7 +14,12 @@ import {
|
|
|
14
14
|
} from './types';
|
|
15
15
|
import { getPoolsApi } from './getPoolsApi';
|
|
16
16
|
import vaultExtensionAbi_V3 from '../../abi/balancer-v3/vault-extension.json';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
decodeErc4626MultiCallData,
|
|
19
|
+
decodeThrowError,
|
|
20
|
+
getErc4626MultiCallData,
|
|
21
|
+
getOnChainState,
|
|
22
|
+
} from './getOnChainState';
|
|
18
23
|
import { BalancerV3Config } from './config';
|
|
19
24
|
import { SwapKind, Vault } from '@balancer-labs/balancer-maths';
|
|
20
25
|
import {
|
|
@@ -25,7 +30,7 @@ import {
|
|
|
25
30
|
} from './stablePool';
|
|
26
31
|
import { BI_POWS } from '../../bigint-constants';
|
|
27
32
|
|
|
28
|
-
const WAD = BI_POWS[18];
|
|
33
|
+
export const WAD = BI_POWS[18];
|
|
29
34
|
|
|
30
35
|
export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
31
36
|
handlers: {
|
|
@@ -65,6 +70,9 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
65
70
|
'function getAmplificationParameter() external view returns (uint256 value, bool isUpdating, uint256 precision)',
|
|
66
71
|
'function getAmplificationState() external view returns (tuple(uint64 startValue, uint64 endValue, uint32 startTime, uint32 endTime) amplificationState, uint256 precision)',
|
|
67
72
|
]),
|
|
73
|
+
['ERC4626']: new Interface([
|
|
74
|
+
'function convertToAssets(uint256 shares) external view returns (uint256 assets)',
|
|
75
|
+
]),
|
|
68
76
|
};
|
|
69
77
|
|
|
70
78
|
this.logDecoder = (log: Log) => this.interfaces['VAULT'].parseLog(log);
|
|
@@ -445,11 +453,12 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
445
453
|
if (!poolState) return;
|
|
446
454
|
|
|
447
455
|
// Fetch onchain pool rates
|
|
448
|
-
const poolRates = await this.getPoolRates(
|
|
456
|
+
const poolRates = await this.getPoolRates(poolState);
|
|
449
457
|
|
|
450
458
|
// Update each pools rate
|
|
451
|
-
poolRates.forEach(({ poolAddress, tokenRates }, i) => {
|
|
459
|
+
poolRates.forEach(({ poolAddress, tokenRates, erc4626Rates }, i) => {
|
|
452
460
|
poolState[poolAddress].tokenRates = tokenRates;
|
|
461
|
+
poolState[poolAddress].erc4626Rates = erc4626Rates;
|
|
453
462
|
});
|
|
454
463
|
|
|
455
464
|
// Update state
|
|
@@ -457,9 +466,15 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
457
466
|
this.setState(poolState, blockNumber);
|
|
458
467
|
}
|
|
459
468
|
|
|
460
|
-
private async getPoolRates(
|
|
469
|
+
private async getPoolRates(poolState: PoolStateMap) {
|
|
470
|
+
const erc4626MultiCallData = getErc4626MultiCallData(
|
|
471
|
+
this.interfaces['ERC4626'],
|
|
472
|
+
poolState,
|
|
473
|
+
);
|
|
474
|
+
|
|
475
|
+
const poolAddresses = Object.keys(poolState);
|
|
461
476
|
// For each pool make the getPoolTokenRates call
|
|
462
|
-
const
|
|
477
|
+
const poolsMultiCallData = poolAddresses.map(address => {
|
|
463
478
|
return {
|
|
464
479
|
target: BalancerV3Config.BalancerV3[this.network].vaultAddress,
|
|
465
480
|
callData: this.interfaces['VAULT'].encodeFunctionData(
|
|
@@ -469,10 +484,13 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
469
484
|
};
|
|
470
485
|
});
|
|
471
486
|
// 500 is an arbitrary number chosen based on the blockGasLimit
|
|
472
|
-
const slicedMultiCallData = _.chunk(
|
|
487
|
+
const slicedMultiCallData = _.chunk(
|
|
488
|
+
[...erc4626MultiCallData, ...poolsMultiCallData],
|
|
489
|
+
500,
|
|
490
|
+
);
|
|
473
491
|
|
|
474
492
|
// Make the multicall
|
|
475
|
-
const
|
|
493
|
+
const multicallDataResult = (
|
|
476
494
|
await Promise.all(
|
|
477
495
|
slicedMultiCallData.map(async _multiCallData =>
|
|
478
496
|
this.dexHelper.multiContract.methods
|
|
@@ -482,16 +500,34 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
482
500
|
)
|
|
483
501
|
).flat();
|
|
484
502
|
|
|
503
|
+
const dataResultErc4626 = multicallDataResult.slice(
|
|
504
|
+
0,
|
|
505
|
+
erc4626MultiCallData.length,
|
|
506
|
+
);
|
|
507
|
+
const dataResultPools = multicallDataResult.slice(
|
|
508
|
+
erc4626MultiCallData.length,
|
|
509
|
+
);
|
|
510
|
+
|
|
511
|
+
const tokensWithRates = decodeErc4626MultiCallData(
|
|
512
|
+
this.interfaces['ERC4626'],
|
|
513
|
+
erc4626MultiCallData,
|
|
514
|
+
dataResultErc4626,
|
|
515
|
+
);
|
|
516
|
+
|
|
485
517
|
return poolAddresses.map((address, i) => {
|
|
486
518
|
const tokenRateResult = decodeThrowError(
|
|
487
519
|
this.interfaces['VAULT'],
|
|
488
520
|
'getPoolTokenRates',
|
|
489
|
-
|
|
521
|
+
dataResultPools[i],
|
|
490
522
|
address,
|
|
491
523
|
);
|
|
492
524
|
return {
|
|
493
525
|
poolAddress: address,
|
|
494
526
|
tokenRates: tokenRateResult.tokenRates.map((r: string) => BigInt(r)),
|
|
527
|
+
erc4626Rates: poolState[address].tokens.map(t => {
|
|
528
|
+
if (!tokensWithRates[t]) return null;
|
|
529
|
+
return tokensWithRates[t];
|
|
530
|
+
}),
|
|
495
531
|
};
|
|
496
532
|
});
|
|
497
533
|
}
|
|
@@ -522,12 +558,18 @@ export class BalancerV3EventPool extends StatefulEventSubscriber<PoolStateMap> {
|
|
|
522
558
|
address && address.toLowerCase() === tokenAddress.toLowerCase(),
|
|
523
559
|
);
|
|
524
560
|
if (tokenIndex !== -1) {
|
|
561
|
+
if (poolState.erc4626Rates[tokenIndex] === null) {
|
|
562
|
+
this.logger.error(
|
|
563
|
+
`missing erc4626 token rate ${poolState.tokens[tokenIndex]}`,
|
|
564
|
+
);
|
|
565
|
+
return null;
|
|
566
|
+
}
|
|
525
567
|
return {
|
|
526
568
|
isBoosted: true,
|
|
527
569
|
mainToken: poolState.tokens[tokenIndex],
|
|
528
570
|
underlyingToken: tokenAddress,
|
|
529
571
|
index: tokenIndex,
|
|
530
|
-
rate: poolState.
|
|
572
|
+
rate: poolState.erc4626Rates[tokenIndex]!,
|
|
531
573
|
};
|
|
532
574
|
}
|
|
533
575
|
}
|
|
@@ -10,11 +10,7 @@ export enum SUPPORTED_POOLS {
|
|
|
10
10
|
|
|
11
11
|
export const disabledPoolIds: Record<string, Record<number, string[]>> = {
|
|
12
12
|
BalancerV3: {
|
|
13
|
-
[Network.GNOSIS]: [
|
|
14
|
-
// pools with rate provider that returns nested rate instead of wrap/unwrap rate
|
|
15
|
-
'0x6e6bb18449fcf15b79efa2cfa70acf7593088029',
|
|
16
|
-
'0x272d6be442e30d7c87390edeb9b96f1e84cecd8d',
|
|
17
|
-
],
|
|
13
|
+
[Network.GNOSIS]: [],
|
|
18
14
|
},
|
|
19
15
|
};
|
|
20
16
|
|