@aztec/p2p 0.0.1-commit.fce3e4f → 0.0.1-commit.fffb133c

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 (282) hide show
  1. package/dest/client/factory.d.ts +2 -2
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +2 -3
  4. package/dest/client/interface.d.ts +18 -5
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +16 -19
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +460 -127
  9. package/dest/config.d.ts +4 -7
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +10 -13
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  13. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  15. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  16. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
  17. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  18. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  19. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
  20. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  21. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  23. package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
  24. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  26. package/dest/mem_pools/instrumentation.d.ts +7 -1
  27. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  28. package/dest/mem_pools/instrumentation.js +30 -12
  29. package/dest/mem_pools/interface.d.ts +3 -4
  30. package/dest/mem_pools/interface.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +37 -27
  32. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  34. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  35. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  36. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  37. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  38. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  39. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  40. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  41. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  42. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  43. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  44. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  46. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  47. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  49. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  50. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  52. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  53. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  55. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  56. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool/index.js +0 -1
  58. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  59. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/priority.js +6 -1
  61. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  62. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  66. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
  69. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -14
  72. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  73. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  74. package/dest/msg_validators/clock_tolerance.js +37 -0
  75. package/dest/msg_validators/index.d.ts +2 -2
  76. package/dest/msg_validators/index.d.ts.map +1 -1
  77. package/dest/msg_validators/index.js +1 -1
  78. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  79. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  80. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  81. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  82. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  83. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  84. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  85. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  86. package/dest/msg_validators/proposal_validator/index.js +3 -0
  87. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  88. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  90. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  91. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  92. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  93. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  94. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  96. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  98. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  99. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  100. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  101. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/factory.js +1 -1
  103. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  104. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  105. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  106. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  107. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  109. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  110. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  111. package/dest/msg_validators/tx_validator/index.js +1 -0
  112. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  113. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  115. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  117. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  118. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  119. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  120. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  121. package/dest/services/dummy_service.d.ts +6 -2
  122. package/dest/services/dummy_service.d.ts.map +1 -1
  123. package/dest/services/dummy_service.js +3 -0
  124. package/dest/services/encoding.d.ts +1 -1
  125. package/dest/services/encoding.d.ts.map +1 -1
  126. package/dest/services/encoding.js +7 -6
  127. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  128. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  129. package/dest/services/libp2p/instrumentation.js +20 -73
  130. package/dest/services/libp2p/libp2p_service.d.ts +31 -14
  131. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  132. package/dest/services/libp2p/libp2p_service.js +722 -168
  133. package/dest/services/peer-manager/metrics.d.ts +6 -1
  134. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  135. package/dest/services/peer-manager/metrics.js +18 -21
  136. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  137. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  138. package/dest/services/peer-manager/peer_manager.js +4 -12
  139. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  140. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  141. package/dest/services/peer-manager/peer_scoring.js +2 -5
  142. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
  143. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  144. package/dest/services/reqresp/constants.d.ts +12 -0
  145. package/dest/services/reqresp/constants.d.ts.map +1 -0
  146. package/dest/services/reqresp/constants.js +7 -0
  147. package/dest/services/reqresp/interface.d.ts +2 -2
  148. package/dest/services/reqresp/interface.d.ts.map +1 -1
  149. package/dest/services/reqresp/interface.js +1 -1
  150. package/dest/services/reqresp/metrics.d.ts +1 -1
  151. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  152. package/dest/services/reqresp/metrics.js +5 -21
  153. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  154. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  155. package/dest/services/reqresp/protocols/auth.js +2 -2
  156. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  157. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  158. package/dest/services/reqresp/protocols/block.js +3 -2
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  161. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +2 -2
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  165. package/dest/services/reqresp/protocols/status.d.ts +5 -4
  166. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  167. package/dest/services/reqresp/protocols/status.js +7 -3
  168. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  169. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  170. package/dest/services/reqresp/reqresp.js +402 -24
  171. package/dest/services/service.d.ts +16 -3
  172. package/dest/services/service.d.ts.map +1 -1
  173. package/dest/services/tx_collection/config.js +1 -1
  174. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -3
  175. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  176. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  177. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  178. package/dest/services/tx_collection/instrumentation.js +4 -14
  179. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -3
  180. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  181. package/dest/services/tx_collection/tx_collection.d.ts +7 -6
  182. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  183. package/dest/services/tx_provider.d.ts +4 -2
  184. package/dest/services/tx_provider.d.ts.map +1 -1
  185. package/dest/services/tx_provider.js +11 -2
  186. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  187. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  188. package/dest/services/tx_provider_instrumentation.js +13 -13
  189. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  190. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  191. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  192. package/dest/testbench/p2p_client_testbench_worker.js +31 -17
  193. package/dest/testbench/worker_client_manager.d.ts +1 -1
  194. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  195. package/dest/testbench/worker_client_manager.js +6 -1
  196. package/package.json +18 -18
  197. package/src/client/factory.ts +5 -10
  198. package/src/client/interface.ts +19 -4
  199. package/src/client/p2p_client.ts +101 -154
  200. package/src/config.ts +12 -18
  201. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  202. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  203. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  204. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  205. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  206. package/src/mem_pools/instrumentation.ts +38 -14
  207. package/src/mem_pools/interface.ts +2 -4
  208. package/src/mem_pools/tx_pool/README.md +270 -0
  209. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  210. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  211. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  212. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  213. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  214. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  215. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  216. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  217. package/src/mem_pools/tx_pool/index.ts +0 -1
  218. package/src/mem_pools/tx_pool/priority.ts +8 -1
  219. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  220. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  221. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  222. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +13 -16
  223. package/src/msg_validators/clock_tolerance.ts +51 -0
  224. package/src/msg_validators/index.ts +1 -1
  225. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  226. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  227. package/src/msg_validators/proposal_validator/index.ts +3 -0
  228. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  229. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  230. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  231. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -2
  232. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  233. package/src/msg_validators/tx_validator/factory.ts +3 -2
  234. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  235. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  236. package/src/msg_validators/tx_validator/index.ts +1 -0
  237. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  238. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  239. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  240. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  241. package/src/services/dummy_service.ts +6 -0
  242. package/src/services/encoding.ts +6 -5
  243. package/src/services/libp2p/instrumentation.ts +19 -73
  244. package/src/services/libp2p/libp2p_service.ts +369 -138
  245. package/src/services/peer-manager/metrics.ts +22 -21
  246. package/src/services/peer-manager/peer_manager.ts +5 -4
  247. package/src/services/peer-manager/peer_scoring.ts +1 -5
  248. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  249. package/src/services/reqresp/constants.ts +14 -0
  250. package/src/services/reqresp/interface.ts +1 -1
  251. package/src/services/reqresp/metrics.ts +7 -23
  252. package/src/services/reqresp/protocols/auth.ts +2 -2
  253. package/src/services/reqresp/protocols/block.ts +3 -2
  254. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  255. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  256. package/src/services/reqresp/protocols/status.ts +16 -12
  257. package/src/services/reqresp/protocols/tx.ts +1 -2
  258. package/src/services/service.ts +19 -4
  259. package/src/services/tx_collection/config.ts +1 -1
  260. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  261. package/src/services/tx_collection/instrumentation.ts +4 -21
  262. package/src/services/tx_collection/slow_tx_collection.ts +3 -3
  263. package/src/services/tx_collection/tx_collection.ts +6 -5
  264. package/src/services/tx_provider.ts +19 -3
  265. package/src/services/tx_provider_instrumentation.ts +18 -14
  266. package/src/test-helpers/mock-pubsub.ts +1 -1
  267. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  268. package/src/test-helpers/reqresp-nodes.ts +1 -1
  269. package/src/testbench/p2p_client_testbench_worker.ts +42 -22
  270. package/src/testbench/worker_client_manager.ts +6 -1
  271. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  272. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  273. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  274. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  275. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  276. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  277. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  278. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  279. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  280. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  281. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  282. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,4 +1,4 @@
1
- import { Metrics, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
1
+ import { type Histogram, Metrics, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
2
2
 
3
3
  export class TxProviderInstrumentation {
4
4
  private txFromProposalCount: UpDownCounter;
@@ -6,24 +6,23 @@ export class TxProviderInstrumentation {
6
6
  private txFromP2PCount: UpDownCounter;
7
7
  private missingTxsCount: UpDownCounter;
8
8
 
9
+ private fractionOfTxsRequestedFromP2P: Histogram;
10
+ private txsRequestDelay: Histogram;
11
+
9
12
  constructor(client: TelemetryClient, name: string) {
10
13
  const meter = client.getMeter(name);
11
14
 
12
- this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT, {
13
- description: 'The number of txs taken from block proposals',
14
- });
15
+ this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT);
16
+
17
+ this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT);
18
+
19
+ this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT);
15
20
 
16
- this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT, {
17
- description: 'The number of txs taken from the local mempool',
18
- });
21
+ this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT);
19
22
 
20
- this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT, {
21
- description: 'The number of txs taken from the p2p network',
22
- });
23
+ this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION);
23
24
 
24
- this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT, {
25
- description: 'The number of txs not found anywhere',
26
- });
25
+ this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY);
27
26
  }
28
27
 
29
28
  incTxsFromProposals(count: number) {
@@ -34,8 +33,13 @@ export class TxProviderInstrumentation {
34
33
  this.txFromMempoolCount.add(count);
35
34
  }
36
35
 
37
- incTxsFromP2P(count: number) {
36
+ incTxsFromP2P(count: number, total: number) {
38
37
  this.txFromP2PCount.add(count);
38
+ this.fractionOfTxsRequestedFromP2P.record(count / total);
39
+ }
40
+
41
+ recordTxsRequestDelay(delay: number) {
42
+ this.txsRequestDelay.record(delay);
39
43
  }
40
44
 
41
45
  incMissingTxs(count: number) {
@@ -39,7 +39,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
39
39
  peerId: PeerId,
40
40
  deps: {
41
41
  packageVersion: string;
42
- mempools: MemPools<T>;
42
+ mempools: MemPools;
43
43
  l2BlockSource: L2BlockSource & ContractDataSource;
44
44
  epochCache: EpochCacheInterface;
45
45
  proofVerifier: ClientProtocolCircuitVerifier;
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
3
  import { protocolContractsHash } from '@aztec/protocol-contracts';
4
4
  import { mockTx } from '@aztec/stdlib/testing';
@@ -112,7 +112,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
112
112
  archiver: L2BlockSource & ContractDataSource,
113
113
  worldStateSynchronizer: WorldStateSynchronizer,
114
114
  epochCache: EpochCache,
115
- mempools: MemPools<T>,
115
+ mempools: MemPools,
116
116
  telemetry: TelemetryClient,
117
117
  port: number = 0,
118
118
  peerId?: PeerId,
@@ -6,7 +6,7 @@
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
8
  import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
9
- import { EthAddress } from '@aztec/foundation/eth-address';
9
+ import { SecretValue } from '@aztec/foundation/config';
10
10
  import { createLogger } from '@aztec/foundation/log';
11
11
  import { sleep } from '@aztec/foundation/sleep';
12
12
  import type { DataStoreConfig } from '@aztec/kv-store/config';
@@ -56,6 +56,7 @@ function mockTxPool(): TxPool {
56
56
  hasTx: () => Promise.resolve(false),
57
57
  updateConfig: () => {},
58
58
  markTxsAsNonEvictable: () => Promise.resolve(),
59
+ clearNonEvictableTxs: () => Promise.resolve(),
59
60
  cleanupDeletedMinedTxs: () => Promise.resolve(0),
60
61
  };
61
62
  return Object.assign(new EventEmitter(), pool);
@@ -64,35 +65,37 @@ function mockTxPool(): TxPool {
64
65
  function mockAttestationPool(): AttestationPool {
65
66
  return {
66
67
  isEmpty: () => Promise.resolve(false),
67
- addAttestations: () => Promise.resolve(),
68
- deleteAttestations: () => Promise.resolve(),
69
- deleteAttestationsOlderThan: () => Promise.resolve(),
70
- deleteAttestationsForSlot: () => Promise.resolve(),
71
- deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
72
- getAttestationsForSlot: () => Promise.resolve([]),
73
- getAttestationsForSlotAndProposal: () => Promise.resolve([]),
74
68
  addBlockProposal: () => Promise.resolve(),
75
69
  getBlockProposal: () => Promise.resolve(undefined),
76
70
  hasBlockProposal: () => Promise.resolve(false),
77
- hasAttestation: () => Promise.resolve(false),
78
71
  canAddProposal: () => Promise.resolve(true),
79
- canAddAttestation: () => Promise.resolve(true),
72
+ // Checkpoint attestation methods
73
+ addCheckpointProposal: () => Promise.resolve(),
74
+ getCheckpointProposal: () => Promise.resolve(undefined),
75
+ hasCheckpointProposal: () => Promise.resolve(false),
76
+ addCheckpointAttestations: () => Promise.resolve(),
77
+ getCheckpointAttestationsForSlot: () => Promise.resolve([]),
78
+ getCheckpointAttestationsForSlotAndProposal: () => Promise.resolve([]),
79
+ deleteCheckpointAttestationsOlderThan: () => Promise.resolve(),
80
+ hasReachedCheckpointProposalCap: () => Promise.resolve(false),
81
+ hasReachedCheckpointAttestationCap: () => Promise.resolve(false),
82
+ canAddCheckpointProposal: () => Promise.resolve(true),
83
+ canAddCheckpointAttestation: () => Promise.resolve(true),
84
+ hasCheckpointAttestation: () => Promise.resolve(false),
80
85
  };
81
86
  }
82
87
 
83
88
  function mockEpochCache(): EpochCacheInterface {
84
89
  return {
85
- getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO }),
90
+ getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
86
91
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
87
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n }),
92
+ getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, nowMs: 0n }),
88
93
  computeProposerIndex: () => 0n,
89
- getProposerAttesterAddressInCurrentOrNextSlot: () =>
90
- Promise.resolve({
91
- currentProposer: EthAddress.ZERO,
92
- nextProposer: EthAddress.ZERO,
93
- currentSlot: SlotNumber.ZERO,
94
- nextSlot: SlotNumber.ZERO,
95
- }),
94
+ getCurrentAndNextSlot: () => ({
95
+ currentSlot: SlotNumber.ZERO,
96
+ nextSlot: SlotNumber.ZERO,
97
+ }),
98
+ getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
96
99
  getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
97
100
  isInCommittee: () => Promise.resolve(false),
98
101
  getRegisteredValidators: () => Promise.resolve([]),
@@ -126,7 +129,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
126
129
  peerDiscoveryService: PeerDiscoveryService,
127
130
  reqresp: ReqResp,
128
131
  peerManager: PeerManager,
129
- mempools: MemPools<T>,
132
+ mempools: MemPools,
130
133
  archiver: L2BlockSource & ContractDataSource,
131
134
  epochCache: EpochCacheInterface,
132
135
  proofVerifier: ClientProtocolCircuitVerifier,
@@ -188,9 +191,25 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
188
191
 
189
192
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
190
193
  process.on('message', async msg => {
191
- const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
194
+ // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
195
+ // SecretValue's private fields can't be serialized via IPC
196
+ const {
197
+ type,
198
+ config: rawConfig,
199
+ clientIndex,
200
+ } = msg as {
201
+ type: string;
202
+ config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
203
+ clientIndex: number;
204
+ };
192
205
  try {
193
206
  if (type === 'START') {
207
+ // Re-wrap the peerIdPrivateKey with SecretValue
208
+ const config: P2PConfig = {
209
+ ...rawConfig,
210
+ peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
211
+ } as P2PConfig;
212
+
194
213
  const txPool = mockTxPool();
195
214
  const attestationPool = mockAttestationPool();
196
215
  const epochCache = mockEpochCache();
@@ -223,14 +242,15 @@ process.on('message', async msg => {
223
242
  );
224
243
 
225
244
  // Create test service with validation disabled
245
+ // Note: Parameter order must match LibP2PService constructor
226
246
  const testService = new TestLibP2PService(
227
247
  P2PClientType.Full,
228
248
  config,
229
249
  (client as any).p2pService.node,
230
250
  (client as any).p2pService.peerDiscoveryService,
231
- (client as any).p2pService.mempools,
232
251
  (client as any).p2pService.reqresp,
233
252
  (client as any).p2pService.peerManager,
253
+ (client as any).p2pService.mempools,
234
254
  (client as any).p2pService.archiver,
235
255
  epochCache,
236
256
  proofVerifier,
@@ -73,7 +73,12 @@ class WorkerClientManager {
73
73
  clientIndex: number,
74
74
  ): [ChildProcess, Promise<void>] {
75
75
  const childProcess = fork(workerPath);
76
- childProcess.send({ type: 'START', config, clientIndex });
76
+ // Extract the raw peerIdPrivateKey value since SecretValue can't be serialized via IPC
77
+ const serializedConfig = {
78
+ ...config,
79
+ peerIdPrivateKey: config.peerIdPrivateKey?.getValue(),
80
+ };
81
+ childProcess.send({ type: 'START', config: serializedConfig, clientIndex });
77
82
 
78
83
  // Handle unexpected child process exit
79
84
  childProcess.on('exit', (code, signal) => {
@@ -1,80 +0,0 @@
1
- import type { TypedEventEmitter } from '@aztec/foundation/types';
2
- import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
3
- import { type TelemetryClient } from '@aztec/telemetry-client';
4
- import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
5
- declare const InMemoryTxPool_base: new () => TypedEventEmitter<TxPoolEvents>;
6
- /**
7
- * In-memory implementation of the Transaction Pool.
8
- */
9
- export declare class InMemoryTxPool extends InMemoryTxPool_base implements TxPool {
10
- private log;
11
- /**
12
- * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
13
- */
14
- private txs;
15
- private minedTxs;
16
- private pendingTxs;
17
- private deletedMinedTxHashes;
18
- private blockToDeletedMinedTxHash;
19
- private metrics;
20
- /**
21
- * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
22
- * @param log - A logger.
23
- */
24
- constructor(telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
25
- private countTx;
26
- isEmpty(): Promise<boolean>;
27
- markAsMined(txHashes: TxHash[], blockHeader: BlockHeader): Promise<void>;
28
- markMinedAsPending(txHashes: TxHash[]): Promise<void>;
29
- getPendingTxHashes(): Promise<TxHash[]>;
30
- getMinedTxHashes(): Promise<[TxHash, number][]>;
31
- getPendingTxCount(): Promise<number>;
32
- getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
33
- /**
34
- * Checks if a transaction exists in the pool and returns it.
35
- * @param txHash - The generated tx hash.
36
- * @returns The transaction, if found, 'undefined' otherwise.
37
- */
38
- getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
39
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
40
- hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
41
- hasTx(txHash: TxHash): Promise<boolean>;
42
- getArchivedTxByHash(): Promise<Tx | undefined>;
43
- /**
44
- * Adds a list of transactions to the pool. Duplicates are ignored.
45
- * @param txs - An array of txs to be added to the pool.
46
- * @returns Empty promise.
47
- */
48
- addTxs(txs: Tx[], opts?: {
49
- source?: string;
50
- }): Promise<number>;
51
- /**
52
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
53
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
54
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
55
- * @returns Empty promise.
56
- */
57
- deleteTxs(txHashes: TxHash[], opts?: {
58
- permanently?: boolean;
59
- }): Promise<void>;
60
- /**
61
- * Gets all the transactions stored in the pool.
62
- * @returns Array of tx objects in the order they were added to the pool.
63
- */
64
- getAllTxs(): Promise<Tx[]>;
65
- /**
66
- * Gets the hashes of all transactions currently in the tx pool.
67
- * @returns An array of transaction hashes found in the tx pool.
68
- */
69
- getAllTxHashes(): Promise<TxHash[]>;
70
- updateConfig(_config: TxPoolOptions): void;
71
- markTxsAsNonEvictable(_: TxHash[]): Promise<void>;
72
- /**
73
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
74
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
75
- * @returns The number of transactions permanently deleted.
76
- */
77
- cleanupDeletedMinedTxs(blockNumber: number): Promise<number>;
78
- }
79
- export {};
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvdHhfcG9vbC9tZW1vcnlfdHhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQU1uRixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFeEU7O0dBRUc7QUFDSCxxQkFBYSxjQUFlLFNBQVEsbUJBQTRELFlBQVcsTUFBTTtJQWtCN0csT0FBTyxDQUFDLEdBQUc7SUFqQmI7O09BRUc7SUFDSCxPQUFPLENBQUMsR0FBRyxDQUFrQjtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFzQjtJQUN0QyxPQUFPLENBQUMsVUFBVSxDQUFjO0lBQ2hDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBc0I7SUFDbEQsT0FBTyxDQUFDLHlCQUF5QixDQUEyQjtJQUU1RCxPQUFPLENBQUMsT0FBTyxDQUEwQjtJQUV6Qzs7O09BR0c7SUFDSCxZQUNFLFNBQVMsR0FBRSxlQUFzQyxFQUN6QyxHQUFHLHlDQUE4QixFQVMxQztJQUVELE9BQU8sQ0FBQyxPQUFPLENBT2I7SUFFSyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUVqQztJQUVNLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBb0I5RTtJQUVNLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZ0IzRDtJQUVZLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQVduRDtJQUVNLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBSXJEO0lBRU0saUJBQWlCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUcxQztJQUVNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FhdkY7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FHMUQ7SUFFRCxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBRTVEO0lBQ0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FFN0M7SUFFSyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRzVDO0lBRU0sbUJBQW1CLElBQUksT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FFcEQ7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUU7UUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0F3QnhFO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBMkJwRjtJQUVEOzs7T0FHRztJQUNJLFNBQVMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FFaEM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBRXpDO0lBRUQsWUFBWSxDQUFDLE9BQU8sRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFHO0lBRTdDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRWhEO0lBRUQ7Ozs7T0FJRztJQUNJLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQTBCbEU7Q0FDRiJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;;AAExE;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAA4D,YAAW,MAAM;IAkB7G,OAAO,CAAC,GAAG;IAjBb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,yBAAyB,CAA2B;IAE5D,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;IACH,YACE,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B,EAS1C;IAED,OAAO,CAAC,OAAO,CAOb;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAEjC;IAEM,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9E;IAEM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3D;IAEY,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnD;IAEM,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAIrD;IAEM,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1C;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAavF;IAED;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAG1D;IAED,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAE5D;IACD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAE7C;IAEK,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5C;IAEM,mBAAmB,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAEpD;IAED;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBxE;IAED;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BpF;IAED;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAEhC;IAED;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEzC;IAED,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAG;IAE7C,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhD;IAED;;;;OAIG;IACI,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BlE;CACF"}
@@ -1,238 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
- import { getTelemetryClient } from '@aztec/telemetry-client';
4
- import EventEmitter from 'node:events';
5
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
6
- import { getPendingTxPriority } from './priority.js';
7
- /**
8
- * In-memory implementation of the Transaction Pool.
9
- */ export class InMemoryTxPool extends EventEmitter {
10
- log;
11
- /**
12
- * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
13
- */ txs;
14
- minedTxs;
15
- pendingTxs;
16
- deletedMinedTxHashes;
17
- blockToDeletedMinedTxHash;
18
- metrics;
19
- /**
20
- * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
21
- * @param log - A logger.
22
- */ constructor(telemetry = getTelemetryClient(), log = createLogger('p2p:tx_pool')){
23
- super(), this.log = log, this.countTx = ()=>{
24
- return Promise.resolve({
25
- itemCount: {
26
- mined: this.minedTxs.size,
27
- pending: this.pendingTxs.size
28
- }
29
- });
30
- };
31
- this.txs = new Map();
32
- this.minedTxs = new Map();
33
- this.pendingTxs = new Set();
34
- this.deletedMinedTxHashes = new Map();
35
- this.blockToDeletedMinedTxHash = new Map();
36
- this.metrics = new PoolInstrumentation(telemetry, PoolName.TX_POOL, this.countTx);
37
- }
38
- countTx;
39
- isEmpty() {
40
- return Promise.resolve(this.txs.size === 0);
41
- }
42
- markAsMined(txHashes, blockHeader) {
43
- const keys = txHashes.map((x)=>x.toBigInt());
44
- for (const key of keys){
45
- // If this tx was previously soft-deleted, remove it from the deleted sets
46
- if (this.deletedMinedTxHashes.has(key)) {
47
- const originalBlock = this.deletedMinedTxHashes.get(key);
48
- this.deletedMinedTxHashes.delete(key);
49
- // Remove from block-to-hash mapping
50
- const txHashesForBlock = this.blockToDeletedMinedTxHash.get(originalBlock);
51
- if (txHashesForBlock) {
52
- txHashesForBlock.delete(key);
53
- if (txHashesForBlock.size === 0) {
54
- this.blockToDeletedMinedTxHash.delete(originalBlock);
55
- }
56
- }
57
- }
58
- this.minedTxs.set(key, blockHeader.globalVariables.blockNumber);
59
- this.pendingTxs.delete(key);
60
- }
61
- return Promise.resolve();
62
- }
63
- markMinedAsPending(txHashes) {
64
- if (txHashes.length === 0) {
65
- return Promise.resolve();
66
- }
67
- const keys = txHashes.map((x)=>x.toBigInt());
68
- for (const key of keys){
69
- this.minedTxs.delete(key);
70
- // only add back to the pending set if we have the tx object
71
- if (this.txs.has(key)) {
72
- this.pendingTxs.add(key);
73
- }
74
- }
75
- return Promise.resolve();
76
- }
77
- async getPendingTxHashes() {
78
- const txs = (await this.getAllTxs()).sort((tx1, tx2)=>-getPendingTxPriority(tx1).localeCompare(getPendingTxPriority(tx2)));
79
- const txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
80
- // No need to check deleted since pending txs are never soft-deleted
81
- return txHashes.filter((txHash)=>{
82
- const key = txHash.toBigInt();
83
- return this.pendingTxs.has(key);
84
- });
85
- }
86
- getMinedTxHashes() {
87
- return Promise.resolve(Array.from(this.minedTxs.entries()).map(([txHash, blockNumber])=>[
88
- TxHash.fromBigInt(txHash),
89
- blockNumber
90
- ]));
91
- }
92
- getPendingTxCount() {
93
- // Soft-deleted transactions are always mined, never pending
94
- return Promise.resolve(this.pendingTxs.size);
95
- }
96
- getTxStatus(txHash) {
97
- const key = txHash.toBigInt();
98
- if (this.deletedMinedTxHashes.has(key)) {
99
- return Promise.resolve('deleted');
100
- }
101
- if (this.minedTxs.has(key)) {
102
- return Promise.resolve('mined');
103
- }
104
- if (this.pendingTxs.has(key)) {
105
- return Promise.resolve('pending');
106
- }
107
- return Promise.resolve(undefined);
108
- }
109
- /**
110
- * Checks if a transaction exists in the pool and returns it.
111
- * @param txHash - The generated tx hash.
112
- * @returns The transaction, if found, 'undefined' otherwise.
113
- */ getTxByHash(txHash) {
114
- const result = this.txs.get(txHash.toBigInt());
115
- return Promise.resolve(result === undefined ? undefined : Tx.clone(result));
116
- }
117
- getTxsByHash(txHashes) {
118
- return Promise.all(txHashes.map((txHash)=>this.getTxByHash(txHash)));
119
- }
120
- hasTxs(txHashes) {
121
- return Promise.resolve(txHashes.map((txHash)=>this.txs.has(txHash.toBigInt())));
122
- }
123
- async hasTx(txHash) {
124
- const result = await this.hasTxs([
125
- txHash
126
- ]);
127
- return result[0];
128
- }
129
- getArchivedTxByHash() {
130
- return Promise.resolve(undefined);
131
- }
132
- /**
133
- * Adds a list of transactions to the pool. Duplicates are ignored.
134
- * @param txs - An array of txs to be added to the pool.
135
- * @returns Empty promise.
136
- */ addTxs(txs, opts = {}) {
137
- const added = [];
138
- for (const tx of txs){
139
- const txHash = tx.getTxHash();
140
- this.log.verbose(`Adding tx ${txHash.toString()} to pool`, {
141
- eventName: 'tx-added-to-pool',
142
- ...tx.getStats()
143
- });
144
- const key = txHash.toBigInt();
145
- if (!this.txs.has(key)) {
146
- added.push(tx);
147
- this.txs.set(key, tx);
148
- }
149
- if (!this.minedTxs.has(key)) {
150
- this.metrics.recordSize(tx);
151
- this.pendingTxs.add(key);
152
- }
153
- }
154
- if (added.length > 0) {
155
- this.emit('txs-added', {
156
- ...opts,
157
- txs: added
158
- });
159
- }
160
- return Promise.resolve(added.length);
161
- }
162
- /**
163
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
164
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
165
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
166
- * @returns Empty promise.
167
- */ deleteTxs(txHashes, opts) {
168
- for (const txHash of txHashes){
169
- const key = txHash.toBigInt();
170
- if (this.txs.has(key)) {
171
- if (this.minedTxs.has(key)) {
172
- const blockNumber = this.minedTxs.get(key);
173
- this.minedTxs.delete(key);
174
- // Soft-delete mined transactions: remove from mined set but keep in storage
175
- if (opts?.permanently) {
176
- // Permanently delete mined transactions if specified
177
- this.txs.delete(key);
178
- } else {
179
- this.deletedMinedTxHashes.set(key, blockNumber);
180
- if (!this.blockToDeletedMinedTxHash.has(blockNumber)) {
181
- this.blockToDeletedMinedTxHash.set(blockNumber, new Set());
182
- }
183
- this.blockToDeletedMinedTxHash.get(blockNumber).add(key);
184
- }
185
- } else {
186
- // Permanently delete pending transactions
187
- this.txs.delete(key);
188
- this.pendingTxs.delete(key);
189
- }
190
- }
191
- }
192
- return Promise.resolve();
193
- }
194
- /**
195
- * Gets all the transactions stored in the pool.
196
- * @returns Array of tx objects in the order they were added to the pool.
197
- */ getAllTxs() {
198
- return Promise.resolve(Array.from(this.txs.values()).map((x)=>Tx.clone(x)));
199
- }
200
- /**
201
- * Gets the hashes of all transactions currently in the tx pool.
202
- * @returns An array of transaction hashes found in the tx pool.
203
- */ getAllTxHashes() {
204
- return Promise.resolve(Array.from(this.txs.keys()).map((x)=>TxHash.fromBigInt(x)));
205
- }
206
- updateConfig(_config) {}
207
- markTxsAsNonEvictable(_) {
208
- return Promise.resolve();
209
- }
210
- /**
211
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
212
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
213
- * @returns The number of transactions permanently deleted.
214
- */ cleanupDeletedMinedTxs(blockNumber) {
215
- let deletedCount = 0;
216
- const blocksToDelete = [];
217
- // Find all blocks up to the specified block number
218
- for (const [block, txHashes] of this.blockToDeletedMinedTxHash.entries()){
219
- if (block <= blockNumber) {
220
- // Permanently delete all transactions from this block
221
- for (const txHash of txHashes){
222
- this.txs.delete(txHash);
223
- this.deletedMinedTxHashes.delete(txHash);
224
- deletedCount++;
225
- }
226
- blocksToDelete.push(block);
227
- }
228
- }
229
- // Clean up block-to-hash mapping
230
- for (const block of blocksToDelete){
231
- this.blockToDeletedMinedTxHash.delete(block);
232
- }
233
- if (deletedCount > 0) {
234
- this.log.debug(`Permanently deleted ${deletedCount} deleted mined txs from blocks up to ${blockNumber}`);
235
- }
236
- return Promise.resolve(deletedCount);
237
- }
238
- }
@@ -1,12 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
- export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
- private epochCache;
5
- private logger;
6
- private txsPermitted;
7
- constructor(epochCache: EpochCacheInterface, opts: {
8
- txsPermitted: boolean;
9
- });
10
- validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined>;
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdGLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBRTlCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUkzRTtJQUVLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0ErRTNFO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAE9B,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAI3E;IAEK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA+E3E;CACF"}
@@ -1,82 +0,0 @@
1
- import { NoCommitteeError } from '@aztec/ethereum';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- export class BlockProposalValidator {
5
- epochCache;
6
- logger;
7
- txsPermitted;
8
- constructor(epochCache, opts){
9
- this.epochCache = epochCache;
10
- this.txsPermitted = opts.txsPermitted;
11
- this.logger = createLogger('p2p:block_proposal_validator');
12
- }
13
- async validate(block) {
14
- try {
15
- // Check signature validity first - invalid signatures are a high-severity issue
16
- const proposer = block.getSender();
17
- if (!proposer) {
18
- this.logger.debug(`Penalizing peer for block proposal with invalid signature`);
19
- return PeerErrorSeverity.MidToleranceError;
20
- }
21
- // Check if transactions are permitted when the proposal contains transaction hashes
22
- const embeddedTxCount = block.txs?.length ?? 0;
23
- if (!this.txsPermitted && (block.txHashes.length > 0 || embeddedTxCount > 0)) {
24
- this.logger.debug(`Penalizing peer for block proposal with ${block.txHashes.length} transaction(s) when transactions are not permitted`);
25
- return PeerErrorSeverity.MidToleranceError;
26
- }
27
- // If there are embedded txs, they must be listed in txHashes; if there are no txHashes, there must be no txs
28
- const hashSet = new Set(block.txHashes.map((h)=>h.toString()));
29
- const missingTxHashes = embeddedTxCount > 0 ? block.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
30
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
31
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
32
- embeddedTxCount,
33
- txHashesLength: block.txHashes.length,
34
- missingTxHashes
35
- });
36
- return PeerErrorSeverity.MidToleranceError;
37
- }
38
- const { currentProposer, nextProposer, currentSlot, nextSlot } = await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
39
- // Check that the attestation is for the current or next slot
40
- const slotNumber = block.payload.header.slotNumber;
41
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
42
- this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, {
43
- currentSlot,
44
- nextSlot
45
- });
46
- return PeerErrorSeverity.HighToleranceError;
47
- }
48
- // Check that the block proposal is from the current or next proposer
49
- if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
50
- this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
51
- currentProposer,
52
- nextProposer,
53
- proposer: proposer.toString()
54
- });
55
- return PeerErrorSeverity.MidToleranceError;
56
- }
57
- if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
58
- this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
59
- currentProposer,
60
- nextProposer,
61
- proposer: proposer.toString()
62
- });
63
- return PeerErrorSeverity.MidToleranceError;
64
- }
65
- // Validate tx hashes for all txs embedded in the proposal
66
- if (!(await Promise.all(block.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
67
- this.logger.warn(`Penalizing peer for invalid tx hashes in block proposal`, {
68
- proposer,
69
- slotNumber
70
- });
71
- return PeerErrorSeverity.LowToleranceError;
72
- }
73
- return undefined;
74
- } catch (e) {
75
- // People shouldn't be sending us block proposals if the committee doesn't exist
76
- if (e instanceof NoCommitteeError) {
77
- return PeerErrorSeverity.LowToleranceError;
78
- }
79
- throw e;
80
- }
81
- }
82
- }
@@ -1,2 +0,0 @@
1
- export * from './block_proposal_validator.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9ibG9ja19wcm9wb3NhbF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}