@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.96dac018d

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 (502) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +7 -6
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +41 -14
  7. package/dest/client/interface.d.ts +45 -32
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +40 -50
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +157 -201
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +35 -7
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +23 -9
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +373 -96
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +8 -5
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +2 -2
  45. package/dest/mem_pools/interface.d.ts +5 -5
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  50. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  53. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  54. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  56. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  57. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  65. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  66. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  68. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  70. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  71. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  73. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  74. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  76. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  77. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +95 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  109. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  110. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  111. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  112. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  113. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  114. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  115. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
  116. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  117. package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +105 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +164 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +355 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +891 -0
  133. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  134. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
  136. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  137. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  139. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  140. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  141. package/dest/msg_validators/clock_tolerance.js +37 -0
  142. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
  143. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
  145. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
  146. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
  147. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
  148. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  149. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  151. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  152. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  154. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  155. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  157. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  158. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  160. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  161. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  163. package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
  164. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/factory.js +228 -57
  166. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  167. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  168. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  169. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  170. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
  172. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  173. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/index.js +2 -0
  175. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  176. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  178. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  179. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  180. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  181. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  182. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  184. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  185. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  186. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  187. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  188. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  189. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  190. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  191. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  192. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  193. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  194. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  195. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  196. package/dest/services/data_store.d.ts +1 -1
  197. package/dest/services/data_store.d.ts.map +1 -1
  198. package/dest/services/data_store.js +10 -6
  199. package/dest/services/discv5/discV5_service.js +1 -1
  200. package/dest/services/dummy_service.d.ts +24 -4
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +46 -1
  203. package/dest/services/encoding.d.ts +2 -2
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +6 -6
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +346 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +19 -8
  221. package/dest/services/libp2p/libp2p_service.d.ts +97 -38
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +448 -353
  224. package/dest/services/peer-manager/metrics.d.ts +2 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +20 -5
  227. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  228. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_scoring.js +33 -4
  230. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  231. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  232. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
  233. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  234. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  236. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  237. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  239. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  240. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  242. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
  243. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
  245. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  246. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  248. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  249. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  250. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  251. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  252. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  253. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  254. package/dest/services/reqresp/constants.d.ts +12 -0
  255. package/dest/services/reqresp/constants.d.ts.map +1 -0
  256. package/dest/services/reqresp/constants.js +7 -0
  257. package/dest/services/reqresp/interface.d.ts +12 -1
  258. package/dest/services/reqresp/interface.d.ts.map +1 -1
  259. package/dest/services/reqresp/interface.js +15 -1
  260. package/dest/services/reqresp/metrics.d.ts +6 -5
  261. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  262. package/dest/services/reqresp/metrics.js +17 -5
  263. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  264. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  265. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  266. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  267. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  271. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  272. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  273. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  274. package/dest/services/reqresp/protocols/status.js +2 -1
  275. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  276. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/tx.js +20 -0
  278. package/dest/services/reqresp/reqresp.d.ts +6 -1
  279. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  280. package/dest/services/reqresp/reqresp.js +69 -26
  281. package/dest/services/service.d.ts +42 -3
  282. package/dest/services/service.d.ts.map +1 -1
  283. package/dest/services/tx_collection/config.d.ts +22 -1
  284. package/dest/services/tx_collection/config.d.ts.map +1 -1
  285. package/dest/services/tx_collection/config.js +55 -1
  286. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  287. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  288. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  289. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  290. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  291. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  292. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  293. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  294. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  295. package/dest/services/tx_collection/index.d.ts +3 -1
  296. package/dest/services/tx_collection/index.d.ts.map +1 -1
  297. package/dest/services/tx_collection/index.js +2 -0
  298. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  299. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  300. package/dest/services/tx_collection/instrumentation.js +10 -2
  301. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  302. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  303. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  304. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  305. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  306. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  307. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  308. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  309. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  310. package/dest/services/tx_collection/tx_collection.d.ts +29 -16
  311. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  312. package/dest/services/tx_collection/tx_collection.js +79 -7
  313. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  314. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  315. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  316. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  317. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  318. package/dest/services/tx_collection/tx_source.js +19 -2
  319. package/dest/services/tx_file_store/config.d.ts +16 -0
  320. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  321. package/dest/services/tx_file_store/config.js +22 -0
  322. package/dest/services/tx_file_store/index.d.ts +4 -0
  323. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  324. package/dest/services/tx_file_store/index.js +3 -0
  325. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  326. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  327. package/dest/services/tx_file_store/instrumentation.js +29 -0
  328. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  329. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  330. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  331. package/dest/services/tx_provider.d.ts +6 -6
  332. package/dest/services/tx_provider.d.ts.map +1 -1
  333. package/dest/services/tx_provider.js +9 -8
  334. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  335. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  336. package/dest/services/tx_provider_instrumentation.js +5 -5
  337. package/dest/test-helpers/index.d.ts +3 -1
  338. package/dest/test-helpers/index.d.ts.map +1 -1
  339. package/dest/test-helpers/index.js +2 -0
  340. package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
  341. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  342. package/dest/test-helpers/mock-pubsub.d.ts +29 -2
  343. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  344. package/dest/test-helpers/mock-pubsub.js +103 -2
  345. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  346. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  347. package/dest/test-helpers/reqresp-nodes.js +2 -1
  348. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  349. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  350. package/dest/test-helpers/test_tx_provider.js +41 -0
  351. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  352. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  353. package/dest/test-helpers/testbench-utils.js +366 -0
  354. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  355. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  356. package/dest/testbench/p2p_client_testbench_worker.js +215 -135
  357. package/dest/testbench/worker_client_manager.d.ts +51 -6
  358. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  359. package/dest/testbench/worker_client_manager.js +226 -44
  360. package/dest/util.d.ts +2 -2
  361. package/dest/util.d.ts.map +1 -1
  362. package/package.json +16 -16
  363. package/src/bootstrap/bootstrap.ts +7 -4
  364. package/src/client/factory.ts +75 -23
  365. package/src/client/interface.ts +61 -33
  366. package/src/client/p2p_client.ts +196 -241
  367. package/src/client/test/tx_proposal_collector/README.md +227 -0
  368. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +346 -0
  369. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  370. package/src/config.ts +49 -13
  371. package/src/errors/tx-pool.error.ts +12 -0
  372. package/src/index.ts +1 -0
  373. package/src/mem_pools/attestation_pool/attestation_pool.ts +496 -91
  374. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +460 -112
  375. package/src/mem_pools/attestation_pool/index.ts +9 -2
  376. package/src/mem_pools/attestation_pool/mocks.ts +7 -4
  377. package/src/mem_pools/index.ts +4 -1
  378. package/src/mem_pools/instrumentation.ts +2 -1
  379. package/src/mem_pools/interface.ts +4 -4
  380. package/src/mem_pools/tx_pool/README.md +29 -14
  381. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  382. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  383. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  384. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  385. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  386. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  387. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  388. package/src/mem_pools/tx_pool_v2/README.md +275 -0
  389. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  390. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  391. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +122 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  396. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
  397. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  398. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  399. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  400. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
  401. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  402. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  403. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  404. package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
  405. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +255 -0
  406. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  407. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  408. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  409. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1063 -0
  410. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
  411. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -10
  412. package/src/msg_validators/clock_tolerance.ts +51 -0
  413. package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
  414. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
  415. package/src/msg_validators/tx_validator/README.md +115 -0
  416. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  417. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  418. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  419. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  420. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  421. package/src/msg_validators/tx_validator/factory.ts +372 -55
  422. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  423. package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
  424. package/src/msg_validators/tx_validator/index.ts +2 -0
  425. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  426. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  427. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  428. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  429. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  430. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  431. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  432. package/src/services/data_store.ts +10 -7
  433. package/src/services/discv5/discV5_service.ts +1 -1
  434. package/src/services/dummy_service.ts +59 -2
  435. package/src/services/encoding.ts +6 -6
  436. package/src/services/gossipsub/README.md +641 -0
  437. package/src/services/gossipsub/index.ts +2 -0
  438. package/src/services/gossipsub/scoring.ts +29 -5
  439. package/src/services/gossipsub/topic_score_params.ts +487 -0
  440. package/src/services/index.ts +1 -0
  441. package/src/services/libp2p/instrumentation.ts +20 -7
  442. package/src/services/libp2p/libp2p_service.ts +498 -381
  443. package/src/services/peer-manager/metrics.ts +21 -4
  444. package/src/services/peer-manager/peer_scoring.ts +29 -1
  445. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  446. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
  447. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  448. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  449. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  450. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
  451. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  452. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  453. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  454. package/src/services/reqresp/constants.ts +14 -0
  455. package/src/services/reqresp/interface.ts +29 -1
  456. package/src/services/reqresp/metrics.ts +34 -9
  457. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  458. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  459. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  460. package/src/services/reqresp/protocols/status.ts +5 -3
  461. package/src/services/reqresp/protocols/tx.ts +22 -0
  462. package/src/services/reqresp/reqresp.ts +79 -22
  463. package/src/services/service.ts +55 -2
  464. package/src/services/tx_collection/config.ts +83 -1
  465. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  466. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  467. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  468. package/src/services/tx_collection/index.ts +6 -0
  469. package/src/services/tx_collection/instrumentation.ts +17 -2
  470. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  471. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  472. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  473. package/src/services/tx_collection/tx_collection.ts +121 -24
  474. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  475. package/src/services/tx_collection/tx_source.ts +22 -3
  476. package/src/services/tx_file_store/config.ts +37 -0
  477. package/src/services/tx_file_store/index.ts +3 -0
  478. package/src/services/tx_file_store/instrumentation.ts +36 -0
  479. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  480. package/src/services/tx_provider.ts +12 -11
  481. package/src/services/tx_provider_instrumentation.ts +11 -5
  482. package/src/test-helpers/index.ts +2 -0
  483. package/src/test-helpers/make-test-p2p-clients.ts +3 -3
  484. package/src/test-helpers/mock-pubsub.ts +143 -3
  485. package/src/test-helpers/reqresp-nodes.ts +2 -1
  486. package/src/test-helpers/test_tx_provider.ts +64 -0
  487. package/src/test-helpers/testbench-utils.ts +430 -0
  488. package/src/testbench/p2p_client_testbench_worker.ts +332 -130
  489. package/src/testbench/worker_client_manager.ts +304 -47
  490. package/src/util.ts +7 -1
  491. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  492. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  493. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  494. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  495. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  496. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  497. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  498. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  499. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  500. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  501. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  502. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
@@ -1,8 +1,11 @@
1
- import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
2
- import { createLogger } from '@aztec/foundation/log';
1
+ import {
2
+ MAX_PROCESSABLE_L2_GAS,
3
+ PRIVATE_TX_L2_GAS_OVERHEAD,
4
+ PUBLIC_TX_L2_GAS_OVERHEAD,
5
+ TX_DA_GAS_OVERHEAD,
6
+ } from '@aztec/constants';
7
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
8
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
- import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
5
- import { FunctionSelector } from '@aztec/stdlib/abi';
6
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
10
  import { Gas, GasFees } from '@aztec/stdlib/gas';
8
11
  import type { PublicStateSource } from '@aztec/stdlib/trees';
@@ -12,25 +15,112 @@ import {
12
15
  TX_ERROR_INSUFFICIENT_FEE_PER_GAS,
13
16
  TX_ERROR_INSUFFICIENT_GAS_LIMIT,
14
17
  type Tx,
15
- TxExecutionPhase,
16
18
  type TxValidationResult,
17
19
  type TxValidator,
18
20
  } from '@aztec/stdlib/tx';
19
21
 
22
+ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
23
+
24
+ /** Structural interface for types that carry gas limit data, used by {@link GasLimitsValidator}. */
25
+ export interface HasGasLimitData {
26
+ txHash: { toString(): string };
27
+ data: {
28
+ // We just need to know whether there is something here or not
29
+ forPublic?: unknown;
30
+ constants: {
31
+ txContext: {
32
+ gasSettings: { gasLimits: Gas };
33
+ };
34
+ };
35
+ };
36
+ }
37
+
38
+ /**
39
+ * Validates that a transaction's gas limits are within acceptable bounds.
40
+ *
41
+ * Rejects transactions whose gas limits fall below the fixed minimums (FIXED_DA_GAS,
42
+ * FIXED_L2_GAS) or exceed the AVM's maximum processable L2 gas. This is a cheap,
43
+ * stateless check that operates on gas settings alone.
44
+ *
45
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
46
+ * (used during pending pool migration).
47
+ *
48
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
49
+ */
50
+ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
51
+ #log: Logger;
52
+
53
+ constructor(bindings?: LoggerBindings) {
54
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
55
+ }
56
+
57
+ validateTx(tx: T): Promise<TxValidationResult> {
58
+ return Promise.resolve(this.validateGasLimit(tx));
59
+ }
60
+
61
+ /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
62
+ validateGasLimit(tx: T): TxValidationResult {
63
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
64
+ const minGasLimits = new Gas(
65
+ TX_DA_GAS_OVERHEAD,
66
+ tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD,
67
+ );
68
+
69
+ if (minGasLimits.gtAny(gasLimits)) {
70
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
71
+ gasLimits,
72
+ minGasLimits,
73
+ });
74
+ return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
75
+ }
76
+
77
+ if (gasLimits.l2Gas > MAX_PROCESSABLE_L2_GAS) {
78
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
79
+ gasLimits,
80
+ minGasLimits,
81
+ });
82
+ return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
83
+ }
84
+
85
+ return { result: 'valid' };
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Validates that a transaction can pay its gas fees.
91
+ *
92
+ * Runs three checks in order:
93
+ * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
94
+ * out of bounds.
95
+ * 2. **Max fee per gas** — skips (not rejects) the tx if its maxFeesPerGas is below
96
+ * the current block's gas fees. We skip rather than reject because the tx may
97
+ * become eligible in a later block with lower fees.
98
+ * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
99
+ * adds any pending claim from a setup-phase `_increase_public_balance` call, and
100
+ * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
101
+ *
102
+ * Used by: gossip (stage 1), RPC, and block building validators.
103
+ */
20
104
  export class GasTxValidator implements TxValidator<Tx> {
21
- #log = createLogger('sequencer:tx_validator:tx_gas');
105
+ #log: Logger;
22
106
  #publicDataSource: PublicStateSource;
23
107
  #feeJuiceAddress: AztecAddress;
24
108
  #gasFees: GasFees;
25
109
 
26
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees) {
110
+ constructor(
111
+ publicDataSource: PublicStateSource,
112
+ feeJuiceAddress: AztecAddress,
113
+ gasFees: GasFees,
114
+ private bindings?: LoggerBindings,
115
+ ) {
116
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
27
117
  this.#publicDataSource = publicDataSource;
28
118
  this.#feeJuiceAddress = feeJuiceAddress;
29
119
  this.#gasFees = gasFees;
30
120
  }
31
121
 
32
122
  async validateTx(tx: Tx): Promise<TxValidationResult> {
33
- const gasLimitValidation = this.#validateGasLimit(tx);
123
+ const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
34
124
  if (gasLimitValidation.result === 'invalid') {
35
125
  return Promise.resolve(gasLimitValidation);
36
126
  }
@@ -64,36 +154,14 @@ export class GasTxValidator implements TxValidator<Tx> {
64
154
  }
65
155
 
66
156
  /**
67
- * Check whether the tx's gas limit is above the minimum amount.
157
+ * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
158
+ * Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
68
159
  */
69
- #validateGasLimit(tx: Tx): TxValidationResult {
70
- const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
71
- const minGasLimits = new Gas(FIXED_DA_GAS, FIXED_L2_GAS);
72
-
73
- if (minGasLimits.gtAny(gasLimits)) {
74
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
75
- gasLimits,
76
- minGasLimits,
77
- });
78
- return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
79
- }
80
-
81
- if (gasLimits.l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
82
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
83
- gasLimits,
84
- minGasLimits,
85
- });
86
- return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
87
- }
88
-
89
- return { result: 'valid' };
90
- }
91
-
92
160
  public async validateTxFee(tx: Tx): Promise<TxValidationResult> {
93
161
  const feePayer = tx.data.feePayer;
94
162
 
95
163
  // Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
96
- const feeLimit = tx.data.constants.txContext.gasSettings.getFeeLimit();
164
+ const feeLimit = getTxFeeLimit(tx);
97
165
 
98
166
  // Read current balance of the feePayer
99
167
  const initialBalance = await this.#publicDataSource.storageRead(
@@ -102,30 +170,14 @@ export class GasTxValidator implements TxValidator<Tx> {
102
170
  );
103
171
 
104
172
  // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
105
- const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
106
- const increasePublicBalanceSelector = await FunctionSelector.fromSignature(
107
- '_increase_public_balance((Field),u128)',
108
- );
109
-
110
- // Arguments of the claim function call:
111
- // - args[0]: Amount recipient.
112
- // - args[1]: Amount being claimed.
113
- const claimFunctionCall = setupFns.find(
114
- fn =>
115
- fn.request.contractAddress.equals(this.#feeJuiceAddress) &&
116
- fn.request.msgSender.equals(this.#feeJuiceAddress) &&
117
- fn.calldata.length > 2 &&
118
- fn.functionSelector.equals(increasePublicBalanceSelector) &&
119
- fn.args[0].equals(feePayer.toField()) &&
120
- !fn.request.isStaticCall,
121
- );
173
+ const claimAmount = await getFeePayerClaimAmount(tx, this.#feeJuiceAddress);
174
+ const balance = initialBalance.toBigInt() + claimAmount;
122
175
 
123
- const balance = claimFunctionCall ? initialBalance.add(claimFunctionCall.args[1]) : initialBalance;
124
- if (balance.lt(feeLimit)) {
176
+ if (balance < feeLimit) {
125
177
  this.#log.verbose(`Rejecting transaction due to not enough fee payer balance`, {
126
178
  feePayer,
127
- balance: balance.toBigInt(),
128
- feeLimit: feeLimit.toBigInt(),
179
+ balance,
180
+ feeLimit,
129
181
  });
130
182
  return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE] };
131
183
  }
@@ -11,3 +11,5 @@ export * from './allowed_public_setup.js';
11
11
  export * from './archive_cache.js';
12
12
  export * from './tx_permitted_validator.js';
13
13
  export * from './timestamp_validator.js';
14
+ export * from './size_validator.js';
15
+ export * from './factory.js';
@@ -1,5 +1,5 @@
1
1
  import type { Fr } from '@aztec/foundation/curves/bn254';
2
- import { createLogger } from '@aztec/foundation/log';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
  import {
4
4
  type AnyTx,
5
5
  TX_ERROR_INCORRECT_L1_CHAIN_ID,
@@ -11,7 +11,7 @@ import {
11
11
  } from '@aztec/stdlib/tx';
12
12
 
13
13
  export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
14
- #log = createLogger('p2p:tx_validator:tx_metadata');
14
+ #log: Logger;
15
15
 
16
16
  constructor(
17
17
  private values: {
@@ -20,7 +20,10 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
20
20
  vkTreeRoot: Fr;
21
21
  protocolContractsHash: Fr;
22
22
  },
23
- ) {}
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:tx_metadata', bindings);
26
+ }
24
27
 
25
28
  validateTx(tx: T): Promise<TxValidationResult> {
26
29
  const errors = [];
@@ -0,0 +1,30 @@
1
+ import type { NullifierSource } from '@aztec/p2p';
2
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
3
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
4
+
5
+ /**
6
+ * Implements a nullifier source by checking a DB and an in-memory collection.
7
+ * Intended for validating transactions as they are added to a block.
8
+ */
9
+ export class NullifierCache implements NullifierSource {
10
+ nullifiers: Set<string>;
11
+
12
+ constructor(private db: MerkleTreeReadOperations) {
13
+ this.nullifiers = new Set();
14
+ }
15
+
16
+ public async nullifiersExist(nullifiers: Buffer[]): Promise<boolean[]> {
17
+ const cacheResults = nullifiers.map(n => this.nullifiers.has(n.toString()));
18
+ const toCheckDb = nullifiers.filter((_n, index) => !cacheResults[index]);
19
+ const dbHits = await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, toCheckDb);
20
+
21
+ let dbIndex = 0;
22
+ return nullifiers.map((_n, index) => cacheResults[index] || dbHits[dbIndex++] !== undefined);
23
+ }
24
+
25
+ public addNullifiers(nullifiers: Buffer[]) {
26
+ for (const nullifier of nullifiers) {
27
+ this.nullifiers.add(nullifier.toString());
28
+ }
29
+ }
30
+ }
@@ -1,4 +1,4 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
3
3
  import type { ContractDataSource } from '@aztec/stdlib/contract';
4
4
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
@@ -14,15 +14,17 @@ import {
14
14
  import type { UInt64 } from '@aztec/stdlib/types';
15
15
 
16
16
  export class PhasesTxValidator implements TxValidator<Tx> {
17
- #log = createLogger('sequencer:tx_validator:tx_phases');
17
+ #log: Logger;
18
18
  private contractsDB: PublicContractsDB;
19
19
 
20
20
  constructor(
21
21
  contracts: ContractDataSource,
22
22
  private setupAllowList: AllowedElement[],
23
23
  private timestamp: UInt64,
24
+ bindings?: LoggerBindings,
24
25
  ) {
25
- this.contractsDB = new PublicContractsDB(contracts);
26
+ this.#log = createLogger('sequencer:tx_validator:tx_phases', bindings);
27
+ this.contractsDB = new PublicContractsDB(contracts, bindings);
26
28
  }
27
29
 
28
30
  async validateTx(tx: Tx): Promise<TxValidationResult> {
@@ -0,0 +1,22 @@
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
3
+ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
+
5
+ export class SizeTxValidator implements TxValidator<Tx> {
6
+ #log: Logger;
7
+
8
+ constructor(bindings?: LoggerBindings) {
9
+ this.#log = createLogger('p2p:tx_validator:tx_size', bindings);
10
+ }
11
+
12
+ validateTx(tx: Tx): Promise<TxValidationResult> {
13
+ const txSize = tx.getSize();
14
+ if (txSize > MAX_TX_SIZE_KB * 1024) {
15
+ this.#log.verbose(
16
+ `Rejecting transaction ${tx.getTxHash().toString()}. Reason: size above size limit. ${txSize}bytes > ${MAX_TX_SIZE_KB}Kb`,
17
+ );
18
+ return Promise.resolve({ result: 'invalid', reason: ['Transaction size above size limit'] });
19
+ }
20
+ return Promise.resolve({ result: 'valid' });
21
+ }
22
+ }
@@ -1,16 +1,25 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import {
4
- type AnyTx,
5
- TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP,
6
- type TxValidationResult,
7
- type TxValidator,
8
- getTxHash,
9
- } from '@aztec/stdlib/tx';
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { TX_ERROR_INVALID_EXPIRATION_TIMESTAMP, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
10
4
  import type { UInt64 } from '@aztec/stdlib/types';
11
5
 
12
- export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
13
- #log = createLogger('p2p:tx_validator:timestamp');
6
+ /** Structural interface for timestamp validation. */
7
+ export interface HasTimestampData {
8
+ txHash: { toString(): string };
9
+ data: {
10
+ expirationTimestamp: bigint;
11
+ constants: {
12
+ anchorBlockHeader: {
13
+ globalVariables: {
14
+ blockNumber: BlockNumber;
15
+ };
16
+ };
17
+ };
18
+ };
19
+ }
20
+
21
+ export class TimestampTxValidator<T extends HasTimestampData> implements TxValidator<T> {
22
+ #log: Logger;
14
23
 
15
24
  constructor(
16
25
  private values: {
@@ -20,28 +29,27 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
20
29
  // Block number in which the tx is considered to be included.
21
30
  blockNumber: BlockNumber;
22
31
  },
23
- ) {}
32
+ bindings?: LoggerBindings,
33
+ ) {
34
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
35
+ }
24
36
 
25
37
  validateTx(tx: T): Promise<TxValidationResult> {
26
- const includeByTimestamp = tx.data.includeByTimestamp;
27
- // If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
38
+ const expirationTimestamp = tx.data.expirationTimestamp;
39
+ // If building block 1, we skip the expiration check. For details on why see the `validate_expiration_timestamp`
28
40
  // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
29
41
  const buildingBlock1 = this.values.blockNumber === 1;
30
42
 
31
- if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
43
+ if (!buildingBlock1 && expirationTimestamp < this.values.timestamp) {
32
44
  if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
33
45
  this.#log.warn(
34
46
  `A tx built against a genesis block failed to be included in block 1 which is the only block in which txs built against a genesis block are allowed to be included.`,
35
47
  );
36
48
  }
37
49
  this.#log.verbose(
38
- `Rejecting tx ${getTxHash(
39
- tx,
40
- )} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
41
- this.values.timestamp
42
- }.`,
50
+ `Rejecting tx ${tx.txHash} for low expiration timestamp. Tx expiration timestamp: ${expirationTimestamp}, timestamp: ${this.values.timestamp}.`,
43
51
  );
44
- return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP] });
52
+ return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_EXPIRATION_TIMESTAMP] });
45
53
  } else {
46
54
  return Promise.resolve({ result: 'valid' });
47
55
  }
@@ -1,10 +1,15 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
3
3
 
4
4
  export class TxPermittedValidator implements TxValidator<Tx> {
5
- #log = createLogger('p2p:tx_validator:tx_permitted');
5
+ #log: Logger;
6
6
 
7
- constructor(private permitted: boolean) {}
7
+ constructor(
8
+ private permitted: boolean,
9
+ bindings?: LoggerBindings,
10
+ ) {
11
+ this.#log = createLogger('p2p:tx_validator:tx_permitted', bindings);
12
+ }
8
13
 
9
14
  validateTx(tx: Tx): Promise<TxValidationResult> {
10
15
  if (!this.permitted) {
@@ -1,11 +1,16 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
3
3
  import { TX_ERROR_INVALID_PROOF, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
4
 
5
5
  export class TxProofValidator implements TxValidator<Tx> {
6
- #log = createLogger('p2p:tx_validator:private_proof');
6
+ #log: Logger;
7
7
 
8
- constructor(private verifier: ClientProtocolCircuitVerifier) {}
8
+ constructor(
9
+ private verifier: ClientProtocolCircuitVerifier,
10
+ bindings?: LoggerBindings,
11
+ ) {
12
+ this.#log = createLogger('p2p:tx_validator:proof', bindings);
13
+ }
9
14
 
10
15
  async validateTx(tx: Tx): Promise<TxValidationResult> {
11
16
  const result = await this.verifier.verifyProof(tx);
@@ -24,6 +24,7 @@ class KeyNotFoundError extends Error {
24
24
  }
25
25
 
26
26
  export class AztecDatastore implements Datastore {
27
+ #db: AztecAsyncKVStore;
27
28
  #memoryDatastore: Map<string, MemoryItem>;
28
29
  #dbDatastore: AztecAsyncMap<string, Uint8Array>;
29
30
 
@@ -32,9 +33,9 @@ export class AztecDatastore implements Datastore {
32
33
  private maxMemoryItems: number;
33
34
 
34
35
  constructor(db: AztecAsyncKVStore, { maxMemoryItems } = { maxMemoryItems: 50 }) {
36
+ this.#db = db;
35
37
  this.#memoryDatastore = new Map();
36
38
  this.#dbDatastore = db.openMap('p2p_datastore');
37
-
38
39
  this.maxMemoryItems = maxMemoryItems;
39
40
  }
40
41
 
@@ -106,13 +107,15 @@ export class AztecDatastore implements Datastore {
106
107
  });
107
108
  },
108
109
  commit: async () => {
109
- for (const op of this.#batchOps) {
110
- if (op.type === 'put' && op.value) {
111
- await this.put(op.key, op.value);
112
- } else if (op.type === 'del') {
113
- await this.delete(op.key);
110
+ await this.#db.transactionAsync(async () => {
111
+ for (const op of this.#batchOps) {
112
+ if (op.type === 'put' && op.value) {
113
+ await this.put(op.key, op.value);
114
+ } else if (op.type === 'del') {
115
+ await this.delete(op.key);
116
+ }
114
117
  }
115
- }
118
+ });
116
119
  this.#batchOps = []; // Clear operations after commit
117
120
  },
118
121
  };
@@ -87,7 +87,7 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
87
87
  this.packageVersion,
88
88
  ));
89
89
 
90
- const metricsRegistry = new OtelMetricsAdapter(telemetry);
90
+ const metricsRegistry = new OtelMetricsAdapter(telemetry, this.logger.getBindings());
91
91
  this.discv5 = Discv5.create({
92
92
  enr: this.enr,
93
93
  peerId,
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { Gossipable, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+ import type { Gossipable, PeerErrorSeverity, TopicType } from '@aztec/stdlib/p2p';
4
4
  import { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -8,7 +8,9 @@ import type { ENR } from '@nethermindeth/enr';
8
8
  import EventEmitter from 'events';
9
9
 
10
10
  import type { PeerManagerInterface } from './peer-manager/interface.js';
11
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
11
12
  import type { P2PReqRespConfig } from './reqresp/config.js';
13
+ import type { ConnectionSampler } from './reqresp/connection-sampler/connection_sampler.js';
12
14
  import { type AuthRequest, StatusMessage } from './reqresp/index.js';
13
15
  import type {
14
16
  ReqRespInterface,
@@ -24,6 +26,8 @@ import { ReqRespStatus } from './reqresp/status.js';
24
26
  import {
25
27
  type P2PBlockReceivedCallback,
26
28
  type P2PCheckpointReceivedCallback,
29
+ type P2PDuplicateAttestationCallback,
30
+ type P2PDuplicateProposalCallback,
27
31
  type P2PService,
28
32
  type PeerDiscoveryService,
29
33
  PeerDiscoveryState,
@@ -40,6 +44,10 @@ export class DummyP2PService implements P2PService {
40
44
  return [];
41
45
  }
42
46
 
47
+ getGossipMeshPeerCount(_topicType: TopicType): number {
48
+ return 0;
49
+ }
50
+
43
51
  /**
44
52
  * Starts the dummy implementation.
45
53
  * @returns A resolved promise.
@@ -80,6 +88,16 @@ export class DummyP2PService implements P2PService {
80
88
  */
81
89
  public registerCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
82
90
 
91
+ /**
92
+ * Register a callback for when a duplicate proposal is detected
93
+ */
94
+ public registerDuplicateProposalCallback(_callback: P2PDuplicateProposalCallback): void {}
95
+
96
+ /**
97
+ * Register a callback for when a duplicate attestation is detected
98
+ */
99
+ public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {}
100
+
83
101
  /**
84
102
  * Sends a request to a peer.
85
103
  * @param _protocol - The protocol to send the request on.
@@ -106,6 +124,15 @@ export class DummyP2PService implements P2PService {
106
124
  return Promise.resolve([]);
107
125
  }
108
126
 
127
+ public sendRequestToPeer(
128
+ _peerId: PeerId,
129
+ _subProtocol: ReqRespSubProtocol,
130
+ _payload: Buffer,
131
+ _dialTimeout?: number,
132
+ ): Promise<ReqRespResponse> {
133
+ return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
134
+ }
135
+
109
136
  /**
110
137
  * Returns the ENR of the peer.
111
138
  * @returns The ENR of the peer, otherwise undefined.
@@ -114,7 +141,7 @@ export class DummyP2PService implements P2PService {
114
141
  return undefined;
115
142
  }
116
143
 
117
- validate(_txs: Tx[]): Promise<void> {
144
+ validateTxsReceivedInBlockProposal(_txs: Tx[]): Promise<void> {
118
145
  return Promise.resolve();
119
146
  }
120
147
 
@@ -132,6 +159,27 @@ export class DummyP2PService implements P2PService {
132
159
 
133
160
  //this is no-op
134
161
  registerThisValidatorAddresses(_address: EthAddress[]): void {}
162
+
163
+ /**
164
+ * Get dummy BatchTxRequesterLibP2PService for testing
165
+ */
166
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
167
+ return {
168
+ reqResp: this, // The dummy service implements ReqRespInterface
169
+ connectionSampler: new DummyReqResp().getConnectionSampler(),
170
+ txValidatorConfig: {
171
+ l1ChainId: 1,
172
+ rollupVersion: 1,
173
+ proofVerifier: {
174
+ verifyProof: () => Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 }),
175
+ stop: () => Promise.resolve(),
176
+ },
177
+ },
178
+ peerScoring: {
179
+ penalizePeer: (_peerId, _penalty) => {},
180
+ },
181
+ };
182
+ }
135
183
  }
136
184
 
137
185
  /**
@@ -268,6 +316,15 @@ export class DummyReqResp implements ReqRespInterface {
268
316
  return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
269
317
  }
270
318
 
319
+ /**
320
+ * Get dummy connection sampler for testing
321
+ */
322
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
323
+ return {
324
+ getPeerListSortedByConnectionCountAsc: () => [],
325
+ };
326
+ }
327
+
271
328
  addSubProtocol(
272
329
  _subProtocol: ReqRespSubProtocol,
273
330
  _handler: ReqRespSubProtocolHandler,
@@ -1,7 +1,7 @@
1
1
  // Taken from lodestar: https://github.com/ChainSafe/lodestar
2
2
  import { sha256 } from '@aztec/foundation/crypto/sha256';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
- import { TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
4
+ import { MAX_TX_SIZE_KB, TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
5
5
 
6
6
  import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
7
7
  import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
@@ -52,14 +52,14 @@ export function getMsgIdFn(message: Message) {
52
52
  }
53
53
 
54
54
  const DefaultMaxSizesKb: Record<TopicType, number> = {
55
- // Tx effects should not exceed 128kb, so 512kb for the full tx obj should be sufficient
56
- [TopicType.tx]: 512,
55
+ [TopicType.tx]: MAX_TX_SIZE_KB,
57
56
  // An attestation has roughly 30 fields, which is 1kb, so 5x is plenty
58
57
  [TopicType.checkpoint_attestation]: 5,
59
58
  // Proposals may carry some tx objects, so we allow a larger size capped at 10mb
60
59
  // Note this may not be enough for carrying all tx objects in a block
61
60
  [TopicType.block_proposal]: 1024 * 10,
62
- // TODO(palla/mbps): Check size for checkpoint proposal
61
+ // Checkpoint proposals carry almost the same data as a block proposal (see the lastBlockProposal)
62
+ // Only diff is an additional header, which is pretty small compared to the 10mb limit
63
63
  [TopicType.checkpoint_proposal]: 1024 * 10,
64
64
  };
65
65
 
@@ -79,11 +79,11 @@ export class SnappyTransform implements DataTransform {
79
79
  return this.inboundTransformData(Buffer.from(data), topic);
80
80
  }
81
81
 
82
- public inboundTransformData(data: Buffer, topic?: TopicType): Buffer {
82
+ public inboundTransformData(data: Buffer, topic?: TopicType, maxSizeKbOverride?: number): Buffer {
83
83
  if (data.length === 0) {
84
84
  return data;
85
85
  }
86
- const maxSizeKb = this.maxSizesKb[topic!] ?? this.defaultMaxSizeKb;
86
+ const maxSizeKb = maxSizeKbOverride ?? this.maxSizesKb[topic!] ?? this.defaultMaxSizeKb;
87
87
  const { decompressedSize } = readSnappyPreamble(data);
88
88
  if (decompressedSize > maxSizeKb * 1024) {
89
89
  this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);