@aztec/p2p 1.0.0 → 1.1.2

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.
Files changed (59) hide show
  1. package/dest/bootstrap/bootstrap.js +1 -1
  2. package/dest/client/factory.js +1 -1
  3. package/dest/client/p2p_client.js +1 -1
  4. package/dest/config.d.ts +2 -2
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +11 -4
  7. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  8. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +17 -10
  9. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
  10. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  11. package/dest/mem_pools/tx_pool/memory_tx_pool.js +2 -2
  12. package/dest/mem_pools/tx_pool/tx_pool.d.ts +3 -2
  13. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  15. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +10 -3
  16. package/dest/msg_validators/tx_validator/factory.d.ts +2 -1
  17. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  18. package/dest/msg_validators/tx_validator/factory.js +3 -2
  19. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -0
  20. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  21. package/dest/msg_validators/tx_validator/metadata_validator.js +13 -7
  22. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  23. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  24. package/dest/msg_validators/tx_validator/phases_validator.js +4 -4
  25. package/dest/services/libp2p/instrumentation.d.ts +8 -1
  26. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  27. package/dest/services/libp2p/instrumentation.js +130 -2
  28. package/dest/services/libp2p/libp2p_service.d.ts +8 -3
  29. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  30. package/dest/services/libp2p/libp2p_service.js +34 -14
  31. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  32. package/dest/test-helpers/make-test-p2p-clients.js +2 -1
  33. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  34. package/dest/test-helpers/reqresp-nodes.js +3 -2
  35. package/dest/testbench/p2p_client_testbench_worker.js +6 -0
  36. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  37. package/dest/testbench/worker_client_manager.js +2 -1
  38. package/dest/util.d.ts +3 -2
  39. package/dest/util.d.ts.map +1 -1
  40. package/dest/util.js +6 -5
  41. package/package.json +13 -13
  42. package/src/bootstrap/bootstrap.ts +1 -1
  43. package/src/client/factory.ts +1 -1
  44. package/src/client/p2p_client.ts +1 -1
  45. package/src/config.ts +2 -1
  46. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +22 -12
  47. package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
  48. package/src/mem_pools/tx_pool/tx_pool.ts +3 -2
  49. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +8 -4
  50. package/src/msg_validators/tx_validator/factory.ts +4 -1
  51. package/src/msg_validators/tx_validator/metadata_validator.ts +20 -9
  52. package/src/msg_validators/tx_validator/phases_validator.ts +3 -2
  53. package/src/services/libp2p/instrumentation.ts +122 -3
  54. package/src/services/libp2p/libp2p_service.ts +41 -15
  55. package/src/test-helpers/make-test-p2p-clients.ts +2 -1
  56. package/src/test-helpers/reqresp-nodes.ts +3 -2
  57. package/src/testbench/p2p_client_testbench_worker.ts +1 -0
  58. package/src/testbench/worker_client_manager.ts +2 -1
  59. package/src/util.ts +8 -7
@@ -1,7 +1,14 @@
1
+ import { TopicType } from '@aztec/stdlib/p2p';
1
2
  import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
3
+ import { createHistogram } from 'node:perf_hooks';
2
4
  export class P2PInstrumentation {
3
5
  messageValidationDuration;
4
6
  messagePrevalidationCount;
7
+ messageLatency;
8
+ aggLatencyHisto = new Map();
9
+ aggValidationHisto = new Map();
10
+ aggLatencyMetrics;
11
+ aggValidationMetrics;
5
12
  constructor(client, name){
6
13
  const meter = client.getMeter(name);
7
14
  this.messageValidationDuration = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_VALIDATION_DURATION, {
@@ -13,12 +20,84 @@ export class P2PInstrumentation {
13
20
  description: 'How many message pass/fail prevalidation',
14
21
  valueType: ValueType.INT
15
22
  });
23
+ this.messageLatency = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_LATENCY, {
24
+ unit: 'ms',
25
+ description: 'P2P message latency',
26
+ valueType: ValueType.INT
27
+ });
28
+ this.aggLatencyMetrics = {
29
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG, {
30
+ valueType: ValueType.DOUBLE,
31
+ description: 'AVG msg latency',
32
+ unit: 'ms'
33
+ }),
34
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX, {
35
+ valueType: ValueType.DOUBLE,
36
+ description: 'MAX msg latency',
37
+ unit: 'ms'
38
+ }),
39
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN, {
40
+ valueType: ValueType.DOUBLE,
41
+ description: 'MIN msg latency',
42
+ unit: 'ms'
43
+ }),
44
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50, {
45
+ valueType: ValueType.DOUBLE,
46
+ description: 'P50 msg latency',
47
+ unit: 'ms'
48
+ }),
49
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90, {
50
+ valueType: ValueType.DOUBLE,
51
+ description: 'P90 msg latency',
52
+ unit: 'ms'
53
+ })
54
+ };
55
+ this.aggValidationMetrics = {
56
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG, {
57
+ valueType: ValueType.DOUBLE,
58
+ description: 'AVG msg validation',
59
+ unit: 'ms'
60
+ }),
61
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX, {
62
+ valueType: ValueType.DOUBLE,
63
+ description: 'MAX msg validation',
64
+ unit: 'ms'
65
+ }),
66
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN, {
67
+ valueType: ValueType.DOUBLE,
68
+ description: 'MIN msg validation',
69
+ unit: 'ms'
70
+ }),
71
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50, {
72
+ valueType: ValueType.DOUBLE,
73
+ description: 'P50 msg validation',
74
+ unit: 'ms'
75
+ }),
76
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90, {
77
+ valueType: ValueType.DOUBLE,
78
+ description: 'P90 msg validation',
79
+ unit: 'ms'
80
+ })
81
+ };
82
+ meter.addBatchObservableCallback(this.aggregate, [
83
+ ...Object.values(this.aggValidationMetrics),
84
+ ...Object.values(this.aggLatencyMetrics)
85
+ ]);
16
86
  }
17
87
  recordMessageValidation(topicName, timerOrMs) {
18
- const ms = typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms();
19
- this.messageValidationDuration.record(Math.ceil(ms), {
88
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
89
+ this.messageValidationDuration.record(ms, {
20
90
  [Attributes.TOPIC_NAME]: topicName
21
91
  });
92
+ let validationHistogram = this.aggValidationHisto.get(topicName);
93
+ if (!validationHistogram) {
94
+ validationHistogram = createHistogram({
95
+ min: 1,
96
+ max: 5 * 60 * 1000
97
+ }); // 5 mins
98
+ this.aggValidationHisto.set(topicName, validationHistogram);
99
+ }
100
+ validationHistogram.record(Math.max(ms, 1));
22
101
  }
23
102
  incMessagePrevalidationStatus(passed, topicName) {
24
103
  this.messagePrevalidationCount.add(1, {
@@ -26,4 +105,53 @@ export class P2PInstrumentation {
26
105
  [Attributes.OK]: passed
27
106
  });
28
107
  }
108
+ recordMessageLatency(topicName, timerOrMs) {
109
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
110
+ this.messageLatency.record(ms, {
111
+ [Attributes.TOPIC_NAME]: topicName
112
+ });
113
+ let latencyHistogram = this.aggLatencyHisto.get(topicName);
114
+ if (!latencyHistogram) {
115
+ latencyHistogram = createHistogram({
116
+ min: 1,
117
+ max: 24 * 60 * 60 * 1000
118
+ }); // 24hrs
119
+ this.aggLatencyHisto.set(topicName, latencyHistogram);
120
+ }
121
+ latencyHistogram.record(Math.max(ms, 1));
122
+ }
123
+ aggregate = (res)=>{
124
+ for (const [metrics, histograms] of [
125
+ [
126
+ this.aggLatencyMetrics,
127
+ this.aggLatencyHisto
128
+ ],
129
+ [
130
+ this.aggValidationMetrics,
131
+ this.aggValidationHisto
132
+ ]
133
+ ]){
134
+ for (const topicName of Object.values(TopicType)){
135
+ const histogram = histograms.get(topicName);
136
+ if (!histogram || histogram.count === 0) {
137
+ continue;
138
+ }
139
+ res.observe(metrics.avg, histogram.mean, {
140
+ [Attributes.TOPIC_NAME]: topicName
141
+ });
142
+ res.observe(metrics.max, histogram.max, {
143
+ [Attributes.TOPIC_NAME]: topicName
144
+ });
145
+ res.observe(metrics.min, histogram.min, {
146
+ [Attributes.TOPIC_NAME]: topicName
147
+ });
148
+ res.observe(metrics.p50, histogram.percentile(50), {
149
+ [Attributes.TOPIC_NAME]: topicName
150
+ });
151
+ res.observe(metrics.p90, histogram.percentile(90), {
152
+ [Attributes.TOPIC_NAME]: topicName
153
+ });
154
+ }
155
+ }
156
+ };
29
157
  }
@@ -28,6 +28,7 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
28
28
  private peerManager;
29
29
  protected mempools: MemPools<T>;
30
30
  private archiver;
31
+ private epochCache;
31
32
  private proofVerifier;
32
33
  private worldStateSynchronizer;
33
34
  protected logger: Logger;
@@ -113,7 +114,10 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
113
114
  * @returns The number of recipients the data was sent to.
114
115
  */
115
116
  private publishToTopic;
116
- protected preValidateReceivedMessage(msg: Message, msgId: string, source: PeerId): boolean;
117
+ protected preValidateReceivedMessage(msg: Message, msgId: string, source: PeerId): {
118
+ result: boolean;
119
+ topicType?: TopicType;
120
+ };
117
121
  /**
118
122
  * Handles a new gossip message that was received by the client.
119
123
  * @param topic - The message's topic.
@@ -166,12 +170,13 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
166
170
  private getGasFees;
167
171
  validate(txs: Tx[]): Promise<void>;
168
172
  /**
169
- * Create message validators for the given block number.
173
+ * Create message validators for the given block number and timestamp.
170
174
  *
171
175
  * Each validator is a pair of a validator and a severity.
172
176
  * If a validator fails, the peer is penalized with the severity of the validator.
173
177
  *
174
- * @param blockNumber - The block number to create validators for.
178
+ * @param currentBlockNumber - The current synced block number.
179
+ * @param nextSlotTimestamp - The timestamp of the next slot (used to validate txs are not expired).
175
180
  * @returns The message validators.
176
181
  */
177
182
  private createMessageValidators;
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,7 @@ import { P2PInstrumentation } from './instrumentation.js';
57
57
  peerManager;
58
58
  mempools;
59
59
  archiver;
60
+ epochCache;
60
61
  proofVerifier;
61
62
  worldStateSynchronizer;
62
63
  logger;
@@ -77,7 +78,7 @@ import { P2PInstrumentation } from './instrumentation.js';
77
78
  gossipSubEventHandler;
78
79
  instrumentation;
79
80
  constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
80
- super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.logger = logger, this.jobQueue = new SerialQueue(), this.msgIdSeenValidators = {}, this.protocolVersion = '', this.topicStrings = {};
81
+ super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.epochCache = epochCache, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.logger = logger, this.jobQueue = new SerialQueue(), this.msgIdSeenValidators = {}, this.protocolVersion = '', this.topicStrings = {};
81
82
  this.instrumentation = new P2PInstrumentation(telemetry, 'LibP2PService');
82
83
  this.msgIdSeenValidators[TopicType.tx] = new MessageSeenValidator(config.seenMessageCacheSize);
83
84
  this.msgIdSeenValidators[TopicType.block_proposal] = new MessageSeenValidator(config.seenMessageCacheSize);
@@ -388,10 +389,16 @@ import { P2PInstrumentation } from './instrumentation.js';
388
389
  if (!validator || !validator.addMessage(msgId)) {
389
390
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
390
391
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
391
- return false;
392
+ return {
393
+ result: false,
394
+ topicType
395
+ };
392
396
  }
393
397
  this.instrumentation.incMessagePrevalidationStatus(true, topicType);
394
- return true;
398
+ return {
399
+ result: true,
400
+ topicType
401
+ };
395
402
  }
396
403
  /**
397
404
  * Handles a new gossip message that was received by the client.
@@ -406,8 +413,14 @@ import { P2PInstrumentation } from './instrumentation.js';
406
413
  messageId: p2pMessage.id,
407
414
  messageLatency
408
415
  });
409
- if (!this.preValidateReceivedMessage(msg, msgId, source)) {
416
+ const preValidationResult = this.preValidateReceivedMessage(msg, msgId, source);
417
+ if (!preValidationResult.result) {
410
418
  return;
419
+ } else if (preValidationResult.topicType !== undefined) {
420
+ // guard against clock skew & DST
421
+ if (messageLatency > 0) {
422
+ this.instrumentation.recordMessageLatency(preValidationResult.topicType, messageLatency);
423
+ }
411
424
  }
412
425
  if (msg.topic === this.topicStrings[TopicType.tx]) {
413
426
  await this.handleGossipedTx(p2pMessage.payload, msgId, source);
@@ -597,8 +610,10 @@ import { P2PInstrumentation } from './instrumentation.js';
597
610
  return true;
598
611
  }
599
612
  async validatePropagatedTx(tx, peerId) {
600
- const blockNumber = await this.archiver.getBlockNumber() + 1;
601
- const messageValidators = await this.createMessageValidators(blockNumber);
613
+ const currentBlockNumber = await this.archiver.getBlockNumber();
614
+ // We accept transactions if they are not expired by the next slot (checked based on the IncludeByTimestamp field)
615
+ const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
616
+ const messageValidators = await this.createMessageValidators(currentBlockNumber, nextSlotTimestamp);
602
617
  for (const validator of messageValidators){
603
618
  const outcome = await this.runValidations(tx, validator);
604
619
  if (outcome.allPassed) {
@@ -608,7 +623,8 @@ import { P2PInstrumentation } from './instrumentation.js';
608
623
  let { severity } = outcome.failure;
609
624
  // Double spend validator has a special case handler
610
625
  if (name === 'doubleSpendValidator') {
611
- severity = await this.handleDoubleSpendFailure(tx, blockNumber);
626
+ const txBlockNumber = currentBlockNumber + 1; // tx is expected to be in the next block
627
+ severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
612
628
  }
613
629
  this.peerManager.penalizePeer(peerId, severity);
614
630
  return false;
@@ -628,8 +644,10 @@ import { P2PInstrumentation } from './instrumentation.js';
628
644
  return gasFees;
629
645
  }
630
646
  async validate(txs) {
631
- const blockNumber = await this.archiver.getBlockNumber() + 1;
632
- const messageValidators = await this.createMessageValidators(blockNumber);
647
+ const currentBlockNumber = await this.archiver.getBlockNumber();
648
+ // We accept transactions if they are not expired by the next slot (checked based on the IncludeByTimestamp field)
649
+ const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
650
+ const messageValidators = await this.createMessageValidators(currentBlockNumber, nextSlotTimestamp);
633
651
  await Promise.all(txs.map(async (tx)=>{
634
652
  for (const validator of messageValidators){
635
653
  const outcome = await this.runValidations(tx, validator);
@@ -644,17 +662,19 @@ import { P2PInstrumentation } from './instrumentation.js';
644
662
  }));
645
663
  }
646
664
  /**
647
- * Create message validators for the given block number.
665
+ * Create message validators for the given block number and timestamp.
648
666
  *
649
667
  * Each validator is a pair of a validator and a severity.
650
668
  * If a validator fails, the peer is penalized with the severity of the validator.
651
669
  *
652
- * @param blockNumber - The block number to create validators for.
670
+ * @param currentBlockNumber - The current synced block number.
671
+ * @param nextSlotTimestamp - The timestamp of the next slot (used to validate txs are not expired).
653
672
  * @returns The message validators.
654
- */ async createMessageValidators(blockNumber) {
655
- const gasFees = await this.getGasFees(blockNumber - 1);
673
+ */ async createMessageValidators(currentBlockNumber, nextSlotTimestamp) {
674
+ const gasFees = await this.getGasFees(currentBlockNumber);
656
675
  const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
657
- return createTxMessageValidators(blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractTreeRoot, this.archiver, this.proofVerifier, allowedInSetup);
676
+ const blockNumberInWhichTheTxIsConsideredToBeIncluded = currentBlockNumber + 1;
677
+ return createTxMessageValidators(nextSlotTimestamp, blockNumberInWhichTheTxIsConsideredToBeIncluded, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractTreeRoot, this.archiver, this.proofVerifier, allowedInSetup);
658
678
  }
659
679
  /**
660
680
  * Run validations on a tx.
@@ -1 +1 @@
1
- {"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,wBAAwB,0CAMlC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAwC,GACzC,EAAE,wBAAwB,0CA0C5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAuC3G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAgCnG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAG7D"}
1
+ {"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,wBAAwB,0CAMlC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAwC,GACzC,EAAE,wBAAwB,0CA0C5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAuC3G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAgCnG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAG7D"}
@@ -1,4 +1,5 @@
1
1
  import { MockL2BlockSource } from '@aztec/archiver/test';
2
+ import { SecretValue } from '@aztec/foundation/config';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { sleep } from '@aztec/foundation/sleep';
4
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
@@ -33,7 +34,7 @@ import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp
33
34
  const config = {
34
35
  ...p2pBaseConfig,
35
36
  p2pEnabled: true,
36
- peerIdPrivateKey,
37
+ peerIdPrivateKey: new SecretValue(peerIdPrivateKey),
37
38
  p2pIp: `127.0.0.1`,
38
39
  listenAddress: `127.0.0.1`,
39
40
  p2pPort: port,
@@ -1 +1 @@
1
- {"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { timesParallel } from '@aztec/foundation/collection';
2
+ import { SecretValue } from '@aztec/foundation/config';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
4
5
  import { emptyChainConfig } from '@aztec/stdlib/config';
@@ -87,7 +88,7 @@ import { getVersions } from '../versioning.js';
87
88
  peerCheckIntervalMS: 1000,
88
89
  maxPeerCount: 5,
89
90
  p2pEnabled: true,
90
- peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
91
+ peerIdPrivateKey: new SecretValue(Buffer.from(peerId.privateKey).toString('hex')),
91
92
  bootstrapNodeEnrVersionCheck: false,
92
93
  ...chainConfig
93
94
  };
@@ -197,7 +198,7 @@ export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
197
198
  l1ChainId: chainConfig.l1ChainId,
198
199
  p2pIp: '127.0.0.1',
199
200
  p2pPort: port,
200
- peerIdPrivateKey: privateKey,
201
+ peerIdPrivateKey: new SecretValue(privateKey),
201
202
  dataDirectory: undefined,
202
203
  dataStoreMapSizeKB: 0,
203
204
  bootstrapNodes: [],
@@ -69,6 +69,12 @@ function mockEpochCache() {
69
69
  currentSlot: 0n,
70
70
  nextSlot: 0n
71
71
  }),
72
+ getEpochAndSlotInNextL1Slot: ()=>({
73
+ epoch: 0n,
74
+ slot: 0n,
75
+ ts: 0n,
76
+ now: 0n
77
+ }),
72
78
  isInCommittee: ()=>Promise.resolve(false)
73
79
  };
74
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;gBAEnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAKzD,OAAO;IAOP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM;IA2C/C,4BAA4B;IAI5B,kCAAkC;IAIlC;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA8CrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO;CAiCd;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;gBAEnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAKzD,OAAO;IAOP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM;IA2C/C,4BAA4B;IAI5B,kCAAkC;IAIlC;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA8CrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO;CAiCd;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import { sleep } from '@aztec/foundation/sleep';
3
4
  import { fork } from 'child_process';
@@ -40,7 +41,7 @@ class WorkerClientManager {
40
41
  return {
41
42
  ...getP2PDefaultConfig(),
42
43
  p2pEnabled: true,
43
- peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
44
+ peerIdPrivateKey: new SecretValue(this.peerIdPrivateKeys[clientIndex]),
44
45
  listenAddress: '127.0.0.1',
45
46
  p2pIp: '127.0.0.1',
46
47
  p2pPort: port,
package/dest/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import type { Logger } from '@aztec/foundation/log';
2
3
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
4
  import type { DataStoreConfig } from '@aztec/kv-store/config';
@@ -46,10 +47,10 @@ export declare function configureP2PClientAddresses(_config: P2PConfig & DataSto
46
47
  *
47
48
  */
48
49
  export declare function getPeerIdPrivateKey(config: {
49
- peerIdPrivateKey?: string;
50
+ peerIdPrivateKey?: SecretValue<string>;
50
51
  peerIdPrivateKeyPath?: string;
51
52
  dataDirectory?: string;
52
- }, store: AztecAsyncKVStore, logger: Logger): Promise<string>;
53
+ }, store: AztecAsyncKVStore, logger: Logger): Promise<SecretValue<string>>;
53
54
  /**
54
55
  * Create a libp2p peer ID from the private key.
55
56
  * @param privateKey - peer ID private key as hex string
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACT,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,+BAA+B,CACvG,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;KAClD,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;KACtC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAmBtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACT,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,+BAA+B,CACvG,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;KAClD,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;KACtC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAmBtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EACzG,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CA2D9B;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
package/dest/util.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { SecretValue } from '@aztec/foundation/config';
1
2
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
2
3
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
3
4
  import { resolve } from 'dns/promises';
@@ -85,12 +86,12 @@ export async function configureP2PClientAddresses(_config) {
85
86
  await fs.writeFile(filePath, privateKey);
86
87
  };
87
88
  // If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
88
- if (config.peerIdPrivateKey) {
89
+ if (config.peerIdPrivateKey && config.peerIdPrivateKey.getValue().trim()) {
89
90
  if (peerIdPrivateKeyFilePath) {
90
- await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey);
91
+ await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey.getValue());
91
92
  } else {
92
93
  peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
93
- await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
94
+ await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey.getValue());
94
95
  }
95
96
  return config.peerIdPrivateKey;
96
97
  }
@@ -109,7 +110,7 @@ export async function configureP2PClientAddresses(_config) {
109
110
  logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
110
111
  await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
111
112
  }
112
- return storedPeerIdPrivateKey;
113
+ return new SecretValue(storedPeerIdPrivateKey);
113
114
  }
114
115
  // Generate and persist a new private key
115
116
  const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
@@ -121,7 +122,7 @@ export async function configureP2PClientAddresses(_config) {
121
122
  logger.warn('Creating new peer ID private key and persisting it to the lmdb store. Key will be lost on rollup upgrade, specify the peer id private key path and restart the node to persist the peer id private key to a file');
122
123
  await peerIdPrivateKeySingleton.set(privateKeyString);
123
124
  }
124
- return privateKeyString;
125
+ return new SecretValue(privateKeyString);
125
126
  }
126
127
  /**
127
128
  * Create a libp2p peer ID from the private key.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "1.0.0",
3
+ "version": "1.1.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -67,17 +67,17 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "1.0.0",
71
- "@aztec/epoch-cache": "1.0.0",
72
- "@aztec/ethereum": "1.0.0",
73
- "@aztec/foundation": "1.0.0",
74
- "@aztec/kv-store": "1.0.0",
75
- "@aztec/noir-contracts.js": "1.0.0",
76
- "@aztec/noir-protocol-circuits-types": "1.0.0",
77
- "@aztec/protocol-contracts": "1.0.0",
78
- "@aztec/simulator": "1.0.0",
79
- "@aztec/stdlib": "1.0.0",
80
- "@aztec/telemetry-client": "1.0.0",
70
+ "@aztec/constants": "1.1.2",
71
+ "@aztec/epoch-cache": "1.1.2",
72
+ "@aztec/ethereum": "1.1.2",
73
+ "@aztec/foundation": "1.1.2",
74
+ "@aztec/kv-store": "1.1.2",
75
+ "@aztec/noir-contracts.js": "1.1.2",
76
+ "@aztec/noir-protocol-circuits-types": "1.1.2",
77
+ "@aztec/protocol-contracts": "1.1.2",
78
+ "@aztec/simulator": "1.1.2",
79
+ "@aztec/stdlib": "1.1.2",
80
+ "@aztec/telemetry-client": "1.1.2",
81
81
  "@chainsafe/discv5": "9.0.0",
82
82
  "@chainsafe/enr": "3.0.0",
83
83
  "@chainsafe/libp2p-gossipsub": "13.0.0",
@@ -107,7 +107,7 @@
107
107
  "xxhash-wasm": "^1.1.0"
108
108
  },
109
109
  "devDependencies": {
110
- "@aztec/archiver": "1.0.0",
110
+ "@aztec/archiver": "1.1.2",
111
111
  "@jest/globals": "^30.0.0",
112
112
  "@types/jest": "^30.0.0",
113
113
  "@types/node": "^22.15.17",
@@ -45,7 +45,7 @@ export class BootstrapNode implements P2PBootstrapApi {
45
45
  const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store, this.logger);
46
46
 
47
47
  const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
48
- peerIdPrivateKey,
48
+ peerIdPrivateKey.getValue(),
49
49
  p2pIp,
50
50
  config.p2pBroadcastPort!,
51
51
  config.l1ChainId,
@@ -73,7 +73,7 @@ export const createP2PClient = async <T extends P2PClientType>(
73
73
 
74
74
  // Create peer discovery service
75
75
  const peerIdPrivateKey = await getPeerIdPrivateKey(config, store, logger);
76
- const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
76
+ const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey.getValue());
77
77
 
78
78
  const p2pService = await (deps.p2pServiceFactory ?? LibP2PService.new<T>)(clientType, config, peerId, {
79
79
  packageVersion,
@@ -667,7 +667,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
667
667
  private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
668
668
  for (const block of blocks) {
669
669
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
670
- await this.txPool.markAsMined(txHashes, block.number);
670
+ await this.txPool.markAsMined(txHashes, block.header);
671
671
  }
672
672
  }
673
673
 
package/src/config.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  type ConfigMappingsType,
3
+ SecretValue,
3
4
  booleanConfigHelper,
4
5
  floatConfigHelper,
5
6
  getConfigFromMappings,
@@ -51,7 +52,7 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
51
52
  listenAddress: string;
52
53
 
53
54
  /** An optional peer id private key. If blank, will generate a random key. */
54
- peerIdPrivateKey?: string;
55
+ peerIdPrivateKey?: SecretValue<string>;
55
56
 
56
57
  /** An optional path to store generated peer id private keys. If blank, will default to storing any generated keys in the data directory. */
57
58
  peerIdPrivateKeyPath?: string;