@aztec/validator-ha-signer 0.0.1-commit.7b86788 → 0.0.1-commit.7cbc774
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 +0 -2
- package/dest/db/index.d.ts +2 -1
- package/dest/db/index.d.ts.map +1 -1
- package/dest/db/index.js +1 -0
- package/dest/db/lmdb.d.ts +70 -0
- package/dest/db/lmdb.d.ts.map +1 -0
- package/dest/db/lmdb.js +223 -0
- package/dest/db/migrations/1_initial-schema.d.ts +4 -2
- package/dest/db/migrations/1_initial-schema.d.ts.map +1 -1
- package/dest/db/migrations/1_initial-schema.js +34 -4
- package/dest/db/migrations/2_add-checkpoint-number.d.ts +7 -0
- package/dest/db/migrations/2_add-checkpoint-number.d.ts.map +1 -0
- package/dest/db/migrations/2_add-checkpoint-number.js +17 -0
- package/dest/db/postgres.d.ts +4 -2
- package/dest/db/postgres.d.ts.map +1 -1
- package/dest/db/postgres.js +15 -13
- package/dest/db/schema.d.ts +6 -6
- package/dest/db/schema.d.ts.map +1 -1
- package/dest/db/schema.js +9 -4
- package/dest/db/types.d.ts +44 -7
- package/dest/db/types.d.ts.map +1 -1
- package/dest/db/types.js +26 -0
- package/dest/factory.d.ts +39 -4
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +71 -7
- package/dest/slashing_protection_service.d.ts +3 -3
- package/dest/slashing_protection_service.d.ts.map +1 -1
- package/dest/slashing_protection_service.js +4 -4
- package/dest/types.d.ts +8 -3
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +2 -1
- package/dest/validator_ha_signer.d.ts +3 -3
- package/dest/validator_ha_signer.d.ts.map +1 -1
- package/dest/validator_ha_signer.js +4 -6
- package/package.json +9 -7
- package/src/db/index.ts +1 -0
- package/src/db/lmdb.ts +308 -0
- package/src/db/migrations/1_initial-schema.ts +35 -4
- package/src/db/migrations/2_add-checkpoint-number.ts +19 -0
- package/src/db/postgres.ts +15 -11
- package/src/db/schema.ts +9 -4
- package/src/db/types.ts +63 -6
- package/src/factory.ts +100 -6
- package/src/slashing_protection_service.ts +6 -6
- package/src/types.ts +11 -0
- package/src/validator_ha_signer.ts +6 -8
package/dest/db/schema.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* slot, and duty type combination.
|
|
7
7
|
*/ /**
|
|
8
8
|
* Current schema version
|
|
9
|
-
*/ export const SCHEMA_VERSION =
|
|
9
|
+
*/ export const SCHEMA_VERSION = 2;
|
|
10
10
|
/**
|
|
11
11
|
* SQL to create the validator_duties table
|
|
12
12
|
*/ export const CREATE_VALIDATOR_DUTIES_TABLE = `
|
|
@@ -15,6 +15,7 @@ CREATE TABLE IF NOT EXISTS validator_duties (
|
|
|
15
15
|
validator_address VARCHAR(42) NOT NULL,
|
|
16
16
|
slot BIGINT NOT NULL,
|
|
17
17
|
block_number BIGINT NOT NULL,
|
|
18
|
+
checkpoint_number BIGINT NOT NULL DEFAULT 0,
|
|
18
19
|
block_index_within_checkpoint INTEGER NOT NULL DEFAULT 0,
|
|
19
20
|
duty_type VARCHAR(30) NOT NULL CHECK (duty_type IN ('BLOCK_PROPOSAL', 'CHECKPOINT_PROPOSAL', 'ATTESTATION', 'ATTESTATIONS_AND_SIGNERS', 'GOVERNANCE_VOTE', 'SLASHING_VOTE')),
|
|
20
21
|
status VARCHAR(20) NOT NULL CHECK (status IN ('signing', 'signed')),
|
|
@@ -87,6 +88,7 @@ WITH inserted AS (
|
|
|
87
88
|
validator_address,
|
|
88
89
|
slot,
|
|
89
90
|
block_number,
|
|
91
|
+
checkpoint_number,
|
|
90
92
|
block_index_within_checkpoint,
|
|
91
93
|
duty_type,
|
|
92
94
|
status,
|
|
@@ -94,13 +96,14 @@ WITH inserted AS (
|
|
|
94
96
|
node_id,
|
|
95
97
|
lock_token,
|
|
96
98
|
started_at
|
|
97
|
-
) VALUES ($1, $2, $3, $4, $5, $6, 'signing', $
|
|
99
|
+
) VALUES ($1, $2, $3, $4, $5, $6, $7, 'signing', $8, $9, $10, CURRENT_TIMESTAMP)
|
|
98
100
|
ON CONFLICT (rollup_address, validator_address, slot, duty_type, block_index_within_checkpoint) DO NOTHING
|
|
99
101
|
RETURNING
|
|
100
102
|
rollup_address,
|
|
101
103
|
validator_address,
|
|
102
104
|
slot,
|
|
103
105
|
block_number,
|
|
106
|
+
checkpoint_number,
|
|
104
107
|
block_index_within_checkpoint,
|
|
105
108
|
duty_type,
|
|
106
109
|
status,
|
|
@@ -120,6 +123,7 @@ SELECT
|
|
|
120
123
|
validator_address,
|
|
121
124
|
slot,
|
|
122
125
|
block_number,
|
|
126
|
+
checkpoint_number,
|
|
123
127
|
block_index_within_checkpoint,
|
|
124
128
|
duty_type,
|
|
125
129
|
status,
|
|
@@ -135,8 +139,8 @@ FROM validator_duties
|
|
|
135
139
|
WHERE rollup_address = $1
|
|
136
140
|
AND validator_address = $2
|
|
137
141
|
AND slot = $3
|
|
138
|
-
AND duty_type = $
|
|
139
|
-
AND block_index_within_checkpoint = $
|
|
142
|
+
AND duty_type = $7
|
|
143
|
+
AND block_index_within_checkpoint = $6
|
|
140
144
|
AND NOT EXISTS (SELECT 1 FROM inserted);
|
|
141
145
|
`;
|
|
142
146
|
/**
|
|
@@ -216,6 +220,7 @@ SELECT
|
|
|
216
220
|
validator_address,
|
|
217
221
|
slot,
|
|
218
222
|
block_number,
|
|
223
|
+
checkpoint_number,
|
|
219
224
|
block_index_within_checkpoint,
|
|
220
225
|
duty_type,
|
|
221
226
|
status,
|
package/dest/db/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { BlockNumber, CheckpointNumber, type IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
4
4
|
import { DutyType } from '@aztec/stdlib/ha-signing';
|
|
5
5
|
/**
|
|
@@ -10,6 +10,7 @@ export interface DutyRow {
|
|
|
10
10
|
validator_address: string;
|
|
11
11
|
slot: string;
|
|
12
12
|
block_number: string;
|
|
13
|
+
checkpoint_number: string;
|
|
13
14
|
block_index_within_checkpoint: number;
|
|
14
15
|
duty_type: DutyType;
|
|
15
16
|
status: DutyStatus;
|
|
@@ -21,6 +22,30 @@ export interface DutyRow {
|
|
|
21
22
|
completed_at: Date | null;
|
|
22
23
|
error_message: string | null;
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Plain-primitive representation of a duty record suitable for serialization
|
|
27
|
+
* (e.g. msgpackr for LMDB). All domain types are stored as their string/number
|
|
28
|
+
* equivalents. Timestamps are Unix milliseconds.
|
|
29
|
+
*/
|
|
30
|
+
export interface StoredDutyRecord {
|
|
31
|
+
rollupAddress: string;
|
|
32
|
+
validatorAddress: string;
|
|
33
|
+
slot: string;
|
|
34
|
+
blockNumber: string;
|
|
35
|
+
checkpointNumber: string;
|
|
36
|
+
blockIndexWithinCheckpoint: number;
|
|
37
|
+
dutyType: DutyType;
|
|
38
|
+
status: DutyStatus;
|
|
39
|
+
messageHash: string;
|
|
40
|
+
signature?: string;
|
|
41
|
+
nodeId: string;
|
|
42
|
+
lockToken: string;
|
|
43
|
+
/** Unix timestamp in milliseconds when signing started */
|
|
44
|
+
startedAtMs: number;
|
|
45
|
+
/** Unix timestamp in milliseconds when signing completed */
|
|
46
|
+
completedAtMs?: number;
|
|
47
|
+
errorMessage?: string;
|
|
48
|
+
}
|
|
24
49
|
/**
|
|
25
50
|
* Row type from INSERT_OR_GET_DUTY query (includes is_new flag)
|
|
26
51
|
*/
|
|
@@ -36,7 +61,8 @@ export declare enum DutyStatus {
|
|
|
36
61
|
}
|
|
37
62
|
export { DutyType };
|
|
38
63
|
/**
|
|
39
|
-
*
|
|
64
|
+
* Rich representation of a validator duty, with branded types and Date objects.
|
|
65
|
+
* This is the common output type returned by all SlashingProtectionDatabase implementations.
|
|
40
66
|
*/
|
|
41
67
|
export interface ValidatorDutyRecord {
|
|
42
68
|
/** Ethereum address of the rollup contract */
|
|
@@ -45,8 +71,10 @@ export interface ValidatorDutyRecord {
|
|
|
45
71
|
validatorAddress: EthAddress;
|
|
46
72
|
/** Slot number for this duty */
|
|
47
73
|
slot: SlotNumber;
|
|
48
|
-
/** Block number for this duty */
|
|
74
|
+
/** Block number for this duty (0 for non-block-proposal duties) */
|
|
49
75
|
blockNumber: BlockNumber;
|
|
76
|
+
/** Checkpoint number for this duty (0 for attestation and vote duties) */
|
|
77
|
+
checkpointNumber: CheckpointNumber;
|
|
50
78
|
/** Block index within checkpoint (0, 1, 2... for block proposals, -1 for other duty types) */
|
|
51
79
|
blockIndexWithinCheckpoint: number;
|
|
52
80
|
/** Type of duty being performed */
|
|
@@ -68,6 +96,13 @@ export interface ValidatorDutyRecord {
|
|
|
68
96
|
/** Error message (currently unused) */
|
|
69
97
|
errorMessage?: string;
|
|
70
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Convert a {@link StoredDutyRecord} (plain-primitive wire format) to a
|
|
101
|
+
* {@link ValidatorDutyRecord} (rich domain type).
|
|
102
|
+
*
|
|
103
|
+
* Shared by LMDB and any future non-Postgres backend implementations.
|
|
104
|
+
*/
|
|
105
|
+
export declare function recordFromFields(stored: StoredDutyRecord): ValidatorDutyRecord;
|
|
71
106
|
/**
|
|
72
107
|
* Duty identifier for block proposals.
|
|
73
108
|
* blockIndexWithinCheckpoint is REQUIRED and must be >= 0.
|
|
@@ -115,8 +150,10 @@ export declare function getBlockIndexFromDutyIdentifier(duty: DutyIdentifier): n
|
|
|
115
150
|
* Additional parameters for checking and recording a new duty
|
|
116
151
|
*/
|
|
117
152
|
interface CheckAndRecordExtra {
|
|
118
|
-
/** Block number for this duty */
|
|
119
|
-
blockNumber: BlockNumber
|
|
153
|
+
/** Block number for this duty (0 for non-block-proposal duties) */
|
|
154
|
+
blockNumber: BlockNumber;
|
|
155
|
+
/** Checkpoint number for this duty (0 for attestation and vote duties) */
|
|
156
|
+
checkpointNumber: CheckpointNumber;
|
|
120
157
|
/** The signing root (hash) for this duty */
|
|
121
158
|
messageHash: string;
|
|
122
159
|
/** Identifier for the node that acquired the lock */
|
|
@@ -151,4 +188,4 @@ interface DeleteDutyExtra {
|
|
|
151
188
|
* Uses intersection with DutyIdentifier to preserve the discriminated union.
|
|
152
189
|
*/
|
|
153
190
|
export type DeleteDutyParams = DutyIdentifier & DeleteDutyExtra;
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUsscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQU0sV0FBVyxPQUFPO0lBQ3RCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUMxQiw2QkFBNkIsRUFBRSxNQUFNLENBQUM7SUFDdEMsU0FBUyxFQUFFLFFBQVEsQ0FBQztJQUNwQixNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDakIsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsYUFBYSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDOUI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztJQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFD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
|
package/dest/db/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"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"}
|
package/dest/db/types.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
1
3
|
import { DutyType } from '@aztec/stdlib/ha-signing';
|
|
2
4
|
/**
|
|
3
5
|
* Status of a duty in the database
|
|
@@ -8,6 +10,30 @@ import { DutyType } from '@aztec/stdlib/ha-signing';
|
|
|
8
10
|
}({});
|
|
9
11
|
// Re-export DutyType from stdlib
|
|
10
12
|
export { DutyType };
|
|
13
|
+
/**
|
|
14
|
+
* Convert a {@link StoredDutyRecord} (plain-primitive wire format) to a
|
|
15
|
+
* {@link ValidatorDutyRecord} (rich domain type).
|
|
16
|
+
*
|
|
17
|
+
* Shared by LMDB and any future non-Postgres backend implementations.
|
|
18
|
+
*/ export function recordFromFields(stored) {
|
|
19
|
+
return {
|
|
20
|
+
rollupAddress: EthAddress.fromString(stored.rollupAddress),
|
|
21
|
+
validatorAddress: EthAddress.fromString(stored.validatorAddress),
|
|
22
|
+
slot: SlotNumber.fromString(stored.slot),
|
|
23
|
+
blockNumber: BlockNumber.fromString(stored.blockNumber),
|
|
24
|
+
checkpointNumber: CheckpointNumber.fromString(stored.checkpointNumber),
|
|
25
|
+
blockIndexWithinCheckpoint: stored.blockIndexWithinCheckpoint,
|
|
26
|
+
dutyType: stored.dutyType,
|
|
27
|
+
status: stored.status,
|
|
28
|
+
messageHash: stored.messageHash,
|
|
29
|
+
signature: stored.signature,
|
|
30
|
+
nodeId: stored.nodeId,
|
|
31
|
+
lockToken: stored.lockToken,
|
|
32
|
+
startedAt: new Date(stored.startedAtMs),
|
|
33
|
+
completedAt: stored.completedAtMs !== undefined ? new Date(stored.completedAtMs) : undefined,
|
|
34
|
+
errorMessage: stored.errorMessage
|
|
35
|
+
};
|
|
36
|
+
}
|
|
11
37
|
/**
|
|
12
38
|
* Validates and normalizes the block index for a duty.
|
|
13
39
|
* - BLOCK_PROPOSAL: validates blockIndexWithinCheckpoint is provided and >= 0
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for creating validator HA signers
|
|
3
|
+
*/
|
|
4
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
|
+
import type { LocalSignerConfig, ValidatorHASignerConfig } from '@aztec/stdlib/ha-signing';
|
|
6
|
+
import type { CreateHASignerDeps, CreateLocalSignerWithProtectionDeps, SlashingProtectionDatabase } from './types.js';
|
|
3
7
|
import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
4
8
|
/**
|
|
5
9
|
* Create a validator HA signer with PostgreSQL backend
|
|
@@ -16,7 +20,6 @@ import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
|
16
20
|
* ```typescript
|
|
17
21
|
* const { signer, db } = await createHASigner({
|
|
18
22
|
* databaseUrl: process.env.DATABASE_URL,
|
|
19
|
-
* haSigningEnabled: true,
|
|
20
23
|
* nodeId: 'validator-node-1',
|
|
21
24
|
* pollingIntervalMs: 100,
|
|
22
25
|
* signingTimeoutMs: 3000,
|
|
@@ -39,4 +42,36 @@ export declare function createHASigner(config: ValidatorHASignerConfig, deps?: C
|
|
|
39
42
|
signer: ValidatorHASigner;
|
|
40
43
|
db: SlashingProtectionDatabase;
|
|
41
44
|
}>;
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Create a local (single-node) signing protection signer backed by LMDB.
|
|
47
|
+
*
|
|
48
|
+
* This provides double-signing protection for nodes that are NOT running in a
|
|
49
|
+
* high-availability (multi-node) setup. It prevents a proposer from sending two
|
|
50
|
+
* proposals for the same slot if the node crashes and restarts mid-proposal.
|
|
51
|
+
*
|
|
52
|
+
* When `config.dataDirectory` is set, the protection database is persisted to disk
|
|
53
|
+
* and survives crashes/restarts. When unset, an ephemeral in-memory store is
|
|
54
|
+
* used which protects within a single run but not across restarts.
|
|
55
|
+
*
|
|
56
|
+
* @param config - Local signer config
|
|
57
|
+
* @param deps - Optional dependencies (telemetry, date provider).
|
|
58
|
+
* @returns An object containing the signer and database instances.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createLocalSignerWithProtection(config: LocalSignerConfig, deps?: CreateLocalSignerWithProtectionDeps): Promise<{
|
|
61
|
+
signer: ValidatorHASigner;
|
|
62
|
+
db: SlashingProtectionDatabase;
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Create an in-memory LMDB-backed SlashingProtectionDatabase that can be shared across
|
|
66
|
+
* multiple validator nodes in the same process. Used for testing HA setups.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createSharedSlashingProtectionDb(dateProvider?: DateProvider): Promise<SlashingProtectionDatabase>;
|
|
69
|
+
/**
|
|
70
|
+
* Create a ValidatorHASigner backed by a pre-existing SlashingProtectionDatabase.
|
|
71
|
+
* Used for testing HA setups where multiple nodes share the same protection database.
|
|
72
|
+
*/
|
|
73
|
+
export declare function createSignerFromSharedDb(db: SlashingProtectionDatabase, config: Pick<ValidatorHASignerConfig, 'nodeId' | 'pollingIntervalMs' | 'signingTimeoutMs' | 'maxStuckDutiesAgeMs' | 'rollupAddress'>, deps?: CreateLocalSignerWithProtectionDeps): {
|
|
74
|
+
signer: ValidatorHASigner;
|
|
75
|
+
db: SlashingProtectionDatabase;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVEzRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxtQ0FBbUMsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCx3QkFBc0IsY0FBYyxDQUNsQyxNQUFNLEVBQUUsdUJBQXVCLEVBQy9CLElBQUksQ0FBQyxFQUFFLGtCQUFrQixHQUN4QixPQUFPLENBQUM7SUFDVCxNQUFNLEVBQUUsaUJBQWlCLENBQUM7SUFDMUIsRUFBRSxFQUFFLDBCQUEwQixDQUFDO0NBQ2hDLENBQUMsQ0F1Q0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHdCQUFzQiwrQkFBK0IsQ0FDbkQsTUFBTSxFQUFFLGlCQUFpQixFQUN6QixJQUFJLENBQUMsRUFBRSxtQ0FBbUMsR0FDekMsT0FBTyxDQUFDO0lBQ1QsTUFBTSxFQUFFLGlCQUFpQixDQUFDO0lBQzFCLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQztDQUNoQyxDQUFDLENBcUNEO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGdDQUFnQyxDQUNwRCxZQUFZLEdBQUUsWUFBaUMsR0FDOUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBS3JDO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxFQUFFLEVBQUUsMEJBQTBCLEVBQzlCLE1BQU0sRUFBRSxJQUFJLENBQ1YsdUJBQXVCLEVBQ3ZCLFFBQVEsR0FBRyxtQkFBbUIsR0FBRyxrQkFBa0IsR0FBRyxxQkFBcUIsR0FBRyxlQUFlLENBQzlGLEVBQ0QsSUFBSSxDQUFDLEVBQUUsbUNBQW1DLEdBQ3pDO0lBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDO0lBQUMsRUFBRSxFQUFFLDBCQUEwQixDQUFBO0NBQUUsQ0FNL0QifQ==
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAQ3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,uBAAuB,EAC/B,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,EAAE,EAAE,0BAA0B,CAAC;CAChC,CAAC,CAuCD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,iBAAiB,EACzB,IAAI,CAAC,EAAE,mCAAmC,GACzC,OAAO,CAAC;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,EAAE,EAAE,0BAA0B,CAAC;CAChC,CAAC,CAqCD;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CACpD,YAAY,GAAE,YAAiC,GAC9C,OAAO,CAAC,0BAA0B,CAAC,CAKrC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,0BAA0B,EAC9B,MAAM,EAAE,IAAI,CACV,uBAAuB,EACvB,QAAQ,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,eAAe,CAC9F,EACD,IAAI,CAAC,EAAE,mCAAmC,GACzC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,0BAA0B,CAAA;CAAE,CAM/D"}
|
package/dest/factory.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Factory functions for creating validator HA signers
|
|
3
3
|
*/ import { DateProvider } from '@aztec/foundation/timer';
|
|
4
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
5
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
6
|
import { Pool } from 'pg';
|
|
7
|
+
import { LmdbSlashingProtectionDatabase, migrateLmdbSlashingProtectionDatabase } from './db/lmdb.js';
|
|
6
8
|
import { PostgresSlashingProtectionDatabase } from './db/postgres.js';
|
|
7
9
|
import { HASignerMetrics } from './metrics.js';
|
|
8
10
|
import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
@@ -21,7 +23,6 @@ import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
|
21
23
|
* ```typescript
|
|
22
24
|
* const { signer, db } = await createHASigner({
|
|
23
25
|
* databaseUrl: process.env.DATABASE_URL,
|
|
24
|
-
* haSigningEnabled: true,
|
|
25
26
|
* nodeId: 'validator-node-1',
|
|
26
27
|
* pollingIntervalMs: 100,
|
|
27
28
|
* signingTimeoutMs: 3000,
|
|
@@ -41,7 +42,8 @@ import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
|
41
42
|
* @returns An object containing the signer and database instances
|
|
42
43
|
*/ export async function createHASigner(config, deps) {
|
|
43
44
|
const { databaseUrl, poolMaxCount, poolMinCount, poolIdleTimeoutMs, poolConnectionTimeoutMs, ...signerConfig } = config;
|
|
44
|
-
|
|
45
|
+
const databaseUrlValue = databaseUrl?.getValue();
|
|
46
|
+
if (!databaseUrlValue) {
|
|
45
47
|
throw new Error('databaseUrl is required for createHASigner');
|
|
46
48
|
}
|
|
47
49
|
const telemetryClient = deps?.telemetryClient ?? getTelemetryClient();
|
|
@@ -50,7 +52,7 @@ import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
|
50
52
|
let pool;
|
|
51
53
|
if (!deps?.pool) {
|
|
52
54
|
pool = new Pool({
|
|
53
|
-
connectionString:
|
|
55
|
+
connectionString: databaseUrlValue,
|
|
54
56
|
max: poolMaxCount ?? 10,
|
|
55
57
|
min: poolMinCount ?? 0,
|
|
56
58
|
idleTimeoutMillis: poolIdleTimeoutMs ?? 10_000,
|
|
@@ -66,10 +68,72 @@ import { ValidatorHASigner } from './validator_ha_signer.js';
|
|
|
66
68
|
// Create metrics
|
|
67
69
|
const metrics = new HASignerMetrics(telemetryClient, signerConfig.nodeId);
|
|
68
70
|
// Create signer
|
|
69
|
-
const signer = new ValidatorHASigner(db, {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
71
|
+
const signer = new ValidatorHASigner(db, signerConfig, {
|
|
72
|
+
metrics,
|
|
73
|
+
dateProvider
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
signer,
|
|
77
|
+
db
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a local (single-node) signing protection signer backed by LMDB.
|
|
82
|
+
*
|
|
83
|
+
* This provides double-signing protection for nodes that are NOT running in a
|
|
84
|
+
* high-availability (multi-node) setup. It prevents a proposer from sending two
|
|
85
|
+
* proposals for the same slot if the node crashes and restarts mid-proposal.
|
|
86
|
+
*
|
|
87
|
+
* When `config.dataDirectory` is set, the protection database is persisted to disk
|
|
88
|
+
* and survives crashes/restarts. When unset, an ephemeral in-memory store is
|
|
89
|
+
* used which protects within a single run but not across restarts.
|
|
90
|
+
*
|
|
91
|
+
* @param config - Local signer config
|
|
92
|
+
* @param deps - Optional dependencies (telemetry, date provider).
|
|
93
|
+
* @returns An object containing the signer and database instances.
|
|
94
|
+
*/ export async function createLocalSignerWithProtection(config, deps) {
|
|
95
|
+
const telemetryClient = deps?.telemetryClient ?? getTelemetryClient();
|
|
96
|
+
const dateProvider = deps?.dateProvider ?? new DateProvider();
|
|
97
|
+
const kvStore = await createStore('signing-protection', LmdbSlashingProtectionDatabase.SCHEMA_VERSION, {
|
|
98
|
+
dataDirectory: config.dataDirectory,
|
|
99
|
+
dataStoreMapSizeKb: config.signingProtectionMapSizeKb ?? config.dataStoreMapSizeKb,
|
|
100
|
+
rollupAddress: config.rollupAddress
|
|
101
|
+
}, undefined, {
|
|
102
|
+
onUpgrade: (dataDirectory, currentVersion, latestVersion)=>migrateLmdbSlashingProtectionDatabase(dataDirectory, currentVersion, latestVersion, config.signingProtectionMapSizeKb ?? config.dataStoreMapSizeKb),
|
|
103
|
+
schemaVersionMismatchPolicy: 'throw'
|
|
104
|
+
});
|
|
105
|
+
const db = new LmdbSlashingProtectionDatabase(kvStore, dateProvider);
|
|
106
|
+
const signerConfig = {
|
|
107
|
+
...config,
|
|
108
|
+
nodeId: config.nodeId || 'local'
|
|
109
|
+
};
|
|
110
|
+
const metrics = new HASignerMetrics(telemetryClient, signerConfig.nodeId, 'LocalSigningProtectionMetrics');
|
|
111
|
+
const signer = new ValidatorHASigner(db, signerConfig, {
|
|
112
|
+
metrics,
|
|
113
|
+
dateProvider
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
signer,
|
|
117
|
+
db
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create an in-memory LMDB-backed SlashingProtectionDatabase that can be shared across
|
|
122
|
+
* multiple validator nodes in the same process. Used for testing HA setups.
|
|
123
|
+
*/ export async function createSharedSlashingProtectionDb(dateProvider = new DateProvider()) {
|
|
124
|
+
const kvStore = await createStore('shared-signing-protection', LmdbSlashingProtectionDatabase.SCHEMA_VERSION, {
|
|
125
|
+
dataStoreMapSizeKb: 1024 * 1024
|
|
126
|
+
});
|
|
127
|
+
return new LmdbSlashingProtectionDatabase(kvStore, dateProvider);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Create a ValidatorHASigner backed by a pre-existing SlashingProtectionDatabase.
|
|
131
|
+
* Used for testing HA setups where multiple nodes share the same protection database.
|
|
132
|
+
*/ export function createSignerFromSharedDb(db, config, deps) {
|
|
133
|
+
const telemetryClient = deps?.telemetryClient ?? getTelemetryClient();
|
|
134
|
+
const dateProvider = deps?.dateProvider ?? new DateProvider();
|
|
135
|
+
const metrics = new HASignerMetrics(telemetryClient, config.nodeId, 'SharedSigningProtectionMetrics');
|
|
136
|
+
const signer = new ValidatorHASigner(db, config, {
|
|
73
137
|
metrics,
|
|
74
138
|
dateProvider
|
|
75
139
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
2
|
-
import type {
|
|
2
|
+
import type { BaseSignerConfig } from '@aztec/stdlib/ha-signing';
|
|
3
3
|
import { type CheckAndRecordParams, type DeleteDutyParams, type RecordSuccessParams } from './db/types.js';
|
|
4
4
|
import type { HASignerMetrics } from './metrics.js';
|
|
5
5
|
import type { SlashingProtectionDatabase } from './types.js';
|
|
@@ -33,7 +33,7 @@ export declare class SlashingProtectionService {
|
|
|
33
33
|
private readonly dateProvider;
|
|
34
34
|
private cleanupRunningPromise;
|
|
35
35
|
private lastOldDutiesCleanupAtMs?;
|
|
36
|
-
constructor(db: SlashingProtectionDatabase, config:
|
|
36
|
+
constructor(db: SlashingProtectionDatabase, config: BaseSignerConfig, deps: SlashingProtectionServiceDeps);
|
|
37
37
|
/**
|
|
38
38
|
* Check if a duty can be performed and acquire the lock if so.
|
|
39
39
|
*
|
|
@@ -90,4 +90,4 @@ export declare class SlashingProtectionService {
|
|
|
90
90
|
close(): Promise<void>;
|
|
91
91
|
private cleanup;
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hpbmdfcHJvdGVjdGlvbl9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xhc2hpbmdfcHJvdGVjdGlvbl9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUNMLEtBQUssb0JBQW9CLEVBQ3pCLEtBQUssZ0JBQWdCLEVBRXJCLEtBQUssbUJBQW1CLEVBRXpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3RCxNQUFNLFdBQVcsNkJBQTZCO0lBQzVDLE9BQU8sRUFBRSxlQUFlLENBQUM7SUFDekIsWUFBWSxFQUFFLFlBQVksQ0FBQztDQUM1QjtBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gscUJBQWEseUJBQXlCO0lBYWxDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUNuQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFiekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVM7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBUztJQUMzQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFTO0lBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQVM7SUFFN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQWtCO0lBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFlO0lBRTVDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBaUI7SUFDOUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQVM7SUFFMUMsWUFDbUIsRUFBRSxFQUFFLDBCQUEwQixFQUM5QixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3pDLElBQUksRUFBRSw2QkFBNkIsRUFXcEM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQXFFbEU7SUFFRDs7Ozs7O09BTUc7SUFDRyxhQUFhLENBQUMsTUFBTSxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0EyQmpFO0lBRUQ7Ozs7OztPQU1HO0lBQ0csVUFBVSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBd0IzRDtJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNLElBQUksTUFBTSxDQUVuQjtJQUVEOzs7T0FHRztJQUNIOzs7T0FHRztJQUNHLEtBQUssa0JBWVY7SUFFRDs7T0FFRztJQUNHLElBQUksa0JBR1Q7SUFFRDs7O09BR0c7SUFDRyxLQUFLLGtCQUdWO1lBTWEsT0FBTztDQStCdEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashing_protection_service.d.ts","sourceRoot":"","sources":["../src/slashing_protection_service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"slashing_protection_service.d.ts","sourceRoot":"","sources":["../src/slashing_protection_service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAAyB;IAalC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAE1C,YACmB,EAAE,EAAE,0BAA0B,EAC9B,MAAM,EAAE,gBAAgB,EACzC,IAAI,EAAE,6BAA6B,EAWpC;IAED;;;;;;;;;;;;;;OAcG;IACG,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElE;IAED;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BjE;IAED;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB3D;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACH;;;OAGG;IACG,KAAK,kBAYV;IAED;;OAEG;IACG,IAAI,kBAGT;IAED;;;OAGG;IACG,KAAK,kBAGV;YAMa,OAAO;CA+BtB"}
|
|
@@ -71,7 +71,7 @@ import { DutyAlreadySignedError, SlashingProtectionError } from './errors.js';
|
|
|
71
71
|
const { isNew, record } = await this.db.tryInsertOrGetExisting(params);
|
|
72
72
|
if (isNew) {
|
|
73
73
|
// We successfully acquired the lock
|
|
74
|
-
this.log.
|
|
74
|
+
this.log.verbose(`Acquired lock for duty ${dutyType} at slot ${slot}`, {
|
|
75
75
|
validatorAddress: validatorAddress.toString(),
|
|
76
76
|
nodeId
|
|
77
77
|
});
|
|
@@ -128,7 +128,7 @@ import { DutyAlreadySignedError, SlashingProtectionError } from './errors.js';
|
|
|
128
128
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
129
129
|
const success = await this.db.updateDutySigned(rollupAddress, validatorAddress, slot, dutyType, signature.toString(), lockToken, blockIndexWithinCheckpoint);
|
|
130
130
|
if (success) {
|
|
131
|
-
this.log.
|
|
131
|
+
this.log.verbose(`Recorded successful signing for duty ${dutyType} at slot ${slot}`, {
|
|
132
132
|
validatorAddress: validatorAddress.toString(),
|
|
133
133
|
nodeId
|
|
134
134
|
});
|
|
@@ -174,10 +174,10 @@ import { DutyAlreadySignedError, SlashingProtectionError } from './errors.js';
|
|
|
174
174
|
* Also performs one-time cleanup of duties with outdated rollup addresses.
|
|
175
175
|
*/ async start() {
|
|
176
176
|
// One-time cleanup at startup: remove duties from previous rollup versions
|
|
177
|
-
const numOutdatedRollupDuties = await this.db.cleanupOutdatedRollupDuties(this.config.
|
|
177
|
+
const numOutdatedRollupDuties = await this.db.cleanupOutdatedRollupDuties(this.config.rollupAddress);
|
|
178
178
|
if (numOutdatedRollupDuties > 0) {
|
|
179
179
|
this.log.info(`Cleaned up ${numOutdatedRollupDuties} duties with outdated rollup address at startup`, {
|
|
180
|
-
currentRollupAddress: this.config.
|
|
180
|
+
currentRollupAddress: this.config.rollupAddress.toString()
|
|
181
181
|
});
|
|
182
182
|
this.metrics.recordCleanup('outdated_rollup', numOutdatedRollupDuties);
|
|
183
183
|
}
|
package/dest/types.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
4
|
-
import { DutyType, type HAProtectedSigningContext, type SigningContext, type ValidatorHASignerConfig, getBlockNumberFromSigningContext as getBlockNumberFromSigningContextFromStdlib, isHAProtectedContext } from '@aztec/stdlib/ha-signing';
|
|
4
|
+
import { type AttestationSigningContext, type CheckpointProposalSigningContext, DutyType, type HAProtectedSigningContext, type SigningContext, type ValidatorHASignerConfig, getBlockNumberFromSigningContext as getBlockNumberFromSigningContextFromStdlib, getCheckpointNumberFromSigningContext as getCheckpointNumberFromSigningContextFromStdlib, isHAProtectedContext } from '@aztec/stdlib/ha-signing';
|
|
5
5
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
6
6
|
import type { Pool } from 'pg';
|
|
7
7
|
import type { BlockProposalDutyIdentifier, CheckAndRecordParams, DeleteDutyParams, DutyIdentifier, DutyRow, OtherDutyIdentifier, RecordSuccessParams, ValidatorDutyRecord } from './db/types.js';
|
|
8
|
-
export type { BlockProposalDutyIdentifier, CheckAndRecordParams, DeleteDutyParams, DutyIdentifier, DutyRow, HAProtectedSigningContext, OtherDutyIdentifier, RecordSuccessParams, SigningContext, ValidatorDutyRecord, ValidatorHASignerConfig, };
|
|
8
|
+
export type { AttestationSigningContext, BlockProposalDutyIdentifier, CheckAndRecordParams, CheckpointProposalSigningContext, DeleteDutyParams, DutyIdentifier, DutyRow, HAProtectedSigningContext, OtherDutyIdentifier, RecordSuccessParams, SigningContext, ValidatorDutyRecord, ValidatorHASignerConfig, };
|
|
9
9
|
export { DutyStatus, DutyType, getBlockIndexFromDutyIdentifier, normalizeBlockIndex } from './db/types.js';
|
|
10
10
|
export { isHAProtectedContext };
|
|
11
11
|
export { getBlockNumberFromSigningContextFromStdlib as getBlockNumberFromSigningContext };
|
|
12
|
+
export { getCheckpointNumberFromSigningContextFromStdlib as getCheckpointNumberFromSigningContext };
|
|
12
13
|
/**
|
|
13
14
|
* Result of tryInsertOrGetExisting operation
|
|
14
15
|
*/
|
|
@@ -36,6 +37,10 @@ export interface CreateHASignerDeps {
|
|
|
36
37
|
*/
|
|
37
38
|
dateProvider?: DateProvider;
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* deps for creating a local signing protection signer
|
|
42
|
+
*/
|
|
43
|
+
export type CreateLocalSignerWithProtectionDeps = Omit<CreateHASignerDeps, 'pool'>;
|
|
39
44
|
/**
|
|
40
45
|
* Database interface for slashing protection operations
|
|
41
46
|
* This abstraction allows for different database implementations (PostgreSQL, SQLite, etc.)
|
|
@@ -92,4 +97,4 @@ export interface SlashingProtectionDatabase {
|
|
|
92
97
|
*/
|
|
93
98
|
close(): Promise<void>;
|
|
94
99
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxLQUFLLHlCQUF5QixFQUM5QixLQUFLLGdDQUFnQyxFQUNyQyxRQUFRLEVBQ1IsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyxjQUFjLEVBQ25CLEtBQUssdUJBQXVCLEVBQzVCLGdDQUFnQyxJQUFJLDBDQUEwQyxFQUM5RSxxQ0FBcUMsSUFBSSwrQ0FBK0MsRUFDeEYsb0JBQW9CLEVBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRS9CLE9BQU8sS0FBSyxFQUNWLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsWUFBWSxFQUNWLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLE9BQU8sRUFDUCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLHVCQUF1QixHQUN4QixDQUFDO0FBQ0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFDaEMsT0FBTyxFQUFFLDBDQUEwQyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7QUFDMUYsT0FBTyxFQUFFLCtDQUErQyxJQUFJLHFDQUFxQyxFQUFFLENBQUM7QUFFcEc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLDJFQUEyRTtJQUMzRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ2YscURBQXFEO0lBQ3JELE1BQU0sRUFBRSxtQkFBbUIsQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQzs7O09BR0c7SUFDSCxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDWjs7T0FFRztJQUNILGVBQWUsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUNsQzs7T0FFRztJQUNILFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxNQUFNLG1DQUFtQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVuRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sV0FBVywwQkFBMEI7SUFDekM7Ozs7O09BS0c7SUFDSCxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFcEY7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FDZCxhQUFhLEVBQUUsVUFBVSxFQUN6QixnQkFBZ0IsRUFBRSxVQUFVLEVBQzVCLElBQUksRUFBRSxVQUFVLEVBQ2hCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLDBCQUEwQixFQUFFLE1BQU0sR0FDakMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXBCOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FDUixhQUFhLEVBQUUsVUFBVSxFQUN6QixnQkFBZ0IsRUFBRSxVQUFVLEVBQzVCLElBQUksRUFBRSxVQUFVLEVBQ2hCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLDBCQUEwQixFQUFFLE1BQU0sR0FDakMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXBCOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekU7Ozs7O09BS0c7SUFDSCwyQkFBMkIsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRS9FOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRDs7O09BR0c7SUFDSCxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3hCIn0=
|
package/dest/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,QAAQ,EACR,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,gCAAgC,IAAI,0CAA0C,EAC9E,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,OAAO,EAAE,0CAA0C,IAAI,gCAAgC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dest/types.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { getBlockNumberFromSigningContext as getBlockNumberFromSigningContextFromStdlib, isHAProtectedContext } from '@aztec/stdlib/ha-signing';
|
|
1
|
+
import { getBlockNumberFromSigningContext as getBlockNumberFromSigningContextFromStdlib, getCheckpointNumberFromSigningContext as getCheckpointNumberFromSigningContextFromStdlib, isHAProtectedContext } from '@aztec/stdlib/ha-signing';
|
|
2
2
|
export { DutyStatus, DutyType, getBlockIndexFromDutyIdentifier, normalizeBlockIndex } from './db/types.js';
|
|
3
3
|
export { isHAProtectedContext };
|
|
4
4
|
export { getBlockNumberFromSigningContextFromStdlib as getBlockNumberFromSigningContext };
|
|
5
|
+
export { getCheckpointNumberFromSigningContextFromStdlib as getCheckpointNumberFromSigningContext };
|
|
@@ -9,7 +9,7 @@ import type { Buffer32 } from '@aztec/foundation/buffer';
|
|
|
9
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
10
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
11
11
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
12
|
-
import { type
|
|
12
|
+
import { type BaseSignerConfig, type HAProtectedSigningContext } from '@aztec/stdlib/ha-signing';
|
|
13
13
|
import type { HASignerMetrics } from './metrics.js';
|
|
14
14
|
import type { SlashingProtectionDatabase } from './types.js';
|
|
15
15
|
export interface ValidatorHASignerDeps {
|
|
@@ -42,7 +42,7 @@ export declare class ValidatorHASigner {
|
|
|
42
42
|
private readonly rollupAddress;
|
|
43
43
|
private readonly dateProvider;
|
|
44
44
|
private readonly metrics;
|
|
45
|
-
constructor(db: SlashingProtectionDatabase, config:
|
|
45
|
+
constructor(db: SlashingProtectionDatabase, config: BaseSignerConfig, deps: ValidatorHASignerDeps);
|
|
46
46
|
/**
|
|
47
47
|
* Sign a message with slashing protection.
|
|
48
48
|
*
|
|
@@ -76,4 +76,4 @@ export declare class ValidatorHASigner {
|
|
|
76
76
|
*/
|
|
77
77
|
stop(): Promise<void>;
|
|
78
78
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yX2hhX3NpZ25lci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZhbGlkYXRvcl9oYV9zaWduZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUVyQixLQUFLLHlCQUF5QixFQUcvQixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3RCxNQUFNLFdBQVcscUJBQXFCO0lBQ3BDLE9BQU8sRUFBRSxlQUFlLENBQUM7SUFDekIsWUFBWSxFQUFFLFlBQVksQ0FBQztDQUM1QjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxxQkFBYSxpQkFBaUI7SUFVMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBVHpCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQTRCO0lBQy9ELE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFhO0lBRTNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFlO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFrQjtJQUUxQyxZQUNFLEVBQUUsRUFBRSwwQkFBMEIsRUFDYixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3pDLElBQUksRUFBRSxxQkFBcUIsRUFtQjVCO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDRyxrQkFBa0IsQ0FDdEIsZ0JBQWdCLEVBQUUsVUFBVSxFQUM1QixXQUFXLEVBQUUsUUFBUSxFQUNyQixPQUFPLEVBQUUseUJBQXlCLEVBQ2xDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUNwRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBeURwQjtJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNLElBQUksTUFBTSxDQUVuQjtJQUVEOzs7T0FHRztJQUNHLEtBQUssa0JBRVY7SUFFRDs7O09BR0c7SUFDRyxJQUFJLGtCQUdUO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator_ha_signer.d.ts","sourceRoot":"","sources":["../src/validator_ha_signer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"validator_ha_signer.d.ts","sourceRoot":"","sources":["../src/validator_ha_signer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAG/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAE3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAE1C,YACE,EAAE,EAAE,0BAA0B,EACb,MAAM,EAAE,gBAAgB,EACzC,IAAI,EAAE,qBAAqB,EAmB5B;IAED;;;;;;;;;;;;;;;;OAgBG;IACG,kBAAkB,CACtB,gBAAgB,EAAE,UAAU,EAC5B,WAAW,EAAE,QAAQ,EACrB,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,GACpD,OAAO,CAAC,SAAS,CAAC,CAyDpB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACG,KAAK,kBAEV;IAED;;;OAGG;IACG,IAAI,kBAGT;CACF"}
|