@aztec/p2p 0.0.1-commit.f650c0a5c → 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 (124) 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 +46 -31
  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 +5 -3
  65. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  66. package/dest/services/libp2p/libp2p_service.js +33 -20
  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/reqresp/config.d.ts +3 -3
  71. package/dest/services/reqresp/config.d.ts.map +1 -1
  72. package/dest/services/reqresp/interface.d.ts +14 -1
  73. package/dest/services/reqresp/interface.d.ts.map +1 -1
  74. package/dest/services/reqresp/interface.js +10 -0
  75. package/dest/services/reqresp/reqresp.d.ts +4 -2
  76. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  77. package/dest/services/reqresp/reqresp.js +10 -1
  78. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  79. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  80. package/dest/test-helpers/make-test-p2p-clients.js +4 -1
  81. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  82. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  83. package/dest/test-helpers/mock-pubsub.js +36 -11
  84. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  85. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  86. package/dest/test-helpers/reqresp-nodes.js +5 -1
  87. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  88. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  89. package/dest/testbench/p2p_client_testbench_worker.js +7 -2
  90. package/package.json +14 -14
  91. package/src/client/factory.ts +23 -18
  92. package/src/client/p2p_client.ts +11 -3
  93. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +2 -0
  94. package/src/config.ts +19 -7
  95. package/src/mem_pools/attestation_pool/attestation_pool.ts +5 -3
  96. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  97. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  98. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  99. package/src/mem_pools/tx_pool_v2/interfaces.ts +3 -0
  100. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
  101. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +2 -0
  102. package/src/msg_validators/attestation_validator/attestation_validator.ts +18 -7
  103. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  104. package/src/msg_validators/clock_tolerance.ts +68 -0
  105. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -1
  106. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +4 -1
  107. package/src/msg_validators/proposal_validator/proposal_validator.ts +13 -7
  108. package/src/msg_validators/tx_validator/README.md +11 -3
  109. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  110. package/src/msg_validators/tx_validator/factory.ts +3 -1
  111. package/src/msg_validators/tx_validator/gas_validator.ts +64 -31
  112. package/src/services/data_store.ts +5 -13
  113. package/src/services/dummy_service.ts +1 -0
  114. package/src/services/gossipsub/topic_score_params.ts +36 -4
  115. package/src/services/libp2p/instrumentation.ts +14 -0
  116. package/src/services/libp2p/libp2p_service.ts +31 -15
  117. package/src/services/peer-manager/peer_manager.ts +17 -2
  118. package/src/services/reqresp/config.ts +2 -2
  119. package/src/services/reqresp/interface.ts +21 -0
  120. package/src/services/reqresp/reqresp.ts +17 -0
  121. package/src/test-helpers/make-test-p2p-clients.ts +2 -0
  122. package/src/test-helpers/mock-pubsub.ts +34 -5
  123. package/src/test-helpers/reqresp-nodes.ts +4 -0
  124. package/src/testbench/p2p_client_testbench_worker.ts +3 -0
@@ -1,8 +1,10 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { sleep } from '@aztec/foundation/sleep';
3
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
5
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
6
  import type { ContractDataSource } from '@aztec/stdlib/contract';
7
+ import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
6
8
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
9
  import type { TelemetryClient } from '@aztec/telemetry-client';
8
10
 
@@ -55,6 +57,7 @@ export function getMockPubSubP2PServiceFactory(
55
57
  proofVerifier: ClientProtocolCircuitVerifier;
56
58
  worldStateSynchronizer: WorldStateSynchronizer;
57
59
  peerStore: AztecAsyncKVStore;
60
+ blockMinFeesProvider: BlockMinFeesProvider;
58
61
  telemetry: TelemetryClient;
59
62
  logger: Logger;
60
63
  },
@@ -75,6 +78,7 @@ export function getMockPubSubP2PServiceFactory(
75
78
  deps.epochCache,
76
79
  deps.proofVerifier,
77
80
  deps.worldStateSynchronizer,
81
+ deps.blockMinFeesProvider,
78
82
  deps.telemetry,
79
83
  deps.logger,
80
84
  );
@@ -100,6 +104,7 @@ class MockReqResp implements ReqRespInterface {
100
104
  }
101
105
 
102
106
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
107
+ setShouldRejectPeer(): void {}
103
108
 
104
109
  start(
105
110
  subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
@@ -138,6 +143,11 @@ class MockReqResp implements ReqRespInterface {
138
143
  const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
139
144
  const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
140
145
  const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
146
+ const delayMs = this.network.getPropagationDelayMs();
147
+
148
+ if (delayMs > 0) {
149
+ await sleep(delayMs);
150
+ }
141
151
 
142
152
  for (const request of requests) {
143
153
  const requestBuffer = request.toBuffer();
@@ -174,7 +184,12 @@ class MockReqResp implements ReqRespInterface {
174
184
  return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
175
185
  }
176
186
  try {
187
+ const delayMs = this.network.getPropagationDelayMs();
188
+ if (delayMs > 0) {
189
+ await sleep(delayMs);
190
+ }
177
191
  const data = await handler(this.peerId, payload);
192
+
178
193
  return { status: ReqRespStatus.SUCCESS, data };
179
194
  } catch {
180
195
  return { status: ReqRespStatus.FAILURE };
@@ -242,10 +257,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
242
257
  score: (_peerId: PeerIdStr) => 0,
243
258
  };
244
259
 
245
- publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
260
+ async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
246
261
  this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
247
- this.network.publishToPeers(topic, data, this.peerId);
248
- return Promise.resolve({ recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) });
262
+ await this.network.publishToPeers(topic, data, this.peerId);
263
+ return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
249
264
  }
250
265
 
251
266
  receive(msg: GossipsubMessage) {
@@ -281,7 +296,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
281
296
 
282
297
  /**
283
298
  * Mock gossip sub network used for testing.
284
- * All instances of MockGossipSubService connected to the same network will instantly receive the same messages.
299
+ * All instances of MockGossipSubService connected to the same network receive the same messages,
300
+ * optionally delayed by a configurable propagation time.
285
301
  */
286
302
  export class MockGossipSubNetwork {
287
303
  private peers: MockGossipSubService[] = [];
@@ -290,6 +306,15 @@ export class MockGossipSubNetwork {
290
306
 
291
307
  private logger = createLogger('p2p:test:mock-gossipsub-network');
292
308
 
309
+ constructor(
310
+ /** Artificial propagation delay in milliseconds applied to each message delivery. */
311
+ private propagationDelayMs: number = 0,
312
+ ) {}
313
+
314
+ public getPropagationDelayMs(): number {
315
+ return this.propagationDelayMs;
316
+ }
317
+
293
318
  public getPeers(): PeerId[] {
294
319
  return this.peers.map(peer => peer.peerId);
295
320
  }
@@ -306,7 +331,7 @@ export class MockGossipSubNetwork {
306
331
  return this.reqRespPeers;
307
332
  }
308
333
 
309
- public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
334
+ public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
310
335
  const msgId = (this.nextMsgId++).toString();
311
336
  this.logger.debug(`Network is distributing message on topic ${topic}`, {
312
337
  topic,
@@ -315,6 +340,10 @@ export class MockGossipSubNetwork {
315
340
  msgId,
316
341
  });
317
342
 
343
+ if (this.propagationDelayMs > 0) {
344
+ await sleep(this.propagationDelayMs);
345
+ }
346
+
318
347
  const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
319
348
  for (const peer of this.peers) {
320
349
  if (peer.subscribedTopics.has(topic)) {
@@ -6,6 +6,7 @@ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
6
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
7
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
8
8
  import type { ContractDataSource } from '@aztec/stdlib/contract';
9
+ import { GasFees } from '@aztec/stdlib/gas';
9
10
  import type {
10
11
  ClientProtocolCircuitVerifier,
11
12
  IVCProofVerificationResult,
@@ -153,6 +154,8 @@ export async function createTestLibP2PService(
153
154
  epochCache,
154
155
  );
155
156
 
157
+ reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
158
+
156
159
  p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
157
160
  p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
158
161
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
@@ -168,6 +171,7 @@ export async function createTestLibP2PService(
168
171
  epochCache,
169
172
  proofVerifier,
170
173
  worldStateSynchronizer,
174
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
171
175
  telemetry,
172
176
  );
173
177
  }
@@ -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
  );
@@ -417,6 +419,7 @@ process.on('message', async msg => {
417
419
  proofVerifier as ClientProtocolCircuitVerifier,
418
420
  worldState,
419
421
  epochCache,
422
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
420
423
  'test-p2p-bench-worker',
421
424
  undefined,
422
425
  telemetry as TelemetryClient,