@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,35 @@
1
+ import { FPCContract } from '@aztec/noir-contracts.js/FPC';
2
+ import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
3
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
4
+ import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
5
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
6
+
7
+ let defaultAllowedSetupFunctions: AllowedElement[] | undefined = undefined;
8
+ export async function getDefaultAllowedSetupFunctions(): Promise<AllowedElement[]> {
9
+ if (defaultAllowedSetupFunctions === undefined) {
10
+ defaultAllowedSetupFunctions = [
11
+ // needed for authwit support
12
+ {
13
+ address: ProtocolContractAddress.AuthRegistry,
14
+ },
15
+ // needed for claiming on the same tx as a spend
16
+ {
17
+ address: ProtocolContractAddress.FeeJuice,
18
+ // We can't restrict the selector because public functions get routed via dispatch.
19
+ // selector: FunctionSelector.fromSignature('_increase_public_balance((Field),u128)'),
20
+ },
21
+ // needed for private transfers via FPC
22
+ {
23
+ classId: (await getContractClassFromArtifact(TokenContractArtifact)).id,
24
+ // We can't restrict the selector because public functions get routed via dispatch.
25
+ // selector: FunctionSelector.fromSignature('_increase_public_balance((Field),u128)'),
26
+ },
27
+ {
28
+ classId: (await getContractClassFromArtifact(FPCContract.artifact)).id,
29
+ // We can't restrict the selector because public functions get routed via dispatch.
30
+ // selector: FunctionSelector.fromSignature('prepare_fee((Field),Field,(Field),Field)'),
31
+ },
32
+ ];
33
+ }
34
+ return defaultAllowedSetupFunctions;
35
+ }
@@ -0,0 +1,28 @@
1
+ import type { ArchiveSource } from '@aztec/p2p';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
3
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
4
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
5
+
6
+ /**
7
+ * Implements an archive source by checking a DB and an in-memory collection.
8
+ * Intended for validating transactions as they are added to a block.
9
+ */
10
+ export class ArchiveCache implements ArchiveSource {
11
+ archives: Map<string, bigint>;
12
+
13
+ constructor(private db: MerkleTreeReadOperations) {
14
+ this.archives = new Map<string, bigint>();
15
+ }
16
+
17
+ public async getArchiveIndices(archives: BlockHash[]): Promise<(bigint | undefined)[]> {
18
+ const toCheckDb = archives.filter(n => !this.archives.has(n.toString())).map(n => n.toFr());
19
+ const dbHits = await this.db.findLeafIndices(MerkleTreeId.ARCHIVE, toCheckDb);
20
+ dbHits.forEach((x, index) => {
21
+ if (x !== undefined) {
22
+ this.archives.set(toCheckDb[index].toString(), x);
23
+ }
24
+ });
25
+
26
+ return archives.map(n => this.archives.get(n.toString()));
27
+ }
28
+ }
@@ -1,24 +1,25 @@
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 Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
3
+ import { type AnyTx, TX_ERROR_BLOCK_HEADER, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
4
 
5
5
  export interface ArchiveSource {
6
- getArchiveIndices: (archives: Fr[]) => Promise<(bigint | undefined)[]>;
6
+ getArchiveIndices: (archives: BlockHash[]) => Promise<(bigint | undefined)[]>;
7
7
  }
8
8
 
9
9
  export class BlockHeaderTxValidator<T extends AnyTx> implements TxValidator<T> {
10
- #log = createLogger('p2p:tx_validator:tx_block_header');
10
+ #log: Logger;
11
11
  #archiveSource: ArchiveSource;
12
12
 
13
- constructor(archiveSource: ArchiveSource) {
13
+ constructor(archiveSource: ArchiveSource, bindings?: LoggerBindings) {
14
14
  this.#archiveSource = archiveSource;
15
+ this.#log = createLogger('p2p:tx_validator:tx_block_header', bindings);
15
16
  }
16
17
 
17
18
  async validateTx(tx: T): Promise<TxValidationResult> {
18
- const [index] = await this.#archiveSource.getArchiveIndices([await tx.data.constants.historicalHeader.hash()]);
19
+ const [index] = await this.#archiveSource.getArchiveIndices([await tx.data.constants.anchorBlockHeader.hash()]);
19
20
  if (index === undefined) {
20
- this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} for referencing an unknown block header`);
21
- return { result: 'invalid', reason: ['Block header not found'] };
21
+ this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for referencing an unknown block header`);
22
+ return { result: 'invalid', reason: [TX_ERROR_BLOCK_HEADER] };
22
23
  }
23
24
  return { result: 'valid' };
24
25
  }
@@ -1,106 +1,130 @@
1
- import { MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
1
+ import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { computeCalldataHash } from '@aztec/stdlib/hash';
4
+ import {
5
+ TX_ERROR_CALLDATA_COUNT_MISMATCH,
6
+ TX_ERROR_CALLDATA_COUNT_TOO_LARGE,
7
+ TX_ERROR_CONTRACT_CLASS_LOGS,
8
+ TX_ERROR_CONTRACT_CLASS_LOG_COUNT,
9
+ TX_ERROR_CONTRACT_CLASS_LOG_LENGTH,
10
+ TX_ERROR_CONTRACT_CLASS_LOG_SORTING,
11
+ TX_ERROR_INCORRECT_CALLDATA,
12
+ TX_ERROR_INCORRECT_HASH,
13
+ Tx,
14
+ type TxValidationResult,
15
+ type TxValidator,
16
+ } from '@aztec/stdlib/tx';
4
17
 
5
18
  export class DataTxValidator implements TxValidator<Tx> {
6
- #log = createLogger('p2p:tx_validator:tx_data');
19
+ #log: Logger;
20
+
21
+ constructor(bindings?: LoggerBindings) {
22
+ this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
23
+ }
7
24
 
8
25
  async validateTx(tx: Tx): Promise<TxValidationResult> {
9
- const execRequestRes = this.#hasCorrectExecutionRequests(tx);
10
- // Note: If we ever skip txs here, must change this return statement to account for them.
11
- return (await execRequestRes).result === 'invalid' ? execRequestRes : this.#hasCorrectContractClassLogs(tx);
26
+ const reason =
27
+ (await this.#hasCorrectHash(tx)) ??
28
+ (await this.#hasCorrectCalldata(tx)) ??
29
+ (await this.#hasCorrectContractClassLogs(tx));
30
+ return reason ? { result: 'invalid', reason: [reason] } : { result: 'valid' };
12
31
  }
13
32
 
14
- async #hasCorrectExecutionRequests(tx: Tx): Promise<TxValidationResult> {
15
- const callRequests = [
16
- ...tx.data.getRevertiblePublicCallRequests(),
17
- ...tx.data.getNonRevertiblePublicCallRequests(),
18
- ];
19
- if (callRequests.length !== tx.enqueuedPublicFunctionCalls.length) {
20
- this.#log.warn(
21
- `Rejecting tx ${Tx.getHash(tx)} because of mismatch number of execution requests for public calls. Expected ${
22
- callRequests.length
23
- }. Got ${tx.enqueuedPublicFunctionCalls.length}.`,
33
+ async #hasCorrectHash(tx: Tx): Promise<string | undefined> {
34
+ const expected = await Tx.computeTxHash(tx);
35
+ if (!tx.getTxHash().equals(expected)) {
36
+ const reason = TX_ERROR_INCORRECT_HASH;
37
+ this.#log.verbose(
38
+ `Rejecting tx ${tx.getTxHash().toString()}. Reason: ${reason}. Expected hash ${expected.toString()}. Got ${tx
39
+ .getTxHash()
40
+ .toString()}.`,
24
41
  );
25
- return { result: 'invalid', reason: ['Wrong number of execution requests for public calls'] };
42
+ return reason;
26
43
  }
44
+ return undefined;
45
+ }
27
46
 
28
- if (tx.getTotalPublicArgsCount() > MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS) {
29
- this.#log.warn(
30
- `Rejecting tx ${await Tx.getHash(
31
- tx,
32
- )} because the total length of args to public enqueued calls is greater than ${MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS}`,
47
+ async #hasCorrectCalldata(tx: Tx): Promise<string | undefined> {
48
+ if (tx.publicFunctionCalldata.length !== tx.numberOfPublicCalls()) {
49
+ const reason = TX_ERROR_CALLDATA_COUNT_MISMATCH;
50
+ this.#log.verbose(
51
+ `Rejecting tx ${tx.getTxHash().toString()}. Reason: ${reason}. Expected ${tx.numberOfPublicCalls()}. Got ${
52
+ tx.publicFunctionCalldata.length
53
+ }.`,
33
54
  );
34
- return { result: 'invalid', reason: ['Too many args in total to enqueued public calls'] };
55
+ return reason;
35
56
  }
36
- const invalidExecutionRequestIndex = (
37
- await Promise.all(
38
- tx.enqueuedPublicFunctionCalls.map(
39
- async (execRequest, i) => !(await execRequest.isForCallRequest(callRequests[i])),
40
- ),
41
- )
42
- ).findIndex(Boolean);
43
- if (invalidExecutionRequestIndex !== -1) {
44
- this.#log.warn(
45
- `Rejecting tx ${await Tx.getHash(
46
- tx,
47
- )} because of incorrect execution requests for public call at index ${invalidExecutionRequestIndex}.`,
57
+
58
+ if (tx.getTotalPublicCalldataCount() > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
59
+ const reason = TX_ERROR_CALLDATA_COUNT_TOO_LARGE;
60
+ this.#log.verbose(
61
+ `Rejecting tx ${tx
62
+ .getTxHash()
63
+ .toString()}. Reason: ${reason}. Expected no greater than ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS} fields. Got ${tx.getTotalPublicCalldataCount()}.`,
48
64
  );
49
- return { result: 'invalid', reason: ['Incorrect execution request for public call'] };
65
+ return reason;
50
66
  }
51
67
 
52
- const teardownCallRequest = tx.data.getTeardownPublicCallRequest();
53
- const isInvalidTeardownExecutionRequest =
54
- (!teardownCallRequest && !tx.publicTeardownFunctionCall.isEmpty()) ||
55
- (teardownCallRequest && !(await tx.publicTeardownFunctionCall.isForCallRequest(teardownCallRequest)));
56
- if (isInvalidTeardownExecutionRequest) {
57
- this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} because of incorrect teardown execution requests.`);
58
- return { result: 'invalid', reason: ['Incorrect teardown execution request'] };
68
+ const callRequests = tx.getPublicCallRequestsWithCalldata();
69
+ for (let i = 0; i < callRequests.length; i++) {
70
+ const { request, calldata } = callRequests[i];
71
+ const hash = await computeCalldataHash(calldata);
72
+ if (!hash.equals(request.calldataHash)) {
73
+ const reason = TX_ERROR_INCORRECT_CALLDATA;
74
+ this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()}. Reason: ${reason}. Call request index: ${i}.`);
75
+ return reason;
76
+ }
59
77
  }
60
78
 
61
- return { result: 'valid' };
79
+ return undefined;
62
80
  }
63
81
 
64
- async #hasCorrectContractClassLogs(tx: Tx): Promise<TxValidationResult> {
82
+ async #hasCorrectContractClassLogs(tx: Tx): Promise<string | undefined> {
65
83
  const contractClassLogsHashes = tx.data.getNonEmptyContractClassLogsHashes();
66
- const hashedContractClasslogs = await Promise.all(tx.contractClassLogs.map(l => l.hash()));
67
- if (contractClassLogsHashes.length !== hashedContractClasslogs.length) {
68
- this.#log.warn(
69
- `Rejecting tx ${Tx.getHash(tx)} because of mismatched number of contract class logs. Expected ${
84
+ if (contractClassLogsHashes.length !== tx.contractClassLogFields.length) {
85
+ this.#log.verbose(
86
+ `Rejecting tx ${tx.getTxHash().toString()} because of mismatched number of contract class logs. Expected ${
70
87
  contractClassLogsHashes.length
71
- }. Got ${hashedContractClasslogs.length}.`,
88
+ }. Got ${tx.contractClassLogFields.length}.`,
72
89
  );
73
- return { result: 'invalid', reason: ['Mismatched number of contract class logs'] };
90
+ return TX_ERROR_CONTRACT_CLASS_LOG_COUNT;
74
91
  }
92
+
93
+ const expectedHashes = await Promise.all(tx.contractClassLogFields.map(l => l.hash()));
75
94
  for (const [i, logHash] of contractClassLogsHashes.entries()) {
76
- const hashedLog = hashedContractClasslogs[i];
77
- if (!logHash.value.equals(hashedLog)) {
78
- if (hashedContractClasslogs.some(l => logHash.value.equals(l))) {
79
- const matchingLogIndex = hashedContractClasslogs.findIndex(l => logHash.value.equals(l));
80
- this.#log.warn(
81
- `Rejecting tx ${Tx.getHash(
82
- tx,
83
- )} because of mismatched contract class logs indices. Expected ${i} from the kernel's log hashes. Got ${matchingLogIndex} in the tx.`,
95
+ const hash = expectedHashes[i];
96
+ if (!logHash.value.equals(hash)) {
97
+ if (expectedHashes.some(h => logHash.value.equals(h))) {
98
+ const matchingLogIndex = expectedHashes.findIndex(l => logHash.value.equals(l));
99
+ this.#log.verbose(
100
+ `Rejecting tx ${tx
101
+ .getTxHash()
102
+ .toString()} because of mismatched contract class logs indices. Expected ${i} from the kernel's log hashes. Got ${matchingLogIndex} in the tx.`,
84
103
  );
85
- return { result: 'invalid', reason: ['Incorrectly sorted contract class logs'] };
104
+ return TX_ERROR_CONTRACT_CLASS_LOG_SORTING;
86
105
  } else {
87
- this.#log.warn(
88
- `Rejecting tx ${Tx.getHash(tx)} because of mismatched contract class logs. Expected hash ${
106
+ this.#log.verbose(
107
+ `Rejecting tx ${tx.getTxHash().toString()} because of mismatched contract class logs. Expected hash ${
89
108
  logHash.value
90
- } from the kernels. Got ${hashedLog} in the tx.`,
109
+ } from the kernels. Got ${hash} in the tx.`,
91
110
  );
92
- return { result: 'invalid', reason: ['Mismatched contract class logs'] };
111
+ return TX_ERROR_CONTRACT_CLASS_LOGS;
93
112
  }
94
113
  }
95
- if (logHash.logHash.length !== tx.contractClassLogs[i].getEmittedLength()) {
96
- this.#log.warn(
97
- `Rejecting tx ${Tx.getHash(tx)} because of mismatched contract class logs length. Expected ${
114
+
115
+ const expectedMinLength = 1 + tx.contractClassLogFields[i].fields.findLastIndex(f => !f.isZero());
116
+ if (logHash.logHash.length < expectedMinLength) {
117
+ this.#log.verbose(
118
+ `Rejecting tx ${tx
119
+ .getTxHash()
120
+ .toString()} because of incorrect contract class log length. Expected the length to be at least ${expectedMinLength}. Got ${
98
121
  logHash.logHash.length
99
- } from the kernel's log hashes. Got ${tx.contractClassLogs[i].getEmittedLength()} in the tx.`,
122
+ }.`,
100
123
  );
101
- return { result: 'invalid', reason: ['Mismatched contract class logs length'] };
124
+ return TX_ERROR_CONTRACT_CLASS_LOG_LENGTH;
102
125
  }
103
126
  }
104
- return { result: 'valid' };
127
+
128
+ return undefined;
105
129
  }
106
130
  }
@@ -1,38 +1,41 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { type AnyTx, Tx, type TxValidationResult, type TxValidator, hasPublicCalls } from '@aztec/stdlib/tx';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import {
3
+ type AnyTx,
4
+ TX_ERROR_DUPLICATE_NULLIFIER_IN_TX,
5
+ TX_ERROR_EXISTING_NULLIFIER,
6
+ Tx,
7
+ type TxValidationResult,
8
+ type TxValidator,
9
+ } from '@aztec/stdlib/tx';
3
10
 
4
11
  export interface NullifierSource {
5
12
  nullifiersExist: (nullifiers: Buffer[]) => Promise<boolean[]>;
6
13
  }
7
14
 
8
15
  export class DoubleSpendTxValidator<T extends AnyTx> implements TxValidator<T> {
9
- #log = createLogger('p2p:tx_validator:tx_double_spend');
16
+ #log: Logger;
10
17
  #nullifierSource: NullifierSource;
11
18
 
12
- constructor(nullifierSource: NullifierSource) {
19
+ constructor(nullifierSource: NullifierSource, bindings?: LoggerBindings) {
13
20
  this.#nullifierSource = nullifierSource;
21
+ this.#log = createLogger('p2p:tx_validator:tx_double_spend', bindings);
14
22
  }
15
23
 
16
24
  async validateTx(tx: T): Promise<TxValidationResult> {
17
- // Don't need to check for duplicate nullifiers if the tx has public calls
18
- // because the AVM will perform merkle insertions as it goes and will fail on
19
- // duplicate nullifier. In fact we CANNOT check here because the nullifiers
20
- // have already been inserted, and so they will exist in nullifierSource.
21
- if (!hasPublicCalls(tx)) {
22
- const nullifiers = tx instanceof Tx ? tx.data.getNonEmptyNullifiers() : tx.txEffect.nullifiers;
25
+ const nullifiers = tx instanceof Tx ? tx.data.getNonEmptyNullifiers() : tx.txEffect.nullifiers;
23
26
 
24
- // Ditch this tx if it has repeated nullifiers
25
- const uniqueNullifiers = new Set(nullifiers);
26
- if (uniqueNullifiers.size !== nullifiers.length) {
27
- this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} for emitting duplicate nullifiers`);
28
- return { result: 'invalid', reason: ['Duplicate nullifier in tx'] };
29
- }
27
+ // Ditch this tx if it has repeated nullifiers
28
+ const uniqueNullifiers = new Set(nullifiers.map(n => n.toBigInt()));
29
+ if (uniqueNullifiers.size !== nullifiers.length) {
30
+ this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for emitting duplicate nullifiers`);
31
+ return { result: 'invalid', reason: [TX_ERROR_DUPLICATE_NULLIFIER_IN_TX] };
32
+ }
30
33
 
31
- if ((await this.#nullifierSource.nullifiersExist(nullifiers.map(n => n.toBuffer()))).some(Boolean)) {
32
- this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} for repeating a nullifier`);
33
- return { result: 'invalid', reason: ['Existing nullifier'] };
34
- }
34
+ if ((await this.#nullifierSource.nullifiersExist(nullifiers.map(n => n.toBuffer()))).some(Boolean)) {
35
+ this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for repeating a nullifier`);
36
+ return { result: 'invalid', reason: [TX_ERROR_EXISTING_NULLIFIER] };
35
37
  }
38
+
36
39
  return { result: 'valid' };
37
40
  }
38
41
  }
@@ -0,0 +1,151 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import type { LoggerBindings } from '@aztec/foundation/log';
4
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
5
+ import { ProtocolContractAddress, protocolContractsHash } from '@aztec/protocol-contracts';
6
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
7
+ import type { GasFees } from '@aztec/stdlib/gas';
8
+ import type {
9
+ AllowedElement,
10
+ ClientProtocolCircuitVerifier,
11
+ WorldStateSynchronizer,
12
+ } from '@aztec/stdlib/interfaces/server';
13
+ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
14
+ import { DatabasePublicStateSource, MerkleTreeId } from '@aztec/stdlib/trees';
15
+ import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
16
+ import type { UInt64 } from '@aztec/stdlib/types';
17
+
18
+ import { AggregateTxValidator } from './aggregate_tx_validator.js';
19
+ import { ArchiveCache } from './archive_cache.js';
20
+ import { BlockHeaderTxValidator } from './block_header_validator.js';
21
+ import { DataTxValidator } from './data_validator.js';
22
+ import { DoubleSpendTxValidator } from './double_spend_validator.js';
23
+ import { GasTxValidator } from './gas_validator.js';
24
+ import { MetadataTxValidator } from './metadata_validator.js';
25
+ import { PhasesTxValidator } from './phases_validator.js';
26
+ import { SizeTxValidator } from './size_validator.js';
27
+ import { TimestampTxValidator } from './timestamp_validator.js';
28
+ import { TxPermittedValidator } from './tx_permitted_validator.js';
29
+ import { TxProofValidator } from './tx_proof_validator.js';
30
+
31
+ export interface MessageValidator {
32
+ validator: {
33
+ validateTx(tx: Tx): Promise<TxValidationResult>;
34
+ };
35
+ severity: PeerErrorSeverity;
36
+ }
37
+
38
+ export function createTxMessageValidators(
39
+ timestamp: UInt64,
40
+ blockNumber: BlockNumber,
41
+ worldStateSynchronizer: WorldStateSynchronizer,
42
+ gasFees: GasFees,
43
+ l1ChainId: number,
44
+ rollupVersion: number,
45
+ protocolContractsHash: Fr,
46
+ contractDataSource: ContractDataSource,
47
+ proofVerifier: ClientProtocolCircuitVerifier,
48
+ txsPermitted: boolean,
49
+ allowedInSetup: AllowedElement[] = [],
50
+ bindings?: LoggerBindings,
51
+ ): Record<string, MessageValidator>[] {
52
+ const merkleTree = worldStateSynchronizer.getCommitted();
53
+
54
+ return [
55
+ {
56
+ txsPermittedValidator: {
57
+ validator: new TxPermittedValidator(txsPermitted, bindings),
58
+ severity: PeerErrorSeverity.MidToleranceError,
59
+ },
60
+ dataValidator: {
61
+ validator: new DataTxValidator(bindings),
62
+ severity: PeerErrorSeverity.HighToleranceError,
63
+ },
64
+ metadataValidator: {
65
+ validator: new MetadataTxValidator(
66
+ {
67
+ l1ChainId: new Fr(l1ChainId),
68
+ rollupVersion: new Fr(rollupVersion),
69
+ protocolContractsHash,
70
+ vkTreeRoot: getVKTreeRoot(),
71
+ },
72
+ bindings,
73
+ ),
74
+ severity: PeerErrorSeverity.HighToleranceError,
75
+ },
76
+ timestampValidator: {
77
+ validator: new TimestampTxValidator<Tx>(
78
+ {
79
+ timestamp,
80
+ blockNumber,
81
+ },
82
+ bindings,
83
+ ),
84
+ severity: PeerErrorSeverity.MidToleranceError,
85
+ },
86
+ doubleSpendValidator: {
87
+ validator: new DoubleSpendTxValidator(
88
+ {
89
+ nullifiersExist: async (nullifiers: Buffer[]) => {
90
+ const merkleTree = worldStateSynchronizer.getCommitted();
91
+ const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
92
+ return indices.map(index => index !== undefined);
93
+ },
94
+ },
95
+ bindings,
96
+ ),
97
+ severity: PeerErrorSeverity.HighToleranceError,
98
+ },
99
+ gasValidator: {
100
+ validator: new GasTxValidator(
101
+ new DatabasePublicStateSource(merkleTree),
102
+ ProtocolContractAddress.FeeJuice,
103
+ gasFees,
104
+ bindings,
105
+ ),
106
+ severity: PeerErrorSeverity.HighToleranceError,
107
+ },
108
+ phasesValidator: {
109
+ validator: new PhasesTxValidator(contractDataSource, allowedInSetup, timestamp, bindings),
110
+ severity: PeerErrorSeverity.MidToleranceError,
111
+ },
112
+ blockHeaderValidator: {
113
+ validator: new BlockHeaderTxValidator(new ArchiveCache(merkleTree), bindings),
114
+ severity: PeerErrorSeverity.HighToleranceError,
115
+ },
116
+ },
117
+ {
118
+ proofValidator: {
119
+ validator: new TxProofValidator(proofVerifier, bindings),
120
+ severity: PeerErrorSeverity.MidToleranceError,
121
+ },
122
+ },
123
+ ];
124
+ }
125
+
126
+ export function createTxReqRespValidator(
127
+ verifier: ClientProtocolCircuitVerifier,
128
+ {
129
+ l1ChainId,
130
+ rollupVersion,
131
+ }: {
132
+ l1ChainId: number;
133
+ rollupVersion: number;
134
+ },
135
+ bindings?: LoggerBindings,
136
+ ): TxValidator {
137
+ return new AggregateTxValidator(
138
+ new MetadataTxValidator(
139
+ {
140
+ l1ChainId: new Fr(l1ChainId),
141
+ rollupVersion: new Fr(rollupVersion),
142
+ protocolContractsHash,
143
+ vkTreeRoot: getVKTreeRoot(),
144
+ },
145
+ bindings,
146
+ ),
147
+ new SizeTxValidator(bindings),
148
+ new DataTxValidator(bindings),
149
+ new TxProofValidator(verifier, bindings),
150
+ );
151
+ }
@@ -0,0 +1,40 @@
1
+ import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
2
+ import { FunctionSelector } from '@aztec/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import { type Tx, TxExecutionPhase } from '@aztec/stdlib/tx';
5
+
6
+ export type FeePayerBalanceDelta = {
7
+ feeLimit: bigint;
8
+ claimAmount: bigint;
9
+ };
10
+
11
+ const increasePublicBalanceSelectorPromise = FunctionSelector.fromSignature('_increase_public_balance((Field),u128)');
12
+
13
+ export function getTxFeeLimit(tx: Tx): bigint {
14
+ return tx.data.constants.txContext.gasSettings.getFeeLimit().toBigInt();
15
+ }
16
+
17
+ export async function getFeePayerClaimAmount(tx: Tx, feeJuiceAddress: AztecAddress): Promise<bigint> {
18
+ const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
19
+ const increasePublicBalanceSelector = await increasePublicBalanceSelectorPromise;
20
+ const feePayer = tx.data.feePayer;
21
+
22
+ const claimFunctionCall = setupFns.find(
23
+ fn =>
24
+ fn.request.contractAddress.equals(feeJuiceAddress) &&
25
+ fn.request.msgSender.equals(feeJuiceAddress) &&
26
+ fn.calldata.length > 2 &&
27
+ fn.functionSelector.equals(increasePublicBalanceSelector) &&
28
+ fn.args[0].equals(feePayer.toField()) &&
29
+ !fn.request.isStaticCall,
30
+ );
31
+
32
+ return claimFunctionCall ? claimFunctionCall.args[1].toBigInt() : 0n;
33
+ }
34
+
35
+ export async function getFeePayerBalanceDelta(tx: Tx, feeJuiceAddress: AztecAddress): Promise<FeePayerBalanceDelta> {
36
+ return {
37
+ feeLimit: getTxFeeLimit(tx),
38
+ claimAmount: await getFeePayerClaimAmount(tx, feeJuiceAddress),
39
+ };
40
+ }