@aztec/validator-client 5.0.0-nightly.20260428 → 5.0.0-nightly.20260430
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 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -5
- package/dest/duties/validation_service.d.ts +5 -4
- package/dest/duties/validation_service.d.ts.map +1 -1
- package/dest/duties/validation_service.js +15 -15
- package/dest/factory.d.ts +1 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +5 -1
- package/dest/proposal_handler.d.ts +1 -1
- package/dest/proposal_handler.js +2 -2
- package/dest/validator.d.ts +2 -1
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +13 -3
- package/package.json +19 -19
- package/src/config.ts +11 -4
- package/src/duties/validation_service.ts +29 -17
- package/src/factory.ts +4 -0
- package/src/proposal_handler.ts +4 -4
- package/src/validator.ts +25 -3
package/dest/config.d.ts
CHANGED
|
@@ -8,4 +8,4 @@ export declare const validatorClientConfigMappings: ConfigMappingsType<Validator
|
|
|
8
8
|
* @returns The validator configuration.
|
|
9
9
|
*/
|
|
10
10
|
export declare function getProverEnvVars(): ValidatorClientConfig;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQU14QixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0UsWUFBWSxFQUFFLHFCQUFxQixFQUFFLENBQUM7QUFFdEMsZUFBTyxNQUFNLDZCQUE2QixFQUFFLGtCQUFrQixDQUFDLHFCQUFxQixDQXlGbkYsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLElBQUkscUJBQXFCLENBRXhEIn0=
|
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,EACL,KAAK,kBAAkB,
|
|
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,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CAyFnF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
|
package/dest/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper, secretValueConfigHelper } from '@aztec/foundation/config';
|
|
1
|
+
import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper, optionalNumberConfigHelper, secretValueConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import { localSignerConfigMappings, validatorHASignerConfigMappings } from '@aztec/stdlib/ha-signing';
|
|
4
4
|
export const validatorClientConfigMappings = {
|
|
@@ -16,6 +16,12 @@ export const validatorClientConfigMappings = {
|
|
|
16
16
|
parseEnv: (val)=>val.split(',').filter((address)=>address && address.trim().length > 0).map((address)=>EthAddress.fromString(address.trim())),
|
|
17
17
|
defaultValue: []
|
|
18
18
|
},
|
|
19
|
+
l1ChainId: {
|
|
20
|
+
env: 'L1_CHAIN_ID',
|
|
21
|
+
description: 'The chain ID of the ethereum host.',
|
|
22
|
+
parseEnv: (val)=>+val,
|
|
23
|
+
defaultValue: 31337
|
|
24
|
+
},
|
|
19
25
|
disableValidator: {
|
|
20
26
|
env: 'VALIDATOR_DISABLED',
|
|
21
27
|
description: 'Do not run the validator',
|
|
@@ -55,22 +61,22 @@ export const validatorClientConfigMappings = {
|
|
|
55
61
|
validateMaxL2BlockGas: {
|
|
56
62
|
env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
|
|
57
63
|
description: 'Maximum L2 block gas for validation. Proposals exceeding this limit are rejected.',
|
|
58
|
-
|
|
64
|
+
...optionalNumberConfigHelper()
|
|
59
65
|
},
|
|
60
66
|
validateMaxDABlockGas: {
|
|
61
67
|
env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
|
|
62
68
|
description: 'Maximum DA block gas for validation. Proposals exceeding this limit are rejected.',
|
|
63
|
-
|
|
69
|
+
...optionalNumberConfigHelper()
|
|
64
70
|
},
|
|
65
71
|
validateMaxTxsPerBlock: {
|
|
66
72
|
env: 'VALIDATOR_MAX_TX_PER_BLOCK',
|
|
67
73
|
description: 'Maximum transactions per block for validation. Proposals exceeding this limit are rejected.',
|
|
68
|
-
|
|
74
|
+
...optionalNumberConfigHelper()
|
|
69
75
|
},
|
|
70
76
|
validateMaxTxsPerCheckpoint: {
|
|
71
77
|
env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
|
|
72
78
|
description: 'Maximum transactions per checkpoint for validation. Proposals exceeding this limit are rejected.',
|
|
73
|
-
|
|
79
|
+
...optionalNumberConfigHelper()
|
|
74
80
|
},
|
|
75
81
|
...localSignerConfigMappings,
|
|
76
82
|
...validatorHASignerConfigMappings
|
|
@@ -2,15 +2,16 @@ import { type CheckpointNumber, IndexWithinCheckpoint, type SlotNumber } from '@
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
|
-
import
|
|
6
|
-
import { BlockProposal, type BlockProposalOptions, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type CheckpointProposalOptions } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
6
|
+
import { BlockProposal, type BlockProposalOptions, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type CheckpointProposalOptions, type CoordinationSignatureContext } from '@aztec/stdlib/p2p';
|
|
7
7
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
8
8
|
import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
9
9
|
import type { ValidatorKeyStore } from '../key_store/interface.js';
|
|
10
10
|
export declare class ValidationService {
|
|
11
11
|
private keyStore;
|
|
12
|
+
private signatureContext;
|
|
12
13
|
private log;
|
|
13
|
-
constructor(keyStore: ValidatorKeyStore, log?: import("@aztec/foundation/log").Logger);
|
|
14
|
+
constructor(keyStore: ValidatorKeyStore, signatureContext: CoordinationSignatureContext, log?: import("@aztec/foundation/log").Logger);
|
|
14
15
|
/**
|
|
15
16
|
* Create a block proposal with the given header, archive, and transactions
|
|
16
17
|
*
|
|
@@ -61,4 +62,4 @@ export declare class ValidationService {
|
|
|
61
62
|
*/
|
|
62
63
|
signAttestationsAndSigners(attestationsAndSigners: CommitteeAttestationsAndSigners, proposer: EthAddress, slot: SlotNumber, checkpointNumber: CheckpointNumber): Promise<Signature>;
|
|
63
64
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbl9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHV0aWVzL3ZhbGlkYXRpb25fc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLEtBQUssb0JBQW9CLEVBQ3pCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyx5QkFBeUIsRUFFOUIsS0FBSyw0QkFBNEIsRUFFbEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUl4RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLHFCQUFhLGlCQUFpQjtJQUUxQixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsZ0JBQWdCO0lBQ3hCLE9BQU8sQ0FBQyxHQUFHO0lBSGIsWUFDVSxRQUFRLEVBQUUsaUJBQWlCLEVBQzNCLGdCQUFnQixFQUFFLDRCQUE0QixFQUM5QyxHQUFHLHlDQUErQyxFQUN4RDtJQUVKOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksbUJBQW1CLENBQ3hCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQywwQkFBMEIsRUFBRSxxQkFBcUIsRUFDakQsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUUsRUFBRSxFQUNYLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFDVCx1QkFBdUIsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEdBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0E4QnhCO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHdCQUF3QixDQUM3QixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsT0FBTyxFQUFFLEVBQUUsRUFDWCxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMscUJBQXFCLEVBQUUsTUFBTSxFQUM3QixpQkFBaUIsRUFBRSxhQUFhLEdBQUcsU0FBUyxFQUM1Qyx1QkFBdUIsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUMvQyxPQUFPLEVBQUUseUJBQXlCLEdBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQTJCN0I7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDRywwQkFBMEIsQ0FDOUIsUUFBUSxFQUFFLHNCQUFzQixFQUNoQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQ3ZCLGdCQUFnQixFQUFFLGdCQUFnQixHQUNqQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQTJDbEM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILDBCQUEwQixDQUN4QixzQkFBc0IsRUFBRSwrQkFBK0IsRUFDdkQsUUFBUSxFQUFFLFVBQVUsRUFDcEIsSUFBSSxFQUFFLFVBQVUsRUFDaEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQ2pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FTcEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAE9B,KAAK,4BAA4B,EAElC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IAHb,YACU,QAAQ,EAAE,iBAAiB,EAC3B,gBAAgB,EAAE,4BAA4B,EAC9C,GAAG,yCAA+C,EACxD;IAEJ;;;;;;;;;;;;;;OAcG;IACI,mBAAmB,CACxB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,0BAA0B,EAAE,qBAAqB,EACjD,MAAM,EAAE,EAAE,EACV,OAAO,EAAE,EAAE,EACX,GAAG,EAAE,EAAE,EAAE,EACT,uBAAuB,EAAE,UAAU,GAAG,SAAS,EAC/C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC,CA8BxB;IAED;;;;;;;;;;OAUG;IACI,wBAAwB,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,EAAE,EACX,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,MAAM,EAC7B,iBAAiB,EAAE,aAAa,GAAG,SAAS,EAC5C,uBAAuB,EAAE,UAAU,GAAG,SAAS,EAC/C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;IAED;;;;;;;;;OASG;IACG,0BAA0B,CAC9B,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,UAAU,EAAE,EACvB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA2ClC;IAED;;;;;;;;OAQG;IACH,0BAA0B,CACxB,sBAAsB,EAAE,+BAA+B,EACvD,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,UAAU,EAChB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,SAAS,CAAC,CASpB;CACF"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
3
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import { BlockProposal, CheckpointAttestation, CheckpointProposal, ConsensusPayload,
|
|
3
|
+
import { BlockProposal, CheckpointAttestation, CheckpointProposal, ConsensusPayload, getCoordinationSignatureTypedData } from '@aztec/stdlib/p2p';
|
|
6
4
|
import { DutyAlreadySignedError, SlashingProtectionError } from '@aztec/validator-ha-signer/errors';
|
|
7
5
|
import { DutyType } from '@aztec/validator-ha-signer/types';
|
|
8
6
|
export class ValidationService {
|
|
9
7
|
keyStore;
|
|
8
|
+
signatureContext;
|
|
10
9
|
log;
|
|
11
|
-
constructor(keyStore, log = createLogger('validator:validation-service')){
|
|
10
|
+
constructor(keyStore, signatureContext, log = createLogger('validator:validation-service')){
|
|
12
11
|
this.keyStore = keyStore;
|
|
12
|
+
this.signatureContext = signatureContext;
|
|
13
13
|
this.log = log;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
@@ -34,8 +34,9 @@ export class ValidationService {
|
|
|
34
34
|
}
|
|
35
35
|
// Create a signer that uses the appropriate address
|
|
36
36
|
const address = proposerAttesterAddress ?? this.keyStore.getAddress(0);
|
|
37
|
-
const payloadSigner = (
|
|
38
|
-
|
|
37
|
+
const payloadSigner = (typedData, context)=>this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
38
|
+
const txsSigner = (typedData, context)=>this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
39
|
+
return BlockProposal.createProposalFromSigner(blockHeader, checkpointNumber, blockIndexWithinCheckpoint, inHash, archive, txs.map((tx)=>tx.getTxHash()), options.publishFullTxs ? txs : undefined, this.signatureContext, payloadSigner, txsSigner);
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
41
42
|
* Create a checkpoint proposal with the last block header and checkpoint header
|
|
@@ -56,11 +57,11 @@ export class ValidationService {
|
|
|
56
57
|
this.log.warn(`Creating INVALID checkpoint proposal for slot ${checkpointHeader.slotNumber}`);
|
|
57
58
|
}
|
|
58
59
|
// Create a signer that takes payload and context, and uses the appropriate address
|
|
59
|
-
const payloadSigner = (
|
|
60
|
+
const payloadSigner = (typedData, context)=>{
|
|
60
61
|
const address = proposerAttesterAddress ?? this.keyStore.getAddress(0);
|
|
61
|
-
return this.keyStore.
|
|
62
|
+
return this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
62
63
|
};
|
|
63
|
-
return CheckpointProposal.createProposalFromSigner(checkpointHeader, archive, checkpointNumber, feeAssetPriceModifier, lastBlockProposal, payloadSigner);
|
|
64
|
+
return CheckpointProposal.createProposalFromSigner(checkpointHeader, archive, checkpointNumber, feeAssetPriceModifier, lastBlockProposal, this.signatureContext, payloadSigner);
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Attest with selection of validators to the given checkpoint proposal
|
|
@@ -73,8 +74,8 @@ export class ValidationService {
|
|
|
73
74
|
* @returns checkpoint attestations
|
|
74
75
|
*/ async attestToCheckpointProposal(proposal, attestors, checkpointNumber) {
|
|
75
76
|
// Create the attestation payload from the checkpoint proposal
|
|
76
|
-
const payload = new ConsensusPayload(proposal.checkpointHeader, proposal.archive, proposal.feeAssetPriceModifier);
|
|
77
|
-
const
|
|
77
|
+
const payload = new ConsensusPayload(proposal.checkpointHeader, proposal.archive, proposal.feeAssetPriceModifier, this.signatureContext);
|
|
78
|
+
const typedData = getCoordinationSignatureTypedData(payload);
|
|
78
79
|
const context = {
|
|
79
80
|
slot: proposal.slotNumber,
|
|
80
81
|
checkpointNumber,
|
|
@@ -82,8 +83,7 @@ export class ValidationService {
|
|
|
82
83
|
};
|
|
83
84
|
// Sign each attestor in parallel, catching HA errors per-attestor
|
|
84
85
|
const results = await Promise.allSettled(attestors.map(async (attestor)=>{
|
|
85
|
-
const sig = await this.keyStore.
|
|
86
|
-
// return new BlockAttestation(proposal.payload, sig, proposal.signature);
|
|
86
|
+
const sig = await this.keyStore.signTypedDataWithAddress(attestor, typedData, context);
|
|
87
87
|
return new CheckpointAttestation(payload, sig, proposal.signature);
|
|
88
88
|
}));
|
|
89
89
|
const attestations = [];
|
|
@@ -117,7 +117,7 @@ export class ValidationService {
|
|
|
117
117
|
checkpointNumber,
|
|
118
118
|
dutyType: DutyType.ATTESTATIONS_AND_SIGNERS
|
|
119
119
|
};
|
|
120
|
-
const
|
|
121
|
-
return this.keyStore.
|
|
120
|
+
const typedData = getCoordinationSignatureTypedData(attestationsAndSigners);
|
|
121
|
+
return this.keyStore.signTypedDataWithAddress(proposer, typedData, context);
|
|
122
122
|
}
|
|
123
123
|
}
|
package/dest/factory.d.ts
CHANGED
|
@@ -35,4 +35,4 @@ export declare function createValidatorClient(config: ValidatorClientFullConfig,
|
|
|
35
35
|
blobClient: BlobClientInterface;
|
|
36
36
|
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
37
37
|
}): Promise<ValidatorClient> | undefined;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQTBCLEtBQUssU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsd0JBQWdCLHFCQUFxQixDQUNuQyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLElBQUksRUFBRTtJQUNKLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO0lBQy9DLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQztJQUNuQyxXQUFXLEVBQUUsYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUN6QyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0lBQ2hDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDM0IsU0FBUyxFQUFFLGVBQWUsQ0FBQztDQUM1QixtQkEwQkY7QUFFRCx3QkFBZ0IscUJBQXFCLENBQ25DLE1BQU0sRUFBRSx5QkFBeUIsRUFDakMsSUFBSSxFQUFFO0lBQ0osa0JBQWtCLEVBQUUsMEJBQTBCLENBQUM7SUFDL0MsVUFBVSxFQUFFLHNCQUFzQixDQUFDO0lBQ25DLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckIsV0FBVyxFQUFFLGFBQWEsR0FBRyxXQUFXLENBQUM7SUFDekMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7SUFDekMsU0FBUyxFQUFFLGVBQWUsQ0FBQztJQUMzQixZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsZUFBZSxFQUFFLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDN0MsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0lBQ2hDLG9CQUFvQixDQUFDLEVBQUUsMEJBQTBCLENBQUM7Q0FDbkQsd0NBc0JGIn0=
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAEnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAEnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B,mBA0BF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,UAAU,EAAE,sBAAsB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,mBAAmB,CAAC;IAChC,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACnD,wCAsBF"}
|
package/dest/factory.js
CHANGED
|
@@ -6,7 +6,11 @@ export function createProposalHandler(config, deps) {
|
|
|
6
6
|
const metrics = new ValidatorMetrics(deps.telemetry);
|
|
7
7
|
const blockProposalValidator = new BlockProposalValidator(deps.epochCache, {
|
|
8
8
|
txsPermitted: !config.disableTransactions,
|
|
9
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint
|
|
9
|
+
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
|
|
10
|
+
signatureContext: {
|
|
11
|
+
chainId: config.l1ChainId,
|
|
12
|
+
rollupAddress: config.l1Contracts.rollupAddress
|
|
13
|
+
}
|
|
10
14
|
});
|
|
11
15
|
return new ProposalHandler(deps.checkpointsBuilder, deps.worldState, deps.blockSource, deps.l1ToL2MessageSource, deps.p2pClient.getTxProvider(), blockProposalValidator, deps.epochCache, config, deps.blobClient, metrics, deps.dateProvider, deps.telemetry, undefined);
|
|
12
16
|
}
|
|
@@ -70,7 +70,7 @@ export declare class ProposalHandler {
|
|
|
70
70
|
* @param archiver - Archiver reference for setting proposed checkpoints (pipelining)
|
|
71
71
|
* @param getOwnValidatorAddresses - Returns current validator addresses for own-proposal detection
|
|
72
72
|
*/
|
|
73
|
-
register(p2pClient: P2P, shouldReexecute: boolean, archiver?: Pick<Archiver, '
|
|
73
|
+
register(p2pClient: P2P, shouldReexecute: boolean, archiver?: Pick<Archiver, 'addProposedCheckpoint' | 'getL1Constants'>, getOwnValidatorAddresses?: () => string[]): ProposalHandler;
|
|
74
74
|
handleBlockProposal(proposal: BlockProposal, proposalSender: PeerId, shouldReexecute: boolean): Promise<BlockProposalValidationResult>;
|
|
75
75
|
private getParentBlock;
|
|
76
76
|
private computeCheckpointNumber;
|
package/dest/proposal_handler.js
CHANGED
|
@@ -927,7 +927,7 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
|
927
927
|
});
|
|
928
928
|
return false;
|
|
929
929
|
}
|
|
930
|
-
await this.archiver.
|
|
930
|
+
await this.archiver.addProposedCheckpoint({
|
|
931
931
|
header: proposal.checkpointHeader,
|
|
932
932
|
checkpointNumber: blockData.checkpointNumber,
|
|
933
933
|
startBlock: BlockNumber(blockData.header.getBlockNumber() - blockData.indexWithinCheckpoint),
|
|
@@ -955,7 +955,7 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
|
955
955
|
blockData = await retryUntil(()=>this.blockSource.getBlockDataByArchive(proposal.archive), 'block data for own checkpoint proposal', timeoutSeconds, 0.25).catch(()=>undefined);
|
|
956
956
|
}
|
|
957
957
|
if (blockData) {
|
|
958
|
-
await this.archiver.
|
|
958
|
+
await this.archiver.addProposedCheckpoint({
|
|
959
959
|
header: proposal.checkpointHeader,
|
|
960
960
|
checkpointNumber: blockData.checkpointNumber,
|
|
961
961
|
startBlock: BlockNumber(blockData.header.getBlockNumber() - blockData.indexWithinCheckpoint),
|
package/dest/validator.d.ts
CHANGED
|
@@ -63,6 +63,7 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
63
63
|
getValidatorAddresses(): EthAddress[];
|
|
64
64
|
getProposalHandler(): ProposalHandler;
|
|
65
65
|
signWithAddress(addr: EthAddress, msg: TypedDataDefinition, context: SigningContext): Promise<Signature>;
|
|
66
|
+
private getSignatureContext;
|
|
66
67
|
getCoinbaseForAttestor(attestor: EthAddress): EthAddress;
|
|
67
68
|
getFeeRecipientForAttestor(attestor: EthAddress): AztecAddress;
|
|
68
69
|
getConfig(): ValidatorClientFullConfig;
|
|
@@ -115,4 +116,4 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
115
116
|
private handleAuthRequest;
|
|
116
117
|
}
|
|
117
118
|
export {};
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFlLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFtRCxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9GLE9BQU8sRUFBb0MsS0FBSyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkcsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFNBQVMsRUFDVCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3ZCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FB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
|
package/dest/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAe,qBAAqB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAmD,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/F,OAAO,EAAoC,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,+BAA+B,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvG,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/dest/validator.js
CHANGED
|
@@ -59,7 +59,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
59
59
|
this.log = config.fishermanMode ? log.createChild('[FISHERMAN]') : log;
|
|
60
60
|
this.tracer = telemetry.getTracer('Validator');
|
|
61
61
|
this.metrics = new ValidatorMetrics(telemetry);
|
|
62
|
-
this.validationService = new ValidationService(keyStore, this.log.createChild('validation-service'));
|
|
62
|
+
this.validationService = new ValidationService(keyStore, this.getSignatureContext(), this.log.createChild('validation-service'));
|
|
63
63
|
// Refresh epoch cache every second to trigger alert if participation in committee changes
|
|
64
64
|
this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), this.log, 1000);
|
|
65
65
|
const myAddresses = this.getValidatorAddresses();
|
|
@@ -113,7 +113,11 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
113
113
|
const metrics = new ValidatorMetrics(telemetry);
|
|
114
114
|
const blockProposalValidator = new BlockProposalValidator(epochCache, {
|
|
115
115
|
txsPermitted: !config.disableTransactions,
|
|
116
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock
|
|
116
|
+
maxTxsPerBlock: config.validateMaxTxsPerBlock,
|
|
117
|
+
signatureContext: {
|
|
118
|
+
chainId: config.l1ChainId,
|
|
119
|
+
rollupAddress: config.l1Contracts.rollupAddress
|
|
120
|
+
}
|
|
117
121
|
});
|
|
118
122
|
const proposalHandler = new ProposalHandler(checkpointsBuilder, worldState, blockSource, l1ToL2MessageSource, txProvider, blockProposalValidator, epochCache, config, blobClient, metrics, dateProvider, telemetry, undefined);
|
|
119
123
|
const nodeKeystoreAdapter = NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager);
|
|
@@ -156,6 +160,12 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
156
160
|
signWithAddress(addr, msg, context) {
|
|
157
161
|
return this.keyStore.signTypedDataWithAddress(addr, msg, context);
|
|
158
162
|
}
|
|
163
|
+
getSignatureContext() {
|
|
164
|
+
return {
|
|
165
|
+
chainId: this.config.l1ChainId,
|
|
166
|
+
rollupAddress: this.config.l1Contracts.rollupAddress
|
|
167
|
+
};
|
|
168
|
+
}
|
|
159
169
|
getCoinbaseForAttestor(attestor) {
|
|
160
170
|
return this.keyStore.getCoinbaseAddress(attestor);
|
|
161
171
|
}
|
|
@@ -174,7 +184,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
174
184
|
reloadKeystore(newManager) {
|
|
175
185
|
const newAdapter = NodeKeystoreAdapter.fromKeyStoreManager(newManager);
|
|
176
186
|
this.keyStore = new HAKeyStore(newAdapter, this.slashingProtectionSigner);
|
|
177
|
-
this.validationService = new ValidationService(this.keyStore, this.log.createChild('validation-service'));
|
|
187
|
+
this.validationService = new ValidationService(this.keyStore, this.getSignatureContext(), this.log.createChild('validation-service'));
|
|
178
188
|
}
|
|
179
189
|
async start() {
|
|
180
190
|
if (this.epochCacheUpdateLoop.isRunning()) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/validator-client",
|
|
3
|
-
"version": "5.0.0-nightly.
|
|
3
|
+
"version": "5.0.0-nightly.20260430",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -64,30 +64,30 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-client": "5.0.0-nightly.
|
|
68
|
-
"@aztec/blob-lib": "5.0.0-nightly.
|
|
69
|
-
"@aztec/constants": "5.0.0-nightly.
|
|
70
|
-
"@aztec/epoch-cache": "5.0.0-nightly.
|
|
71
|
-
"@aztec/ethereum": "5.0.0-nightly.
|
|
72
|
-
"@aztec/foundation": "5.0.0-nightly.
|
|
73
|
-
"@aztec/node-keystore": "5.0.0-nightly.
|
|
74
|
-
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.
|
|
75
|
-
"@aztec/p2p": "5.0.0-nightly.
|
|
76
|
-
"@aztec/protocol-contracts": "5.0.0-nightly.
|
|
77
|
-
"@aztec/prover-client": "5.0.0-nightly.
|
|
78
|
-
"@aztec/simulator": "5.0.0-nightly.
|
|
79
|
-
"@aztec/slasher": "5.0.0-nightly.
|
|
80
|
-
"@aztec/stdlib": "5.0.0-nightly.
|
|
81
|
-
"@aztec/telemetry-client": "5.0.0-nightly.
|
|
82
|
-
"@aztec/validator-ha-signer": "5.0.0-nightly.
|
|
67
|
+
"@aztec/blob-client": "5.0.0-nightly.20260430",
|
|
68
|
+
"@aztec/blob-lib": "5.0.0-nightly.20260430",
|
|
69
|
+
"@aztec/constants": "5.0.0-nightly.20260430",
|
|
70
|
+
"@aztec/epoch-cache": "5.0.0-nightly.20260430",
|
|
71
|
+
"@aztec/ethereum": "5.0.0-nightly.20260430",
|
|
72
|
+
"@aztec/foundation": "5.0.0-nightly.20260430",
|
|
73
|
+
"@aztec/node-keystore": "5.0.0-nightly.20260430",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.20260430",
|
|
75
|
+
"@aztec/p2p": "5.0.0-nightly.20260430",
|
|
76
|
+
"@aztec/protocol-contracts": "5.0.0-nightly.20260430",
|
|
77
|
+
"@aztec/prover-client": "5.0.0-nightly.20260430",
|
|
78
|
+
"@aztec/simulator": "5.0.0-nightly.20260430",
|
|
79
|
+
"@aztec/slasher": "5.0.0-nightly.20260430",
|
|
80
|
+
"@aztec/stdlib": "5.0.0-nightly.20260430",
|
|
81
|
+
"@aztec/telemetry-client": "5.0.0-nightly.20260430",
|
|
82
|
+
"@aztec/validator-ha-signer": "5.0.0-nightly.20260430",
|
|
83
83
|
"koa": "^2.16.1",
|
|
84
84
|
"koa-router": "^13.1.1",
|
|
85
85
|
"tslib": "^2.4.0",
|
|
86
86
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@aztec/archiver": "5.0.0-nightly.
|
|
90
|
-
"@aztec/world-state": "5.0.0-nightly.
|
|
89
|
+
"@aztec/archiver": "5.0.0-nightly.20260430",
|
|
90
|
+
"@aztec/world-state": "5.0.0-nightly.20260430",
|
|
91
91
|
"@electric-sql/pglite": "^0.3.14",
|
|
92
92
|
"@jest/globals": "^30.0.0",
|
|
93
93
|
"@types/jest": "^30.0.0",
|
package/src/config.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
booleanConfigHelper,
|
|
4
4
|
getConfigFromMappings,
|
|
5
5
|
numberConfigHelper,
|
|
6
|
+
optionalNumberConfigHelper,
|
|
6
7
|
secretValueConfigHelper,
|
|
7
8
|
} from '@aztec/foundation/config';
|
|
8
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -30,6 +31,12 @@ export const validatorClientConfigMappings: ConfigMappingsType<ValidatorClientCo
|
|
|
30
31
|
.map(address => EthAddress.fromString(address.trim())),
|
|
31
32
|
defaultValue: [],
|
|
32
33
|
},
|
|
34
|
+
l1ChainId: {
|
|
35
|
+
env: 'L1_CHAIN_ID',
|
|
36
|
+
description: 'The chain ID of the ethereum host.',
|
|
37
|
+
parseEnv: (val: string) => +val,
|
|
38
|
+
defaultValue: 31337,
|
|
39
|
+
},
|
|
33
40
|
disableValidator: {
|
|
34
41
|
env: 'VALIDATOR_DISABLED',
|
|
35
42
|
description: 'Do not run the validator',
|
|
@@ -75,22 +82,22 @@ export const validatorClientConfigMappings: ConfigMappingsType<ValidatorClientCo
|
|
|
75
82
|
validateMaxL2BlockGas: {
|
|
76
83
|
env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
|
|
77
84
|
description: 'Maximum L2 block gas for validation. Proposals exceeding this limit are rejected.',
|
|
78
|
-
|
|
85
|
+
...optionalNumberConfigHelper(),
|
|
79
86
|
},
|
|
80
87
|
validateMaxDABlockGas: {
|
|
81
88
|
env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
|
|
82
89
|
description: 'Maximum DA block gas for validation. Proposals exceeding this limit are rejected.',
|
|
83
|
-
|
|
90
|
+
...optionalNumberConfigHelper(),
|
|
84
91
|
},
|
|
85
92
|
validateMaxTxsPerBlock: {
|
|
86
93
|
env: 'VALIDATOR_MAX_TX_PER_BLOCK',
|
|
87
94
|
description: 'Maximum transactions per block for validation. Proposals exceeding this limit are rejected.',
|
|
88
|
-
|
|
95
|
+
...optionalNumberConfigHelper(),
|
|
89
96
|
},
|
|
90
97
|
validateMaxTxsPerCheckpoint: {
|
|
91
98
|
env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
|
|
92
99
|
description: 'Maximum transactions per checkpoint for validation. Proposals exceeding this limit are rejected.',
|
|
93
|
-
|
|
100
|
+
...optionalNumberConfigHelper(),
|
|
94
101
|
},
|
|
95
102
|
...localSignerConfigMappings,
|
|
96
103
|
...validatorHASignerConfigMappings,
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { type CheckpointNumber, IndexWithinCheckpoint, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
|
-
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
4
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
3
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
4
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
7
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
-
import
|
|
6
|
+
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
9
7
|
import {
|
|
10
8
|
BlockProposal,
|
|
11
9
|
type BlockProposalOptions,
|
|
@@ -14,7 +12,8 @@ import {
|
|
|
14
12
|
type CheckpointProposalCore,
|
|
15
13
|
type CheckpointProposalOptions,
|
|
16
14
|
ConsensusPayload,
|
|
17
|
-
|
|
15
|
+
type CoordinationSignatureContext,
|
|
16
|
+
getCoordinationSignatureTypedData,
|
|
18
17
|
} from '@aztec/stdlib/p2p';
|
|
19
18
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
20
19
|
import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
@@ -26,6 +25,7 @@ import type { ValidatorKeyStore } from '../key_store/interface.js';
|
|
|
26
25
|
export class ValidationService {
|
|
27
26
|
constructor(
|
|
28
27
|
private keyStore: ValidatorKeyStore,
|
|
28
|
+
private signatureContext: CoordinationSignatureContext,
|
|
29
29
|
private log = createLogger('validator:validation-service'),
|
|
30
30
|
) {}
|
|
31
31
|
|
|
@@ -62,8 +62,14 @@ export class ValidationService {
|
|
|
62
62
|
|
|
63
63
|
// Create a signer that uses the appropriate address
|
|
64
64
|
const address = proposerAttesterAddress ?? this.keyStore.getAddress(0);
|
|
65
|
-
const payloadSigner = (
|
|
66
|
-
|
|
65
|
+
const payloadSigner = (
|
|
66
|
+
typedData: Parameters<ValidatorKeyStore['signTypedDataWithAddress']>[1],
|
|
67
|
+
context: SigningContext,
|
|
68
|
+
) => this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
69
|
+
const txsSigner = (
|
|
70
|
+
typedData: Parameters<ValidatorKeyStore['signTypedDataWithAddress']>[1],
|
|
71
|
+
context: SigningContext,
|
|
72
|
+
) => this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
67
73
|
|
|
68
74
|
return BlockProposal.createProposalFromSigner(
|
|
69
75
|
blockHeader,
|
|
@@ -73,7 +79,9 @@ export class ValidationService {
|
|
|
73
79
|
archive,
|
|
74
80
|
txs.map(tx => tx.getTxHash()),
|
|
75
81
|
options.publishFullTxs ? txs : undefined,
|
|
82
|
+
this.signatureContext,
|
|
76
83
|
payloadSigner,
|
|
84
|
+
txsSigner,
|
|
77
85
|
);
|
|
78
86
|
}
|
|
79
87
|
|
|
@@ -106,9 +114,12 @@ export class ValidationService {
|
|
|
106
114
|
}
|
|
107
115
|
|
|
108
116
|
// Create a signer that takes payload and context, and uses the appropriate address
|
|
109
|
-
const payloadSigner = (
|
|
117
|
+
const payloadSigner = (
|
|
118
|
+
typedData: Parameters<ValidatorKeyStore['signTypedDataWithAddress']>[1],
|
|
119
|
+
context: SigningContext,
|
|
120
|
+
) => {
|
|
110
121
|
const address = proposerAttesterAddress ?? this.keyStore.getAddress(0);
|
|
111
|
-
return this.keyStore.
|
|
122
|
+
return this.keyStore.signTypedDataWithAddress(address, typedData, context);
|
|
112
123
|
};
|
|
113
124
|
|
|
114
125
|
return CheckpointProposal.createProposalFromSigner(
|
|
@@ -117,6 +128,7 @@ export class ValidationService {
|
|
|
117
128
|
checkpointNumber,
|
|
118
129
|
feeAssetPriceModifier,
|
|
119
130
|
lastBlockProposal,
|
|
131
|
+
this.signatureContext,
|
|
120
132
|
payloadSigner,
|
|
121
133
|
);
|
|
122
134
|
}
|
|
@@ -137,10 +149,13 @@ export class ValidationService {
|
|
|
137
149
|
checkpointNumber: CheckpointNumber,
|
|
138
150
|
): Promise<CheckpointAttestation[]> {
|
|
139
151
|
// Create the attestation payload from the checkpoint proposal
|
|
140
|
-
const payload = new ConsensusPayload(
|
|
141
|
-
|
|
142
|
-
|
|
152
|
+
const payload = new ConsensusPayload(
|
|
153
|
+
proposal.checkpointHeader,
|
|
154
|
+
proposal.archive,
|
|
155
|
+
proposal.feeAssetPriceModifier,
|
|
156
|
+
this.signatureContext,
|
|
143
157
|
);
|
|
158
|
+
const typedData = getCoordinationSignatureTypedData(payload);
|
|
144
159
|
|
|
145
160
|
const context: SigningContext = {
|
|
146
161
|
slot: proposal.slotNumber,
|
|
@@ -151,8 +166,7 @@ export class ValidationService {
|
|
|
151
166
|
// Sign each attestor in parallel, catching HA errors per-attestor
|
|
152
167
|
const results = await Promise.allSettled(
|
|
153
168
|
attestors.map(async attestor => {
|
|
154
|
-
const sig = await this.keyStore.
|
|
155
|
-
// return new BlockAttestation(proposal.payload, sig, proposal.signature);
|
|
169
|
+
const sig = await this.keyStore.signTypedDataWithAddress(attestor, typedData, context);
|
|
156
170
|
return new CheckpointAttestation(payload, sig, proposal.signature);
|
|
157
171
|
}),
|
|
158
172
|
);
|
|
@@ -199,9 +213,7 @@ export class ValidationService {
|
|
|
199
213
|
dutyType: DutyType.ATTESTATIONS_AND_SIGNERS,
|
|
200
214
|
};
|
|
201
215
|
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
);
|
|
205
|
-
return this.keyStore.signMessageWithAddress(proposer, buf, context);
|
|
216
|
+
const typedData = getCoordinationSignatureTypedData(attestationsAndSigners);
|
|
217
|
+
return this.keyStore.signTypedDataWithAddress(proposer, typedData, context);
|
|
206
218
|
}
|
|
207
219
|
}
|
package/src/factory.ts
CHANGED
|
@@ -32,6 +32,10 @@ export function createProposalHandler(
|
|
|
32
32
|
const blockProposalValidator = new BlockProposalValidator(deps.epochCache, {
|
|
33
33
|
txsPermitted: !config.disableTransactions,
|
|
34
34
|
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
|
|
35
|
+
signatureContext: {
|
|
36
|
+
chainId: config.l1ChainId,
|
|
37
|
+
rollupAddress: config.l1Contracts.rollupAddress,
|
|
38
|
+
},
|
|
35
39
|
});
|
|
36
40
|
return new ProposalHandler(
|
|
37
41
|
deps.checkpointsBuilder,
|
package/src/proposal_handler.ts
CHANGED
|
@@ -96,7 +96,7 @@ export class ProposalHandler {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
/** Archiver reference for setting proposed checkpoints (pipelining). Set via register(). */
|
|
99
|
-
private archiver?: Pick<Archiver, '
|
|
99
|
+
private archiver?: Pick<Archiver, 'addProposedCheckpoint' | 'getL1Constants'>;
|
|
100
100
|
|
|
101
101
|
/** Returns current validator addresses for own-proposal detection. Set via register(). */
|
|
102
102
|
private getOwnValidatorAddresses?: () => string[];
|
|
@@ -132,7 +132,7 @@ export class ProposalHandler {
|
|
|
132
132
|
register(
|
|
133
133
|
p2pClient: P2P,
|
|
134
134
|
shouldReexecute: boolean,
|
|
135
|
-
archiver?: Pick<Archiver, '
|
|
135
|
+
archiver?: Pick<Archiver, 'addProposedCheckpoint' | 'getL1Constants'>,
|
|
136
136
|
getOwnValidatorAddresses?: () => string[],
|
|
137
137
|
): ProposalHandler {
|
|
138
138
|
this.archiver = archiver;
|
|
@@ -985,7 +985,7 @@ export class ProposalHandler {
|
|
|
985
985
|
return false;
|
|
986
986
|
}
|
|
987
987
|
|
|
988
|
-
await this.archiver.
|
|
988
|
+
await this.archiver.addProposedCheckpoint({
|
|
989
989
|
header: proposal.checkpointHeader,
|
|
990
990
|
checkpointNumber: blockData.checkpointNumber,
|
|
991
991
|
startBlock: BlockNumber(blockData.header.getBlockNumber() - blockData.indexWithinCheckpoint),
|
|
@@ -1023,7 +1023,7 @@ export class ProposalHandler {
|
|
|
1023
1023
|
}
|
|
1024
1024
|
|
|
1025
1025
|
if (blockData) {
|
|
1026
|
-
await this.archiver.
|
|
1026
|
+
await this.archiver.addProposedCheckpoint({
|
|
1027
1027
|
header: proposal.checkpointHeader,
|
|
1028
1028
|
checkpointNumber: blockData.checkpointNumber,
|
|
1029
1029
|
startBlock: BlockNumber(blockData.header.getBlockNumber() - blockData.indexWithinCheckpoint),
|
package/src/validator.ts
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
CheckpointProposal,
|
|
31
31
|
type CheckpointProposalCore,
|
|
32
32
|
type CheckpointProposalOptions,
|
|
33
|
+
type CoordinationSignatureContext,
|
|
33
34
|
} from '@aztec/stdlib/p2p';
|
|
34
35
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
35
36
|
import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
@@ -115,7 +116,11 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
115
116
|
this.tracer = telemetry.getTracer('Validator');
|
|
116
117
|
this.metrics = new ValidatorMetrics(telemetry);
|
|
117
118
|
|
|
118
|
-
this.validationService = new ValidationService(
|
|
119
|
+
this.validationService = new ValidationService(
|
|
120
|
+
keyStore,
|
|
121
|
+
this.getSignatureContext(),
|
|
122
|
+
this.log.createChild('validation-service'),
|
|
123
|
+
);
|
|
119
124
|
|
|
120
125
|
// Refresh epoch cache every second to trigger alert if participation in committee changes
|
|
121
126
|
this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), this.log, 1000);
|
|
@@ -196,6 +201,10 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
196
201
|
const blockProposalValidator = new BlockProposalValidator(epochCache, {
|
|
197
202
|
txsPermitted: !config.disableTransactions,
|
|
198
203
|
maxTxsPerBlock: config.validateMaxTxsPerBlock,
|
|
204
|
+
signatureContext: {
|
|
205
|
+
chainId: config.l1ChainId,
|
|
206
|
+
rollupAddress: config.l1Contracts.rollupAddress,
|
|
207
|
+
},
|
|
199
208
|
});
|
|
200
209
|
const proposalHandler = new ProposalHandler(
|
|
201
210
|
checkpointsBuilder,
|
|
@@ -275,6 +284,13 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
275
284
|
return this.keyStore.signTypedDataWithAddress(addr, msg, context);
|
|
276
285
|
}
|
|
277
286
|
|
|
287
|
+
private getSignatureContext(): CoordinationSignatureContext {
|
|
288
|
+
return {
|
|
289
|
+
chainId: this.config.l1ChainId,
|
|
290
|
+
rollupAddress: this.config.l1Contracts.rollupAddress,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
|
|
278
294
|
public getCoinbaseForAttestor(attestor: EthAddress): EthAddress {
|
|
279
295
|
return this.keyStore.getCoinbaseAddress(attestor);
|
|
280
296
|
}
|
|
@@ -294,7 +310,11 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
294
310
|
public reloadKeystore(newManager: KeystoreManager): void {
|
|
295
311
|
const newAdapter = NodeKeystoreAdapter.fromKeyStoreManager(newManager);
|
|
296
312
|
this.keyStore = new HAKeyStore(newAdapter, this.slashingProtectionSigner);
|
|
297
|
-
this.validationService = new ValidationService(
|
|
313
|
+
this.validationService = new ValidationService(
|
|
314
|
+
this.keyStore,
|
|
315
|
+
this.getSignatureContext(),
|
|
316
|
+
this.log.createChild('validation-service'),
|
|
317
|
+
);
|
|
298
318
|
}
|
|
299
319
|
|
|
300
320
|
public async start() {
|
|
@@ -871,7 +891,9 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
871
891
|
attestation => {
|
|
872
892
|
if (!attestation.archive.equals(proposal.archive)) {
|
|
873
893
|
this.log.warn(
|
|
874
|
-
`Received attestation for slot ${slot} with mismatched archive from ${attestation
|
|
894
|
+
`Received attestation for slot ${slot} with mismatched archive from ${attestation
|
|
895
|
+
.getSender()
|
|
896
|
+
?.toString()}`,
|
|
875
897
|
{ attestationArchive: attestation.archive.toString(), proposalArchive: proposal.archive.toString() },
|
|
876
898
|
);
|
|
877
899
|
return false;
|