@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
package/README.md
CHANGED
|
@@ -9,11 +9,13 @@ The rebalancer monitors collateral balances across warp route deployments and au
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
11
|
- **Multi-Protocol Support**: Protocol-agnostic design supporting EVM chains (Cosmos, Sealevel, etc. when movable collateral contracts available)
|
|
12
|
-
- **Flexible Strategies**: Weighted
|
|
13
|
-
- **
|
|
12
|
+
- **Flexible Strategies**: Weighted, minimum-amount, and collateral-deficit rebalancing strategies
|
|
13
|
+
- **Composite Strategies**: Combine multiple strategies with different bridges for layered rebalancing
|
|
14
|
+
- **Inflight Tracking**: Monitors pending rebalances to prevent duplicate transfers
|
|
15
|
+
- **Safety Features**: Inflight message tracking and comprehensive validation
|
|
14
16
|
- **Observability**: Built-in Prometheus metrics and structured logging
|
|
15
17
|
- **Dual Mode**: Manual CLI execution or continuous daemon service
|
|
16
|
-
- **Bridge Support**: Integration with
|
|
18
|
+
- **Bridge Support**: Integration with Hyperlane warp routes and external bridges
|
|
17
19
|
|
|
18
20
|
## Installation
|
|
19
21
|
|
|
@@ -90,7 +92,9 @@ await service.executeManual({
|
|
|
90
92
|
|
|
91
93
|
## Configuration
|
|
92
94
|
|
|
93
|
-
The rebalancer uses a YAML configuration file
|
|
95
|
+
The rebalancer uses a YAML configuration file with a `warpRouteId` and `strategy` field.
|
|
96
|
+
|
|
97
|
+
### Basic Example (Single Strategy)
|
|
94
98
|
|
|
95
99
|
```yaml
|
|
96
100
|
warpRouteId: ETH/ethereum-arbitrum-optimism
|
|
@@ -99,13 +103,129 @@ strategy:
|
|
|
99
103
|
chains:
|
|
100
104
|
ethereum:
|
|
101
105
|
weight: 60
|
|
102
|
-
|
|
106
|
+
tolerance: 5
|
|
107
|
+
bridge: '0x1234...abcd'
|
|
103
108
|
arbitrum:
|
|
104
109
|
weight: 20
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
tolerance: 5
|
|
111
|
+
bridge: '0x5678...efgh'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Composite Strategy (v1.0.0+)
|
|
115
|
+
|
|
116
|
+
The `strategy` field accepts an array of strategies for composite rebalancing. Strategies are evaluated in order - the first strategy that produces routes is used.
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
warpRouteId: USDC/base-ethereum-arbitrum
|
|
120
|
+
strategy:
|
|
121
|
+
# First: CollateralDeficitStrategy with fast bridges for reactive rebalancing
|
|
122
|
+
- rebalanceStrategy: collateralDeficit
|
|
123
|
+
chains:
|
|
124
|
+
base:
|
|
125
|
+
buffer: 0
|
|
126
|
+
bridge: '0x584244d02b0fBf9054A5D5C9e9cE9A2E8adA0e28'
|
|
127
|
+
ethereum:
|
|
128
|
+
buffer: 0
|
|
129
|
+
bridge: '0xEE4a09db2C25592C04b8b342CB89f9a7f5E20BD2'
|
|
130
|
+
|
|
131
|
+
# Second: MinAmountStrategy with standard bridges for baseline floors
|
|
132
|
+
- rebalanceStrategy: minAmount
|
|
133
|
+
chains:
|
|
134
|
+
base:
|
|
135
|
+
minAmount:
|
|
136
|
+
min: 0.1
|
|
137
|
+
target: 0.11
|
|
138
|
+
type: 'absolute'
|
|
139
|
+
bridgeLockTime: 1800
|
|
140
|
+
bridge: '0x33e94B6D2ae697c16a750dB7c3d9443622C4405a'
|
|
141
|
+
ethereum:
|
|
142
|
+
minAmount:
|
|
143
|
+
min: 0.1
|
|
144
|
+
target: 0.11
|
|
145
|
+
type: 'absolute'
|
|
146
|
+
bridgeLockTime: 1800
|
|
147
|
+
bridge: '0x8c8D831E1e879604b4B304a2c951B8AEe3aB3a23'
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
> **Note**: When using `collateralDeficit` in a composite strategy, it must be the first strategy in the array.
|
|
151
|
+
|
|
152
|
+
### Strategy Types
|
|
153
|
+
|
|
154
|
+
| Strategy | Use Case | Chain Config Fields |
|
|
155
|
+
| ------------------- | ------------------------------------------------------ | -------------------------------- |
|
|
156
|
+
| `weighted` | Maintain percentage distribution across chains | `weight`, `tolerance` |
|
|
157
|
+
| `minAmount` | Trigger rebalance when balance falls below floor | `minAmount: {min, target, type}` |
|
|
158
|
+
| `collateralDeficit` | React to bridged supply gaps (synthetic vs collateral) | `buffer` |
|
|
159
|
+
|
|
160
|
+
#### Weighted Strategy
|
|
161
|
+
|
|
162
|
+
Maintains target weight percentages across chains. Rebalances when deviation exceeds tolerance.
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
strategy:
|
|
166
|
+
rebalanceStrategy: weighted
|
|
167
|
+
chains:
|
|
168
|
+
ethereum:
|
|
169
|
+
weight: 60 # Target 60% of total supply
|
|
170
|
+
tolerance: 5 # Rebalance if >5% deviation
|
|
171
|
+
bridge: '0x...'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
#### MinAmount Strategy
|
|
175
|
+
|
|
176
|
+
Triggers rebalance when a chain's balance falls below the minimum threshold.
|
|
177
|
+
|
|
178
|
+
```yaml
|
|
179
|
+
strategy:
|
|
180
|
+
rebalanceStrategy: minAmount
|
|
181
|
+
chains:
|
|
182
|
+
ethereum:
|
|
183
|
+
minAmount:
|
|
184
|
+
min: 100 # Trigger rebalance below this
|
|
185
|
+
target: 110 # Rebalance up to this amount
|
|
186
|
+
type: 'absolute' # or 'relative' (percentage of total)
|
|
187
|
+
bridge: '0x...'
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### CollateralDeficit Strategy
|
|
191
|
+
|
|
192
|
+
Monitors bridged (synthetic) supply vs collateral and rebalances to cover deficits.
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
strategy:
|
|
196
|
+
rebalanceStrategy: collateralDeficit
|
|
197
|
+
chains:
|
|
198
|
+
ethereum:
|
|
199
|
+
buffer: 1000 # Extra collateral buffer above deficit
|
|
200
|
+
bridge: '0x...'
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Chain Config Reference
|
|
204
|
+
|
|
205
|
+
| Field | Type | Required | Description |
|
|
206
|
+
| ------------------------- | ---------------- | -------- | -------------------------------------------------------------- |
|
|
207
|
+
| `bridge` | `0x...` address | Yes | Bridge contract address for this chain |
|
|
208
|
+
| `bridgeLockTime` | number (seconds) | No | Expected bridge transfer duration (used for inflight tracking) |
|
|
209
|
+
| `bridgeMinAcceptedAmount` | number | No | Skip routes with amounts below this threshold |
|
|
210
|
+
| `override` | object | No | Per-destination bridge overrides (see below) |
|
|
211
|
+
|
|
212
|
+
#### Per-Destination Overrides
|
|
213
|
+
|
|
214
|
+
Use `override` to specify different bridge configs for specific destination chains:
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
strategy:
|
|
218
|
+
rebalanceStrategy: minAmount
|
|
219
|
+
chains:
|
|
220
|
+
ethereum:
|
|
221
|
+
minAmount: { min: 100, target: 110, type: 'absolute' }
|
|
222
|
+
bridge: '0xDefaultBridge...'
|
|
223
|
+
override:
|
|
224
|
+
arbitrum:
|
|
225
|
+
bridge: '0xFastArbitrumBridge...'
|
|
226
|
+
bridgeLockTime: 600
|
|
227
|
+
optimism:
|
|
228
|
+
bridge: '0xOptimismBridge...'
|
|
109
229
|
```
|
|
110
230
|
|
|
111
231
|
## Architecture
|
|
@@ -117,12 +237,12 @@ typescript/rebalancer/
|
|
|
117
237
|
├── src/
|
|
118
238
|
│ ├── core/
|
|
119
239
|
│ │ ├── RebalancerService.ts # Main orchestrator
|
|
120
|
-
│ │
|
|
121
|
-
│ │ ├── WithInflightGuard.ts # Concurrency protection
|
|
122
|
-
│ │ └── WithSemaphore.ts # Semaphore wrapper
|
|
240
|
+
│ │ └── Rebalancer.ts # Core rebalancing logic
|
|
123
241
|
│ ├── strategy/
|
|
124
|
-
│ │ ├── WeightedStrategy.ts
|
|
125
|
-
│ │
|
|
242
|
+
│ │ ├── WeightedStrategy.ts # Weighted distribution
|
|
243
|
+
│ │ ├── MinAmountStrategy.ts # Minimum threshold strategy
|
|
244
|
+
│ │ ├── CollateralDeficitStrategy.ts # Bridged supply deficit strategy
|
|
245
|
+
│ │ └── CompositeStrategy.ts # Combines multiple strategies
|
|
126
246
|
│ ├── monitor/
|
|
127
247
|
│ │ └── Monitor.ts # Balance monitoring
|
|
128
248
|
│ ├── metrics/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type StrategyConfig } from './types.js';
|
|
2
2
|
export declare class RebalancerConfig {
|
|
3
3
|
readonly warpRouteId: string;
|
|
4
|
-
readonly strategyConfig: StrategyConfig;
|
|
5
|
-
constructor(warpRouteId: string, strategyConfig: StrategyConfig);
|
|
4
|
+
readonly strategyConfig: StrategyConfig[];
|
|
5
|
+
constructor(warpRouteId: string, strategyConfig: StrategyConfig[]);
|
|
6
6
|
/**
|
|
7
7
|
* Loads config from a file
|
|
8
8
|
* @param configFilePath Path to the config file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RebalancerConfig.d.ts","sourceRoot":"","sources":["../../src/config/RebalancerConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RebalancerConfig.d.ts","sourceRoot":"","sources":["../../src/config/RebalancerConfig.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAgB;aAET,WAAW,EAAE,MAAM;aACnB,cAAc,EAAE,cAAc,EAAE;gBADhC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAAE;IAGlD;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM;CAmBnC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { fromZodError } from 'zod-validation-error';
|
|
2
|
-
import { isObjEmpty } from '@hyperlane-xyz/utils';
|
|
3
2
|
import { readYamlOrJson } from '@hyperlane-xyz/utils/fs';
|
|
4
|
-
import { RebalancerConfigSchema, } from './types.js';
|
|
3
|
+
import { RebalancerConfigSchema, getStrategyChainNames, } from './types.js';
|
|
5
4
|
export class RebalancerConfig {
|
|
6
5
|
warpRouteId;
|
|
7
6
|
strategyConfig;
|
|
@@ -20,7 +19,9 @@ export class RebalancerConfig {
|
|
|
20
19
|
throw new Error(fromZodError(validationResult.error).message);
|
|
21
20
|
}
|
|
22
21
|
const { warpRouteId, strategy } = validationResult.data;
|
|
23
|
-
|
|
22
|
+
// Check that at least one chain is configured across all strategies
|
|
23
|
+
const chainNames = getStrategyChainNames(strategy);
|
|
24
|
+
if (chainNames.length === 0) {
|
|
24
25
|
throw new Error('No chains configured');
|
|
25
26
|
}
|
|
26
27
|
return new RebalancerConfig(warpRouteId, strategy);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RebalancerConfig.js","sourceRoot":"","sources":["../../src/config/RebalancerConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"RebalancerConfig.js","sourceRoot":"","sources":["../../src/config/RebalancerConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAEL,sBAAsB,EAEtB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,gBAAgB;IAET;IACA;IAFlB,YACkB,WAAmB,EACnB,cAAgC;QADhC,gBAAW,GAAX,WAAW,CAAQ;QACnB,mBAAc,GAAd,cAAc,CAAkB;IAC/C,CAAC;IAEJ;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,cAAsB;QAChC,MAAM,MAAM,GAA8B,cAAc,CAAC,cAAc,CAAC,CAAC;QAEzE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAExD,oEAAoE;QACpE,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;CACF"}
|