@aztec/p2p 0.0.1-commit.0208eb9 → 0.0.1-commit.031e54b

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 (541) hide show
  1. package/README.md +129 -3
  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 +9 -1
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +60 -18
  8. package/dest/client/interface.d.ts +58 -36
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +50 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +224 -235
  13. package/dest/config.d.ts +161 -94
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +150 -41
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +507 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +33 -15
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +56 -3
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  124. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  126. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  127. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  129. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  130. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  132. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  133. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  135. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  136. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  138. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  139. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  140. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  141. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  151. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  154. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  157. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  158. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/factory.js +252 -61
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  163. package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  166. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  167. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/index.js +4 -0
  169. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  172. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  175. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  178. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  182. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  184. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  185. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  186. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  187. package/dest/services/data_store.d.ts +1 -1
  188. package/dest/services/data_store.d.ts.map +1 -1
  189. package/dest/services/data_store.js +5 -5
  190. package/dest/services/discv5/discV5_service.d.ts +2 -1
  191. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  192. package/dest/services/discv5/discV5_service.js +35 -8
  193. package/dest/services/dummy_service.d.ts +22 -18
  194. package/dest/services/dummy_service.d.ts.map +1 -1
  195. package/dest/services/dummy_service.js +22 -20
  196. package/dest/services/encoding.d.ts +7 -3
  197. package/dest/services/encoding.d.ts.map +1 -1
  198. package/dest/services/encoding.js +18 -11
  199. package/dest/services/gossipsub/index.d.ts +3 -0
  200. package/dest/services/gossipsub/index.d.ts.map +1 -0
  201. package/dest/services/gossipsub/index.js +2 -0
  202. package/dest/services/gossipsub/scoring.d.ts +21 -3
  203. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  204. package/dest/services/gossipsub/scoring.js +24 -7
  205. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  206. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  207. package/dest/services/gossipsub/topic_score_params.js +363 -0
  208. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  209. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  210. package/dest/services/libp2p/instrumentation.js +14 -0
  211. package/dest/services/libp2p/libp2p_service.d.ts +102 -60
  212. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  213. package/dest/services/libp2p/libp2p_service.js +685 -562
  214. package/dest/services/peer-manager/metrics.d.ts +3 -1
  215. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  216. package/dest/services/peer-manager/metrics.js +6 -0
  217. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  218. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  219. package/dest/services/peer-manager/peer_manager.js +40 -11
  220. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  221. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  222. package/dest/services/peer-manager/peer_scoring.js +57 -12
  223. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -10
  224. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  225. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +100 -132
  226. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
  227. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  228. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  229. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  230. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  231. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  232. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  233. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  234. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  235. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  236. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  237. package/dest/services/reqresp/config.d.ts +3 -3
  238. package/dest/services/reqresp/config.d.ts.map +1 -1
  239. package/dest/services/reqresp/interface.d.ts +25 -18
  240. package/dest/services/reqresp/interface.d.ts.map +1 -1
  241. package/dest/services/reqresp/interface.js +23 -19
  242. package/dest/services/reqresp/metrics.d.ts +1 -1
  243. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  244. package/dest/services/reqresp/metrics.js +0 -1
  245. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  246. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  247. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  248. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  249. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  250. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +34 -26
  251. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +32 -16
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +68 -34
  254. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  255. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  256. package/dest/services/reqresp/protocols/index.js +0 -1
  257. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  258. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  259. package/dest/services/reqresp/protocols/tx.js +21 -3
  260. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  261. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  262. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  263. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  264. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  265. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  266. package/dest/services/reqresp/reqresp.d.ts +7 -29
  267. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  268. package/dest/services/reqresp/reqresp.js +53 -218
  269. package/dest/services/service.d.ts +46 -13
  270. package/dest/services/service.d.ts.map +1 -1
  271. package/dest/services/tx_collection/config.d.ts +11 -14
  272. package/dest/services/tx_collection/config.d.ts.map +1 -1
  273. package/dest/services/tx_collection/config.js +26 -33
  274. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  275. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  276. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  277. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  278. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  279. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  280. package/dest/services/tx_collection/index.d.ts +3 -3
  281. package/dest/services/tx_collection/index.d.ts.map +1 -1
  282. package/dest/services/tx_collection/index.js +1 -1
  283. package/dest/services/tx_collection/instrumentation.js +1 -2
  284. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  285. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  286. package/dest/services/tx_collection/request_tracker.js +84 -0
  287. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  288. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  289. package/dest/services/tx_collection/tx_collection.js +296 -68
  290. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  291. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  292. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  293. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  294. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  295. package/dest/services/tx_collection/tx_source.js +26 -7
  296. package/dest/services/tx_file_store/config.d.ts +1 -3
  297. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  298. package/dest/services/tx_file_store/config.js +0 -4
  299. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -5
  300. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  301. package/dest/services/tx_file_store/tx_file_store.js +13 -20
  302. package/dest/services/tx_provider.d.ts +6 -4
  303. package/dest/services/tx_provider.d.ts.map +1 -1
  304. package/dest/services/tx_provider.js +12 -8
  305. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  306. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  307. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  308. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  309. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  310. package/dest/test-helpers/mock-pubsub.js +115 -14
  311. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  312. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  313. package/dest/test-helpers/reqresp-nodes.js +19 -20
  314. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  315. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  316. package/dest/test-helpers/test_tx_provider.js +3 -0
  317. package/dest/test-helpers/testbench-utils.d.ts +53 -50
  318. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  319. package/dest/test-helpers/testbench-utils.js +169 -75
  320. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  321. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  322. package/dest/testbench/p2p_client_testbench_worker.js +94 -48
  323. package/dest/testbench/worker_client_manager.d.ts +12 -6
  324. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  325. package/dest/testbench/worker_client_manager.js +57 -11
  326. package/dest/util.d.ts +13 -8
  327. package/dest/util.d.ts.map +1 -1
  328. package/dest/util.js +35 -14
  329. package/dest/versioning.d.ts +3 -6
  330. package/dest/versioning.d.ts.map +1 -1
  331. package/dest/versioning.js +3 -24
  332. package/package.json +15 -14
  333. package/src/bootstrap/bootstrap.ts +9 -1
  334. package/src/client/factory.ts +127 -31
  335. package/src/client/interface.ts +70 -44
  336. package/src/client/p2p_client.ts +268 -299
  337. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  338. package/src/config.ts +260 -46
  339. package/src/errors/p2p-service.error.ts +11 -0
  340. package/src/errors/reqresp.error.ts +0 -25
  341. package/src/errors/tx-pool.error.ts +12 -0
  342. package/src/index.ts +1 -1
  343. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  344. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  345. package/src/mem_pools/attestation_pool/index.ts +9 -2
  346. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  347. package/src/mem_pools/index.ts +2 -2
  348. package/src/mem_pools/instrumentation.ts +22 -14
  349. package/src/mem_pools/interface.ts +4 -4
  350. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  351. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  352. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  353. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  354. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  355. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  356. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  357. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  358. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  359. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  360. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  361. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  362. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  363. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  364. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  365. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  366. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  367. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  368. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  369. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  370. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  371. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  372. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  373. package/src/msg_validators/attestation_validator/README.md +49 -0
  374. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  375. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -9
  376. package/src/msg_validators/clock_tolerance.ts +73 -3
  377. package/src/msg_validators/proposal_validator/README.md +123 -0
  378. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  379. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  380. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  381. package/src/msg_validators/tx_validator/README.md +127 -0
  382. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  383. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  384. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  385. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  386. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  387. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  388. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  389. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  390. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  391. package/src/msg_validators/tx_validator/factory.ts +407 -80
  392. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  393. package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
  394. package/src/msg_validators/tx_validator/index.ts +4 -0
  395. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  396. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  397. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  398. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  399. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  400. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  401. package/src/services/data_store.ts +5 -13
  402. package/src/services/discv5/discV5_service.ts +38 -5
  403. package/src/services/dummy_service.ts +32 -45
  404. package/src/services/encoding.ts +18 -10
  405. package/src/services/gossipsub/README.md +641 -0
  406. package/src/services/gossipsub/index.ts +2 -0
  407. package/src/services/gossipsub/scoring.ts +29 -5
  408. package/src/services/gossipsub/topic_score_params.ts +519 -0
  409. package/src/services/libp2p/instrumentation.ts +14 -0
  410. package/src/services/libp2p/libp2p_service.ts +738 -620
  411. package/src/services/peer-manager/metrics.ts +7 -0
  412. package/src/services/peer-manager/peer_manager.ts +46 -11
  413. package/src/services/peer-manager/peer_scoring.ts +52 -5
  414. package/src/services/reqresp/README.md +215 -0
  415. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  416. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
  417. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  418. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  419. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  420. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  421. package/src/services/reqresp/config.ts +2 -2
  422. package/src/services/reqresp/interface.ts +45 -46
  423. package/src/services/reqresp/metrics.ts +0 -1
  424. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  425. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
  426. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +84 -34
  427. package/src/services/reqresp/protocols/index.ts +0 -1
  428. package/src/services/reqresp/protocols/tx.ts +23 -3
  429. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  430. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  431. package/src/services/reqresp/reqresp.ts +61 -264
  432. package/src/services/service.ts +62 -29
  433. package/src/services/tx_collection/config.ts +40 -49
  434. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  435. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  436. package/src/services/tx_collection/index.ts +2 -6
  437. package/src/services/tx_collection/instrumentation.ts +1 -1
  438. package/src/services/tx_collection/request_tracker.ts +127 -0
  439. package/src/services/tx_collection/tx_collection.ts +362 -110
  440. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  441. package/src/services/tx_collection/tx_source.ts +28 -8
  442. package/src/services/tx_file_store/config.ts +0 -6
  443. package/src/services/tx_file_store/tx_file_store.ts +15 -25
  444. package/src/services/tx_provider.ts +15 -9
  445. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  446. package/src/test-helpers/mock-pubsub.ts +137 -14
  447. package/src/test-helpers/reqresp-nodes.ts +17 -29
  448. package/src/test-helpers/test_tx_provider.ts +5 -0
  449. package/src/test-helpers/testbench-utils.ts +175 -96
  450. package/src/testbench/p2p_client_testbench_worker.ts +100 -63
  451. package/src/testbench/worker_client_manager.ts +72 -25
  452. package/src/util.ts +40 -19
  453. package/src/versioning.ts +3 -33
  454. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  455. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  456. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  457. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  458. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  459. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  460. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  461. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  462. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  463. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  464. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  465. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  466. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  467. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  468. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  469. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  470. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  471. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  472. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  473. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  474. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  475. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  476. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  477. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  478. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  479. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  480. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  481. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  482. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  483. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  484. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  485. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  486. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  487. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  488. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  489. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  490. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  491. package/dest/mem_pools/tx_pool/index.js +0 -2
  492. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  493. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  494. package/dest/mem_pools/tx_pool/priority.js +0 -15
  495. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  496. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  497. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  498. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  499. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  500. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  501. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  502. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  503. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  504. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  505. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  506. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  507. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  508. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  509. package/dest/services/reqresp/protocols/block.js +0 -32
  510. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  511. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  512. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  513. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  514. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  515. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  516. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  517. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  518. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  519. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  520. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  521. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  522. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  523. package/src/mem_pools/tx_pool/README.md +0 -270
  524. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  525. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  526. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  527. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  528. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  529. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  530. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  531. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  532. package/src/mem_pools/tx_pool/index.ts +0 -2
  533. package/src/mem_pools/tx_pool/priority.ts +0 -20
  534. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  535. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  536. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  537. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  538. package/src/services/reqresp/protocols/block.ts +0 -37
  539. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  540. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  541. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,6 +1,6 @@
1
- # ProposalTxCollector Benchmarks
1
+ # BatchTxRequester Benchmarks
2
2
 
3
- This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal. It compares two alternative transaction-collection implementations under several controlled "who-has-which-txs" distributions.
3
+ This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal under several controlled "who-has-which-txs" distributions.
4
4
 
5
5
  ## Purpose
6
6
 
@@ -10,12 +10,6 @@ This benchmark answers:
10
10
 
11
11
  - How long does it take to fetch **N missing txs** (N ∈ **{10, 50, 100, 500}**)?
12
12
  - How do different **peer availability patterns** affect performance?
13
- - Which collector strategy performs better under each pattern?
14
-
15
- The suite compares two collectors:
16
-
17
- - **`BatchTxRequesterCollector`** (collector type: `batch-requester`)
18
- - **`SendBatchRequestCollector`** (collector type: `send-batch-request`)
19
13
 
20
14
  ## Architecture
21
15
 
@@ -24,7 +18,7 @@ The benchmark runs a small simulated network on localhost:
24
18
  ```
25
19
  ┌─────────────────────────────────────────────────────────────────────┐
26
20
  │ Test Process (Driver) │
27
- │ p2p_client.proposal_tx_collector.bench.test.ts │
21
+ │ p2p_client.batch_tx_requester.bench.test.ts │
28
22
  │ ┌─────────────────────────────────────────────────────────────┐ │
29
23
  │ │ WorkerClientManager │ │
30
24
  │ │ (src/testbench/worker_client_manager.ts) │ │
@@ -34,7 +28,7 @@ The benchmark runs a small simulated network on localhost:
34
28
  │ ▼ ▼ ▼ │
35
29
  │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
36
30
  │ │ Worker 0 │◄──────►│ Worker 1 │◄──────►│ Worker N-1│ │
37
- │ │ (Collector│ P2P │(Responder)│ P2P │(Responder)│ │
31
+ │ │(Aggregator│ P2P │(Responder)│ P2P │(Responder)│ │
38
32
  │ │ Node) │ │ │ │ │ │
39
33
  │ │ TxPool:[] │ │ TxPool: │ │ TxPool: │ │
40
34
  │ │ │ │ [txs...] │ │ [txs...] │ │
@@ -54,12 +48,12 @@ Using separate OS processes makes the setup closer to real networking behavior (
54
48
 
55
49
  The network is intentionally asymmetric:
56
50
 
57
- - **Worker 0 is the collector/proposer node**
51
+ - **Worker 0 is the aggregator/proposer node**
58
52
  - Starts with an **empty tx pool** (`[]`)
59
- - Is the only worker instructed to run the collector for each `BENCH_REQRESP` command
53
+ - Is the only worker instructed to run `BatchTxRequester` for each `BENCH_REQRESP` command
60
54
  - **Workers 1..N-1 are responder peers**
61
55
  - Locally generate and filter txs according to the distribution pattern
62
- - Respond to req/resp queries made by Worker 0's collector
56
+ - Respond to req/resp queries made by Worker 0's `BatchTxRequester`
63
57
 
64
58
  This models a proposer that has only `txHashes` in a proposal and must fetch the full tx bodies from the network.
65
59
 
@@ -72,7 +66,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
72
66
  **Every responder peer has every transaction.**
73
67
 
74
68
  - Simulates the best-case: high replication / high gossip success
75
- - Expectation: collector should quickly succeed; differences mostly reflect collector overhead and batching strategy
69
+ - Expectation: the requester should quickly succeed; differences mostly reflect requester overhead and batching strategy
76
70
 
77
71
  ### `sparse`
78
72
 
@@ -81,7 +75,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
81
75
  Each responder is bucketed and holds txs whose index falls into its bucket or the "next" bucket (striped by tx index).
82
76
 
83
77
  - Simulates partial propagation, churn, or uneven mempool convergence
84
- - Expectation: collector must query multiple peers and cope with "misses"
78
+ - Expectation: the requester must query multiple peers and cope with "misses"
85
79
 
86
80
  ### `pinned-only`
87
81
 
@@ -92,33 +86,13 @@ Each responder is bucketed and holds txs whose index falls into its bucket or th
92
86
 
93
87
  > **Guardrail:** the pinned peer index must be within `(0, numberOfPeers)` (Worker 0 cannot be pinned).
94
88
 
95
- ## Collectors Under Test
96
-
97
- ### `BatchTxRequesterCollector` (`batch-requester`)
98
-
99
- ```typescript
100
- new BatchTxRequesterCollector(p2pService, logger, new DateProvider())
101
- ```
102
-
103
- Uses the P2P service plus internal logic to fetch missing txs, coordinating requests in a batched or staged way.
104
-
105
- ### `SendBatchRequestCollector` (`send-batch-request`)
106
-
107
- ```typescript
108
- const maxPeers = 10;
109
- const maxRetryAttempts = Math.max(peerIds.length, 3);
110
- new SendBatchRequestCollector(p2pService, maxPeers, maxRetryAttempts)
111
- ```
112
-
113
- Explicitly caps the number of peers it will involve (`maxPeers`) and uses a retry budget derived from peer count.
114
-
115
89
  ## Test Parameters
116
90
 
117
91
  | Parameter | Value | Description |
118
92
  |-----------|-------|-------------|
119
93
  | `PEERS_PER_RUN` | 30 | Number of worker processes spawned |
120
94
  | `MISSING_TX_COUNTS` | 10, 50, 100, 500 | Number of missing transactions to fetch |
121
- | `TIMEOUT_MS` | 30,000 ms | Collector timeout per case |
95
+ | `TIMEOUT_MS` | 30,000 ms | Per-case timeout for the requester |
122
96
  | `TEST_TIMEOUT_MS` | 600,000 ms | Overall Jest timeout (10 minutes) |
123
97
 
124
98
  ## Running
@@ -127,13 +101,13 @@ From the p2p package:
127
101
 
128
102
  ```bash
129
103
  cd yarn-project/p2p
130
- yarn test src/client/test/tx_proposal_collector/p2p_client.proposal_tx_collector.bench.test.ts
104
+ yarn test src/client/test/p2p_client.batch_tx_requester.bench.test.ts
131
105
  ```
132
106
 
133
107
  Or from repo root:
134
108
 
135
109
  ```bash
136
- yarn test p2p_client.proposal_tx_collector.bench.test.ts
110
+ yarn test p2p_client.batch_tx_requester.bench.test.ts
137
111
  ```
138
112
 
139
113
  The benchmark is intentionally long due to spawning many processes and running multiple cases.
@@ -145,14 +119,12 @@ The benchmark is intentionally long due to spawning many processes and running m
145
119
  If no env vars are set, the suite prints a table:
146
120
 
147
121
  ```
148
- | Collector | Distribution | Missing | Duration (ms) | Fetched | Success |
149
- |---------------------|--------------|---------|---------------|---------|---------|
150
- | batch-requester | pinned-only | 10 | 123 | 10 | Yes |
151
- | send-batch-request | pinned-only | 10 | 145 | 10 | Yes |
122
+ | Distribution | Missing | Duration (ms) | Fetched | Success |
123
+ |--------------|---------|---------------|---------|---------|
124
+ | pinned-only | 10 | 123 | 10 | Yes |
125
+ | pinned-only | 50 | 145 | 50 | Yes |
152
126
  ```
153
127
 
154
- Plus a comparison summary stating which collector was faster per `(distribution, missing)` pair.
155
-
156
128
  ### JSON metrics (for CI/dashboards)
157
129
 
158
130
  ```bash
@@ -160,8 +132,8 @@ BENCH_OUTPUT=/path/results.json yarn test ...
160
132
  ```
161
133
 
162
134
  Writes JSON metrics like:
163
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/duration` (ms)
164
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/fetched` (txs)
135
+ - `BatchTxRequester/<distribution>/missing_<N>/duration` (ms)
136
+ - `BatchTxRequester/<distribution>/missing_<N>/fetched` (txs)
165
137
 
166
138
  ### Markdown file output
167
139
 
@@ -175,14 +147,14 @@ Writes the pretty table + summary to disk.
175
147
 
176
148
  For each case the benchmark records:
177
149
 
178
- - `durationMs`: wall-clock time spent inside the collector call
179
- - `fetchedCount`: how many txs were returned by the collector
150
+ - `durationMs`: wall-clock time spent inside the requester call
151
+ - `fetchedCount`: how many txs were returned by the requester
180
152
  - `success`: `fetchedCount === missingTxCount`
181
153
 
182
154
  **Guidelines:**
183
155
 
184
156
  - **Always check `Success` first.** A faster run that fetched fewer txs is not a win.
185
- - Compare collectors **within the same distribution + missing count** only.
157
+ - Compare runs **within the same distribution + missing count** only.
186
158
  - Expect `pinned-only` to highlight pinned-peer behavior (fast if pinned peer is used effectively; slow if the algorithm wastes time sampling other peers).
187
159
  - Expect `sparse` to be the most "network-like" stress case, since many peers won't have each requested tx.
188
160
 
@@ -193,7 +165,7 @@ Inside each worker, the benchmark intentionally reduces variability:
193
165
  - **Unlimited rate limits** are installed so the req/resp rate limiter doesn't dominate results
194
166
  - **Deterministic tx generation** ensures all workers see the same tx set without large IPC payloads
195
167
 
196
- This makes the benchmark better for *comparing collectors* (A vs B), but it is **not** a perfect model of production networking conditions.
168
+ This makes the benchmark better for tracking regressions, but it is **not** a perfect model of production networking conditions.
197
169
 
198
170
  ## Limitations
199
171
 
@@ -207,9 +179,7 @@ This benchmark does **not** measure:
207
179
 
208
180
  | File | Purpose |
209
181
  |------|---------|
210
- | `p2p_client.proposal_tx_collector.bench.test.ts` | Test suite (cases, distributions, output formatting) |
211
- | `proposal_tx_collector_worker.ts` | Collector-specific worker implementation |
212
- | `proposal_tx_collector_worker_protocol.ts` | IPC message types and serialization |
182
+ | `p2p_client.batch_tx_requester.bench.test.ts` | Test suite (cases, distributions, output formatting) |
213
183
  | `src/testbench/worker_client_manager.ts` | Worker process manager (forking, IPC, orchestration) |
214
184
  | `src/testbench/p2p_client_testbench_worker.ts` | General testbench worker implementation |
215
185
  | `src/test-helpers/testbench-utils.ts` | Shared mocks and utilities (InMemoryTxPool, InMemoryAttestationPool, etc.) |
package/src/config.ts CHANGED
@@ -1,19 +1,27 @@
1
1
  import {
2
2
  type ConfigMappingsType,
3
3
  SecretValue,
4
+ bigintConfigHelper,
4
5
  booleanConfigHelper,
5
6
  getConfigFromMappings,
6
7
  getDefaultConfig,
7
8
  numberConfigHelper,
9
+ optionalNumberConfigHelper,
8
10
  percentageConfigHelper,
9
11
  pickConfigMappings,
10
12
  secretStringConfigHelper,
11
13
  } from '@aztec/foundation/config';
12
14
  import { Fr } from '@aztec/foundation/curves/bn254';
13
- import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
14
15
  import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
15
16
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
16
- import { type AllowedElement, type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
17
+ import {
18
+ type AllowedElement,
19
+ type ChainConfig,
20
+ type SequencerConfig,
21
+ chainConfigMappings,
22
+ sharedSequencerConfigMappings,
23
+ } from '@aztec/stdlib/config';
24
+ import { type DataStoreConfig, dataConfigMappings } from '@aztec/stdlib/kv-store';
17
25
 
18
26
  import {
19
27
  type BatchTxRequesterConfig,
@@ -31,13 +39,37 @@ export interface P2PConfig
31
39
  BatchTxRequesterConfig,
32
40
  ChainConfig,
33
41
  TxCollectionConfig,
34
- TxFileStoreConfig {
42
+ TxFileStoreConfig,
43
+ Pick<
44
+ SequencerConfig,
45
+ | 'blockDurationMs'
46
+ | 'expectedBlockProposalsPerSlot'
47
+ | 'l1PublishingTime'
48
+ | 'maxTxsPerBlock'
49
+ | 'attestationPropagationTime'
50
+ | 'maxBlocksPerCheckpoint'
51
+ > {
52
+ /** Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set. */
53
+ validateMaxTxsPerBlock?: number;
54
+
55
+ /** Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set. */
56
+ validateMaxTxsPerCheckpoint?: number;
57
+
58
+ /** Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected. */
59
+ validateMaxL2BlockGas?: number;
60
+
61
+ /** Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected. */
62
+ validateMaxDABlockGas?: number;
63
+
35
64
  /** A flag dictating whether the P2P subsystem should be enabled. */
36
65
  p2pEnabled: boolean;
37
66
 
38
67
  /** The frequency in which to check for new L2 blocks. */
39
68
  blockCheckIntervalMS: number;
40
69
 
70
+ /** The frequency in which to check for new L2 slots. */
71
+ slotCheckIntervalMS: number;
72
+
41
73
  /** The number of blocks to fetch in a single batch. */
42
74
  blockRequestBatchSize: number;
43
75
 
@@ -47,6 +79,9 @@ export interface P2PConfig
47
79
  /** The frequency in which to check for new peers. */
48
80
  peerCheckIntervalMS: number;
49
81
 
82
+ /** How long to ban a peer after it fails MAX_DIAL_ATTEMPTS dials. */
83
+ peerFailedBanTimeMs: number;
84
+
50
85
  /** Size of queue of L2 blocks to store. */
51
86
  l2QueueSize: number;
52
87
 
@@ -83,6 +118,11 @@ export interface P2PConfig
83
118
  /** If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false. */
84
119
  queryForIp: boolean;
85
120
 
121
+ /**
122
+ * HTTPS URLs that return plain-text public IPv4, tried in order when resolving the announce IP (e.g. when `queryForIp` is true and `p2pIp` is unset).
123
+ */
124
+ publicIpServices: string[];
125
+
86
126
  /** The interval of the gossipsub heartbeat to perform maintenance tasks. */
87
127
  gossipsubInterval: number;
88
128
 
@@ -140,8 +180,8 @@ export interface P2PConfig
140
180
  /** The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb. */
141
181
  p2pStoreMapSizeKb?: number;
142
182
 
143
- /** Which calls are allowed in the public setup phase of a tx. */
144
- txPublicSetupAllowList: AllowedElement[];
183
+ /** Additional entries to extend the default setup allow list. */
184
+ txPublicSetupAllowListExtend: AllowedElement[];
145
185
 
146
186
  /** The maximum number of pending txs before evicting lower priority txs. */
147
187
  maxPendingTxCount: number;
@@ -149,6 +189,9 @@ export interface P2PConfig
149
189
  /** The node's seen message ID cache size */
150
190
  seenMessageCacheSize: number;
151
191
 
192
+ /** Maximum number of (validator, tx) pairs to keep in the tx validation LRU cache. */
193
+ txValidationCacheSize: number;
194
+
152
195
  /** True to disable the status handshake on peer connected. */
153
196
  p2pDisableStatusHandshake?: boolean;
154
197
 
@@ -163,10 +206,7 @@ export interface P2PConfig
163
206
  /** Whether transactions are disabled for this node. This means transactions will be rejected at the RPC and P2P layers. */
164
207
  disableTransactions: boolean;
165
208
 
166
- /** True to simulate discarding transactions. - For testing purposes only*/
167
- dropTransactions: boolean;
168
-
169
- /** The probability that a transaction is discarded. - For testing purposes only */
209
+ /** The probability that a transaction is discarded (0 = disabled). - For testing purposes only */
170
210
  dropTransactionsProbability: number;
171
211
 
172
212
  /** Whether to delete transactions from the pool after a reorg instead of moving them back to pending. */
@@ -177,11 +217,77 @@ export interface P2PConfig
177
217
 
178
218
  /** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
179
219
  fishermanMode: boolean;
220
+
221
+ /** Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only). */
222
+ broadcastEquivocatedProposals?: boolean;
223
+
224
+ /** Minimum age (ms) a transaction must have been in the pool before it's eligible for block building. */
225
+ minTxPoolAgeMs: number;
226
+
227
+ /**
228
+ * Number of full L2 slots to wait after a checkpoint's slot before declaring its txs missing
229
+ * for data-withholding slashing.
230
+ */
231
+ slashDataWithholdingToleranceSlots: number;
232
+
233
+ /**
234
+ * Number of L2 slots after a mined block's slot to keep collecting its missing txs. Clamped
235
+ * up so that collection always runs at least until the data-withholding slash verdict is
236
+ * rendered (`block.slot + slashDataWithholdingToleranceSlots + 1`). Defaults to undefined,
237
+ * in which case the tolerance window is used directly.
238
+ */
239
+ p2pMissingTxCollectionDeadlineSlots?: number;
240
+
241
+ /** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
242
+ priceBumpPercentage: bigint;
243
+
244
+ /** Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only) */
245
+ skipIncomingProposals?: boolean;
246
+
247
+ /** Accept proposal gossip regardless of slot timing (for testing only). */
248
+ skipProposalSlotValidation?: boolean;
249
+
250
+ /**
251
+ * Whether this node skips checkpoint proposal validation and always attests. When set, the checkpoint
252
+ * attestation is created and broadcast before the embedded last block is processed, so it is not delayed
253
+ * past the slot's attestation window by that block's re-execution. Mirrors the validator config flag.
254
+ */
255
+ skipCheckpointProposalValidation?: boolean;
180
256
  }
181
257
 
182
258
  export const DEFAULT_P2P_PORT = 40400;
183
259
 
260
+ /** Default endpoints used to discover this machine's public IPv4 when `queryForIp` is enabled. */
261
+ export const DEFAULT_PUBLIC_IP_SERVICES: string[] = [
262
+ 'https://api.ipify.org/',
263
+ 'https://checkip.amazonaws.com/',
264
+ 'https://ifconfig.me/ip',
265
+ 'https://icanhazip.com/',
266
+ ];
267
+
184
268
  export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
269
+ validateMaxTxsPerBlock: {
270
+ env: 'VALIDATOR_MAX_TX_PER_BLOCK',
271
+ description:
272
+ 'Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set.',
273
+ ...optionalNumberConfigHelper(),
274
+ },
275
+ validateMaxTxsPerCheckpoint: {
276
+ env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
277
+ description:
278
+ 'Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set.',
279
+ ...optionalNumberConfigHelper(),
280
+ },
281
+ validateMaxL2BlockGas: {
282
+ env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
283
+ description: 'Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected.',
284
+ ...optionalNumberConfigHelper(),
285
+ },
286
+ validateMaxDABlockGas: {
287
+ env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
288
+ description: 'Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected.',
289
+ ...optionalNumberConfigHelper(),
290
+ },
185
291
  p2pEnabled: {
186
292
  env: 'P2P_ENABLED',
187
293
  description: 'A flag dictating whether the P2P subsystem should be enabled.',
@@ -197,6 +303,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
197
303
  description: 'The frequency in which to check for new L2 blocks.',
198
304
  ...numberConfigHelper(100),
199
305
  },
306
+ slotCheckIntervalMS: {
307
+ env: 'P2P_SLOT_CHECK_INTERVAL_MS',
308
+ description: 'The frequency in which to check for new L2 slots.',
309
+ ...numberConfigHelper(1000),
310
+ },
200
311
  debugDisableColocationPenalty: {
201
312
  env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
202
313
  description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
@@ -207,6 +318,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
207
318
  description: 'The frequency in which to check for new peers.',
208
319
  ...numberConfigHelper(30_000),
209
320
  },
321
+ peerFailedBanTimeMs: {
322
+ env: 'P2P_PEER_FAILED_BAN_TIME_MS',
323
+ description: 'How long to ban a peer after it fails maximum dial attempts.',
324
+ ...numberConfigHelper(5 * 60 * 1000),
325
+ },
210
326
  l2QueueSize: {
211
327
  env: 'P2P_L2_QUEUE_SIZE',
212
328
  description: 'Size of queue of L2 blocks to store.',
@@ -267,6 +383,17 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
267
383
  'If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.',
268
384
  ...booleanConfigHelper(),
269
385
  },
386
+ publicIpServices: {
387
+ env: 'P2P_PUBLIC_IP_SERVICES',
388
+ parseEnv: (val: string) =>
389
+ val
390
+ .split(',')
391
+ .map(s => s.trim())
392
+ .filter(Boolean),
393
+ description:
394
+ 'Comma-separated HTTPS URLs that return plain-text public IPv4. Used when P2P_QUERY_FOR_IP is true and P2P_IP is unset. Tried in order until one succeeds.',
395
+ defaultValue: DEFAULT_PUBLIC_IP_SERVICES,
396
+ },
270
397
  gossipsubInterval: {
271
398
  env: 'P2P_GOSSIPSUB_INTERVAL_MS',
272
399
  description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
@@ -300,7 +427,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
300
427
  gossipsubMcacheLength: {
301
428
  env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
302
429
  description: 'The number of gossipsub interval message cache windows to keep.',
303
- ...numberConfigHelper(6),
430
+ ...numberConfigHelper(12),
304
431
  },
305
432
  gossipsubMcacheGossip: {
306
433
  env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP',
@@ -372,15 +499,16 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
372
499
  },
373
500
  p2pStoreMapSizeKb: {
374
501
  env: 'P2P_STORE_MAP_SIZE_KB',
375
- parseEnv: (val: string | undefined) => (val ? +val : undefined),
502
+ ...optionalNumberConfigHelper(),
376
503
  description: 'The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb.',
377
504
  },
378
- txPublicSetupAllowList: {
505
+ txPublicSetupAllowListExtend: {
379
506
  env: 'TX_PUBLIC_SETUP_ALLOWLIST',
380
507
  parseEnv: (val: string) => parseAllowList(val),
381
- description: 'The list of functions calls allowed to run in setup',
508
+ description:
509
+ 'Additional entries to extend the default setup allow list. Format: I:address:selector[:flags],C:classId:selector[:flags]. Flags: os (onlySelf), rn (rejectNullMsgSender), cl=N (calldataLength), joined with +.',
382
510
  printDefault: () =>
383
- 'AuthRegistry, FeeJuice.increase_public_balance, Token.increase_public_balance, FPC.prepare_fee',
511
+ 'Default: AuthRegistry._set_authorized, AuthRegistry.set_authorized, FeeJuice._increase_public_balance',
384
512
  },
385
513
  maxPendingTxCount: {
386
514
  env: 'P2P_MAX_PENDING_TX_COUNT',
@@ -394,6 +522,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
394
522
  description: 'The number of messages to keep in the seen message cache',
395
523
  ...numberConfigHelper(100_000), // 100K
396
524
  },
525
+ txValidationCacheSize: {
526
+ env: 'P2P_TX_VALIDATION_CACHE_SIZE',
527
+ description: 'Maximum number of items to keep in the tx validation LRU cache.',
528
+ ...numberConfigHelper(5_000),
529
+ },
397
530
  p2pDisableStatusHandshake: {
398
531
  env: 'P2P_DISABLE_STATUS_HANDSHAKE',
399
532
  description: 'True to disable the status handshake on peer connected.',
@@ -409,11 +542,6 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
409
542
  description: 'Number of auth attempts to allow before peer is banned. Number is inclusive',
410
543
  ...numberConfigHelper(3),
411
544
  },
412
- dropTransactions: {
413
- env: 'P2P_DROP_TX',
414
- description: 'True to simulate discarding transactions. - For testing purposes only',
415
- ...booleanConfigHelper(false),
416
- },
417
545
  dropTransactionsProbability: {
418
546
  env: 'P2P_DROP_TX_CHANCE',
419
547
  description: 'The probability that a transaction is discarded (0 - 1). - For testing purposes only',
@@ -435,12 +563,59 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
435
563
  description: 'Alters the format of p2p messages to include things like broadcast timestamp FOR TESTING ONLY',
436
564
  ...booleanConfigHelper(false),
437
565
  },
566
+ l1PublishingTime: {
567
+ env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
568
+ description: 'How much time (in seconds) we allow in the slot for publishing the L1 tx (defaults to 1 L1 slot).',
569
+ ...optionalNumberConfigHelper(),
570
+ },
438
571
  fishermanMode: {
439
572
  env: 'FISHERMAN_MODE',
440
573
  description:
441
574
  'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
442
575
  ...booleanConfigHelper(false),
443
576
  },
577
+ broadcastEquivocatedProposals: {
578
+ description:
579
+ 'Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only).',
580
+ ...booleanConfigHelper(false),
581
+ },
582
+ skipIncomingProposals: {
583
+ description: 'Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only)',
584
+ ...booleanConfigHelper(false),
585
+ },
586
+ skipProposalSlotValidation: {
587
+ description: 'Accept proposal gossip regardless of slot timing (for testing only)',
588
+ ...booleanConfigHelper(false),
589
+ },
590
+ skipCheckpointProposalValidation: {
591
+ description:
592
+ 'Skip checkpoint proposal validation and always attest, broadcasting the attestation before processing the embedded last block',
593
+ ...booleanConfigHelper(false),
594
+ },
595
+ minTxPoolAgeMs: {
596
+ env: 'P2P_MIN_TX_POOL_AGE_MS',
597
+ description: 'Minimum age (ms) a transaction must have been in the pool before it is eligible for block building.',
598
+ ...numberConfigHelper(2_000),
599
+ },
600
+ slashDataWithholdingToleranceSlots: {
601
+ env: 'SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS',
602
+ description:
603
+ 'L2 slots to wait after a checkpoint slot before declaring its txs missing. Drives both the data-withholding slasher check and the missing-tx collection deadline.',
604
+ ...numberConfigHelper(3),
605
+ },
606
+ p2pMissingTxCollectionDeadlineSlots: {
607
+ env: 'P2P_MISSING_TX_COLLECTION_DEADLINE_SLOTS',
608
+ description:
609
+ 'Optional deadline (in L2 slots after the block slot) for collecting missing txs for unproven mined blocks. Clamped up to the data-withholding tolerance window so collection never gives up before the slash verdict.',
610
+ ...optionalNumberConfigHelper(),
611
+ },
612
+ priceBumpPercentage: {
613
+ env: 'P2P_RPC_PRICE_BUMP_PERCENTAGE',
614
+ description:
615
+ 'Minimum percentage fee increase required to replace an existing tx via RPC. Even at 0%, replacement still requires paying at least 1 unit more.',
616
+ ...bigintConfigHelper(10n),
617
+ },
618
+ ...sharedSequencerConfigMappings,
444
619
  ...p2pReqRespConfigMappings,
445
620
  ...batchTxRequesterConfigMappings,
446
621
  ...chainConfigMappings,
@@ -473,6 +648,7 @@ export type BootnodeConfig = Pick<
473
648
  | 'bootstrapNodes'
474
649
  | 'listenAddress'
475
650
  | 'queryForIp'
651
+ | 'publicIpServices'
476
652
  > &
477
653
  Required<Pick<P2PConfig, 'p2pIp' | 'p2pPort'>> &
478
654
  Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb'> &
@@ -490,6 +666,7 @@ const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
490
666
  'bootstrapNodes',
491
667
  'l1ChainId',
492
668
  'queryForIp',
669
+ 'publicIpServices',
493
670
  ];
494
671
 
495
672
  export const bootnodeConfigMappings = pickConfigMappings(
@@ -497,13 +674,44 @@ export const bootnodeConfigMappings = pickConfigMappings(
497
674
  bootnodeConfigKeys,
498
675
  );
499
676
 
677
+ /**
678
+ * Parses a `+`-separated flags string into validation properties for an allow list entry.
679
+ * Supported flags: `os` (onlySelf), `rn` (rejectNullMsgSender), `cl=N` (calldataLength).
680
+ */
681
+ function parseFlags(
682
+ flags: string,
683
+ entry: string,
684
+ ): { onlySelf?: boolean; rejectNullMsgSender?: boolean; calldataLength?: number } {
685
+ const result: { onlySelf?: boolean; rejectNullMsgSender?: boolean; calldataLength?: number } = {};
686
+ for (const flag of flags.split('+')) {
687
+ if (flag === 'os') {
688
+ result.onlySelf = true;
689
+ } else if (flag === 'rn') {
690
+ result.rejectNullMsgSender = true;
691
+ } else if (flag.startsWith('cl=')) {
692
+ const n = parseInt(flag.slice(3), 10);
693
+ if (isNaN(n) || n < 0) {
694
+ throw new Error(
695
+ `Invalid allow list entry "${entry}": invalid calldataLength in flag "${flag}". Expected a non-negative integer.`,
696
+ );
697
+ }
698
+ result.calldataLength = n;
699
+ } else {
700
+ throw new Error(`Invalid allow list entry "${entry}": unknown flag "${flag}". Supported flags: os, rn, cl=N.`);
701
+ }
702
+ }
703
+ return result;
704
+ }
705
+
500
706
  /**
501
707
  * Parses a string to a list of allowed elements.
502
- * Each encoded is expected to be of one of the following formats
503
- * `I:${address}`
504
- * `I:${address}:${selector}`
505
- * `C:${classId}`
506
- * `C:${classId}:${selector}`
708
+ * Each entry is expected to be of one of the following formats:
709
+ * `I:${address}:${selector}` — instance (contract address) with function selector
710
+ * `C:${classId}:${selector}` — class with function selector
711
+ *
712
+ * An optional flags segment can be appended after the selector:
713
+ * `I:${address}:${selector}:${flags}` or `C:${classId}:${selector}:${flags}`
714
+ * where flags is a `+`-separated list of: `os` (onlySelf), `rn` (rejectNullMsgSender), `cl=N` (calldataLength).
507
715
  *
508
716
  * @param value The string to parse
509
717
  * @returns A list of allowed elements
@@ -516,31 +724,37 @@ export function parseAllowList(value: string): AllowedElement[] {
516
724
  }
517
725
 
518
726
  for (const val of value.split(',')) {
519
- const [typeString, identifierString, selectorString] = val.split(':');
520
- const selector = selectorString !== undefined ? FunctionSelector.fromString(selectorString) : undefined;
727
+ const trimmed = val.trim();
728
+ if (!trimmed) {
729
+ continue;
730
+ }
731
+ const [typeString, identifierString, selectorString, flagsString] = trimmed.split(':');
732
+
733
+ if (!selectorString) {
734
+ throw new Error(
735
+ `Invalid allow list entry "${trimmed}": selector is required. Expected format: I:address:selector or C:classId:selector`,
736
+ );
737
+ }
738
+
739
+ const selector = FunctionSelector.fromString(selectorString);
740
+ const flags = flagsString ? parseFlags(flagsString, trimmed) : {};
521
741
 
522
742
  if (typeString === 'I') {
523
- if (selector) {
524
- entries.push({
525
- address: AztecAddress.fromString(identifierString),
526
- selector,
527
- });
528
- } else {
529
- entries.push({
530
- address: AztecAddress.fromString(identifierString),
531
- });
532
- }
743
+ entries.push({
744
+ address: AztecAddress.fromString(identifierString),
745
+ selector,
746
+ ...flags,
747
+ });
533
748
  } else if (typeString === 'C') {
534
- if (selector) {
535
- entries.push({
536
- classId: Fr.fromHexString(identifierString),
537
- selector,
538
- });
539
- } else {
540
- entries.push({
541
- classId: Fr.fromHexString(identifierString),
542
- });
543
- }
749
+ entries.push({
750
+ classId: Fr.fromHexString(identifierString),
751
+ selector,
752
+ ...flags,
753
+ });
754
+ } else {
755
+ throw new Error(
756
+ `Invalid allow list entry "${trimmed}": unknown type "${typeString}". Expected "I" (instance) or "C" (class).`,
757
+ );
544
758
  }
545
759
  }
546
760
 
@@ -0,0 +1,11 @@
1
+ /** Checkpoint Proposal Received Callback Not Registered Error
2
+ *
3
+ * Error triggered if the allNodesCheckpointReceivedCallback is not registered
4
+ * @category Errors
5
+ */
6
+ export class CheckpointProposalReceivedCallbackNotRegisteredError extends Error {
7
+ constructor() {
8
+ super('FATAL (allNodesCheckpointReceivedCallback): All nodes should register a checkpoint proposal handler');
9
+ this.name = 'CheckpointProposalReceivedCallbackNotRegisteredError';
10
+ }
11
+ }