@aztec/p2p 0.0.1-commit.993d240 → 0.0.1-commit.9a89641

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 (201) hide show
  1. package/README.md +7 -6
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +20 -12
  5. package/dest/client/factory.d.ts +2 -2
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +10 -5
  8. package/dest/client/interface.d.ts +40 -9
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +23 -12
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +38 -35
  13. package/dest/config.d.ts +19 -13
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +27 -26
  16. package/dest/errors/reqresp.error.d.ts +13 -1
  17. package/dest/errors/reqresp.error.d.ts.map +1 -1
  18. package/dest/errors/reqresp.error.js +14 -0
  19. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -2
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool.js +9 -2
  22. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +43 -0
  25. package/dest/mem_pools/instrumentation.d.ts +9 -4
  26. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  27. package/dest/mem_pools/instrumentation.js +11 -8
  28. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  29. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  30. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  31. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  32. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  34. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  35. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -3
  37. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  38. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +3 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
  46. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +4 -5
  49. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
  52. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +30 -5
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +31 -0
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +19 -8
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +133 -34
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +6 -5
  65. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/attestation_validator/attestation_validator.js +24 -26
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -4
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  70. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +4 -3
  71. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  73. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +4 -3
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +19 -5
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/proposal_validator.js +66 -30
  79. package/dest/msg_validators/tx_validator/factory.d.ts +9 -11
  80. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/factory.js +15 -6
  82. package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -7
  83. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/gas_validator.js +15 -15
  85. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  86. package/dest/msg_validators/tx_validator/timestamp_validator.js +1 -1
  87. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +2 -2
  88. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/tx_validation_cache.js +6 -7
  90. package/dest/services/discv5/discV5_service.d.ts +12 -2
  91. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  92. package/dest/services/discv5/discV5_service.js +84 -15
  93. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  94. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  95. package/dest/services/discv5/persisted_enr_store.js +145 -0
  96. package/dest/services/dummy_service.d.ts +6 -2
  97. package/dest/services/dummy_service.d.ts.map +1 -1
  98. package/dest/services/dummy_service.js +3 -0
  99. package/dest/services/encoding.d.ts +19 -6
  100. package/dest/services/encoding.d.ts.map +1 -1
  101. package/dest/services/encoding.js +25 -15
  102. package/dest/services/gossipsub/topic_score_params.d.ts +6 -23
  103. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  104. package/dest/services/gossipsub/topic_score_params.js +4 -31
  105. package/dest/services/libp2p/libp2p_service.d.ts +12 -3
  106. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  107. package/dest/services/libp2p/libp2p_service.js +204 -114
  108. package/dest/services/peer-manager/peer_manager.d.ts +15 -2
  109. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  110. package/dest/services/peer-manager/peer_manager.js +46 -18
  111. package/dest/services/peer-manager/peer_scoring.d.ts +28 -1
  112. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  113. package/dest/services/peer-manager/peer_scoring.js +70 -3
  114. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  115. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  116. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +21 -39
  117. package/dest/services/reqresp/config.d.ts +13 -1
  118. package/dest/services/reqresp/config.d.ts.map +1 -1
  119. package/dest/services/reqresp/config.js +11 -0
  120. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  121. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  122. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  123. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  124. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  125. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +29 -28
  126. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  127. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  128. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  129. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -3
  130. package/dest/services/reqresp/reqresp.d.ts +1 -1
  131. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  132. package/dest/services/reqresp/reqresp.js +34 -3
  133. package/dest/services/service.d.ts +21 -1
  134. package/dest/services/service.d.ts.map +1 -1
  135. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  136. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  137. package/dest/services/tx_collection/tx_source.js +4 -1
  138. package/dest/test-helpers/testbench-utils.d.ts +4 -1
  139. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  140. package/dest/test-helpers/testbench-utils.js +11 -3
  141. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  142. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  143. package/dest/testbench/p2p_client_testbench_worker.js +19 -2
  144. package/package.json +15 -17
  145. package/src/bootstrap/bootstrap.ts +15 -9
  146. package/src/client/factory.ts +9 -5
  147. package/src/client/interface.ts +33 -7
  148. package/src/client/p2p_client.ts +46 -48
  149. package/src/config.ts +50 -38
  150. package/src/errors/reqresp.error.ts +19 -0
  151. package/src/mem_pools/attestation_pool/attestation_pool.ts +12 -2
  152. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +40 -1
  153. package/src/mem_pools/instrumentation.ts +13 -11
  154. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  155. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  156. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -4
  157. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
  158. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +3 -1
  159. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
  160. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +2 -4
  161. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
  162. package/src/mem_pools/tx_pool_v2/interfaces.ts +28 -4
  163. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
  164. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
  165. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +158 -33
  166. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -26
  167. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -3
  168. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -2
  169. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +10 -2
  170. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -30
  171. package/src/msg_validators/tx_validator/README.md +2 -0
  172. package/src/msg_validators/tx_validator/factory.ts +19 -13
  173. package/src/msg_validators/tx_validator/gas_validator.ts +16 -20
  174. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  175. package/src/msg_validators/tx_validator/timestamp_validator.ts +1 -1
  176. package/src/msg_validators/tx_validator/tx_validation_cache.ts +6 -7
  177. package/src/services/discv5/discV5_service.ts +88 -9
  178. package/src/services/discv5/persisted_enr_store.ts +158 -0
  179. package/src/services/dummy_service.ts +6 -0
  180. package/src/services/encoding.ts +28 -20
  181. package/src/services/gossipsub/README.md +33 -11
  182. package/src/services/gossipsub/topic_score_params.ts +9 -50
  183. package/src/services/libp2p/libp2p_service.ts +234 -125
  184. package/src/services/peer-manager/peer_manager.ts +48 -17
  185. package/src/services/peer-manager/peer_scoring.ts +75 -3
  186. package/src/services/reqresp/README.md +2 -23
  187. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +21 -45
  188. package/src/services/reqresp/config.ts +17 -0
  189. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  190. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +33 -31
  191. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  192. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -3
  193. package/src/services/reqresp/reqresp.ts +42 -2
  194. package/src/services/service.ts +23 -0
  195. package/src/services/tx_collection/tx_source.ts +2 -1
  196. package/src/test-helpers/testbench-utils.ts +13 -2
  197. package/src/testbench/p2p_client_testbench_worker.ts +22 -2
  198. package/dest/msg_validators/clock_tolerance.d.ts +0 -32
  199. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  200. package/dest/msg_validators/clock_tolerance.js +0 -95
  201. package/src/msg_validators/clock_tolerance.ts +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"testbench-utils.d.ts","sourceRoot":"","sources":["../../src/test-helpers/testbench-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testbench-utils.d.ts","sourceRoot":"","sources":["../../src/test-helpers/testbench-utils.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,9 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
101
101
  prepareForSlot(_slotNumber) {
102
102
  return Promise.resolve();
103
103
  }
104
+ unprotectTxs(_txHashes, _slotNumber) {
105
+ return Promise.resolve();
106
+ }
104
107
  handlePrunedBlocks(_latestBlock, _options) {
105
108
  return Promise.resolve();
106
109
  }
@@ -140,6 +143,9 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
140
143
  getPendingTxCount() {
141
144
  return Promise.resolve(this.txsByHash.size);
142
145
  }
146
+ async hasEligiblePendingTxs(minCount) {
147
+ return await this.getPendingTxCount() >= minCount;
148
+ }
143
149
  getMinedTxHashes() {
144
150
  return Promise.resolve([]);
145
151
  }
@@ -206,6 +212,9 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
206
212
  getCheckpointProposal(slot) {
207
213
  return Promise.resolve(this.checkpoints.get(slot)?.[0]);
208
214
  }
215
+ hasCheckpointProposalForSlot(slot) {
216
+ return Promise.resolve(this.checkpoints.has(slot));
217
+ }
209
218
  getProposalsForSlot(slot) {
210
219
  return Promise.resolve({
211
220
  blockProposals: [
@@ -261,8 +270,6 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
261
270
  ts: 0n,
262
271
  nowMs: 0n
263
272
  }),
264
- isProposerPipeliningEnabled: ()=>false,
265
- pipeliningOffset: ()=>0,
266
273
  computeProposerIndex: ()=>0n,
267
274
  getCurrentAndNextSlot: ()=>({
268
275
  currentSlot: SlotNumber.ZERO,
@@ -299,7 +306,8 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
299
306
  proofSubmissionEpochs: 1,
300
307
  targetCommitteeSize: 48,
301
308
  rollupManaLimit: Number.MAX_SAFE_INTEGER
302
- })
309
+ }),
310
+ getLagInEpochsForValidatorSet: ()=>2
303
311
  };
304
312
  return cache;
305
313
  }
@@ -23,4 +23,4 @@ export interface BenchResultMessage {
23
23
  export interface BenchReadyMessage {
24
24
  type: 'BENCH_READY';
25
25
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2Q0EsT0FBTyxFQUVMLEtBQUssbUJBQW1CLEVBT3pCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxJQUFJLEVBQUUsZUFBZSxDQUFDO0lBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDO0lBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDZDtBQUVELE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsSUFBSSxFQUFFLGNBQWMsQ0FBQztJQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxNQUFNLFdBQVcsaUJBQWlCO0lBQ2hDLElBQUksRUFBRSxhQUFhLENBQUM7Q0FDckIifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4Q0EsT0FBTyxFQUVMLEtBQUssbUJBQW1CLEVBT3pCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxJQUFJLEVBQUUsZUFBZSxDQUFDO0lBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDO0lBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDZDtBQUVELE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsSUFBSSxFQUFFLGNBQWMsQ0FBQztJQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxNQUFNLFdBQVcsaUJBQWlCO0lBQ2hDLElBQUksRUFBRSxhQUFhLENBQUM7Q0FDckIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":"AA6CA,OAAO,EAEL,KAAK,mBAAmB,EAOzB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB"}
1
+ {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":"AA8CA,OAAO,EAEL,KAAK,mBAAmB,EAOzB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB"}
@@ -13,6 +13,7 @@ import { DateProvider, Timer } from '@aztec/foundation/timer';
13
13
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
14
14
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15
15
  import { protocolContractsHash } from '@aztec/protocol-contracts';
16
+ import { EmptyL1RollupConstants } from '@aztec/stdlib/epoch-helpers';
16
17
  import { GasFees } from '@aztec/stdlib/gas';
17
18
  import { P2PMessage } from '@aztec/stdlib/p2p';
18
19
  import { ChonkProof } from '@aztec/stdlib/proofs';
@@ -29,6 +30,22 @@ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
29
30
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
30
31
  import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/index.js';
31
32
  const txCache = new Map();
33
+ const BENCH_L1_CONSTANTS = {
34
+ ...EmptyL1RollupConstants,
35
+ slotDuration: 12,
36
+ ethereumSlotDuration: 4
37
+ };
38
+ class TestbenchL2BlockSource extends MockL2BlockSource {
39
+ getL1Constants() {
40
+ return Promise.resolve(BENCH_L1_CONSTANTS);
41
+ }
42
+ }
43
+ function createBenchmarkEpochCache() {
44
+ return {
45
+ ...createMockEpochCache(),
46
+ getL1Constants: ()=>BENCH_L1_CONSTANTS
47
+ };
48
+ }
32
49
  class TestLibP2PService extends LibP2PService {
33
50
  disableTxValidation;
34
51
  gossipMessageCount = 0;
@@ -237,9 +254,9 @@ process.on('message', async (msg)=>{
237
254
  workerConfig = config;
238
255
  workerTxPool = new InMemoryTxPool();
239
256
  workerAttestationPool = new InMemoryAttestationPool();
240
- const epochCache = createMockEpochCache();
257
+ const epochCache = createBenchmarkEpochCache();
241
258
  const worldState = createMockWorldStateSynchronizer();
242
- const l2BlockSource = new MockL2BlockSource();
259
+ const l2BlockSource = new TestbenchL2BlockSource();
243
260
  const proofVerifier = new AlwaysTrueCircuitVerifier();
244
261
  kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
245
262
  workerLogger = createLogger(`p2p:${clientIndex}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.0.1-commit.993d240",
3
+ "version": "0.0.1-commit.9a89641",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -67,18 +67,17 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "0.0.1-commit.993d240",
71
- "@aztec/epoch-cache": "0.0.1-commit.993d240",
72
- "@aztec/ethereum": "0.0.1-commit.993d240",
73
- "@aztec/foundation": "0.0.1-commit.993d240",
74
- "@aztec/kv-store": "0.0.1-commit.993d240",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.993d240",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.993d240",
77
- "@aztec/protocol-contracts": "0.0.1-commit.993d240",
78
- "@aztec/simulator": "0.0.1-commit.993d240",
79
- "@aztec/standard-contracts": "0.0.1-commit.993d240",
80
- "@aztec/stdlib": "0.0.1-commit.993d240",
81
- "@aztec/telemetry-client": "0.0.1-commit.993d240",
70
+ "@aztec/constants": "0.0.1-commit.9a89641",
71
+ "@aztec/epoch-cache": "0.0.1-commit.9a89641",
72
+ "@aztec/ethereum": "0.0.1-commit.9a89641",
73
+ "@aztec/foundation": "0.0.1-commit.9a89641",
74
+ "@aztec/kv-store": "0.0.1-commit.9a89641",
75
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.9a89641",
76
+ "@aztec/protocol-contracts": "0.0.1-commit.9a89641",
77
+ "@aztec/simulator": "0.0.1-commit.9a89641",
78
+ "@aztec/standard-contracts": "0.0.1-commit.9a89641",
79
+ "@aztec/stdlib": "0.0.1-commit.9a89641",
80
+ "@aztec/telemetry-client": "0.0.1-commit.9a89641",
82
81
  "@chainsafe/libp2p-gossipsub": "13.0.0",
83
82
  "@chainsafe/libp2p-noise": "^15.0.0",
84
83
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -101,12 +100,11 @@
101
100
  "semver": "^7.6.0",
102
101
  "sha3": "^2.1.4",
103
102
  "snappy": "^7.2.2",
104
- "tslib": "^2.4.0",
105
- "xxhash-wasm": "^1.1.0"
103
+ "tslib": "^2.4.0"
106
104
  },
107
105
  "devDependencies": {
108
- "@aztec/archiver": "0.0.1-commit.993d240",
109
- "@aztec/world-state": "0.0.1-commit.993d240",
106
+ "@aztec/archiver": "0.0.1-commit.9a89641",
107
+ "@aztec/world-state": "0.0.1-commit.9a89641",
110
108
  "@jest/globals": "^30.0.0",
111
109
  "@types/jest": "^30.0.0",
112
110
  "@types/node": "^22.15.17",
@@ -84,15 +84,21 @@ export class BootstrapNode implements P2PBootstrapApi {
84
84
  this.logger.info('Advertised socket address updated', { addr: addr.toString() });
85
85
  });
86
86
  this.node.on('discovered', async (enr: SignableENR) => {
87
- const addr = await enr.getFullMultiaddr('udp');
88
- this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
89
- // discv5's discovered() only updates routing table entries that already exist. Nodes that
90
- // established a session with an empty-IP ENR are never inserted, so even after their ENR
91
- // gains a valid socket address the routing table stays empty and FINDNODE always returns 0
92
- // peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
93
- // the routing table so these nodes become discoverable to other peers.
94
- if (addr) {
95
- this.node.addEnr(enr);
87
+ try {
88
+ const addr = await enr.getFullMultiaddr('udp');
89
+ this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
90
+ // discv5's discovered() only updates routing table entries that already exist. Nodes that
91
+ // established a session with an empty-IP ENR are never inserted, so even after their ENR
92
+ // gains a valid socket address the routing table stays empty and FINDNODE always returns 0
93
+ // peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
94
+ // the routing table so these nodes become discoverable to other peers.
95
+ if (addr) {
96
+ this.node.addEnr(enr);
97
+ }
98
+ } catch (err) {
99
+ // A malformed ENR address field makes the parser throw. As an async listener this would crash
100
+ // the bootnode on an unhandled rejection — catch, log, and drop the ENR instead.
101
+ this.logger.warn(`Dropping discovered ENR with unparseable address`, { err });
96
102
  }
97
103
  });
98
104
 
@@ -7,7 +7,7 @@ import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
7
7
  import type { BlockHash, L2BlockSource } from '@aztec/stdlib/block';
8
8
  import type { ChainConfig } from '@aztec/stdlib/config';
9
9
  import type { ContractDataSource } from '@aztec/stdlib/contract';
10
- import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
10
+ import { type BlockMinFeesProvider, getNetworkTxGasLimits } from '@aztec/stdlib/gas';
11
11
  import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
12
12
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
13
13
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -75,7 +75,10 @@ export async function createP2PClient(
75
75
  }
76
76
 
77
77
  const bindings = logger.getBindings();
78
- const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
78
+ // Schema version 4: L2 tips store resolves checkpoint tips from per-tip ids in l2_tip_checkpoints; the
79
+ // block->checkpoint mapping and checkpoint maps were dropped. Bumped to wipe stores whose tips predate
80
+ // per-tip ids, which would otherwise make getL2Tips throw on every read.
81
+ const store = deps.store ?? (await createStore(P2P_STORE_NAME, 4, config, bindings));
79
82
  const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
80
83
  const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
81
84
  const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
@@ -108,14 +111,14 @@ export async function createP2PClient(
108
111
  const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
109
112
  const l1Constants = await archiver.getL1Constants();
110
113
  const gasFees = await blockMinFeesProvider.getCurrentMinFees();
114
+ const networkTxGasLimits = getNetworkTxGasLimits(config, l1Constants);
111
115
  return createTxValidatorForTransactionsEnteringPendingTxPool(
112
116
  worldStateSynchronizer,
113
117
  nextSlotTimestamp,
114
118
  BlockNumber(currentBlockNumber + 1),
115
119
  {
116
- rollupManaLimit: l1Constants.rollupManaLimit,
117
- maxBlockL2Gas: config.validateMaxL2BlockGas,
118
- maxBlockDAGas: config.validateMaxDABlockGas,
120
+ maxTxL2Gas: networkTxGasLimits.l2Gas,
121
+ maxTxDAGas: networkTxGasLimits.daGas,
119
122
  },
120
123
  gasFees,
121
124
  );
@@ -129,6 +132,7 @@ export async function createP2PClient(
129
132
  minTxPoolAgeMs: config.minTxPoolAgeMs,
130
133
  dropTransactionsProbability: config.dropTransactionsProbability,
131
134
  priceBumpPercentage: config.priceBumpPercentage,
135
+ keepFinalizedTxsForSlots: config.keepFinalizedTxsForSlots,
132
136
  },
133
137
  dateProvider,
134
138
  );
@@ -13,6 +13,7 @@ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from '../services/
13
13
  import type {
14
14
  DuplicateAttestationInfo,
15
15
  DuplicateProposalInfo,
16
+ OversizedProposalInfo,
16
17
  P2PBlockReceivedCallback,
17
18
  P2PCheckpointAttestationCallback,
18
19
  P2PCheckpointReceivedCallback,
@@ -97,6 +98,14 @@ export type P2P = P2PClient & {
97
98
  */
98
99
  registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
99
100
 
101
+ /**
102
+ * Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
103
+ * per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
104
+ *
105
+ * @param callback - Function called with info about the oversized proposal
106
+ */
107
+ registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
108
+
100
109
  /**
101
110
  * Registers a callback invoked when a duplicate attestation is detected (equivocation).
102
111
  * A validator signing attestations for different proposals at the same slot.
@@ -124,16 +133,18 @@ export type P2P = P2PClient & {
124
133
  /**
125
134
  * Returns a transaction in the transaction pool by its hash.
126
135
  * @param txHash - Hash of tx to return.
136
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
127
137
  * @returns A single tx or undefined.
128
138
  */
129
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
139
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined>;
130
140
 
131
141
  /**
132
142
  * Returns transactions in the transaction pool by hash.
133
143
  * @param txHashes - Hashes of txs to return.
144
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
134
145
  * @returns An array of txs or undefined.
135
146
  */
136
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
147
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]>;
137
148
 
138
149
  /**
139
150
  * Checks if transactions exist in the pool
@@ -156,15 +167,27 @@ export type P2P = P2PClient & {
156
167
  */
157
168
  getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
158
169
 
159
- /** Returns an iterator over pending txs on the mempool. */
160
- iteratePendingTxs(): AsyncIterableIterator<Tx>;
170
+ /**
171
+ * Returns an iterator over pending txs on the mempool.
172
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
173
+ */
174
+ iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
161
175
 
162
- /** Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building. */
163
- iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
176
+ /**
177
+ * Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building.
178
+ * Set `includeProof: false` to skip loading tx proofs from the DB.
179
+ */
180
+ iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
164
181
 
165
182
  /** Returns the number of pending txs in the mempool. */
166
183
  getPendingTxCount(): Promise<number>;
167
184
 
185
+ /**
186
+ * Returns whether at least `minCount` pending txs have been in the pool long enough to be eligible for block
187
+ * building. Early-exits once the threshold is met instead of counting every eligible tx.
188
+ */
189
+ hasEligiblePendingTxs(minCount: number): Promise<boolean>;
190
+
168
191
  /**
169
192
  * Protects existing transactions by hash for a given slot.
170
193
  * Returns hashes of transactions that weren't found in the pool.
@@ -218,7 +241,10 @@ export type P2P = P2PClient & {
218
241
 
219
242
  updateP2PConfig(config: Partial<P2PConfig>): Promise<void>;
220
243
 
221
- /** Validates a set of txs received in a block proposal. */
244
+ /**
245
+ * Validates a set of txs received in a block proposal.
246
+ * @throws InvalidBlockProposalTxsError - If any tx fails minimum integrity validation.
247
+ */
222
248
  validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
223
249
 
224
250
  /** Clears the db. */
@@ -6,7 +6,6 @@ import {
6
6
  SlotNumber,
7
7
  } from '@aztec/foundation/branded-types';
8
8
  import { createLogger } from '@aztec/foundation/log';
9
- import { RunningPromise } from '@aztec/foundation/promise';
10
9
  import { DateProvider } from '@aztec/foundation/timer';
11
10
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
12
11
  import { L2TipsKVStore } from '@aztec/kv-store/stores';
@@ -15,17 +14,17 @@ import {
15
14
  type BlockHash,
16
15
  type CheckpointId,
17
16
  type EthAddress,
17
+ EventDrivenL2BlockStream,
18
18
  type L2Block,
19
19
  type L2BlockId,
20
20
  type L2BlockSource,
21
- L2BlockStream,
22
21
  type L2BlockStreamEvent,
23
- type L2Tips,
24
22
  type L2TipsStore,
23
+ type LocalL2Tips,
25
24
  } from '@aztec/stdlib/block';
26
25
  import type { ContractDataSource } from '@aztec/stdlib/contract';
27
26
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
28
- import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
27
+ import { type GetTxByHashOptions, type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
29
28
  import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
30
29
  import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
31
30
  import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
@@ -43,6 +42,7 @@ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/
43
42
  import type {
44
43
  DuplicateAttestationInfo,
45
44
  DuplicateProposalInfo,
45
+ OversizedProposalInfo,
46
46
  P2PBlockReceivedCallback,
47
47
  P2PCheckpointReceivedCallback,
48
48
  P2PService,
@@ -74,7 +74,7 @@ export class P2PClient extends WithTracer implements P2P {
74
74
 
75
75
  private config: P2PConfig;
76
76
 
77
- private blockStream: L2BlockStream | undefined;
77
+ private blockStream: EventDrivenL2BlockStream | undefined;
78
78
 
79
79
  private txProvider: TxProvider;
80
80
 
@@ -83,9 +83,6 @@ export class P2PClient extends WithTracer implements P2P {
83
83
  /** Tracks the last slot for which we called prepareForSlot */
84
84
  private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
85
85
 
86
- /** Polls for slot changes and calls prepareForSlot on the tx pool */
87
- private slotMonitor: RunningPromise | undefined;
88
-
89
86
  constructor(
90
87
  private store: AztecAsyncKVStore,
91
88
  private l2BlockSource: L2BlockSource & ContractDataSource,
@@ -152,7 +149,7 @@ export class P2PClient extends WithTracer implements P2P {
152
149
  this.p2pService.updateConfig(config);
153
150
  }
154
151
 
155
- public getL2Tips(): Promise<L2Tips> {
152
+ public getL2Tips(): Promise<LocalL2Tips> {
156
153
  return this.l2Tips.getL2Tips();
157
154
  }
158
155
 
@@ -178,10 +175,12 @@ export class P2PClient extends WithTracer implements P2P {
178
175
  break;
179
176
  case 'chain-pruned':
180
177
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
181
- await this.handlePruneL2Blocks(event.block, event.checkpoint);
178
+ await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
182
179
  break;
183
180
  case 'chain-checkpointed':
184
181
  break;
182
+ case 'chain-proposed':
183
+ break;
185
184
  default: {
186
185
  const _: never = event;
187
186
  break;
@@ -268,14 +267,6 @@ export class P2PClient extends WithTracer implements P2P {
268
267
  this.blockStream.start();
269
268
  this.txFileStore?.start();
270
269
 
271
- // Start slot monitor to call prepareForSlot when the slot changes
272
- this.slotMonitor = new RunningPromise(
273
- () => this.maybeCallPrepareForSlot(),
274
- this.log,
275
- this.config.slotCheckIntervalMS,
276
- );
277
- this.slotMonitor.start();
278
-
279
270
  return this.syncPromise;
280
271
  }
281
272
 
@@ -286,7 +277,7 @@ export class P2PClient extends WithTracer implements P2P {
286
277
  private initBlockStream(startingBlock?: BlockNumber) {
287
278
  if (!this.blockStream) {
288
279
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
289
- this.blockStream = new L2BlockStream(
280
+ this.blockStream = new EventDrivenL2BlockStream(
290
281
  this.l2BlockSource,
291
282
  this,
292
283
  this,
@@ -302,8 +293,6 @@ export class P2PClient extends WithTracer implements P2P {
302
293
  */
303
294
  public async stop() {
304
295
  this.log.debug('Stopping p2p client...');
305
- await this.slotMonitor?.stop();
306
- this.log.debug('Stopped slot monitor');
307
296
  await tryStop(this.txCollection);
308
297
  this.log.debug('Stopped tx collection service');
309
298
  await this.txFileStore?.stop();
@@ -406,6 +395,10 @@ export class P2PClient extends WithTracer implements P2P {
406
395
  return this.attestationPool.hasBlockProposalsForSlot(slot);
407
396
  }
408
397
 
398
+ public hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
399
+ return this.attestationPool.hasCheckpointProposalForSlot(slot);
400
+ }
401
+
409
402
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
410
403
  // ^ This pattern is not my favorite (md)
411
404
  public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
@@ -424,6 +417,10 @@ export class P2PClient extends WithTracer implements P2P {
424
417
  this.p2pService.registerDuplicateProposalCallback(callback);
425
418
  }
426
419
 
420
+ public registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void {
421
+ this.p2pService.registerOversizedProposalCallback(callback);
422
+ }
423
+
427
424
  public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
428
425
  this.p2pService.registerDuplicateAttestationCallback(callback);
429
426
  }
@@ -432,7 +429,7 @@ export class P2PClient extends WithTracer implements P2P {
432
429
  this.p2pService.registerCheckpointAttestationCallback(callback);
433
430
  }
434
431
 
435
- public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
432
+ public async getPendingTxs(limit?: number, after?: TxHash, options?: GetTxByHashOptions): Promise<Tx[]> {
436
433
  if (limit !== undefined && limit <= 0) {
437
434
  throw new TypeError('limit must be greater than 0');
438
435
  }
@@ -451,7 +448,9 @@ export class P2PClient extends WithTracer implements P2P {
451
448
  const endIndex = limit !== undefined ? startIndex + limit : undefined;
452
449
  txHashes = txHashes.slice(startIndex, endIndex);
453
450
 
454
- const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash)));
451
+ // This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
452
+ const includeProof = !!options?.includeProof;
453
+ const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash, { includeProof })));
455
454
  return maybeTxs.filter((tx): tx is Tx => !!tx);
456
455
  }
457
456
 
@@ -459,18 +458,22 @@ export class P2PClient extends WithTracer implements P2P {
459
458
  return this.txPool.getPendingTxCount();
460
459
  }
461
460
 
462
- public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
461
+ public hasEligiblePendingTxs(minCount: number): Promise<boolean> {
462
+ return this.txPool.hasEligiblePendingTxs(minCount);
463
+ }
464
+
465
+ public async *iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
463
466
  for (const txHash of await this.txPool.getPendingTxHashes()) {
464
- const tx = await this.txPool.getTxByHash(txHash);
467
+ const tx = await this.txPool.getTxByHash(txHash, opts);
465
468
  if (tx) {
466
469
  yield tx;
467
470
  }
468
471
  }
469
472
  }
470
473
 
471
- public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
474
+ public async *iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
472
475
  for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
473
- const tx = await this.txPool.getTxByHash(txHash);
476
+ const tx = await this.txPool.getTxByHash(txHash, opts);
474
477
  if (tx) {
475
478
  yield tx;
476
479
  }
@@ -480,19 +483,21 @@ export class P2PClient extends WithTracer implements P2P {
480
483
  /**
481
484
  * Returns a transaction in the transaction pool by its hash.
482
485
  * @param txHash - Hash of the transaction to look for in the pool.
486
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
483
487
  * @returns A single tx or undefined.
484
488
  */
485
- getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
486
- return this.txPool.getTxByHash(txHash);
489
+ getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
490
+ return this.txPool.getTxByHash(txHash, opts);
487
491
  }
488
492
 
489
493
  /**
490
494
  * Returns transactions in the transaction pool by hash.
491
495
  * @param txHashes - Hashes of the transactions to look for.
496
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
492
497
  * @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
493
498
  */
494
- getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
495
- return this.txPool.getTxsByHash(txHashes);
499
+ getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
500
+ return this.txPool.getTxsByHash(txHashes, opts);
496
501
  }
497
502
 
498
503
  hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]> {
@@ -634,11 +639,16 @@ export class P2PClient extends WithTracer implements P2P {
634
639
  return;
635
640
  }
636
641
 
642
+ const lastBlock = blocks.at(-1)!;
643
+ const lastSlot = lastBlock.header.getSlot();
644
+
645
+ // Mark txs mined before releasing protections: a block landing at this slot supersedes any
646
+ // protection for txs it includes, so mined-marking must run first to keep just-landed txs from
647
+ // being unprotected into pending where they could be evicted before they are recorded as mined.
637
648
  await this.handleMinedBlocks(blocks);
638
- await this.maybeCallPrepareForSlot();
649
+ await this.maybeCallPrepareForSlot(lastSlot);
639
650
  await this.collectingMissingTxs(blocks);
640
- const lastBlock = blocks.at(-1)!;
641
- await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
651
+ await this.synchedLatestSlot.set(BigInt(lastSlot));
642
652
  }
643
653
 
644
654
  /** Request txs for unproven blocks so the prover node can prove. */
@@ -733,20 +743,8 @@ export class P2PClient extends WithTracer implements P2P {
733
743
  return isEpochPrune;
734
744
  }
735
745
 
736
- /** Checks if the slot has changed and calls prepareForSlot if so. */
737
- private async maybeCallPrepareForSlot(): Promise<void> {
738
- // If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
739
- const l2Tips = await this.l2Tips.getL2Tips();
740
- const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
741
-
742
- let slot;
743
- if (this.epochCache.isProposerPipeliningEnabled() && hasProposedCheckpoint) {
744
- const { targetSlot } = this.epochCache.getTargetAndNextSlot();
745
- slot = targetSlot;
746
- } else {
747
- const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
748
- slot = currentSlot;
749
- }
746
+ /** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */
747
+ private async maybeCallPrepareForSlot(slot: SlotNumber): Promise<void> {
750
748
  if (slot <= this.lastSlotProcessed) {
751
749
  return;
752
750
  }