@aztec/p2p 0.43.0 → 0.45.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 (43) hide show
  1. package/dest/client/index.d.ts.map +1 -1
  2. package/dest/client/index.js +5 -7
  3. package/dest/client/p2p_client.d.ts.map +1 -1
  4. package/dest/client/p2p_client.js +2 -3
  5. package/dest/service/discV5_service.d.ts +5 -2
  6. package/dest/service/discV5_service.d.ts.map +1 -1
  7. package/dest/service/discV5_service.js +26 -9
  8. package/dest/service/dummy_service.d.ts +4 -1
  9. package/dest/service/dummy_service.d.ts.map +1 -1
  10. package/dest/service/dummy_service.js +7 -1
  11. package/dest/service/libp2p_service.d.ts +6 -14
  12. package/dest/service/libp2p_service.d.ts.map +1 -1
  13. package/dest/service/libp2p_service.js +49 -91
  14. package/dest/service/peer_manager.d.ts +25 -3
  15. package/dest/service/peer_manager.d.ts.map +1 -1
  16. package/dest/service/peer_manager.js +152 -12
  17. package/dest/service/service.d.ts +12 -6
  18. package/dest/service/service.d.ts.map +1 -1
  19. package/dest/service/service.js +1 -1
  20. package/dest/tx_pool/aztec_kv_tx_pool.d.ts +2 -1
  21. package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  22. package/dest/tx_pool/aztec_kv_tx_pool.js +11 -6
  23. package/dest/tx_pool/instrumentation.d.ts +23 -0
  24. package/dest/tx_pool/instrumentation.d.ts.map +1 -0
  25. package/dest/tx_pool/instrumentation.js +48 -0
  26. package/dest/tx_pool/memory_tx_pool.d.ts +3 -1
  27. package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
  28. package/dest/tx_pool/memory_tx_pool.js +6 -2
  29. package/package.json +15 -6
  30. package/src/client/index.ts +4 -6
  31. package/src/client/p2p_client.ts +1 -2
  32. package/src/service/discV5_service.ts +28 -11
  33. package/src/service/dummy_service.ts +10 -1
  34. package/src/service/libp2p_service.ts +52 -101
  35. package/src/service/peer_manager.ts +187 -12
  36. package/src/service/service.ts +14 -7
  37. package/src/tx_pool/aztec_kv_tx_pool.ts +12 -3
  38. package/src/tx_pool/instrumentation.ts +58 -0
  39. package/src/tx_pool/memory_tx_pool.ts +8 -1
  40. package/dest/service/known_txs.d.ts +0 -31
  41. package/dest/service/known_txs.d.ts.map +0 -1
  42. package/dest/service/known_txs.js +0 -52
  43. package/src/service/known_txs.ts +0 -56
@@ -1,7 +1,8 @@
1
- var _AztecKVTxPool_store, _AztecKVTxPool_txs, _AztecKVTxPool_log;
1
+ var _AztecKVTxPool_store, _AztecKVTxPool_txs, _AztecKVTxPool_log, _AztecKVTxPool_metrics;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { Tx, TxHash } from '@aztec/circuit-types';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { TxPoolInstrumentation } from './instrumentation.js';
5
6
  /**
6
7
  * In-memory implementation of the Transaction Pool.
7
8
  */
@@ -11,16 +12,18 @@ export class AztecKVTxPool {
11
12
  * @param store - A KV store.
12
13
  * @param log - A logger.
13
14
  */
14
- constructor(store, log = createDebugLogger('aztec:tx_pool')) {
15
+ constructor(store, telemetry, log = createDebugLogger('aztec:tx_pool')) {
15
16
  _AztecKVTxPool_store.set(this, void 0);
16
17
  /**
17
18
  * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
18
19
  */
19
20
  _AztecKVTxPool_txs.set(this, void 0);
20
21
  _AztecKVTxPool_log.set(this, void 0);
22
+ _AztecKVTxPool_metrics.set(this, void 0);
21
23
  __classPrivateFieldSet(this, _AztecKVTxPool_txs, store.openMap('txs'), "f");
22
24
  __classPrivateFieldSet(this, _AztecKVTxPool_store, store, "f");
23
25
  __classPrivateFieldSet(this, _AztecKVTxPool_log, log, "f");
26
+ __classPrivateFieldSet(this, _AztecKVTxPool_metrics, new TxPoolInstrumentation(telemetry, 'AztecKVTxPool'), "f");
24
27
  }
25
28
  /**
26
29
  * Checks if a transaction exists in the pool and returns it.
@@ -36,8 +39,8 @@ export class AztecKVTxPool {
36
39
  * @param txs - An array of txs to be added to the pool.
37
40
  * @returns Empty promise.
38
41
  */
39
- async addTxs(txs) {
40
- const txHashes = await Promise.all(txs.map(tx => tx.getTxHash()));
42
+ addTxs(txs) {
43
+ const txHashes = txs.map(tx => tx.getTxHash());
41
44
  return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
42
45
  for (const [i, tx] of txs.entries()) {
43
46
  const txHash = txHashes[i];
@@ -47,6 +50,7 @@ export class AztecKVTxPool {
47
50
  });
48
51
  void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").set(txHash.toString(), tx.toBuffer());
49
52
  }
53
+ __classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordTxs(txs);
50
54
  });
51
55
  }
52
56
  /**
@@ -59,6 +63,7 @@ export class AztecKVTxPool {
59
63
  for (const hash of txHashes) {
60
64
  void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").delete(hash.toString());
61
65
  }
66
+ __classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").removeTxs(txHashes.length);
62
67
  });
63
68
  }
64
69
  /**
@@ -84,5 +89,5 @@ export class AztecKVTxPool {
84
89
  return __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").has(txHash.toString());
85
90
  }
86
91
  }
87
- _AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_log = new WeakMap();
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFVeEI7Ozs7T0FJRztJQUNILFlBQVksS0FBbUIsRUFBRSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBZHpFLHVDQUFxQjtRQUVyQjs7V0FFRztRQUNILHFDQUErQjtRQUUvQixxQ0FBYTtRQVFYLHVCQUFBLElBQUksc0JBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBQSxDQUFDO1FBQ2pDLHVCQUFBLElBQUksd0JBQVUsS0FBSyxNQUFBLENBQUM7UUFDcEIsdUJBQUEsSUFBSSxzQkFBUSxHQUFHLE1BQUEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxNQUFjO1FBQy9CLE1BQU0sTUFBTSxHQUFHLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBUztRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyx1QkFBQSxJQUFJLDRCQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUU7b0JBQ3ZELFNBQVMsRUFBRSxrQkFBa0I7b0JBQzdCLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtpQkFDWSxDQUFDLENBQUM7Z0JBRWhDLEtBQUssdUJBQUEsSUFBSSwwQkFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsUUFBa0I7UUFDakMsT0FBTyx1QkFBQSxJQUFJLDRCQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixLQUFLLHVCQUFBLElBQUksMEJBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDBCQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIn0=
92
+ _AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_log = new WeakMap(), _AztecKVTxPool_metrics = new WeakMap();
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFZeEI7Ozs7T0FJRztJQUNILFlBQVksS0FBbUIsRUFBRSxTQUEwQixFQUFFLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFoQnJHLHVDQUFxQjtRQUVyQjs7V0FFRztRQUNILHFDQUErQjtRQUUvQixxQ0FBYTtRQUViLHlDQUFnQztRQVE5Qix1QkFBQSxJQUFJLHNCQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQUEsQ0FBQztRQUNqQyx1QkFBQSxJQUFJLHdCQUFVLEtBQUssTUFBQSxDQUFDO1FBQ3BCLHVCQUFBLElBQUksc0JBQVEsR0FBRyxNQUFBLENBQUM7UUFDaEIsdUJBQUEsSUFBSSwwQkFBWSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBQSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE1BQWM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEdBQVM7UUFDckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sdUJBQUEsSUFBSSw0QkFBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLHVCQUFBLElBQUksMEJBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFO29CQUN2RCxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7aUJBQ1ksQ0FBQyxDQUFDO2dCQUVoQyxLQUFLLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCx1QkFBQSxJQUFJLDhCQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsUUFBa0I7UUFDakMsT0FBTyx1QkFBQSxJQUFJLDRCQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixLQUFLLHVCQUFBLElBQUksMEJBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELHVCQUFBLElBQUksOEJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDBCQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIn0=
@@ -0,0 +1,23 @@
1
+ import { type Tx } from '@aztec/circuit-types';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ /**
4
+ * Instrumentation class for the TxPool.
5
+ */
6
+ export declare class TxPoolInstrumentation {
7
+ /** The number of txs in the mempool */
8
+ private txInMempool;
9
+ /** Tracks tx size */
10
+ private txSize;
11
+ constructor(telemetry: TelemetryClient, name: string);
12
+ /**
13
+ * Updates the metrics with the new transactions.
14
+ * @param txs - The transactions to record
15
+ */
16
+ recordTxs(txs: Tx[]): void;
17
+ /**
18
+ * Updates the metrics by removing transactions from the mempool.
19
+ * @param count - The number of transactions to remove from the mempool
20
+ */
21
+ removeTxs(count?: number): void;
22
+ }
23
+ //# sourceMappingURL=instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/tx_pool/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAA2B,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAE5G;;GAEG;AACH,qBAAa,qBAAqB;IAChC,uCAAuC;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,qBAAqB;IACrB,OAAO,CAAC,MAAM,CAAY;gBAEd,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAuBpD;;;OAGG;IACI,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE;IAQ1B;;;OAGG;IACI,SAAS,CAAC,KAAK,SAAI;CAM3B"}
@@ -0,0 +1,48 @@
1
+ import { Metrics } from '@aztec/telemetry-client';
2
+ /**
3
+ * Instrumentation class for the TxPool.
4
+ */
5
+ export class TxPoolInstrumentation {
6
+ constructor(telemetry, name) {
7
+ const meter = telemetry.getMeter(name);
8
+ this.txInMempool = meter.createUpDownCounter(Metrics.MEMPOOL_TX_COUNT, {
9
+ description: 'The current number of transactions in the mempool',
10
+ });
11
+ this.txSize = meter.createHistogram(Metrics.MEMPOOL_TX_SIZE, {
12
+ unit: 'By',
13
+ description: 'The size of transactions in the mempool',
14
+ advice: {
15
+ explicitBucketBoundaries: [
16
+ 5000, // 5KB
17
+ 10000,
18
+ 20000,
19
+ 50000,
20
+ 75000,
21
+ 100000, // 100KB
22
+ 200000,
23
+ ],
24
+ },
25
+ });
26
+ }
27
+ /**
28
+ * Updates the metrics with the new transactions.
29
+ * @param txs - The transactions to record
30
+ */
31
+ recordTxs(txs) {
32
+ for (const tx of txs) {
33
+ this.txSize.record(tx.getSize());
34
+ }
35
+ this.txInMempool.add(txs.length);
36
+ }
37
+ /**
38
+ * Updates the metrics by removing transactions from the mempool.
39
+ * @param count - The number of transactions to remove from the mempool
40
+ */
41
+ removeTxs(count = 1) {
42
+ if (count < 0) {
43
+ throw new Error('Count must be positive');
44
+ }
45
+ this.txInMempool.add(-1 * count);
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3Bvb2wvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0IsT0FBTyxFQUE0QyxNQUFNLHlCQUF5QixDQUFDO0FBRTVHOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUFZLFNBQTBCLEVBQUUsSUFBWTtRQUNsRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxXQUFXLEVBQUUsbURBQW1EO1NBQ2pFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQzNELElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxNQUFNLEVBQUU7Z0JBQ04sd0JBQXdCLEVBQUU7b0JBQ3hCLElBQUssRUFBRSxNQUFNO29CQUNiLEtBQU07b0JBQ04sS0FBTTtvQkFDTixLQUFNO29CQUNOLEtBQU07b0JBQ04sTUFBTyxFQUFFLFFBQVE7b0JBQ2pCLE1BQU87aUJBQ1I7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsR0FBUztRQUN4QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0=
@@ -1,4 +1,5 @@
1
1
  import { Tx, TxHash } from '@aztec/circuit-types';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
2
3
  import { type TxPool } from './tx_pool.js';
3
4
  /**
4
5
  * In-memory implementation of the Transaction Pool.
@@ -9,11 +10,12 @@ export declare class InMemoryTxPool implements TxPool {
9
10
  * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
10
11
  */
11
12
  private txs;
13
+ private metrics;
12
14
  /**
13
15
  * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
14
16
  * @param log - A logger.
15
17
  */
16
- constructor(log?: import("@aztec/foundation/log").Logger);
18
+ constructor(telemetry: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
17
19
  /**
18
20
  * Checks if a transaction exists in the pool and returns it.
19
21
  * @param txHash - The generated tx hash.
@@ -1 +1 @@
1
- {"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAIlD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAe,YAAW,MAAM;IAU/B,OAAO,CAAC,GAAG;IATvB;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAE7B;;;OAGG;gBACiB,GAAG,yCAAqC;IAI5D;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS;IAKlD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvC;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;;OAGG;IACI,SAAS,IAAI,EAAE,EAAE;IAIxB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;OAIG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGtC"}
1
+ {"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAe,YAAW,MAAM;IAYH,OAAO,CAAC,GAAG;IAXnD;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAE7B,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;OAGG;gBACS,SAAS,EAAE,eAAe,EAAU,GAAG,yCAAqC;IAKxF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS;IAKlD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;OAGG;IACI,SAAS,IAAI,EAAE,EAAE;IAIxB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;OAIG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGtC"}
@@ -1,5 +1,6 @@
1
1
  import { Tx, TxHash } from '@aztec/circuit-types';
2
2
  import { createDebugLogger } from '@aztec/foundation/log';
3
+ import { TxPoolInstrumentation } from './instrumentation.js';
3
4
  /**
4
5
  * In-memory implementation of the Transaction Pool.
5
6
  */
@@ -8,9 +9,10 @@ export class InMemoryTxPool {
8
9
  * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
9
10
  * @param log - A logger.
10
11
  */
11
- constructor(log = createDebugLogger('aztec:tx_pool')) {
12
+ constructor(telemetry, log = createDebugLogger('aztec:tx_pool')) {
12
13
  this.log = log;
13
14
  this.txs = new Map();
15
+ this.metrics = new TxPoolInstrumentation(telemetry, 'InMemoryTxPool');
14
16
  }
15
17
  /**
16
18
  * Checks if a transaction exists in the pool and returns it.
@@ -27,6 +29,7 @@ export class InMemoryTxPool {
27
29
  * @returns Empty promise.
28
30
  */
29
31
  addTxs(txs) {
32
+ this.metrics.recordTxs(txs);
30
33
  for (const tx of txs) {
31
34
  const txHash = tx.getTxHash();
32
35
  this.log.debug(`Adding tx with id ${txHash.toString()}`, {
@@ -43,6 +46,7 @@ export class InMemoryTxPool {
43
46
  * @returns The number of transactions that was deleted from the pool.
44
47
  */
45
48
  deleteTxs(txHashes) {
49
+ this.metrics.removeTxs(txHashes.length);
46
50
  for (const txHash of txHashes) {
47
51
  this.txs.delete(txHash.toBigInt());
48
52
  }
@@ -71,4 +75,4 @@ export class InMemoryTxPool {
71
75
  return this.txs.has(txHash.toBigInt());
72
76
  }
73
77
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfcG9vbC9tZW1vcnlfdHhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTFEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFNekI7OztPQUdHO0lBQ0gsWUFBb0IsTUFBTSxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFBeEMsUUFBRyxHQUFILEdBQUcsQ0FBcUM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBYyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE1BQWM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0MsT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsR0FBUztRQUNyQixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUU7Z0JBQ3ZELFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTthQUNZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLFFBQWtCO1FBQ2pDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfcG9vbC9tZW1vcnlfdHhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFRekI7OztPQUdHO0lBQ0gsWUFBWSxTQUEwQixFQUFVLE1BQU0saUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQXhDLFFBQUcsR0FBSCxHQUFHLENBQXFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsTUFBYztRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxHQUFTO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRTtnQkFDdkQsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0IsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO2FBQ1ksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsUUFBa0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.43.0",
3
+ "version": "0.45.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -31,7 +31,15 @@
31
31
  "rootDir": "./src",
32
32
  "transform": {
33
33
  "^.+\\.tsx?$": [
34
- "@swc/jest"
34
+ "@swc/jest",
35
+ {
36
+ "jsc": {
37
+ "parser": {
38
+ "syntax": "typescript",
39
+ "decorators": true
40
+ }
41
+ }
42
+ }
35
43
  ]
36
44
  },
37
45
  "extensionsToTreatAsEsm": [
@@ -48,10 +56,11 @@
48
56
  "testTimeout": 15000
49
57
  },
50
58
  "dependencies": {
51
- "@aztec/circuit-types": "0.43.0",
52
- "@aztec/circuits.js": "0.43.0",
53
- "@aztec/foundation": "0.43.0",
54
- "@aztec/kv-store": "0.43.0",
59
+ "@aztec/circuit-types": "0.45.0",
60
+ "@aztec/circuits.js": "0.45.0",
61
+ "@aztec/foundation": "0.45.0",
62
+ "@aztec/kv-store": "0.45.0",
63
+ "@aztec/telemetry-client": "0.45.0",
55
64
  "@chainsafe/discv5": "9.0.0",
56
65
  "@chainsafe/enr": "3.0.0",
57
66
  "@chainsafe/libp2p-gossipsub": "13.0.0",
@@ -4,7 +4,7 @@ import { type AztecKVStore } from '@aztec/kv-store';
4
4
  import { P2PClient } from '../client/p2p_client.js';
5
5
  import { type P2PConfig } from '../config.js';
6
6
  import { DiscV5Service } from '../service/discV5_service.js';
7
- import { DummyP2PService, DummyPeerDiscoveryService } from '../service/dummy_service.js';
7
+ import { DummyP2PService } from '../service/dummy_service.js';
8
8
  import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
9
9
  import { type TxPool } from '../tx_pool/index.js';
10
10
  import { getPublicIp, splitAddressPort } from '../util.js';
@@ -17,7 +17,6 @@ export const createP2PClient = async (
17
17
  txPool: TxPool,
18
18
  l2BlockSource: L2BlockSource,
19
19
  ) => {
20
- let discv5Service;
21
20
  let p2pService;
22
21
 
23
22
  if (config.p2pEnabled) {
@@ -40,7 +39,7 @@ export const createP2PClient = async (
40
39
  config.tcpAnnounceAddress = tcpAnnounceAddress;
41
40
  } else {
42
41
  throw new Error(
43
- `Invalid announceTcpAddress provided: ${splitTcpAnnounceAddress}. Expected format: <addr>:<port>`,
42
+ `Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`,
44
43
  );
45
44
  }
46
45
  }
@@ -59,11 +58,10 @@ export const createP2PClient = async (
59
58
 
60
59
  // Create peer discovery service
61
60
  const peerId = await createLibP2PPeerId(config.peerIdPrivateKey);
62
- discv5Service = new DiscV5Service(peerId, config);
63
- p2pService = await LibP2PService.new(config, discv5Service, peerId, txPool);
61
+ const discoveryService = new DiscV5Service(peerId, config);
62
+ p2pService = await LibP2PService.new(config, discoveryService, peerId, txPool, store);
64
63
  } else {
65
64
  p2pService = new DummyP2PService();
66
- discv5Service = new DummyPeerDiscoveryService();
67
65
  }
68
66
  return new P2PClient(store, l2BlockSource, txPool, p2pService);
69
67
  };
@@ -194,7 +194,7 @@ export class P2PClient implements P2P {
194
194
  this.log.debug('Stopped block downloader');
195
195
  await this.runningPromise;
196
196
  this.setCurrentState(P2PClientState.STOPPED);
197
- this.log.info('P2P client stopped...');
197
+ this.log.info('P2P client stopped.');
198
198
  }
199
199
 
200
200
  /**
@@ -278,7 +278,6 @@ export class P2PClient implements P2P {
278
278
  for (const block of blocks) {
279
279
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
280
280
  await this.txPool.deleteTxs(txHashes);
281
- this.p2pService.settledTxs(txHashes);
282
281
  }
283
282
  }
284
283
 
@@ -1,9 +1,8 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
- import { RunningPromise } from '@aztec/foundation/running-promise';
3
2
  import { sleep } from '@aztec/foundation/sleep';
4
3
 
5
4
  import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
6
- import { type ENR, SignableENR } from '@chainsafe/enr';
5
+ import { ENR, SignableENR } from '@chainsafe/enr';
7
6
  import type { PeerId } from '@libp2p/interface';
8
7
  import { multiaddr } from '@multiformats/multiaddr';
9
8
  import EventEmitter from 'events';
@@ -14,6 +13,8 @@ import { type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
14
13
 
15
14
  export const AZTEC_ENR_KEY = 'aztec_network';
16
15
 
16
+ const delayBeforeStart = 2000; // 2sec
17
+
17
18
  export enum AztecENR {
18
19
  devnet = 0x01,
19
20
  testnet = 0x02,
@@ -33,11 +34,12 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
33
34
  /** This instance's ENR */
34
35
  private enr: SignableENR;
35
36
 
36
- private runningPromise: RunningPromise;
37
-
38
37
  private currentState = PeerDiscoveryState.STOPPED;
39
38
 
40
39
  private bootstrapNodes: string[];
40
+ private bootstrapNodePeerIds: PeerId[] = [];
41
+
42
+ private startTime = 0;
41
43
 
42
44
  constructor(private peerId: PeerId, config: P2PConfig, private logger = createDebugLogger('aztec:discv5_service')) {
43
45
  super();
@@ -83,18 +85,17 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
83
85
  const multiAddrUdp = await enr.getFullMultiaddr('udp');
84
86
  this.logger.debug(`ENR multiaddr: ${multiAddrTcp?.toString()}, ${multiAddrUdp?.toString()}`);
85
87
  });
86
-
87
- this.runningPromise = new RunningPromise(async () => {
88
- await this.discv5.findRandomNode();
89
- }, config.p2pPeerCheckIntervalMS);
90
88
  }
91
89
 
92
90
  public async start(): Promise<void> {
91
+ // Do this conversion once since it involves an async function call
92
+ this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodes.map(enr => ENR.decodeTxt(enr).peerId()));
93
93
  if (this.currentState === PeerDiscoveryState.RUNNING) {
94
94
  throw new Error('DiscV5Service already started');
95
95
  }
96
96
  this.logger.info('Starting DiscV5');
97
97
  await this.discv5.start();
98
+ this.startTime = Date.now();
98
99
 
99
100
  this.logger.info('DiscV5 started');
100
101
  this.currentState = PeerDiscoveryState.RUNNING;
@@ -110,12 +111,25 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
110
111
  this.logger.error(`Error adding bootnode ENRs: ${e}`);
111
112
  }
112
113
  }
114
+ }
115
+
116
+ public async runRandomNodesQuery(): Promise<void> {
117
+ if (this.currentState !== PeerDiscoveryState.RUNNING) {
118
+ throw new Error('DiscV5Service not running');
119
+ }
113
120
 
114
121
  // First, wait some time before starting the peer discovery
115
122
  // reference: https://github.com/ChainSafe/lodestar/issues/3423
116
- await sleep(2000);
123
+ const msSinceStart = Date.now() - this.startTime;
124
+ if (Date.now() - this.startTime <= delayBeforeStart) {
125
+ await sleep(delayBeforeStart - msSinceStart);
126
+ }
117
127
 
118
- this.runningPromise.start();
128
+ try {
129
+ await this.discv5.findRandomNode();
130
+ } catch (err) {
131
+ this.logger.error(`Error running discV5 random node query: ${err}`);
132
+ }
119
133
  }
120
134
 
121
135
  public getAllPeers(): ENR[] {
@@ -134,8 +148,11 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
134
148
  return this.currentState;
135
149
  }
136
150
 
151
+ public isBootstrapPeer(peerId: PeerId): boolean {
152
+ return this.bootstrapNodePeerIds.some(node => node.equals(peerId));
153
+ }
154
+
137
155
  public async stop(): Promise<void> {
138
- await this.runningPromise.stop();
139
156
  await this.discv5.stop();
140
157
  this.currentState = PeerDiscoveryState.STOPPED;
141
158
  }
@@ -1,5 +1,6 @@
1
- import { type Tx, type TxHash } from '@aztec/circuit-types';
1
+ import type { Tx, TxHash } from '@aztec/circuit-types';
2
2
 
3
+ import type { PeerId } from '@libp2p/interface';
3
4
  import EventEmitter from 'events';
4
5
 
5
6
  import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
@@ -66,6 +67,14 @@ export class DummyPeerDiscoveryService extends EventEmitter implements PeerDisco
66
67
  return [];
67
68
  }
68
69
 
70
+ public runRandomNodesQuery(): Promise<void> {
71
+ return Promise.resolve();
72
+ }
73
+
74
+ public isBootstrapPeer(_: PeerId): boolean {
75
+ return false;
76
+ }
77
+
69
78
  public getStatus(): PeerDiscoveryState {
70
79
  return this.currentState;
71
80
  }