@aztec/p2p 0.0.1-commit.f5d02921e → 0.0.1-commit.f7ea82942

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 (156) hide show
  1. package/dest/client/factory.d.ts +3 -2
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +16 -15
  4. package/dest/client/p2p_client.d.ts +1 -1
  5. package/dest/client/p2p_client.d.ts.map +1 -1
  6. package/dest/client/p2p_client.js +9 -2
  7. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +4 -1
  8. package/dest/config.d.ts +103 -99
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +11 -6
  11. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -2
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  13. package/dest/mem_pools/attestation_pool/attestation_pool.js +5 -3
  14. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  15. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  16. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  17. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  18. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  19. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  20. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  21. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +4 -1
  22. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  24. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  25. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +8 -5
  26. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  27. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +2 -1
  29. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  30. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  31. package/dest/msg_validators/attestation_validator/attestation_validator.js +17 -9
  32. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  33. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  34. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  35. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  36. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  37. package/dest/msg_validators/clock_tolerance.js +50 -0
  38. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +2 -1
  39. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  40. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +2 -1
  41. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  42. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -1
  43. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  44. package/dest/msg_validators/proposal_validator/proposal_validator.js +16 -8
  45. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  46. package/dest/msg_validators/tx_validator/factory.d.ts +2 -2
  47. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  48. package/dest/msg_validators/tx_validator/factory.js +3 -3
  49. package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
  50. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  51. package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
  52. package/dest/services/data_store.d.ts +1 -1
  53. package/dest/services/data_store.d.ts.map +1 -1
  54. package/dest/services/data_store.js +5 -5
  55. package/dest/services/dummy_service.d.ts +2 -1
  56. package/dest/services/dummy_service.d.ts.map +1 -1
  57. package/dest/services/dummy_service.js +1 -0
  58. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  59. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  60. package/dest/services/gossipsub/topic_score_params.js +21 -4
  61. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  62. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  63. package/dest/services/libp2p/instrumentation.js +14 -0
  64. package/dest/services/libp2p/libp2p_service.d.ts +6 -17
  65. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  66. package/dest/services/libp2p/libp2p_service.js +37 -73
  67. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  68. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  69. package/dest/services/peer-manager/peer_manager.js +15 -2
  70. package/dest/services/peer-manager/peer_scoring.d.ts +3 -1
  71. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  72. package/dest/services/peer-manager/peer_scoring.js +4 -0
  73. package/dest/services/reqresp/config.d.ts +3 -3
  74. package/dest/services/reqresp/config.d.ts.map +1 -1
  75. package/dest/services/reqresp/interface.d.ts +14 -9
  76. package/dest/services/reqresp/interface.d.ts.map +1 -1
  77. package/dest/services/reqresp/interface.js +10 -11
  78. package/dest/services/reqresp/metrics.d.ts +1 -1
  79. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  80. package/dest/services/reqresp/metrics.js +0 -1
  81. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  82. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  83. package/dest/services/reqresp/protocols/index.js +0 -1
  84. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  85. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  86. package/dest/services/reqresp/protocols/tx.js +1 -3
  87. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  88. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  89. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  90. package/dest/services/reqresp/reqresp.d.ts +4 -2
  91. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  92. package/dest/services/reqresp/reqresp.js +11 -2
  93. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  94. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  95. package/dest/test-helpers/make-test-p2p-clients.js +4 -1
  96. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  97. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  98. package/dest/test-helpers/mock-pubsub.js +36 -11
  99. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  100. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  101. package/dest/test-helpers/reqresp-nodes.js +5 -3
  102. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  103. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  104. package/dest/test-helpers/testbench-utils.js +1 -0
  105. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  106. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  107. package/dest/testbench/p2p_client_testbench_worker.js +29 -2
  108. package/dest/testbench/worker_client_manager.d.ts +8 -1
  109. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  110. package/dest/testbench/worker_client_manager.js +49 -0
  111. package/package.json +14 -14
  112. package/src/client/factory.ts +23 -18
  113. package/src/client/p2p_client.ts +11 -3
  114. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +2 -0
  115. package/src/config.ts +19 -7
  116. package/src/mem_pools/attestation_pool/attestation_pool.ts +5 -3
  117. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  118. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  119. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  120. package/src/mem_pools/tx_pool_v2/interfaces.ts +3 -0
  121. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
  122. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +2 -0
  123. package/src/msg_validators/attestation_validator/attestation_validator.ts +18 -7
  124. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  125. package/src/msg_validators/clock_tolerance.ts +68 -0
  126. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -1
  127. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +4 -1
  128. package/src/msg_validators/proposal_validator/proposal_validator.ts +13 -7
  129. package/src/msg_validators/tx_validator/README.md +11 -3
  130. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  131. package/src/msg_validators/tx_validator/factory.ts +3 -1
  132. package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
  133. package/src/services/data_store.ts +5 -13
  134. package/src/services/dummy_service.ts +1 -0
  135. package/src/services/gossipsub/topic_score_params.ts +36 -4
  136. package/src/services/libp2p/instrumentation.ts +14 -0
  137. package/src/services/libp2p/libp2p_service.ts +32 -68
  138. package/src/services/peer-manager/peer_manager.ts +17 -2
  139. package/src/services/peer-manager/peer_scoring.ts +6 -0
  140. package/src/services/reqresp/config.ts +2 -2
  141. package/src/services/reqresp/interface.ts +21 -11
  142. package/src/services/reqresp/metrics.ts +0 -1
  143. package/src/services/reqresp/protocols/index.ts +0 -1
  144. package/src/services/reqresp/protocols/tx.ts +1 -3
  145. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  146. package/src/services/reqresp/reqresp.ts +18 -1
  147. package/src/test-helpers/make-test-p2p-clients.ts +2 -0
  148. package/src/test-helpers/mock-pubsub.ts +34 -5
  149. package/src/test-helpers/reqresp-nodes.ts +4 -2
  150. package/src/test-helpers/testbench-utils.ts +1 -0
  151. package/src/testbench/p2p_client_testbench_worker.ts +30 -0
  152. package/src/testbench/worker_client_manager.ts +55 -0
  153. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  154. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  155. package/dest/services/reqresp/protocols/block.js +0 -32
  156. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -17,6 +17,7 @@ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
17
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
18
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
19
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { GasFees } from '@aztec/stdlib/gas';
20
21
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
21
22
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
23
  import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
@@ -116,6 +117,7 @@ class TestLibP2PService extends LibP2PService {
116
117
  epochCache,
117
118
  proofVerifier,
118
119
  worldStateSynchronizer,
120
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
119
121
  telemetry,
120
122
  logger,
121
123
  );
@@ -204,6 +206,25 @@ function installUnlimitedRateLimits(client: P2PClient): void {
204
206
  rateLimiter.allow = () => RateLimitStatus.Allowed;
205
207
  }
206
208
 
209
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
210
+ function resetPeerScores(client: P2PClient): void {
211
+ const peerManager = (client as any).p2pService.peerManager;
212
+ const peerScoring = peerManager?.peerScoring;
213
+ if (peerScoring?.resetAllScores) {
214
+ peerScoring.resetAllScores();
215
+ }
216
+ }
217
+
218
+ /** Returns the number of connected peers for connectivity checks. */
219
+ function getConnectedPeerCount(client: P2PClient): number {
220
+ const p2pService = (client as any).p2pService;
221
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
222
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
223
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
224
+ }
225
+ return 0;
226
+ }
227
+
207
228
  async function runAggregatorBenchmark(
208
229
  client: P2PClient,
209
230
  blockProposal: BlockProposal,
@@ -398,6 +419,7 @@ process.on('message', async msg => {
398
419
  proofVerifier as ClientProtocolCircuitVerifier,
399
420
  worldState,
400
421
  epochCache,
422
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
401
423
  'test-p2p-bench-worker',
402
424
  undefined,
403
425
  telemetry as TelemetryClient,
@@ -452,6 +474,13 @@ process.on('message', async msg => {
452
474
  }
453
475
  break;
454
476
 
477
+ case 'GET_PEER_COUNT':
478
+ process.send!({
479
+ type: 'PEER_COUNT',
480
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
481
+ });
482
+ break;
483
+
455
484
  case 'BENCH_REQRESP': {
456
485
  const benchCmd = cmd as BenchReqRespCommand;
457
486
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -468,6 +497,7 @@ process.on('message', async msg => {
468
497
  // Reset state before each benchmark run to avoid cross-run contamination
469
498
  workerTxPool.resetState();
470
499
  workerAttestationPool.resetState();
500
+ resetPeerScores(workerClient);
471
501
 
472
502
  installUnlimitedRateLimits(workerClient);
473
503
 
@@ -424,6 +424,61 @@ class WorkerClientManager {
424
424
  this.logger.info('All worker processes cleaned up');
425
425
  }
426
426
 
427
+ /**
428
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
429
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
430
+ * caused connection failures.
431
+ */
432
+ async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
433
+ const waitInterval = 1000;
434
+ let waited = 0;
435
+
436
+ while (waited < timeoutMs) {
437
+ const count = await this.getPeerCount(0, 5000);
438
+ if (count >= minPeers) {
439
+ this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
440
+ return count;
441
+ }
442
+ this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
443
+ await sleep(waitInterval);
444
+ waited += waitInterval;
445
+ }
446
+
447
+ const finalCount = await this.getPeerCount(0, 5000);
448
+ this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
449
+ return finalCount;
450
+ }
451
+
452
+ private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
453
+ return new Promise<number>(resolve => {
454
+ let resolved = false;
455
+
456
+ const handler = (msg: any) => {
457
+ if (resolved) {
458
+ return;
459
+ }
460
+ if (msg.type === 'PEER_COUNT') {
461
+ resolved = true;
462
+ clearTimeout(timeout);
463
+ this.processes[clientIndex].off('message', handler);
464
+ resolve(msg.count as number);
465
+ }
466
+ };
467
+
468
+ const timeout = setTimeout(() => {
469
+ if (resolved) {
470
+ return;
471
+ }
472
+ resolved = true;
473
+ this.processes[clientIndex].off('message', handler);
474
+ resolve(0);
475
+ }, timeoutMs);
476
+
477
+ this.processes[clientIndex].on('message', handler);
478
+ this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
479
+ });
480
+ }
481
+
427
482
  /**
428
483
  * Run a req/resp benchmark across all worker clients.
429
484
  *
@@ -1,9 +0,0 @@
1
- import type { L2BlockSource } from '@aztec/stdlib/block';
2
- import type { ReqRespSubProtocolHandler } from '../interface.js';
3
- /**
4
- * Handler for L2 Block requests
5
- * @param l2BlockSource - source for L2 blocks
6
- * @returns the Block request handler
7
- * */
8
- export declare function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubProtocolHandler;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2pFOzs7O0tBSUs7QUFDTCx3QkFBZ0IsbUJBQW1CLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyx5QkFBeUIsQ0FzQjNGIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;KAIK;AACL,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,yBAAyB,CAsB3F"}
@@ -1,32 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { ReqRespStatus, ReqRespStatusError } from '../status.js';
4
- /**
5
- * Handler for L2 Block requests
6
- * @param l2BlockSource - source for L2 blocks
7
- * @returns the Block request handler
8
- * */ export function reqRespBlockHandler(l2BlockSource) {
9
- /**
10
- * @param peerId - the peer ID of the requester
11
- * @param msg - the block request message, which is expected to contain valid block number as a Buffer
12
- * @returns a Buffer containing the requested block data, or an empty Buffer if the block is not found
13
- * @throws ReqRespStatusError if the input msg is not a valid block number
14
- * */ return async (_peerId, msg)=>{
15
- let blockNumber;
16
- try {
17
- blockNumber = Fr.fromBuffer(msg);
18
- } catch (err) {
19
- throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, {
20
- cause: err
21
- });
22
- }
23
- try {
24
- const foundBlock = await l2BlockSource.getBlock(BlockNumber(Number(blockNumber)));
25
- return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
26
- } catch (err) {
27
- throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, {
28
- cause: err
29
- });
30
- }
31
- };
32
- }
@@ -1,37 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import type { L2BlockSource } from '@aztec/stdlib/block';
4
-
5
- import type { PeerId } from '@libp2p/interface';
6
-
7
- import type { ReqRespSubProtocolHandler } from '../interface.js';
8
- import { ReqRespStatus, ReqRespStatusError } from '../status.js';
9
-
10
- /**
11
- * Handler for L2 Block requests
12
- * @param l2BlockSource - source for L2 blocks
13
- * @returns the Block request handler
14
- * */
15
- export function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubProtocolHandler {
16
- /**
17
- * @param peerId - the peer ID of the requester
18
- * @param msg - the block request message, which is expected to contain valid block number as a Buffer
19
- * @returns a Buffer containing the requested block data, or an empty Buffer if the block is not found
20
- * @throws ReqRespStatusError if the input msg is not a valid block number
21
- * */
22
- return async (_peerId: PeerId, msg: Buffer) => {
23
- let blockNumber: Fr;
24
- try {
25
- blockNumber = Fr.fromBuffer(msg);
26
- } catch (err: any) {
27
- throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, { cause: err });
28
- }
29
-
30
- try {
31
- const foundBlock = await l2BlockSource.getBlock(BlockNumber(Number(blockNumber)));
32
- return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
33
- } catch (err: any) {
34
- throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, { cause: err });
35
- }
36
- };
37
- }