@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c

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 (366) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +18 -3
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +16 -37
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +464 -126
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +21 -14
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +36 -9
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  53. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  54. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  66. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  68. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  69. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/index.js +0 -1
  71. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  72. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/priority.js +6 -1
  74. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  75. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  77. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  80. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +71 -0
  85. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  86. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/index.js +1 -0
  88. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  89. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  90. package/dest/msg_validators/clock_tolerance.js +37 -0
  91. package/dest/msg_validators/index.d.ts +2 -2
  92. package/dest/msg_validators/index.d.ts.map +1 -1
  93. package/dest/msg_validators/index.js +1 -1
  94. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  95. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  97. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  99. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  100. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  102. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  103. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/index.js +3 -0
  105. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  106. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  108. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  109. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  111. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  114. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  117. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  123. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/factory.js +1 -1
  125. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  126. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  127. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  128. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  129. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  131. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  132. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  133. package/dest/msg_validators/tx_validator/index.js +1 -0
  134. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  135. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  139. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  140. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  141. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  142. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  143. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  145. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  147. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  149. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  150. package/dest/services/data_store.d.ts +1 -1
  151. package/dest/services/data_store.d.ts.map +1 -1
  152. package/dest/services/discv5/discV5_service.d.ts +1 -1
  153. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  154. package/dest/services/dummy_service.d.ts +6 -2
  155. package/dest/services/dummy_service.d.ts.map +1 -1
  156. package/dest/services/dummy_service.js +3 -0
  157. package/dest/services/encoding.d.ts +1 -1
  158. package/dest/services/encoding.d.ts.map +1 -1
  159. package/dest/services/encoding.js +7 -6
  160. package/dest/services/gossipsub/scoring.d.ts +1 -1
  161. package/dest/services/index.d.ts +1 -1
  162. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  163. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  164. package/dest/services/libp2p/instrumentation.js +26 -72
  165. package/dest/services/libp2p/libp2p_service.d.ts +41 -80
  166. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  167. package/dest/services/libp2p/libp2p_service.js +899 -175
  168. package/dest/services/peer-manager/interface.d.ts +1 -1
  169. package/dest/services/peer-manager/metrics.d.ts +8 -1
  170. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  171. package/dest/services/peer-manager/metrics.js +24 -16
  172. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  173. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  174. package/dest/services/peer-manager/peer_manager.js +6 -12
  175. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  176. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  177. package/dest/services/peer-manager/peer_scoring.js +37 -2
  178. package/dest/services/reqresp/config.d.ts +1 -1
  179. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  180. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  181. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  182. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  183. package/dest/services/reqresp/constants.d.ts +12 -0
  184. package/dest/services/reqresp/constants.d.ts.map +1 -0
  185. package/dest/services/reqresp/constants.js +7 -0
  186. package/dest/services/reqresp/index.d.ts +1 -1
  187. package/dest/services/reqresp/interface.d.ts +2 -2
  188. package/dest/services/reqresp/interface.d.ts.map +1 -1
  189. package/dest/services/reqresp/interface.js +1 -1
  190. package/dest/services/reqresp/metrics.d.ts +1 -1
  191. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  192. package/dest/services/reqresp/metrics.js +5 -21
  193. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  194. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  195. package/dest/services/reqresp/protocols/auth.js +2 -2
  196. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  197. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  206. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  207. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  208. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  210. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  212. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  213. package/dest/services/reqresp/protocols/status.js +7 -3
  214. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  215. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  217. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  218. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  219. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  220. package/dest/services/reqresp/reqresp.d.ts +1 -41
  221. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  222. package/dest/services/reqresp/reqresp.js +402 -24
  223. package/dest/services/reqresp/status.d.ts +2 -2
  224. package/dest/services/reqresp/status.d.ts.map +1 -1
  225. package/dest/services/service.d.ts +16 -3
  226. package/dest/services/service.d.ts.map +1 -1
  227. package/dest/services/tx_collection/config.d.ts +1 -1
  228. package/dest/services/tx_collection/config.js +1 -1
  229. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  230. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/index.d.ts +1 -1
  232. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  233. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  234. package/dest/services/tx_collection/instrumentation.js +4 -14
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  238. package/dest/services/tx_collection/tx_collection.d.ts +7 -7
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  243. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  244. package/dest/services/tx_provider.d.ts +4 -2
  245. package/dest/services/tx_provider.d.ts.map +1 -1
  246. package/dest/services/tx_provider.js +11 -2
  247. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  248. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  249. package/dest/services/tx_provider_instrumentation.js +13 -13
  250. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  251. package/dest/test-helpers/get-ports.d.ts +1 -1
  252. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  253. package/dest/test-helpers/index.d.ts +1 -1
  254. package/dest/test-helpers/make-enrs.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  256. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  257. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  260. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  261. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  262. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  263. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  264. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  265. package/dest/testbench/p2p_client_testbench_worker.js +39 -22
  266. package/dest/testbench/parse_log_file.d.ts +1 -1
  267. package/dest/testbench/testbench.d.ts +1 -1
  268. package/dest/testbench/worker_client_manager.d.ts +1 -1
  269. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  270. package/dest/testbench/worker_client_manager.js +6 -1
  271. package/dest/types/index.d.ts +1 -1
  272. package/dest/util.d.ts +2 -1
  273. package/dest/util.d.ts.map +1 -1
  274. package/dest/util.js +11 -2
  275. package/dest/versioning.d.ts +1 -1
  276. package/package.json +19 -18
  277. package/src/client/factory.ts +5 -10
  278. package/src/client/interface.ts +20 -2
  279. package/src/client/p2p_client.ts +108 -155
  280. package/src/config.ts +30 -19
  281. package/src/errors/attestation-pool.error.ts +13 -0
  282. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  283. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  284. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  285. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  286. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  287. package/src/mem_pools/instrumentation.ts +47 -10
  288. package/src/mem_pools/interface.ts +2 -4
  289. package/src/mem_pools/tx_pool/README.md +270 -0
  290. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  291. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  292. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  293. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  294. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  295. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  296. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  297. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  298. package/src/mem_pools/tx_pool/index.ts +0 -1
  299. package/src/mem_pools/tx_pool/priority.ts +8 -1
  300. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  301. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  302. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  303. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  304. package/src/msg_validators/attestation_validator/index.ts +1 -0
  305. package/src/msg_validators/clock_tolerance.ts +51 -0
  306. package/src/msg_validators/index.ts +1 -1
  307. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  308. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  309. package/src/msg_validators/proposal_validator/index.ts +3 -0
  310. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  311. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  314. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  315. package/src/msg_validators/tx_validator/factory.ts +3 -2
  316. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  317. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  318. package/src/msg_validators/tx_validator/index.ts +1 -0
  319. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  320. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  321. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  322. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  323. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  324. package/src/services/dummy_service.ts +6 -0
  325. package/src/services/encoding.ts +6 -5
  326. package/src/services/libp2p/instrumentation.ts +26 -71
  327. package/src/services/libp2p/libp2p_service.ts +580 -160
  328. package/src/services/peer-manager/metrics.ts +27 -16
  329. package/src/services/peer-manager/peer_manager.ts +7 -4
  330. package/src/services/peer-manager/peer_scoring.ts +42 -3
  331. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  332. package/src/services/reqresp/constants.ts +14 -0
  333. package/src/services/reqresp/interface.ts +1 -1
  334. package/src/services/reqresp/metrics.ts +7 -23
  335. package/src/services/reqresp/protocols/auth.ts +2 -2
  336. package/src/services/reqresp/protocols/block.ts +3 -2
  337. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  338. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  339. package/src/services/reqresp/protocols/status.ts +16 -12
  340. package/src/services/reqresp/protocols/tx.ts +1 -2
  341. package/src/services/service.ts +19 -4
  342. package/src/services/tx_collection/config.ts +1 -1
  343. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  344. package/src/services/tx_collection/instrumentation.ts +4 -21
  345. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  346. package/src/services/tx_collection/tx_collection.ts +6 -5
  347. package/src/services/tx_provider.ts +19 -3
  348. package/src/services/tx_provider_instrumentation.ts +18 -14
  349. package/src/test-helpers/mock-pubsub.ts +1 -1
  350. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  351. package/src/test-helpers/reqresp-nodes.ts +1 -1
  352. package/src/testbench/p2p_client_testbench_worker.ts +45 -22
  353. package/src/testbench/worker_client_manager.ts +6 -1
  354. package/src/util.ts +12 -2
  355. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  356. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  358. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  359. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  360. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  361. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  362. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  363. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  364. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  365. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  366. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,242 +1,178 @@
1
- import { Secp256k1Signer } from '@aztec/foundation/crypto';
2
- import { Fr } from '@aztec/foundation/fields';
3
- import { BlockProposal as BlockProposalClass, ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayloadEthSignedMessage } from '@aztec/stdlib/p2p';
4
- import { makeL2BlockHeader } from '@aztec/stdlib/testing';
5
- import { TxHash } from '@aztec/stdlib/tx';
6
- import { jest } from '@jest/globals';
7
- import { mock } from 'jest-mock-extended';
8
- import { mockAttestation } from './mocks.js';
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
5
+ import { makeBlockHeader, makeBlockProposal, makeCheckpointHeader, makeCheckpointProposal } from '@aztec/stdlib/testing';
6
+ import { MAX_PROPOSALS_PER_SLOT } from './kv_attestation_pool.js';
7
+ import { mockCheckpointAttestation } from './mocks.js';
9
8
  const NUMBER_OF_SIGNERS_PER_TEST = 4;
10
9
  export function describeAttestationPool(getAttestationPool) {
11
10
  let ap;
12
11
  let signers;
13
- // Check that metrics are recorded correctly
14
- let metricsMock;
15
12
  beforeEach(()=>{
16
13
  ap = getAttestationPool();
17
14
  signers = Array.from({
18
15
  length: NUMBER_OF_SIGNERS_PER_TEST
19
16
  }, ()=>Secp256k1Signer.random());
20
- metricsMock = mock();
21
- // Can i overwrite this like this??
22
- ap.metrics = metricsMock;
23
17
  });
24
- const createAttestationsForSlot = (slotNumber)=>{
25
- const archive = Fr.random();
26
- return signers.map((signer)=>mockAttestation(signer, slotNumber, archive));
18
+ const createCheckpointAttestationsForSlot = (slotNumber, archive)=>{
19
+ const archiveToUse = archive ?? Fr.random();
20
+ return signers.map((signer)=>mockCheckpointAttestation(signer, slotNumber, archiveToUse));
27
21
  };
28
- const mockBlockProposal = (signer, slotNumber, archive = Fr.random())=>{
29
- const header = makeL2BlockHeader(1, 2, slotNumber);
30
- const payload = new ConsensusPayload(header.toCheckpointHeader(), archive, header.state);
31
- const hash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.blockProposal);
32
- const signature = signer.sign(hash);
33
- const txHashes = [
34
- TxHash.random(),
35
- TxHash.random()
36
- ]; // Mock tx hashes
37
- return new BlockProposalClass(payload, signature, txHashes);
22
+ const mockBlockProposalForPool = (signer, slotNumber, archive = Fr.random())=>{
23
+ const header = makeBlockHeader(1, {
24
+ slotNumber: SlotNumber(slotNumber)
25
+ });
26
+ return makeBlockProposal({
27
+ signer,
28
+ blockHeader: header,
29
+ archiveRoot: archive
30
+ });
38
31
  };
39
- // We compare buffers as the objects can have cached values attached to them which are not serialised
40
- // using array containing as the kv store does not respect insertion order
41
- const compareAttestations = (a1, a2)=>{
32
+ // Compare checkpoint attestations buffers
33
+ // Using array containing as the kv store does not respect insertion order
34
+ const compareCheckpointAttestations = (a1, a2)=>{
42
35
  const a1Buffer = a1.map((attestation)=>attestation.toBuffer());
43
36
  const a2Buffer = a2.map((attestation)=>attestation.toBuffer());
44
37
  expect(a1Buffer.length).toBe(a2Buffer.length);
45
38
  expect(a1Buffer).toEqual(expect.arrayContaining(a2Buffer));
46
39
  };
47
- it('should add attestations to pool', async ()=>{
48
- const slotNumber = 420;
49
- const archive = Fr.random();
50
- const attestations = signers.slice(0, -1).map((signer)=>mockAttestation(signer, slotNumber, archive));
51
- await ap.addAttestations(attestations);
52
- const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
53
- expect(retrievedAttestations.length).toBe(attestations.length);
54
- compareAttestations(retrievedAttestations, attestations);
55
- // Check hasAttestation for added attestations
56
- for (const attestation of attestations){
57
- expect(await ap.hasAttestation(attestation)).toBe(true);
58
- }
59
- const retrievedAttestationsForSlot = await ap.getAttestationsForSlot(BigInt(slotNumber));
60
- expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
61
- compareAttestations(retrievedAttestationsForSlot, attestations);
62
- // Add another one
63
- const newAttestation = mockAttestation(signers[NUMBER_OF_SIGNERS_PER_TEST - 1], slotNumber, archive);
64
- await ap.addAttestations([
65
- newAttestation
66
- ]);
67
- const retrievedAttestationsAfterAdd = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
68
- expect(retrievedAttestationsAfterAdd.length).toBe(attestations.length + 1);
69
- compareAttestations(retrievedAttestationsAfterAdd, [
70
- ...attestations,
71
- newAttestation
72
- ]);
73
- expect(await ap.hasAttestation(newAttestation)).toBe(true);
74
- const retrievedAttestationsForSlotAfterAdd = await ap.getAttestationsForSlot(BigInt(slotNumber));
75
- expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
76
- compareAttestations(retrievedAttestationsForSlotAfterAdd, [
77
- ...attestations,
78
- newAttestation
79
- ]);
80
- // Delete by slot
81
- await ap.deleteAttestationsForSlot(BigInt(slotNumber));
82
- const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
83
- expect(retreivedAttestationsAfterDelete.length).toBe(0);
84
- // Check hasAttestation after deletion
85
- for (const attestation of attestations){
86
- expect(await ap.hasAttestation(attestation)).toBe(false);
87
- }
88
- expect(await ap.hasAttestation(newAttestation)).toBe(false);
89
- });
90
- it('should handle duplicate proposals in a slot', async ()=>{
91
- const slotNumber = 420;
92
- const archive = Fr.random();
93
- // Use the same signer for all attestations
94
- const attestations = [];
95
- const signer = signers[0];
96
- for(let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++){
97
- attestations.push(mockAttestation(signer, slotNumber, archive));
98
- }
99
- // Add them to store and check we end up with only one
100
- await ap.addAttestations(attestations);
101
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
102
- expect(retreivedAttestations.length).toBe(1);
103
- expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
104
- expect(retreivedAttestations[0].getSender()?.toString()).toEqual(signer.address.toString());
105
- // Try adding them on another operation and check they are still not duplicated
106
- await ap.addAttestations([
107
- attestations[0]
108
- ]);
109
- expect(await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString())).toHaveLength(1);
110
- });
111
- it('should store attestations by differing slot', async ()=>{
112
- const slotNumbers = [
113
- 1,
114
- 2,
115
- 3,
116
- 4
117
- ];
118
- const attestations = signers.map((signer, i)=>mockAttestation(signer, slotNumbers[i]));
119
- await ap.addAttestations(attestations);
120
- for (const attestation of attestations){
121
- const slot = attestation.payload.header.slotNumber;
122
- const archive = attestation.archive.toString();
123
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(slot.toBigInt(), archive);
124
- expect(retreivedAttestations.length).toBe(1);
125
- expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
126
- expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
127
- }
128
- });
129
- it('should store attestations by differing slot and archive', async ()=>{
130
- const slotNumbers = [
131
- 1,
132
- 1,
133
- 2,
134
- 3
135
- ];
136
- const archives = [
137
- Fr.random(),
138
- Fr.random(),
139
- Fr.random(),
140
- Fr.random()
141
- ];
142
- const attestations = signers.map((signer, i)=>mockAttestation(signer, slotNumbers[i], archives[i]));
143
- await ap.addAttestations(attestations);
144
- for (const attestation of attestations){
145
- const slot = attestation.payload.header.slotNumber;
146
- const proposalId = attestation.archive.toString();
147
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(slot.toBigInt(), proposalId);
40
+ describe('CheckpointAttestation', ()=>{
41
+ it('should add attestations to pool', async ()=>{
42
+ const slotNumber = 420;
43
+ const archive = Fr.random();
44
+ const attestations = signers.slice(0, -1).map((signer)=>mockCheckpointAttestation(signer, slotNumber, archive));
45
+ await ap.addCheckpointAttestations(attestations);
46
+ const retrievedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString());
47
+ expect(retrievedAttestations.length).toBe(attestations.length);
48
+ compareCheckpointAttestations(retrievedAttestations, attestations);
49
+ // Check hasCheckpointAttestation for added attestations
50
+ for (const attestation of attestations){
51
+ expect(await ap.hasCheckpointAttestation(attestation)).toBe(true);
52
+ }
53
+ const retrievedAttestationsForSlot = await ap.getCheckpointAttestationsForSlot(SlotNumber(slotNumber));
54
+ expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
55
+ compareCheckpointAttestations(retrievedAttestationsForSlot, attestations);
56
+ // Add another one
57
+ const newAttestation = mockCheckpointAttestation(signers[NUMBER_OF_SIGNERS_PER_TEST - 1], slotNumber, archive);
58
+ await ap.addCheckpointAttestations([
59
+ newAttestation
60
+ ]);
61
+ const retrievedAttestationsAfterAdd = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString());
62
+ expect(retrievedAttestationsAfterAdd.length).toBe(attestations.length + 1);
63
+ compareCheckpointAttestations(retrievedAttestationsAfterAdd, [
64
+ ...attestations,
65
+ newAttestation
66
+ ]);
67
+ expect(await ap.hasCheckpointAttestation(newAttestation)).toBe(true);
68
+ const retrievedAttestationsForSlotAfterAdd = await ap.getCheckpointAttestationsForSlot(SlotNumber(slotNumber));
69
+ expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
70
+ compareCheckpointAttestations(retrievedAttestationsForSlotAfterAdd, [
71
+ ...attestations,
72
+ newAttestation
73
+ ]);
74
+ // Delete by slot
75
+ await ap.deleteCheckpointAttestationsOlderThan(SlotNumber(slotNumber + 1));
76
+ const retreivedAttestationsAfterDelete = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString());
77
+ expect(retreivedAttestationsAfterDelete.length).toBe(0);
78
+ // Check hasCheckpointAttestation after deletion
79
+ for (const attestation of attestations){
80
+ expect(await ap.hasCheckpointAttestation(attestation)).toBe(false);
81
+ }
82
+ expect(await ap.hasCheckpointAttestation(newAttestation)).toBe(false);
83
+ });
84
+ it('should handle duplicate proposals in a slot', async ()=>{
85
+ const slotNumber = 420;
86
+ const archive = Fr.random();
87
+ const header = CheckpointHeader.random({
88
+ slotNumber: SlotNumber(slotNumber)
89
+ });
90
+ // Use the same signer and header for all attestations
91
+ const attestations = [];
92
+ const signer = signers[0];
93
+ for(let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++){
94
+ attestations.push(mockCheckpointAttestation(signer, slotNumber, archive, header));
95
+ }
96
+ // Add them to store and check we end up with only one
97
+ await ap.addCheckpointAttestations(attestations);
98
+ const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString());
148
99
  expect(retreivedAttestations.length).toBe(1);
149
- expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
150
- expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
151
- }
152
- });
153
- it('should delete attestations', async ()=>{
154
- const slotNumber = 420;
155
- const archive = Fr.random();
156
- const attestations = signers.map((signer)=>mockAttestation(signer, slotNumber, archive));
157
- const proposalId = attestations[0].archive.toString();
158
- await ap.addAttestations(attestations);
159
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
160
- expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
161
- compareAttestations(retreivedAttestations, attestations);
162
- // Check hasAttestation before deletion
163
- for (const attestation of attestations){
164
- expect(await ap.hasAttestation(attestation)).toBe(true);
165
- }
166
- await ap.deleteAttestations(attestations);
167
- const gottenAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
168
- expect(gottenAfterDelete.length).toBe(0);
169
- // Check hasAttestation after deletion
170
- for (const attestation of attestations){
171
- expect(await ap.hasAttestation(attestation)).toBe(false);
172
- }
173
- });
174
- it('should blanket delete attestations per slot', async ()=>{
175
- const slotNumber = 420;
176
- const archive = Fr.random();
177
- const attestations = signers.map((signer)=>mockAttestation(signer, slotNumber, archive));
178
- const proposalId = attestations[0].archive.toString();
179
- await ap.addAttestations(attestations);
180
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
181
- expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
182
- compareAttestations(retreivedAttestations, attestations);
183
- await ap.deleteAttestationsForSlot(BigInt(slotNumber));
184
- const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
185
- expect(retreivedAttestationsAfterDelete.length).toBe(0);
186
- });
187
- it('should blanket delete attestations per slot and proposal', async ()=>{
188
- const slotNumber = 420;
189
- const archive = Fr.random();
190
- const attestations = signers.map((signer)=>mockAttestation(signer, slotNumber, archive));
191
- const proposalId = attestations[0].archive.toString();
192
- // Add another set of attestations with a different proposalId, yet the same slot
193
- const archive2 = Fr.random();
194
- const attestations2 = signers.map((signer)=>mockAttestation(signer, slotNumber, archive2));
195
- const proposalId2 = attestations2[0].archive.toString();
196
- await ap.addAttestations(attestations);
197
- await ap.addAttestations(attestations2);
198
- const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
199
- expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
200
- compareAttestations(retreivedAttestations, attestations);
201
- await ap.deleteAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
202
- const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
203
- expect(retreivedAttestationsAfterDelete.length).toBe(0);
204
- const retreivedAttestationsAfterDeleteForOtherProposal = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId2);
205
- expect(retreivedAttestationsAfterDeleteForOtherProposal.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
206
- compareAttestations(retreivedAttestationsAfterDeleteForOtherProposal, attestations2);
207
- });
208
- it('should delete attestations older than a given slot', async ()=>{
209
- const slotNumbers = [
210
- 1,
211
- 2,
212
- 3,
213
- 69,
214
- 72,
215
- 74,
216
- 88,
217
- 420
218
- ];
219
- const attestations = (await Promise.all(slotNumbers.map((slotNumber)=>createAttestationsForSlot(slotNumber)))).flat();
220
- const proposalId = attestations[0].archive.toString();
221
- await ap.addAttestations(attestations);
222
- const attestationsForSlot1 = await ap.getAttestationsForSlotAndProposal(BigInt(1), proposalId);
223
- expect(attestationsForSlot1.length).toBe(signers.length);
224
- const deleteAttestationsSpy = jest.spyOn(ap, 'deleteAttestationsForSlot');
225
- await ap.deleteAttestationsOlderThan(BigInt(73));
226
- const attestationsForSlot1AfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(1), proposalId);
227
- expect(attestationsForSlot1AfterDelete.length).toBe(0);
228
- expect(deleteAttestationsSpy).toHaveBeenCalledTimes(5);
229
- expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(1));
230
- expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(2));
231
- expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(3));
232
- expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(69));
233
- expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(72));
100
+ expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
101
+ expect(retreivedAttestations[0].getSender()?.toString()).toEqual(signer.address.toString());
102
+ // Try adding them on another operation and check they are still not duplicated
103
+ await ap.addCheckpointAttestations([
104
+ attestations[0]
105
+ ]);
106
+ expect(await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString())).toHaveLength(1);
107
+ });
108
+ it('should store attestations by differing slot', async ()=>{
109
+ const slotNumbers = [
110
+ 1,
111
+ 2,
112
+ 3,
113
+ 4
114
+ ];
115
+ const attestations = signers.map((signer, i)=>mockCheckpointAttestation(signer, slotNumbers[i]));
116
+ await ap.addCheckpointAttestations(attestations);
117
+ for (const attestation of attestations){
118
+ const slot = attestation.payload.header.slotNumber;
119
+ const archive = attestation.archive.toString();
120
+ const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(slot, archive);
121
+ expect(retreivedAttestations.length).toBe(1);
122
+ expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
123
+ expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
124
+ }
125
+ });
126
+ it('should store attestations by differing slot and archive', async ()=>{
127
+ const slotNumbers = [
128
+ 1,
129
+ 1,
130
+ 2,
131
+ 3
132
+ ];
133
+ const archives = [
134
+ Fr.random(),
135
+ Fr.random(),
136
+ Fr.random(),
137
+ Fr.random()
138
+ ];
139
+ const attestations = signers.map((signer, i)=>mockCheckpointAttestation(signer, slotNumbers[i], archives[i]));
140
+ await ap.addCheckpointAttestations(attestations);
141
+ for (const attestation of attestations){
142
+ const slot = attestation.payload.header.slotNumber;
143
+ const proposalId = attestation.archive.toString();
144
+ const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(slot, proposalId);
145
+ expect(retreivedAttestations.length).toBe(1);
146
+ expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
147
+ expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
148
+ }
149
+ });
150
+ it('should delete attestations older than a given slot', async ()=>{
151
+ const slotNumbers = [
152
+ 1,
153
+ 2,
154
+ 3,
155
+ 69,
156
+ 72,
157
+ 74,
158
+ 88,
159
+ 420
160
+ ];
161
+ const attestations = (await Promise.all(slotNumbers.map((slotNumber)=>createCheckpointAttestationsForSlot(slotNumber)))).flat();
162
+ const proposalId = attestations[0].archive.toString();
163
+ await ap.addCheckpointAttestations(attestations);
164
+ const attestationsForSlot1 = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(1), proposalId);
165
+ expect(attestationsForSlot1.length).toBe(signers.length);
166
+ await ap.deleteCheckpointAttestationsOlderThan(SlotNumber(73));
167
+ const attestationsForSlot1AfterDelete = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(1), proposalId);
168
+ expect(attestationsForSlot1AfterDelete.length).toBe(0);
169
+ });
234
170
  });
235
171
  describe('BlockProposal in attestation pool', ()=>{
236
172
  it('should add and retrieve block proposal', async ()=>{
237
173
  const slotNumber = 420;
238
174
  const archive = Fr.random();
239
- const proposal = mockBlockProposal(signers[0], slotNumber, archive);
175
+ const proposal = await mockBlockProposalForPool(signers[0], slotNumber, archive);
240
176
  const proposalId = proposal.archive.toString();
241
177
  await ap.addBlockProposal(proposal);
242
178
  const retrievedProposal = await ap.getBlockProposal(proposalId);
@@ -256,11 +192,11 @@ export function describeAttestationPool(getAttestationPool) {
256
192
  it('should update block proposal if added twice with same id', async ()=>{
257
193
  const slotNumber = 420;
258
194
  const archive = Fr.random();
259
- const proposal1 = mockBlockProposal(signers[0], slotNumber, archive);
195
+ const proposal1 = await mockBlockProposalForPool(signers[0], slotNumber, archive);
260
196
  const proposalId = proposal1.archive.toString();
261
197
  await ap.addBlockProposal(proposal1);
262
198
  // Create a new proposal with same archive but different signer
263
- const proposal2 = mockBlockProposal(signers[1], slotNumber, archive);
199
+ const proposal2 = await mockBlockProposalForPool(signers[1], slotNumber, archive);
264
200
  await ap.addBlockProposal(proposal2);
265
201
  const retrievedProposal = await ap.getBlockProposal(proposalId);
266
202
  expect(retrievedProposal).toBeDefined();
@@ -270,8 +206,8 @@ export function describeAttestationPool(getAttestationPool) {
270
206
  });
271
207
  it('should handle block proposals with different slots and same archive', async ()=>{
272
208
  const archive = Fr.random();
273
- const proposal1 = mockBlockProposal(signers[0], 100, archive);
274
- const proposal2 = mockBlockProposal(signers[1], 200, archive);
209
+ const proposal1 = await mockBlockProposalForPool(signers[0], 100, archive);
210
+ const proposal2 = await mockBlockProposalForPool(signers[1], 200, archive);
275
211
  const proposalId = archive.toString();
276
212
  await ap.addBlockProposal(proposal1);
277
213
  await ap.addBlockProposal(proposal2);
@@ -279,67 +215,106 @@ export function describeAttestationPool(getAttestationPool) {
279
215
  const retrievedProposal = await ap.getBlockProposal(proposalId);
280
216
  expect(retrievedProposal).toBeDefined();
281
217
  expect(retrievedProposal.toBuffer()).toEqual(proposal2.toBuffer());
282
- expect(retrievedProposal.slotNumber.toBigInt()).toBe(BigInt(200));
218
+ expect(retrievedProposal.slotNumber).toBe(SlotNumber(200));
283
219
  });
284
- it('should delete block proposal when deleting attestations for slot and proposal', async ()=>{
220
+ });
221
+ describe('CheckpointProposal in attestation pool', ()=>{
222
+ const mockCheckpointProposalForPool = (signer, slotNumber, archive = Fr.random())=>{
223
+ const checkpointHeader = makeCheckpointHeader(1, {
224
+ slotNumber: SlotNumber(slotNumber)
225
+ });
226
+ const blockHeader = makeBlockHeader(1);
227
+ return makeCheckpointProposal({
228
+ signer,
229
+ checkpointHeader,
230
+ archiveRoot: archive,
231
+ lastBlock: {
232
+ blockHeader
233
+ }
234
+ });
235
+ };
236
+ it('should add and retrieve checkpoint proposal as core (without lastBlock)', async ()=>{
285
237
  const slotNumber = 420;
286
238
  const archive = Fr.random();
287
- const proposal = mockBlockProposal(signers[0], slotNumber, archive);
239
+ const proposal = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
288
240
  const proposalId = proposal.archive.toString();
289
- // Add proposal and some attestations
290
- await ap.addBlockProposal(proposal);
291
- const attestations = signers.map((signer)=>mockAttestation(signer, slotNumber, archive));
292
- await ap.addAttestations(attestations);
293
- // Verify proposal exists
294
- let retrievedProposal = await ap.getBlockProposal(proposalId);
241
+ await ap.addCheckpointProposal(proposal);
242
+ const retrievedProposal = await ap.getCheckpointProposal(proposalId);
295
243
  expect(retrievedProposal).toBeDefined();
296
- expect(await ap.hasBlockProposal(proposalId)).toBe(true);
297
- // Delete attestations for slot and proposal
298
- await ap.deleteAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
299
- // Proposal should be deleted
300
- retrievedProposal = await ap.getBlockProposal(proposalId);
301
- expect(retrievedProposal).toBeUndefined();
302
- expect(await ap.hasBlockProposal(proposalId)).toBe(false);
244
+ // Should return core version (without lastBlock)
245
+ expect(retrievedProposal.toBuffer()).toEqual(proposal.toCore().toBuffer());
246
+ // Check hasCheckpointProposal with both id and object
247
+ expect(await ap.hasCheckpointProposal(proposalId)).toBe(true);
248
+ expect(await ap.hasCheckpointProposal(proposal)).toBe(true);
303
249
  });
304
- it('should delete block proposal when deleting attestations for slot', async ()=>{
250
+ it('should extract and store block proposal when adding checkpoint proposal with lastBlock', async ()=>{
305
251
  const slotNumber = 420;
306
252
  const archive = Fr.random();
307
- const proposal = mockBlockProposal(signers[0], slotNumber, archive);
253
+ const proposal = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
308
254
  const proposalId = proposal.archive.toString();
309
- // Add proposal
310
- await ap.addBlockProposal(proposal);
311
- // Verify proposal exists
312
- let retrievedProposal = await ap.getBlockProposal(proposalId);
313
- expect(retrievedProposal).toBeDefined();
314
- expect(await ap.hasBlockProposal(proposal)).toBe(true);
315
- // Delete attestations for slot
316
- await ap.deleteAttestationsForSlot(BigInt(slotNumber));
317
- // Proposal should be deleted
318
- retrievedProposal = await ap.getBlockProposal(proposalId);
319
- expect(retrievedProposal).toBeUndefined();
320
- expect(await ap.hasBlockProposal(proposal)).toBe(false);
255
+ // Verify the proposal has a lastBlock
256
+ const expectedBlockProposal = proposal.getBlockProposal();
257
+ expect(expectedBlockProposal).toBeDefined();
258
+ await ap.addCheckpointProposal(proposal);
259
+ // The block proposal should be stored separately and retrievable
260
+ const retrievedBlockProposal = await ap.getBlockProposal(proposalId);
261
+ expect(retrievedBlockProposal).toBeDefined();
262
+ expect(retrievedBlockProposal.archive.toString()).toBe(archive.toString());
263
+ expect(retrievedBlockProposal.blockHeader.toBuffer()).toEqual(expectedBlockProposal.blockHeader.toBuffer());
321
264
  });
322
- it('should be able to fetch both block proposal and attestations', async ()=>{
265
+ it('should not store block proposal when checkpoint proposal has no lastBlock', async ()=>{
323
266
  const slotNumber = 420;
324
267
  const archive = Fr.random();
325
- const proposal = mockBlockProposal(signers[0], slotNumber, archive);
268
+ const checkpointHeader = makeCheckpointHeader(1, {
269
+ slotNumber: SlotNumber(slotNumber)
270
+ });
271
+ // Create a checkpoint proposal WITHOUT lastBlock
272
+ const proposal = await makeCheckpointProposal({
273
+ signer: signers[0],
274
+ checkpointHeader,
275
+ archiveRoot: archive
276
+ });
326
277
  const proposalId = proposal.archive.toString();
327
- // Add proposal first
328
- await ap.addBlockProposal(proposal);
329
- // Add attestations for the same proposal
330
- const attestations = signers.slice(1).map((signer)=>mockAttestation(signer, slotNumber, archive));
331
- await ap.addAttestations(attestations);
332
- // Retrieve both proposal and attestations
333
- const retrievedProposal = await ap.getBlockProposal(proposalId);
334
- const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
278
+ await ap.addCheckpointProposal(proposal);
279
+ // The checkpoint proposal should be stored
280
+ const retrievedCheckpointProposal = await ap.getCheckpointProposal(proposalId);
281
+ expect(retrievedCheckpointProposal).toBeDefined();
282
+ // But no block proposal should be stored (archive key won't have a block proposal)
283
+ const retrievedBlockProposal = await ap.getBlockProposal(proposalId);
284
+ expect(retrievedBlockProposal).toBeUndefined();
285
+ });
286
+ it('should return undefined for non-existent checkpoint proposal', async ()=>{
287
+ const nonExistentId = Fr.random().toString();
288
+ const retrievedProposal = await ap.getCheckpointProposal(nonExistentId);
289
+ expect(retrievedProposal).toBeUndefined();
290
+ // Check hasCheckpointProposal returns false for non-existent proposal
291
+ expect(await ap.hasCheckpointProposal(nonExistentId)).toBe(false);
292
+ });
293
+ it('should update checkpoint proposal if added twice with same id', async ()=>{
294
+ const slotNumber = 420;
295
+ const archive = Fr.random();
296
+ const proposal1 = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
297
+ const proposalId = proposal1.archive.toString();
298
+ await ap.addCheckpointProposal(proposal1);
299
+ // Create a new proposal with same archive but different signer
300
+ const proposal2 = await mockCheckpointProposalForPool(signers[1], slotNumber, archive);
301
+ await ap.addCheckpointProposal(proposal2);
302
+ const retrievedProposal = await ap.getCheckpointProposal(proposalId);
335
303
  expect(retrievedProposal).toBeDefined();
336
- expect(retrievedProposal).toEqual(proposal);
337
- expect(await ap.hasBlockProposal(proposalId)).toBe(true);
338
- compareAttestations(retrievedAttestations, attestations);
339
- // Check hasAttestation for all attestations
340
- for (const attestation of attestations){
341
- expect(await ap.hasAttestation(attestation)).toBe(true);
304
+ // Should have the second proposal (as core)
305
+ expect(retrievedProposal.toBuffer()).toEqual(proposal2.toCore().toBuffer());
306
+ expect(retrievedProposal.getSender()?.toString()).toBe(signers[1].address.toString());
307
+ });
308
+ it('should throw ProposalSlotCapExceededError when exceeding capacity', async ()=>{
309
+ const slotNumber = 420;
310
+ // Add MAX_PROPOSALS_PER_SLOT proposals
311
+ for(let i = 0; i < MAX_PROPOSALS_PER_SLOT; i++){
312
+ const proposal = await mockCheckpointProposalForPool(signers[i % NUMBER_OF_SIGNERS_PER_TEST], slotNumber);
313
+ await ap.addCheckpointProposal(proposal);
342
314
  }
315
+ // The next proposal should throw
316
+ const extraProposal = await mockCheckpointProposalForPool(signers[0], slotNumber);
317
+ await expect(ap.addCheckpointProposal(extraProposal)).rejects.toThrow('Maximum checkpoint proposals per slot');
343
318
  });
344
319
  });
345
320
  }
@@ -1,3 +1,3 @@
1
1
  export * from './attestation_pool.js';
2
2
  export * from './memory_attestation_pool.js';
3
- //# sourceMappingURL=index.d.ts.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsOEJBQThCLENBQUMifQ==