@aztec/validator-ha-signer 0.0.1-commit.592b9384 → 0.0.1-commit.6a729f7
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/config.d.ts +1 -18
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +0 -13
- package/dest/db/postgres.d.ts +3 -3
- package/dest/db/postgres.d.ts.map +1 -1
- package/dest/db/postgres.js +2 -8
- package/dest/db/schema.d.ts +7 -7
- package/dest/db/schema.d.ts.map +1 -1
- package/dest/db/schema.js +17 -25
- package/dest/db/types.d.ts +1 -6
- package/dest/db/types.d.ts.map +1 -1
- package/dest/slashing_protection_service.d.ts +1 -1
- package/dest/slashing_protection_service.d.ts.map +1 -1
- package/dest/slashing_protection_service.js +4 -4
- package/dest/types.d.ts +5 -5
- package/dest/types.d.ts.map +1 -1
- package/dest/validator_ha_signer.d.ts +2 -3
- package/dest/validator_ha_signer.d.ts.map +1 -1
- package/dest/validator_ha_signer.js +1 -6
- package/package.json +2 -3
- package/src/config.ts +0 -16
- package/src/db/postgres.ts +0 -8
- package/src/db/schema.ts +17 -25
- package/src/db/types.ts +0 -5
- package/src/slashing_protection_service.ts +3 -11
- package/src/types.ts +0 -4
- package/src/validator_ha_signer.ts +1 -6
package/dest/config.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
2
1
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
3
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
2
|
import { z } from 'zod';
|
|
5
3
|
/**
|
|
6
4
|
* Configuration for the Validator HA Signer
|
|
@@ -11,8 +9,6 @@ import { z } from 'zod';
|
|
|
11
9
|
export interface ValidatorHASignerConfig {
|
|
12
10
|
/** Whether HA signing / slashing protection is enabled */
|
|
13
11
|
haSigningEnabled: boolean;
|
|
14
|
-
/** L1 contract addresses (rollup address required) */
|
|
15
|
-
l1Contracts: Pick<L1ContractAddresses, 'rollupAddress'>;
|
|
16
12
|
/** Unique identifier for this node */
|
|
17
13
|
nodeId: string;
|
|
18
14
|
/** How long to wait between polls when a duty is being signed (ms) */
|
|
@@ -48,13 +44,6 @@ export declare const defaultValidatorHASignerConfig: ValidatorHASignerConfig;
|
|
|
48
44
|
export declare function getConfigEnvVars(): ValidatorHASignerConfig;
|
|
49
45
|
export declare const ValidatorHASignerConfigSchema: z.ZodObject<{
|
|
50
46
|
haSigningEnabled: z.ZodBoolean;
|
|
51
|
-
l1Contracts: z.ZodObject<{
|
|
52
|
-
rollupAddress: z.ZodType<EthAddress, z.ZodTypeDef, EthAddress>;
|
|
53
|
-
}, "strip", z.ZodTypeAny, {
|
|
54
|
-
rollupAddress: EthAddress;
|
|
55
|
-
}, {
|
|
56
|
-
rollupAddress: EthAddress;
|
|
57
|
-
}>;
|
|
58
47
|
nodeId: z.ZodString;
|
|
59
48
|
pollingIntervalMs: z.ZodNumber;
|
|
60
49
|
signingTimeoutMs: z.ZodNumber;
|
|
@@ -66,9 +55,6 @@ export declare const ValidatorHASignerConfigSchema: z.ZodObject<{
|
|
|
66
55
|
poolConnectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
67
56
|
}, "strip", z.ZodTypeAny, {
|
|
68
57
|
haSigningEnabled: boolean;
|
|
69
|
-
l1Contracts: {
|
|
70
|
-
rollupAddress: EthAddress;
|
|
71
|
-
};
|
|
72
58
|
nodeId: string;
|
|
73
59
|
pollingIntervalMs: number;
|
|
74
60
|
signingTimeoutMs: number;
|
|
@@ -80,9 +66,6 @@ export declare const ValidatorHASignerConfigSchema: z.ZodObject<{
|
|
|
80
66
|
poolConnectionTimeoutMs?: number | undefined;
|
|
81
67
|
}, {
|
|
82
68
|
haSigningEnabled: boolean;
|
|
83
|
-
l1Contracts: {
|
|
84
|
-
rollupAddress: EthAddress;
|
|
85
|
-
};
|
|
86
69
|
nodeId: string;
|
|
87
70
|
pollingIntervalMs: number;
|
|
88
71
|
signingTimeoutMs: number;
|
|
@@ -93,4 +76,4 @@ export declare const ValidatorHASignerConfigSchema: z.ZodObject<{
|
|
|
93
76
|
poolIdleTimeoutMs?: number | undefined;
|
|
94
77
|
poolConnectionTimeoutMs?: number | undefined;
|
|
95
78
|
}>;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQU14QixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7O0dBS0c7QUFDSCxNQUFNLFdBQVcsdUJBQXVCO0lBQ3RDLDBEQUEwRDtJQUMxRCxnQkFBZ0IsRUFBRSxPQUFPLENBQUM7SUFDMUIsc0NBQXNDO0lBQ3RDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixzRUFBc0U7SUFDdEUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLG9FQUFvRTtJQUNwRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsa0dBQWtHO0lBQ2xHLG1CQUFtQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQzdCOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQjs7T0FFRztJQUNILDBEQUEwRDtJQUMxRCxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEIseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixvREFBb0Q7SUFDcEQsaUJBQWlCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDM0Isa0VBQWtFO0lBQ2xFLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2xDO0FBRUQsZUFBTyxNQUFNLCtCQUErQixFQUFFLGtCQUFrQixDQUFDLHVCQUF1QixDQW1EdkYsQ0FBQztBQUVGLGVBQU8sTUFBTSw4QkFBOEIsRUFBRSx1QkFFNUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLElBQUksdUJBQXVCLENBRTFEO0FBRUQsZUFBTyxNQUFNLDZCQUE2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBV0UsQ0FBQyJ9
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAMxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,CAAC;IACzB,kGAAkG;IAClG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,+BAA+B,EAAE,kBAAkB,CAAC,uBAAuB,CAmDvF,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,uBAE5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,uBAAuB,CAE1D;AAED,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWE,CAAC"}
|
package/dest/config.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import { z } from 'zod';
|
|
4
3
|
export const validatorHASignerConfigMappings = {
|
|
5
4
|
haSigningEnabled: {
|
|
@@ -7,15 +6,6 @@ export const validatorHASignerConfigMappings = {
|
|
|
7
6
|
description: 'Whether HA signing / slashing protection is enabled',
|
|
8
7
|
...booleanConfigHelper(false)
|
|
9
8
|
},
|
|
10
|
-
l1Contracts: {
|
|
11
|
-
description: 'L1 contract addresses (rollup address required)',
|
|
12
|
-
nested: {
|
|
13
|
-
rollupAddress: {
|
|
14
|
-
description: 'The Ethereum address of the rollup contract (must be set programmatically)',
|
|
15
|
-
parseEnv: (val)=>EthAddress.fromString(val)
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
9
|
nodeId: {
|
|
20
10
|
env: 'VALIDATOR_HA_NODE_ID',
|
|
21
11
|
description: 'The unique identifier for this node',
|
|
@@ -71,9 +61,6 @@ export const defaultValidatorHASignerConfig = getDefaultConfig(validatorHASigner
|
|
|
71
61
|
}
|
|
72
62
|
export const ValidatorHASignerConfigSchema = z.object({
|
|
73
63
|
haSigningEnabled: z.boolean(),
|
|
74
|
-
l1Contracts: z.object({
|
|
75
|
-
rollupAddress: z.instanceof(EthAddress)
|
|
76
|
-
}),
|
|
77
64
|
nodeId: z.string(),
|
|
78
65
|
pollingIntervalMs: z.number().min(0),
|
|
79
66
|
signingTimeoutMs: z.number().min(0),
|
package/dest/db/postgres.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export declare class PostgresSlashingProtectionDatabase implements SlashingProte
|
|
|
44
44
|
*
|
|
45
45
|
* @returns true if the update succeeded, false if token didn't match or duty not found
|
|
46
46
|
*/
|
|
47
|
-
updateDutySigned(
|
|
47
|
+
updateDutySigned(validatorAddress: EthAddress, slot: SlotNumber, dutyType: DutyType, signature: string, lockToken: string, blockIndexWithinCheckpoint: number): Promise<boolean>;
|
|
48
48
|
/**
|
|
49
49
|
* Delete a duty record.
|
|
50
50
|
* Only succeeds if the lockToken matches (caller must be the one who created the duty).
|
|
@@ -52,7 +52,7 @@ export declare class PostgresSlashingProtectionDatabase implements SlashingProte
|
|
|
52
52
|
*
|
|
53
53
|
* @returns true if the delete succeeded, false if token didn't match or duty not found
|
|
54
54
|
*/
|
|
55
|
-
deleteDuty(
|
|
55
|
+
deleteDuty(validatorAddress: EthAddress, slot: SlotNumber, dutyType: DutyType, lockToken: string, blockIndexWithinCheckpoint: number): Promise<boolean>;
|
|
56
56
|
/**
|
|
57
57
|
* Convert a database row to a ValidatorDutyRecord
|
|
58
58
|
*/
|
|
@@ -67,4 +67,4 @@ export declare class PostgresSlashingProtectionDatabase implements SlashingProte
|
|
|
67
67
|
*/
|
|
68
68
|
cleanupOwnStuckDuties(nodeId: string, maxAgeMs: number): Promise<number>;
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9wb3N0Z3Jlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLElBQUksQ0FBQztBQUV0RCxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFwRixPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBVyxRQUFRLEVBQXVDLE1BQU0sWUFBWSxDQUFDO0FBRy9HOzs7R0FHRztBQUNILE1BQU0sV0FBVyxhQUFhO0lBQzVCLEtBQUssQ0FBQyxDQUFDLFNBQVMsY0FBYyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RixHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3RCO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxrQ0FBbUMsWUFBVywwQkFBMEI7SUFHdkUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBRmpDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBRTdCLFlBQTZCLElBQUksRUFBRSxhQUFhLEVBRS9DO0lBRUQ7Ozs7O09BS0c7SUFDRyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQWdDaEM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FtRHhGO0lBRUQ7Ozs7O09BS0c7SUFDRyxnQkFBZ0IsQ0FDcEIsZ0JBQWdCLEVBQUUsVUFBVSxFQUM1QixJQUFJLEVBQUUsVUFBVSxFQUNoQixRQUFRLEVBQUUsUUFBUSxFQUNsQixTQUFTLEVBQUUsTUFBTSxFQUNqQixTQUFTLEVBQUUsTUFBTSxFQUNqQiwwQkFBMEIsRUFBRSxNQUFNLEdBQ2pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FvQmxCO0lBRUQ7Ozs7OztPQU1HO0lBQ0csVUFBVSxDQUNkLGdCQUFnQixFQUFFLFVBQVUsRUFDNUIsSUFBSSxFQUFFLFVBQVUsRUFDaEIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsMEJBQTBCLEVBQUUsTUFBTSxHQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBbUJsQjtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLFdBQVc7SUFrQm5COztPQUVHO0lBQ0csS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHM0I7SUFFRDs7O09BR0c7SUFDRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUk3RTtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/db/postgres.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAe,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEtD,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQpF,OAAO,KAAK,EAAE,oBAAoB,EAAW,QAAQ,EAAuC,MAAM,YAAY,CAAC;AAG/G;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,kCAAmC,YAAW,0BAA0B;IAGvE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YAA6B,IAAI,EAAE,aAAa,EAE/C;IAED;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChC;IAED;;;;;;;;OAQG;IACG,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/db/postgres.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAe,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEtD,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQpF,OAAO,KAAK,EAAE,oBAAoB,EAAW,QAAQ,EAAuC,MAAM,YAAY,CAAC;AAG/G;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,kCAAmC,YAAW,0BAA0B;IAGvE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YAA6B,IAAI,EAAE,aAAa,EAE/C;IAED;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChC;IAED;;;;;;;;OAQG;IACG,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmDxF;IAED;;;;;OAKG;IACG,gBAAgB,CACpB,gBAAgB,EAAE,UAAU,EAC5B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,0BAA0B,EAAE,MAAM,GACjC,OAAO,CAAC,OAAO,CAAC,CAoBlB;IAED;;;;;;OAMG;IACG,UAAU,CACd,gBAAgB,EAAE,UAAU,EAC5B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,0BAA0B,EAAE,MAAM,GACjC,OAAO,CAAC,OAAO,CAAC,CAmBlB;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7E;CACF"}
|
package/dest/db/postgres.js
CHANGED
|
@@ -63,7 +63,6 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
63
63
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
64
64
|
const result = await retry(async ()=>{
|
|
65
65
|
const queryResult = await this.pool.query(INSERT_OR_GET_DUTY, [
|
|
66
|
-
params.rollupAddress.toString(),
|
|
67
66
|
params.validatorAddress.toString(),
|
|
68
67
|
params.slot.toString(),
|
|
69
68
|
params.blockNumber.toString(),
|
|
@@ -98,10 +97,9 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
98
97
|
* Only succeeds if the lockToken matches (caller must be the one who created the duty).
|
|
99
98
|
*
|
|
100
99
|
* @returns true if the update succeeded, false if token didn't match or duty not found
|
|
101
|
-
*/ async updateDutySigned(
|
|
100
|
+
*/ async updateDutySigned(validatorAddress, slot, dutyType, signature, lockToken, blockIndexWithinCheckpoint) {
|
|
102
101
|
const result = await this.pool.query(UPDATE_DUTY_SIGNED, [
|
|
103
102
|
signature,
|
|
104
|
-
rollupAddress.toString(),
|
|
105
103
|
validatorAddress.toString(),
|
|
106
104
|
slot.toString(),
|
|
107
105
|
dutyType,
|
|
@@ -110,7 +108,6 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
110
108
|
]);
|
|
111
109
|
if (result.rowCount === 0) {
|
|
112
110
|
this.log.warn('Failed to update duty to signed status: invalid token or duty not found', {
|
|
113
|
-
rollupAddress: rollupAddress.toString(),
|
|
114
111
|
validatorAddress: validatorAddress.toString(),
|
|
115
112
|
slot: slot.toString(),
|
|
116
113
|
dutyType,
|
|
@@ -126,9 +123,8 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
126
123
|
* Used when signing fails to allow another node/attempt to retry.
|
|
127
124
|
*
|
|
128
125
|
* @returns true if the delete succeeded, false if token didn't match or duty not found
|
|
129
|
-
*/ async deleteDuty(
|
|
126
|
+
*/ async deleteDuty(validatorAddress, slot, dutyType, lockToken, blockIndexWithinCheckpoint) {
|
|
130
127
|
const result = await this.pool.query(DELETE_DUTY, [
|
|
131
|
-
rollupAddress.toString(),
|
|
132
128
|
validatorAddress.toString(),
|
|
133
129
|
slot.toString(),
|
|
134
130
|
dutyType,
|
|
@@ -137,7 +133,6 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
137
133
|
]);
|
|
138
134
|
if (result.rowCount === 0) {
|
|
139
135
|
this.log.warn('Failed to delete duty: invalid token or duty not found', {
|
|
140
|
-
rollupAddress: rollupAddress.toString(),
|
|
141
136
|
validatorAddress: validatorAddress.toString(),
|
|
142
137
|
slot: slot.toString(),
|
|
143
138
|
dutyType,
|
|
@@ -151,7 +146,6 @@ import { getBlockIndexFromDutyIdentifier } from './types.js';
|
|
|
151
146
|
* Convert a database row to a ValidatorDutyRecord
|
|
152
147
|
*/ rowToRecord(row) {
|
|
153
148
|
return {
|
|
154
|
-
rollupAddress: EthAddress.fromString(row.rollup_address),
|
|
155
149
|
validatorAddress: EthAddress.fromString(row.validator_address),
|
|
156
150
|
slot: SlotNumber.fromString(row.slot),
|
|
157
151
|
blockNumber: BlockNumber.fromString(row.block_number),
|
package/dest/db/schema.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare const SCHEMA_VERSION = 1;
|
|
|
12
12
|
/**
|
|
13
13
|
* SQL to create the validator_duties table
|
|
14
14
|
*/
|
|
15
|
-
export declare const CREATE_VALIDATOR_DUTIES_TABLE = "\nCREATE TABLE IF NOT EXISTS validator_duties (\n
|
|
15
|
+
export declare const CREATE_VALIDATOR_DUTIES_TABLE = "\nCREATE TABLE IF NOT EXISTS validator_duties (\n validator_address VARCHAR(42) NOT NULL,\n slot BIGINT NOT NULL,\n block_number BIGINT NOT NULL,\n block_index_within_checkpoint INTEGER NOT NULL DEFAULT 0,\n duty_type VARCHAR(30) NOT NULL CHECK (duty_type IN ('BLOCK_PROPOSAL', 'CHECKPOINT_PROPOSAL', 'ATTESTATION', 'ATTESTATIONS_AND_SIGNERS', 'GOVERNANCE_VOTE', 'SLASHING_VOTE')),\n status VARCHAR(20) NOT NULL CHECK (status IN ('signing', 'signed', 'failed')),\n message_hash VARCHAR(66) NOT NULL,\n signature VARCHAR(132),\n node_id VARCHAR(255) NOT NULL,\n lock_token VARCHAR(64) NOT NULL,\n started_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n completed_at TIMESTAMP,\n error_message TEXT,\n\n PRIMARY KEY (validator_address, slot, duty_type, block_index_within_checkpoint),\n CHECK (completed_at IS NULL OR completed_at >= started_at)\n);\n";
|
|
16
16
|
/**
|
|
17
17
|
* SQL to create index on status and started_at for cleanup queries
|
|
18
18
|
*/
|
|
@@ -32,7 +32,7 @@ export declare const INSERT_SCHEMA_VERSION = "\nINSERT INTO schema_version (vers
|
|
|
32
32
|
/**
|
|
33
33
|
* Complete schema setup - all statements in order
|
|
34
34
|
*/
|
|
35
|
-
export declare const SCHEMA_SETUP: readonly ["\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", "\nCREATE TABLE IF NOT EXISTS validator_duties (\n
|
|
35
|
+
export declare const SCHEMA_SETUP: readonly ["\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", "\nCREATE TABLE IF NOT EXISTS validator_duties (\n validator_address VARCHAR(42) NOT NULL,\n slot BIGINT NOT NULL,\n block_number BIGINT NOT NULL,\n block_index_within_checkpoint INTEGER NOT NULL DEFAULT 0,\n duty_type VARCHAR(30) NOT NULL CHECK (duty_type IN ('BLOCK_PROPOSAL', 'CHECKPOINT_PROPOSAL', 'ATTESTATION', 'ATTESTATIONS_AND_SIGNERS', 'GOVERNANCE_VOTE', 'SLASHING_VOTE')),\n status VARCHAR(20) NOT NULL CHECK (status IN ('signing', 'signed', 'failed')),\n message_hash VARCHAR(66) NOT NULL,\n signature VARCHAR(132),\n node_id VARCHAR(255) NOT NULL,\n lock_token VARCHAR(64) NOT NULL,\n started_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n completed_at TIMESTAMP,\n error_message TEXT,\n\n PRIMARY KEY (validator_address, slot, duty_type, block_index_within_checkpoint),\n CHECK (completed_at IS NULL OR completed_at >= started_at)\n);\n", "\nCREATE INDEX IF NOT EXISTS idx_validator_duties_status\nON validator_duties(status, started_at);\n", "\nCREATE INDEX IF NOT EXISTS idx_validator_duties_node\nON validator_duties(node_id, started_at);\n"];
|
|
36
36
|
/**
|
|
37
37
|
* Query to get current schema version
|
|
38
38
|
*/
|
|
@@ -48,16 +48,16 @@ export declare const GET_SCHEMA_VERSION = "\nSELECT version FROM schema_version
|
|
|
48
48
|
* just committed the row, there's a small window where the SELECT might not see it yet.
|
|
49
49
|
* The application layer should retry if no rows are returned.
|
|
50
50
|
*/
|
|
51
|
-
export declare const INSERT_OR_GET_DUTY = "\nWITH inserted AS (\n INSERT INTO validator_duties (\n
|
|
51
|
+
export declare const INSERT_OR_GET_DUTY = "\nWITH inserted AS (\n INSERT INTO validator_duties (\n validator_address,\n slot,\n block_number,\n block_index_within_checkpoint,\n duty_type,\n status,\n message_hash,\n node_id,\n lock_token,\n started_at\n ) VALUES ($1, $2, $3, $4, $5, 'signing', $6, $7, $8, CURRENT_TIMESTAMP)\n ON CONFLICT (validator_address, slot, duty_type, block_index_within_checkpoint) DO NOTHING\n RETURNING\n validator_address,\n slot,\n block_number,\n block_index_within_checkpoint,\n duty_type,\n status,\n message_hash,\n signature,\n node_id,\n lock_token,\n started_at,\n completed_at,\n error_message,\n TRUE as is_new\n)\nSELECT * FROM inserted\nUNION ALL\nSELECT\n validator_address,\n slot,\n block_number,\n block_index_within_checkpoint,\n duty_type,\n status,\n message_hash,\n signature,\n node_id,\n '' as lock_token,\n started_at,\n completed_at,\n error_message,\n FALSE as is_new\nFROM validator_duties\nWHERE validator_address = $1\n AND slot = $2\n AND duty_type = $5\n AND block_index_within_checkpoint = $4\n AND NOT EXISTS (SELECT 1 FROM inserted);\n";
|
|
52
52
|
/**
|
|
53
53
|
* Query to update a duty to 'signed' status
|
|
54
54
|
*/
|
|
55
|
-
export declare const UPDATE_DUTY_SIGNED = "\nUPDATE validator_duties\nSET status = 'signed',\n signature = $1,\n completed_at = CURRENT_TIMESTAMP\nWHERE
|
|
55
|
+
export declare const UPDATE_DUTY_SIGNED = "\nUPDATE validator_duties\nSET status = 'signed',\n signature = $1,\n completed_at = CURRENT_TIMESTAMP\nWHERE validator_address = $2\n AND slot = $3\n AND duty_type = $4\n AND block_index_within_checkpoint = $5\n AND status = 'signing'\n AND lock_token = $6;\n";
|
|
56
56
|
/**
|
|
57
57
|
* Query to delete a duty
|
|
58
58
|
* Only deletes if the lockToken matches
|
|
59
59
|
*/
|
|
60
|
-
export declare const DELETE_DUTY = "\nDELETE FROM validator_duties\nWHERE
|
|
60
|
+
export declare const DELETE_DUTY = "\nDELETE FROM validator_duties\nWHERE validator_address = $1\n AND slot = $2\n AND duty_type = $3\n AND block_index_within_checkpoint = $4\n AND status = 'signing'\n AND lock_token = $5;\n";
|
|
61
61
|
/**
|
|
62
62
|
* Query to clean up old signed duties (for maintenance)
|
|
63
63
|
* Removes signed duties older than a specified timestamp
|
|
@@ -85,5 +85,5 @@ export declare const DROP_SCHEMA_VERSION_TABLE = "DROP TABLE IF EXISTS schema_ve
|
|
|
85
85
|
* Query to get stuck duties (for monitoring/alerting)
|
|
86
86
|
* Returns duties in 'signing' status that have been stuck for too long
|
|
87
87
|
*/
|
|
88
|
-
export declare const GET_STUCK_DUTIES = "\nSELECT\n
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
export declare const GET_STUCK_DUTIES = "\nSELECT\n validator_address,\n slot,\n block_number,\n block_index_within_checkpoint,\n duty_type,\n status,\n message_hash,\n node_id,\n started_at,\n EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - started_at)) as age_seconds\nFROM validator_duties\nWHERE status = 'signing'\n AND started_at < $1\nORDER BY started_at ASC;\n";
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBQ0gsZUFBTyxNQUFNLGNBQWMsSUFBSSxDQUFDO0FBRWhDOztHQUVHO0FBQ0gsZUFBTyxNQUFNLDZCQUE2Qix3MkJBbUJ6QyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0sbUJBQW1CLHlHQUcvQixDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0saUJBQWlCLHdHQUc3QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0sMkJBQTJCLG1KQUt2QyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0scUJBQXFCLDZGQUlqQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0sWUFBWSxtdENBS2YsQ0FBQztBQUVYOztHQUVHO0FBQ0gsZUFBTyxNQUFNLGtCQUFrQiwwRUFFOUIsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxlQUFPLE1BQU0sa0JBQWtCLGlvQ0FzRDlCLENBQUM7QUFFRjs7R0FFRztBQUNILGVBQU8sTUFBTSxrQkFBa0Isb1JBVzlCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sV0FBVyxzTUFRdkIsQ0FBQztBQUVGOzs7R0FHRztBQUNILGVBQU8sTUFBTSx5QkFBeUIsd0ZBSXJDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sa0JBQWtCLDhHQUk5QixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLHdCQUF3QiwyR0FLcEMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsZUFBTyxNQUFNLDJCQUEyQiwyQ0FBMkMsQ0FBQztBQUVwRjs7R0FFRztBQUNILGVBQU8sTUFBTSx5QkFBeUIseUNBQXlDLENBQUM7QUFFaEY7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLGdCQUFnQiwrVUFnQjVCLENBQUMifQ==
|
package/dest/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,6BAA6B,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,6BAA6B,w2BAmBzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,yGAG/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wGAG7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,mJAKvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,6FAIjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,mtCAKf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,0EAE9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,ioCAsD9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,oRAW9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,sMAQvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,wFAIrC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8GAI9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,2GAKpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,2CAA2C,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,yBAAyB,yCAAyC,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+UAgB5B,CAAC"}
|
package/dest/db/schema.js
CHANGED
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* SQL to create the validator_duties table
|
|
12
12
|
*/ export const CREATE_VALIDATOR_DUTIES_TABLE = `
|
|
13
13
|
CREATE TABLE IF NOT EXISTS validator_duties (
|
|
14
|
-
rollup_address VARCHAR(42) NOT NULL,
|
|
15
14
|
validator_address VARCHAR(42) NOT NULL,
|
|
16
15
|
slot BIGINT NOT NULL,
|
|
17
16
|
block_number BIGINT NOT NULL,
|
|
@@ -26,7 +25,7 @@ CREATE TABLE IF NOT EXISTS validator_duties (
|
|
|
26
25
|
completed_at TIMESTAMP,
|
|
27
26
|
error_message TEXT,
|
|
28
27
|
|
|
29
|
-
PRIMARY KEY (
|
|
28
|
+
PRIMARY KEY (validator_address, slot, duty_type, block_index_within_checkpoint),
|
|
30
29
|
CHECK (completed_at IS NULL OR completed_at >= started_at)
|
|
31
30
|
);
|
|
32
31
|
`;
|
|
@@ -83,7 +82,6 @@ SELECT version FROM schema_version ORDER BY version DESC LIMIT 1;
|
|
|
83
82
|
*/ export const INSERT_OR_GET_DUTY = `
|
|
84
83
|
WITH inserted AS (
|
|
85
84
|
INSERT INTO validator_duties (
|
|
86
|
-
rollup_address,
|
|
87
85
|
validator_address,
|
|
88
86
|
slot,
|
|
89
87
|
block_number,
|
|
@@ -94,10 +92,9 @@ WITH inserted AS (
|
|
|
94
92
|
node_id,
|
|
95
93
|
lock_token,
|
|
96
94
|
started_at
|
|
97
|
-
) VALUES ($1, $2, $3, $4, $5,
|
|
98
|
-
ON CONFLICT (
|
|
95
|
+
) VALUES ($1, $2, $3, $4, $5, 'signing', $6, $7, $8, CURRENT_TIMESTAMP)
|
|
96
|
+
ON CONFLICT (validator_address, slot, duty_type, block_index_within_checkpoint) DO NOTHING
|
|
99
97
|
RETURNING
|
|
100
|
-
rollup_address,
|
|
101
98
|
validator_address,
|
|
102
99
|
slot,
|
|
103
100
|
block_number,
|
|
@@ -116,7 +113,6 @@ WITH inserted AS (
|
|
|
116
113
|
SELECT * FROM inserted
|
|
117
114
|
UNION ALL
|
|
118
115
|
SELECT
|
|
119
|
-
rollup_address,
|
|
120
116
|
validator_address,
|
|
121
117
|
slot,
|
|
122
118
|
block_number,
|
|
@@ -132,11 +128,10 @@ SELECT
|
|
|
132
128
|
error_message,
|
|
133
129
|
FALSE as is_new
|
|
134
130
|
FROM validator_duties
|
|
135
|
-
WHERE
|
|
136
|
-
AND
|
|
137
|
-
AND
|
|
138
|
-
AND
|
|
139
|
-
AND block_index_within_checkpoint = $5
|
|
131
|
+
WHERE validator_address = $1
|
|
132
|
+
AND slot = $2
|
|
133
|
+
AND duty_type = $5
|
|
134
|
+
AND block_index_within_checkpoint = $4
|
|
140
135
|
AND NOT EXISTS (SELECT 1 FROM inserted);
|
|
141
136
|
`;
|
|
142
137
|
/**
|
|
@@ -146,26 +141,24 @@ UPDATE validator_duties
|
|
|
146
141
|
SET status = 'signed',
|
|
147
142
|
signature = $1,
|
|
148
143
|
completed_at = CURRENT_TIMESTAMP
|
|
149
|
-
WHERE
|
|
150
|
-
AND
|
|
151
|
-
AND
|
|
152
|
-
AND
|
|
153
|
-
AND block_index_within_checkpoint = $6
|
|
144
|
+
WHERE validator_address = $2
|
|
145
|
+
AND slot = $3
|
|
146
|
+
AND duty_type = $4
|
|
147
|
+
AND block_index_within_checkpoint = $5
|
|
154
148
|
AND status = 'signing'
|
|
155
|
-
AND lock_token = $
|
|
149
|
+
AND lock_token = $6;
|
|
156
150
|
`;
|
|
157
151
|
/**
|
|
158
152
|
* Query to delete a duty
|
|
159
153
|
* Only deletes if the lockToken matches
|
|
160
154
|
*/ export const DELETE_DUTY = `
|
|
161
155
|
DELETE FROM validator_duties
|
|
162
|
-
WHERE
|
|
163
|
-
AND
|
|
164
|
-
AND
|
|
165
|
-
AND
|
|
166
|
-
AND block_index_within_checkpoint = $5
|
|
156
|
+
WHERE validator_address = $1
|
|
157
|
+
AND slot = $2
|
|
158
|
+
AND duty_type = $3
|
|
159
|
+
AND block_index_within_checkpoint = $4
|
|
167
160
|
AND status = 'signing'
|
|
168
|
-
AND lock_token = $
|
|
161
|
+
AND lock_token = $5;
|
|
169
162
|
`;
|
|
170
163
|
/**
|
|
171
164
|
* Query to clean up old signed duties (for maintenance)
|
|
@@ -203,7 +196,6 @@ WHERE node_id = $1
|
|
|
203
196
|
* Returns duties in 'signing' status that have been stuck for too long
|
|
204
197
|
*/ export const GET_STUCK_DUTIES = `
|
|
205
198
|
SELECT
|
|
206
|
-
rollup_address,
|
|
207
199
|
validator_address,
|
|
208
200
|
slot,
|
|
209
201
|
block_number,
|
package/dest/db/types.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ import type { Signature } from '@aztec/foundation/eth-signature';
|
|
|
5
5
|
* Row type from PostgreSQL query
|
|
6
6
|
*/
|
|
7
7
|
export interface DutyRow {
|
|
8
|
-
rollup_address: string;
|
|
9
8
|
validator_address: string;
|
|
10
9
|
slot: string;
|
|
11
10
|
block_number: string;
|
|
@@ -50,8 +49,6 @@ export declare enum DutyStatus {
|
|
|
50
49
|
* Record of a validator duty in the database
|
|
51
50
|
*/
|
|
52
51
|
export interface ValidatorDutyRecord {
|
|
53
|
-
/** Ethereum address of the rollup contract */
|
|
54
|
-
rollupAddress: EthAddress;
|
|
55
52
|
/** Ethereum address of the validator */
|
|
56
53
|
validatorAddress: EthAddress;
|
|
57
54
|
/** Slot number for this duty */
|
|
@@ -84,7 +81,6 @@ export interface ValidatorDutyRecord {
|
|
|
84
81
|
* blockIndexWithinCheckpoint is REQUIRED and must be >= 0.
|
|
85
82
|
*/
|
|
86
83
|
export interface BlockProposalDutyIdentifier {
|
|
87
|
-
rollupAddress: EthAddress;
|
|
88
84
|
validatorAddress: EthAddress;
|
|
89
85
|
slot: SlotNumber;
|
|
90
86
|
/** Block index within checkpoint (0, 1, 2...). Required for block proposals. */
|
|
@@ -96,7 +92,6 @@ export interface BlockProposalDutyIdentifier {
|
|
|
96
92
|
* blockIndexWithinCheckpoint is not applicable (internally stored as -1).
|
|
97
93
|
*/
|
|
98
94
|
export interface OtherDutyIdentifier {
|
|
99
|
-
rollupAddress: EthAddress;
|
|
100
95
|
validatorAddress: EthAddress;
|
|
101
96
|
slot: SlotNumber;
|
|
102
97
|
dutyType: DutyType.CHECKPOINT_PROPOSAL | DutyType.ATTESTATION | DutyType.ATTESTATIONS_AND_SIGNERS | DutyType.GOVERNANCE_VOTE | DutyType.SLASHING_VOTE | DutyType.AUTH_REQUEST | DutyType.TXS;
|
|
@@ -163,4 +158,4 @@ interface DeleteDutyExtra {
|
|
|
163
158
|
*/
|
|
164
159
|
export type DeleteDutyParams = DutyIdentifier & DeleteDutyExtra;
|
|
165
160
|
export {};
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakU7O0dBRUc7QUFDSCxNQUFNLFdBQVcsT0FBTztJQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsNkJBQTZCLEVBQUUsTUFBTSxDQUFDO0lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUM7SUFDcEIsTUFBTSxFQUFFLFVBQVUsQ0FBQztJQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDO0lBQ2pCLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLGFBQWEsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQzlCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsY0FBZSxTQUFRLE9BQU87SUFDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQztDQUNqQjtBQUVEOztHQUVHO0FBQ0gsb0JBQVksUUFBUTtJQUNsQixjQUFjLG1CQUFtQjtJQUNqQyxtQkFBbUIsd0JBQXdCO0lBQzNDLFdBQVcsZ0JBQWdCO0lBQzNCLHdCQUF3Qiw2QkFBNkI7SUFDckQsZUFBZSxvQkFBb0I7SUFDbkMsYUFBYSxr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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,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,4 +77,4 @@ export declare class SlashingProtectionService {
|
|
|
77
77
|
close(): Promise<void>;
|
|
78
78
|
private cleanupStuckDuties;
|
|
79
79
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hpbmdfcHJvdGVjdGlvbl9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xhc2hpbmdfcHJvdGVjdGlvbl9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFDTCxLQUFLLG9CQUFvQixFQUN6QixLQUFLLGdCQUFnQixFQUVyQixLQUFLLG1CQUFtQixFQUV6QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0Rjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHFCQUFhLHlCQUF5QjtJQVNsQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBVHpCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQVM7SUFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBUztJQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFTO0lBRTdDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBaUI7SUFFOUMsWUFDbUIsRUFBRSxFQUFFLDBCQUEwQixFQUM5QixNQUFNLEVBQUUsdUJBQXVCLEVBYWpEO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0csY0FBYyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBaUVsRTtJQUVEOzs7Ozs7T0FNRztJQUNHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQTBCakU7SUFFRDs7Ozs7O09BTUc7SUFDRyxVQUFVLENBQUMsTUFBTSxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FpQjNEO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBRW5CO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxTQUdKO0lBRUQ7O09BRUc7SUFDRyxJQUFJLGtCQUdUO0lBRUQ7OztPQUdHO0lBQ0csS0FBSyxrQkFHVjtZQUthLGtCQUFrQjtDQVNqQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashing_protection_service.d.ts","sourceRoot":"","sources":["../src/slashing_protection_service.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEtF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAAyB;IASlC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,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,qBAAqB,CAAiB;IAE9C,YACmB,EAAE,EAAE,0BAA0B,EAC9B,MAAM,EAAE,uBAAuB,EAajD;IAED;;;;;;;;;;;;;;;OAeG;IACG,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiElE;IAED;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"slashing_protection_service.d.ts","sourceRoot":"","sources":["../src/slashing_protection_service.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEtF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAAyB;IASlC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,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,qBAAqB,CAAiB;IAE9C,YACmB,EAAE,EAAE,0BAA0B,EAC9B,MAAM,EAAE,uBAAuB,EAajD;IAED;;;;;;;;;;;;;;;OAeG;IACG,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiElE;IAED;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BjE;IAED;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB3D;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACH,KAAK,SAGJ;IAED;;OAEG;IACG,IAAI,kBAGT;IAED;;;OAGG;IACG,KAAK,kBAGV;YAKa,kBAAkB;CASjC"}
|
|
@@ -116,9 +116,9 @@ import { DutyAlreadySignedError, SlashingProtectionError } from './errors.js';
|
|
|
116
116
|
*
|
|
117
117
|
* @returns true if the update succeeded, false if token didn't match
|
|
118
118
|
*/ async recordSuccess(params) {
|
|
119
|
-
const {
|
|
119
|
+
const { validatorAddress, slot, dutyType, signature, nodeId, lockToken } = params;
|
|
120
120
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
121
|
-
const success = await this.db.updateDutySigned(
|
|
121
|
+
const success = await this.db.updateDutySigned(validatorAddress, slot, dutyType, signature.toString(), lockToken, blockIndexWithinCheckpoint);
|
|
122
122
|
if (success) {
|
|
123
123
|
this.log.info(`Recorded successful signing for duty ${dutyType} at slot ${slot}`, {
|
|
124
124
|
validatorAddress: validatorAddress.toString(),
|
|
@@ -139,9 +139,9 @@ import { DutyAlreadySignedError, SlashingProtectionError } from './errors.js';
|
|
|
139
139
|
*
|
|
140
140
|
* @returns true if the delete succeeded, false if token didn't match
|
|
141
141
|
*/ async deleteDuty(params) {
|
|
142
|
-
const {
|
|
142
|
+
const { validatorAddress, slot, dutyType, lockToken } = params;
|
|
143
143
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
144
|
-
const success = await this.db.deleteDuty(
|
|
144
|
+
const success = await this.db.deleteDuty(validatorAddress, slot, dutyType, lockToken, blockIndexWithinCheckpoint);
|
|
145
145
|
if (success) {
|
|
146
146
|
this.log.info(`Deleted duty ${dutyType} at slot ${slot} to allow retry`, {
|
|
147
147
|
validatorAddress: validatorAddress.toString()
|
package/dest/types.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { BlockNumber, type CheckpointNumber, type IndexWithinCheckpoint, type Sl
|
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import type { Pool } from 'pg';
|
|
4
4
|
import type { ValidatorHASignerConfig } from './config.js';
|
|
5
|
-
import { type BlockProposalDutyIdentifier, type CheckAndRecordParams, type DeleteDutyParams, type DutyIdentifier,
|
|
6
|
-
export type { BlockProposalDutyIdentifier, CheckAndRecordParams, DeleteDutyParams, DutyIdentifier,
|
|
5
|
+
import { type BlockProposalDutyIdentifier, type CheckAndRecordParams, type DeleteDutyParams, type DutyIdentifier, DutyType, type OtherDutyIdentifier, type RecordSuccessParams, type ValidatorDutyRecord } from './db/types.js';
|
|
6
|
+
export type { BlockProposalDutyIdentifier, CheckAndRecordParams, DeleteDutyParams, DutyIdentifier, OtherDutyIdentifier, RecordSuccessParams, ValidatorDutyRecord, ValidatorHASignerConfig, };
|
|
7
7
|
export { DutyStatus, DutyType, getBlockIndexFromDutyIdentifier, normalizeBlockIndex } from './db/types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Result of tryInsertOrGetExisting operation
|
|
@@ -116,7 +116,7 @@ export interface SlashingProtectionDatabase {
|
|
|
116
116
|
*
|
|
117
117
|
* @returns true if the update succeeded, false if token didn't match or duty not found
|
|
118
118
|
*/
|
|
119
|
-
updateDutySigned(
|
|
119
|
+
updateDutySigned(validatorAddress: EthAddress, slot: SlotNumber, dutyType: DutyType, signature: string, lockToken: string, blockIndexWithinCheckpoint: number): Promise<boolean>;
|
|
120
120
|
/**
|
|
121
121
|
* Delete a duty record.
|
|
122
122
|
* Only succeeds if the lockToken matches (caller must be the one who created the duty).
|
|
@@ -124,7 +124,7 @@ export interface SlashingProtectionDatabase {
|
|
|
124
124
|
*
|
|
125
125
|
* @returns true if the delete succeeded, false if token didn't match or duty not found
|
|
126
126
|
*/
|
|
127
|
-
deleteDuty(
|
|
127
|
+
deleteDuty(validatorAddress: EthAddress, slot: SlotNumber, dutyType: DutyType, lockToken: string, blockIndexWithinCheckpoint: number): Promise<boolean>;
|
|
128
128
|
/**
|
|
129
129
|
* Cleanup own stuck duties
|
|
130
130
|
* @returns the number of duties cleaned up
|
|
@@ -136,4 +136,4 @@ export interface SlashingProtectionDatabase {
|
|
|
136
136
|
*/
|
|
137
137
|
close(): Promise<void>;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssVUFBVSxFQUNoQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQztBQUUvQixPQUFPLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsS0FBSywyQkFBMkIsRUFDaEMsS0FBSyxvQkFBb0IsRUFDekIsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyxjQUFjLEVBQ25CLFFBQVEsRUFDUixLQUFLLG1CQUFtQixFQUN4QixLQUFLLG1CQUFtQixFQUN4QixLQUFLLG1CQUFtQixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUV2QixZQUFZLEVBQ1YsMkJBQTJCLEVBQzNCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHVCQUF1QixHQUN4QixDQUFDO0FBQ0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0c7O0dBRUc7QUFDSCxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLDJFQUEyRTtJQUMzRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ2YscURBQXFEO0lBQ3JELE1BQU0sRUFBRSxtQkFBbUIsQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQzs7O09BR0c7SUFDSCxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7Q0FDYjtB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
|
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,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* node will sign for a given duty (slot + duty type).
|
|
7
7
|
*/
|
|
8
8
|
import type { Buffer32 } from '@aztec/foundation/buffer';
|
|
9
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
10
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
11
11
|
import type { ValidatorHASignerConfig } from './config.js';
|
|
12
12
|
import { type HAProtectedSigningContext, type SlashingProtectionDatabase } from './types.js';
|
|
@@ -33,7 +33,6 @@ export declare class ValidatorHASigner {
|
|
|
33
33
|
private readonly config;
|
|
34
34
|
private readonly log;
|
|
35
35
|
private readonly slashingProtection;
|
|
36
|
-
private readonly rollupAddress;
|
|
37
36
|
constructor(db: SlashingProtectionDatabase, config: ValidatorHASignerConfig);
|
|
38
37
|
/**
|
|
39
38
|
* Sign a message with slashing protection.
|
|
@@ -68,4 +67,4 @@ export declare class ValidatorHASigner {
|
|
|
68
67
|
*/
|
|
69
68
|
stop(): Promise<void>;
|
|
70
69
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yX2hhX3NpZ25lci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZhbGlkYXRvcl9oYV9zaWduZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHakUsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHM0QsT0FBTyxFQUNMLEtBQUsseUJBQXlCLEVBQzlCLEtBQUssMEJBQTBCLEVBRWhDLE1BQU0sWUFBWSxDQUFDO0FBRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxxQkFBYSxpQkFBaUI7SUFNMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBTHpCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQTRCO0lBRS9ELFlBQ0UsRUFBRSxFQUFFLDBCQUEwQixFQUNiLE1BQU0sRUFBRSx1QkFBdUIsRUFnQmpEO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDRyxrQkFBa0IsQ0FDdEIsZ0JBQWdCLEVBQUUsVUFBVSxFQUM1QixXQUFXLEVBQUUsUUFBUSxFQUNyQixPQUFPLEVBQUUseUJBQXlCLEVBQ2xDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUNwRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBNkNwQjtJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNLElBQUksTUFBTSxDQUVuQjtJQUVEOzs7T0FHRztJQUNILEtBQUssU0FFSjtJQUVEOzs7T0FHRztJQUNHLElBQUksa0JBR1Q7Q0FDRiJ9
|
|
@@ -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;
|
|
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,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAEhC,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAE/D,YACE,EAAE,EAAE,0BAA0B,EACb,MAAM,EAAE,uBAAuB,EAgBjD;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,CA6CpB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACH,KAAK,SAEJ;IAED;;;OAGG;IACG,IAAI,kBAGT;CACF"}
|
|
@@ -30,7 +30,6 @@ import { getBlockNumberFromSigningContext } from './types.js';
|
|
|
30
30
|
config;
|
|
31
31
|
log;
|
|
32
32
|
slashingProtection;
|
|
33
|
-
rollupAddress;
|
|
34
33
|
constructor(db, config){
|
|
35
34
|
this.config = config;
|
|
36
35
|
this.log = createLogger('validator-ha-signer');
|
|
@@ -41,11 +40,9 @@ import { getBlockNumberFromSigningContext } from './types.js';
|
|
|
41
40
|
if (!config.nodeId || config.nodeId === '') {
|
|
42
41
|
throw new Error('NODE_ID is required for high-availability setups');
|
|
43
42
|
}
|
|
44
|
-
this.rollupAddress = config.l1Contracts.rollupAddress;
|
|
45
43
|
this.slashingProtection = new SlashingProtectionService(db, config);
|
|
46
44
|
this.log.info('Validator HA Signer initialized with slashing protection', {
|
|
47
|
-
nodeId: config.nodeId
|
|
48
|
-
rollupAddress: this.rollupAddress.toString()
|
|
45
|
+
nodeId: config.nodeId
|
|
49
46
|
});
|
|
50
47
|
}
|
|
51
48
|
/**
|
|
@@ -68,7 +65,6 @@ import { getBlockNumberFromSigningContext } from './types.js';
|
|
|
68
65
|
let dutyIdentifier;
|
|
69
66
|
if (context.dutyType === DutyType.BLOCK_PROPOSAL) {
|
|
70
67
|
dutyIdentifier = {
|
|
71
|
-
rollupAddress: this.rollupAddress,
|
|
72
68
|
validatorAddress,
|
|
73
69
|
slot: context.slot,
|
|
74
70
|
blockIndexWithinCheckpoint: context.blockIndexWithinCheckpoint,
|
|
@@ -76,7 +72,6 @@ import { getBlockNumberFromSigningContext } from './types.js';
|
|
|
76
72
|
};
|
|
77
73
|
} else {
|
|
78
74
|
dutyIdentifier = {
|
|
79
|
-
rollupAddress: this.rollupAddress,
|
|
80
75
|
validatorAddress,
|
|
81
76
|
slot: context.slot,
|
|
82
77
|
dutyType: context.dutyType
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/validator-ha-signer",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.6a729f7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./config": "./dest/config.js",
|
|
@@ -74,8 +74,7 @@
|
|
|
74
74
|
]
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@aztec/
|
|
78
|
-
"@aztec/foundation": "0.0.1-commit.592b9384",
|
|
77
|
+
"@aztec/foundation": "0.0.1-commit.6a729f7",
|
|
79
78
|
"node-pg-migrate": "^8.0.4",
|
|
80
79
|
"pg": "^8.11.3",
|
|
81
80
|
"tslib": "^2.4.0",
|
package/src/config.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
2
1
|
import {
|
|
3
2
|
type ConfigMappingsType,
|
|
4
3
|
booleanConfigHelper,
|
|
@@ -7,7 +6,6 @@ import {
|
|
|
7
6
|
numberConfigHelper,
|
|
8
7
|
optionalNumberConfigHelper,
|
|
9
8
|
} from '@aztec/foundation/config';
|
|
10
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
9
|
import type { ZodFor } from '@aztec/foundation/schemas';
|
|
12
10
|
|
|
13
11
|
import { z } from 'zod';
|
|
@@ -21,8 +19,6 @@ import { z } from 'zod';
|
|
|
21
19
|
export interface ValidatorHASignerConfig {
|
|
22
20
|
/** Whether HA signing / slashing protection is enabled */
|
|
23
21
|
haSigningEnabled: boolean;
|
|
24
|
-
/** L1 contract addresses (rollup address required) */
|
|
25
|
-
l1Contracts: Pick<L1ContractAddresses, 'rollupAddress'>;
|
|
26
22
|
/** Unique identifier for this node */
|
|
27
23
|
nodeId: string;
|
|
28
24
|
/** How long to wait between polls when a duty is being signed (ms) */
|
|
@@ -55,15 +51,6 @@ export const validatorHASignerConfigMappings: ConfigMappingsType<ValidatorHASign
|
|
|
55
51
|
description: 'Whether HA signing / slashing protection is enabled',
|
|
56
52
|
...booleanConfigHelper(false),
|
|
57
53
|
},
|
|
58
|
-
l1Contracts: {
|
|
59
|
-
description: 'L1 contract addresses (rollup address required)',
|
|
60
|
-
nested: {
|
|
61
|
-
rollupAddress: {
|
|
62
|
-
description: 'The Ethereum address of the rollup contract (must be set programmatically)',
|
|
63
|
-
parseEnv: (val: string) => EthAddress.fromString(val),
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
54
|
nodeId: {
|
|
68
55
|
env: 'VALIDATOR_HA_NODE_ID',
|
|
69
56
|
description: 'The unique identifier for this node',
|
|
@@ -126,9 +113,6 @@ export function getConfigEnvVars(): ValidatorHASignerConfig {
|
|
|
126
113
|
|
|
127
114
|
export const ValidatorHASignerConfigSchema = z.object({
|
|
128
115
|
haSigningEnabled: z.boolean(),
|
|
129
|
-
l1Contracts: z.object({
|
|
130
|
-
rollupAddress: z.instanceof(EthAddress),
|
|
131
|
-
}),
|
|
132
116
|
nodeId: z.string(),
|
|
133
117
|
pollingIntervalMs: z.number().min(0),
|
|
134
118
|
signingTimeoutMs: z.number().min(0),
|
package/src/db/postgres.ts
CHANGED
|
@@ -101,7 +101,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
101
101
|
const result = await retry<QueryResult<InsertOrGetRow>>(
|
|
102
102
|
async () => {
|
|
103
103
|
const queryResult: QueryResult<InsertOrGetRow> = await this.pool.query(INSERT_OR_GET_DUTY, [
|
|
104
|
-
params.rollupAddress.toString(),
|
|
105
104
|
params.validatorAddress.toString(),
|
|
106
105
|
params.slot.toString(),
|
|
107
106
|
params.blockNumber.toString(),
|
|
@@ -149,7 +148,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
149
148
|
* @returns true if the update succeeded, false if token didn't match or duty not found
|
|
150
149
|
*/
|
|
151
150
|
async updateDutySigned(
|
|
152
|
-
rollupAddress: EthAddress,
|
|
153
151
|
validatorAddress: EthAddress,
|
|
154
152
|
slot: SlotNumber,
|
|
155
153
|
dutyType: DutyType,
|
|
@@ -159,7 +157,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
159
157
|
): Promise<boolean> {
|
|
160
158
|
const result = await this.pool.query(UPDATE_DUTY_SIGNED, [
|
|
161
159
|
signature,
|
|
162
|
-
rollupAddress.toString(),
|
|
163
160
|
validatorAddress.toString(),
|
|
164
161
|
slot.toString(),
|
|
165
162
|
dutyType,
|
|
@@ -169,7 +166,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
169
166
|
|
|
170
167
|
if (result.rowCount === 0) {
|
|
171
168
|
this.log.warn('Failed to update duty to signed status: invalid token or duty not found', {
|
|
172
|
-
rollupAddress: rollupAddress.toString(),
|
|
173
169
|
validatorAddress: validatorAddress.toString(),
|
|
174
170
|
slot: slot.toString(),
|
|
175
171
|
dutyType,
|
|
@@ -188,7 +184,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
188
184
|
* @returns true if the delete succeeded, false if token didn't match or duty not found
|
|
189
185
|
*/
|
|
190
186
|
async deleteDuty(
|
|
191
|
-
rollupAddress: EthAddress,
|
|
192
187
|
validatorAddress: EthAddress,
|
|
193
188
|
slot: SlotNumber,
|
|
194
189
|
dutyType: DutyType,
|
|
@@ -196,7 +191,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
196
191
|
blockIndexWithinCheckpoint: number,
|
|
197
192
|
): Promise<boolean> {
|
|
198
193
|
const result = await this.pool.query(DELETE_DUTY, [
|
|
199
|
-
rollupAddress.toString(),
|
|
200
194
|
validatorAddress.toString(),
|
|
201
195
|
slot.toString(),
|
|
202
196
|
dutyType,
|
|
@@ -206,7 +200,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
206
200
|
|
|
207
201
|
if (result.rowCount === 0) {
|
|
208
202
|
this.log.warn('Failed to delete duty: invalid token or duty not found', {
|
|
209
|
-
rollupAddress: rollupAddress.toString(),
|
|
210
203
|
validatorAddress: validatorAddress.toString(),
|
|
211
204
|
slot: slot.toString(),
|
|
212
205
|
dutyType,
|
|
@@ -222,7 +215,6 @@ export class PostgresSlashingProtectionDatabase implements SlashingProtectionDat
|
|
|
222
215
|
*/
|
|
223
216
|
private rowToRecord(row: DutyRow): ValidatorDutyRecord {
|
|
224
217
|
return {
|
|
225
|
-
rollupAddress: EthAddress.fromString(row.rollup_address),
|
|
226
218
|
validatorAddress: EthAddress.fromString(row.validator_address),
|
|
227
219
|
slot: SlotNumber.fromString(row.slot),
|
|
228
220
|
blockNumber: BlockNumber.fromString(row.block_number),
|
package/src/db/schema.ts
CHANGED
|
@@ -16,7 +16,6 @@ export const SCHEMA_VERSION = 1;
|
|
|
16
16
|
*/
|
|
17
17
|
export const CREATE_VALIDATOR_DUTIES_TABLE = `
|
|
18
18
|
CREATE TABLE IF NOT EXISTS validator_duties (
|
|
19
|
-
rollup_address VARCHAR(42) NOT NULL,
|
|
20
19
|
validator_address VARCHAR(42) NOT NULL,
|
|
21
20
|
slot BIGINT NOT NULL,
|
|
22
21
|
block_number BIGINT NOT NULL,
|
|
@@ -31,7 +30,7 @@ CREATE TABLE IF NOT EXISTS validator_duties (
|
|
|
31
30
|
completed_at TIMESTAMP,
|
|
32
31
|
error_message TEXT,
|
|
33
32
|
|
|
34
|
-
PRIMARY KEY (
|
|
33
|
+
PRIMARY KEY (validator_address, slot, duty_type, block_index_within_checkpoint),
|
|
35
34
|
CHECK (completed_at IS NULL OR completed_at >= started_at)
|
|
36
35
|
);
|
|
37
36
|
`;
|
|
@@ -102,7 +101,6 @@ SELECT version FROM schema_version ORDER BY version DESC LIMIT 1;
|
|
|
102
101
|
export const INSERT_OR_GET_DUTY = `
|
|
103
102
|
WITH inserted AS (
|
|
104
103
|
INSERT INTO validator_duties (
|
|
105
|
-
rollup_address,
|
|
106
104
|
validator_address,
|
|
107
105
|
slot,
|
|
108
106
|
block_number,
|
|
@@ -113,10 +111,9 @@ WITH inserted AS (
|
|
|
113
111
|
node_id,
|
|
114
112
|
lock_token,
|
|
115
113
|
started_at
|
|
116
|
-
) VALUES ($1, $2, $3, $4, $5,
|
|
117
|
-
ON CONFLICT (
|
|
114
|
+
) VALUES ($1, $2, $3, $4, $5, 'signing', $6, $7, $8, CURRENT_TIMESTAMP)
|
|
115
|
+
ON CONFLICT (validator_address, slot, duty_type, block_index_within_checkpoint) DO NOTHING
|
|
118
116
|
RETURNING
|
|
119
|
-
rollup_address,
|
|
120
117
|
validator_address,
|
|
121
118
|
slot,
|
|
122
119
|
block_number,
|
|
@@ -135,7 +132,6 @@ WITH inserted AS (
|
|
|
135
132
|
SELECT * FROM inserted
|
|
136
133
|
UNION ALL
|
|
137
134
|
SELECT
|
|
138
|
-
rollup_address,
|
|
139
135
|
validator_address,
|
|
140
136
|
slot,
|
|
141
137
|
block_number,
|
|
@@ -151,11 +147,10 @@ SELECT
|
|
|
151
147
|
error_message,
|
|
152
148
|
FALSE as is_new
|
|
153
149
|
FROM validator_duties
|
|
154
|
-
WHERE
|
|
155
|
-
AND
|
|
156
|
-
AND
|
|
157
|
-
AND
|
|
158
|
-
AND block_index_within_checkpoint = $5
|
|
150
|
+
WHERE validator_address = $1
|
|
151
|
+
AND slot = $2
|
|
152
|
+
AND duty_type = $5
|
|
153
|
+
AND block_index_within_checkpoint = $4
|
|
159
154
|
AND NOT EXISTS (SELECT 1 FROM inserted);
|
|
160
155
|
`;
|
|
161
156
|
|
|
@@ -167,13 +162,12 @@ UPDATE validator_duties
|
|
|
167
162
|
SET status = 'signed',
|
|
168
163
|
signature = $1,
|
|
169
164
|
completed_at = CURRENT_TIMESTAMP
|
|
170
|
-
WHERE
|
|
171
|
-
AND
|
|
172
|
-
AND
|
|
173
|
-
AND
|
|
174
|
-
AND block_index_within_checkpoint = $6
|
|
165
|
+
WHERE validator_address = $2
|
|
166
|
+
AND slot = $3
|
|
167
|
+
AND duty_type = $4
|
|
168
|
+
AND block_index_within_checkpoint = $5
|
|
175
169
|
AND status = 'signing'
|
|
176
|
-
AND lock_token = $
|
|
170
|
+
AND lock_token = $6;
|
|
177
171
|
`;
|
|
178
172
|
|
|
179
173
|
/**
|
|
@@ -182,13 +176,12 @@ WHERE rollup_address = $2
|
|
|
182
176
|
*/
|
|
183
177
|
export const DELETE_DUTY = `
|
|
184
178
|
DELETE FROM validator_duties
|
|
185
|
-
WHERE
|
|
186
|
-
AND
|
|
187
|
-
AND
|
|
188
|
-
AND
|
|
189
|
-
AND block_index_within_checkpoint = $5
|
|
179
|
+
WHERE validator_address = $1
|
|
180
|
+
AND slot = $2
|
|
181
|
+
AND duty_type = $3
|
|
182
|
+
AND block_index_within_checkpoint = $4
|
|
190
183
|
AND status = 'signing'
|
|
191
|
-
AND lock_token = $
|
|
184
|
+
AND lock_token = $5;
|
|
192
185
|
`;
|
|
193
186
|
|
|
194
187
|
/**
|
|
@@ -238,7 +231,6 @@ export const DROP_SCHEMA_VERSION_TABLE = `DROP TABLE IF EXISTS schema_version;`;
|
|
|
238
231
|
*/
|
|
239
232
|
export const GET_STUCK_DUTIES = `
|
|
240
233
|
SELECT
|
|
241
|
-
rollup_address,
|
|
242
234
|
validator_address,
|
|
243
235
|
slot,
|
|
244
236
|
block_number,
|
package/src/db/types.ts
CHANGED
|
@@ -6,7 +6,6 @@ import type { Signature } from '@aztec/foundation/eth-signature';
|
|
|
6
6
|
* Row type from PostgreSQL query
|
|
7
7
|
*/
|
|
8
8
|
export interface DutyRow {
|
|
9
|
-
rollup_address: string;
|
|
10
9
|
validator_address: string;
|
|
11
10
|
slot: string;
|
|
12
11
|
block_number: string;
|
|
@@ -55,8 +54,6 @@ export enum DutyStatus {
|
|
|
55
54
|
* Record of a validator duty in the database
|
|
56
55
|
*/
|
|
57
56
|
export interface ValidatorDutyRecord {
|
|
58
|
-
/** Ethereum address of the rollup contract */
|
|
59
|
-
rollupAddress: EthAddress;
|
|
60
57
|
/** Ethereum address of the validator */
|
|
61
58
|
validatorAddress: EthAddress;
|
|
62
59
|
/** Slot number for this duty */
|
|
@@ -90,7 +87,6 @@ export interface ValidatorDutyRecord {
|
|
|
90
87
|
* blockIndexWithinCheckpoint is REQUIRED and must be >= 0.
|
|
91
88
|
*/
|
|
92
89
|
export interface BlockProposalDutyIdentifier {
|
|
93
|
-
rollupAddress: EthAddress;
|
|
94
90
|
validatorAddress: EthAddress;
|
|
95
91
|
slot: SlotNumber;
|
|
96
92
|
/** Block index within checkpoint (0, 1, 2...). Required for block proposals. */
|
|
@@ -103,7 +99,6 @@ export interface BlockProposalDutyIdentifier {
|
|
|
103
99
|
* blockIndexWithinCheckpoint is not applicable (internally stored as -1).
|
|
104
100
|
*/
|
|
105
101
|
export interface OtherDutyIdentifier {
|
|
106
|
-
rollupAddress: EthAddress;
|
|
107
102
|
validatorAddress: EthAddress;
|
|
108
103
|
slot: SlotNumber;
|
|
109
104
|
dutyType:
|
|
@@ -149,11 +149,10 @@ export class SlashingProtectionService {
|
|
|
149
149
|
* @returns true if the update succeeded, false if token didn't match
|
|
150
150
|
*/
|
|
151
151
|
async recordSuccess(params: RecordSuccessParams): Promise<boolean> {
|
|
152
|
-
const {
|
|
152
|
+
const { validatorAddress, slot, dutyType, signature, nodeId, lockToken } = params;
|
|
153
153
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
154
154
|
|
|
155
155
|
const success = await this.db.updateDutySigned(
|
|
156
|
-
rollupAddress,
|
|
157
156
|
validatorAddress,
|
|
158
157
|
slot,
|
|
159
158
|
dutyType,
|
|
@@ -185,17 +184,10 @@ export class SlashingProtectionService {
|
|
|
185
184
|
* @returns true if the delete succeeded, false if token didn't match
|
|
186
185
|
*/
|
|
187
186
|
async deleteDuty(params: DeleteDutyParams): Promise<boolean> {
|
|
188
|
-
const {
|
|
187
|
+
const { validatorAddress, slot, dutyType, lockToken } = params;
|
|
189
188
|
const blockIndexWithinCheckpoint = getBlockIndexFromDutyIdentifier(params);
|
|
190
189
|
|
|
191
|
-
const success = await this.db.deleteDuty(
|
|
192
|
-
rollupAddress,
|
|
193
|
-
validatorAddress,
|
|
194
|
-
slot,
|
|
195
|
-
dutyType,
|
|
196
|
-
lockToken,
|
|
197
|
-
blockIndexWithinCheckpoint,
|
|
198
|
-
);
|
|
190
|
+
const success = await this.db.deleteDuty(validatorAddress, slot, dutyType, lockToken, blockIndexWithinCheckpoint);
|
|
199
191
|
|
|
200
192
|
if (success) {
|
|
201
193
|
this.log.info(`Deleted duty ${dutyType} at slot ${slot} to allow retry`, {
|
package/src/types.ts
CHANGED
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
type CheckAndRecordParams,
|
|
15
15
|
type DeleteDutyParams,
|
|
16
16
|
type DutyIdentifier,
|
|
17
|
-
type DutyRow,
|
|
18
17
|
DutyType,
|
|
19
18
|
type OtherDutyIdentifier,
|
|
20
19
|
type RecordSuccessParams,
|
|
@@ -26,7 +25,6 @@ export type {
|
|
|
26
25
|
CheckAndRecordParams,
|
|
27
26
|
DeleteDutyParams,
|
|
28
27
|
DutyIdentifier,
|
|
29
|
-
DutyRow,
|
|
30
28
|
OtherDutyIdentifier,
|
|
31
29
|
RecordSuccessParams,
|
|
32
30
|
ValidatorDutyRecord,
|
|
@@ -172,7 +170,6 @@ export interface SlashingProtectionDatabase {
|
|
|
172
170
|
* @returns true if the update succeeded, false if token didn't match or duty not found
|
|
173
171
|
*/
|
|
174
172
|
updateDutySigned(
|
|
175
|
-
rollupAddress: EthAddress,
|
|
176
173
|
validatorAddress: EthAddress,
|
|
177
174
|
slot: SlotNumber,
|
|
178
175
|
dutyType: DutyType,
|
|
@@ -189,7 +186,6 @@ export interface SlashingProtectionDatabase {
|
|
|
189
186
|
* @returns true if the delete succeeded, false if token didn't match or duty not found
|
|
190
187
|
*/
|
|
191
188
|
deleteDuty(
|
|
192
|
-
rollupAddress: EthAddress,
|
|
193
189
|
validatorAddress: EthAddress,
|
|
194
190
|
slot: SlotNumber,
|
|
195
191
|
dutyType: DutyType,
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* node will sign for a given duty (slot + duty type).
|
|
7
7
|
*/
|
|
8
8
|
import type { Buffer32 } from '@aztec/foundation/buffer';
|
|
9
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
10
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
11
11
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
12
12
|
|
|
@@ -41,7 +41,6 @@ import {
|
|
|
41
41
|
export class ValidatorHASigner {
|
|
42
42
|
private readonly log: Logger;
|
|
43
43
|
private readonly slashingProtection: SlashingProtectionService;
|
|
44
|
-
private readonly rollupAddress: EthAddress;
|
|
45
44
|
|
|
46
45
|
constructor(
|
|
47
46
|
db: SlashingProtectionDatabase,
|
|
@@ -57,11 +56,9 @@ export class ValidatorHASigner {
|
|
|
57
56
|
if (!config.nodeId || config.nodeId === '') {
|
|
58
57
|
throw new Error('NODE_ID is required for high-availability setups');
|
|
59
58
|
}
|
|
60
|
-
this.rollupAddress = config.l1Contracts.rollupAddress;
|
|
61
59
|
this.slashingProtection = new SlashingProtectionService(db, config);
|
|
62
60
|
this.log.info('Validator HA Signer initialized with slashing protection', {
|
|
63
61
|
nodeId: config.nodeId,
|
|
64
|
-
rollupAddress: this.rollupAddress.toString(),
|
|
65
62
|
});
|
|
66
63
|
}
|
|
67
64
|
|
|
@@ -91,7 +88,6 @@ export class ValidatorHASigner {
|
|
|
91
88
|
let dutyIdentifier: DutyIdentifier;
|
|
92
89
|
if (context.dutyType === DutyType.BLOCK_PROPOSAL) {
|
|
93
90
|
dutyIdentifier = {
|
|
94
|
-
rollupAddress: this.rollupAddress,
|
|
95
91
|
validatorAddress,
|
|
96
92
|
slot: context.slot,
|
|
97
93
|
blockIndexWithinCheckpoint: context.blockIndexWithinCheckpoint,
|
|
@@ -99,7 +95,6 @@ export class ValidatorHASigner {
|
|
|
99
95
|
};
|
|
100
96
|
} else {
|
|
101
97
|
dutyIdentifier = {
|
|
102
|
-
rollupAddress: this.rollupAddress,
|
|
103
98
|
validatorAddress,
|
|
104
99
|
slot: context.slot,
|
|
105
100
|
dutyType: context.dutyType,
|