@aztec/p2p 0.0.1-commit.6c91f13 → 0.0.1-commit.96bb3f7

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 (135) hide show
  1. package/dest/client/interface.d.ts +18 -5
  2. package/dest/client/interface.d.ts.map +1 -1
  3. package/dest/client/p2p_client.d.ts +10 -13
  4. package/dest/client/p2p_client.d.ts.map +1 -1
  5. package/dest/client/p2p_client.js +448 -117
  6. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  7. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  8. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  9. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  10. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +225 -262
  11. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  12. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  13. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +113 -108
  14. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  15. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  16. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  17. package/dest/mem_pools/attestation_pool/mocks.d.ts +7 -6
  18. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  19. package/dest/mem_pools/attestation_pool/mocks.js +9 -8
  20. package/dest/mem_pools/instrumentation.d.ts +1 -1
  21. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  22. package/dest/mem_pools/instrumentation.js +4 -13
  23. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  24. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  25. package/dest/msg_validators/attestation_validator/attestation_validator.js +12 -10
  26. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  27. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  28. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -10
  29. package/dest/msg_validators/index.d.ts +2 -2
  30. package/dest/msg_validators/index.d.ts.map +1 -1
  31. package/dest/msg_validators/index.js +1 -1
  32. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  33. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  34. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  35. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  36. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  37. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  38. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  39. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  40. package/dest/msg_validators/proposal_validator/index.js +3 -0
  41. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  42. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  43. package/dest/msg_validators/{block_proposal_validator/block_proposal_validator.js → proposal_validator/proposal_validator.js} +19 -21
  44. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  45. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  46. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +183 -0
  47. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  48. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  49. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  50. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  51. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +1 -1
  52. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  53. package/dest/services/dummy_service.d.ts +6 -2
  54. package/dest/services/dummy_service.d.ts.map +1 -1
  55. package/dest/services/dummy_service.js +3 -0
  56. package/dest/services/encoding.d.ts +1 -1
  57. package/dest/services/encoding.d.ts.map +1 -1
  58. package/dest/services/encoding.js +4 -2
  59. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  60. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  61. package/dest/services/libp2p/instrumentation.js +15 -68
  62. package/dest/services/libp2p/libp2p_service.d.ts +27 -10
  63. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  64. package/dest/services/libp2p/libp2p_service.js +696 -137
  65. package/dest/services/peer-manager/metrics.d.ts +1 -1
  66. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  67. package/dest/services/peer-manager/metrics.js +6 -26
  68. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  69. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  70. package/dest/services/peer-manager/peer_manager.js +0 -10
  71. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  72. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  73. package/dest/services/peer-manager/peer_scoring.js +2 -5
  74. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
  75. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  76. package/dest/services/reqresp/metrics.d.ts +1 -1
  77. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  78. package/dest/services/reqresp/metrics.js +5 -21
  79. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  80. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  81. package/dest/services/reqresp/protocols/status.js +2 -0
  82. package/dest/services/reqresp/reqresp.js +402 -24
  83. package/dest/services/service.d.ts +16 -3
  84. package/dest/services/service.d.ts.map +1 -1
  85. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  86. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  87. package/dest/services/tx_collection/instrumentation.js +4 -14
  88. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  89. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  90. package/dest/services/tx_provider_instrumentation.js +6 -19
  91. package/dest/testbench/p2p_client_testbench_worker.js +25 -11
  92. package/dest/testbench/worker_client_manager.d.ts +1 -1
  93. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  94. package/dest/testbench/worker_client_manager.js +6 -1
  95. package/package.json +14 -14
  96. package/src/client/interface.ts +19 -4
  97. package/src/client/p2p_client.ts +77 -127
  98. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  99. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +231 -287
  100. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +162 -140
  101. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  102. package/src/mem_pools/attestation_pool/mocks.ts +13 -9
  103. package/src/mem_pools/instrumentation.ts +9 -18
  104. package/src/msg_validators/attestation_validator/attestation_validator.ts +16 -13
  105. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +9 -12
  106. package/src/msg_validators/index.ts +1 -1
  107. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  108. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  109. package/src/msg_validators/proposal_validator/index.ts +3 -0
  110. package/src/msg_validators/{block_proposal_validator/block_proposal_validator.ts → proposal_validator/proposal_validator.ts} +23 -28
  111. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +206 -0
  112. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  113. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  114. package/src/msg_validators/tx_validator/timestamp_validator.ts +3 -1
  115. package/src/services/dummy_service.ts +6 -0
  116. package/src/services/encoding.ts +3 -1
  117. package/src/services/libp2p/instrumentation.ts +14 -68
  118. package/src/services/libp2p/libp2p_service.ts +324 -100
  119. package/src/services/peer-manager/metrics.ts +5 -26
  120. package/src/services/peer-manager/peer_manager.ts +1 -2
  121. package/src/services/peer-manager/peer_scoring.ts +1 -5
  122. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  123. package/src/services/reqresp/metrics.ts +7 -23
  124. package/src/services/reqresp/protocols/status.ts +2 -1
  125. package/src/services/service.ts +19 -4
  126. package/src/services/tx_collection/instrumentation.ts +4 -21
  127. package/src/services/tx_provider_instrumentation.ts +11 -24
  128. package/src/testbench/p2p_client_testbench_worker.ts +34 -11
  129. package/src/testbench/worker_client_manager.ts +6 -1
  130. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  131. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  132. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  133. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  134. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  135. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -6,7 +6,6 @@ import {
6
6
  type TelemetryClient,
7
7
  type Tracer,
8
8
  type UpDownCounter,
9
- ValueType,
10
9
  getTelemetryClient,
11
10
  } from '@aztec/telemetry-client';
12
11
 
@@ -32,31 +31,11 @@ export class PeerManagerMetrics {
32
31
  this.tracer = telemetryClient.getTracer(name);
33
32
 
34
33
  const meter = telemetryClient.getMeter(name);
35
- this.sentGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_SENT, {
36
- description: 'Number of goodbyes sent to peers',
37
- unit: 'peers',
38
- valueType: ValueType.INT,
39
- });
40
- this.receivedGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_RECEIVED, {
41
- description: 'Number of goodbyes received from peers',
42
- unit: 'peers',
43
- valueType: ValueType.INT,
44
- });
45
- this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT, {
46
- description: 'Number of peers',
47
- unit: 'peers',
48
- valueType: ValueType.INT,
49
- });
50
- this.lowScoreDisconnects = meter.createUpDownCounter(Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
51
- description: 'Number of peers disconnected due to low score',
52
- unit: 'peers',
53
- valueType: ValueType.INT,
54
- });
55
- this.peerConnectionDuration = meter.createHistogram(Metrics.PEER_MANAGER_PEER_CONNECTION_DURATION, {
56
- description: 'Time duration between peer connection and disconnection',
57
- unit: 'ms',
58
- valueType: ValueType.INT,
59
- });
34
+ this.sentGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_SENT);
35
+ this.receivedGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_RECEIVED);
36
+ this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
37
+ this.lowScoreDisconnects = meter.createUpDownCounter(Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS);
38
+ this.peerConnectionDuration = meter.createHistogram(Metrics.PEER_MANAGER_PEER_CONNECTION_DURATION);
60
39
  }
61
40
 
62
41
  public recordGoodbyeSent(reason: GoodByeReason) {
@@ -7,7 +7,7 @@ import { bufferToHex } from '@aztec/foundation/string';
7
7
  import { DateProvider } from '@aztec/foundation/timer';
8
8
  import type { PeerInfo, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
9
  import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
10
- import { type TelemetryClient, trackSpan } from '@aztec/telemetry-client';
10
+ import type { TelemetryClient } from '@aztec/telemetry-client';
11
11
 
12
12
  import type { Connection, PeerId } from '@libp2p/interface';
13
13
  import { peerIdFromString } from '@libp2p/peer-id';
@@ -161,7 +161,6 @@ export class PeerManager implements PeerManagerInterface {
161
161
  return this.metrics.tracer;
162
162
  }
163
163
 
164
- @trackSpan('PeerManager.heartbeat')
165
164
  public async heartbeat() {
166
165
  this.heartbeatCounter++;
167
166
  this.peerScoring.decayAllScores();
@@ -6,7 +6,6 @@ import {
6
6
  Metrics,
7
7
  type TelemetryClient,
8
8
  type UpDownCounter,
9
- ValueType,
10
9
  getTelemetryClient,
11
10
  } from '@aztec/telemetry-client';
12
11
 
@@ -53,10 +52,7 @@ export class PeerScoring {
53
52
 
54
53
  const meter = telemetry.getMeter('PeerScoring');
55
54
 
56
- this.peerStateCounter = meter.createUpDownCounter(Metrics.P2P_PEER_STATE_COUNT, {
57
- description: 'Count of peers by state (Healthy, Disconnect, Banned)',
58
- valueType: ValueType.INT,
59
- });
55
+ this.peerStateCounter = meter.createUpDownCounter(Metrics.P2P_PEER_STATE_COUNT);
60
56
  }
61
57
 
62
58
  public penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity) {
@@ -261,7 +261,9 @@ export class ConnectionSampler {
261
261
  }
262
262
  } catch (error) {
263
263
  this.logger.error(
264
- `Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${stream.id}`,
264
+ `Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${
265
+ stream.id
266
+ }`,
265
267
  { error },
266
268
  );
267
269
  }
@@ -1,5 +1,5 @@
1
1
  // Request response metrics
2
- import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
+ import { Attributes, Metrics } from '@aztec/telemetry-client';
3
3
  import type { TelemetryClient, Tracer, UpDownCounter } from '@aztec/telemetry-client';
4
4
 
5
5
  export class ReqRespMetrics {
@@ -18,28 +18,12 @@ export class ReqRespMetrics {
18
18
  this.tracer = telemetryClient.getTracer(name);
19
19
 
20
20
  const meter = telemetryClient.getMeter(name);
21
- this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS, {
22
- description: 'Number of requests sent to peers',
23
- unit: 'requests',
24
- valueType: ValueType.INT,
25
- });
26
- this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS, {
27
- description: 'Number of requests received from peers',
28
- unit: 'requests',
29
- valueType: ValueType.INT,
30
- });
31
-
32
- this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS, {
33
- description: 'Number of failed outbound requests - nodes not getting valid responses',
34
- unit: 'requests',
35
- valueType: ValueType.INT,
36
- });
37
-
38
- this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS, {
39
- description: 'Number of failed inbound requests - node failing to respond to requests',
40
- unit: 'requests',
41
- valueType: ValueType.INT,
42
- });
21
+ this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS);
22
+ this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS);
23
+
24
+ this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS);
25
+
26
+ this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS);
43
27
  }
44
28
 
45
29
  public recordRequestSent(protocol: string) {
@@ -19,9 +19,10 @@ export class StatusMessage {
19
19
  readonly latestBlockNumber: BlockNumber,
20
20
  readonly latestBlockHash: string,
21
21
  readonly finalizedBlockNumber: BlockNumber,
22
+ ) {
22
23
  //TODO: add finalizedBlockHash
23
24
  //readonly finalizedBlockHash: string,
24
- ) {}
25
+ }
25
26
 
26
27
  /**
27
28
  * Deserializes the StatusMessage object from a Buffer.
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
3
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
4
  import type { Tx } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -22,10 +22,23 @@ export enum PeerDiscoveryState {
22
22
  STOPPED = 'stopped',
23
23
  }
24
24
 
25
- export type P2PBlockReceivedCallback = (
26
- block: BlockProposal,
25
+ /**
26
+ * Callback for when a block proposal is received.
27
+ * Validators validate but DO NOT attest to individual blocks - attestations are only for checkpoints.
28
+ * @returns true if the proposal is valid, false otherwise
29
+ */
30
+ export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<boolean>;
31
+
32
+ /**
33
+ * Callback for when a checkpoint proposal is received.
34
+ * The checkpoint proposal is passed as CheckpointProposalCore (without lastBlock) since
35
+ * the lastBlock is extracted and stored separately as a BlockProposal, and the block
36
+ * callback is invoked and awaited before this checkpoint callback.
37
+ */
38
+ export type P2PCheckpointReceivedCallback = (
39
+ checkpoint: CheckpointProposalCore,
27
40
  sender: PeerId,
28
- ) => Promise<BlockAttestation[] | undefined>;
41
+ ) => Promise<CheckpointAttestation[] | undefined>;
29
42
 
30
43
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
31
44
 
@@ -70,6 +83,8 @@ export interface P2PService {
70
83
  // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
71
84
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
72
85
 
86
+ registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
87
+
73
88
  getEnr(): ENR | undefined;
74
89
 
75
90
  getPeers(includePending?: boolean): PeerInfo[];
@@ -1,11 +1,4 @@
1
- import {
2
- Attributes,
3
- type Histogram,
4
- Metrics,
5
- type TelemetryClient,
6
- type UpDownCounter,
7
- ValueType,
8
- } from '@aztec/telemetry-client';
1
+ import { Attributes, type Histogram, Metrics, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
9
2
 
10
3
  import type { CollectionMethod } from './tx_collection.js';
11
4
 
@@ -17,21 +10,11 @@ export class TxCollectionInstrumentation {
17
10
  constructor(client: TelemetryClient, name: string) {
18
11
  const meter = client.getMeter(name);
19
12
 
20
- this.txsCollected = meter.createUpDownCounter(Metrics.TX_COLLECTOR_COUNT, {
21
- description: 'The number of txs collected',
22
- });
13
+ this.txsCollected = meter.createUpDownCounter(Metrics.TX_COLLECTOR_COUNT);
23
14
 
24
- this.collectionDurationPerTx = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_TX, {
25
- unit: 'ms',
26
- description: 'Average duration per tx of an individual tx collection request',
27
- valueType: ValueType.INT,
28
- });
15
+ this.collectionDurationPerTx = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_TX);
29
16
 
30
- this.collectionDurationPerRequest = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_REQUEST, {
31
- unit: 'ms',
32
- description: 'Total duration of an individual tx collection request',
33
- valueType: ValueType.INT,
34
- });
17
+ this.collectionDurationPerRequest = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_REQUEST);
35
18
  }
36
19
 
37
20
  increaseTxsFor(what: CollectionMethod, count: number, duration: number) {
@@ -12,30 +12,17 @@ export class TxProviderInstrumentation {
12
12
  constructor(client: TelemetryClient, name: string) {
13
13
  const meter = client.getMeter(name);
14
14
 
15
- this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT, {
16
- description: 'The number of txs taken from block proposals',
17
- });
18
-
19
- this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT, {
20
- description: 'The number of txs taken from the local mempool',
21
- });
22
-
23
- this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT, {
24
- description: 'The number of txs taken from the p2p network',
25
- });
26
-
27
- this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT, {
28
- description: 'The number of txs not found anywhere',
29
- });
30
-
31
- this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION, {
32
- description: 'The fraction of transaction requested from peers',
33
- });
34
-
35
- this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY, {
36
- unit: 'ms',
37
- description: 'The time it took to request missing transactions from p2p',
38
- });
15
+ this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT);
16
+
17
+ this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT);
18
+
19
+ this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT);
20
+
21
+ this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT);
22
+
23
+ this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION);
24
+
25
+ this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY);
39
26
  }
40
27
 
41
28
  incTxsFromProposals(count: number) {
@@ -6,6 +6,7 @@
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
8
  import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
9
+ import { SecretValue } from '@aztec/foundation/config';
9
10
  import { EthAddress } from '@aztec/foundation/eth-address';
10
11
  import { createLogger } from '@aztec/foundation/log';
11
12
  import { sleep } from '@aztec/foundation/sleep';
@@ -65,19 +66,23 @@ function mockTxPool(): TxPool {
65
66
  function mockAttestationPool(): AttestationPool {
66
67
  return {
67
68
  isEmpty: () => Promise.resolve(false),
68
- addAttestations: () => Promise.resolve(),
69
- deleteAttestations: () => Promise.resolve(),
70
- deleteAttestationsOlderThan: () => Promise.resolve(),
71
- deleteAttestationsForSlot: () => Promise.resolve(),
72
- deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
73
- getAttestationsForSlot: () => Promise.resolve([]),
74
- getAttestationsForSlotAndProposal: () => Promise.resolve([]),
75
69
  addBlockProposal: () => Promise.resolve(),
76
70
  getBlockProposal: () => Promise.resolve(undefined),
77
71
  hasBlockProposal: () => Promise.resolve(false),
78
- hasAttestation: () => Promise.resolve(false),
79
72
  canAddProposal: () => Promise.resolve(true),
80
- canAddAttestation: () => Promise.resolve(true),
73
+ // Checkpoint attestation methods
74
+ addCheckpointProposal: () => Promise.resolve(),
75
+ getCheckpointProposal: () => Promise.resolve(undefined),
76
+ hasCheckpointProposal: () => Promise.resolve(false),
77
+ addCheckpointAttestations: () => Promise.resolve(),
78
+ getCheckpointAttestationsForSlot: () => Promise.resolve([]),
79
+ getCheckpointAttestationsForSlotAndProposal: () => Promise.resolve([]),
80
+ deleteCheckpointAttestationsOlderThan: () => Promise.resolve(),
81
+ hasReachedCheckpointProposalCap: () => Promise.resolve(false),
82
+ hasReachedCheckpointAttestationCap: () => Promise.resolve(false),
83
+ canAddCheckpointProposal: () => Promise.resolve(true),
84
+ canAddCheckpointAttestation: () => Promise.resolve(true),
85
+ hasCheckpointAttestation: () => Promise.resolve(false),
81
86
  };
82
87
  }
83
88
 
@@ -94,6 +99,7 @@ function mockEpochCache(): EpochCacheInterface {
94
99
  currentSlot: SlotNumber.ZERO,
95
100
  nextSlot: SlotNumber.ZERO,
96
101
  }),
102
+ getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
97
103
  getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
98
104
  isInCommittee: () => Promise.resolve(false),
99
105
  getRegisteredValidators: () => Promise.resolve([]),
@@ -189,9 +195,25 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
189
195
 
190
196
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
191
197
  process.on('message', async msg => {
192
- const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
198
+ // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
199
+ // SecretValue's private fields can't be serialized via IPC
200
+ const {
201
+ type,
202
+ config: rawConfig,
203
+ clientIndex,
204
+ } = msg as {
205
+ type: string;
206
+ config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
207
+ clientIndex: number;
208
+ };
193
209
  try {
194
210
  if (type === 'START') {
211
+ // Re-wrap the peerIdPrivateKey with SecretValue
212
+ const config: P2PConfig = {
213
+ ...rawConfig,
214
+ peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
215
+ } as P2PConfig;
216
+
195
217
  const txPool = mockTxPool();
196
218
  const attestationPool = mockAttestationPool();
197
219
  const epochCache = mockEpochCache();
@@ -224,14 +246,15 @@ process.on('message', async msg => {
224
246
  );
225
247
 
226
248
  // Create test service with validation disabled
249
+ // Note: Parameter order must match LibP2PService constructor
227
250
  const testService = new TestLibP2PService(
228
251
  P2PClientType.Full,
229
252
  config,
230
253
  (client as any).p2pService.node,
231
254
  (client as any).p2pService.peerDiscoveryService,
232
- (client as any).p2pService.mempools,
233
255
  (client as any).p2pService.reqresp,
234
256
  (client as any).p2pService.peerManager,
257
+ (client as any).p2pService.mempools,
235
258
  (client as any).p2pService.archiver,
236
259
  epochCache,
237
260
  proofVerifier,
@@ -73,7 +73,12 @@ class WorkerClientManager {
73
73
  clientIndex: number,
74
74
  ): [ChildProcess, Promise<void>] {
75
75
  const childProcess = fork(workerPath);
76
- childProcess.send({ type: 'START', config, clientIndex });
76
+ // Extract the raw peerIdPrivateKey value since SecretValue can't be serialized via IPC
77
+ const serializedConfig = {
78
+ ...config,
79
+ peerIdPrivateKey: config.peerIdPrivateKey?.getValue(),
80
+ };
81
+ childProcess.send({ type: 'START', config: serializedConfig, clientIndex });
77
82
 
78
83
  // Handle unexpected child process exit
79
84
  childProcess.on('exit', (code, signal) => {
@@ -1,12 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
- export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
- private epochCache;
5
- private logger;
6
- private txsPermitted;
7
- constructor(epochCache: EpochCacheInterface, opts: {
8
- txsPermitted: boolean;
9
- });
10
- validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined>;
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdGLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBRTlCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUkzRTtJQUVLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0ErRTNFO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAE9B,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAI3E;IAEK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA+E3E;CACF"}
@@ -1,2 +0,0 @@
1
- export * from './block_proposal_validator.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9ibG9ja19wcm9wb3NhbF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -1 +0,0 @@
1
- export * from './block_proposal_validator.js';
@@ -1 +0,0 @@
1
- export * from './block_proposal_validator.js';