@hyperlane-xyz/rebalancer 0.1.0-beta.5a8bd28ab
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 +178 -0
- package/dist/config/RebalancerConfig.d.ts +12 -0
- package/dist/config/RebalancerConfig.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.js +29 -0
- package/dist/config/RebalancerConfig.js.map +1 -0
- package/dist/config/RebalancerConfig.test.d.ts +2 -0
- package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.test.js +325 -0
- package/dist/config/RebalancerConfig.test.js.map +1 -0
- package/dist/core/Rebalancer.d.ts +23 -0
- package/dist/core/Rebalancer.d.ts.map +1 -0
- package/dist/core/Rebalancer.js +290 -0
- package/dist/core/Rebalancer.js.map +1 -0
- package/dist/core/RebalancerService.d.ts +115 -0
- package/dist/core/RebalancerService.d.ts.map +1 -0
- package/dist/core/RebalancerService.js +227 -0
- package/dist/core/RebalancerService.js.map +1 -0
- package/dist/core/WithInflightGuard.d.ts +20 -0
- package/dist/core/WithInflightGuard.d.ts.map +1 -0
- package/dist/core/WithInflightGuard.js +47 -0
- package/dist/core/WithInflightGuard.js.map +1 -0
- package/dist/core/WithInflightGuard.test.d.ts +2 -0
- package/dist/core/WithInflightGuard.test.d.ts.map +1 -0
- package/dist/core/WithInflightGuard.test.js +64 -0
- package/dist/core/WithInflightGuard.test.js.map +1 -0
- package/dist/core/WithSemaphore.d.ts +22 -0
- package/dist/core/WithSemaphore.d.ts.map +1 -0
- package/dist/core/WithSemaphore.js +67 -0
- package/dist/core/WithSemaphore.js.map +1 -0
- package/dist/core/WithSemaphore.test.d.ts +2 -0
- package/dist/core/WithSemaphore.test.d.ts.map +1 -0
- package/dist/core/WithSemaphore.test.js +83 -0
- package/dist/core/WithSemaphore.test.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.d.ts +41 -0
- package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
- package/dist/factories/RebalancerContextFactory.js +115 -0
- package/dist/factories/RebalancerContextFactory.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IMetrics.d.ts +5 -0
- package/dist/interfaces/IMetrics.d.ts.map +1 -0
- package/dist/interfaces/IMetrics.js +2 -0
- package/dist/interfaces/IMetrics.js.map +1 -0
- package/dist/interfaces/IMonitor.d.ts +51 -0
- package/dist/interfaces/IMonitor.d.ts.map +1 -0
- package/dist/interfaces/IMonitor.js +14 -0
- package/dist/interfaces/IMonitor.js.map +1 -0
- package/dist/interfaces/IRebalancer.d.ts +15 -0
- package/dist/interfaces/IRebalancer.d.ts.map +1 -0
- package/dist/interfaces/IRebalancer.js +2 -0
- package/dist/interfaces/IRebalancer.js.map +1 -0
- package/dist/interfaces/IStrategy.d.ts +11 -0
- package/dist/interfaces/IStrategy.d.ts.map +1 -0
- package/dist/interfaces/IStrategy.js +2 -0
- package/dist/interfaces/IStrategy.js.map +1 -0
- package/dist/metrics/Metrics.d.ts +31 -0
- package/dist/metrics/Metrics.d.ts.map +1 -0
- package/dist/metrics/Metrics.js +302 -0
- package/dist/metrics/Metrics.js.map +1 -0
- package/dist/metrics/PriceGetter.d.ts +10 -0
- package/dist/metrics/PriceGetter.d.ts.map +1 -0
- package/dist/metrics/PriceGetter.js +41 -0
- package/dist/metrics/PriceGetter.js.map +1 -0
- package/dist/metrics/scripts/metrics.d.ts +14 -0
- package/dist/metrics/scripts/metrics.d.ts.map +1 -0
- package/dist/metrics/scripts/metrics.js +198 -0
- package/dist/metrics/scripts/metrics.js.map +1 -0
- package/dist/metrics/types.d.ts +24 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +2 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/utils/metrics.d.ts +12 -0
- package/dist/metrics/utils/metrics.d.ts.map +1 -0
- package/dist/metrics/utils/metrics.js +28 -0
- package/dist/metrics/utils/metrics.js.map +1 -0
- package/dist/monitor/Monitor.d.ts +26 -0
- package/dist/monitor/Monitor.d.ts.map +1 -0
- package/dist/monitor/Monitor.js +116 -0
- package/dist/monitor/Monitor.js.map +1 -0
- package/dist/service.d.ts +3 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +125 -0
- package/dist/service.js.map +1 -0
- package/dist/strategy/BaseStrategy.d.ts +34 -0
- package/dist/strategy/BaseStrategy.d.ts.map +1 -0
- package/dist/strategy/BaseStrategy.js +127 -0
- package/dist/strategy/BaseStrategy.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.d.ts +27 -0
- package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.js +103 -0
- package/dist/strategy/MinAmountStrategy.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.js +472 -0
- package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
- package/dist/strategy/StrategyFactory.d.ts +16 -0
- package/dist/strategy/StrategyFactory.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.js +25 -0
- package/dist/strategy/StrategyFactory.js.map +1 -0
- package/dist/strategy/StrategyFactory.test.d.ts +2 -0
- package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.test.js +80 -0
- package/dist/strategy/StrategyFactory.test.js.map +1 -0
- package/dist/strategy/WeightedStrategy.d.ts +23 -0
- package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.js +61 -0
- package/dist/strategy/WeightedStrategy.js.map +1 -0
- package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
- package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.test.js +307 -0
- package/dist/strategy/WeightedStrategy.test.js.map +1 -0
- package/dist/strategy/index.d.ts +5 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +5 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/test/helpers.d.ts +8 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/helpers.js +33 -0
- package/dist/test/helpers.js.map +1 -0
- package/dist/utils/ExplorerClient.d.ts +14 -0
- package/dist/utils/ExplorerClient.d.ts.map +1 -0
- package/dist/utils/ExplorerClient.js +82 -0
- package/dist/utils/ExplorerClient.js.map +1 -0
- package/dist/utils/balanceUtils.d.ts +13 -0
- package/dist/utils/balanceUtils.d.ts.map +1 -0
- package/dist/utils/balanceUtils.js +43 -0
- package/dist/utils/balanceUtils.js.map +1 -0
- package/dist/utils/balanceUtils.test.d.ts +2 -0
- package/dist/utils/balanceUtils.test.d.ts.map +1 -0
- package/dist/utils/balanceUtils.test.js +54 -0
- package/dist/utils/balanceUtils.test.js.map +1 -0
- package/dist/utils/bridgeUtils.d.ts +19 -0
- package/dist/utils/bridgeUtils.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.js +20 -0
- package/dist/utils/bridgeUtils.js.map +1 -0
- package/dist/utils/bridgeUtils.test.d.ts +2 -0
- package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.test.js +77 -0
- package/dist/utils/bridgeUtils.test.js.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +6 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/files.d.ts +35 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +190 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/generalUtils.d.ts +3 -0
- package/dist/utils/generalUtils.d.ts.map +1 -0
- package/dist/utils/generalUtils.js +9 -0
- package/dist/utils/generalUtils.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/tokenUtils.d.ts +14 -0
- package/dist/utils/tokenUtils.d.ts.map +1 -0
- package/dist/utils/tokenUtils.js +21 -0
- package/dist/utils/tokenUtils.js.map +1 -0
- package/package.json +70 -0
- package/src/config/RebalancerConfig.test.ts +388 -0
- package/src/config/RebalancerConfig.ts +39 -0
- package/src/core/Rebalancer.ts +471 -0
- package/src/core/RebalancerService.ts +333 -0
- package/src/core/WithInflightGuard.test.ts +131 -0
- package/src/core/WithInflightGuard.ts +67 -0
- package/src/core/WithSemaphore.test.ts +112 -0
- package/src/core/WithSemaphore.ts +92 -0
- package/src/factories/RebalancerContextFactory.ts +210 -0
- package/src/index.ts +68 -0
- package/src/interfaces/IMetrics.ts +5 -0
- package/src/interfaces/IMonitor.ts +63 -0
- package/src/interfaces/IRebalancer.ts +20 -0
- package/src/interfaces/IStrategy.ts +13 -0
- package/src/metrics/Metrics.ts +558 -0
- package/src/metrics/PriceGetter.ts +74 -0
- package/src/metrics/scripts/metrics.ts +298 -0
- package/src/metrics/types.ts +27 -0
- package/src/metrics/utils/metrics.ts +33 -0
- package/src/monitor/Monitor.ts +174 -0
- package/src/service.ts +154 -0
- package/src/strategy/BaseStrategy.ts +210 -0
- package/src/strategy/MinAmountStrategy.test.ts +625 -0
- package/src/strategy/MinAmountStrategy.ts +170 -0
- package/src/strategy/StrategyFactory.test.ts +109 -0
- package/src/strategy/StrategyFactory.ts +48 -0
- package/src/strategy/WeightedStrategy.test.ts +408 -0
- package/src/strategy/WeightedStrategy.ts +93 -0
- package/src/strategy/index.ts +4 -0
- package/src/test/helpers.ts +46 -0
- package/src/utils/ExplorerClient.ts +99 -0
- package/src/utils/balanceUtils.test.ts +74 -0
- package/src/utils/balanceUtils.ts +69 -0
- package/src/utils/bridgeUtils.test.ts +92 -0
- package/src/utils/bridgeUtils.ts +42 -0
- package/src/utils/errors.ts +5 -0
- package/src/utils/files.ts +276 -0
- package/src/utils/generalUtils.ts +13 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/tokenUtils.ts +26 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMetrics.js","sourceRoot":"","sources":["../../src/interfaces/IMetrics.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Token } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { WrappedError } from '../utils/errors.js';
|
|
3
|
+
export declare class MonitorStartError extends WrappedError {
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class MonitorPollingError extends WrappedError {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export declare enum MonitorEventType {
|
|
10
|
+
TokenInfo = "TokenInfo",
|
|
11
|
+
Error = "Error",
|
|
12
|
+
Start = "Start"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Represents an event emitted by the monitor containing bridgedSupply and token information.
|
|
16
|
+
*/
|
|
17
|
+
export type MonitorEvent = {
|
|
18
|
+
/**
|
|
19
|
+
* Collection of objects containing the information retrieved by the Monitor.
|
|
20
|
+
*/
|
|
21
|
+
tokensInfo: {
|
|
22
|
+
token: Token;
|
|
23
|
+
bridgedSupply?: bigint;
|
|
24
|
+
}[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Interface for a monitoring service that tracks token information across different chains.
|
|
28
|
+
*/
|
|
29
|
+
export interface IMonitor {
|
|
30
|
+
/**
|
|
31
|
+
* Allows subscribers to listen to hyperlane's tokens info.
|
|
32
|
+
*/
|
|
33
|
+
on(eventName: MonitorEventType.TokenInfo, fn: (event: MonitorEvent) => void): this;
|
|
34
|
+
/**
|
|
35
|
+
* Allows subscribers to listen to error events.
|
|
36
|
+
*/
|
|
37
|
+
on(eventName: MonitorEventType.Error, fn: (event: Error) => void): this;
|
|
38
|
+
/**
|
|
39
|
+
* Allows subscribers to listen to start events.
|
|
40
|
+
*/
|
|
41
|
+
on(eventName: MonitorEventType.Start, fn: () => void): this;
|
|
42
|
+
/**
|
|
43
|
+
* Starts the monitoring long-running process.
|
|
44
|
+
*/
|
|
45
|
+
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Stops the monitoring long-running process.
|
|
48
|
+
*/
|
|
49
|
+
stop(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=IMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMonitor.d.ts","sourceRoot":"","sources":["../../src/interfaces/IMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,IAAI,SAAuB;CAC5B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,IAAI,SAAyB;CAC9B;AAED,oBAAY,gBAAgB;IAC1B,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,UAAU,EAAE;QACV,KAAK,EAAE,KAAK,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,EAAE,CACA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EACrC,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAChC,IAAI,CAAC;IAER;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAExE;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;CACd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WrappedError } from '../utils/errors.js';
|
|
2
|
+
export class MonitorStartError extends WrappedError {
|
|
3
|
+
name = 'MonitorStartError';
|
|
4
|
+
}
|
|
5
|
+
export class MonitorPollingError extends WrappedError {
|
|
6
|
+
name = 'MonitorPollingError';
|
|
7
|
+
}
|
|
8
|
+
export var MonitorEventType;
|
|
9
|
+
(function (MonitorEventType) {
|
|
10
|
+
MonitorEventType["TokenInfo"] = "TokenInfo";
|
|
11
|
+
MonitorEventType["Error"] = "Error";
|
|
12
|
+
MonitorEventType["Start"] = "Start";
|
|
13
|
+
})(MonitorEventType || (MonitorEventType = {}));
|
|
14
|
+
//# sourceMappingURL=IMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMonitor.js","sourceRoot":"","sources":["../../src/interfaces/IMonitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACjD,IAAI,GAAG,mBAAmB,CAAC;CAC5B;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,IAAI,GAAG,qBAAqB,CAAC;CAC9B;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2CAAuB,CAAA;IACvB,mCAAe,CAAA;IACf,mCAAe,CAAA;AACjB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EvmMovableCollateralAdapter, TokenAmount } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { RebalancingRoute } from './IStrategy.js';
|
|
3
|
+
export type PreparedTransaction = {
|
|
4
|
+
populatedTx: Awaited<ReturnType<EvmMovableCollateralAdapter['populateRebalanceTx']>>;
|
|
5
|
+
route: RebalancingRoute;
|
|
6
|
+
originTokenAmount: TokenAmount;
|
|
7
|
+
};
|
|
8
|
+
export type RebalanceMetrics = {
|
|
9
|
+
route: RebalancingRoute;
|
|
10
|
+
originTokenAmount: TokenAmount;
|
|
11
|
+
};
|
|
12
|
+
export interface IRebalancer {
|
|
13
|
+
rebalance(routes: RebalancingRoute[]): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=IRebalancer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IRebalancer.d.ts","sourceRoot":"","sources":["../../src/interfaces/IRebalancer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,OAAO,CAClB,UAAU,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,CAAC,CAC/D,CAAC;IACF,KAAK,EAAE,gBAAgB,CAAC;IACxB,iBAAiB,EAAE,WAAW,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,iBAAiB,EAAE,WAAW,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IRebalancer.js","sourceRoot":"","sources":["../../src/interfaces/IRebalancer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChainMap, ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
export type RawBalances = ChainMap<bigint>;
|
|
3
|
+
export type RebalancingRoute = {
|
|
4
|
+
origin: ChainName;
|
|
5
|
+
destination: ChainName;
|
|
6
|
+
amount: bigint;
|
|
7
|
+
};
|
|
8
|
+
export interface IStrategy {
|
|
9
|
+
getRebalancingRoutes(rawBalances: RawBalances): RebalancingRoute[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=IStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IStrategy.d.ts","sourceRoot":"","sources":["../../src/interfaces/IStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAAC;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IStrategy.js","sourceRoot":"","sources":["../../src/interfaces/IStrategy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Logger } from 'pino';
|
|
2
|
+
import { Token, TokenAmount, WarpCore, WarpRouteDeployConfig } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { IMetrics } from '../interfaces/IMetrics.js';
|
|
4
|
+
import { MonitorEvent } from '../interfaces/IMonitor.js';
|
|
5
|
+
import { RebalancingRoute } from '../interfaces/IStrategy.js';
|
|
6
|
+
import { PriceGetter } from './PriceGetter.js';
|
|
7
|
+
export declare class Metrics implements IMetrics {
|
|
8
|
+
private readonly tokenPriceGetter;
|
|
9
|
+
private readonly warpDeployConfig;
|
|
10
|
+
private readonly warpCore;
|
|
11
|
+
private readonly warpRouteId;
|
|
12
|
+
private readonly managedLockBoxMinimalABI;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
constructor(tokenPriceGetter: PriceGetter, warpDeployConfig: WarpRouteDeployConfig | null, warpCore: WarpCore, warpRouteId: string, logger: Logger);
|
|
15
|
+
recordRebalancerSuccess(): void;
|
|
16
|
+
recordRebalanceAmount(route: RebalancingRoute, originTokenAmount: TokenAmount): void;
|
|
17
|
+
recordRebalancerFailure(): void;
|
|
18
|
+
recordPollingError(): void;
|
|
19
|
+
processToken({ token, bridgedSupply, }: MonitorEvent['tokensInfo'][number]): Promise<void>;
|
|
20
|
+
private updateTokenMetrics;
|
|
21
|
+
private getTokenBridgedBalance;
|
|
22
|
+
private getSealevelAtaPayerBalance;
|
|
23
|
+
private getXERC20Info;
|
|
24
|
+
private getXERC20Limit;
|
|
25
|
+
private getExtraLockboxInfo;
|
|
26
|
+
private getManagedLockBox;
|
|
27
|
+
private getExtraLockboxBalance;
|
|
28
|
+
private getManagedLockBoxCollateralInfo;
|
|
29
|
+
static getWarpRouteCollateralTokenSymbol(tokens: Token[]): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.d.ts","sourceRoot":"","sources":["../../src/metrics/Metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAML,KAAK,EACL,WAAW,EAGX,QAAQ,EACR,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmB/C,qBAAa,OAAQ,YAAW,QAAQ;IAQpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAG9B;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,gBAAgB,EAAE,WAAW,EAC7B,gBAAgB,EAAE,qBAAqB,GAAG,IAAI,EAC9C,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACpC,MAAM,EAAE,MAAM;IAMhB,uBAAuB;IAMvB,qBAAqB,CACnB,KAAK,EAAE,gBAAgB,EACvB,iBAAiB,EAAE,WAAW;IAYhC,uBAAuB;IAMvB,kBAAkB;IAMZ,YAAY,CAAC,EACjB,KAAK,EACL,aAAa,GACd,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;YAWvB,kBAAkB;YAkKlB,sBAAsB;YAwDtB,0BAA0B;YA8B1B,aAAa;YAyBb,cAAc;YAmBd,mBAAmB;YAmCnB,iBAAiB;YAcjB,sBAAsB;YAiDtB,+BAA+B;IA0B7C,MAAM,CAAC,iCAAiC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;CAkClE"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { IXERC20VS__factory } from '@hyperlane-xyz/core';
|
|
3
|
+
import { EvmTokenAdapter, Token, TokenStandard, TokenType, } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
5
|
+
import { formatBigInt, tryFn } from '../utils/index.js';
|
|
6
|
+
import { metricsRegister, rebalancerExecutionAmount, rebalancerExecutionTotal, rebalancerPollingErrorsTotal, updateManagedLockboxBalanceMetrics, updateNativeWalletBalanceMetrics, updateTokenBalanceMetrics, updateXERC20LimitsMetrics, } from './scripts/metrics.js';
|
|
7
|
+
import { startMetricsServer } from './utils/metrics.js';
|
|
8
|
+
export class Metrics {
|
|
9
|
+
tokenPriceGetter;
|
|
10
|
+
warpDeployConfig;
|
|
11
|
+
warpCore;
|
|
12
|
+
warpRouteId;
|
|
13
|
+
managedLockBoxMinimalABI = [
|
|
14
|
+
'function XERC20() view returns (address)',
|
|
15
|
+
'function ERC20() view returns (address)',
|
|
16
|
+
];
|
|
17
|
+
logger;
|
|
18
|
+
constructor(tokenPriceGetter, warpDeployConfig, warpCore, warpRouteId, logger) {
|
|
19
|
+
this.tokenPriceGetter = tokenPriceGetter;
|
|
20
|
+
this.warpDeployConfig = warpDeployConfig;
|
|
21
|
+
this.warpCore = warpCore;
|
|
22
|
+
this.warpRouteId = warpRouteId;
|
|
23
|
+
this.logger = logger.child({ class: Metrics.name });
|
|
24
|
+
startMetricsServer(metricsRegister);
|
|
25
|
+
}
|
|
26
|
+
recordRebalancerSuccess() {
|
|
27
|
+
rebalancerExecutionTotal
|
|
28
|
+
.labels({ warp_route_id: this.warpRouteId, succeeded: 'true' })
|
|
29
|
+
.inc();
|
|
30
|
+
}
|
|
31
|
+
recordRebalanceAmount(route, originTokenAmount) {
|
|
32
|
+
rebalancerExecutionAmount
|
|
33
|
+
.labels({
|
|
34
|
+
warp_route_id: this.warpRouteId,
|
|
35
|
+
origin: route.origin,
|
|
36
|
+
destination: route.destination,
|
|
37
|
+
token: originTokenAmount.token.symbol,
|
|
38
|
+
})
|
|
39
|
+
.inc(originTokenAmount.getDecimalFormattedAmount());
|
|
40
|
+
}
|
|
41
|
+
recordRebalancerFailure() {
|
|
42
|
+
rebalancerExecutionTotal
|
|
43
|
+
.labels({ warp_route_id: this.warpRouteId, succeeded: 'false' })
|
|
44
|
+
.inc();
|
|
45
|
+
}
|
|
46
|
+
recordPollingError() {
|
|
47
|
+
rebalancerPollingErrorsTotal
|
|
48
|
+
.labels({ warp_route_id: this.warpRouteId })
|
|
49
|
+
.inc();
|
|
50
|
+
}
|
|
51
|
+
async processToken({ token, bridgedSupply, }) {
|
|
52
|
+
await tryFn(async () => {
|
|
53
|
+
await this.updateTokenMetrics(token, bridgedSupply);
|
|
54
|
+
}, 'Updating warp route metrics', this.logger);
|
|
55
|
+
}
|
|
56
|
+
// Updates the metrics for a single token in a warp route.
|
|
57
|
+
async updateTokenMetrics(token, bridgedSupply) {
|
|
58
|
+
const promises = [
|
|
59
|
+
tryFn(async () => {
|
|
60
|
+
const balanceInfo = await this.getTokenBridgedBalance(token, bridgedSupply);
|
|
61
|
+
if (!balanceInfo) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
updateTokenBalanceMetrics(this.warpCore, token, balanceInfo, this.warpRouteId, this.logger);
|
|
65
|
+
}, 'Getting bridged balance and value', this.logger),
|
|
66
|
+
];
|
|
67
|
+
// For Sealevel collateral and synthetic tokens, there is an
|
|
68
|
+
// "Associated Token Account" (ATA) rent payer that has a balance
|
|
69
|
+
// that's used to pay for rent for the accounts that store user balances.
|
|
70
|
+
// This is necessary if the recipient has never received any tokens before.
|
|
71
|
+
if (token.protocol === ProtocolType.Sealevel && !token.isNative()) {
|
|
72
|
+
promises.push(tryFn(async () => {
|
|
73
|
+
const balance = await this.getSealevelAtaPayerBalance(token, this.warpRouteId);
|
|
74
|
+
updateNativeWalletBalanceMetrics(balance, this.logger);
|
|
75
|
+
}, 'Getting ATA payer balance', this.logger));
|
|
76
|
+
}
|
|
77
|
+
if (token.isXerc20()) {
|
|
78
|
+
promises.push(tryFn(async () => {
|
|
79
|
+
const { limits, xERC20Address } = await this.getXERC20Info(token);
|
|
80
|
+
const routerAddress = token.addressOrDenom;
|
|
81
|
+
updateXERC20LimitsMetrics(token, limits, routerAddress, token.standard, xERC20Address, this.logger);
|
|
82
|
+
}, 'Getting xERC20 limits', this.logger));
|
|
83
|
+
if (!this.warpDeployConfig) {
|
|
84
|
+
this.logger.warn({
|
|
85
|
+
tokenSymbol: token.symbol,
|
|
86
|
+
chain: token.chainName,
|
|
87
|
+
}, "Can't read warp deploy config, skipping extra lockboxes");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// If the current token is an xERC20, we need to check if there are any extra lockboxes
|
|
91
|
+
const currentTokenDeployConfig = this.warpDeployConfig[token.chainName];
|
|
92
|
+
if (currentTokenDeployConfig.type !== TokenType.XERC20 &&
|
|
93
|
+
currentTokenDeployConfig.type !== TokenType.XERC20Lockbox) {
|
|
94
|
+
this.logger.error({
|
|
95
|
+
tokenSymbol: token.symbol,
|
|
96
|
+
chain: token.chainName,
|
|
97
|
+
expectedType: [TokenType.XERC20, TokenType.XERC20Lockbox],
|
|
98
|
+
actualType: currentTokenDeployConfig.type,
|
|
99
|
+
}, 'Token type mismatch in deploy config for xERC20 token');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const extraLockboxes = currentTokenDeployConfig.xERC20?.extraBridges ?? [];
|
|
103
|
+
for (const lockbox of extraLockboxes) {
|
|
104
|
+
promises.push(tryFn(async () => {
|
|
105
|
+
const { limits, xERC20Address } = await this.getExtraLockboxInfo(token, lockbox.lockbox);
|
|
106
|
+
updateXERC20LimitsMetrics(token, limits, lockbox.lockbox, 'EvmManagedLockbox', xERC20Address, this.logger);
|
|
107
|
+
}, 'Getting extra lockbox limits', this.logger), tryFn(async () => {
|
|
108
|
+
const balance = await this.getExtraLockboxBalance(token, lockbox.lockbox);
|
|
109
|
+
if (balance) {
|
|
110
|
+
const { tokenName, tokenAddress } = await this.getManagedLockBoxCollateralInfo(token, lockbox.lockbox);
|
|
111
|
+
updateManagedLockboxBalanceMetrics(this.warpCore, token.chainName, tokenName, tokenAddress, lockbox.lockbox, balance, this.warpRouteId, this.logger);
|
|
112
|
+
}
|
|
113
|
+
}, `Updating extra lockbox balance for contract at "${lockbox.lockbox}" on chain ${token.chainName}`, this.logger));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
await Promise.all(promises);
|
|
117
|
+
}
|
|
118
|
+
// Gets the bridged balance and value of a token in a warp route.
|
|
119
|
+
async getTokenBridgedBalance(token, bridgedSupply) {
|
|
120
|
+
if (!token.isHypToken()) {
|
|
121
|
+
this.logger.warn({
|
|
122
|
+
tokenChain: token.chainName,
|
|
123
|
+
tokenSymbol: token.symbol,
|
|
124
|
+
tokenAddress: token.addressOrDenom,
|
|
125
|
+
}, 'Cannot get bridged balance for a non-Hyperlane token');
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
const adapter = token.getHypAdapter(this.warpCore.multiProvider);
|
|
129
|
+
let tokenAddress = token.collateralAddressOrDenom ?? token.addressOrDenom;
|
|
130
|
+
if (bridgedSupply === undefined) {
|
|
131
|
+
this.logger.warn({
|
|
132
|
+
tokenChain: token.chainName,
|
|
133
|
+
tokenSymbol: token.symbol,
|
|
134
|
+
tokenAddress: token.addressOrDenom,
|
|
135
|
+
}, 'Bridged supply not found for token');
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const balance = token.amount(bridgedSupply).getDecimalFormattedAmount();
|
|
139
|
+
let tokenPrice;
|
|
140
|
+
// Only record value for collateralized and xERC20 lockbox tokens.
|
|
141
|
+
// removed the check for `EvmHypXERC20Lockbox` as it's already listed as collateralized
|
|
142
|
+
if (token.isCollateralized()) {
|
|
143
|
+
tokenPrice = await this.tokenPriceGetter.tryGetTokenPrice(token);
|
|
144
|
+
}
|
|
145
|
+
if (token.standard === TokenStandard.EvmHypXERC20Lockbox) {
|
|
146
|
+
tokenAddress = (await adapter.getXERC20())
|
|
147
|
+
.address;
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
balance,
|
|
151
|
+
valueUSD: tokenPrice ? balance * tokenPrice : undefined,
|
|
152
|
+
tokenAddress,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Gets the native balance of the ATA payer, which is used to pay for
|
|
156
|
+
// rent when delivering tokens to an account that previously didn't
|
|
157
|
+
// have a balance.
|
|
158
|
+
// Only intended for Collateral or Synthetic Sealevel tokens.
|
|
159
|
+
async getSealevelAtaPayerBalance(token, warpRouteId) {
|
|
160
|
+
if (token.protocol !== ProtocolType.Sealevel || token.isNative()) {
|
|
161
|
+
throw new Error(`Unsupported ATA payer protocol type ${token.protocol} or standard ${token.standard}`);
|
|
162
|
+
}
|
|
163
|
+
const adapter = token.getHypAdapter(this.warpCore.multiProvider);
|
|
164
|
+
const ataPayer = adapter.deriveAtaPayerAccount().toString();
|
|
165
|
+
const nativeToken = Token.FromChainMetadataNativeToken(this.warpCore.multiProvider.getChainMetadata(token.chainName));
|
|
166
|
+
const ataPayerBalance = await nativeToken.getBalance(this.warpCore.multiProvider, ataPayer);
|
|
167
|
+
return {
|
|
168
|
+
chain: token.chainName,
|
|
169
|
+
walletAddress: ataPayer.toString(),
|
|
170
|
+
walletName: `${warpRouteId}/ata-payer`,
|
|
171
|
+
balance: ataPayerBalance.getDecimalFormattedAmount(),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async getXERC20Info(token) {
|
|
175
|
+
if (token.protocol !== ProtocolType.Ethereum) {
|
|
176
|
+
throw new Error(`Unsupported XERC20 protocol type ${token.protocol}`);
|
|
177
|
+
}
|
|
178
|
+
if (token.standard === TokenStandard.EvmHypXERC20) {
|
|
179
|
+
const adapter = token.getAdapter(this.warpCore.multiProvider);
|
|
180
|
+
return {
|
|
181
|
+
limits: await this.getXERC20Limit(token, adapter),
|
|
182
|
+
xERC20Address: (await adapter.getXERC20()).address,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
else if (token.standard === TokenStandard.EvmHypXERC20Lockbox) {
|
|
186
|
+
const adapter = token.getAdapter(this.warpCore.multiProvider);
|
|
187
|
+
return {
|
|
188
|
+
limits: await this.getXERC20Limit(token, adapter),
|
|
189
|
+
xERC20Address: (await adapter.getXERC20()).address,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
throw new Error(`Unsupported XERC20 token standard ${token.standard}`);
|
|
193
|
+
}
|
|
194
|
+
async getXERC20Limit(token, xerc20) {
|
|
195
|
+
const [mintCurrent, mintMax, burnCurrent, burnMax] = await Promise.all([
|
|
196
|
+
xerc20.getMintLimit(),
|
|
197
|
+
xerc20.getMintMaxLimit(),
|
|
198
|
+
xerc20.getBurnLimit(),
|
|
199
|
+
xerc20.getBurnMaxLimit(),
|
|
200
|
+
]);
|
|
201
|
+
return {
|
|
202
|
+
mint: formatBigInt(token, mintCurrent),
|
|
203
|
+
mintMax: formatBigInt(token, mintMax),
|
|
204
|
+
burn: formatBigInt(token, burnCurrent),
|
|
205
|
+
burnMax: formatBigInt(token, burnMax),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
async getExtraLockboxInfo(warpToken, lockboxAddress) {
|
|
209
|
+
const currentChainProvider = this.warpCore.multiProvider.getEthersV5Provider(warpToken.chainName);
|
|
210
|
+
const lockboxInstance = await this.getManagedLockBox(warpToken, lockboxAddress);
|
|
211
|
+
const xERC20Address = await lockboxInstance.XERC20();
|
|
212
|
+
const vsXERC20Address = IXERC20VS__factory.connect(xERC20Address, currentChainProvider); // todo use adapter
|
|
213
|
+
const [mintMax, burnMax, mint, burn] = await Promise.all([
|
|
214
|
+
vsXERC20Address.mintingMaxLimitOf(lockboxAddress),
|
|
215
|
+
vsXERC20Address.burningMaxLimitOf(lockboxAddress),
|
|
216
|
+
vsXERC20Address.mintingCurrentLimitOf(lockboxAddress),
|
|
217
|
+
vsXERC20Address.burningCurrentLimitOf(lockboxAddress),
|
|
218
|
+
]);
|
|
219
|
+
return {
|
|
220
|
+
limits: {
|
|
221
|
+
burn: formatBigInt(warpToken, burn.toBigInt()),
|
|
222
|
+
burnMax: formatBigInt(warpToken, burnMax.toBigInt()),
|
|
223
|
+
mint: formatBigInt(warpToken, mint.toBigInt()),
|
|
224
|
+
mintMax: formatBigInt(warpToken, mintMax.toBigInt()),
|
|
225
|
+
},
|
|
226
|
+
xERC20Address,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
async getManagedLockBox(warpToken, lockboxAddress) {
|
|
230
|
+
const chainName = warpToken.chainName;
|
|
231
|
+
const provider = this.warpCore.multiProvider.getEthersV5Provider(chainName);
|
|
232
|
+
return new Contract(lockboxAddress, this.managedLockBoxMinimalABI, provider);
|
|
233
|
+
}
|
|
234
|
+
async getExtraLockboxBalance(warpToken, lockboxAddress) {
|
|
235
|
+
if (!warpToken.isXerc20()) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const lockboxInstance = await this.getManagedLockBox(warpToken, lockboxAddress);
|
|
239
|
+
const erc20TokenAddress = await lockboxInstance.ERC20();
|
|
240
|
+
const erc20tokenAdapter = new EvmTokenAdapter(warpToken.chainName, this.warpCore.multiProvider, {
|
|
241
|
+
token: erc20TokenAddress,
|
|
242
|
+
});
|
|
243
|
+
let balance;
|
|
244
|
+
try {
|
|
245
|
+
balance = await erc20tokenAdapter.getBalance(lockboxAddress);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
this.logger.error({
|
|
249
|
+
lockboxAddress,
|
|
250
|
+
chain: warpToken.chainName,
|
|
251
|
+
erc20TokenAddress,
|
|
252
|
+
error: error,
|
|
253
|
+
}, 'Error getting balance for contract at lockbox');
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const tokenPrice = await this.tokenPriceGetter.tryGetTokenPrice(warpToken);
|
|
257
|
+
const balanceNumber = formatBigInt(warpToken, balance);
|
|
258
|
+
return {
|
|
259
|
+
balance: balanceNumber,
|
|
260
|
+
valueUSD: tokenPrice ? balanceNumber * tokenPrice : undefined,
|
|
261
|
+
tokenAddress: erc20TokenAddress,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
async getManagedLockBoxCollateralInfo(warpToken, lockBoxAddress) {
|
|
265
|
+
const lockBoxInstance = await this.getManagedLockBox(warpToken, lockBoxAddress);
|
|
266
|
+
const collateralTokenAddress = await lockBoxInstance.ERC20();
|
|
267
|
+
const collateralTokenAdapter = new EvmTokenAdapter(warpToken.chainName, this.warpCore.multiProvider, {
|
|
268
|
+
token: collateralTokenAddress,
|
|
269
|
+
});
|
|
270
|
+
const { name } = await collateralTokenAdapter.getMetadata();
|
|
271
|
+
return {
|
|
272
|
+
tokenName: name,
|
|
273
|
+
tokenAddress: collateralTokenAddress,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
static getWarpRouteCollateralTokenSymbol(tokens) {
|
|
277
|
+
// We need to have a deterministic way to determine the symbol of the warp route
|
|
278
|
+
// as its used to identify the warp route in metrics. This method should support routes where:
|
|
279
|
+
// - All tokens have the same symbol, token standards can be all collateral, all synthetic or a mix
|
|
280
|
+
// - All tokens have different symbol, but there is a collateral token to break the tie, where there are multiple collateral tokens, alphabetically first is chosen
|
|
281
|
+
// - All tokens have different symbol, but there is no collateral token to break the tie, pick the alphabetically first symbol
|
|
282
|
+
// Get all unique symbols from the tokens array
|
|
283
|
+
const uniqueSymbols = new Set(tokens.map((token) => token.symbol));
|
|
284
|
+
// If all tokens have the same symbol, return that symbol
|
|
285
|
+
if (uniqueSymbols.size === 1) {
|
|
286
|
+
return tokens[0].symbol;
|
|
287
|
+
}
|
|
288
|
+
// Find all collateralized tokens
|
|
289
|
+
const collateralTokens = tokens.filter((token) => token.isCollateralized() ||
|
|
290
|
+
token.standard === TokenStandard.EvmHypXERC20Lockbox);
|
|
291
|
+
if (collateralTokens.length === 0) {
|
|
292
|
+
// If there are no collateralized tokens, return the alphabetically first symbol
|
|
293
|
+
return [...uniqueSymbols].sort()[0];
|
|
294
|
+
}
|
|
295
|
+
// if there is a single unique collateral symbol return it or
|
|
296
|
+
// if there are multiple, return the alphabetically first symbol
|
|
297
|
+
const collateralSymbols = collateralTokens.map((token) => token.symbol);
|
|
298
|
+
const uniqueCollateralSymbols = [...new Set(collateralSymbols)];
|
|
299
|
+
return uniqueCollateralSymbols.sort()[0];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=Metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/metrics/Metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Logger } from 'pino';
|
|
2
|
+
import { ChainMap, ChainMetadata, CoinGeckoTokenPriceGetter, Token } from '@hyperlane-xyz/sdk';
|
|
3
|
+
export declare class PriceGetter extends CoinGeckoTokenPriceGetter {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private constructor();
|
|
6
|
+
static create(chainMetadata: ChainMap<ChainMetadata>, logger: Logger, coingeckoApiKey?: string, expirySeconds?: number, sleepMsBetweenRequests?: number): PriceGetter;
|
|
7
|
+
tryGetTokenPrice(token: Token): Promise<number | undefined>;
|
|
8
|
+
getCoingeckoPrice(coingeckoId: string): Promise<number | undefined>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=PriceGetter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceGetter.d.ts","sourceRoot":"","sources":["../../src/metrics/PriceGetter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,QAAQ,EACR,aAAa,EACb,yBAAyB,EACzB,KAAK,EACN,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,WAAY,SAAQ,yBAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO;WAiBO,MAAM,CAClB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,EACtB,sBAAsB,CAAC,EAAE,MAAM;IAa3B,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqB3D,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAK1E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CoinGeckoTokenPriceGetter, } from '@hyperlane-xyz/sdk';
|
|
2
|
+
export class PriceGetter extends CoinGeckoTokenPriceGetter {
|
|
3
|
+
logger;
|
|
4
|
+
constructor({ chainMetadata, logger, apiKey, expirySeconds, sleepMsBetweenRequests, }) {
|
|
5
|
+
super({ chainMetadata, apiKey, expirySeconds, sleepMsBetweenRequests });
|
|
6
|
+
this.logger = logger;
|
|
7
|
+
}
|
|
8
|
+
static create(chainMetadata, logger, coingeckoApiKey, expirySeconds, sleepMsBetweenRequests) {
|
|
9
|
+
return new PriceGetter({
|
|
10
|
+
chainMetadata,
|
|
11
|
+
logger,
|
|
12
|
+
apiKey: coingeckoApiKey,
|
|
13
|
+
expirySeconds,
|
|
14
|
+
sleepMsBetweenRequests,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// Tries to get the price of a token from CoinGecko. Returns undefined if there's no
|
|
18
|
+
// CoinGecko ID for the token.
|
|
19
|
+
async tryGetTokenPrice(token) {
|
|
20
|
+
// We only get a price if the token defines a CoinGecko ID.
|
|
21
|
+
// This way we can ignore values of certain types of collateralized warp routes,
|
|
22
|
+
// e.g. Native warp routes on rollups that have been pre-funded.
|
|
23
|
+
const coinGeckoId = token.coinGeckoId;
|
|
24
|
+
if (!coinGeckoId) {
|
|
25
|
+
this.logger.warn({
|
|
26
|
+
tokenSymbol: token.symbol,
|
|
27
|
+
chain: token.chainName,
|
|
28
|
+
tokenAddress: token.addressOrDenom,
|
|
29
|
+
}, 'CoinGecko ID missing for token');
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return this.getCoingeckoPrice(coinGeckoId);
|
|
33
|
+
}
|
|
34
|
+
async getCoingeckoPrice(coingeckoId) {
|
|
35
|
+
const prices = await this.getTokenPriceByIds([coingeckoId]);
|
|
36
|
+
if (!prices)
|
|
37
|
+
return undefined;
|
|
38
|
+
return prices[0];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=PriceGetter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceGetter.js","sourceRoot":"","sources":["../../src/metrics/PriceGetter.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,yBAAyB,GAE1B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,WAAY,SAAQ,yBAAyB;IACvC,MAAM,CAAS;IAEhC,YAAoB,EAClB,aAAa,EACb,MAAM,EACN,MAAM,EACN,aAAa,EACb,sBAAsB,GAOvB;QACC,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,MAAM,CAClB,aAAsC,EACtC,MAAc,EACd,eAAwB,EACxB,aAAsB,EACtB,sBAA+B;QAE/B,OAAO,IAAI,WAAW,CAAC;YACrB,aAAa;YACb,MAAM;YACN,MAAM,EAAE,eAAe;YACvB,aAAa;YACb,sBAAsB;SACvB,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,8BAA8B;IAC9B,KAAK,CAAC,gBAAgB,CAAC,KAAY;QACjC,2DAA2D;QAC3D,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,YAAY,EAAE,KAAK,CAAC,cAAc;aACnC,EACD,gCAAgC,CACjC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Logger } from 'pino';
|
|
2
|
+
import { Counter, Registry } from 'prom-client';
|
|
3
|
+
import { ChainName, Token, WarpCore } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
5
|
+
import { NativeWalletBalance, WarpRouteBalance, XERC20Limit } from '../types.js';
|
|
6
|
+
export declare const metricsRegister: Registry;
|
|
7
|
+
export declare const rebalancerExecutionTotal: Counter<"warp_route_id" | "succeeded">;
|
|
8
|
+
export declare const rebalancerExecutionAmount: Counter<"token" | "warp_route_id" | "origin" | "destination">;
|
|
9
|
+
export declare const rebalancerPollingErrorsTotal: Counter<"warp_route_id">;
|
|
10
|
+
export declare function updateTokenBalanceMetrics(warpCore: WarpCore, token: Token, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
|
|
11
|
+
export declare function updateManagedLockboxBalanceMetrics(warpCore: WarpCore, chainName: ChainName, tokenName: string, tokenAddress: string, lockBoxAddress: string, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
|
|
12
|
+
export declare function updateNativeWalletBalanceMetrics(balance: NativeWalletBalance, logger: Logger): void;
|
|
13
|
+
export declare function updateXERC20LimitsMetrics(token: Token, limits: XERC20Limit, bridgeAddress: Address, bridgeLabel: string, xERC20Address: Address, logger: Logger): void;
|
|
14
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/metrics/scripts/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAS,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAiB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,eAAe,UAAiB,CAAC;AA+D9C,eAAO,MAAM,wBAAwB,wCAKnC,CAAC;AAEH,eAAO,MAAM,yBAAyB,+DAKpC,CAAC;AAEH,eAAO,MAAM,4BAA4B,0BAKvC,CAAC;AA+BH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,QAkEf;AAGD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,QAmCf;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,MAAM,QAiBf;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,QA0Bf"}
|