@aztec/validator-client 1.0.0-staging.3 → 1.0.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAKjB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,oBAAoB,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAE1B,+DAA+D;IAC/D,4BAA4B,EAAE,MAAM,CAAC;IAErC,+CAA+C;IAC/C,kBAAkB,EAAE,OAAO,CAAC;IAE5B,wEAAwE;IACxE,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CA6BnF,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,EACvB,KAAK,WAAW,EAKjB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,oBAAoB,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAE1B,+DAA+D;IAC/D,4BAA4B,EAAE,MAAM,CAAC;IAErC,+CAA+C;IAC/C,kBAAkB,EAAE,OAAO,CAAC;IAE5B,wEAAwE;IACxE,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CA4BnF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
package/dest/config.js CHANGED
@@ -3,10 +3,7 @@ export const validatorClientConfigMappings = {
3
3
  validatorPrivateKeys: {
4
4
  env: 'VALIDATOR_PRIVATE_KEYS',
5
5
  description: 'List of private keys of the validators participating in attestation duties',
6
- ...secretValueConfigHelper((val)=>val ? val.split(',').map((key)=>`0x${key.replace('0x', '')}`) : []),
7
- fallback: [
8
- 'VALIDATOR_PRIVATE_KEY'
9
- ]
6
+ ...secretValueConfigHelper((val)=>val ? val.split(',').map((key)=>`0x${key.replace('0x', '')}`) : [])
10
7
  },
11
8
  disableValidator: {
12
9
  env: 'VALIDATOR_DISABLED',
@@ -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
@@ -2,7 +2,6 @@ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
2
  import { Buffer32 } from '@aztec/foundation/buffer';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import { retryUntil } from '@aztec/foundation/retry';
6
5
  import { RunningPromise } from '@aztec/foundation/running-promise';
7
6
  import { sleep } from '@aztec/foundation/sleep';
8
7
  import { DateProvider, Timer } from '@aztec/foundation/timer';
@@ -122,9 +121,6 @@ const MAX_PROPOSERS_OF_INVALID_BLOCKS = 1000;
122
121
  const slotNumber = proposal.slotNumber.toNumber();
123
122
  const blockNumber = proposal.blockNumber;
124
123
  const proposer = proposal.getSender();
125
- // Check that I have any address in current committee before attesting
126
- const inCommittee = await this.epochCache.filterInCommittee(this.keyStore.getAddresses());
127
- const partOfCommittee = inCommittee.length > 0;
128
124
  const proposalInfo = {
129
125
  slotNumber,
130
126
  blockNumber,
@@ -139,9 +135,7 @@ const MAX_PROPOSERS_OF_INVALID_BLOCKS = 1000;
139
135
  const invalidProposal = await this.blockProposalValidator.validate(proposal);
140
136
  if (invalidProposal) {
141
137
  this.log.warn(`Proposal is not valid, skipping attestation`);
142
- if (partOfCommittee) {
143
- this.metrics.incFailedAttestations(1, 'invalid_proposal');
144
- }
138
+ this.metrics.incFailedAttestations(1, 'invalid_proposal');
145
139
  return undefined;
146
140
  }
147
141
  // Check that the parent proposal is a block we know, otherwise reexecution would fail.
@@ -150,23 +144,10 @@ const MAX_PROPOSERS_OF_INVALID_BLOCKS = 1000;
150
144
  // would not be rebroadcasted. But it also means that nodes that have not fully synced would
151
145
  // not rebroadcast the proposal.
152
146
  if (blockNumber > INITIAL_L2_BLOCK_NUM) {
153
- const config = this.blockBuilder.getConfig();
154
- const deadline = this.getReexecutionDeadline(proposal, config);
155
- const currentTime = this.dateProvider.now();
156
- const timeoutDurationMs = deadline.getTime() - currentTime;
157
- const parentBlock = timeoutDurationMs <= 0 ? undefined : await retryUntil(async ()=>{
158
- const block = await this.blockSource.getBlock(blockNumber - 1);
159
- if (block) {
160
- return block;
161
- }
162
- await this.blockSource.syncImmediate();
163
- return await this.blockSource.getBlock(blockNumber - 1);
164
- }, 'Force Archiver Sync', timeoutDurationMs / 1000, 0.5);
147
+ const parentBlock = await this.blockSource.getBlock(blockNumber - 1);
165
148
  if (parentBlock === undefined) {
166
149
  this.log.warn(`Parent block for ${blockNumber} not found, skipping attestation`);
167
- if (partOfCommittee) {
168
- this.metrics.incFailedAttestations(1, 'parent_block_not_found');
169
- }
150
+ this.metrics.incFailedAttestations(1, 'parent_block_not_found');
170
151
  return undefined;
171
152
  }
172
153
  if (!proposal.payload.header.lastArchiveRoot.equals(parentBlock.archive.root)) {
@@ -175,23 +156,25 @@ const MAX_PROPOSERS_OF_INVALID_BLOCKS = 1000;
175
156
  parentBlockArchiveRoot: parentBlock.archive.root.toString(),
176
157
  ...proposalInfo
177
158
  });
178
- if (partOfCommittee) {
179
- this.metrics.incFailedAttestations(1, 'parent_block_does_not_match');
180
- }
159
+ this.metrics.incFailedAttestations(1, 'parent_block_does_not_match');
181
160
  return undefined;
182
161
  }
183
162
  }
184
163
  // Collect txs from the proposal
185
164
  const { missing, txs } = await this.txCollector.collectForBlockProposal(proposal, proposalSender);
165
+ // Check that I have any address in current committee before attesting
166
+ const inCommittee = await this.epochCache.filterInCommittee(this.keyStore.getAddresses());
167
+ if (inCommittee.length === 0) {
168
+ this.log.verbose(`No validator in the committee, skipping attestation`);
169
+ return undefined;
170
+ }
186
171
  // Check that all of the transactions in the proposal are available in the tx pool before attesting
187
172
  if (missing && missing.length > 0) {
188
173
  this.log.warn(`Missing ${missing.length}/${proposal.payload.txHashes.length} txs to attest to proposal`, {
189
174
  ...proposalInfo,
190
175
  missing
191
176
  });
192
- if (partOfCommittee) {
193
- this.metrics.incFailedAttestations(1, 'tx_not_available');
194
- }
177
+ this.metrics.incFailedAttestations(1, 'TransactionsNotAvailableError');
195
178
  return undefined;
196
179
  }
197
180
  // Check that I have the same set of l1ToL2Messages as the proposal
@@ -204,13 +187,7 @@ const MAX_PROPOSERS_OF_INVALID_BLOCKS = 1000;
204
187
  computedInHash: computedInHash.toString(),
205
188
  ...proposalInfo
206
189
  });
207
- if (partOfCommittee) {
208
- this.metrics.incFailedAttestations(1, 'in_hash_mismatch');
209
- }
210
- return undefined;
211
- }
212
- if (!partOfCommittee) {
213
- this.log.verbose(`No validator in the committee, skipping attestation`);
190
+ this.metrics.incFailedAttestations(1, 'in_hash_mismatch');
214
191
  return undefined;
215
192
  }
216
193
  // Try re-executing the transactions in the proposal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/validator-client",
3
- "version": "1.0.0-staging.3",
3
+ "version": "1.0.0",
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": "1.0.0-staging.3",
68
- "@aztec/epoch-cache": "1.0.0-staging.3",
69
- "@aztec/ethereum": "1.0.0-staging.3",
70
- "@aztec/foundation": "1.0.0-staging.3",
71
- "@aztec/p2p": "1.0.0-staging.3",
72
- "@aztec/prover-client": "1.0.0-staging.3",
73
- "@aztec/slasher": "1.0.0-staging.3",
74
- "@aztec/stdlib": "1.0.0-staging.3",
75
- "@aztec/telemetry-client": "1.0.0-staging.3",
67
+ "@aztec/constants": "1.0.0",
68
+ "@aztec/epoch-cache": "1.0.0",
69
+ "@aztec/ethereum": "1.0.0",
70
+ "@aztec/foundation": "1.0.0",
71
+ "@aztec/p2p": "1.0.0",
72
+ "@aztec/prover-client": "1.0.0",
73
+ "@aztec/slasher": "1.0.0",
74
+ "@aztec/stdlib": "1.0.0",
75
+ "@aztec/telemetry-client": "1.0.0",
76
76
  "koa": "^2.16.1",
77
77
  "koa-router": "^12.0.0",
78
78
  "tslib": "^2.4.0",
package/src/config.ts CHANGED
@@ -34,7 +34,6 @@ export const validatorClientConfigMappings: ConfigMappingsType<ValidatorClientCo
34
34
  ...secretValueConfigHelper<`0x${string}`[]>(val =>
35
35
  val ? val.split(',').map<`0x${string}`>(key => `0x${key.replace('0x', '')}`) : [],
36
36
  ),
37
- fallback: ['VALIDATOR_PRIVATE_KEY'],
38
37
  },
39
38
  disableValidator: {
40
39
  env: 'VALIDATOR_DISABLED',
package/src/validator.ts CHANGED
@@ -4,7 +4,6 @@ import { Buffer32 } from '@aztec/foundation/buffer';
4
4
  import type { EthAddress } from '@aztec/foundation/eth-address';
5
5
  import { Fr } from '@aztec/foundation/fields';
6
6
  import { createLogger } from '@aztec/foundation/log';
7
- import { retryUntil } from '@aztec/foundation/retry';
8
7
  import { RunningPromise } from '@aztec/foundation/running-promise';
9
8
  import { sleep } from '@aztec/foundation/sleep';
10
9
  import { DateProvider, Timer } from '@aztec/foundation/timer';
@@ -227,10 +226,6 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
227
226
  const blockNumber = proposal.blockNumber;
228
227
  const proposer = proposal.getSender();
229
228
 
230
- // Check that I have any address in current committee before attesting
231
- const inCommittee = await this.epochCache.filterInCommittee(this.keyStore.getAddresses());
232
- const partOfCommittee = inCommittee.length > 0;
233
-
234
229
  const proposalInfo = {
235
230
  slotNumber,
236
231
  blockNumber,
@@ -246,9 +241,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
246
241
  const invalidProposal = await this.blockProposalValidator.validate(proposal);
247
242
  if (invalidProposal) {
248
243
  this.log.warn(`Proposal is not valid, skipping attestation`);
249
- if (partOfCommittee) {
250
- this.metrics.incFailedAttestations(1, 'invalid_proposal');
251
- }
244
+ this.metrics.incFailedAttestations(1, 'invalid_proposal');
252
245
  return undefined;
253
246
  }
254
247
 
@@ -258,34 +251,10 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
258
251
  // would not be rebroadcasted. But it also means that nodes that have not fully synced would
259
252
  // not rebroadcast the proposal.
260
253
  if (blockNumber > INITIAL_L2_BLOCK_NUM) {
261
- const config = this.blockBuilder.getConfig();
262
- const deadline = this.getReexecutionDeadline(proposal, config);
263
- const currentTime = this.dateProvider.now();
264
- const timeoutDurationMs = deadline.getTime() - currentTime;
265
- const parentBlock =
266
- timeoutDurationMs <= 0
267
- ? undefined
268
- : await retryUntil(
269
- async () => {
270
- const block = await this.blockSource.getBlock(blockNumber - 1);
271
- if (block) {
272
- return block;
273
- }
274
- await this.blockSource.syncImmediate();
275
- return await this.blockSource.getBlock(blockNumber - 1);
276
- },
277
- 'Force Archiver Sync',
278
- timeoutDurationMs / 1000, // Continue retrying until the deadline
279
- 0.5, // Retry every 500ms
280
- );
281
-
254
+ const parentBlock = await this.blockSource.getBlock(blockNumber - 1);
282
255
  if (parentBlock === undefined) {
283
256
  this.log.warn(`Parent block for ${blockNumber} not found, skipping attestation`);
284
-
285
- if (partOfCommittee) {
286
- this.metrics.incFailedAttestations(1, 'parent_block_not_found');
287
- }
288
-
257
+ this.metrics.incFailedAttestations(1, 'parent_block_not_found');
289
258
  return undefined;
290
259
  }
291
260
  if (!proposal.payload.header.lastArchiveRoot.equals(parentBlock.archive.root)) {
@@ -294,9 +263,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
294
263
  parentBlockArchiveRoot: parentBlock.archive.root.toString(),
295
264
  ...proposalInfo,
296
265
  });
297
- if (partOfCommittee) {
298
- this.metrics.incFailedAttestations(1, 'parent_block_does_not_match');
299
- }
266
+ this.metrics.incFailedAttestations(1, 'parent_block_does_not_match');
300
267
  return undefined;
301
268
  }
302
269
  }
@@ -304,15 +271,20 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
304
271
  // Collect txs from the proposal
305
272
  const { missing, txs } = await this.txCollector.collectForBlockProposal(proposal, proposalSender);
306
273
 
274
+ // Check that I have any address in current committee before attesting
275
+ const inCommittee = await this.epochCache.filterInCommittee(this.keyStore.getAddresses());
276
+ if (inCommittee.length === 0) {
277
+ this.log.verbose(`No validator in the committee, skipping attestation`);
278
+ return undefined;
279
+ }
280
+
307
281
  // Check that all of the transactions in the proposal are available in the tx pool before attesting
308
282
  if (missing && missing.length > 0) {
309
283
  this.log.warn(`Missing ${missing.length}/${proposal.payload.txHashes.length} txs to attest to proposal`, {
310
284
  ...proposalInfo,
311
285
  missing,
312
286
  });
313
- if (partOfCommittee) {
314
- this.metrics.incFailedAttestations(1, 'tx_not_available');
315
- }
287
+ this.metrics.incFailedAttestations(1, 'TransactionsNotAvailableError');
316
288
  return undefined;
317
289
  }
318
290
 
@@ -326,14 +298,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
326
298
  computedInHash: computedInHash.toString(),
327
299
  ...proposalInfo,
328
300
  });
329
- if (partOfCommittee) {
330
- this.metrics.incFailedAttestations(1, 'in_hash_mismatch');
331
- }
332
- return undefined;
333
- }
334
-
335
- if (!partOfCommittee) {
336
- this.log.verbose(`No validator in the committee, skipping attestation`);
301
+ this.metrics.incFailedAttestations(1, 'in_hash_mismatch');
337
302
  return undefined;
338
303
  }
339
304