@aztec/validator-client 0.0.1-commit.b655e406 → 0.0.1-commit.fce3e4f

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.
@@ -5,7 +5,7 @@ import { TxProvider } from '@aztec/p2p';
5
5
  import { BlockProposalValidator } from '@aztec/p2p/msg_validators';
6
6
  import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
7
7
  import type { IFullNodeBlockBuilder, ValidatorClientFullConfig } from '@aztec/stdlib/interfaces/server';
8
- import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
8
+ import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
9
9
  import { type BlockProposal } from '@aztec/stdlib/p2p';
10
10
  import { type FailedTx, type Tx } from '@aztec/stdlib/tx';
11
11
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
@@ -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=block_proposal_handler.d.ts.map
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":"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"}
1
+ {"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
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';
5
6
  import { retryUntil } from '@aztec/foundation/retry';
6
7
  import { DateProvider, Timer } from '@aztec/foundation/timer';
7
- import { computeInHashFromL1ToL2Messages } from '@aztec/prover-client/helpers';
8
8
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
9
+ import { computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
9
10
  import { ConsensusPayload } from '@aztec/stdlib/p2p';
10
11
  import { GlobalVariables } from '@aztec/stdlib/tx';
11
12
  import { ReExFailedTxsError, ReExStateMismatchError, ReExTimeoutError, TransactionsNotAvailableError } from '@aztec/stdlib/validators';
@@ -31,6 +32,9 @@ export class BlockProposalHandler {
31
32
  this.metrics = metrics;
32
33
  this.dateProvider = dateProvider;
33
34
  this.log = log;
35
+ if (config.fishermanMode) {
36
+ this.log = this.log.createChild('[FISHERMAN]');
37
+ }
34
38
  this.tracer = telemetry.getTracer('BlockProposalHandler');
35
39
  }
36
40
  registerForReexecution(p2pClient) {
@@ -38,14 +42,14 @@ export class BlockProposalHandler {
38
42
  try {
39
43
  const result = await this.handleBlockProposal(proposal, proposalSender, true);
40
44
  if (result.isValid) {
41
- this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber.toBigInt()}`, {
45
+ this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber}`, {
42
46
  blockNumber: result.blockNumber,
43
47
  reexecutionTimeMs: result.reexecutionResult?.reexecutionTimeMs,
44
48
  totalManaUsed: result.reexecutionResult?.totalManaUsed,
45
49
  numTxs: result.reexecutionResult?.block?.body?.txEffects?.length ?? 0
46
50
  });
47
51
  } else {
48
- this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber.toBigInt()}`, {
52
+ this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber}`, {
49
53
  blockNumber: result.blockNumber,
50
54
  reason: result.reason
51
55
  });
@@ -59,7 +63,7 @@ export class BlockProposalHandler {
59
63
  return this;
60
64
  }
61
65
  async handleBlockProposal(proposal, proposalSender, shouldReexecute) {
62
- const slotNumber = proposal.slotNumber.toBigInt();
66
+ const slotNumber = proposal.slotNumber;
63
67
  const proposer = proposal.getSender();
64
68
  const config = this.blockBuilder.getConfig();
65
69
  // Reject proposals with invalid signatures
@@ -129,7 +133,7 @@ export class BlockProposalHandler {
129
133
  });
130
134
  // Check that I have the same set of l1ToL2Messages as the proposal
131
135
  const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(blockNumber);
132
- const computedInHash = await computeInHashFromL1ToL2Messages(l1ToL2Messages);
136
+ const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages);
133
137
  const proposalInHash = proposal.payload.header.contentCommitment.inHash;
134
138
  if (!computedInHash.equals(proposalInHash)) {
135
139
  this.log.warn(`L1 to L2 messages in hash mismatch, skipping processing`, {
@@ -181,7 +185,7 @@ export class BlockProposalHandler {
181
185
  }
182
186
  async getParentBlock(proposal) {
183
187
  const parentArchive = proposal.payload.header.lastArchiveRoot;
184
- const slot = proposal.slotNumber.toBigInt();
188
+ const slot = proposal.slotNumber;
185
189
  const config = this.blockBuilder.getConfig();
186
190
  const { genesisArchiveRoot } = await this.blockSource.getGenesisValues();
187
191
  if (parentArchive.equals(genesisArchiveRoot)) {
@@ -206,7 +210,7 @@ export class BlockProposalHandler {
206
210
  }
207
211
  }
208
212
  getReexecutionDeadline(slot, config) {
209
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(slot + 1n, config));
213
+ const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(slot + 1), config));
210
214
  const msNeededForPropagationAndPublishing = this.config.validatorReexecuteDeadlineMs;
211
215
  return new Date(nextSlotTimestampSeconds * 1000 - msNeededForPropagationAndPublishing);
212
216
  }
@@ -245,10 +249,10 @@ export class BlockProposalHandler {
245
249
  version: new Fr(config.rollupVersion)
246
250
  });
247
251
  const { block, failedTxs } = await this.blockBuilder.buildBlock(txs, l1ToL2Messages, globalVariables, {
248
- deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber.toBigInt(), config)
252
+ deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber, config)
249
253
  });
250
254
  const numFailedTxs = failedTxs.length;
251
- const slot = proposal.slotNumber.toBigInt();
255
+ const slot = proposal.slotNumber;
252
256
  this.log.verbose(`Transaction re-execution complete for slot ${slot}`, {
253
257
  numFailedTxs,
254
258
  numProposalTxs: txHashes.length,
@@ -271,7 +275,7 @@ export class BlockProposalHandler {
271
275
  actual: proposal.payload.toInspect()
272
276
  });
273
277
  this.metrics?.recordFailedReexecution(proposal);
274
- throw new ReExStateMismatchError(proposal.archive, block.archive.root, proposal.payload.stateReference, block.header.state);
278
+ throw new ReExStateMismatchError(proposal.archive, block.archive.root);
275
279
  }
276
280
  const reexecutionTimeMs = timer.ms();
277
281
  const totalManaUsed = block.header.totalManaUsed.toNumber() / 1e6;
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=config.d.ts.map
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUt4QixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0UsWUFBWSxFQUFFLHFCQUFxQixFQUFFLENBQUM7QUFFdEMsZUFBTyxNQUFNLDZCQUE2QixFQUFFLGtCQUFrQixDQUFDLHFCQUFxQixDQTREbkYsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLElBQUkscUJBQXFCLENBRXhEIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CAsDnF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CA4DnF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
package/dest/config.js CHANGED
@@ -44,6 +44,11 @@ export const validatorClientConfigMappings = {
44
44
  env: 'ALWAYS_REEXECUTE_BLOCK_PROPOSALS',
45
45
  description: 'Whether to always reexecute block proposals, even for non-validator nodes (useful for monitoring network status).',
46
46
  ...booleanConfigHelper(false)
47
+ },
48
+ fishermanMode: {
49
+ env: 'FISHERMAN_MODE',
50
+ description: 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
51
+ ...booleanConfigHelper(false)
47
52
  }
48
53
  };
49
54
  /**
@@ -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 { StateReference, type Tx } from '@aztec/stdlib/tx';
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, stateReference: StateReference, txs: Tx[], proposerAttesterAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal>;
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=validation_service.d.ts.map
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;AAG9C,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;AAE7D,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,GAAG;gBADH,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,yCAA+C;IAG5D;;;;;;;;;OASG;IACG,mBAAmB,CACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,EAAE,EACX,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,EAAE,EAAE,EACT,uBAAuB,EAAE,UAAU,GAAG,SAAS,EAC/C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC;IA0BzB;;;;;;;;;OASG;IACG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAU/F,0BAA0B,CAC9B,sBAAsB,EAAE,+BAA+B,EACvD,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,SAAS,CAAC;CAMtB"}
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, stateReference, txs, proposerAttesterAddress, options) {
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: corrupt the state reference to trigger state_mismatch validation failure
33
+ // For testing: change the new archive to trigger state_mismatch validation failure
35
34
  if (options.broadcastInvalidBlockProposal) {
36
- unfreeze(stateReference.partial).noteHashTree = AppendOnlyTreeSnapshot.random();
37
- this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber.toBigInt()}`);
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, stateReference), txHashes, options.publishFullTxs ? txs : undefined, payloadSigner);
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/factory.d.ts CHANGED
@@ -27,4 +27,4 @@ export declare function createValidatorClient(config: ValidatorClientFullConfig,
27
27
  epochCache: EpochCache;
28
28
  keyStoreManager: KeystoreManager | undefined;
29
29
  }): ValidatorClient | undefined;
30
- //# sourceMappingURL=factory.d.ts.map
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUEwQixLQUFLLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELHdCQUFnQiwwQkFBMEIsQ0FDeEMsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxJQUFJLEVBQUU7SUFDSixZQUFZLEVBQUUscUJBQXFCLENBQUM7SUFDcEMsV0FBVyxFQUFFLGFBQWEsQ0FBQztJQUMzQixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixTQUFTLEVBQUUsZUFBZSxDQUFDO0NBQzVCLHdCQWlCRjtBQUVELHdCQUFnQixxQkFBcUIsQ0FDbkMsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxJQUFJLEVBQUU7SUFDSixZQUFZLEVBQUUscUJBQXFCLENBQUM7SUFDcEMsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQzNCLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO0lBQ3pDLFNBQVMsRUFBRSxlQUFlLENBQUM7SUFDM0IsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLGVBQWUsRUFBRSxlQUFlLEdBQUcsU0FBUyxDQUFDO0NBQzlDLCtCQW1CRiJ9
package/dest/index.d.ts CHANGED
@@ -3,4 +3,4 @@ export * from './config.js';
3
3
  export * from './factory.js';
4
4
  export * from './validator.js';
5
5
  export * from './key_store/index.js';
6
- //# sourceMappingURL=index.d.ts.map
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQyJ9
@@ -2,4 +2,4 @@ export * from './interface.js';
2
2
  export * from './local_key_store.js';
3
3
  export * from './node_keystore_adapter.js';
4
4
  export * from './web3signer_key_store.js';
5
- //# sourceMappingURL=index.d.ts.map
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlfc3RvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQyJ9
@@ -71,4 +71,4 @@ export interface ExtendedValidatorKeyStore extends ValidatorKeyStore {
71
71
  */
72
72
  getRemoteSignerConfig(attesterAddress: EthAddress): EthRemoteSignerConfig | undefined;
73
73
  }
74
- //# sourceMappingURL=interface.d.ts.map
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5X3N0b3JlL2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhEOzs7R0FHRztBQUNILE1BQU0sV0FBVyxpQkFBaUI7SUFDaEM7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7SUFFdEM7Ozs7T0FJRztJQUNILFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUU3QixhQUFhLENBQUMsU0FBUyxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRzs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNyRCxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3BGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxXQUFXLHlCQUEwQixTQUFRLGlCQUFpQjtJQUNsRTs7O09BR0c7SUFDSCxvQkFBb0IsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUVyQzs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLGVBQWUsRUFBRSxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBRTVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsZUFBZSxFQUFFLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUVqRTs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGVBQWUsRUFBRSxVQUFVLEdBQUcsWUFBWSxDQUFDO0lBRTNEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsVUFBVSxHQUFHLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztDQUN2RiJ9
@@ -55,4 +55,4 @@ export declare class LocalKeyStore implements ValidatorKeyStore {
55
55
  */
56
56
  signMessageWithAddress(address: EthAddress, message: Buffer32): Promise<Signature>;
57
57
  }
58
- //# sourceMappingURL=local_key_store.d.ts.map
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxfa2V5X3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5X3N0b3JlL2xvY2FsX2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakUsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWlCLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQ7Ozs7R0FJRztBQUNILHFCQUFhLGFBQWMsWUFBVyxpQkFBaUI7SUFDckQsT0FBTyxDQUFDLE9BQU8sQ0FBb0I7SUFDbkMsT0FBTyxDQUFDLGdCQUFnQixDQUFzQztJQUU5RCxZQUFZLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFHbEM7SUFFRDs7Ozs7T0FLRztJQUNJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FLM0M7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUVsQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsU0FBUyxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUd6RTtJQUVEOzs7Ozs7T0FNRztJQUNJLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FPdkc7SUFFRDs7Ozs7T0FLRztJQUNJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUUxRDtJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBTXhGO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"local_key_store.d.ts","sourceRoot":"","sources":["../../src/key_store/local_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,MAAM,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;GAIG;AACH,qBAAa,aAAc,YAAW,iBAAiB;IACrD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,gBAAgB,CAAsC;gBAElD,WAAW,EAAE,QAAQ,EAAE;IAKnC;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAO5C;;;;OAIG;IACI,YAAY,IAAI,UAAU,EAAE;IAInC;;;;OAIG;IACI,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK1E;;;;;;OAMG;IACI,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IASxG;;;;;OAKG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI3D;;;;;;OAMG;IACI,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;CAO1F"}
1
+ {"version":3,"file":"local_key_store.d.ts","sourceRoot":"","sources":["../../src/key_store/local_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,MAAM,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;GAIG;AACH,qBAAa,aAAc,YAAW,iBAAiB;IACrD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,YAAY,WAAW,EAAE,QAAQ,EAAE,EAGlC;IAED;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAK3C;IAED;;;;OAIG;IACI,YAAY,IAAI,UAAU,EAAE,CAElC;IAED;;;;OAIG;IACI,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAGzE;IAED;;;;;;OAMG;IACI,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAOvG;IAED;;;;;OAKG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE1D;IAED;;;;;;OAMG;IACI,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAMxF;CACF"}
@@ -135,4 +135,4 @@ export declare class NodeKeystoreAdapter implements ExtendedValidatorKeyStore {
135
135
  */
136
136
  getRemoteSignerConfig(attesterAddress: EthAddress): EthRemoteSignerConfig | undefined;
137
137
  }
138
- //# sourceMappingURL=node_keystore_adapter.d.ts.map
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9rZXlzdG9yZV9hZGFwdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5X3N0b3JlL25vZGVfa2V5c3RvcmVfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUczRCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdoRCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBYWhFLHFCQUFhLG1CQUFvQixZQUFXLHlCQUF5QjtJQUNuRSxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBa0I7SUFHbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQTZDO0lBRXhFLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFnRjtJQUU3RyxPQUFPLGVBRU47SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBR3JFO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxPQUFPLEdBQUcsbUJBQW1CLENBS3RFO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0F3QmpFO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsbUJBQW1CLENBZXpGO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxlQUFlLEdBQUcsbUJBQW1CLENBRXhFO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7SUFJbEI7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsZUFBZTtJQXFDdkI7O09BRUc7SUFDSCxPQUFPLENBQUUsZ0JBQWdCO0lBT3pCOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLDZCQUE2QjtJQWNyQzs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FNcEM7SUFFRDs7T0FFRztJQUNILFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FVM0I7SUFFRDs7OztPQUlHO0lBQ0csYUFBYSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FTeEU7SUFFRDs7OztPQUlHO0lBQ0csV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBU3pEO0lBRUQ7Ozs7Ozs7T0FPRztJQUNHLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FnQnRHO0lBRUQ7Ozs7Ozs7T0FPRztJQUNHLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBZXZGO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsSUFBSSxVQUFVLEVBQUUsQ0FFbkM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFVBQVUsR0FBRyxVQUFVLENBRzFEO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLGVBQWUsRUFBRSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBSS9EO0lBRUQsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLFVBQVUsQ0FXaEU7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGVBQWUsRUFBRSxVQUFVLEdBQUcsWUFBWSxDQUd6RDtJQUVEOzs7Ozs7T0FNRztJQUNILHFCQUFxQixDQUFDLGVBQWUsRUFBRSxVQUFVLEdBQUcscUJBQXFCLEdBQUcsU0FBUyxDQUdwRjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"node_keystore_adapter.d.ts","sourceRoot":"","sources":["../../src/key_store/node_keystore_adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAahE,qBAAa,mBAAoB,YAAW,yBAAyB;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAGlD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IAExE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgF;IAE7G,OAAO;IAIP;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,mBAAmB;IAKtE;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,OAAO,GAAG,mBAAmB;IAOvE;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,mBAAmB;IA0BlE;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB;IAiB1F,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB;IAIzE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,GAAG;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAE,gBAAgB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAQrC;;OAEG;IACH,YAAY,IAAI,UAAU,EAAE;IAY5B;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAWzE;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAW1D;;;;;;;OAOG;IACG,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAkBvG;;;;;;;OAOG;IACG,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAiBxF;;OAEG;IACH,oBAAoB,IAAI,UAAU,EAAE;IAIpC;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU;IAK3D;;;;OAIG;IACH,qBAAqB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,EAAE;IAMhE,uBAAuB,CAAC,gBAAgB,EAAE,UAAU,GAAG,UAAU;IAajE;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,UAAU,GAAG,YAAY;IAK1D;;;;;;OAMG;IACH,qBAAqB,CAAC,eAAe,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS;CAItF"}
1
+ {"version":3,"file":"node_keystore_adapter.d.ts","sourceRoot":"","sources":["../../src/key_store/node_keystore_adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAahE,qBAAa,mBAAoB,YAAW,yBAAyB;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAGlD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IAExE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgF;IAE7G,OAAO,eAEN;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,mBAAmB,CAGrE;IAED;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,OAAO,GAAG,mBAAmB,CAKtE;IAED;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAwBjE;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAezF;IAED,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB,CAExE;IAED;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,GAAG;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAE,gBAAgB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAMpC;IAED;;OAEG;IACH,YAAY,IAAI,UAAU,EAAE,CAU3B;IAED;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CASxE;IAED;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CASzD;IAED;;;;;;;OAOG;IACG,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBtG;IAED;;;;;;;OAOG;IACG,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAevF;IAED;;OAEG;IACH,oBAAoB,IAAI,UAAU,EAAE,CAEnC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,CAG1D;IAED;;;;OAIG;IACH,qBAAqB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,EAAE,CAI/D;IAED,uBAAuB,CAAC,gBAAgB,EAAE,UAAU,GAAG,UAAU,CAWhE;IAED;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,UAAU,GAAG,YAAY,CAGzD;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,eAAe,EAAE,UAAU,GAAG,qBAAqB,GAAG,SAAS,CAGpF;CACF"}
@@ -55,13 +55,7 @@ export declare class Web3SignerKeyStore implements ValidatorKeyStore {
55
55
  * @throws Error if the address is not found in the keystore or signing fails
56
56
  */
57
57
  signMessageWithAddress(address: EthAddress, message: Buffer32): Promise<Signature>;
58
- /**
59
- * Make a JSON-RPC sign request to Web3Signer using eth_sign
60
- * @param address - The Ethereum address to sign with
61
- * @param data - The data to sign
62
- * @returns The signature
63
- */
64
58
  private makeJsonRpcSignRequest;
65
59
  private makeJsonRpcSignTypedDataRequest;
66
60
  }
67
- //# sourceMappingURL=web3signer_key_store.d.ts.map
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViM3NpZ25lcl9rZXlfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlfc3RvcmUvd2ViM3NpZ25lcl9rZXlfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhEOzs7OztHQUtHO0FBQ0gscUJBQWEsa0JBQW1CLFlBQVcsaUJBQWlCO0lBRXhELE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxPQUFPO0lBRmpCLFlBQ1UsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUN2QixPQUFPLEVBQUUsTUFBTSxFQUNyQjtJQUVKOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUszQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLElBQUksVUFBVSxFQUFFLENBRWxDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBRXpFO0lBRUQ7Ozs7OztPQU1HO0lBQ1Usd0JBQXdCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQU03RztJQUVEOzs7OztPQUtHO0lBQ0ksV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBRTFEO0lBRUQ7Ozs7OztPQU1HO0lBQ1Usc0JBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FLOUY7WUFRYSxzQkFBc0I7WUFpRHRCLCtCQUErQjtDQTZDOUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"web3signer_key_store.d.ts","sourceRoot":"","sources":["../../src/key_store/web3signer_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IAExD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;gBADP,SAAS,EAAE,UAAU,EAAE,EACvB,OAAO,EAAE,MAAM;IAGzB;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAO5C;;;;OAIG;IACI,YAAY,IAAI,UAAU,EAAE;IAInC;;;;OAIG;IACI,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI1E;;;;;;OAMG;IACU,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ9G;;;;;OAKG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI3D;;;;;;OAMG;IACU,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAO/F;;;;;OAKG;YACW,sBAAsB;YAiDtB,+BAA+B;CA6C9C"}
1
+ {"version":3,"file":"web3signer_key_store.d.ts","sourceRoot":"","sources":["../../src/key_store/web3signer_key_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IAExD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAFjB,YACU,SAAS,EAAE,UAAU,EAAE,EACvB,OAAO,EAAE,MAAM,EACrB;IAEJ;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAK3C;IAED;;;;OAIG;IACI,YAAY,IAAI,UAAU,EAAE,CAElC;IAED;;;;OAIG;IACI,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAEzE;IAED;;;;;;OAMG;IACU,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAM7G;IAED;;;;;OAKG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE1D;IAED;;;;;;OAMG;IACU,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAK9F;YAQa,sBAAsB;YAiDtB,+BAA+B;CA6C9C"}
package/dest/metrics.d.ts CHANGED
@@ -15,4 +15,4 @@ export declare class ValidatorMetrics {
15
15
  incFailedAttestationsBadProposal(num: number, reason: string, inCommittee: boolean): void;
16
16
  incFailedAttestationsNodeIssue(num: number, reason: string, inCommittee: boolean): void;
17
17
  }
18
- //# sourceMappingURL=metrics.d.ts.map
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsd0JBQXdCLENBQWdCO0lBQ2hELE9BQU8sQ0FBQywyQkFBMkIsQ0FBZ0I7SUFDbkQsT0FBTyxDQUFDLGtDQUFrQyxDQUFnQjtJQUMxRCxPQUFPLENBQUMsZ0NBQWdDLENBQWdCO0lBRXhELE9BQU8sQ0FBQyxRQUFRLENBQVk7SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBWTtJQUMxQixPQUFPLENBQUMsWUFBWSxDQUFZO0lBRWhDLFlBQVksZUFBZSxFQUFFLGVBQWUsRUErQzNDO0lBRU0sVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUk5RDtJQUVNLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxhQUFhLFFBTXJEO0lBRU0seUJBQXlCLENBQUMsR0FBRyxFQUFFLE1BQU0sUUFFM0M7SUFFTSxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sUUFLeEY7SUFFTSw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sUUFLdEY7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,2BAA2B,CAAgB;IACnD,OAAO,CAAC,kCAAkC,CAAgB;IAC1D,OAAO,CAAC,gCAAgC,CAAgB;IAExD,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAY;gBAEpB,eAAe,EAAE,eAAe;IAiDrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMxD,uBAAuB,CAAC,QAAQ,EAAE,aAAa;IAQ/C,yBAAyB,CAAC,GAAG,EAAE,MAAM;IAIrC,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAOlF,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;CAMxF"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,2BAA2B,CAAgB;IACnD,OAAO,CAAC,kCAAkC,CAAgB;IAC1D,OAAO,CAAC,gCAAgC,CAAgB;IAExD,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAY;IAEhC,YAAY,eAAe,EAAE,eAAe,EA+C3C;IAEM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAI9D;IAEM,uBAAuB,CAAC,QAAQ,EAAE,aAAa,QAMrD;IAEM,yBAAyB,CAAC,GAAG,EAAE,MAAM,QAE3C;IAEM,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,QAKxF;IAEM,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,QAKtF;CACF"}
@@ -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 { StateReference, Tx } from '@aztec/stdlib/tx';
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';
@@ -29,10 +29,10 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
29
29
  private blockProposalHandler;
30
30
  private config;
31
31
  private dateProvider;
32
- private log;
33
32
  readonly tracer: Tracer;
34
33
  private validationService;
35
34
  private metrics;
35
+ private log;
36
36
  private hasRegisteredHandlers;
37
37
  private previousProposal?;
38
38
  private lastEpochForCommitteeUpdateLoop;
@@ -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, stateReference: StateReference, txs: Tx[], proposerAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal | undefined>;
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=validator.d.ts.map
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFELE9BQU8sRUFBb0MsS0FBSyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9GLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBR2hHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxvQkFBb0IsRUFBNkMsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFhM0U7O0dBRUc7QUFDSCxxQkFBYSxlQUFnQixTQUFRLG9CQUEyQyxZQUFXLFNBQVMsRUFBRSxPQUFPO0lBa0J6RyxPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsVUFBVTtJQUNsQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsb0JBQW9CO0lBQzVCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFlBQVk7SUF0QnRCLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDL0IsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUM3QyxPQUFPLENBQUMsT0FBTyxDQUFtQjtJQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFTO0lBR3BCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBUztJQUd0QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBZ0I7SUFFekMsT0FBTyxDQUFDLCtCQUErQixDQUEwQjtJQUNqRSxPQUFPLENBQUMsb0JBQW9CLENBQWlCO0lBRTdDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBMEI7SUFFMUQsU0FBUyxhQUNDLFFBQVEsRUFBRSxtQkFBbUIsRUFDN0IsVUFBVSxFQUFFLFVBQVUsRUFDdEIsU0FBUyxFQUFFLEdBQUcsRUFDZCxvQkFBb0IsRUFBRSxvQkFBb0IsRUFDMUMsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxZQUFZLEdBQUUsWUFBaUMsRUFDdkQsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELEdBQUcsU0FBNEIsRUFpQmhDO0lBRUQsT0FBYyw2QkFBNkIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sUUF1QjVGO1lBRWEsMEJBQTBCO0lBMkJ4QyxNQUFNLENBQUMsR0FBRyxDQUNSLE1BQU0sRUFBRSx5QkFBeUIsRUFDakMsWUFBWSxFQUFFLHFCQUFxQixFQUNuQyxVQUFVLEVBQUUsVUFBVSxFQUN0QixTQUFTLEVBQUUsR0FBRyxFQUNkLFdBQVcsRUFBRSxhQUFhLEVBQzFCLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxVQUFVLEVBQUUsVUFBVSxFQUN0QixlQUFlLEVBQUUsZUFBZSxFQUNoQyxZQUFZLEdBQUUsWUFBaUMsRUFDL0MsU0FBUyxHQUFFLGVBQXNDLG1CQTZCbEQ7SUFFTSxxQkFBcUIsaUJBSTNCO0lBRU0sdUJBQXVCLHlCQUU3QjtJQUdNLHFCQUFxQixDQUMxQixRQUFRLEVBQUUsYUFBYSxFQUN2QixXQUFXLEVBQUUsTUFBTSxFQUNuQixHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQ1YsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLENBRWQ7SUFFTSxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLHNCQUVoRTtJQUVNLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsVUFBVSxDQUU5RDtJQUVNLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsWUFBWSxDQUVwRTtJQUVNLFNBQVMsSUFBSSx5QkFBeUIsQ0FFNUM7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxRQUU3RDtJQUVZLEtBQUssa0JBaUJqQjtJQUVZLElBQUksa0JBRWhCO0lBRUQsMENBQTBDO0lBQzdCLGdCQUFnQixrQkFjNUI7SUFFSyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsU0FBUyxDQUFDLENBZ0gvRztJQUVELE9BQU8sQ0FBQyxpQkFBaUI7SUEyQm5CLG1CQUFtQixDQUN2QixXQUFXLEVBQUUsTUFBTSxFQUNuQixNQUFNLEVBQUUsZ0JBQWdCLEVBQ3hCLE9BQU8sRUFBRSxFQUFFLEVBQ1gsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUNULGVBQWUsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEdBQzVCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBWXBDO0lBRUssc0JBQXNCLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRW5FO0lBRUssMEJBQTBCLENBQzlCLHNCQUFzQixFQUFFLCtCQUErQixFQUN2RCxRQUFRLEVBQUUsVUFBVSxHQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDLENBRXBCO0lBRUssc0JBQXNCLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQWFqRjtJQUVLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBaUVoSDtZQUVhLG1DQUFtQztZQVNuQyxpQkFBaUI7Q0FzQmhDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/dest/validator.js CHANGED
@@ -28,10 +28,10 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
28
28
  blockProposalHandler;
29
29
  config;
30
30
  dateProvider;
31
- log;
32
31
  tracer;
33
32
  validationService;
34
33
  metrics;
34
+ log;
35
35
  // Whether it has already registered handlers on the p2p client
36
36
  hasRegisteredHandlers;
37
37
  // Used to check if we are sending the same proposal twice
@@ -40,12 +40,14 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
40
40
  epochCacheUpdateLoop;
41
41
  proposersOfInvalidBlocks;
42
42
  constructor(keyStore, epochCache, p2pClient, blockProposalHandler, config, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('validator')){
43
- super(), this.keyStore = keyStore, this.epochCache = epochCache, this.p2pClient = p2pClient, this.blockProposalHandler = blockProposalHandler, this.config = config, this.dateProvider = dateProvider, this.log = log, this.hasRegisteredHandlers = false, this.proposersOfInvalidBlocks = new Set();
43
+ super(), this.keyStore = keyStore, this.epochCache = epochCache, this.p2pClient = p2pClient, this.blockProposalHandler = blockProposalHandler, this.config = config, this.dateProvider = dateProvider, this.hasRegisteredHandlers = false, this.proposersOfInvalidBlocks = new Set();
44
+ // Create child logger with fisherman prefix if in fisherman mode
45
+ this.log = config.fishermanMode ? log.createChild('[FISHERMAN]') : log;
44
46
  this.tracer = telemetry.getTracer('Validator');
45
47
  this.metrics = new ValidatorMetrics(telemetry);
46
- this.validationService = new ValidationService(keyStore, log.createChild('validation-service'));
48
+ this.validationService = new ValidationService(keyStore, this.log.createChild('validation-service'));
47
49
  // Refresh epoch cache every second to trigger alert if participation in committee changes
48
- this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), log, 1000);
50
+ this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), this.log, 1000);
49
51
  const myAddresses = this.getValidatorAddresses();
50
52
  this.log.verbose(`Initialized validator with addresses: ${myAddresses.map((a)=>a.toString()).join(', ')}`);
51
53
  }
@@ -137,10 +139,9 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
137
139
  await this.registerHandlers();
138
140
  const myAddresses = this.getValidatorAddresses();
139
141
  const inCommittee = await this.epochCache.filterInCommittee('now', myAddresses);
142
+ this.log.info(`Started validator with addresses: ${myAddresses.map((a)=>a.toString()).join(', ')}`);
140
143
  if (inCommittee.length > 0) {
141
- this.log.info(`Started validator with addresses in current validator committee: ${inCommittee.map((a)=>a.toString()).join(', ')}`);
142
- } else {
143
- this.log.info(`Started validator with addresses: ${myAddresses.map((a)=>a.toString()).join(', ')}`);
144
+ this.log.info(`Addresses in current validator committee: ${inCommittee.map((a)=>a.toString()).join(', ')}`);
144
145
  }
145
146
  this.epochCacheUpdateLoop.start();
146
147
  return Promise.resolve();
@@ -160,7 +161,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
160
161
  }
161
162
  }
162
163
  async attestToProposal(proposal, proposalSender) {
163
- const slotNumber = proposal.slotNumber.toBigInt();
164
+ const slotNumber = proposal.slotNumber;
164
165
  const proposer = proposal.getSender();
165
166
  // Reject proposals with invalid signatures
166
167
  if (!proposer) {
@@ -176,12 +177,14 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
176
177
  };
177
178
  this.log.info(`Received proposal for slot ${slotNumber}`, {
178
179
  ...proposalInfo,
179
- txHashes: proposal.txHashes.map((t)=>t.toString())
180
+ txHashes: proposal.txHashes.map((t)=>t.toString()),
181
+ fishermanMode: this.config.fishermanMode || false
180
182
  });
181
183
  // Reexecute txs if we are part of the committee so we can attest, or if slashing is enabled so we can slash
182
184
  // invalid proposals even when not in the committee, or if we are configured to always reexecute for monitoring purposes.
183
- const { validatorReexecute, slashBroadcastedInvalidBlockPenalty, alwaysReexecuteBlockProposals } = this.config;
184
- const shouldReexecute = slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute || partOfCommittee && validatorReexecute || alwaysReexecuteBlockProposals;
185
+ // In fisherman mode, we always reexecute to validate proposals.
186
+ const { validatorReexecute, slashBroadcastedInvalidBlockPenalty, alwaysReexecuteBlockProposals, fishermanMode } = this.config;
187
+ const shouldReexecute = fishermanMode || slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute || partOfCommittee && validatorReexecute || alwaysReexecuteBlockProposals;
185
188
  const validationResult = await this.blockProposalHandler.handleBlockProposal(proposal, proposalSender, !!shouldReexecute);
186
189
  if (!validationResult.isValid) {
187
190
  this.log.warn(`Proposal validation failed: ${validationResult.reason}`, proposalInfo);
@@ -208,15 +211,42 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
208
211
  return undefined;
209
212
  }
210
213
  // Check that I have any address in current committee before attesting
211
- if (!partOfCommittee) {
214
+ // In fisherman mode, we still create attestations for validation even if not in committee
215
+ if (!partOfCommittee && !this.config.fishermanMode) {
212
216
  this.log.verbose(`No validator in the current committee, skipping attestation`, proposalInfo);
213
217
  return undefined;
214
218
  }
215
219
  // Provided all of the above checks pass, we can attest to the proposal
216
- this.log.info(`Attesting to proposal for slot ${slotNumber}`, proposalInfo);
220
+ this.log.info(`${partOfCommittee ? 'Attesting to' : 'Validated'} proposal for slot ${slotNumber}`, {
221
+ ...proposalInfo,
222
+ inCommittee: partOfCommittee,
223
+ fishermanMode: this.config.fishermanMode || false
224
+ });
217
225
  this.metrics.incSuccessfulAttestations(inCommittee.length);
218
226
  // If the above function does not throw an error, then we can attest to the proposal
219
- return this.createBlockAttestationsFromProposal(proposal, inCommittee);
227
+ // Determine which validators should attest
228
+ let attestors;
229
+ if (partOfCommittee) {
230
+ attestors = inCommittee;
231
+ } else if (this.config.fishermanMode) {
232
+ // In fisherman mode, create attestations for validation purposes even if not in committee. These won't be broadcast.
233
+ attestors = this.getValidatorAddresses();
234
+ } else {
235
+ attestors = [];
236
+ }
237
+ // Only create attestations if we have attestors
238
+ if (attestors.length === 0) {
239
+ return undefined;
240
+ }
241
+ if (this.config.fishermanMode) {
242
+ // bail out early and don't save attestations to the pool in fisherman mode
243
+ this.log.info(`Creating attestations for proposal for slot ${slotNumber}`, {
244
+ ...proposalInfo,
245
+ attestors: attestors.map((a)=>a.toString())
246
+ });
247
+ return undefined;
248
+ }
249
+ return this.createBlockAttestationsFromProposal(proposal, attestors);
220
250
  }
221
251
  slashInvalidBlock(proposal) {
222
252
  const proposer = proposal.getSender();
@@ -236,16 +266,16 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
236
266
  validator: proposer,
237
267
  amount: this.config.slashBroadcastedInvalidBlockPenalty,
238
268
  offenseType: OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL,
239
- epochOrSlot: proposal.slotNumber.toBigInt()
269
+ epochOrSlot: BigInt(proposal.slotNumber)
240
270
  }
241
271
  ]);
242
272
  }
243
- async createBlockProposal(blockNumber, header, archive, stateReference, txs, proposerAddress, options) {
244
- if (this.previousProposal?.slotNumber.equals(header.slotNumber)) {
273
+ async createBlockProposal(blockNumber, header, archive, txs, proposerAddress, options) {
274
+ if (this.previousProposal?.slotNumber === header.slotNumber) {
245
275
  this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
246
276
  return Promise.resolve(undefined);
247
277
  }
248
- const newProposal = await this.validationService.createBlockProposal(header, archive, stateReference, txs, proposerAddress, {
278
+ const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
249
279
  ...options,
250
280
  broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal
251
281
  });
@@ -259,16 +289,23 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
259
289
  return await this.validationService.signAttestationsAndSigners(attestationsAndSigners, proposer);
260
290
  }
261
291
  async collectOwnAttestations(proposal) {
262
- const slot = proposal.payload.header.slotNumber.toBigInt();
292
+ const slot = proposal.payload.header.slotNumber;
263
293
  const inCommittee = await this.epochCache.filterInCommittee(slot, this.getValidatorAddresses());
264
294
  this.log.debug(`Collecting ${inCommittee.length} self-attestations for slot ${slot}`, {
265
295
  inCommittee
266
296
  });
267
- return this.createBlockAttestationsFromProposal(proposal, inCommittee);
297
+ const attestations = await this.createBlockAttestationsFromProposal(proposal, inCommittee);
298
+ // We broadcast our own attestations to our peers so, in case our block does not get mined on L1,
299
+ // other nodes can see that our validators did attest to this block proposal, and do not slash us
300
+ // due to inactivity for missed attestations.
301
+ void this.p2pClient.broadcastAttestations(attestations).catch((err)=>{
302
+ this.log.error(`Failed to broadcast self-attestations for slot ${slot}`, err);
303
+ });
304
+ return attestations;
268
305
  }
269
306
  async collectAttestations(proposal, required, deadline) {
270
307
  // Wait and poll the p2pClient's attestation pool for this block until we have enough attestations
271
- const slot = proposal.payload.header.slotNumber.toBigInt();
308
+ const slot = proposal.payload.header.slotNumber;
272
309
  this.log.debug(`Collecting ${required} attestations for slot ${slot} with deadline ${deadline.toISOString()}`);
273
310
  if (+deadline < this.dateProvider.now()) {
274
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": "0.0.1-commit.b655e406",
3
+ "version": "0.0.1-commit.fce3e4f",
4
4
  "main": "dest/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -18,8 +18,8 @@
18
18
  },
19
19
  "scripts": {
20
20
  "start": "node --no-warnings ./dest/bin",
21
- "build": "yarn clean && tsc -b",
22
- "build:dev": "tsc -b --watch",
21
+ "build": "yarn clean && tsgo -b",
22
+ "build:dev": "tsgo -b --watch",
23
23
  "clean": "rm -rf ./dest .tsbuildinfo",
24
24
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
25
25
  },
@@ -64,25 +64,25 @@
64
64
  ]
65
65
  },
66
66
  "dependencies": {
67
- "@aztec/constants": "0.0.1-commit.b655e406",
68
- "@aztec/epoch-cache": "0.0.1-commit.b655e406",
69
- "@aztec/ethereum": "0.0.1-commit.b655e406",
70
- "@aztec/foundation": "0.0.1-commit.b655e406",
71
- "@aztec/node-keystore": "0.0.1-commit.b655e406",
72
- "@aztec/p2p": "0.0.1-commit.b655e406",
73
- "@aztec/prover-client": "0.0.1-commit.b655e406",
74
- "@aztec/slasher": "0.0.1-commit.b655e406",
75
- "@aztec/stdlib": "0.0.1-commit.b655e406",
76
- "@aztec/telemetry-client": "0.0.1-commit.b655e406",
67
+ "@aztec/constants": "0.0.1-commit.fce3e4f",
68
+ "@aztec/epoch-cache": "0.0.1-commit.fce3e4f",
69
+ "@aztec/ethereum": "0.0.1-commit.fce3e4f",
70
+ "@aztec/foundation": "0.0.1-commit.fce3e4f",
71
+ "@aztec/node-keystore": "0.0.1-commit.fce3e4f",
72
+ "@aztec/p2p": "0.0.1-commit.fce3e4f",
73
+ "@aztec/slasher": "0.0.1-commit.fce3e4f",
74
+ "@aztec/stdlib": "0.0.1-commit.fce3e4f",
75
+ "@aztec/telemetry-client": "0.0.1-commit.fce3e4f",
77
76
  "koa": "^2.16.1",
78
77
  "koa-router": "^13.1.1",
79
78
  "tslib": "^2.4.0",
80
- "viem": "npm:@spalladino/viem@2.38.2-eip7594.0"
79
+ "viem": "npm:@aztec/viem@2.38.2"
81
80
  },
82
81
  "devDependencies": {
83
82
  "@jest/globals": "^30.0.0",
84
83
  "@types/jest": "^30.0.0",
85
84
  "@types/node": "^22.15.17",
85
+ "@typescript/native-preview": "7.0.0-dev.20251126.1",
86
86
  "jest": "^30.0.0",
87
87
  "jest-mock-extended": "^4.0.0",
88
88
  "ts-node": "^10.9.1",
@@ -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';
@@ -7,11 +8,10 @@ import { DateProvider, Timer } from '@aztec/foundation/timer';
7
8
  import type { P2P, PeerId } from '@aztec/p2p';
8
9
  import { TxProvider } from '@aztec/p2p';
9
10
  import { BlockProposalValidator } from '@aztec/p2p/msg_validators';
10
- import { computeInHashFromL1ToL2Messages } from '@aztec/prover-client/helpers';
11
11
  import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
12
12
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
13
13
  import type { IFullNodeBlockBuilder, ValidatorClientFullConfig } from '@aztec/stdlib/interfaces/server';
14
- import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
14
+ import { type L1ToL2MessageSource, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
15
15
  import { type BlockProposal, ConsensusPayload } from '@aztec/stdlib/p2p';
16
16
  import { BlockHeader, type FailedTx, GlobalVariables, type Tx } from '@aztec/stdlib/tx';
17
17
  import {
@@ -73,6 +73,9 @@ export class BlockProposalHandler {
73
73
  telemetry: TelemetryClient = getTelemetryClient(),
74
74
  private log = createLogger('validator:block-proposal-handler'),
75
75
  ) {
76
+ if (config.fishermanMode) {
77
+ this.log = this.log.createChild('[FISHERMAN]');
78
+ }
76
79
  this.tracer = telemetry.getTracer('BlockProposalHandler');
77
80
  }
78
81
 
@@ -81,14 +84,14 @@ export class BlockProposalHandler {
81
84
  try {
82
85
  const result = await this.handleBlockProposal(proposal, proposalSender, true);
83
86
  if (result.isValid) {
84
- this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber.toBigInt()}`, {
87
+ this.log.info(`Non-validator reexecution completed for slot ${proposal.slotNumber}`, {
85
88
  blockNumber: result.blockNumber,
86
89
  reexecutionTimeMs: result.reexecutionResult?.reexecutionTimeMs,
87
90
  totalManaUsed: result.reexecutionResult?.totalManaUsed,
88
91
  numTxs: result.reexecutionResult?.block?.body?.txEffects?.length ?? 0,
89
92
  });
90
93
  } else {
91
- this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber.toBigInt()}`, {
94
+ this.log.warn(`Non-validator reexecution failed for slot ${proposal.slotNumber}`, {
92
95
  blockNumber: result.blockNumber,
93
96
  reason: result.reason,
94
97
  });
@@ -108,7 +111,7 @@ export class BlockProposalHandler {
108
111
  proposalSender: PeerId,
109
112
  shouldReexecute: boolean,
110
113
  ): Promise<BlockProposalValidationResult> {
111
- const slotNumber = proposal.slotNumber.toBigInt();
114
+ const slotNumber = proposal.slotNumber;
112
115
  const proposer = proposal.getSender();
113
116
  const config = this.blockBuilder.getConfig();
114
117
 
@@ -168,7 +171,7 @@ export class BlockProposalHandler {
168
171
 
169
172
  // Check that I have the same set of l1ToL2Messages as the proposal
170
173
  const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(blockNumber);
171
- const computedInHash = await computeInHashFromL1ToL2Messages(l1ToL2Messages);
174
+ const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages);
172
175
  const proposalInHash = proposal.payload.header.contentCommitment.inHash;
173
176
  if (!computedInHash.equals(proposalInHash)) {
174
177
  this.log.warn(`L1 to L2 messages in hash mismatch, skipping processing`, {
@@ -204,7 +207,7 @@ export class BlockProposalHandler {
204
207
 
205
208
  private async getParentBlock(proposal: BlockProposal): Promise<'genesis' | BlockHeader | undefined> {
206
209
  const parentArchive = proposal.payload.header.lastArchiveRoot;
207
- const slot = proposal.slotNumber.toBigInt();
210
+ const slot = proposal.slotNumber;
208
211
  const config = this.blockBuilder.getConfig();
209
212
  const { genesisArchiveRoot } = await this.blockSource.getGenesisValues();
210
213
 
@@ -239,8 +242,8 @@ export class BlockProposalHandler {
239
242
  }
240
243
  }
241
244
 
242
- private getReexecutionDeadline(slot: bigint, config: { l1GenesisTime: bigint; slotDuration: number }): Date {
243
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(slot + 1n, config));
245
+ private getReexecutionDeadline(slot: SlotNumber, config: { l1GenesisTime: bigint; slotDuration: number }): Date {
246
+ const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(slot + 1), config));
244
247
  const msNeededForPropagationAndPublishing = this.config.validatorReexecuteDeadlineMs;
245
248
  return new Date(nextSlotTimestampSeconds * 1000 - msNeededForPropagationAndPublishing);
246
249
  }
@@ -290,11 +293,11 @@ export class BlockProposalHandler {
290
293
  });
291
294
 
292
295
  const { block, failedTxs } = await this.blockBuilder.buildBlock(txs, l1ToL2Messages, globalVariables, {
293
- deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber.toBigInt(), config),
296
+ deadline: this.getReexecutionDeadline(proposal.payload.header.slotNumber, config),
294
297
  });
295
298
 
296
299
  const numFailedTxs = failedTxs.length;
297
- const slot = proposal.slotNumber.toBigInt();
300
+ const slot = proposal.slotNumber;
298
301
  this.log.verbose(`Transaction re-execution complete for slot ${slot}`, {
299
302
  numFailedTxs,
300
303
  numProposalTxs: txHashes.length,
@@ -320,12 +323,7 @@ export class BlockProposalHandler {
320
323
  actual: proposal.payload.toInspect(),
321
324
  });
322
325
  this.metrics?.recordFailedReexecution(proposal);
323
- throw new ReExStateMismatchError(
324
- proposal.archive,
325
- block.archive.root,
326
- proposal.payload.stateReference,
327
- block.header.state,
328
- );
326
+ throw new ReExStateMismatchError(proposal.archive, block.archive.root);
329
327
  }
330
328
 
331
329
  const reexecutionTimeMs = timer.ms();
package/src/config.ts CHANGED
@@ -64,6 +64,12 @@ export const validatorClientConfigMappings: ConfigMappingsType<ValidatorClientCo
64
64
  'Whether to always reexecute block proposals, even for non-validator nodes (useful for monitoring network status).',
65
65
  ...booleanConfigHelper(false),
66
66
  },
67
+ fishermanMode: {
68
+ env: 'FISHERMAN_MODE',
69
+ description:
70
+ 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
71
+ ...booleanConfigHelper(false),
72
+ },
67
73
  };
68
74
 
69
75
  /**
@@ -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 { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
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: corrupt the state reference to trigger state_mismatch validation failure
54
+ // For testing: change the new archive to trigger state_mismatch validation failure
58
55
  if (options.broadcastInvalidBlockProposal) {
59
- unfreeze(stateReference.partial).noteHashTree = AppendOnlyTreeSnapshot.random();
60
- this.log.warn(`Creating INVALID block proposal for slot ${header.slotNumber.toBigInt()}`);
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, stateReference),
61
+ new ConsensusPayload(header, archive),
65
62
  txHashes,
66
63
  options.publishFullTxs ? txs : undefined,
67
64
  payloadSigner,
package/src/validator.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
+ import { EpochNumber } from '@aztec/foundation/branded-types';
2
3
  import type { EthAddress } from '@aztec/foundation/eth-address';
3
4
  import type { Signature } from '@aztec/foundation/eth-signature';
4
5
  import { Fr } from '@aztec/foundation/fields';
@@ -16,7 +17,7 @@ import type { IFullNodeBlockBuilder, Validator, ValidatorClientFullConfig } from
16
17
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
17
18
  import type { BlockAttestation, BlockProposal, BlockProposalOptions } from '@aztec/stdlib/p2p';
18
19
  import type { CheckpointHeader } from '@aztec/stdlib/rollup';
19
- import type { StateReference, Tx } from '@aztec/stdlib/tx';
20
+ import type { Tx } from '@aztec/stdlib/tx';
20
21
  import { AttestationTimeoutError } from '@aztec/stdlib/validators';
21
22
  import { type TelemetryClient, type Tracer, getTelemetryClient } from '@aztec/telemetry-client';
22
23
 
@@ -45,6 +46,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
45
46
  public readonly tracer: Tracer;
46
47
  private validationService: ValidationService;
47
48
  private metrics: ValidatorMetrics;
49
+ private log: Logger;
48
50
 
49
51
  // Whether it has already registered handlers on the p2p client
50
52
  private hasRegisteredHandlers = false;
@@ -52,7 +54,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
52
54
  // Used to check if we are sending the same proposal twice
53
55
  private previousProposal?: BlockProposal;
54
56
 
55
- private lastEpochForCommitteeUpdateLoop: bigint | undefined;
57
+ private lastEpochForCommitteeUpdateLoop: EpochNumber | undefined;
56
58
  private epochCacheUpdateLoop: RunningPromise;
57
59
 
58
60
  private proposersOfInvalidBlocks: Set<string> = new Set();
@@ -65,16 +67,20 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
65
67
  private config: ValidatorClientFullConfig,
66
68
  private dateProvider: DateProvider = new DateProvider(),
67
69
  telemetry: TelemetryClient = getTelemetryClient(),
68
- private log = createLogger('validator'),
70
+ log = createLogger('validator'),
69
71
  ) {
70
72
  super();
73
+
74
+ // Create child logger with fisherman prefix if in fisherman mode
75
+ this.log = config.fishermanMode ? log.createChild('[FISHERMAN]') : log;
76
+
71
77
  this.tracer = telemetry.getTracer('Validator');
72
78
  this.metrics = new ValidatorMetrics(telemetry);
73
79
 
74
- this.validationService = new ValidationService(keyStore, log.createChild('validation-service'));
80
+ this.validationService = new ValidationService(keyStore, this.log.createChild('validation-service'));
75
81
 
76
82
  // Refresh epoch cache every second to trigger alert if participation in committee changes
77
- this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), log, 1000);
83
+ this.epochCacheUpdateLoop = new RunningPromise(this.handleEpochCommitteeUpdate.bind(this), this.log, 1000);
78
84
 
79
85
  const myAddresses = this.getValidatorAddresses();
80
86
  this.log.verbose(`Initialized validator with addresses: ${myAddresses.map(a => a.toString()).join(', ')}`);
@@ -223,14 +229,9 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
223
229
 
224
230
  const myAddresses = this.getValidatorAddresses();
225
231
  const inCommittee = await this.epochCache.filterInCommittee('now', myAddresses);
232
+ this.log.info(`Started validator with addresses: ${myAddresses.map(a => a.toString()).join(', ')}`);
226
233
  if (inCommittee.length > 0) {
227
- this.log.info(
228
- `Started validator with addresses in current validator committee: ${inCommittee
229
- .map(a => a.toString())
230
- .join(', ')}`,
231
- );
232
- } else {
233
- this.log.info(`Started validator with addresses: ${myAddresses.map(a => a.toString()).join(', ')}`);
234
+ this.log.info(`Addresses in current validator committee: ${inCommittee.map(a => a.toString()).join(', ')}`);
234
235
  }
235
236
  this.epochCacheUpdateLoop.start();
236
237
 
@@ -259,7 +260,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
259
260
  }
260
261
 
261
262
  async attestToProposal(proposal: BlockProposal, proposalSender: PeerId): Promise<BlockAttestation[] | undefined> {
262
- const slotNumber = proposal.slotNumber.toBigInt();
263
+ const slotNumber = proposal.slotNumber;
263
264
  const proposer = proposal.getSender();
264
265
 
265
266
  // Reject proposals with invalid signatures
@@ -276,12 +277,16 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
276
277
  this.log.info(`Received proposal for slot ${slotNumber}`, {
277
278
  ...proposalInfo,
278
279
  txHashes: proposal.txHashes.map(t => t.toString()),
280
+ fishermanMode: this.config.fishermanMode || false,
279
281
  });
280
282
 
281
283
  // Reexecute txs if we are part of the committee so we can attest, or if slashing is enabled so we can slash
282
284
  // invalid proposals even when not in the committee, or if we are configured to always reexecute for monitoring purposes.
283
- const { validatorReexecute, slashBroadcastedInvalidBlockPenalty, alwaysReexecuteBlockProposals } = this.config;
285
+ // In fisherman mode, we always reexecute to validate proposals.
286
+ const { validatorReexecute, slashBroadcastedInvalidBlockPenalty, alwaysReexecuteBlockProposals, fishermanMode } =
287
+ this.config;
284
288
  const shouldReexecute =
289
+ fishermanMode ||
285
290
  (slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute) ||
286
291
  (partOfCommittee && validatorReexecute) ||
287
292
  alwaysReexecuteBlockProposals;
@@ -325,17 +330,47 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
325
330
  }
326
331
 
327
332
  // Check that I have any address in current committee before attesting
328
- if (!partOfCommittee) {
333
+ // In fisherman mode, we still create attestations for validation even if not in committee
334
+ if (!partOfCommittee && !this.config.fishermanMode) {
329
335
  this.log.verbose(`No validator in the current committee, skipping attestation`, proposalInfo);
330
336
  return undefined;
331
337
  }
332
338
 
333
339
  // Provided all of the above checks pass, we can attest to the proposal
334
- this.log.info(`Attesting to proposal for slot ${slotNumber}`, proposalInfo);
340
+ this.log.info(`${partOfCommittee ? 'Attesting to' : 'Validated'} proposal for slot ${slotNumber}`, {
341
+ ...proposalInfo,
342
+ inCommittee: partOfCommittee,
343
+ fishermanMode: this.config.fishermanMode || false,
344
+ });
345
+
335
346
  this.metrics.incSuccessfulAttestations(inCommittee.length);
336
347
 
337
348
  // If the above function does not throw an error, then we can attest to the proposal
338
- return this.createBlockAttestationsFromProposal(proposal, inCommittee);
349
+ // Determine which validators should attest
350
+ let attestors: EthAddress[];
351
+ if (partOfCommittee) {
352
+ attestors = inCommittee;
353
+ } else if (this.config.fishermanMode) {
354
+ // In fisherman mode, create attestations for validation purposes even if not in committee. These won't be broadcast.
355
+ attestors = this.getValidatorAddresses();
356
+ } else {
357
+ attestors = [];
358
+ }
359
+
360
+ // Only create attestations if we have attestors
361
+ if (attestors.length === 0) {
362
+ return undefined;
363
+ }
364
+
365
+ if (this.config.fishermanMode) {
366
+ // bail out early and don't save attestations to the pool in fisherman mode
367
+ this.log.info(`Creating attestations for proposal for slot ${slotNumber}`, {
368
+ ...proposalInfo,
369
+ attestors: attestors.map(a => a.toString()),
370
+ });
371
+ return undefined;
372
+ }
373
+ return this.createBlockAttestationsFromProposal(proposal, attestors);
339
374
  }
340
375
 
341
376
  private slashInvalidBlock(proposal: BlockProposal) {
@@ -360,7 +395,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
360
395
  validator: proposer,
361
396
  amount: this.config.slashBroadcastedInvalidBlockPenalty,
362
397
  offenseType: OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL,
363
- epochOrSlot: proposal.slotNumber.toBigInt(),
398
+ epochOrSlot: BigInt(proposal.slotNumber),
364
399
  },
365
400
  ]);
366
401
  }
@@ -369,24 +404,19 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
369
404
  blockNumber: number,
370
405
  header: CheckpointHeader,
371
406
  archive: Fr,
372
- stateReference: StateReference,
373
407
  txs: Tx[],
374
408
  proposerAddress: EthAddress | undefined,
375
409
  options: BlockProposalOptions,
376
410
  ): Promise<BlockProposal | undefined> {
377
- if (this.previousProposal?.slotNumber.equals(header.slotNumber)) {
411
+ if (this.previousProposal?.slotNumber === header.slotNumber) {
378
412
  this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
379
413
  return Promise.resolve(undefined);
380
414
  }
381
415
 
382
- const newProposal = await this.validationService.createBlockProposal(
383
- header,
384
- archive,
385
- stateReference,
386
- txs,
387
- proposerAddress,
388
- { ...options, broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal },
389
- );
416
+ const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
417
+ ...options,
418
+ broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal,
419
+ });
390
420
  this.previousProposal = newProposal;
391
421
  return newProposal;
392
422
  }
@@ -403,15 +433,23 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
403
433
  }
404
434
 
405
435
  async collectOwnAttestations(proposal: BlockProposal): Promise<BlockAttestation[]> {
406
- const slot = proposal.payload.header.slotNumber.toBigInt();
436
+ const slot = proposal.payload.header.slotNumber;
407
437
  const inCommittee = await this.epochCache.filterInCommittee(slot, this.getValidatorAddresses());
408
438
  this.log.debug(`Collecting ${inCommittee.length} self-attestations for slot ${slot}`, { inCommittee });
409
- return this.createBlockAttestationsFromProposal(proposal, inCommittee);
439
+ const attestations = await this.createBlockAttestationsFromProposal(proposal, inCommittee);
440
+
441
+ // We broadcast our own attestations to our peers so, in case our block does not get mined on L1,
442
+ // other nodes can see that our validators did attest to this block proposal, and do not slash us
443
+ // due to inactivity for missed attestations.
444
+ void this.p2pClient.broadcastAttestations(attestations).catch(err => {
445
+ this.log.error(`Failed to broadcast self-attestations for slot ${slot}`, err);
446
+ });
447
+ return attestations;
410
448
  }
411
449
 
412
450
  async collectAttestations(proposal: BlockProposal, required: number, deadline: Date): Promise<BlockAttestation[]> {
413
451
  // Wait and poll the p2pClient's attestation pool for this block until we have enough attestations
414
- const slot = proposal.payload.header.slotNumber.toBigInt();
452
+ const slot = proposal.payload.header.slotNumber;
415
453
  this.log.debug(`Collecting ${required} attestations for slot ${slot} with deadline ${deadline.toISOString()}`);
416
454
 
417
455
  if (+deadline < this.dateProvider.now()) {