@aztec/p2p 0.65.2 → 0.67.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 (87) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +7 -2
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +25 -12
  4. package/dest/client/index.d.ts.map +1 -1
  5. package/dest/client/index.js +11 -7
  6. package/dest/client/p2p_client.d.ts +11 -16
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +32 -8
  9. package/dest/config.d.ts +40 -2
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +10 -2
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +8 -0
  13. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +1 -0
  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 +22 -3
  17. package/dest/mem_pools/instrumentation.d.ts +2 -7
  18. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  19. package/dest/mem_pools/instrumentation.js +4 -25
  20. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +5 -7
  22. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool/memory_tx_pool.js +4 -4
  24. package/dest/mocks/index.d.ts.map +1 -1
  25. package/dest/mocks/index.js +12 -6
  26. package/dest/service/discV5_service.d.ts +2 -0
  27. package/dest/service/discV5_service.d.ts.map +1 -1
  28. package/dest/service/discV5_service.js +14 -11
  29. package/dest/service/dummy_service.d.ts +3 -1
  30. package/dest/service/dummy_service.d.ts.map +1 -1
  31. package/dest/service/dummy_service.js +5 -1
  32. package/dest/service/encoding.d.ts +26 -0
  33. package/dest/service/encoding.d.ts.map +1 -0
  34. package/dest/service/encoding.js +49 -0
  35. package/dest/service/libp2p_service.d.ts +2 -7
  36. package/dest/service/libp2p_service.d.ts.map +1 -1
  37. package/dest/service/libp2p_service.js +24 -31
  38. package/dest/service/peer_manager.d.ts +3 -0
  39. package/dest/service/peer_manager.d.ts.map +1 -1
  40. package/dest/service/peer_manager.js +59 -21
  41. package/dest/service/peer_scoring.d.ts +4 -1
  42. package/dest/service/peer_scoring.d.ts.map +1 -1
  43. package/dest/service/peer_scoring.js +6 -1
  44. package/dest/service/reqresp/handlers.d.ts +4 -2
  45. package/dest/service/reqresp/handlers.d.ts.map +1 -1
  46. package/dest/service/reqresp/handlers.js +3 -3
  47. package/dest/service/reqresp/interface.d.ts +1 -1
  48. package/dest/service/reqresp/interface.d.ts.map +1 -1
  49. package/dest/service/reqresp/interface.js +2 -2
  50. package/dest/service/reqresp/reqresp.d.ts +3 -0
  51. package/dest/service/reqresp/reqresp.d.ts.map +1 -1
  52. package/dest/service/reqresp/reqresp.js +14 -9
  53. package/dest/service/service.d.ts +2 -1
  54. package/dest/service/service.d.ts.map +1 -1
  55. package/dest/tx_validator/data_validator.js +3 -3
  56. package/dest/tx_validator/double_spend_validator.js +3 -3
  57. package/dest/tx_validator/metadata_validator.js +3 -3
  58. package/dest/tx_validator/tx_proof_validator.js +3 -3
  59. package/dest/util.d.ts +20 -2
  60. package/dest/util.d.ts.map +1 -1
  61. package/dest/util.js +39 -3
  62. package/package.json +14 -9
  63. package/src/bootstrap/bootstrap.ts +33 -13
  64. package/src/client/index.ts +10 -6
  65. package/src/client/p2p_client.ts +47 -24
  66. package/src/config.ts +17 -2
  67. package/src/mem_pools/attestation_pool/attestation_pool.ts +9 -0
  68. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +23 -2
  69. package/src/mem_pools/instrumentation.ts +4 -26
  70. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +4 -6
  71. package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
  72. package/src/mocks/index.ts +11 -5
  73. package/src/service/discV5_service.ts +17 -12
  74. package/src/service/dummy_service.ts +6 -1
  75. package/src/service/encoding.ts +61 -0
  76. package/src/service/libp2p_service.ts +26 -32
  77. package/src/service/peer_manager.ts +68 -22
  78. package/src/service/peer_scoring.ts +8 -1
  79. package/src/service/reqresp/handlers.ts +4 -4
  80. package/src/service/reqresp/interface.ts +3 -3
  81. package/src/service/reqresp/reqresp.ts +13 -8
  82. package/src/service/service.ts +3 -1
  83. package/src/tx_validator/data_validator.ts +2 -2
  84. package/src/tx_validator/double_spend_validator.ts +2 -2
  85. package/src/tx_validator/metadata_validator.ts +2 -2
  86. package/src/tx_validator/tx_proof_validator.ts +2 -2
  87. package/src/util.ts +48 -2
@@ -1,13 +1,13 @@
1
1
  var _MetadataTxValidator_instances, _MetadataTxValidator_log, _MetadataTxValidator_hasCorrectChainId, _MetadataTxValidator_isValidForBlockNumber;
2
2
  import { __classPrivateFieldGet } from "tslib";
3
3
  import { Tx } from '@aztec/circuit-types';
4
- import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { createLogger } from '@aztec/foundation/log';
5
5
  export class MetadataTxValidator {
6
6
  constructor(chainId, blockNumber) {
7
7
  _MetadataTxValidator_instances.add(this);
8
8
  this.chainId = chainId;
9
9
  this.blockNumber = blockNumber;
10
- _MetadataTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_metadata'));
10
+ _MetadataTxValidator_log.set(this, createLogger('p2p:tx_validator:tx_metadata'));
11
11
  }
12
12
  validateTxs(txs) {
13
13
  const validTxs = [];
@@ -47,4 +47,4 @@ _MetadataTxValidator_log = new WeakMap(), _MetadataTxValidator_instances = new W
47
47
  return true;
48
48
  }
49
49
  };
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci9tZXRhZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFBb0IsT0FBVyxFQUFVLFdBQWU7O1FBQXBDLFlBQU8sR0FBUCxPQUFPLENBQUk7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBSTtRQUZ4RCxtQ0FBTyxpQkFBaUIsQ0FBQywwQ0FBMEMsQ0FBQyxFQUFDO0lBRVYsQ0FBQztJQUU1RCxXQUFXLENBQUMsR0FBUTtRQUNsQixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUFBLElBQUksOEVBQW1CLE1BQXZCLElBQUksRUFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsdUJBQUEsSUFBSSxrRkFBdUIsTUFBM0IsSUFBSSxFQUF3QixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVLENBQUMsRUFBSztRQUNkLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLDhFQUFtQixNQUF2QixJQUFJLEVBQW9CLEVBQUUsQ0FBQyxJQUFJLHVCQUFBLElBQUksa0ZBQXVCLE1BQTNCLElBQUksRUFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0NBNkJGO21MQTNCb0IsRUFBSztJQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDOUQsdUJBQUEsSUFBSSxnQ0FBSyxDQUFDLElBQUksQ0FDWixnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FDeEIsRUFBRSxDQUNILCtCQUErQixFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDL0csQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLG1HQUVzQixFQUFLO0lBQzFCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDO0lBRXZFLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRSx1QkFBQSxJQUFJLGdDQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtREFDNUIsY0FBYyxDQUFDLEtBQ2pCLDJCQUEyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQy9DLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyJ9
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci9tZXRhZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW9CLE9BQVcsRUFBVSxXQUFlOztRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUFJO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQUk7UUFGeEQsbUNBQU8sWUFBWSxDQUFDLDhCQUE4QixDQUFDLEVBQUM7SUFFTyxDQUFDO0lBRTVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsdUJBQUEsSUFBSSw4RUFBbUIsTUFBdkIsSUFBSSxFQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyx1QkFBQSxJQUFJLGtGQUF1QixNQUEzQixJQUFJLEVBQXdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFLO1FBQ2QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksOEVBQW1CLE1BQXZCLElBQUksRUFBb0IsRUFBRSxDQUFDLElBQUksdUJBQUEsSUFBSSxrRkFBdUIsTUFBM0IsSUFBSSxFQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0E2QkY7bUxBM0JvQixFQUFLO0lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5RCx1QkFBQSxJQUFJLGdDQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUN4QixFQUFFLENBQ0gsK0JBQStCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMvRyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsbUdBRXNCLEVBQUs7SUFDMUIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUM7SUFFdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JFLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxJQUFJLENBQ1osZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1EQUM1QixjQUFjLENBQUMsS0FDakIsMkJBQTJCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FDL0MsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIn0=
@@ -1,11 +1,11 @@
1
1
  var _TxProofValidator_log;
2
2
  import { __classPrivateFieldGet } from "tslib";
3
3
  import { Tx } from '@aztec/circuit-types';
4
- import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { createLogger } from '@aztec/foundation/log';
5
5
  export class TxProofValidator {
6
6
  constructor(verifier) {
7
7
  this.verifier = verifier;
8
- _TxProofValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:private_proof'));
8
+ _TxProofValidator_log.set(this, createLogger('p2p:tx_validator:private_proof'));
9
9
  }
10
10
  async validateTxs(txs) {
11
11
  const validTxs = [];
@@ -26,4 +26,4 @@ export class TxProofValidator {
26
26
  }
27
27
  }
28
28
  _TxProofValidator_log = new WeakMap();
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci90eF9wcm9vZl92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQXNDLEVBQUUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCLFlBQW9CLFFBQXVDO1FBQXZDLGFBQVEsR0FBUixRQUFRLENBQStCO1FBRjNELGdDQUFPLGlCQUFpQixDQUFDLDRDQUE0QyxDQUFDLEVBQUM7SUFFVCxDQUFDO0lBRS9ELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUztRQUN6QixNQUFNLFFBQVEsR0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHVCQUFBLElBQUksNkJBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ25FLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVLENBQUMsRUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIn0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci90eF9wcm9vZl92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQXNDLEVBQUUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFvQixRQUF1QztRQUF2QyxhQUFRLEdBQVIsUUFBUSxDQUErQjtRQUYzRCxnQ0FBTyxZQUFZLENBQUMsZ0NBQWdDLENBQUMsRUFBQztJQUVRLENBQUM7SUFFL0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFTO1FBQ3pCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFFNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUJBQUEsSUFBSSw2QkFBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDbkUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YifQ==
package/dest/util.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ import { type AztecKVStore } from '@aztec/kv-store';
1
2
  import { type DataStoreConfig } from '@aztec/kv-store/config';
2
3
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
4
+ import { type PeerId } from '@libp2p/interface';
3
5
  import type { Libp2p } from 'libp2p';
4
6
  import { type P2PConfig } from './config.js';
5
7
  export interface PubSubLibp2p extends Libp2p {
@@ -14,8 +16,7 @@ export interface PubSubLibp2p extends Libp2p {
14
16
  * const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
15
17
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
16
18
  * @param protocol - The protocol to use in the multiaddr string.
17
- * @returns A multiaddr compliant string.
18
- */
19
+ * @returns A multiaddr compliant string. */
19
20
  export declare function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string;
20
21
  /**
21
22
  * Splits an <address>:<port> string into its components.
@@ -28,4 +29,21 @@ export declare function splitAddressPort(address: string, allowEmptyAddress: boo
28
29
  export declare function getPublicIp(): Promise<string>;
29
30
  export declare function resolveAddressIfNecessary(address: string): Promise<string>;
30
31
  export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
32
+ /**
33
+ * Get the peer id private key
34
+ *
35
+ * 1. Check if we have a peer id private key in the config
36
+ * 2. If not, check we have a peer id private key persisted in the node
37
+ * 3. If not, create a new one, then persist it in the node
38
+ *
39
+ */
40
+ export declare function getPeerIdPrivateKey(config: {
41
+ peerIdPrivateKey?: string;
42
+ }, store: AztecKVStore): Promise<string>;
43
+ /**
44
+ * Create a libp2p peer ID from the private key.
45
+ * @param privateKey - peer ID private key as hex string
46
+ * @returns The peer ID.
47
+ */
48
+ export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
31
49
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAGjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBrH;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
package/dest/util.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
2
+ import { createFromPrivKey } from '@libp2p/peer-id-factory';
1
3
  import { resolve } from 'dns/promises';
2
4
  /**
3
5
  * Converts an address string to a multiaddr string.
@@ -6,8 +8,7 @@ import { resolve } from 'dns/promises';
6
8
  * const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
7
9
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
8
10
  * @param protocol - The protocol to use in the multiaddr string.
9
- * @returns A multiaddr compliant string.
10
- */
11
+ * @returns A multiaddr compliant string. */
11
12
  export function convertToMultiaddr(address, protocol) {
12
13
  const [addr, port] = splitAddressPort(address, false);
13
14
  const multiaddrPrefix = addressToMultiAddressType(addr);
@@ -112,4 +113,39 @@ export async function configureP2PClientAddresses(_config) {
112
113
  }
113
114
  return config;
114
115
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFXdkM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFlO1FBQ2YsQ0FBQyxJQUFJLEVB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
116
+ /**
117
+ * Get the peer id private key
118
+ *
119
+ * 1. Check if we have a peer id private key in the config
120
+ * 2. If not, check we have a peer id private key persisted in the node
121
+ * 3. If not, create a new one, then persist it in the node
122
+ *
123
+ */
124
+ export async function getPeerIdPrivateKey(config, store) {
125
+ const peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
126
+ if (config.peerIdPrivateKey) {
127
+ await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
128
+ return config.peerIdPrivateKey;
129
+ }
130
+ const storedPeerIdPrivateKey = peerIdPrivateKeySingleton.get();
131
+ if (storedPeerIdPrivateKey) {
132
+ return storedPeerIdPrivateKey;
133
+ }
134
+ const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
135
+ const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
136
+ await peerIdPrivateKeySingleton.set(privateKeyString);
137
+ return privateKeyString;
138
+ }
139
+ /**
140
+ * Create a libp2p peer ID from the private key.
141
+ * @param privateKey - peer ID private key as hex string
142
+ * @returns The peer ID.
143
+ */
144
+ export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
145
+ if (!privateKey?.length) {
146
+ throw new Error('No peer private key provided');
147
+ }
148
+ const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
149
+ return await createFromPrivKey(asLibp2pPrivateKey);
150
+ }
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBV3ZDOzs7Ozs7OzZDQU82QztBQUM3QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.65.2",
3
+ "version": "0.67.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -60,21 +60,24 @@
60
60
  }
61
61
  ]
62
62
  ],
63
- "testTimeout": 15000
63
+ "testTimeout": 30000,
64
+ "setupFiles": [
65
+ "../../foundation/src/jest/setup.mjs"
66
+ ]
64
67
  },
65
68
  "dependencies": {
66
- "@aztec/circuit-types": "0.65.2",
67
- "@aztec/circuits.js": "0.65.2",
68
- "@aztec/foundation": "0.65.2",
69
- "@aztec/kv-store": "0.65.2",
70
- "@aztec/telemetry-client": "0.65.2",
69
+ "@aztec/circuit-types": "0.67.0",
70
+ "@aztec/circuits.js": "0.67.0",
71
+ "@aztec/foundation": "0.67.0",
72
+ "@aztec/kv-store": "0.67.0",
73
+ "@aztec/telemetry-client": "0.67.0",
71
74
  "@chainsafe/discv5": "9.0.0",
72
75
  "@chainsafe/enr": "3.0.0",
73
76
  "@chainsafe/libp2p-gossipsub": "13.0.0",
74
77
  "@chainsafe/libp2p-noise": "^15.0.0",
75
78
  "@chainsafe/libp2p-yamux": "^6.0.2",
76
79
  "@libp2p/bootstrap": "10.0.0",
77
- "@libp2p/crypto": "4.0.3",
80
+ "@libp2p/crypto": "^4.1.1",
78
81
  "@libp2p/identify": "1.0.18",
79
82
  "@libp2p/interface": "1.3.1",
80
83
  "@libp2p/kad-dht": "10.0.4",
@@ -91,7 +94,9 @@
91
94
  "libp2p": "1.5.0",
92
95
  "semver": "^7.6.0",
93
96
  "sha3": "^2.1.4",
94
- "tslib": "^2.4.0"
97
+ "snappy": "^7.2.2",
98
+ "tslib": "^2.4.0",
99
+ "xxhash-wasm": "^1.1.0"
95
100
  },
96
101
  "devDependencies": {
97
102
  "@aztec/archiver": "workspace:^",
@@ -1,4 +1,6 @@
1
- import { createDebugLogger } from '@aztec/foundation/log';
1
+ import { type P2PBootstrapApi } from '@aztec/circuit-types/interfaces';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { type AztecKVStore } from '@aztec/kv-store';
2
4
  import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
3
5
 
4
6
  import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
@@ -8,17 +10,20 @@ import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
8
10
 
9
11
  import type { BootnodeConfig } from '../config.js';
10
12
  import { AZTEC_ENR_KEY, AZTEC_NET } from '../service/discV5_service.js';
11
- import { createLibP2PPeerId } from '../service/index.js';
12
- import { convertToMultiaddr } from '../util.js';
13
+ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
13
14
 
14
15
  /**
15
16
  * Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
16
17
  */
17
- export class BootstrapNode {
18
+ export class BootstrapNode implements P2PBootstrapApi {
18
19
  private node?: Discv5 = undefined;
19
20
  private peerId?: PeerId;
20
21
 
21
- constructor(private telemetry: TelemetryClient, private logger = createDebugLogger('aztec:p2p_bootstrap')) {}
22
+ constructor(
23
+ private store: AztecKVStore,
24
+ private telemetry: TelemetryClient,
25
+ private logger = createLogger('p2p:bootstrap'),
26
+ ) {}
22
27
 
23
28
  /**
24
29
  * Starts the bootstrap node.
@@ -26,8 +31,10 @@ export class BootstrapNode {
26
31
  * @returns An empty promise.
27
32
  */
28
33
  public async start(config: BootnodeConfig) {
29
- const { peerIdPrivateKey, udpListenAddress, udpAnnounceAddress } = config;
30
- const peerId = await createLibP2PPeerId(peerIdPrivateKey);
34
+ const { udpListenAddress, udpAnnounceAddress } = config;
35
+
36
+ const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store);
37
+ const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
31
38
  this.peerId = peerId;
32
39
  const enr = SignableENR.createFromPeerId(peerId);
33
40
 
@@ -41,7 +48,7 @@ export class BootstrapNode {
41
48
  enr.setLocationMultiaddr(publicAddr);
42
49
  enr.set(AZTEC_ENR_KEY, Uint8Array.from([AZTEC_NET]));
43
50
 
44
- this.logger.info(`Starting bootstrap node ${peerId}, listening on ${listenAddrUdp.toString()}`);
51
+ this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
45
52
  const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
46
53
  this.node = Discv5.create({
47
54
  enr,
@@ -59,17 +66,15 @@ export class BootstrapNode {
59
66
  });
60
67
  (this.node as Discv5EventEmitter).on('discovered', async (enr: SignableENR) => {
61
68
  const addr = await enr.getFullMultiaddr('udp');
62
- this.logger.verbose(`Discovered new peer, enr: ${enr.encodeTxt()}, addr: ${addr?.toString()}`);
69
+ this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
63
70
  });
64
71
 
65
72
  try {
66
73
  await this.node.start();
67
- this.logger.info('Discv5 started');
74
+ this.logger.info('Bootstrap node started', { peerId, enr: enr.encodeTxt(), addr: listenAddrUdp.toString() });
68
75
  } catch (e) {
69
76
  this.logger.error('Error starting Discv5', e);
70
77
  }
71
-
72
- this.logger.info(`ENR: ${this.node?.enr.encodeTxt()}`);
73
78
  }
74
79
 
75
80
  /**
@@ -78,8 +83,9 @@ export class BootstrapNode {
78
83
  */
79
84
  public async stop() {
80
85
  // stop libp2p
86
+ this.logger.debug('Stopping bootstrap node');
81
87
  await this.node?.stop();
82
- this.logger.debug('Discv5 has stopped');
88
+ this.logger.info('Bootstrap node stopped');
83
89
  }
84
90
 
85
91
  /**
@@ -99,4 +105,18 @@ export class BootstrapNode {
99
105
  }
100
106
  return this.node?.enr.toENR();
101
107
  }
108
+
109
+ public getEncodedEnr() {
110
+ if (!this.node) {
111
+ throw new Error('Node not started');
112
+ }
113
+ return Promise.resolve(this.node.enr.encodeTxt());
114
+ }
115
+
116
+ public getRoutingTable() {
117
+ if (!this.node) {
118
+ throw new Error('Node not started');
119
+ }
120
+ return Promise.resolve(this.node.kadValues().map(enr => enr.encodeTxt()));
121
+ }
102
122
  }
@@ -1,8 +1,8 @@
1
1
  import type { ClientProtocolCircuitVerifier, L2BlockSource, WorldStateSynchronizer } from '@aztec/circuit-types';
2
- import { createDebugLogger } from '@aztec/foundation/log';
2
+ import { createLogger } from '@aztec/foundation/log';
3
3
  import { type AztecKVStore } from '@aztec/kv-store';
4
4
  import { type DataStoreConfig } from '@aztec/kv-store/config';
5
- import { createStore } from '@aztec/kv-store/utils';
5
+ import { createStore } from '@aztec/kv-store/lmdb';
6
6
  import { type TelemetryClient } from '@aztec/telemetry-client';
7
7
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
8
8
 
@@ -16,8 +16,8 @@ import { type MemPools } from '../mem_pools/interface.js';
16
16
  import { AztecKVTxPool, type TxPool } from '../mem_pools/tx_pool/index.js';
17
17
  import { DiscV5Service } from '../service/discV5_service.js';
18
18
  import { DummyP2PService } from '../service/dummy_service.js';
19
- import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
20
- import { configureP2PClientAddresses } from '../util.js';
19
+ import { LibP2PService } from '../service/index.js';
20
+ import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
21
21
 
22
22
  export * from './p2p_client.js';
23
23
 
@@ -35,7 +35,8 @@ export const createP2PClient = async (
35
35
  } = {},
36
36
  ) => {
37
37
  let config = { ..._config };
38
- const store = deps.store ?? (await createStore('p2p', config, createDebugLogger('aztec:p2p:lmdb')));
38
+ const logger = createLogger('p2p');
39
+ const store = deps.store ?? (await createStore('p2p', config, createLogger('p2p:lmdb')));
39
40
 
40
41
  const mempools: MemPools = {
41
42
  txPool: deps.txPool ?? new AztecKVTxPool(store, telemetry),
@@ -46,10 +47,12 @@ export const createP2PClient = async (
46
47
  let p2pService;
47
48
 
48
49
  if (_config.p2pEnabled) {
50
+ logger.verbose('P2P is enabled. Using LibP2P service.');
49
51
  config = await configureP2PClientAddresses(_config);
50
52
 
51
53
  // Create peer discovery service
52
- const peerId = await createLibP2PPeerId(config.peerIdPrivateKey);
54
+ const peerIdPrivateKey = await getPeerIdPrivateKey(config, store);
55
+ const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
53
56
  const discoveryService = new DiscV5Service(peerId, config, telemetry);
54
57
 
55
58
  p2pService = await LibP2PService.new(
@@ -64,6 +67,7 @@ export const createP2PClient = async (
64
67
  telemetry,
65
68
  );
66
69
  } else {
70
+ logger.verbose('P2P is disabled. Using dummy P2P service');
67
71
  p2pService = new DummyP2PService();
68
72
  }
69
73
  return new P2PClient(store, l2BlockSource, mempools, p2pService, config.keepProvenTxsInPoolFor, telemetry);
@@ -8,11 +8,13 @@ import {
8
8
  L2BlockStream,
9
9
  type L2BlockStreamEvent,
10
10
  type L2Tips,
11
+ type P2PApi,
12
+ type PeerInfo,
11
13
  type Tx,
12
14
  type TxHash,
13
15
  } from '@aztec/circuit-types';
14
16
  import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants';
15
- import { createDebugLogger } from '@aztec/foundation/log';
17
+ import { createLogger } from '@aztec/foundation/log';
16
18
  import { type AztecKVStore, type AztecMap, type AztecSingleton } from '@aztec/kv-store';
17
19
  import { Attributes, type TelemetryClient, WithTracer, trackSpan } from '@aztec/telemetry-client';
18
20
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
@@ -54,7 +56,7 @@ export interface P2PSyncState {
54
56
  /**
55
57
  * Interface of a P2P client.
56
58
  **/
57
- export interface P2P {
59
+ export interface P2P extends P2PApi {
58
60
  /**
59
61
  * Broadcasts a block proposal to other peers.
60
62
  *
@@ -62,15 +64,6 @@ export interface P2P {
62
64
  */
63
65
  broadcastProposal(proposal: BlockProposal): void;
64
66
 
65
- /**
66
- * Queries the Attestation pool for attestations for the given slot
67
- *
68
- * @param slot - the slot to query
69
- * @param proposalId - the proposal id to query
70
- * @returns BlockAttestations
71
- */
72
- getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]>;
73
-
74
67
  /**
75
68
  * Queries the EpochProofQuote pool for quotes for the given epoch
76
69
  *
@@ -122,12 +115,6 @@ export interface P2P {
122
115
  **/
123
116
  deleteTxs(txHashes: TxHash[]): Promise<void>;
124
117
 
125
- /**
126
- * Returns all transactions in the transaction pool.
127
- * @returns An array of Txs.
128
- */
129
- getTxs(filter: 'all' | 'pending' | 'mined'): Tx[];
130
-
131
118
  /**
132
119
  * Returns a transaction in the transaction pool by its hash.
133
120
  * @param txHash - Hash of tx to return.
@@ -173,9 +160,12 @@ export interface P2P {
173
160
  getStatus(): Promise<P2PSyncState>;
174
161
 
175
162
  /**
176
- * Returns the ENR for this node, if any.
163
+ * Returns the ENR of this node, if any.
177
164
  */
178
165
  getEnr(): ENR | undefined;
166
+
167
+ /** Identifies a p2p client. */
168
+ isP2PClient(): true;
179
169
  }
180
170
 
181
171
  /**
@@ -202,6 +192,9 @@ export class P2PClient extends WithTracer implements P2P {
202
192
  private attestationPool: AttestationPool;
203
193
  private epochProofQuotePool: EpochProofQuotePool;
204
194
 
195
+ /** How many slots to keep attestations for. */
196
+ private keepAttestationsInPoolFor: number;
197
+
205
198
  private blockStream;
206
199
 
207
200
  /**
@@ -220,13 +213,15 @@ export class P2PClient extends WithTracer implements P2P {
220
213
  private p2pService: P2PService,
221
214
  private keepProvenTxsFor: number,
222
215
  telemetry: TelemetryClient = new NoopTelemetryClient(),
223
- private log = createDebugLogger('aztec:p2p'),
216
+ private log = createLogger('p2p'),
224
217
  ) {
225
218
  super(telemetry, 'P2PClient');
226
219
 
227
- const { blockCheckIntervalMS, blockRequestBatchSize } = getP2PConfigFromEnv();
220
+ const { blockCheckIntervalMS, blockRequestBatchSize, keepAttestationsInPoolFor } = getP2PConfigFromEnv();
221
+
222
+ this.keepAttestationsInPoolFor = keepAttestationsInPoolFor;
228
223
 
229
- this.blockStream = new L2BlockStream(l2BlockSource, this, this, {
224
+ this.blockStream = new L2BlockStream(l2BlockSource, this, this, createLogger('p2p:block_stream'), {
230
225
  batchSize: blockRequestBatchSize,
231
226
  pollIntervalMS: blockCheckIntervalMS,
232
227
  });
@@ -240,6 +235,14 @@ export class P2PClient extends WithTracer implements P2P {
240
235
  this.epochProofQuotePool = mempools.epochProofQuotePool;
241
236
  }
242
237
 
238
+ public isP2PClient(): true {
239
+ return true;
240
+ }
241
+
242
+ public getPeers(includePending?: boolean): Promise<PeerInfo[]> {
243
+ return Promise.resolve(this.p2pService.getPeers(includePending));
244
+ }
245
+
243
246
  public getL2BlockHash(number: number): Promise<string | undefined> {
244
247
  return Promise.resolve(this.synchedBlockHashes.get(number));
245
248
  }
@@ -356,7 +359,7 @@ export class P2PClient extends WithTracer implements P2P {
356
359
  this.setCurrentState(P2PClientState.RUNNING);
357
360
  this.syncPromise = Promise.resolve();
358
361
  await this.p2pService.start();
359
- this.log.verbose(`Block ${syncedLatestBlock} (proven ${syncedProvenBlock}) already beyond current block`);
362
+ this.log.debug(`Block ${syncedLatestBlock} (proven ${syncedProvenBlock}) already beyond current block`);
360
363
  }
361
364
 
362
365
  // publish any txs in TxPool after its doing initial sync
@@ -431,14 +434,20 @@ export class P2PClient extends WithTracer implements P2P {
431
434
  public async requestTxByHash(txHash: TxHash): Promise<Tx | undefined> {
432
435
  const tx = await this.p2pService.sendRequest(TX_REQ_PROTOCOL, txHash);
433
436
 
434
- this.log.debug(`Requested ${txHash.toString()} from peer | success = ${!!tx}`);
435
437
  if (tx) {
438
+ this.log.debug(`Received tx ${txHash.toString()} from peer`);
436
439
  await this.txPool.addTxs([tx]);
440
+ } else {
441
+ this.log.debug(`Failed to receive tx ${txHash.toString()} from peer`);
437
442
  }
438
443
 
439
444
  return tx;
440
445
  }
441
446
 
447
+ public getPendingTxs(): Promise<Tx[]> {
448
+ return Promise.resolve(this.getTxs('pending'));
449
+ }
450
+
442
451
  /**
443
452
  * Returns all transactions in the transaction pool.
444
453
  * @returns An array of Txs.
@@ -509,6 +518,10 @@ export class P2PClient extends WithTracer implements P2P {
509
518
  return this.p2pService.getEnr();
510
519
  }
511
520
 
521
+ public getEncodedEnr(): Promise<string | undefined> {
522
+ return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
523
+ }
524
+
512
525
  /**
513
526
  * Deletes the 'txs' from the pool.
514
527
  * NOT used if we use sendTx as reconcileTxPool will handle this.
@@ -615,7 +628,9 @@ export class P2PClient extends WithTracer implements P2P {
615
628
 
616
629
  const firstBlockNum = blocks[0].number;
617
630
  const lastBlockNum = blocks[blocks.length - 1].number;
631
+ const lastBlockSlot = blocks[blocks.length - 1].header.globalVariables.slotNumber.toBigInt();
618
632
 
633
+ // If keepProvenTxsFor is 0, we delete all txs from all proven blocks.
619
634
  if (this.keepProvenTxsFor === 0) {
620
635
  await this.deleteTxsFromBlocks(blocks);
621
636
  } else if (lastBlockNum - this.keepProvenTxsFor >= INITIAL_L2_BLOCK_NUM) {
@@ -626,12 +641,19 @@ export class P2PClient extends WithTracer implements P2P {
626
641
  await this.deleteTxsFromBlocks(blocksToDeleteTxsFrom);
627
642
  }
628
643
 
644
+ // We delete attestations older than the last block slot minus the number of slots we want to keep in the pool.
645
+ const lastBlockSlotMinusKeepAttestationsInPoolFor = lastBlockSlot - BigInt(this.keepAttestationsInPoolFor);
646
+ if (lastBlockSlotMinusKeepAttestationsInPoolFor >= BigInt(INITIAL_L2_BLOCK_NUM)) {
647
+ await this.attestationPool.deleteAttestationsOlderThan(lastBlockSlotMinusKeepAttestationsInPoolFor);
648
+ }
649
+
629
650
  await this.synchedProvenBlockNumber.set(lastBlockNum);
630
651
  this.log.debug(`Synched to proven block ${lastBlockNum}`);
631
652
  const provenEpochNumber = await this.l2BlockSource.getProvenL2EpochNumber();
632
653
  if (provenEpochNumber !== undefined) {
633
654
  this.epochProofQuotePool.deleteQuotesToEpoch(BigInt(provenEpochNumber));
634
655
  }
656
+
635
657
  await this.startServiceIfSynched();
636
658
  }
637
659
 
@@ -695,8 +717,9 @@ export class P2PClient extends WithTracer implements P2P {
695
717
  * @param newState - New state value.
696
718
  */
697
719
  private setCurrentState(newState: P2PClientState) {
720
+ const oldState = this.currentState;
698
721
  this.currentState = newState;
699
- this.log.debug(`Moved to state ${P2PClientState[this.currentState]}`);
722
+ this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
700
723
  }
701
724
 
702
725
  private async publishStoredTxs() {
package/src/config.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  numberConfigHelper,
7
7
  pickConfigMappings,
8
8
  } from '@aztec/foundation/config';
9
+ import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
9
10
 
10
11
  import { type P2PReqRespConfig, p2pReqRespConfigMappings } from './service/reqresp/config.js';
11
12
 
@@ -91,6 +92,9 @@ export interface P2PConfig extends P2PReqRespConfig {
91
92
  /** How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven) */
92
93
  keepProvenTxsInPoolFor: number;
93
94
 
95
+ /** How many slots to keep attestations for. */
96
+ keepAttestationsInPoolFor: number;
97
+
94
98
  /**
95
99
  * The interval of the gossipsub heartbeat to perform maintenance tasks.
96
100
  */
@@ -229,6 +233,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
229
233
  'How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven)',
230
234
  ...numberConfigHelper(0),
231
235
  },
236
+ keepAttestationsInPoolFor: {
237
+ env: 'P2P_ATTESTATION_POOL_KEEP_FOR',
238
+ description: 'How many slots to keep attestations for.',
239
+ ...numberConfigHelper(96),
240
+ },
232
241
  gossipsubInterval: {
233
242
  env: 'P2P_GOSSIPSUB_INTERVAL_MS',
234
243
  description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
@@ -318,7 +327,8 @@ export type BootnodeConfig = Pick<
318
327
  P2PConfig,
319
328
  'udpAnnounceAddress' | 'peerIdPrivateKey' | 'minPeerCount' | 'maxPeerCount'
320
329
  > &
321
- Required<Pick<P2PConfig, 'udpListenAddress'>>;
330
+ Required<Pick<P2PConfig, 'udpListenAddress'>> &
331
+ Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB'>;
322
332
 
323
333
  const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
324
334
  'udpAnnounceAddress',
@@ -326,6 +336,11 @@ const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
326
336
  'minPeerCount',
327
337
  'maxPeerCount',
328
338
  'udpListenAddress',
339
+ 'dataDirectory',
340
+ 'dataStoreMapSizeKB',
329
341
  ];
330
342
 
331
- export const bootnodeConfigMappings = pickConfigMappings(p2pConfigMappings, bootnodeConfigKeys);
343
+ export const bootnodeConfigMappings = pickConfigMappings(
344
+ { ...p2pConfigMappings, ...dataConfigMappings },
345
+ bootnodeConfigKeys,
346
+ );
@@ -21,6 +21,15 @@ export interface AttestationPool {
21
21
  */
22
22
  deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
23
23
 
24
+ /**
25
+ * Delete Attestations with a slot number smaller than the given slot
26
+ *
27
+ * Removes all attestations associated with a slot
28
+ *
29
+ * @param slot - The oldest slot to keep.
30
+ */
31
+ deleteAttestationsOlderThan(slot: bigint): Promise<void>;
32
+
24
33
  /**
25
34
  * Delete Attestations for slot
26
35
  *