@hyperlane-xyz/rebalancer 0.1.2 → 1.0.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/README.md +134 -14
- package/dist/config/RebalancerConfig.d.ts +2 -2
- package/dist/config/RebalancerConfig.d.ts.map +1 -1
- package/dist/config/RebalancerConfig.js +4 -3
- package/dist/config/RebalancerConfig.js.map +1 -1
- package/dist/config/RebalancerConfig.test.js +434 -163
- package/dist/config/RebalancerConfig.test.js.map +1 -1
- package/dist/config/types.d.ts +1650 -290
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +124 -46
- package/dist/config/types.js.map +1 -1
- package/dist/core/Rebalancer.d.ts +14 -7
- package/dist/core/Rebalancer.d.ts.map +1 -1
- package/dist/core/Rebalancer.js +168 -99
- package/dist/core/Rebalancer.js.map +1 -1
- package/dist/core/Rebalancer.test.d.ts +2 -0
- package/dist/core/Rebalancer.test.d.ts.map +1 -0
- package/dist/core/Rebalancer.test.js +391 -0
- package/dist/core/Rebalancer.test.js.map +1 -0
- package/dist/core/RebalancerService.d.ts +16 -2
- package/dist/core/RebalancerService.d.ts.map +1 -1
- package/dist/core/RebalancerService.js +164 -21
- package/dist/core/RebalancerService.js.map +1 -1
- package/dist/core/RebalancerService.test.d.ts +2 -0
- package/dist/core/RebalancerService.test.d.ts.map +1 -0
- package/dist/core/RebalancerService.test.js +809 -0
- package/dist/core/RebalancerService.test.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.d.ts +11 -0
- package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
- package/dist/factories/RebalancerContextFactory.js +60 -13
- package/dist/factories/RebalancerContextFactory.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IMonitor.d.ts +6 -8
- package/dist/interfaces/IMonitor.d.ts.map +1 -1
- package/dist/interfaces/IMonitor.js.map +1 -1
- package/dist/interfaces/IRebalancer.d.ts +20 -4
- package/dist/interfaces/IRebalancer.d.ts.map +1 -1
- package/dist/interfaces/IStrategy.d.ts +18 -2
- package/dist/interfaces/IStrategy.d.ts.map +1 -1
- package/dist/metrics/Metrics.d.ts +4 -2
- package/dist/metrics/Metrics.d.ts.map +1 -1
- package/dist/metrics/Metrics.js +21 -1
- package/dist/metrics/Metrics.js.map +1 -1
- package/dist/metrics/scripts/metrics.d.ts +2 -0
- package/dist/metrics/scripts/metrics.d.ts.map +1 -1
- package/dist/metrics/scripts/metrics.js +12 -0
- package/dist/metrics/scripts/metrics.js.map +1 -1
- package/dist/monitor/Monitor.d.ts +8 -3
- package/dist/monitor/Monitor.d.ts.map +1 -1
- package/dist/monitor/Monitor.js +75 -15
- package/dist/monitor/Monitor.js.map +1 -1
- package/dist/strategy/BaseStrategy.d.ts +51 -5
- package/dist/strategy/BaseStrategy.d.ts.map +1 -1
- package/dist/strategy/BaseStrategy.js +199 -19
- package/dist/strategy/BaseStrategy.js.map +1 -1
- package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
- package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.js +245 -0
- package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js +364 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
- package/dist/strategy/CompositeStrategy.d.ts +18 -0
- package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.js +63 -0
- package/dist/strategy/CompositeStrategy.js.map +1 -0
- package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
- package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.test.js +265 -0
- package/dist/strategy/CompositeStrategy.test.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.d.ts +12 -5
- package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
- package/dist/strategy/MinAmountStrategy.js +23 -14
- package/dist/strategy/MinAmountStrategy.js.map +1 -1
- package/dist/strategy/MinAmountStrategy.test.js +88 -20
- package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
- package/dist/strategy/StrategyFactory.d.ts +15 -6
- package/dist/strategy/StrategyFactory.d.ts.map +1 -1
- package/dist/strategy/StrategyFactory.js +48 -10
- package/dist/strategy/StrategyFactory.js.map +1 -1
- package/dist/strategy/StrategyFactory.test.js +2 -2
- package/dist/strategy/StrategyFactory.test.js.map +1 -1
- package/dist/strategy/WeightedStrategy.d.ts +13 -4
- package/dist/strategy/WeightedStrategy.d.ts.map +1 -1
- package/dist/strategy/WeightedStrategy.js +18 -6
- package/dist/strategy/WeightedStrategy.js.map +1 -1
- package/dist/strategy/WeightedStrategy.test.js +108 -18
- package/dist/strategy/WeightedStrategy.test.js.map +1 -1
- package/dist/strategy/index.d.ts +2 -0
- package/dist/strategy/index.d.ts.map +1 -1
- package/dist/strategy/index.js +2 -0
- package/dist/strategy/index.js.map +1 -1
- package/dist/test/helpers.d.ts +93 -3
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +267 -10
- package/dist/test/helpers.js.map +1 -1
- package/dist/tracking/ActionTracker.d.ts +49 -0
- package/dist/tracking/ActionTracker.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.js +422 -0
- package/dist/tracking/ActionTracker.js.map +1 -0
- package/dist/tracking/ActionTracker.test.d.ts +2 -0
- package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.test.js +637 -0
- package/dist/tracking/ActionTracker.test.js.map +1 -0
- package/dist/tracking/IActionTracker.d.ts +101 -0
- package/dist/tracking/IActionTracker.d.ts.map +1 -0
- package/dist/tracking/IActionTracker.js +2 -0
- package/dist/tracking/IActionTracker.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.d.ts +18 -0
- package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.js +35 -0
- package/dist/tracking/InflightContextAdapter.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.js +172 -0
- package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
- package/dist/tracking/index.d.ts +7 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +6 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/store/IStore.d.ts +41 -0
- package/dist/tracking/store/IStore.d.ts.map +1 -0
- package/dist/tracking/store/IStore.js +2 -0
- package/dist/tracking/store/IStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.d.ts +21 -0
- package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.js +40 -0
- package/dist/tracking/store/InMemoryStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.js +290 -0
- package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
- package/dist/tracking/store/index.d.ts +3 -0
- package/dist/tracking/store/index.d.ts.map +1 -0
- package/dist/tracking/store/index.js +2 -0
- package/dist/tracking/store/index.js.map +1 -0
- package/dist/tracking/types.d.ts +43 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/utils/ExplorerClient.d.ts +39 -1
- package/dist/utils/ExplorerClient.d.ts.map +1 -1
- package/dist/utils/ExplorerClient.js +205 -2
- package/dist/utils/ExplorerClient.js.map +1 -1
- package/dist/utils/balanceUtils.js +2 -2
- package/dist/utils/balanceUtils.js.map +1 -1
- package/dist/utils/balanceUtils.test.js +1 -0
- package/dist/utils/balanceUtils.test.js.map +1 -1
- package/dist/utils/bridgeUtils.d.ts +1 -3
- package/dist/utils/bridgeUtils.d.ts.map +1 -1
- package/dist/utils/bridgeUtils.js +1 -5
- package/dist/utils/bridgeUtils.js.map +1 -1
- package/dist/utils/bridgeUtils.test.js +3 -14
- package/dist/utils/bridgeUtils.test.js.map +1 -1
- package/package.json +11 -9
- package/src/config/RebalancerConfig.test.ts +459 -163
- package/src/config/RebalancerConfig.ts +5 -3
- package/src/config/types.ts +159 -52
- package/src/core/Rebalancer.test.ts +632 -0
- package/src/core/Rebalancer.ts +247 -157
- package/src/core/RebalancerService.test.ts +1144 -0
- package/src/core/RebalancerService.ts +245 -23
- package/src/factories/RebalancerContextFactory.ts +115 -14
- package/src/index.ts +16 -4
- package/src/interfaces/IMonitor.ts +15 -8
- package/src/interfaces/IRebalancer.ts +22 -4
- package/src/interfaces/IStrategy.ts +23 -2
- package/src/metrics/Metrics.ts +26 -5
- package/src/metrics/scripts/metrics.ts +14 -0
- package/src/monitor/Monitor.ts +109 -22
- package/src/strategy/BaseStrategy.ts +316 -26
- package/src/strategy/CollateralDeficitStrategy.test.ts +551 -0
- package/src/strategy/CollateralDeficitStrategy.ts +390 -0
- package/src/strategy/CompositeStrategy.test.ts +405 -0
- package/src/strategy/CompositeStrategy.ts +102 -0
- package/src/strategy/MinAmountStrategy.test.ts +189 -88
- package/src/strategy/MinAmountStrategy.ts +44 -13
- package/src/strategy/StrategyFactory.test.ts +2 -2
- package/src/strategy/StrategyFactory.ts +91 -8
- package/src/strategy/WeightedStrategy.test.ts +187 -72
- package/src/strategy/WeightedStrategy.ts +41 -7
- package/src/strategy/index.ts +2 -0
- package/src/test/helpers.ts +418 -14
- package/src/tracking/ActionTracker.test.ts +783 -0
- package/src/tracking/ActionTracker.ts +647 -0
- package/src/tracking/IActionTracker.ts +140 -0
- package/src/tracking/InflightContextAdapter.test.ts +203 -0
- package/src/tracking/InflightContextAdapter.ts +42 -0
- package/src/tracking/index.ts +36 -0
- package/src/tracking/store/IStore.ts +48 -0
- package/src/tracking/store/InMemoryStore.test.ts +338 -0
- package/src/tracking/store/InMemoryStore.ts +58 -0
- package/src/tracking/store/index.ts +2 -0
- package/src/tracking/types.ts +74 -0
- package/src/utils/ExplorerClient.ts +266 -3
- package/src/utils/balanceUtils.test.ts +1 -0
- package/src/utils/balanceUtils.ts +2 -2
- package/src/utils/bridgeUtils.test.ts +3 -15
- package/src/utils/bridgeUtils.ts +0 -10
- package/dist/core/WithInflightGuard.d.ts +0 -20
- package/dist/core/WithInflightGuard.d.ts.map +0 -1
- package/dist/core/WithInflightGuard.js +0 -47
- package/dist/core/WithInflightGuard.js.map +0 -1
- package/dist/core/WithInflightGuard.test.d.ts +0 -2
- package/dist/core/WithInflightGuard.test.d.ts.map +0 -1
- package/dist/core/WithInflightGuard.test.js +0 -64
- package/dist/core/WithInflightGuard.test.js.map +0 -1
- package/dist/core/WithSemaphore.d.ts +0 -22
- package/dist/core/WithSemaphore.d.ts.map +0 -1
- package/dist/core/WithSemaphore.js +0 -67
- package/dist/core/WithSemaphore.js.map +0 -1
- package/dist/core/WithSemaphore.test.d.ts +0 -2
- package/dist/core/WithSemaphore.test.d.ts.map +0 -1
- package/dist/core/WithSemaphore.test.js +0 -83
- package/dist/core/WithSemaphore.test.js.map +0 -1
- package/src/core/WithInflightGuard.test.ts +0 -131
- package/src/core/WithInflightGuard.ts +0 -67
- package/src/core/WithSemaphore.test.ts +0 -111
- package/src/core/WithSemaphore.ts +0 -92
|
@@ -3,6 +3,7 @@ import { expect } from 'chai';
|
|
|
3
3
|
import { pino } from 'pino';
|
|
4
4
|
import { Token, TokenStandard, } from '@hyperlane-xyz/sdk';
|
|
5
5
|
import { RebalancerMinAmountType } from '../config/types.js';
|
|
6
|
+
import { extractBridgeConfigs } from '../test/helpers.js';
|
|
6
7
|
import { MinAmountStrategy } from './MinAmountStrategy.js';
|
|
7
8
|
const testLogger = pino({ level: 'silent' });
|
|
8
9
|
describe('MinAmountStrategy', () => {
|
|
@@ -38,7 +39,7 @@ describe('MinAmountStrategy', () => {
|
|
|
38
39
|
bridge: AddressZero,
|
|
39
40
|
bridgeLockTime: 1,
|
|
40
41
|
},
|
|
41
|
-
}, tokensByChainName, totalCollateral, testLogger)).to.throw('At least two chains must be configured');
|
|
42
|
+
}, tokensByChainName, totalCollateral, testLogger, {})).to.throw('At least two chains must be configured');
|
|
42
43
|
});
|
|
43
44
|
it('should create a strategy with minAmount and target using absolute values', () => {
|
|
44
45
|
new MinAmountStrategy({
|
|
@@ -60,7 +61,7 @@ describe('MinAmountStrategy', () => {
|
|
|
60
61
|
bridge: AddressZero,
|
|
61
62
|
bridgeLockTime: 1,
|
|
62
63
|
},
|
|
63
|
-
}, tokensByChainName, totalCollateral, testLogger);
|
|
64
|
+
}, tokensByChainName, totalCollateral, testLogger, {});
|
|
64
65
|
});
|
|
65
66
|
it('should create a strategy with minAmount and target using relative values', () => {
|
|
66
67
|
new MinAmountStrategy({
|
|
@@ -82,7 +83,7 @@ describe('MinAmountStrategy', () => {
|
|
|
82
83
|
bridge: AddressZero,
|
|
83
84
|
bridgeLockTime: 1,
|
|
84
85
|
},
|
|
85
|
-
}, tokensByChainName, totalCollateral, testLogger);
|
|
86
|
+
}, tokensByChainName, totalCollateral, testLogger, {});
|
|
86
87
|
});
|
|
87
88
|
it('should throw an error when minAmount is negative', () => {
|
|
88
89
|
expect(() => new MinAmountStrategy({
|
|
@@ -104,7 +105,7 @@ describe('MinAmountStrategy', () => {
|
|
|
104
105
|
bridge: AddressZero,
|
|
105
106
|
bridgeLockTime: 1,
|
|
106
107
|
},
|
|
107
|
-
}, tokensByChainName, totalCollateral, testLogger)).to.throw('Minimum amount (-10) cannot be negative for chain chain2');
|
|
108
|
+
}, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Minimum amount (-10) cannot be negative for chain chain2');
|
|
108
109
|
});
|
|
109
110
|
it('should throw an error when target is less than min', () => {
|
|
110
111
|
expect(() => new MinAmountStrategy({
|
|
@@ -126,7 +127,7 @@ describe('MinAmountStrategy', () => {
|
|
|
126
127
|
bridge: AddressZero,
|
|
127
128
|
bridgeLockTime: 1,
|
|
128
129
|
},
|
|
129
|
-
}, tokensByChainName, totalCollateral, testLogger)).to.throw('Target (80) must be greater than or equal to min (100) for chain chain1');
|
|
130
|
+
}, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Target (80) must be greater than or equal to min (100) for chain chain1');
|
|
130
131
|
});
|
|
131
132
|
it('should throw an error when relative target is less than relative min', () => {
|
|
132
133
|
expect(() => new MinAmountStrategy({
|
|
@@ -148,7 +149,7 @@ describe('MinAmountStrategy', () => {
|
|
|
148
149
|
bridge: AddressZero,
|
|
149
150
|
bridgeLockTime: 1,
|
|
150
151
|
},
|
|
151
|
-
}, tokensByChainName, totalCollateral, testLogger)).to.throw('Target (0.4) must be greater than or equal to min (0.5) for chain chain1');
|
|
152
|
+
}, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Target (0.4) must be greater than or equal to min (0.5) for chain chain1');
|
|
152
153
|
});
|
|
153
154
|
it('should throw an error when raw balances chains length does not match configured chains length', () => {
|
|
154
155
|
expect(() => new MinAmountStrategy({
|
|
@@ -170,7 +171,7 @@ describe('MinAmountStrategy', () => {
|
|
|
170
171
|
bridge: AddressZero,
|
|
171
172
|
bridgeLockTime: 1,
|
|
172
173
|
},
|
|
173
|
-
}, tokensByChainName, totalCollateral, testLogger).getRebalancingRoutes({
|
|
174
|
+
}, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
|
|
174
175
|
[chain1]: 100n,
|
|
175
176
|
[chain2]: 200n,
|
|
176
177
|
[chain3]: 300n,
|
|
@@ -196,7 +197,7 @@ describe('MinAmountStrategy', () => {
|
|
|
196
197
|
bridge: AddressZero,
|
|
197
198
|
bridgeLockTime: 1,
|
|
198
199
|
},
|
|
199
|
-
}, tokensByChainName, totalCollateral, testLogger).getRebalancingRoutes({
|
|
200
|
+
}, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
|
|
200
201
|
[chain1]: 100n,
|
|
201
202
|
[chain3]: 300n,
|
|
202
203
|
})).to.throw('Raw balance for chain chain2 not found');
|
|
@@ -221,7 +222,7 @@ describe('MinAmountStrategy', () => {
|
|
|
221
222
|
bridge: AddressZero,
|
|
222
223
|
bridgeLockTime: 1,
|
|
223
224
|
},
|
|
224
|
-
}, tokensByChainName, totalCollateral, testLogger).getRebalancingRoutes({
|
|
225
|
+
}, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
|
|
225
226
|
[chain1]: 100n,
|
|
226
227
|
[chain2]: -2n,
|
|
227
228
|
})).to.throw('Raw balance for chain chain2 is negative');
|
|
@@ -248,7 +249,7 @@ describe('MinAmountStrategy', () => {
|
|
|
248
249
|
bridge: AddressZero,
|
|
249
250
|
bridgeLockTime: 1,
|
|
250
251
|
},
|
|
251
|
-
}, tokensByChainName, totalCollateral, testLogger);
|
|
252
|
+
}, tokensByChainName, totalCollateral, testLogger, {});
|
|
252
253
|
const rawBalances = {
|
|
253
254
|
[chain1]: BigInt(120e18),
|
|
254
255
|
[chain2]: BigInt(120e18),
|
|
@@ -257,7 +258,7 @@ describe('MinAmountStrategy', () => {
|
|
|
257
258
|
expect(routes).to.be.empty;
|
|
258
259
|
});
|
|
259
260
|
it('should return a single route when a chain is below minimum amount', () => {
|
|
260
|
-
const
|
|
261
|
+
const config = {
|
|
261
262
|
[chain1]: {
|
|
262
263
|
minAmount: {
|
|
263
264
|
min: '100',
|
|
@@ -276,7 +277,9 @@ describe('MinAmountStrategy', () => {
|
|
|
276
277
|
bridge: AddressZero,
|
|
277
278
|
bridgeLockTime: 1,
|
|
278
279
|
},
|
|
279
|
-
}
|
|
280
|
+
};
|
|
281
|
+
const bridgeConfigs = extractBridgeConfigs(config);
|
|
282
|
+
const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
|
|
280
283
|
const rawBalances = {
|
|
281
284
|
[chain1]: BigInt(50e18),
|
|
282
285
|
[chain2]: BigInt(200e18),
|
|
@@ -287,11 +290,12 @@ describe('MinAmountStrategy', () => {
|
|
|
287
290
|
origin: chain2,
|
|
288
291
|
destination: chain1,
|
|
289
292
|
amount: BigInt(70e18),
|
|
293
|
+
bridge: AddressZero,
|
|
290
294
|
},
|
|
291
295
|
]);
|
|
292
296
|
});
|
|
293
297
|
it('should return multiple routes for multiple chains below minimum amount', () => {
|
|
294
|
-
const
|
|
298
|
+
const config = {
|
|
295
299
|
[chain1]: {
|
|
296
300
|
minAmount: {
|
|
297
301
|
min: '80',
|
|
@@ -319,7 +323,9 @@ describe('MinAmountStrategy', () => {
|
|
|
319
323
|
bridge: AddressZero,
|
|
320
324
|
bridgeLockTime: 1,
|
|
321
325
|
},
|
|
322
|
-
}
|
|
326
|
+
};
|
|
327
|
+
const bridgeConfigs = extractBridgeConfigs(config);
|
|
328
|
+
const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
|
|
323
329
|
const rawBalances = {
|
|
324
330
|
[chain1]: BigInt(50e18),
|
|
325
331
|
[chain2]: BigInt(75e18),
|
|
@@ -331,11 +337,13 @@ describe('MinAmountStrategy', () => {
|
|
|
331
337
|
origin: chain3,
|
|
332
338
|
destination: chain1,
|
|
333
339
|
amount: BigInt(50e18),
|
|
340
|
+
bridge: AddressZero,
|
|
334
341
|
},
|
|
335
342
|
{
|
|
336
343
|
origin: chain3,
|
|
337
344
|
destination: chain2,
|
|
338
345
|
amount: BigInt(25e18),
|
|
346
|
+
bridge: AddressZero,
|
|
339
347
|
},
|
|
340
348
|
]);
|
|
341
349
|
});
|
|
@@ -359,10 +367,10 @@ describe('MinAmountStrategy', () => {
|
|
|
359
367
|
bridge: AddressZero,
|
|
360
368
|
bridgeLockTime: 1,
|
|
361
369
|
},
|
|
362
|
-
}, tokensByChainName, totalCollateral, testLogger)).to.throw(`Consider reducing the targets as the sum (340) is greater than sum of collaterals (300)`);
|
|
370
|
+
}, tokensByChainName, totalCollateral, testLogger, {})).to.throw(`Consider reducing the targets as the sum (340) is greater than sum of collaterals (300)`);
|
|
363
371
|
});
|
|
364
372
|
it('should handle case where there is not enough surplus to meet all minimum requirements by scaling down deficits', () => {
|
|
365
|
-
const
|
|
373
|
+
const config = {
|
|
366
374
|
[chain1]: {
|
|
367
375
|
minAmount: {
|
|
368
376
|
min: '100',
|
|
@@ -390,7 +398,9 @@ describe('MinAmountStrategy', () => {
|
|
|
390
398
|
bridge: AddressZero,
|
|
391
399
|
bridgeLockTime: 1,
|
|
392
400
|
},
|
|
393
|
-
}
|
|
401
|
+
};
|
|
402
|
+
const bridgeConfigs = extractBridgeConfigs(config);
|
|
403
|
+
const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
|
|
394
404
|
const rawBalances = {
|
|
395
405
|
[chain1]: BigInt(50e18),
|
|
396
406
|
[chain2]: BigInt(50e18),
|
|
@@ -406,6 +416,61 @@ describe('MinAmountStrategy', () => {
|
|
|
406
416
|
expect(routes[1].destination).to.equal(chain2);
|
|
407
417
|
expect(routes[1].amount).to.equal(BigInt(25e18));
|
|
408
418
|
});
|
|
419
|
+
it('should not produce zero-amount routes when scaling causes amounts to round to zero', () => {
|
|
420
|
+
// This test ensures that when deficit scaling produces zero amounts (due to integer division),
|
|
421
|
+
// these zero-amount routes are NOT included in the output.
|
|
422
|
+
// Bug scenario: totalSurplus=1, totalDeficit=3 -> each deficit of 1 scales to (1*1)/3 = 0
|
|
423
|
+
const config = {
|
|
424
|
+
[chain1]: {
|
|
425
|
+
minAmount: {
|
|
426
|
+
min: '90',
|
|
427
|
+
target: '100',
|
|
428
|
+
type: RebalancerMinAmountType.Absolute,
|
|
429
|
+
},
|
|
430
|
+
bridge: AddressZero,
|
|
431
|
+
bridgeLockTime: 1,
|
|
432
|
+
},
|
|
433
|
+
[chain2]: {
|
|
434
|
+
minAmount: {
|
|
435
|
+
min: '90',
|
|
436
|
+
target: '100',
|
|
437
|
+
type: RebalancerMinAmountType.Absolute,
|
|
438
|
+
},
|
|
439
|
+
bridge: AddressZero,
|
|
440
|
+
bridgeLockTime: 1,
|
|
441
|
+
},
|
|
442
|
+
[chain3]: {
|
|
443
|
+
minAmount: {
|
|
444
|
+
min: '90',
|
|
445
|
+
target: '100',
|
|
446
|
+
type: RebalancerMinAmountType.Absolute,
|
|
447
|
+
},
|
|
448
|
+
bridge: AddressZero,
|
|
449
|
+
bridgeLockTime: 1,
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
const bridgeConfigs = extractBridgeConfigs(config);
|
|
453
|
+
const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
|
|
454
|
+
// chain1 and chain2 are at 1 token each (far below min 90)
|
|
455
|
+
// chain3 has 91 tokens (surplus of 1 above min)
|
|
456
|
+
// Deficits: chain1 needs 99 (100-1), chain2 needs 99 (100-1), total = 198
|
|
457
|
+
// Surplus: chain3 has 1 (91-90)
|
|
458
|
+
// Scaling: each deficit of 99 becomes (99 * 1) / 198 = 0 (integer division!)
|
|
459
|
+
const rawBalances = {
|
|
460
|
+
[chain1]: BigInt(1e18),
|
|
461
|
+
[chain2]: BigInt(1e18),
|
|
462
|
+
[chain3]: BigInt(91e18),
|
|
463
|
+
};
|
|
464
|
+
const routes = strategy.getRebalancingRoutes(rawBalances);
|
|
465
|
+
// All routes should have non-zero amounts
|
|
466
|
+
// (Chai's greaterThan doesn't support BigInt, so use direct comparison)
|
|
467
|
+
for (const route of routes) {
|
|
468
|
+
expect(route.amount > 0n, `Route amount should be > 0, got ${route.amount}`).to.be.true;
|
|
469
|
+
}
|
|
470
|
+
// The single token of surplus may produce one route (or none if both scale to 0)
|
|
471
|
+
// Either way, no zero-amount routes should exist
|
|
472
|
+
expect(routes.every((r) => r.amount > 0n), 'All routes must have non-zero amounts').to.be.true;
|
|
473
|
+
});
|
|
409
474
|
it('should have no surplus or deficit when all at min', () => {
|
|
410
475
|
const strategy = new MinAmountStrategy({
|
|
411
476
|
[chain1]: {
|
|
@@ -426,7 +491,7 @@ describe('MinAmountStrategy', () => {
|
|
|
426
491
|
bridge: AddressZero,
|
|
427
492
|
bridgeLockTime: 1,
|
|
428
493
|
},
|
|
429
|
-
}, tokensByChainName, totalCollateral, testLogger);
|
|
494
|
+
}, tokensByChainName, totalCollateral, testLogger, {});
|
|
430
495
|
const rawBalances = {
|
|
431
496
|
[chain1]: BigInt(100e18),
|
|
432
497
|
[chain2]: BigInt(100e18),
|
|
@@ -435,7 +500,7 @@ describe('MinAmountStrategy', () => {
|
|
|
435
500
|
expect(routes).to.be.empty;
|
|
436
501
|
});
|
|
437
502
|
it('should consider the target amount with relative configuration', () => {
|
|
438
|
-
const
|
|
503
|
+
const config = {
|
|
439
504
|
[chain1]: {
|
|
440
505
|
minAmount: {
|
|
441
506
|
min: 0.25,
|
|
@@ -454,7 +519,9 @@ describe('MinAmountStrategy', () => {
|
|
|
454
519
|
bridge: AddressZero,
|
|
455
520
|
bridgeLockTime: 1,
|
|
456
521
|
},
|
|
457
|
-
}
|
|
522
|
+
};
|
|
523
|
+
const bridgeConfigs = extractBridgeConfigs(config);
|
|
524
|
+
const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
|
|
458
525
|
const rawBalances = {
|
|
459
526
|
[chain1]: 200n,
|
|
460
527
|
[chain2]: 800n,
|
|
@@ -465,6 +532,7 @@ describe('MinAmountStrategy', () => {
|
|
|
465
532
|
origin: chain2,
|
|
466
533
|
destination: chain1,
|
|
467
534
|
amount: 100n,
|
|
535
|
+
bridge: AddressZero,
|
|
468
536
|
},
|
|
469
537
|
]);
|
|
470
538
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinAmountStrategy.test.js","sourceRoot":"","sources":["../../src/strategy/MinAmountStrategy.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MinAmountStrategy.test.js","sourceRoot":"","sources":["../../src/strategy/MinAmountStrategy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,22 @@ import { type IStrategy } from '../interfaces/IStrategy.js';
|
|
|
5
5
|
import { type Metrics } from '../metrics/Metrics.js';
|
|
6
6
|
export declare class StrategyFactory {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* @param
|
|
8
|
+
* Creates a strategy from an array of strategy configs.
|
|
9
|
+
* - Single strategy (array with 1 element): Creates that strategy directly
|
|
10
|
+
* - Multiple strategies (array with 2+ elements): Creates CompositeStrategy
|
|
11
|
+
*
|
|
12
|
+
* @param strategyConfigs Array of strategy configurations (always array format)
|
|
13
|
+
* @param tokensByChainName A map of chain->token to ease the lookup of token by chain
|
|
14
|
+
* @param initialTotalCollateral The initial total collateral of the rebalancer
|
|
15
|
+
* @param logger The logger to use for the strategy
|
|
16
|
+
* @param metrics The metrics to use for the strategy
|
|
13
17
|
* @returns A concrete strategy implementation
|
|
14
18
|
*/
|
|
15
|
-
static createStrategy(
|
|
19
|
+
static createStrategy(strategyConfigs: StrategyConfig[], tokensByChainName: ChainMap<Token>, initialTotalCollateral: bigint, logger: Logger, metrics?: Metrics): IStrategy;
|
|
20
|
+
/**
|
|
21
|
+
* Create a single strategy from config.
|
|
22
|
+
*/
|
|
23
|
+
private static createSingleStrategy;
|
|
24
|
+
private static extractBridgeConfigs;
|
|
16
25
|
}
|
|
17
26
|
//# sourceMappingURL=StrategyFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrategyFactory.d.ts","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"StrategyFactory.d.ts","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAQrD,qBAAa,eAAe;IAC1B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc,CACnB,eAAe,EAAE,cAAc,EAAE,EACjC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,EAClC,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,SAAS;IA6BZ;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA4CnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAiBpC"}
|
|
@@ -1,25 +1,63 @@
|
|
|
1
1
|
import { RebalancerStrategyOptions, } from '../config/types.js';
|
|
2
|
+
import { CollateralDeficitStrategy } from './CollateralDeficitStrategy.js';
|
|
3
|
+
import { CompositeStrategy } from './CompositeStrategy.js';
|
|
2
4
|
import { MinAmountStrategy } from './MinAmountStrategy.js';
|
|
3
5
|
import { WeightedStrategy } from './WeightedStrategy.js';
|
|
4
6
|
export class StrategyFactory {
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @param
|
|
8
|
+
* Creates a strategy from an array of strategy configs.
|
|
9
|
+
* - Single strategy (array with 1 element): Creates that strategy directly
|
|
10
|
+
* - Multiple strategies (array with 2+ elements): Creates CompositeStrategy
|
|
11
|
+
*
|
|
12
|
+
* @param strategyConfigs Array of strategy configurations (always array format)
|
|
13
|
+
* @param tokensByChainName A map of chain->token to ease the lookup of token by chain
|
|
14
|
+
* @param initialTotalCollateral The initial total collateral of the rebalancer
|
|
15
|
+
* @param logger The logger to use for the strategy
|
|
16
|
+
* @param metrics The metrics to use for the strategy
|
|
11
17
|
* @returns A concrete strategy implementation
|
|
12
18
|
*/
|
|
13
|
-
static createStrategy(
|
|
19
|
+
static createStrategy(strategyConfigs, tokensByChainName, initialTotalCollateral, logger, metrics) {
|
|
20
|
+
if (strategyConfigs.length === 0) {
|
|
21
|
+
throw new Error('At least one strategy must be configured');
|
|
22
|
+
}
|
|
23
|
+
// Single strategy - create directly without CompositeStrategy wrapper
|
|
24
|
+
if (strategyConfigs.length === 1) {
|
|
25
|
+
return this.createSingleStrategy(strategyConfigs[0], tokensByChainName, initialTotalCollateral, logger, metrics);
|
|
26
|
+
}
|
|
27
|
+
// Multiple strategies - create CompositeStrategy
|
|
28
|
+
const subStrategies = strategyConfigs.map((config) => this.createSingleStrategy(config, tokensByChainName, initialTotalCollateral, logger, metrics));
|
|
29
|
+
return new CompositeStrategy(subStrategies, logger);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a single strategy from config.
|
|
33
|
+
*/
|
|
34
|
+
static createSingleStrategy(strategyConfig, tokensByChainName, initialTotalCollateral, logger, metrics) {
|
|
35
|
+
const bridgeConfigs = this.extractBridgeConfigs(strategyConfig);
|
|
14
36
|
switch (strategyConfig.rebalanceStrategy) {
|
|
15
|
-
case RebalancerStrategyOptions.Weighted:
|
|
16
|
-
return new WeightedStrategy(strategyConfig.chains, logger, metrics);
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
case RebalancerStrategyOptions.Weighted: {
|
|
38
|
+
return new WeightedStrategy(strategyConfig.chains, logger, bridgeConfigs, metrics, tokensByChainName);
|
|
39
|
+
}
|
|
40
|
+
case RebalancerStrategyOptions.MinAmount: {
|
|
41
|
+
return new MinAmountStrategy(strategyConfig.chains, tokensByChainName, initialTotalCollateral, logger, bridgeConfigs, metrics);
|
|
42
|
+
}
|
|
43
|
+
case RebalancerStrategyOptions.CollateralDeficit: {
|
|
44
|
+
return new CollateralDeficitStrategy(strategyConfig.chains, tokensByChainName, logger, bridgeConfigs, metrics);
|
|
45
|
+
}
|
|
19
46
|
default: {
|
|
20
47
|
throw new Error('Unsupported strategy type');
|
|
21
48
|
}
|
|
22
49
|
}
|
|
23
50
|
}
|
|
51
|
+
static extractBridgeConfigs(strategyConfig) {
|
|
52
|
+
const bridgeConfigs = {};
|
|
53
|
+
for (const [chain, config] of Object.entries(strategyConfig.chains)) {
|
|
54
|
+
bridgeConfigs[chain] = {
|
|
55
|
+
bridge: config.bridge,
|
|
56
|
+
bridgeMinAcceptedAmount: config.bridgeMinAcceptedAmount ?? 0,
|
|
57
|
+
override: config.override,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return bridgeConfigs;
|
|
61
|
+
}
|
|
24
62
|
}
|
|
25
63
|
//# sourceMappingURL=StrategyFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrategyFactory.js","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,yBAAyB,GAE1B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"StrategyFactory.js","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,yBAAyB,GAE1B,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,OAAO,eAAe;IAC1B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc,CACnB,eAAiC,EACjC,iBAAkC,EAClC,sBAA8B,EAC9B,MAAc,EACd,OAAiB;QAEjB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,sEAAsE;QACtE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,oBAAoB,CAC9B,eAAe,CAAC,CAAC,CAAC,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,OAAO,CACR,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnD,IAAI,CAAC,oBAAoB,CACvB,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,OAAO,CACR,CACF,CAAC;QACF,OAAO,IAAI,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CACjC,cAA8B,EAC9B,iBAAkC,EAClC,sBAA8B,EAC9B,MAAc,EACd,OAAiB;QAEjB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAEhE,QAAQ,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACzC,KAAK,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxC,OAAO,IAAI,gBAAgB,CACzB,cAAc,CAAC,MAAM,EACrB,MAAM,EACN,aAAa,EACb,OAAO,EACP,iBAAiB,CAClB,CAAC;YACJ,CAAC;YACD,KAAK,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzC,OAAO,IAAI,iBAAiB,CAC1B,cAAc,CAAC,MAAM,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,OAAO,CACR,CAAC;YACJ,CAAC;YACD,KAAK,yBAAyB,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACjD,OAAO,IAAI,yBAAyB,CAClC,cAAc,CAAC,MAAM,EACrB,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,OAAO,CACR,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,cAA8B;QAE9B,MAAM,aAAa,GAAuC,EAAE,CAAC;QAE7D,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,aAAa,CAAC,KAAK,CAAC,GAAG;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,CAAC;gBAC5D,QAAQ,EAAE,MAAM,CAAC,QAEhB;aACF,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -45,7 +45,7 @@ describe('StrategyFactory', () => {
|
|
|
45
45
|
rebalanceStrategy: RebalancerStrategyOptions.Weighted,
|
|
46
46
|
chains: config,
|
|
47
47
|
};
|
|
48
|
-
const strategy = StrategyFactory.createStrategy(strategyConfig, tokensByChainName, totalCollateral, testLogger);
|
|
48
|
+
const strategy = StrategyFactory.createStrategy([strategyConfig], tokensByChainName, totalCollateral, testLogger);
|
|
49
49
|
expect(strategy).to.be.instanceOf(WeightedStrategy);
|
|
50
50
|
});
|
|
51
51
|
it('creates a MinAmountStrategy when given minAmount configuration', () => {
|
|
@@ -73,7 +73,7 @@ describe('StrategyFactory', () => {
|
|
|
73
73
|
rebalanceStrategy: RebalancerStrategyOptions.MinAmount,
|
|
74
74
|
chains: config,
|
|
75
75
|
};
|
|
76
|
-
const strategy = StrategyFactory.createStrategy(strategyConfig, tokensByChainName, totalCollateral, testLogger);
|
|
76
|
+
const strategy = StrategyFactory.createStrategy([strategyConfig], tokensByChainName, totalCollateral, testLogger);
|
|
77
77
|
expect(strategy).to.be.instanceOf(MinAmountStrategy);
|
|
78
78
|
});
|
|
79
79
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrategyFactory.test.js","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAiB,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAEL,uBAAuB,EACvB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE7C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,iBAAiB,GAAoB,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,aAAa,CAAC,KAAK;QAC7B,cAAc,EAAE,EAAE;KACnB,CAAC;IACF,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAA2B;gBACrC,CAAC,MAAM,CAAC,EAAE;oBACR,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,EAAE;qBACd;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,EAAE;qBACd;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YAEF,MAAM,cAAc,GAAmB;gBACrC,iBAAiB,EAAE,yBAAyB,CAAC,QAAQ;gBACrD,MAAM,EAAE,MAAM;aACf,CAAC;YAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAC7C,cAAc,
|
|
1
|
+
{"version":3,"file":"StrategyFactory.test.js","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAiB,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAEL,uBAAuB,EACvB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE7C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,iBAAiB,GAAoB,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,aAAa,CAAC,KAAK;QAC7B,cAAc,EAAE,EAAE;KACnB,CAAC;IACF,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAA2B;gBACrC,CAAC,MAAM,CAAC,EAAE;oBACR,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,EAAE;qBACd;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,EAAE;qBACd;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YAEF,MAAM,cAAc,GAAmB;gBACrC,iBAAiB,EAAE,yBAAyB,CAAC,QAAQ;gBACrD,MAAM,EAAE,MAAM;aACf,CAAC;YAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAC7C,CAAC,cAAc,CAAC,EAChB,iBAAiB,EACjB,eAAe,EACf,UAAU,CACX,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,MAAM,GAA4B;gBACtC,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACpC,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YAEF,MAAM,cAAc,GAAmB;gBACrC,iBAAiB,EAAE,yBAAyB,CAAC,SAAS;gBACtD,MAAM,EAAE,MAAM;aACf,CAAC;YAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAC7C,CAAC,cAAc,CAAC,EAChB,iBAAiB,EACjB,eAAe,EACf,UAAU,CACX,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { type Logger } from 'pino';
|
|
2
|
-
import type {
|
|
3
|
-
import type
|
|
2
|
+
import type { ChainMap, Token } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { RebalancerStrategyOptions, type WeightedStrategyConfig } from '../config/types.js';
|
|
4
|
+
import type { RawBalances, Route, StrategyRoute } from '../interfaces/IStrategy.js';
|
|
4
5
|
import { type Metrics } from '../metrics/Metrics.js';
|
|
6
|
+
import type { BridgeConfigWithOverride } from '../utils/bridgeUtils.js';
|
|
5
7
|
import { BaseStrategy, type Delta } from './BaseStrategy.js';
|
|
6
8
|
/**
|
|
7
9
|
* Strategy implementation that rebalance based on weights
|
|
8
10
|
* It distributes funds across chains based on their weights
|
|
9
11
|
*/
|
|
10
12
|
export declare class WeightedStrategy extends BaseStrategy {
|
|
13
|
+
readonly name = RebalancerStrategyOptions.Weighted;
|
|
11
14
|
private readonly config;
|
|
12
15
|
private readonly totalWeight;
|
|
13
16
|
protected readonly logger: Logger;
|
|
14
|
-
constructor(config: WeightedStrategyConfig, logger: Logger, metrics?: Metrics);
|
|
17
|
+
constructor(config: WeightedStrategyConfig, logger: Logger, bridgeConfigs: ChainMap<BridgeConfigWithOverride>, metrics?: Metrics, tokensByChainName?: ChainMap<Token>);
|
|
15
18
|
/**
|
|
16
19
|
* Gets balances categorized by surplus and deficit based on weights
|
|
20
|
+
*
|
|
21
|
+
* Simulates both types of rebalances before calculating surpluses/deficits:
|
|
22
|
+
* - pendingRebalances: in-flight intents (origin tx confirmed, add to destination only)
|
|
23
|
+
* - proposedRebalances: routes from earlier strategies (subtract from origin AND add to destination)
|
|
24
|
+
*
|
|
25
|
+
* This prevents over-rebalancing when multiple strategies run in sequence.
|
|
17
26
|
*/
|
|
18
|
-
protected getCategorizedBalances(rawBalances: RawBalances): {
|
|
27
|
+
protected getCategorizedBalances(rawBalances: RawBalances, pendingRebalances?: Route[], proposedRebalances?: StrategyRoute[]): {
|
|
19
28
|
surpluses: Delta[];
|
|
20
29
|
deficits: Delta[];
|
|
21
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WeightedStrategy.d.ts","sourceRoot":"","sources":["../../src/strategy/WeightedStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"WeightedStrategy.d.ts","sourceRoot":"","sources":["../../src/strategy/WeightedStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,yBAAyB,EACzB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,QAAQ,CAAC,IAAI,sCAAsC;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGhC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EACjD,OAAO,CAAC,EAAE,OAAO,EACjB,iBAAiB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAkCrC;;;;;;;;OAQG;IACH,SAAS,CAAC,sBAAsB,CAC9B,WAAW,EAAE,WAAW,EACxB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAC3B,kBAAkB,CAAC,EAAE,aAAa,EAAE,GACnC;QACD,SAAS,EAAE,KAAK,EAAE,CAAC;QACnB,QAAQ,EAAE,KAAK,EAAE,CAAC;KACnB;CA0CF"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
import { RebalancerStrategyOptions, } from '../config/types.js';
|
|
1
2
|
import { BaseStrategy } from './BaseStrategy.js';
|
|
2
3
|
/**
|
|
3
4
|
* Strategy implementation that rebalance based on weights
|
|
4
5
|
* It distributes funds across chains based on their weights
|
|
5
6
|
*/
|
|
6
7
|
export class WeightedStrategy extends BaseStrategy {
|
|
8
|
+
name = RebalancerStrategyOptions.Weighted;
|
|
7
9
|
config;
|
|
8
10
|
totalWeight;
|
|
9
11
|
logger;
|
|
10
|
-
constructor(config, logger, metrics) {
|
|
12
|
+
constructor(config, logger, bridgeConfigs, metrics, tokensByChainName) {
|
|
11
13
|
const chains = Object.keys(config);
|
|
12
14
|
const log = logger.child({ class: WeightedStrategy.name });
|
|
13
|
-
super(chains, log, metrics);
|
|
15
|
+
super(chains, log, bridgeConfigs, metrics, tokensByChainName);
|
|
14
16
|
this.logger = log;
|
|
15
17
|
let totalWeight = 0n;
|
|
16
18
|
for (const chain of chains) {
|
|
@@ -32,15 +34,25 @@ export class WeightedStrategy extends BaseStrategy {
|
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Gets balances categorized by surplus and deficit based on weights
|
|
37
|
+
*
|
|
38
|
+
* Simulates both types of rebalances before calculating surpluses/deficits:
|
|
39
|
+
* - pendingRebalances: in-flight intents (origin tx confirmed, add to destination only)
|
|
40
|
+
* - proposedRebalances: routes from earlier strategies (subtract from origin AND add to destination)
|
|
41
|
+
*
|
|
42
|
+
* This prevents over-rebalancing when multiple strategies run in sequence.
|
|
35
43
|
*/
|
|
36
|
-
getCategorizedBalances(rawBalances) {
|
|
37
|
-
//
|
|
38
|
-
|
|
44
|
+
getCategorizedBalances(rawBalances, pendingRebalances, proposedRebalances) {
|
|
45
|
+
// Step 1: Simulate pending rebalances (in-flight, origin already deducted on-chain)
|
|
46
|
+
let simulatedBalances = this.simulatePendingRebalances(rawBalances, pendingRebalances ?? []);
|
|
47
|
+
// Step 2: Simulate proposed rebalances (from earlier strategies, not yet executed)
|
|
48
|
+
simulatedBalances = this.simulateProposedRebalances(simulatedBalances, proposedRebalances ?? []);
|
|
49
|
+
// Get the total balance from all chains (using simulated balances)
|
|
50
|
+
const total = this.chains.reduce((sum, chain) => sum + simulatedBalances[chain], 0n);
|
|
39
51
|
return this.chains.reduce((acc, chain) => {
|
|
40
52
|
const { weight, tolerance } = this.config[chain].weighted;
|
|
41
53
|
const target = (total * weight) / this.totalWeight;
|
|
42
54
|
const toleranceAmount = (target * tolerance) / 100n;
|
|
43
|
-
const balance =
|
|
55
|
+
const balance = simulatedBalances[chain];
|
|
44
56
|
// Apply the tolerance to deficits to prevent small imbalances
|
|
45
57
|
if (balance < target - toleranceAmount) {
|
|
46
58
|
acc.deficits.push({ chain, amount: target - balance });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WeightedStrategy.js","sourceRoot":"","sources":["../../src/strategy/WeightedStrategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WeightedStrategy.js","sourceRoot":"","sources":["../../src/strategy/WeightedStrategy.ts"],"names":[],"mappings":"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"}
|