@aztec/validator-client 3.0.0-nightly.20251128 → 3.0.0-nightly.20251202
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/block_proposal_handler.d.ts +1 -1
- package/dest/block_proposal_handler.d.ts.map +1 -1
- package/dest/block_proposal_handler.js +9 -8
- package/dest/duties/validation_service.d.ts +3 -3
- package/dest/duties/validation_service.d.ts.map +1 -1
- package/dest/duties/validation_service.js +6 -7
- package/dest/validator.d.ts +3 -3
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +7 -7
- package/package.json +10 -10
- package/src/block_proposal_handler.ts +10 -14
- package/src/duties/validation_service.ts +5 -8
- package/src/validator.ts +10 -15
|
@@ -49,4 +49,4 @@ export declare class BlockProposalHandler {
|
|
|
49
49
|
reexecuteTransactions(proposal: BlockProposal, blockNumber: number, txs: Tx[], l1ToL2Messages: Fr[]): Promise<ReexecuteTransactionsResult>;
|
|
50
50
|
}
|
|
51
51
|
export {};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfaGFuZGxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2NrX3Byb3Bvc2FsX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxFLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBZSxLQUFLLFFBQVEsRUFBbUIsS0FBSyxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU94RixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFFaEcsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckQsTUFBTSxNQUFNLG9DQUFvQyxHQUM1QyxrQkFBa0IsR0FDbEIsd0JBQXdCLEdBQ3hCLHlCQUF5QixHQUN6QixrQkFBa0IsR0FDbEIsNkJBQTZCLEdBQzdCLG1CQUFtQixHQUNuQixnQkFBZ0IsR0FDaEIsWUFBWSxHQUNaLFNBQVMsR0FDVCxlQUFlLENBQUM7QUFFcEIsS0FBSywyQkFBMkIsR0FBRztJQUNqQyxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ2YsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUMxQixhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3ZCLENBQUM7QUFFRixNQUFNLE1BQU0sb0NBQW9DLEdBQUc7SUFDakQsT0FBTyxFQUFFLElBQUksQ0FBQztJQUNkLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDcEIsaUJBQWlCLENBQUMsRUFBRSwyQkFBMkIsQ0FBQztDQUNqRCxDQUFDO0FBRUYsTUFBTSxNQUFNLG9DQUFvQyxHQUFHO0lBQ2pELE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDZixNQUFNLEVBQUUsb0NBQW9DLENBQUM7SUFDN0MsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGlCQUFpQixDQUFDLEVBQUUsMkJBQTJCLENBQUM7Q0FDakQsQ0FBQztBQUVGLE1BQU0sTUFBTSw2QkFBNkIsR0FBRyxvQ0FBb0MsR0FBRyxvQ0FBb0MsQ0FBQztBQUV4SCxxQkFBYSxvQkFBb0I7SUFJN0IsT0FBTyxDQUFDLFlBQVk7SUFDcEIsT0FBTyxDQUFDLFdBQVc7SUFDbkIsT0FBTyxDQUFDLG1CQUFtQjtJQUMzQixPQUFPLENBQUMsVUFBVTtJQUNsQixPQUFPLENBQUMsc0JBQXNCO0lBQzlCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNoQixPQUFPLENBQUMsWUFBWTtJQUVwQixPQUFPLENBQUMsR0FBRztJQVpiLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFL0IsWUFDVSxZQUFZLEVBQUUscUJBQXFCLEVBQ25DLFdBQVcsRUFBRSxhQUFhLEVBQzFCLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxVQUFVLEVBQUUsVUFBVSxFQUN0QixzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxPQUFPLENBQUMsOEJBQWtCLEVBQzFCLFlBQVksR0FBRSxZQUFpQyxFQUN2RCxTQUFTLEdBQUUsZUFBc0MsRUFDekMsR0FBRyx5Q0FBbUQsRUFNL0Q7SUFFRCxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLG9CQUFvQixDQXlCM0Q7SUFFSyxtQkFBbUIsQ0FDdkIsUUFBUSxFQUFFLGFBQWEsRUFDdkIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZUFBZSxFQUFFLE9BQU8sR0FDdkIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBNkZ4QztZQUVhLGNBQWM7SUFxQzVCLE9BQU8sQ0FBQyxzQkFBc0I7SUFNOUIsT0FBTyxDQUFDLHlCQUF5QjtJQVkzQixxQkFBcUIsQ0FDekIsUUFBUSxFQUFFLGFBQWEsRUFDdkIsV0FBVyxFQUFFLE1BQU0sRUFDbkIsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUNULGNBQWMsRUFBRSxFQUFFLEVBQUUsR0FDbkIsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBd0V0QztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,EAAE,KAAK,mBAAmB,EAAmC,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAe,KAAK,QAAQ,EAAmB,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAOxF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAsB,MAAM,yBAAyB,CAAC;AAEhG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,oCAAoC,GAC5C,kBAAkB,GAClB,wBAAwB,GACxB,yBAAyB,GACzB,kBAAkB,GAClB,6BAA6B,GAC7B,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,GACZ,SAAS,GACT,eAAe,CAAC;AAEpB,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,oCAAoC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,oCAAoC,GAAG,oCAAoC,CAAC;AAExH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,GAAG;IAZb,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACU,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,aAAa,EAC1B,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,8BAAkB,EAC1B,YAAY,GAAE,YAAiC,EACvD,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAmD,EAM/D;IAED,sBAAsB,CAAC,SAAS,EAAE,GAAG,GAAG,oBAAoB,CAyB3D;IAEK,mBAAmB,CACvB,QAAQ,EAAE,aAAa,EACvB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,6BAA6B,CAAC,CA6FxC;YAEa,cAAc;IAqC5B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,yBAAyB;IAY3B,qBAAqB,CACzB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,EAAE,EAAE,EACT,cAAc,EAAE,EAAE,EAAE,GACnB,OAAO,CAAC,2BAA2B,CAAC,CAwEtC;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
3
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -41,14 +42,14 @@ export class BlockProposalHandler {
|
|
|
41
42
|
try {
|
|
42
43
|
const result = await this.handleBlockProposal(proposal, proposalSender, true);
|
|
43
44
|
if (result.isValid) {
|
|
44
|
-
this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber
|
|
45
|
+
this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber}`, {
|
|
45
46
|
blockNumber: result.blockNumber,
|
|
46
47
|
reexecutionTimeMs: result.reexecutionResult?.reexecutionTimeMs,
|
|
47
48
|
totalManaUsed: result.reexecutionResult?.totalManaUsed,
|
|
48
49
|
numTxs: result.reexecutionResult?.block?.body?.txEffects?.length ?? 0
|
|
49
50
|
});
|
|
50
51
|
} else {
|
|
51
|
-
this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber
|
|
52
|
+
this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber}`, {
|
|
52
53
|
blockNumber: result.blockNumber,
|
|
53
54
|
reason: result.reason
|
|
54
55
|
});
|
|
@@ -62,7 +63,7 @@ export class BlockProposalHandler {
|
|
|
62
63
|
return this;
|
|
63
64
|
}
|
|
64
65
|
async handleBlockProposal(proposal, proposalSender, shouldReexecute) {
|
|
65
|
-
const slotNumber = proposal.slotNumber
|
|
66
|
+
const slotNumber = proposal.slotNumber;
|
|
66
67
|
const proposer = proposal.getSender();
|
|
67
68
|
const config = this.blockBuilder.getConfig();
|
|
68
69
|
// Reject proposals with invalid signatures
|
|
@@ -184,7 +185,7 @@ export class BlockProposalHandler {
|
|
|
184
185
|
}
|
|
185
186
|
async getParentBlock(proposal) {
|
|
186
187
|
const parentArchive = proposal.payload.header.lastArchiveRoot;
|
|
187
|
-
const slot = proposal.slotNumber
|
|
188
|
+
const slot = proposal.slotNumber;
|
|
188
189
|
const config = this.blockBuilder.getConfig();
|
|
189
190
|
const { genesisArchiveRoot } = await this.blockSource.getGenesisValues();
|
|
190
191
|
if (parentArchive.equals(genesisArchiveRoot)) {
|
|
@@ -209,7 +210,7 @@ export class BlockProposalHandler {
|
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
212
|
getReexecutionDeadline(slot, config) {
|
|
212
|
-
const nextSlotTimestampSeconds = Number(getTimestampForSlot(slot +
|
|
213
|
+
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(slot + 1), config));
|
|
213
214
|
const msNeededForPropagationAndPublishing = this.config.validatorReexecuteDeadlineMs;
|
|
214
215
|
return new Date(nextSlotTimestampSeconds * 1000 - msNeededForPropagationAndPublishing);
|
|
215
216
|
}
|
|
@@ -248,10 +249,10 @@ export class BlockProposalHandler {
|
|
|
248
249
|
version: new Fr(config.rollupVersion)
|
|
249
250
|
});
|
|
250
251
|
const { block, failedTxs } = await this.blockBuilder.buildBlock(txs, l1ToL2Messages, globalVariables, {
|
|
251
|
-
deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber
|
|
252
|
+
deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber, config)
|
|
252
253
|
});
|
|
253
254
|
const numFailedTxs = failedTxs.length;
|
|
254
|
-
const slot = proposal.slotNumber
|
|
255
|
+
const slot = proposal.slotNumber;
|
|
255
256
|
this.log.verbose(`Transaction re-execution complete for slot ${slot}`, {
|
|
256
257
|
numFailedTxs,
|
|
257
258
|
numProposalTxs: txHashes.length,
|
|
@@ -274,7 +275,7 @@ export class BlockProposalHandler {
|
|
|
274
275
|
actual: proposal.payload.toInspect()
|
|
275
276
|
});
|
|
276
277
|
this.metrics?.recordFailedReexecution(proposal);
|
|
277
|
-
throw new ReExStateMismatchError(proposal.archive, block.archive.root
|
|
278
|
+
throw new ReExStateMismatchError(proposal.archive, block.archive.root);
|
|
278
279
|
}
|
|
279
280
|
const reexecutionTimeMs = timer.ms();
|
|
280
281
|
const totalManaUsed = block.header.totalManaUsed.toNumber() / 1e6;
|
|
@@ -4,7 +4,7 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
4
4
|
import type { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
5
5
|
import { BlockAttestation, BlockProposal, type BlockProposalOptions } from '@aztec/stdlib/p2p';
|
|
6
6
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
7
|
-
import {
|
|
7
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
8
8
|
import type { ValidatorKeyStore } from '../key_store/interface.js';
|
|
9
9
|
export declare class ValidationService {
|
|
10
10
|
private keyStore;
|
|
@@ -20,7 +20,7 @@ export declare class ValidationService {
|
|
|
20
20
|
*
|
|
21
21
|
* @returns A block proposal signing the above information (not the current implementation!!!)
|
|
22
22
|
*/
|
|
23
|
-
createBlockProposal(header: CheckpointHeader, archive: Fr,
|
|
23
|
+
createBlockProposal(header: CheckpointHeader, archive: Fr, txs: Tx[], proposerAttesterAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal>;
|
|
24
24
|
/**
|
|
25
25
|
* Attest with selection of validators to the given block proposal, constructed by the current sequencer
|
|
26
26
|
*
|
|
@@ -34,4 +34,4 @@ export declare class ValidationService {
|
|
|
34
34
|
attestToProposal(proposal: BlockProposal, attestors: EthAddress[]): Promise<BlockAttestation[]>;
|
|
35
35
|
signAttestationsAndSigners(attestationsAndSigners: CommitteeAttestationsAndSigners, proposer: EthAddress): Promise<Signature>;
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbl9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHV0aWVzL3ZhbGlkYXRpb25fc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUMsT0FBTyxLQUFLLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixLQUFLLG9CQUFvQixFQUcxQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxxQkFBYSxpQkFBaUI7SUFFMUIsT0FBTyxDQUFDLFFBQVE7SUFDaEIsT0FBTyxDQUFDLEdBQUc7SUFGYixZQUNVLFFBQVEsRUFBRSxpQkFBaUIsRUFDM0IsR0FBRyx5Q0FBK0MsRUFDeEQ7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDRyxtQkFBbUIsQ0FDdkIsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixPQUFPLEVBQUUsRUFBRSxFQUNYLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFDVCx1QkFBdUIsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEdBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0F3QnhCO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0csZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FRcEc7SUFFSywwQkFBMEIsQ0FDOUIsc0JBQXNCLEVBQUUsK0JBQStCLEVBQ3ZELFFBQVEsRUFBRSxVQUFVLEdBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FLcEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EAG1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,GAAG;IAFb,YACU,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,yCAA+C,EACxD;IAEJ;;;;;;;;;OASG;IACG,mBAAmB,CACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,EAAE,EACX,GAAG,EAAE,EAAE,EAAE,EACT,uBAAuB,EAAE,UAAU,GAAG,SAAS,EAC/C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAwBxB;IAED;;;;;;;;;OASG;IACG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQpG;IAEK,0BAA0B,CAC9B,sBAAsB,EAAE,+BAA+B,EACvD,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,SAAS,CAAC,CAKpB;CACF"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
2
|
import { keccak256 } from '@aztec/foundation/crypto';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import { unfreeze } from '@aztec/foundation/types';
|
|
5
5
|
import { BlockAttestation, BlockProposal, ConsensusPayload, SignatureDomainSeparator } from '@aztec/stdlib/p2p';
|
|
6
|
-
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
7
6
|
export class ValidationService {
|
|
8
7
|
keyStore;
|
|
9
8
|
log;
|
|
@@ -20,7 +19,7 @@ export class ValidationService {
|
|
|
20
19
|
* @param options - Block proposal options (including broadcastInvalidBlockProposal for testing)
|
|
21
20
|
*
|
|
22
21
|
* @returns A block proposal signing the above information (not the current implementation!!!)
|
|
23
|
-
*/ async createBlockProposal(header, archive,
|
|
22
|
+
*/ async createBlockProposal(header, archive, txs, proposerAttesterAddress, options) {
|
|
24
23
|
let payloadSigner;
|
|
25
24
|
if (proposerAttesterAddress !== undefined) {
|
|
26
25
|
payloadSigner = (payload)=>this.keyStore.signMessageWithAddress(proposerAttesterAddress, payload);
|
|
@@ -31,12 +30,12 @@ export class ValidationService {
|
|
|
31
30
|
}
|
|
32
31
|
// TODO: check if this is calculated earlier / can not be recomputed
|
|
33
32
|
const txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
|
|
34
|
-
// For testing:
|
|
33
|
+
// For testing: change the new archive to trigger state_mismatch validation failure
|
|
35
34
|
if (options.broadcastInvalidBlockProposal) {
|
|
36
|
-
|
|
37
|
-
this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber
|
|
35
|
+
archive = Fr.random();
|
|
36
|
+
this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber}`);
|
|
38
37
|
}
|
|
39
|
-
return BlockProposal.createProposalFromSigner(new ConsensusPayload(header, archive
|
|
38
|
+
return BlockProposal.createProposalFromSigner(new ConsensusPayload(header, archive), txHashes, options.publishFullTxs ? txs : undefined, payloadSigner);
|
|
40
39
|
}
|
|
41
40
|
/**
|
|
42
41
|
* Attest with selection of validators to the given block proposal, constructed by the current sequencer
|
package/dest/validator.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { IFullNodeBlockBuilder, Validator, ValidatorClientFullConfig } from
|
|
|
13
13
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
14
14
|
import type { BlockAttestation, BlockProposal, BlockProposalOptions } from '@aztec/stdlib/p2p';
|
|
15
15
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
16
|
-
import type {
|
|
16
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
17
17
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
18
18
|
import type { TypedDataDefinition } from 'viem';
|
|
19
19
|
import { BlockProposalHandler } from './block_proposal_handler.js';
|
|
@@ -56,7 +56,7 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
56
56
|
registerHandlers(): Promise<void>;
|
|
57
57
|
attestToProposal(proposal: BlockProposal, proposalSender: PeerId): Promise<BlockAttestation[] | undefined>;
|
|
58
58
|
private slashInvalidBlock;
|
|
59
|
-
createBlockProposal(blockNumber: number, header: CheckpointHeader, archive: Fr,
|
|
59
|
+
createBlockProposal(blockNumber: number, header: CheckpointHeader, archive: Fr, txs: Tx[], proposerAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal | undefined>;
|
|
60
60
|
broadcastBlockProposal(proposal: BlockProposal): Promise<void>;
|
|
61
61
|
signAttestationsAndSigners(attestationsAndSigners: CommitteeAttestationsAndSigners, proposer: EthAddress): Promise<Signature>;
|
|
62
62
|
collectOwnAttestations(proposal: BlockProposal): Promise<BlockAttestation[]>;
|
|
@@ -65,4 +65,4 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
65
65
|
private handleAuthRequest;
|
|
66
66
|
}
|
|
67
67
|
export {};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFELE9BQU8sRUFBb0MsS0FBSyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9GLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFF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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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,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,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/dest/validator.js
CHANGED
|
@@ -161,7 +161,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
async attestToProposal(proposal, proposalSender) {
|
|
164
|
-
const slotNumber = proposal.slotNumber
|
|
164
|
+
const slotNumber = proposal.slotNumber;
|
|
165
165
|
const proposer = proposal.getSender();
|
|
166
166
|
// Reject proposals with invalid signatures
|
|
167
167
|
if (!proposer) {
|
|
@@ -266,16 +266,16 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
266
266
|
validator: proposer,
|
|
267
267
|
amount: this.config.slashBroadcastedInvalidBlockPenalty,
|
|
268
268
|
offenseType: OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL,
|
|
269
|
-
epochOrSlot: proposal.slotNumber
|
|
269
|
+
epochOrSlot: BigInt(proposal.slotNumber)
|
|
270
270
|
}
|
|
271
271
|
]);
|
|
272
272
|
}
|
|
273
|
-
async createBlockProposal(blockNumber, header, archive,
|
|
274
|
-
if (this.previousProposal?.slotNumber
|
|
273
|
+
async createBlockProposal(blockNumber, header, archive, txs, proposerAddress, options) {
|
|
274
|
+
if (this.previousProposal?.slotNumber === header.slotNumber) {
|
|
275
275
|
this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
|
|
276
276
|
return Promise.resolve(undefined);
|
|
277
277
|
}
|
|
278
|
-
const newProposal = await this.validationService.createBlockProposal(header, archive,
|
|
278
|
+
const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
|
|
279
279
|
...options,
|
|
280
280
|
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal
|
|
281
281
|
});
|
|
@@ -289,7 +289,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
289
289
|
return await this.validationService.signAttestationsAndSigners(attestationsAndSigners, proposer);
|
|
290
290
|
}
|
|
291
291
|
async collectOwnAttestations(proposal) {
|
|
292
|
-
const slot = proposal.payload.header.slotNumber
|
|
292
|
+
const slot = proposal.payload.header.slotNumber;
|
|
293
293
|
const inCommittee = await this.epochCache.filterInCommittee(slot, this.getValidatorAddresses());
|
|
294
294
|
this.log.debug(`Collecting ${inCommittee.length} self-attestations for slot ${slot}`, {
|
|
295
295
|
inCommittee
|
|
@@ -305,7 +305,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
305
305
|
}
|
|
306
306
|
async collectAttestations(proposal, required, deadline) {
|
|
307
307
|
// Wait and poll the p2pClient's attestation pool for this block until we have enough attestations
|
|
308
|
-
const slot = proposal.payload.header.slotNumber
|
|
308
|
+
const slot = proposal.payload.header.slotNumber;
|
|
309
309
|
this.log.debug(`Collecting ${required} attestations for slot ${slot} with deadline ${deadline.toISOString()}`);
|
|
310
310
|
if (+deadline < this.dateProvider.now()) {
|
|
311
311
|
this.log.error(`Deadline ${deadline.toISOString()} for collecting ${required} attestations for slot ${slot} is in the past`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/validator-client",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20251202",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -64,15 +64,15 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
68
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
69
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
70
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
71
|
-
"@aztec/node-keystore": "3.0.0-nightly.
|
|
72
|
-
"@aztec/p2p": "3.0.0-nightly.
|
|
73
|
-
"@aztec/slasher": "3.0.0-nightly.
|
|
74
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
75
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
67
|
+
"@aztec/constants": "3.0.0-nightly.20251202",
|
|
68
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20251202",
|
|
69
|
+
"@aztec/ethereum": "3.0.0-nightly.20251202",
|
|
70
|
+
"@aztec/foundation": "3.0.0-nightly.20251202",
|
|
71
|
+
"@aztec/node-keystore": "3.0.0-nightly.20251202",
|
|
72
|
+
"@aztec/p2p": "3.0.0-nightly.20251202",
|
|
73
|
+
"@aztec/slasher": "3.0.0-nightly.20251202",
|
|
74
|
+
"@aztec/stdlib": "3.0.0-nightly.20251202",
|
|
75
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251202",
|
|
76
76
|
"koa": "^2.16.1",
|
|
77
77
|
"koa-router": "^13.1.1",
|
|
78
78
|
"tslib": "^2.4.0",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
3
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -83,14 +84,14 @@ export class BlockProposalHandler {
|
|
|
83
84
|
try {
|
|
84
85
|
const result = await this.handleBlockProposal(proposal, proposalSender, true);
|
|
85
86
|
if (result.isValid) {
|
|
86
|
-
this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber
|
|
87
|
+
this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber}`, {
|
|
87
88
|
blockNumber: result.blockNumber,
|
|
88
89
|
reexecutionTimeMs: result.reexecutionResult?.reexecutionTimeMs,
|
|
89
90
|
totalManaUsed: result.reexecutionResult?.totalManaUsed,
|
|
90
91
|
numTxs: result.reexecutionResult?.block?.body?.txEffects?.length ?? 0,
|
|
91
92
|
});
|
|
92
93
|
} else {
|
|
93
|
-
this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber
|
|
94
|
+
this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber}`, {
|
|
94
95
|
blockNumber: result.blockNumber,
|
|
95
96
|
reason: result.reason,
|
|
96
97
|
});
|
|
@@ -110,7 +111,7 @@ export class BlockProposalHandler {
|
|
|
110
111
|
proposalSender: PeerId,
|
|
111
112
|
shouldReexecute: boolean,
|
|
112
113
|
): Promise<BlockProposalValidationResult> {
|
|
113
|
-
const slotNumber = proposal.slotNumber
|
|
114
|
+
const slotNumber = proposal.slotNumber;
|
|
114
115
|
const proposer = proposal.getSender();
|
|
115
116
|
const config = this.blockBuilder.getConfig();
|
|
116
117
|
|
|
@@ -206,7 +207,7 @@ export class BlockProposalHandler {
|
|
|
206
207
|
|
|
207
208
|
private async getParentBlock(proposal: BlockProposal): Promise<'genesis' | BlockHeader | undefined> {
|
|
208
209
|
const parentArchive = proposal.payload.header.lastArchiveRoot;
|
|
209
|
-
const slot = proposal.slotNumber
|
|
210
|
+
const slot = proposal.slotNumber;
|
|
210
211
|
const config = this.blockBuilder.getConfig();
|
|
211
212
|
const { genesisArchiveRoot } = await this.blockSource.getGenesisValues();
|
|
212
213
|
|
|
@@ -241,8 +242,8 @@ export class BlockProposalHandler {
|
|
|
241
242
|
}
|
|
242
243
|
}
|
|
243
244
|
|
|
244
|
-
private getReexecutionDeadline(slot:
|
|
245
|
-
const nextSlotTimestampSeconds = Number(getTimestampForSlot(slot +
|
|
245
|
+
private getReexecutionDeadline(slot: SlotNumber, config: { l1GenesisTime: bigint; slotDuration: number }): Date {
|
|
246
|
+
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(slot + 1), config));
|
|
246
247
|
const msNeededForPropagationAndPublishing = this.config.validatorReexecuteDeadlineMs;
|
|
247
248
|
return new Date(nextSlotTimestampSeconds * 1000 - msNeededForPropagationAndPublishing);
|
|
248
249
|
}
|
|
@@ -292,11 +293,11 @@ export class BlockProposalHandler {
|
|
|
292
293
|
});
|
|
293
294
|
|
|
294
295
|
const { block, failedTxs } = await this.blockBuilder.buildBlock(txs, l1ToL2Messages, globalVariables, {
|
|
295
|
-
deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber
|
|
296
|
+
deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber, config),
|
|
296
297
|
});
|
|
297
298
|
|
|
298
299
|
const numFailedTxs = failedTxs.length;
|
|
299
|
-
const slot = proposal.slotNumber
|
|
300
|
+
const slot = proposal.slotNumber;
|
|
300
301
|
this.log.verbose(`Transaction re-execution complete for slot ${slot}`, {
|
|
301
302
|
numFailedTxs,
|
|
302
303
|
numProposalTxs: txHashes.length,
|
|
@@ -322,12 +323,7 @@ export class BlockProposalHandler {
|
|
|
322
323
|
actual: proposal.payload.toInspect(),
|
|
323
324
|
});
|
|
324
325
|
this.metrics?.recordFailedReexecution(proposal);
|
|
325
|
-
throw new ReExStateMismatchError(
|
|
326
|
-
proposal.archive,
|
|
327
|
-
block.archive.root,
|
|
328
|
-
proposal.payload.stateReference,
|
|
329
|
-
block.header.state,
|
|
330
|
-
);
|
|
326
|
+
throw new ReExStateMismatchError(proposal.archive, block.archive.root);
|
|
331
327
|
}
|
|
332
328
|
|
|
333
329
|
const reexecutionTimeMs = timer.ms();
|
|
@@ -4,7 +4,6 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
-
import { unfreeze } from '@aztec/foundation/types';
|
|
8
7
|
import type { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
9
8
|
import {
|
|
10
9
|
BlockAttestation,
|
|
@@ -14,8 +13,7 @@ import {
|
|
|
14
13
|
SignatureDomainSeparator,
|
|
15
14
|
} from '@aztec/stdlib/p2p';
|
|
16
15
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
17
|
-
import {
|
|
18
|
-
import { StateReference, type Tx } from '@aztec/stdlib/tx';
|
|
16
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
19
17
|
|
|
20
18
|
import type { ValidatorKeyStore } from '../key_store/interface.js';
|
|
21
19
|
|
|
@@ -38,7 +36,6 @@ export class ValidationService {
|
|
|
38
36
|
async createBlockProposal(
|
|
39
37
|
header: CheckpointHeader,
|
|
40
38
|
archive: Fr,
|
|
41
|
-
stateReference: StateReference,
|
|
42
39
|
txs: Tx[],
|
|
43
40
|
proposerAttesterAddress: EthAddress | undefined,
|
|
44
41
|
options: BlockProposalOptions,
|
|
@@ -54,14 +51,14 @@ export class ValidationService {
|
|
|
54
51
|
// TODO: check if this is calculated earlier / can not be recomputed
|
|
55
52
|
const txHashes = await Promise.all(txs.map(tx => tx.getTxHash()));
|
|
56
53
|
|
|
57
|
-
// For testing:
|
|
54
|
+
// For testing: change the new archive to trigger state_mismatch validation failure
|
|
58
55
|
if (options.broadcastInvalidBlockProposal) {
|
|
59
|
-
|
|
60
|
-
this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber
|
|
56
|
+
archive = Fr.random();
|
|
57
|
+
this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber}`);
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
return BlockProposal.createProposalFromSigner(
|
|
64
|
-
new ConsensusPayload(header, archive
|
|
61
|
+
new ConsensusPayload(header, archive),
|
|
65
62
|
txHashes,
|
|
66
63
|
options.publishFullTxs ? txs : undefined,
|
|
67
64
|
payloadSigner,
|
package/src/validator.ts
CHANGED
|
@@ -17,7 +17,7 @@ import type { IFullNodeBlockBuilder, Validator, ValidatorClientFullConfig } from
|
|
|
17
17
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
18
18
|
import type { BlockAttestation, BlockProposal, BlockProposalOptions } from '@aztec/stdlib/p2p';
|
|
19
19
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
20
|
-
import type {
|
|
20
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
21
21
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
22
22
|
import { type TelemetryClient, type Tracer, getTelemetryClient } from '@aztec/telemetry-client';
|
|
23
23
|
|
|
@@ -260,7 +260,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
async attestToProposal(proposal: BlockProposal, proposalSender: PeerId): Promise<BlockAttestation[] | undefined> {
|
|
263
|
-
const slotNumber = proposal.slotNumber
|
|
263
|
+
const slotNumber = proposal.slotNumber;
|
|
264
264
|
const proposer = proposal.getSender();
|
|
265
265
|
|
|
266
266
|
// Reject proposals with invalid signatures
|
|
@@ -395,7 +395,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
395
395
|
validator: proposer,
|
|
396
396
|
amount: this.config.slashBroadcastedInvalidBlockPenalty,
|
|
397
397
|
offenseType: OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL,
|
|
398
|
-
epochOrSlot: proposal.slotNumber
|
|
398
|
+
epochOrSlot: BigInt(proposal.slotNumber),
|
|
399
399
|
},
|
|
400
400
|
]);
|
|
401
401
|
}
|
|
@@ -404,24 +404,19 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
404
404
|
blockNumber: number,
|
|
405
405
|
header: CheckpointHeader,
|
|
406
406
|
archive: Fr,
|
|
407
|
-
stateReference: StateReference,
|
|
408
407
|
txs: Tx[],
|
|
409
408
|
proposerAddress: EthAddress | undefined,
|
|
410
409
|
options: BlockProposalOptions,
|
|
411
410
|
): Promise<BlockProposal | undefined> {
|
|
412
|
-
if (this.previousProposal?.slotNumber
|
|
411
|
+
if (this.previousProposal?.slotNumber === header.slotNumber) {
|
|
413
412
|
this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
|
|
414
413
|
return Promise.resolve(undefined);
|
|
415
414
|
}
|
|
416
415
|
|
|
417
|
-
const newProposal = await this.validationService.createBlockProposal(
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
txs,
|
|
422
|
-
proposerAddress,
|
|
423
|
-
{ ...options, broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal },
|
|
424
|
-
);
|
|
416
|
+
const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
|
|
417
|
+
...options,
|
|
418
|
+
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal,
|
|
419
|
+
});
|
|
425
420
|
this.previousProposal = newProposal;
|
|
426
421
|
return newProposal;
|
|
427
422
|
}
|
|
@@ -438,7 +433,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
438
433
|
}
|
|
439
434
|
|
|
440
435
|
async collectOwnAttestations(proposal: BlockProposal): Promise<BlockAttestation[]> {
|
|
441
|
-
const slot = proposal.payload.header.slotNumber
|
|
436
|
+
const slot = proposal.payload.header.slotNumber;
|
|
442
437
|
const inCommittee = await this.epochCache.filterInCommittee(slot, this.getValidatorAddresses());
|
|
443
438
|
this.log.debug(`Collecting ${inCommittee.length} self-attestations for slot ${slot}`, { inCommittee });
|
|
444
439
|
const attestations = await this.createBlockAttestationsFromProposal(proposal, inCommittee);
|
|
@@ -454,7 +449,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
454
449
|
|
|
455
450
|
async collectAttestations(proposal: BlockProposal, required: number, deadline: Date): Promise<BlockAttestation[]> {
|
|
456
451
|
// Wait and poll the p2pClient's attestation pool for this block until we have enough attestations
|
|
457
|
-
const slot = proposal.payload.header.slotNumber
|
|
452
|
+
const slot = proposal.payload.header.slotNumber;
|
|
458
453
|
this.log.debug(`Collecting ${required} attestations for slot ${slot} with deadline ${deadline.toISOString()}`);
|
|
459
454
|
|
|
460
455
|
if (+deadline < this.dateProvider.now()) {
|