@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.023c3e5

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 (512) 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 +26 -13
  4. package/dest/client/factory.d.ts +15 -5
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +61 -25
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +170 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +75 -193
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +765 -229
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  19. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  20. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  21. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  22. package/dest/config.d.ts +154 -125
  23. package/dest/config.d.ts.map +1 -1
  24. package/dest/config.js +182 -34
  25. package/dest/enr/generate-enr.d.ts +11 -3
  26. package/dest/enr/generate-enr.d.ts.map +1 -1
  27. package/dest/enr/generate-enr.js +27 -5
  28. package/dest/enr/index.d.ts +1 -1
  29. package/dest/errors/attestation-pool.error.d.ts +7 -0
  30. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  31. package/dest/errors/attestation-pool.error.js +12 -0
  32. package/dest/errors/reqresp.error.d.ts +1 -1
  33. package/dest/errors/reqresp.error.d.ts.map +1 -1
  34. package/dest/index.d.ts +4 -1
  35. package/dest/index.d.ts.map +1 -1
  36. package/dest/index.js +2 -0
  37. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
  38. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  40. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +299 -174
  42. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  43. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
  44. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
  46. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
  47. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  48. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
  49. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  51. package/dest/mem_pools/attestation_pool/mocks.js +19 -21
  52. package/dest/mem_pools/index.d.ts +1 -1
  53. package/dest/mem_pools/instrumentation.d.ts +16 -12
  54. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  55. package/dest/mem_pools/instrumentation.js +56 -41
  56. package/dest/mem_pools/interface.d.ts +3 -4
  57. package/dest/mem_pools/interface.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
  59. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
  61. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  62. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  64. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  65. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  67. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  68. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  70. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  73. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  74. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  77. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  79. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  80. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  82. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  83. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool/index.js +0 -1
  85. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  86. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool/priority.js +7 -2
  88. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  89. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  91. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  92. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
  93. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  94. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
  96. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  97. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  99. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  100. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/attestation_validator/index.js +1 -0
  102. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  103. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  104. package/dest/msg_validators/clock_tolerance.js +37 -0
  105. package/dest/msg_validators/index.d.ts +2 -2
  106. package/dest/msg_validators/index.d.ts.map +1 -1
  107. package/dest/msg_validators/index.js +1 -1
  108. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  109. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  110. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  111. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  112. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  114. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  115. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  117. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  118. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  119. package/dest/msg_validators/proposal_validator/index.js +3 -0
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  123. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  124. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  125. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  127. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  130. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  131. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  132. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
  137. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/data_validator.js +60 -87
  140. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
  143. package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
  144. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/factory.js +84 -0
  146. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  149. package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
  152. package/dest/msg_validators/tx_validator/index.d.ts +9 -1
  153. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/index.js +8 -0
  155. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
  158. package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
  159. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  161. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  162. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  164. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  165. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  170. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  171. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  173. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  174. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
  176. package/dest/services/data_store.d.ts +1 -1
  177. package/dest/services/data_store.d.ts.map +1 -1
  178. package/dest/services/data_store.js +10 -6
  179. package/dest/services/discv5/discV5_service.d.ts +10 -9
  180. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  181. package/dest/services/discv5/discV5_service.js +64 -37
  182. package/dest/services/dummy_service.d.ts +66 -11
  183. package/dest/services/dummy_service.d.ts.map +1 -1
  184. package/dest/services/dummy_service.js +130 -5
  185. package/dest/services/encoding.d.ts +26 -7
  186. package/dest/services/encoding.d.ts.map +1 -1
  187. package/dest/services/encoding.js +75 -6
  188. package/dest/services/gossipsub/scoring.d.ts +1 -1
  189. package/dest/services/index.d.ts +5 -1
  190. package/dest/services/index.d.ts.map +1 -1
  191. package/dest/services/index.js +4 -0
  192. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  193. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  194. package/dest/services/libp2p/instrumentation.js +122 -0
  195. package/dest/services/libp2p/libp2p_service.d.ts +107 -95
  196. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  197. package/dest/services/libp2p/libp2p_service.js +1328 -313
  198. package/dest/services/peer-manager/interface.d.ts +23 -0
  199. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  200. package/dest/services/peer-manager/interface.js +1 -0
  201. package/dest/services/peer-manager/metrics.d.ts +12 -3
  202. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  203. package/dest/services/peer-manager/metrics.js +44 -12
  204. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  205. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  206. package/dest/services/peer-manager/peer_manager.js +551 -82
  207. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  208. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  209. package/dest/services/peer-manager/peer_scoring.js +43 -2
  210. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  211. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  212. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  213. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  214. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  215. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  216. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  217. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  218. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  219. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  220. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  221. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  222. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  223. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  224. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  225. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  226. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  227. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  228. package/dest/services/reqresp/config.d.ts +11 -9
  229. package/dest/services/reqresp/config.d.ts.map +1 -1
  230. package/dest/services/reqresp/config.js +18 -4
  231. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
  232. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  233. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
  234. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
  235. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  236. package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
  237. package/dest/services/reqresp/constants.d.ts +12 -0
  238. package/dest/services/reqresp/constants.d.ts.map +1 -0
  239. package/dest/services/reqresp/constants.js +7 -0
  240. package/dest/services/reqresp/index.d.ts +3 -2
  241. package/dest/services/reqresp/index.d.ts.map +1 -1
  242. package/dest/services/reqresp/index.js +2 -1
  243. package/dest/services/reqresp/interface.d.ts +75 -24
  244. package/dest/services/reqresp/interface.d.ts.map +1 -1
  245. package/dest/services/reqresp/interface.js +46 -27
  246. package/dest/services/reqresp/metrics.d.ts +6 -5
  247. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  248. package/dest/services/reqresp/metrics.js +17 -21
  249. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  250. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  251. package/dest/services/reqresp/protocols/auth.js +71 -0
  252. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  253. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  254. package/dest/services/reqresp/protocols/block.js +30 -6
  255. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
  256. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  257. package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
  258. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  259. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  260. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
  261. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
  262. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  263. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
  264. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  265. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  266. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  267. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  268. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  269. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  270. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  271. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  272. package/dest/services/reqresp/protocols/index.js +2 -0
  273. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  274. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  275. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  276. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/status.js +76 -5
  278. package/dest/services/reqresp/protocols/tx.d.ts +14 -4
  279. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  280. package/dest/services/reqresp/protocols/tx.js +34 -6
  281. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  283. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  284. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  285. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  286. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  287. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  288. package/dest/services/reqresp/reqresp.d.ts +29 -66
  289. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  290. package/dest/services/reqresp/reqresp.js +753 -248
  291. package/dest/services/reqresp/status.d.ts +10 -4
  292. package/dest/services/reqresp/status.d.ts.map +1 -1
  293. package/dest/services/reqresp/status.js +9 -2
  294. package/dest/services/service.d.ts +40 -20
  295. package/dest/services/service.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.d.ts +28 -0
  297. package/dest/services/tx_collection/config.d.ts.map +1 -0
  298. package/dest/services/tx_collection/config.js +66 -0
  299. package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
  300. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  301. package/dest/services/tx_collection/fast_tx_collection.js +311 -0
  302. package/dest/services/tx_collection/index.d.ts +4 -0
  303. package/dest/services/tx_collection/index.d.ts.map +1 -0
  304. package/dest/services/tx_collection/index.js +3 -0
  305. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  307. package/dest/services/tx_collection/instrumentation.js +31 -0
  308. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  311. package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
  312. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  313. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  314. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  315. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  316. package/dest/services/tx_collection/tx_collection.js +128 -0
  317. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  318. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  319. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  320. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  321. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  322. package/dest/services/tx_collection/tx_source.js +31 -0
  323. package/dest/services/tx_provider.d.ts +51 -0
  324. package/dest/services/tx_provider.d.ts.map +1 -0
  325. package/dest/services/tx_provider.js +219 -0
  326. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  327. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  328. package/dest/services/tx_provider_instrumentation.js +34 -0
  329. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  330. package/dest/test-helpers/get-ports.d.ts +1 -1
  331. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  332. package/dest/test-helpers/index.d.ts +4 -1
  333. package/dest/test-helpers/index.d.ts.map +1 -1
  334. package/dest/test-helpers/index.js +3 -0
  335. package/dest/test-helpers/make-enrs.d.ts +1 -1
  336. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  337. package/dest/test-helpers/make-enrs.js +4 -5
  338. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  339. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  340. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  341. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  342. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  343. package/dest/test-helpers/mock-pubsub.js +130 -0
  344. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  345. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  346. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  347. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  348. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  349. package/dest/test-helpers/reqresp-nodes.js +62 -28
  350. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  351. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  352. package/dest/test-helpers/test_tx_provider.js +41 -0
  353. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  354. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  355. package/dest/test-helpers/testbench-utils.js +297 -0
  356. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  357. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  358. package/dest/testbench/p2p_client_testbench_worker.js +259 -90
  359. package/dest/testbench/parse_log_file.d.ts +1 -1
  360. package/dest/testbench/parse_log_file.js +4 -4
  361. package/dest/testbench/testbench.d.ts +1 -1
  362. package/dest/testbench/testbench.js +4 -4
  363. package/dest/testbench/worker_client_manager.d.ts +51 -11
  364. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  365. package/dest/testbench/worker_client_manager.js +232 -53
  366. package/dest/types/index.d.ts +4 -2
  367. package/dest/types/index.d.ts.map +1 -1
  368. package/dest/types/index.js +2 -0
  369. package/dest/util.d.ts +24 -16
  370. package/dest/util.d.ts.map +1 -1
  371. package/dest/util.js +75 -69
  372. package/dest/versioning.d.ts +4 -4
  373. package/dest/versioning.d.ts.map +1 -1
  374. package/dest/versioning.js +8 -3
  375. package/package.json +32 -27
  376. package/src/bootstrap/bootstrap.ts +34 -15
  377. package/src/client/factory.ts +135 -53
  378. package/src/client/index.ts +1 -0
  379. package/src/client/interface.ts +213 -0
  380. package/src/client/p2p_client.ts +476 -383
  381. package/src/client/test/tx_proposal_collector/README.md +227 -0
  382. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  383. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  384. package/src/config.ts +304 -134
  385. package/src/enr/generate-enr.ts +39 -6
  386. package/src/errors/attestation-pool.error.ts +13 -0
  387. package/src/index.ts +4 -0
  388. package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
  389. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
  390. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
  391. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
  392. package/src/mem_pools/attestation_pool/mocks.ts +24 -17
  393. package/src/mem_pools/instrumentation.ts +72 -48
  394. package/src/mem_pools/interface.ts +2 -4
  395. package/src/mem_pools/tx_pool/README.md +270 -0
  396. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
  397. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  398. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  399. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  400. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  401. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  402. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  403. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  404. package/src/mem_pools/tx_pool/index.ts +0 -1
  405. package/src/mem_pools/tx_pool/priority.ts +9 -2
  406. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  407. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
  408. package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
  409. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  410. package/src/msg_validators/attestation_validator/index.ts +1 -0
  411. package/src/msg_validators/clock_tolerance.ts +51 -0
  412. package/src/msg_validators/index.ts +1 -1
  413. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  414. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  415. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  416. package/src/msg_validators/proposal_validator/index.ts +3 -0
  417. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  418. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  419. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  420. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  421. package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
  422. package/src/msg_validators/tx_validator/data_validator.ts +95 -71
  423. package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
  424. package/src/msg_validators/tx_validator/factory.ts +151 -0
  425. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  426. package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
  427. package/src/msg_validators/tx_validator/index.ts +8 -0
  428. package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
  429. package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
  430. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  431. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  432. package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
  433. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  434. package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
  435. package/src/services/data_store.ts +10 -7
  436. package/src/services/discv5/discV5_service.ts +85 -39
  437. package/src/services/dummy_service.ts +198 -9
  438. package/src/services/encoding.ts +82 -6
  439. package/src/services/index.ts +4 -0
  440. package/src/services/libp2p/instrumentation.ts +126 -0
  441. package/src/services/libp2p/libp2p_service.ts +1170 -353
  442. package/src/services/peer-manager/interface.ts +29 -0
  443. package/src/services/peer-manager/metrics.ts +55 -12
  444. package/src/services/peer-manager/peer_manager.ts +657 -80
  445. package/src/services/peer-manager/peer_scoring.ts +45 -3
  446. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  447. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  448. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  449. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  450. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  451. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  452. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  453. package/src/services/reqresp/config.ts +26 -9
  454. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
  455. package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
  456. package/src/services/reqresp/constants.ts +14 -0
  457. package/src/services/reqresp/index.ts +2 -0
  458. package/src/services/reqresp/interface.ts +95 -37
  459. package/src/services/reqresp/metrics.ts +40 -28
  460. package/src/services/reqresp/protocols/auth.ts +83 -0
  461. package/src/services/reqresp/protocols/block.ts +26 -4
  462. package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
  463. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
  464. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
  465. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  466. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  467. package/src/services/reqresp/protocols/index.ts +2 -0
  468. package/src/services/reqresp/protocols/status.ts +121 -5
  469. package/src/services/reqresp/protocols/tx.ts +36 -8
  470. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  471. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  472. package/src/services/reqresp/reqresp.ts +449 -271
  473. package/src/services/reqresp/status.ts +12 -3
  474. package/src/services/service.ts +65 -22
  475. package/src/services/tx_collection/config.ts +98 -0
  476. package/src/services/tx_collection/fast_tx_collection.ts +364 -0
  477. package/src/services/tx_collection/index.ts +7 -0
  478. package/src/services/tx_collection/instrumentation.ts +35 -0
  479. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  480. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  481. package/src/services/tx_collection/tx_collection.ts +216 -0
  482. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  483. package/src/services/tx_collection/tx_source.ts +37 -0
  484. package/src/services/tx_provider.ts +232 -0
  485. package/src/services/tx_provider_instrumentation.ts +54 -0
  486. package/src/test-helpers/index.ts +3 -0
  487. package/src/test-helpers/make-enrs.ts +4 -5
  488. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  489. package/src/test-helpers/mock-pubsub.ts +188 -0
  490. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  491. package/src/test-helpers/reqresp-nodes.ts +87 -36
  492. package/src/test-helpers/test_tx_provider.ts +64 -0
  493. package/src/test-helpers/testbench-utils.ts +374 -0
  494. package/src/testbench/p2p_client_testbench_worker.ts +434 -89
  495. package/src/testbench/parse_log_file.ts +4 -4
  496. package/src/testbench/testbench.ts +4 -4
  497. package/src/testbench/worker_client_manager.ts +315 -59
  498. package/src/types/index.ts +2 -0
  499. package/src/util.ts +105 -91
  500. package/src/versioning.ts +11 -4
  501. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  502. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  504. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  505. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  506. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  507. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  508. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  509. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  510. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  511. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  512. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -0,0 +1,123 @@
1
+ import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ import { Gas, GasFees } from '@aztec/stdlib/gas';
6
+ import type { PublicStateSource } from '@aztec/stdlib/trees';
7
+ import {
8
+ TX_ERROR_GAS_LIMIT_TOO_HIGH,
9
+ TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE,
10
+ TX_ERROR_INSUFFICIENT_FEE_PER_GAS,
11
+ TX_ERROR_INSUFFICIENT_GAS_LIMIT,
12
+ type Tx,
13
+ type TxValidationResult,
14
+ type TxValidator,
15
+ } from '@aztec/stdlib/tx';
16
+
17
+ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
18
+
19
+ export class GasTxValidator implements TxValidator<Tx> {
20
+ #log: Logger;
21
+ #publicDataSource: PublicStateSource;
22
+ #feeJuiceAddress: AztecAddress;
23
+ #gasFees: GasFees;
24
+
25
+ constructor(
26
+ publicDataSource: PublicStateSource,
27
+ feeJuiceAddress: AztecAddress,
28
+ gasFees: GasFees,
29
+ bindings?: LoggerBindings,
30
+ ) {
31
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
32
+ this.#publicDataSource = publicDataSource;
33
+ this.#feeJuiceAddress = feeJuiceAddress;
34
+ this.#gasFees = gasFees;
35
+ }
36
+
37
+ async validateTx(tx: Tx): Promise<TxValidationResult> {
38
+ const gasLimitValidation = this.#validateGasLimit(tx);
39
+ if (gasLimitValidation.result === 'invalid') {
40
+ return Promise.resolve(gasLimitValidation);
41
+ }
42
+ if (this.#shouldSkip(tx)) {
43
+ return Promise.resolve({ result: 'skipped', reason: [TX_ERROR_INSUFFICIENT_FEE_PER_GAS] });
44
+ }
45
+ return await this.validateTxFee(tx);
46
+ }
47
+
48
+ /**
49
+ * Check whether the tx's max fees are valid for the current block, and skip if not.
50
+ * We skip instead of invalidating since the tx may become eligible later.
51
+ * Note that circuits check max fees even if fee payer is unset, so we
52
+ * keep this validation even if the tx does not pay fees.
53
+ */
54
+ #shouldSkip(tx: Tx): boolean {
55
+ const gasSettings = tx.data.constants.txContext.gasSettings;
56
+
57
+ // Skip the tx if its max fees are not enough for the current block's gas fees.
58
+ const maxFeesPerGas = gasSettings.maxFeesPerGas;
59
+ const notEnoughMaxFees =
60
+ maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
61
+
62
+ if (notEnoughMaxFees) {
63
+ this.#log.verbose(`Skipping transaction ${tx.getTxHash().toString()} due to insufficient fee per gas`, {
64
+ txMaxFeesPerGas: maxFeesPerGas.toInspect(),
65
+ currentGasFees: this.#gasFees.toInspect(),
66
+ });
67
+ }
68
+ return notEnoughMaxFees;
69
+ }
70
+
71
+ /**
72
+ * Check whether the tx's gas limit is above the minimum amount.
73
+ */
74
+ #validateGasLimit(tx: Tx): TxValidationResult {
75
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
76
+ const minGasLimits = new Gas(FIXED_DA_GAS, FIXED_L2_GAS);
77
+
78
+ if (minGasLimits.gtAny(gasLimits)) {
79
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
80
+ gasLimits,
81
+ minGasLimits,
82
+ });
83
+ return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
84
+ }
85
+
86
+ if (gasLimits.l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
87
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
88
+ gasLimits,
89
+ minGasLimits,
90
+ });
91
+ return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
92
+ }
93
+
94
+ return { result: 'valid' };
95
+ }
96
+
97
+ public async validateTxFee(tx: Tx): Promise<TxValidationResult> {
98
+ const feePayer = tx.data.feePayer;
99
+
100
+ // Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
101
+ const feeLimit = getTxFeeLimit(tx);
102
+
103
+ // Read current balance of the feePayer
104
+ const initialBalance = await this.#publicDataSource.storageRead(
105
+ this.#feeJuiceAddress,
106
+ await computeFeePayerBalanceStorageSlot(feePayer),
107
+ );
108
+
109
+ // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
110
+ const claimAmount = await getFeePayerClaimAmount(tx, this.#feeJuiceAddress);
111
+ const balance = initialBalance.toBigInt() + claimAmount;
112
+
113
+ if (balance < feeLimit) {
114
+ this.#log.verbose(`Rejecting transaction due to not enough fee payer balance`, {
115
+ feePayer,
116
+ balance,
117
+ feeLimit,
118
+ });
119
+ return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE] };
120
+ }
121
+ return { result: 'valid' };
122
+ }
123
+ }
@@ -4,3 +4,11 @@ export * from './double_spend_validator.js';
4
4
  export * from './metadata_validator.js';
5
5
  export * from './tx_proof_validator.js';
6
6
  export * from './block_header_validator.js';
7
+ export * from './gas_validator.js';
8
+ export * from './phases_validator.js';
9
+ export * from './test_utils.js';
10
+ export * from './allowed_public_setup.js';
11
+ export * from './archive_cache.js';
12
+ export * from './tx_permitted_validator.js';
13
+ export * from './timestamp_validator.js';
14
+ export * from './size_validator.js';
@@ -1,29 +1,54 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { type AnyTx, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import {
4
+ type AnyTx,
5
+ TX_ERROR_INCORRECT_L1_CHAIN_ID,
6
+ TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH,
7
+ TX_ERROR_INCORRECT_ROLLUP_VERSION,
8
+ TX_ERROR_INCORRECT_VK_TREE_ROOT,
9
+ type TxValidationResult,
10
+ type TxValidator,
11
+ } from '@aztec/stdlib/tx';
4
12
 
5
13
  export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
6
- #log = createLogger('p2p:tx_validator:tx_metadata');
14
+ #log: Logger;
7
15
 
8
- constructor(private chainId: Fr, private blockNumber: Fr) {}
16
+ constructor(
17
+ private values: {
18
+ l1ChainId: Fr;
19
+ rollupVersion: Fr;
20
+ vkTreeRoot: Fr;
21
+ protocolContractsHash: Fr;
22
+ },
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:tx_metadata', bindings);
26
+ }
9
27
 
10
- async validateTx(tx: T): Promise<TxValidationResult> {
28
+ validateTx(tx: T): Promise<TxValidationResult> {
11
29
  const errors = [];
12
- if (!(await this.#hasCorrectChainId(tx))) {
13
- errors.push('Incorrect chain id');
30
+ if (!this.#hasCorrectL1ChainId(tx)) {
31
+ errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
32
+ }
33
+ if (!this.#hasCorrectRollupVersion(tx)) {
34
+ errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
14
35
  }
15
- if (!(await this.#isValidForBlockNumber(tx))) {
16
- errors.push('Invalid block number');
36
+ if (!this.#hasCorrectVkTreeRoot(tx)) {
37
+ errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
17
38
  }
18
- return errors.length > 0 ? { result: 'invalid', reason: errors } : { result: 'valid' };
39
+ if (!this.#hasCorrectprotocolContractsHash(tx)) {
40
+ errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
41
+ }
42
+ return Promise.resolve(errors.length > 0 ? { result: 'invalid', reason: errors } : { result: 'valid' });
19
43
  }
20
44
 
21
- async #hasCorrectChainId(tx: T): Promise<boolean> {
22
- if (!tx.data.constants.txContext.chainId.equals(this.chainId)) {
23
- this.#log.warn(
24
- `Rejecting tx ${await Tx.getHash(
25
- tx,
26
- )} because of incorrect chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.chainId.toNumber()}`,
45
+ #hasCorrectVkTreeRoot(tx: T): boolean {
46
+ // This gets implicitly tested in the proof validator, but we can get a much cheaper check here by looking early at the vk.
47
+ if (!tx.data.constants.vkTreeRoot.equals(this.values.vkTreeRoot)) {
48
+ this.#log.verbose(
49
+ `Rejecting tx ${
50
+ 'txHash' in tx ? tx.txHash : tx.hash
51
+ } because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`,
27
52
  );
28
53
  return false;
29
54
  } else {
@@ -31,14 +56,37 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
31
56
  }
32
57
  }
33
58
 
34
- async #isValidForBlockNumber(tx: T): Promise<boolean> {
35
- const maxBlockNumber = tx.data.rollupValidationRequests.maxBlockNumber;
59
+ #hasCorrectprotocolContractsHash(tx: T): boolean {
60
+ if (!tx.data.constants.protocolContractsHash.equals(this.values.protocolContractsHash)) {
61
+ this.#log.verbose(
62
+ `Rejecting tx ${
63
+ 'txHash' in tx ? tx.txHash : tx.hash
64
+ } because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`,
65
+ );
66
+ return false;
67
+ }
68
+ return true;
69
+ }
70
+
71
+ #hasCorrectL1ChainId(tx: T): boolean {
72
+ if (!tx.data.constants.txContext.chainId.equals(this.values.l1ChainId)) {
73
+ this.#log.verbose(
74
+ `Rejecting tx ${
75
+ 'txHash' in tx ? tx.txHash : tx.hash
76
+ } because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`,
77
+ );
78
+ return false;
79
+ } else {
80
+ return true;
81
+ }
82
+ }
36
83
 
37
- if (maxBlockNumber.isSome && maxBlockNumber.value < this.blockNumber) {
38
- this.#log.warn(
39
- `Rejecting tx ${await Tx.getHash(tx)} for low max block number. Tx max block number: ${
40
- maxBlockNumber.value
41
- }, current block number: ${this.blockNumber}.`,
84
+ #hasCorrectRollupVersion(tx: T): boolean {
85
+ if (!tx.data.constants.txContext.version.equals(this.values.rollupVersion)) {
86
+ this.#log.verbose(
87
+ `Rejecting tx ${
88
+ 'txHash' in tx ? tx.txHash : tx.hash
89
+ } because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`,
42
90
  );
43
91
  return false;
44
92
  } else {
@@ -0,0 +1,118 @@
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
3
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
4
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
5
+ import {
6
+ type PublicCallRequestWithCalldata,
7
+ TX_ERROR_DURING_VALIDATION,
8
+ TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED,
9
+ Tx,
10
+ TxExecutionPhase,
11
+ type TxValidationResult,
12
+ type TxValidator,
13
+ } from '@aztec/stdlib/tx';
14
+ import type { UInt64 } from '@aztec/stdlib/types';
15
+
16
+ export class PhasesTxValidator implements TxValidator<Tx> {
17
+ #log: Logger;
18
+ private contractsDB: PublicContractsDB;
19
+
20
+ constructor(
21
+ contracts: ContractDataSource,
22
+ private setupAllowList: AllowedElement[],
23
+ private timestamp: UInt64,
24
+ bindings?: LoggerBindings,
25
+ ) {
26
+ this.#log = createLogger('sequencer:tx_validator:tx_phases', bindings);
27
+ this.contractsDB = new PublicContractsDB(contracts, bindings);
28
+ }
29
+
30
+ async validateTx(tx: Tx): Promise<TxValidationResult> {
31
+ this.contractsDB.createCheckpoint();
32
+ try {
33
+ // TODO(@spalladino): We add this just to handle public authwit-check calls during setup
34
+ // which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
35
+ // which is what we're trying to do as part of the current txs.
36
+ // We only need to create/revert checkpoint here because of this addNewContracts call.
37
+ await this.contractsDB.addNewContracts(tx);
38
+
39
+ if (!tx.data.forPublic) {
40
+ this.#log.debug(
41
+ `Tx ${tx.getTxHash().toString()} does not contain enqueued public functions. Skipping phases validation.`,
42
+ );
43
+ return { result: 'valid' };
44
+ }
45
+
46
+ const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
47
+ for (const setupFn of setupFns) {
48
+ if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
49
+ this.#log.verbose(
50
+ `Rejecting tx ${tx.getTxHash().toString()} because it calls setup function not on allow list: ${
51
+ setupFn.request.contractAddress
52
+ }:${setupFn.functionSelector}`,
53
+ { allowList: this.setupAllowList },
54
+ );
55
+
56
+ return { result: 'invalid', reason: [TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED] };
57
+ }
58
+ }
59
+
60
+ return { result: 'valid' };
61
+ } catch (err) {
62
+ this.#log.error(`Error validating phases for tx`, err);
63
+ return { result: 'invalid', reason: [TX_ERROR_DURING_VALIDATION] };
64
+ } finally {
65
+ this.contractsDB.revertCheckpoint();
66
+ }
67
+ }
68
+
69
+ private async isOnAllowList(
70
+ publicCall: PublicCallRequestWithCalldata,
71
+ allowList: AllowedElement[],
72
+ ): Promise<boolean> {
73
+ if (publicCall.isEmpty()) {
74
+ return true;
75
+ }
76
+
77
+ const contractAddress = publicCall.request.contractAddress;
78
+ const functionSelector = publicCall.functionSelector;
79
+
80
+ // do these checks first since they don't require the contract class
81
+ for (const entry of allowList) {
82
+ if ('address' in entry && !('selector' in entry)) {
83
+ if (contractAddress.equals(entry.address)) {
84
+ return true;
85
+ }
86
+ }
87
+
88
+ if ('address' in entry && 'selector' in entry) {
89
+ if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
90
+ return true;
91
+ }
92
+ }
93
+
94
+ const contractClass = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
95
+
96
+ if (!contractClass) {
97
+ throw new Error(`Contract not found: ${contractAddress}`);
98
+ }
99
+
100
+ if ('classId' in entry && !('selector' in entry)) {
101
+ if (contractClass.currentContractClassId.equals(entry.classId)) {
102
+ return true;
103
+ }
104
+ }
105
+
106
+ if ('classId' in entry && 'selector' in entry) {
107
+ if (
108
+ contractClass.currentContractClassId.equals(entry.classId) &&
109
+ (entry.selector === undefined || entry.selector.equals(functionSelector))
110
+ ) {
111
+ return true;
112
+ }
113
+ }
114
+ }
115
+
116
+ return false;
117
+ }
118
+ }
@@ -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
+ }
@@ -0,0 +1,43 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import { HashedValues, type Tx } from '@aztec/stdlib/tx';
5
+
6
+ export function patchNonRevertibleFn(
7
+ tx: Tx,
8
+ index: number,
9
+ overrides: { address?: AztecAddress; selector: FunctionSelector; args?: Fr[]; msgSender?: AztecAddress },
10
+ ): Promise<AztecAddress> {
11
+ return patchFn('nonRevertibleAccumulatedData', tx, index, overrides);
12
+ }
13
+
14
+ export function patchRevertibleFn(
15
+ tx: Tx,
16
+ index: number,
17
+ overrides: { address?: AztecAddress; selector: FunctionSelector; args?: Fr[]; msgSender?: AztecAddress },
18
+ ): Promise<AztecAddress> {
19
+ return patchFn('revertibleAccumulatedData', tx, index, overrides);
20
+ }
21
+
22
+ async function patchFn(
23
+ where: 'revertibleAccumulatedData' | 'nonRevertibleAccumulatedData',
24
+ tx: Tx,
25
+ index: number,
26
+ overrides: { address?: AztecAddress; selector: FunctionSelector; args?: Fr[]; msgSender?: AztecAddress },
27
+ ): Promise<AztecAddress> {
28
+ const calldataIndex =
29
+ where === 'nonRevertibleAccumulatedData'
30
+ ? index
31
+ : index + tx.data.forPublic!.nonRevertibleAccumulatedData.publicCallRequests.length;
32
+ const calldata = [overrides.selector.toField(), ...(overrides.args ?? [])];
33
+ const hashedCalldata = await HashedValues.fromCalldata(calldata);
34
+ tx.publicFunctionCalldata[calldataIndex] = hashedCalldata;
35
+
36
+ const request = tx.data.forPublic![where].publicCallRequests[index];
37
+ request.contractAddress = overrides.address ?? request.contractAddress;
38
+ request.msgSender = overrides.msgSender ?? request.msgSender;
39
+ request.calldataHash = hashedCalldata.hash;
40
+ tx.data.forPublic![where].publicCallRequests[index] = request;
41
+
42
+ return request.contractAddress;
43
+ }
@@ -0,0 +1,52 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, type LoggerBindings, 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';
10
+ import type { UInt64 } from '@aztec/stdlib/types';
11
+
12
+ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
13
+ #log: Logger;
14
+
15
+ constructor(
16
+ private values: {
17
+ // Timestamp at which we will validate that the tx is not expired. This is typically the timestamp of the block
18
+ // being built.
19
+ timestamp: UInt64;
20
+ // Block number in which the tx is considered to be included.
21
+ blockNumber: BlockNumber;
22
+ },
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
26
+ }
27
+
28
+ validateTx(tx: T): Promise<TxValidationResult> {
29
+ const includeByTimestamp = tx.data.includeByTimestamp;
30
+ // If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
31
+ // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
32
+ const buildingBlock1 = this.values.blockNumber === 1;
33
+
34
+ if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
35
+ if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
36
+ this.#log.warn(
37
+ `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.`,
38
+ );
39
+ }
40
+ this.#log.verbose(
41
+ `Rejecting tx ${getTxHash(
42
+ tx,
43
+ )} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
44
+ this.values.timestamp
45
+ }.`,
46
+ );
47
+ return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP] });
48
+ } else {
49
+ return Promise.resolve({ result: 'valid' });
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,22 @@
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
3
+
4
+ export class TxPermittedValidator implements TxValidator<Tx> {
5
+ #log: Logger;
6
+
7
+ constructor(
8
+ private permitted: boolean,
9
+ bindings?: LoggerBindings,
10
+ ) {
11
+ this.#log = createLogger('p2p:tx_validator:tx_permitted', bindings);
12
+ }
13
+
14
+ validateTx(tx: Tx): Promise<TxValidationResult> {
15
+ if (!this.permitted) {
16
+ const txHash = tx.getTxHash();
17
+ this.#log.verbose(`Rejecting tx ${txHash.toString()}. Reason: Transactions are not permitted`);
18
+ return Promise.resolve({ result: 'invalid', reason: ['Transactions are not permitted'] });
19
+ }
20
+ return Promise.resolve({ result: 'valid' });
21
+ }
22
+ }
@@ -1,18 +1,24 @@
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
- import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
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
- if (!(await this.verifier.verifyProof(tx))) {
12
- this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for invalid proof`);
13
- return { result: 'invalid', reason: ['Invalid proof'] };
16
+ const result = await this.verifier.verifyProof(tx);
17
+ if (!result.valid) {
18
+ this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()} for invalid proof`);
19
+ return { result: 'invalid', reason: [TX_ERROR_INVALID_PROOF] };
14
20
  }
15
- this.#log.trace(`Accepted ${Tx.getHash(tx)} with valid proof`);
21
+ this.#log.trace(`Accepted ${tx.getTxHash().toString()} with valid proof`);
16
22
  return { result: 'valid' };
17
23
  }
18
24
  }
@@ -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
  };