@aztec/p2p 0.86.0 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  2. package/dest/client/factory.d.ts +4 -1
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +16 -14
  5. package/dest/client/index.d.ts +1 -0
  6. package/dest/client/index.d.ts.map +1 -1
  7. package/dest/client/index.js +1 -0
  8. package/dest/client/interface.d.ts +155 -0
  9. package/dest/client/interface.d.ts.map +1 -0
  10. package/dest/client/interface.js +9 -0
  11. package/dest/client/p2p_client.d.ts +26 -164
  12. package/dest/client/p2p_client.d.ts.map +1 -1
  13. package/dest/client/p2p_client.js +185 -114
  14. package/dest/config.d.ts +5 -6
  15. package/dest/config.d.ts.map +1 -1
  16. package/dest/config.js +6 -11
  17. package/dest/enr/generate-enr.d.ts +9 -1
  18. package/dest/enr/generate-enr.d.ts.map +1 -1
  19. package/dest/enr/generate-enr.js +24 -2
  20. package/dest/index.d.ts +1 -0
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +1 -0
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +2 -0
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +4 -4
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +1 -0
  27. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +8 -2
  29. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +1 -0
  30. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +5 -2
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  34. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +4 -0
  35. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +50 -14
  37. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +3 -0
  38. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool/memory_tx_pool.js +9 -0
  40. package/dest/mem_pools/tx_pool/tx_pool.d.ts +9 -0
  41. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +13 -5
  44. package/dest/msg_validators/attestation_validator/attestation_validator.js +1 -1
  45. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +1 -1
  46. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  47. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  48. package/dest/msg_validators/tx_validator/data_validator.js +15 -14
  49. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -2
  50. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  51. package/dest/msg_validators/tx_validator/double_spend_validator.js +2 -2
  52. package/dest/msg_validators/tx_validator/factory.d.ts +14 -0
  53. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  54. package/dest/msg_validators/tx_validator/factory.js +62 -0
  55. package/dest/msg_validators/tx_validator/gas_validator.js +3 -3
  56. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +8 -4
  57. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  58. package/dest/msg_validators/tx_validator/metadata_validator.js +35 -17
  59. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/tx_validator/phases_validator.js +1 -1
  61. package/dest/msg_validators/tx_validator/tx_proof_validator.js +1 -1
  62. package/dest/services/discv5/discV5_service.d.ts +2 -2
  63. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  64. package/dest/services/discv5/discV5_service.js +9 -13
  65. package/dest/services/dummy_service.d.ts +3 -3
  66. package/dest/services/dummy_service.d.ts.map +1 -1
  67. package/dest/services/dummy_service.js +6 -1
  68. package/dest/services/encoding.d.ts +1 -3
  69. package/dest/services/encoding.d.ts.map +1 -1
  70. package/dest/services/libp2p/libp2p_service.d.ts +4 -2
  71. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  72. package/dest/services/libp2p/libp2p_service.js +94 -88
  73. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  74. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  75. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  76. package/dest/services/peer-manager/peer_manager.js +11 -2
  77. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  78. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -2
  79. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  80. package/dest/services/reqresp/connection-sampler/connection_sampler.js +41 -21
  81. package/dest/services/reqresp/interface.d.ts +1 -3
  82. package/dest/services/reqresp/interface.d.ts.map +1 -1
  83. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  84. package/dest/services/reqresp/protocols/goodbye.d.ts +0 -2
  85. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  86. package/dest/services/reqresp/protocols/goodbye.js +1 -1
  87. package/dest/services/reqresp/protocols/ping.d.ts +0 -2
  88. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  89. package/dest/services/reqresp/protocols/status.d.ts +0 -2
  90. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  91. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  92. package/dest/services/reqresp/reqresp.d.ts +1 -3
  93. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  94. package/dest/services/reqresp/reqresp.js +13 -10
  95. package/dest/services/service.d.ts +4 -3
  96. package/dest/services/service.d.ts.map +1 -1
  97. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  98. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  99. package/dest/test-helpers/make-test-p2p-clients.js +2 -2
  100. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  101. package/dest/test-helpers/reqresp-nodes.js +1 -1
  102. package/dest/testbench/p2p_client_testbench_worker.js +11 -6
  103. package/dest/testbench/testbench.js +1 -1
  104. package/dest/testbench/worker_client_manager.d.ts +0 -1
  105. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  106. package/dest/testbench/worker_client_manager.js +2 -2
  107. package/dest/types/index.d.ts +1 -0
  108. package/dest/types/index.d.ts.map +1 -1
  109. package/dest/types/index.js +1 -0
  110. package/dest/versioning.d.ts +2 -2
  111. package/dest/versioning.d.ts.map +1 -1
  112. package/dest/versioning.js +6 -1
  113. package/package.json +15 -15
  114. package/src/bootstrap/bootstrap.ts +1 -1
  115. package/src/client/factory.ts +38 -33
  116. package/src/client/index.ts +1 -0
  117. package/src/client/interface.ts +186 -0
  118. package/src/client/p2p_client.ts +226 -287
  119. package/src/config.ts +11 -18
  120. package/src/enr/generate-enr.ts +35 -3
  121. package/src/index.ts +1 -0
  122. package/src/mem_pools/attestation_pool/attestation_pool.ts +3 -0
  123. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +4 -4
  124. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +11 -4
  125. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +10 -3
  126. package/src/mem_pools/attestation_pool/mocks.ts +2 -2
  127. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +79 -34
  128. package/src/mem_pools/tx_pool/memory_tx_pool.ts +16 -1
  129. package/src/mem_pools/tx_pool/tx_pool.ts +12 -0
  130. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +9 -3
  131. package/src/msg_validators/attestation_validator/attestation_validator.ts +1 -1
  132. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +1 -1
  133. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  134. package/src/msg_validators/tx_validator/data_validator.ts +24 -18
  135. package/src/msg_validators/tx_validator/double_spend_validator.ts +2 -2
  136. package/src/msg_validators/tx_validator/factory.ts +94 -0
  137. package/src/msg_validators/tx_validator/gas_validator.ts +3 -3
  138. package/src/msg_validators/tx_validator/metadata_validator.ts +50 -14
  139. package/src/msg_validators/tx_validator/phases_validator.ts +6 -2
  140. package/src/msg_validators/tx_validator/tx_proof_validator.ts +1 -1
  141. package/src/services/discv5/discV5_service.ts +14 -12
  142. package/src/services/dummy_service.ts +8 -2
  143. package/src/services/libp2p/libp2p_service.ts +102 -111
  144. package/src/services/peer-manager/metrics.ts +4 -1
  145. package/src/services/peer-manager/peer_manager.ts +18 -1
  146. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +5 -1
  147. package/src/services/reqresp/connection-sampler/connection_sampler.ts +42 -19
  148. package/src/services/reqresp/metrics.ts +4 -1
  149. package/src/services/reqresp/protocols/goodbye.ts +1 -1
  150. package/src/services/reqresp/rate-limiter/rate_limiter.ts +4 -1
  151. package/src/services/reqresp/reqresp.ts +12 -12
  152. package/src/services/service.ts +7 -1
  153. package/src/test-helpers/make-test-p2p-clients.ts +2 -1
  154. package/src/test-helpers/reqresp-nodes.ts +1 -1
  155. package/src/testbench/p2p_client_testbench_worker.ts +10 -4
  156. package/src/testbench/testbench.ts +1 -1
  157. package/src/testbench/worker_client_manager.ts +2 -2
  158. package/src/types/index.ts +1 -0
  159. package/src/versioning.ts +8 -1
@@ -1,5 +1,6 @@
1
1
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
2
2
  import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
3
+ import type { Tx } from '@aztec/stdlib/tx';
3
4
 
4
5
  import type { ENR } from '@chainsafe/enr';
5
6
  import type { PeerId } from '@libp2p/interface';
@@ -32,7 +33,7 @@ export interface P2PService {
32
33
  * Called to have the given transaction propagated through the P2P network.
33
34
  * @param message - The message to be propagated.
34
35
  */
35
- propagate<T extends Gossipable>(message: T): void;
36
+ propagate<T extends Gossipable>(message: T): Promise<void>;
36
37
 
37
38
  /**
38
39
  * Request information from peers via the request response protocol.
@@ -56,6 +57,9 @@ export interface P2PService {
56
57
  sendBatchRequest<Protocol extends ReqRespSubProtocol>(
57
58
  protocol: Protocol,
58
59
  requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
60
+ timeoutMs?: number,
61
+ maxPeers?: number,
62
+ maxRetryAttempts?: number,
59
63
  ): Promise<(InstanceType<SubProtocolMap[Protocol]['response']> | undefined)[]>;
60
64
 
61
65
  // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
@@ -64,6 +68,8 @@ export interface P2PService {
64
68
  getEnr(): ENR | undefined;
65
69
 
66
70
  getPeers(includePending?: boolean): PeerInfo[];
71
+
72
+ validate(txs: Tx[]): Promise<void>;
67
73
  }
68
74
 
69
75
  /**
@@ -85,6 +85,7 @@ export async function makeTestP2PClient(
85
85
  proofVerifier,
86
86
  mockWorldState,
87
87
  mockEpochCache,
88
+ 'test-p2p-client',
88
89
  undefined,
89
90
  deps,
90
91
  );
@@ -108,7 +109,7 @@ export async function makeTestP2PClients(numberOfPeers: number, testConfig: Make
108
109
  try {
109
110
  ports = await getPorts(numberOfPeers);
110
111
  break;
111
- } catch (err) {
112
+ } catch {
112
113
  await sleep(1000);
113
114
  }
114
115
  }
@@ -120,7 +120,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
120
120
  bootstrapNodeEnrVersionCheck: false,
121
121
  ...chainConfig,
122
122
  } as P2PConfig & DataStoreConfig;
123
- const discoveryService = new DiscV5Service(peerId, config, telemetry);
123
+ const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
124
124
  const proofVerifier = new AlwaysTrueCircuitVerifier();
125
125
 
126
126
  // No bootstrap nodes provided as the libp2p service will register them in the constructor
@@ -13,7 +13,7 @@ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
13
13
  import type { L2BlockSource } from '@aztec/stdlib/block';
14
14
  import type { ContractDataSource } from '@aztec/stdlib/contract';
15
15
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
16
- import { P2PClientType } from '@aztec/stdlib/p2p';
16
+ import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
17
17
  import { Tx, TxStatus } from '@aztec/stdlib/tx';
18
18
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
19
19
 
@@ -34,6 +34,7 @@ import type { PubSubLibp2p } from '../util.js';
34
34
  function mockTxPool(): TxPool {
35
35
  // Mock all methods
36
36
  return {
37
+ isEmpty: () => Promise.resolve(false),
37
38
  addTxs: () => Promise.resolve(),
38
39
  getTxByHash: () => Promise.resolve(undefined),
39
40
  getArchivedTxByHash: () => Promise.resolve(undefined),
@@ -43,16 +44,19 @@ function mockTxPool(): TxPool {
43
44
  getAllTxs: () => Promise.resolve([]),
44
45
  getAllTxHashes: () => Promise.resolve([]),
45
46
  getPendingTxHashes: () => Promise.resolve([]),
47
+ getPendingTxCount: () => Promise.resolve(0),
46
48
  getMinedTxHashes: () => Promise.resolve([]),
47
49
  getTxStatus: () => Promise.resolve(TxStatus.PENDING),
48
50
  getTxsByHash: () => Promise.resolve([]),
49
51
  hasTxs: () => Promise.resolve([]),
50
52
  setMaxTxPoolSize: () => Promise.resolve(),
53
+ markTxsAsNonEvictable: () => Promise.resolve(),
51
54
  };
52
55
  }
53
56
 
54
57
  function mockAttestationPool(): AttestationPool {
55
58
  return {
59
+ isEmpty: () => Promise.resolve(false),
56
60
  addAttestations: () => Promise.resolve(),
57
61
  deleteAttestations: () => Promise.resolve(),
58
62
  deleteAttestationsOlderThan: () => Promise.resolve(),
@@ -122,9 +126,10 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
122
126
  this.disableTxValidation = disable;
123
127
  }
124
128
 
125
- protected override async handleGossipedTx(msg: Message, msgId: string, source: PeerId) {
129
+ protected override async handleGossipedTx(payload: Buffer, msgId: string, source: PeerId) {
126
130
  if (this.disableTxValidation) {
127
- const tx = Tx.fromBuffer(Buffer.from(msg.data));
131
+ const p2pMessage = P2PMessage.fromMessageData(payload);
132
+ const tx = Tx.fromBuffer(p2pMessage.payload);
128
133
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
129
134
 
130
135
  const txHash = await tx.getTxHash();
@@ -132,7 +137,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
132
137
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
133
138
  await this.mempools.txPool.addTxs([tx]);
134
139
  } else {
135
- await super.handleGossipedTx(msg, msgId, source);
140
+ await super.handleGossipedTx(payload, msgId, source);
136
141
  }
137
142
  }
138
143
 
@@ -177,6 +182,7 @@ process.on('message', async msg => {
177
182
  proofVerifier,
178
183
  worldState,
179
184
  epochCache,
185
+ 'test-p2p-bench-worker',
180
186
  telemetry,
181
187
  deps,
182
188
  );
@@ -21,7 +21,7 @@ async function main() {
21
21
  }
22
22
 
23
23
  const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
24
- const config = await import(configPath, { assert: { type: 'json' } });
24
+ const config = await import(configPath, { with: { type: 'json' } });
25
25
  const testConfig = { ...testChainConfig, ...config.default };
26
26
  const numberOfClients = config.default.numberOfClients;
27
27
 
@@ -257,7 +257,7 @@ class WorkerClientManager {
257
257
  // Try to gracefully stop the process
258
258
  try {
259
259
  process.send({ type: 'STOP' });
260
- } catch (e) {
260
+ } catch {
261
261
  // If sending the message fails, force kill immediately
262
262
  clearTimeout(forceKillTimeout);
263
263
  try {
@@ -291,7 +291,7 @@ class WorkerClientManager {
291
291
  if (!p.killed) {
292
292
  p.kill('SIGKILL');
293
293
  }
294
- } catch (e) {
294
+ } catch {
295
295
  // Ignore errors when force killing
296
296
  }
297
297
  });
@@ -35,3 +35,4 @@ export enum GossipSubEvent {
35
35
  * Aztec network specific types
36
36
  */
37
37
  export const AZTEC_ENR_KEY = 'aztec';
38
+ export const AZTEC_ENR_CLIENT_VERSION_KEY = 'ver';
package/src/versioning.ts CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  import type { SignableENR } from '@chainsafe/enr';
13
13
  import xxhashFactory from 'xxhash-wasm';
14
14
 
15
- import { AZTEC_ENR_KEY } from './types/index.js';
15
+ import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
16
16
 
17
17
  const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
18
18
  const XX_HASH_LEN = 8;
@@ -31,6 +31,13 @@ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash
31
31
  return versions;
32
32
  }
33
33
 
34
+ /** Sets the Aztec client version on ENR record **/
35
+ export function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string) {
36
+ if (clientVersion) {
37
+ enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
38
+ }
39
+ }
40
+
34
41
  /** Checks the given value from an ENR record against the expected versions. */
35
42
  export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
36
43
  if (enrValue.length === XX_HASH_LEN) {