@aztec/slasher 5.0.0-rc.1 → 5.0.0-rc.2
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/dest/metrics.d.ts +7 -0
- package/dest/metrics.d.ts.map +1 -0
- package/dest/metrics.js +11 -0
- package/dest/slasher_client.d.ts +4 -2
- package/dest/slasher_client.d.ts.map +1 -1
- package/dest/slasher_client.js +6 -1
- package/package.json +9 -9
- package/src/metrics.ts +19 -0
- package/src/slasher_client.ts +4 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
|
+
export declare class SlasherMetrics {
|
|
3
|
+
private readonly roundExecuted;
|
|
4
|
+
constructor(client: TelemetryClient, name?: string);
|
|
5
|
+
recordRoundExecuted(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLHFCQUFhLGNBQWM7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQWdCO0lBRTlDLFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLFNBQVksRUFHcEQ7SUFFTSxtQkFBbUIsSUFBSSxJQUFJLENBRWpDO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAY,EAGpD;IAEM,mBAAmB,IAAI,IAAI,CAEjC;CACF"}
|
package/dest/metrics.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
|
|
2
|
+
export class SlasherMetrics {
|
|
3
|
+
roundExecuted;
|
|
4
|
+
constructor(client, name = 'Slasher'){
|
|
5
|
+
const meter = client.getMeter(name);
|
|
6
|
+
this.roundExecuted = createUpDownCounterWithDefault(meter, Metrics.SLASHER_ROUND_EXECUTED_COUNT);
|
|
7
|
+
}
|
|
8
|
+
recordRoundExecuted() {
|
|
9
|
+
this.roundExecuted.add(1);
|
|
10
|
+
}
|
|
11
|
+
}
|
package/dest/slasher_client.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { Prettify } from '@aztec/foundation/types';
|
|
|
6
6
|
import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
7
7
|
import { type Offense, type ProposerSlashAction, type ProposerSlashActionProvider } from '@aztec/stdlib/slashing';
|
|
8
8
|
import type { Hex } from 'viem';
|
|
9
|
+
import { SlasherMetrics } from './metrics.js';
|
|
9
10
|
import { SlashOffensesCollector, type SlashOffensesCollectorConfig, type SlashOffensesCollectorSettings } from './slash_offenses_collector.js';
|
|
10
11
|
import { SlashRoundMonitor, type SlashRoundMonitorSettings } from './slash_round_monitor.js';
|
|
11
12
|
import type { SlasherClientInterface } from './slasher_client_interface.js';
|
|
@@ -59,10 +60,11 @@ export declare class SlasherClient implements ProposerSlashActionProvider, Slash
|
|
|
59
60
|
private dateProvider;
|
|
60
61
|
private offensesStore;
|
|
61
62
|
private log;
|
|
63
|
+
private readonly metrics;
|
|
62
64
|
protected unwatchCallbacks: (() => void)[];
|
|
63
65
|
protected roundMonitor: SlashRoundMonitor;
|
|
64
66
|
protected offensesCollector: SlashOffensesCollector;
|
|
65
|
-
constructor(config: SlasherClientConfig, settings: SlasherSettings, slashingProposer: SlashingProposerContract, slasher: SlasherContract, rollup: RollupContract, watchers: Watcher[], epochCache: EpochCache, dateProvider: DateProvider, offensesStore: SlasherOffensesStore, log?: import("@aztec/foundation/log").Logger);
|
|
67
|
+
constructor(config: SlasherClientConfig, settings: SlasherSettings, slashingProposer: SlashingProposerContract, slasher: SlasherContract, rollup: RollupContract, watchers: Watcher[], epochCache: EpochCache, dateProvider: DateProvider, offensesStore: SlasherOffensesStore, log?: import("@aztec/foundation/log").Logger, metrics?: SlasherMetrics);
|
|
66
68
|
start(): Promise<void>;
|
|
67
69
|
/** Stop the slasher client */
|
|
68
70
|
stop(): Promise<void>;
|
|
@@ -109,4 +111,4 @@ export declare class SlasherClient implements ProposerSlashActionProvider, Slash
|
|
|
109
111
|
*/
|
|
110
112
|
private getSlashedRound;
|
|
111
113
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hlcl9jbGllbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zbGFzaGVyX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBRVosS0FBSyxtQkFBbUIsRUFDeEIsS0FBSywyQkFBMkIsRUFJakMsTUFBTSx3QkFBd0IsQ0FBQztBQUdoQyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUssOEJBQThCLEVBQ3BDLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUsseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RixPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVDLDhGQUE4RjtBQUM5RixN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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slasher_client.d.ts","sourceRoot":"","sources":["../src/slasher_client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAEtG,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAIjC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"slasher_client.d.ts","sourceRoot":"","sources":["../src/slasher_client.ts"],"names":[],"mappings":"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"}
|
package/dest/slasher_client.js
CHANGED
|
@@ -3,6 +3,8 @@ import { maxBigint } from '@aztec/foundation/bigint';
|
|
|
3
3
|
import { compactArray, partition, times } from '@aztec/foundation/collection';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { OffenseType, getEpochsForRound, getOffenseTypeName, getSlashConsensusVotesFromOffenses } from '@aztec/stdlib/slashing';
|
|
6
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
+
import { SlasherMetrics } from './metrics.js';
|
|
6
8
|
import { SlashOffensesCollector } from './slash_offenses_collector.js';
|
|
7
9
|
import { SlashRoundMonitor } from './slash_round_monitor.js';
|
|
8
10
|
/**
|
|
@@ -40,10 +42,11 @@ import { SlashRoundMonitor } from './slash_round_monitor.js';
|
|
|
40
42
|
dateProvider;
|
|
41
43
|
offensesStore;
|
|
42
44
|
log;
|
|
45
|
+
metrics;
|
|
43
46
|
unwatchCallbacks;
|
|
44
47
|
roundMonitor;
|
|
45
48
|
offensesCollector;
|
|
46
|
-
constructor(config, settings, slashingProposer, slasher, rollup, watchers, epochCache, dateProvider, offensesStore, log = createLogger('slasher:consensus')){
|
|
49
|
+
constructor(config, settings, slashingProposer, slasher, rollup, watchers, epochCache, dateProvider, offensesStore, log = createLogger('slasher:consensus'), metrics = new SlasherMetrics(getTelemetryClient())){
|
|
47
50
|
this.config = config;
|
|
48
51
|
this.settings = settings;
|
|
49
52
|
this.slashingProposer = slashingProposer;
|
|
@@ -53,6 +56,7 @@ import { SlashRoundMonitor } from './slash_round_monitor.js';
|
|
|
53
56
|
this.dateProvider = dateProvider;
|
|
54
57
|
this.offensesStore = offensesStore;
|
|
55
58
|
this.log = log;
|
|
59
|
+
this.metrics = metrics;
|
|
56
60
|
this.unwatchCallbacks = [];
|
|
57
61
|
this.roundMonitor = new SlashRoundMonitor(settings, dateProvider);
|
|
58
62
|
this.offensesCollector = new SlashOffensesCollector(config, settings, watchers, offensesStore);
|
|
@@ -91,6 +95,7 @@ import { SlashRoundMonitor } from './slash_round_monitor.js';
|
|
|
91
95
|
await this.offensesCollector.handleNewRound(round);
|
|
92
96
|
}
|
|
93
97
|
/** Called when we see a RoundExecuted event on the SlashingProposer (just for logging). */ async handleRoundExecuted(round, slashCount, l1BlockHash) {
|
|
98
|
+
this.metrics.recordRoundExecuted();
|
|
94
99
|
const slashes = await this.rollup.getSlashEvents(l1BlockHash);
|
|
95
100
|
this.log.info(`Slashing round ${round} has been executed with ${slashCount} slashes`, {
|
|
96
101
|
slashes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/slasher",
|
|
3
|
-
"version": "5.0.0-rc.
|
|
3
|
+
"version": "5.0.0-rc.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -56,20 +56,20 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/epoch-cache": "5.0.0-rc.
|
|
60
|
-
"@aztec/ethereum": "5.0.0-rc.
|
|
61
|
-
"@aztec/foundation": "5.0.0-rc.
|
|
62
|
-
"@aztec/kv-store": "5.0.0-rc.
|
|
63
|
-
"@aztec/l1-artifacts": "5.0.0-rc.
|
|
64
|
-
"@aztec/stdlib": "5.0.0-rc.
|
|
65
|
-
"@aztec/telemetry-client": "5.0.0-rc.
|
|
59
|
+
"@aztec/epoch-cache": "5.0.0-rc.2",
|
|
60
|
+
"@aztec/ethereum": "5.0.0-rc.2",
|
|
61
|
+
"@aztec/foundation": "5.0.0-rc.2",
|
|
62
|
+
"@aztec/kv-store": "5.0.0-rc.2",
|
|
63
|
+
"@aztec/l1-artifacts": "5.0.0-rc.2",
|
|
64
|
+
"@aztec/stdlib": "5.0.0-rc.2",
|
|
65
|
+
"@aztec/telemetry-client": "5.0.0-rc.2",
|
|
66
66
|
"source-map-support": "^0.5.21",
|
|
67
67
|
"tslib": "^2.4.0",
|
|
68
68
|
"viem": "npm:@aztec/viem@2.38.2",
|
|
69
69
|
"zod": "^4"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@aztec/aztec.js": "5.0.0-rc.
|
|
72
|
+
"@aztec/aztec.js": "5.0.0-rc.2",
|
|
73
73
|
"@jest/globals": "^30.0.0",
|
|
74
74
|
"@types/jest": "^30.0.0",
|
|
75
75
|
"@types/node": "^22.15.17",
|
package/src/metrics.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Metrics,
|
|
3
|
+
type TelemetryClient,
|
|
4
|
+
type UpDownCounter,
|
|
5
|
+
createUpDownCounterWithDefault,
|
|
6
|
+
} from '@aztec/telemetry-client';
|
|
7
|
+
|
|
8
|
+
export class SlasherMetrics {
|
|
9
|
+
private readonly roundExecuted: UpDownCounter;
|
|
10
|
+
|
|
11
|
+
constructor(client: TelemetryClient, name = 'Slasher') {
|
|
12
|
+
const meter = client.getMeter(name);
|
|
13
|
+
this.roundExecuted = createUpDownCounterWithDefault(meter, Metrics.SLASHER_ROUND_EXECUTED_COUNT);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public recordRoundExecuted(): void {
|
|
17
|
+
this.roundExecuted.add(1);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/slasher_client.ts
CHANGED
|
@@ -17,9 +17,11 @@ import {
|
|
|
17
17
|
getOffenseTypeName,
|
|
18
18
|
getSlashConsensusVotesFromOffenses,
|
|
19
19
|
} from '@aztec/stdlib/slashing';
|
|
20
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
20
21
|
|
|
21
22
|
import type { Hex } from 'viem';
|
|
22
23
|
|
|
24
|
+
import { SlasherMetrics } from './metrics.js';
|
|
23
25
|
import {
|
|
24
26
|
SlashOffensesCollector,
|
|
25
27
|
type SlashOffensesCollectorConfig,
|
|
@@ -101,6 +103,7 @@ export class SlasherClient implements ProposerSlashActionProvider, SlasherClient
|
|
|
101
103
|
private dateProvider: DateProvider,
|
|
102
104
|
private offensesStore: SlasherOffensesStore,
|
|
103
105
|
private log = createLogger('slasher:consensus'),
|
|
106
|
+
private readonly metrics = new SlasherMetrics(getTelemetryClient()),
|
|
104
107
|
) {
|
|
105
108
|
this.roundMonitor = new SlashRoundMonitor(settings, dateProvider);
|
|
106
109
|
this.offensesCollector = new SlashOffensesCollector(config, settings, watchers, offensesStore);
|
|
@@ -161,6 +164,7 @@ export class SlasherClient implements ProposerSlashActionProvider, SlasherClient
|
|
|
161
164
|
|
|
162
165
|
/** Called when we see a RoundExecuted event on the SlashingProposer (just for logging). */
|
|
163
166
|
protected async handleRoundExecuted(round: bigint, slashCount: bigint, l1BlockHash: Hex) {
|
|
167
|
+
this.metrics.recordRoundExecuted();
|
|
164
168
|
const slashes = await this.rollup.getSlashEvents(l1BlockHash);
|
|
165
169
|
this.log.info(`Slashing round ${round} has been executed with ${slashCount} slashes`, { slashes });
|
|
166
170
|
}
|