@aztec/p2p 0.0.1-commit.cd76b27 → 0.0.1-commit.ce4f8c4f2

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 (267) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +5 -6
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +28 -26
  5. package/dest/client/interface.d.ts +6 -13
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +5 -13
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +25 -92
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +4 -5
  11. package/dest/config.d.ts +33 -15
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +86 -37
  14. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
  15. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  16. package/dest/mem_pools/attestation_pool/attestation_pool.js +8 -4
  17. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  18. package/dest/mem_pools/instrumentation.d.ts +4 -2
  19. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  20. package/dest/mem_pools/instrumentation.js +16 -14
  21. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  22. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
  24. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  25. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool/priority.js +4 -4
  27. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  28. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  29. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -2
  33. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  35. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  36. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  39. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  40. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +10 -6
  42. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  46. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  48. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  49. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  51. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +15 -9
  52. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +48 -11
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +81 -17
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +5 -3
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +3 -2
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +196 -151
  66. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  69. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  70. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  71. package/dest/msg_validators/clock_tolerance.js +4 -3
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  78. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  79. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  81. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
  82. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  84. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  85. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  86. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  87. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  88. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  90. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  91. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  93. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  96. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  97. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/factory.js +247 -60
  99. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  100. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  102. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  103. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
  105. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  106. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/index.js +2 -0
  108. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  109. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  111. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  112. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  113. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  114. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  115. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  117. package/dest/services/discv5/discV5_service.d.ts +1 -1
  118. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  119. package/dest/services/discv5/discV5_service.js +4 -2
  120. package/dest/services/dummy_service.d.ts +2 -3
  121. package/dest/services/dummy_service.d.ts.map +1 -1
  122. package/dest/services/dummy_service.js +1 -4
  123. package/dest/services/encoding.d.ts +6 -2
  124. package/dest/services/encoding.d.ts.map +1 -1
  125. package/dest/services/encoding.js +14 -8
  126. package/dest/services/libp2p/libp2p_service.d.ts +20 -20
  127. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  128. package/dest/services/libp2p/libp2p_service.js +221 -143
  129. package/dest/services/peer-manager/metrics.d.ts +3 -1
  130. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  131. package/dest/services/peer-manager/metrics.js +6 -0
  132. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  133. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_manager.js +6 -3
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +82 -101
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  146. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  147. package/dest/services/reqresp/reqresp.d.ts +1 -1
  148. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  149. package/dest/services/reqresp/reqresp.js +19 -10
  150. package/dest/services/service.d.ts +8 -2
  151. package/dest/services/service.d.ts.map +1 -1
  152. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  153. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  154. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  155. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  156. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  157. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  158. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  159. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  160. package/dest/services/tx_collection/request_tracker.js +84 -0
  161. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  162. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  163. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  164. package/dest/services/tx_provider.d.ts +3 -3
  165. package/dest/services/tx_provider.d.ts.map +1 -1
  166. package/dest/services/tx_provider.js +4 -4
  167. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  168. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  169. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  170. package/dest/test-helpers/mock-pubsub.d.ts +7 -3
  171. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  172. package/dest/test-helpers/mock-pubsub.js +11 -3
  173. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  174. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  175. package/dest/test-helpers/reqresp-nodes.js +2 -2
  176. package/dest/test-helpers/testbench-utils.d.ts +2 -2
  177. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  178. package/dest/test-helpers/testbench-utils.js +22 -3
  179. package/dest/testbench/p2p_client_testbench_worker.js +10 -9
  180. package/dest/testbench/worker_client_manager.d.ts +3 -1
  181. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  182. package/dest/testbench/worker_client_manager.js +6 -2
  183. package/dest/util.d.ts +9 -4
  184. package/dest/util.d.ts.map +1 -1
  185. package/dest/util.js +2 -9
  186. package/package.json +14 -14
  187. package/src/client/factory.ts +45 -45
  188. package/src/client/interface.ts +5 -19
  189. package/src/client/p2p_client.ts +26 -122
  190. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +5 -8
  191. package/src/config.ts +125 -43
  192. package/src/mem_pools/attestation_pool/attestation_pool.ts +8 -7
  193. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  194. package/src/mem_pools/instrumentation.ts +17 -13
  195. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  196. package/src/mem_pools/tx_pool/priority.ts +4 -4
  197. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  198. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  199. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -2
  200. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  201. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  202. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +2 -2
  203. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +10 -6
  204. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  205. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  206. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  207. package/src/mem_pools/tx_pool_v2/interfaces.ts +16 -8
  208. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +115 -20
  209. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  210. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +17 -2
  211. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +207 -154
  212. package/src/msg_validators/attestation_validator/README.md +49 -0
  213. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  214. package/src/msg_validators/clock_tolerance.ts +4 -3
  215. package/src/msg_validators/proposal_validator/README.md +123 -0
  216. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  217. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  218. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  219. package/src/msg_validators/tx_validator/README.md +119 -0
  220. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -3
  221. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  222. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  223. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  224. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  225. package/src/msg_validators/tx_validator/factory.ts +394 -78
  226. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  227. package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
  228. package/src/msg_validators/tx_validator/index.ts +2 -0
  229. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  230. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  231. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  232. package/src/services/discv5/discV5_service.ts +4 -2
  233. package/src/services/dummy_service.ts +1 -5
  234. package/src/services/encoding.ts +14 -7
  235. package/src/services/libp2p/libp2p_service.ts +235 -166
  236. package/src/services/peer-manager/metrics.ts +7 -0
  237. package/src/services/peer-manager/peer_manager.ts +7 -3
  238. package/src/services/reqresp/README.md +229 -0
  239. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  240. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +78 -111
  241. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  242. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  243. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  244. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  245. package/src/services/reqresp/reqresp.ts +22 -12
  246. package/src/services/service.ts +8 -1
  247. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  248. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  249. package/src/services/tx_collection/request_tracker.ts +127 -0
  250. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  251. package/src/services/tx_collection/tx_collection.ts +3 -5
  252. package/src/services/tx_provider.ts +2 -2
  253. package/src/test-helpers/make-test-p2p-clients.ts +1 -3
  254. package/src/test-helpers/mock-pubsub.ts +12 -6
  255. package/src/test-helpers/reqresp-nodes.ts +3 -6
  256. package/src/test-helpers/testbench-utils.ts +30 -4
  257. package/src/testbench/p2p_client_testbench_worker.ts +7 -12
  258. package/src/testbench/worker_client_manager.ts +13 -5
  259. package/src/util.ts +9 -13
  260. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  261. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  262. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  263. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  264. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  265. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  266. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  267. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -25,7 +25,7 @@ export class TxProvider implements ITxProvider {
25
25
  constructor(
26
26
  private txCollection: TxCollection,
27
27
  private txPool: TxPoolV2,
28
- private txValidator: Pick<P2PClient, 'validate'>,
28
+ private blockProposalTransactionValidator: Pick<P2PClient, 'validateTxsReceivedInBlockProposal'>,
29
29
  private log: Logger = createLogger('p2p:tx-collector'),
30
30
  client: TelemetryClient = getTelemetryClient(),
31
31
  ) {
@@ -227,7 +227,7 @@ export class TxProvider implements ITxProvider {
227
227
  if (txs.length === 0) {
228
228
  return;
229
229
  }
230
- await this.txValidator.validate(txs);
230
+ await this.blockProposalTransactionValidator.validateTxsReceivedInBlockProposal(txs);
231
231
  await this.txPool.addProtectedTxs(txs, blockHeader);
232
232
  }
233
233
  }
@@ -4,10 +4,9 @@ import { SecretValue } from '@aztec/foundation/config';
4
4
  import { type Logger, createLogger } from '@aztec/foundation/log';
5
5
  import { retryUntil } from '@aztec/foundation/retry';
6
6
  import { sleep } from '@aztec/foundation/sleep';
7
- import type { DataStoreConfig } from '@aztec/kv-store/config';
8
7
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
9
8
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
- import { P2PClientType } from '@aztec/stdlib/p2p';
9
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
11
10
 
12
11
  import { createP2PClient } from '../client/index.js';
13
12
  import type { P2PClient } from '../client/p2p_client.js';
@@ -98,7 +97,6 @@ export async function makeTestP2PClient(
98
97
  const kvStore = await openTmpStore('test');
99
98
 
100
99
  const client = await createP2PClient(
101
- P2PClientType.Full,
102
100
  config,
103
101
  l2BlockSource,
104
102
  proofVerifier,
@@ -4,7 +4,6 @@ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
4
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
5
  import type { ContractDataSource } from '@aztec/stdlib/contract';
6
6
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
- import { P2PClientType } from '@aztec/stdlib/p2p';
8
7
  import type { TelemetryClient } from '@aztec/telemetry-client';
9
8
 
10
9
  import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
@@ -16,6 +15,7 @@ import {
16
15
  type TopicValidatorResult,
17
16
  TypedEventEmitter,
18
17
  } from '@libp2p/interface';
18
+ import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
19
19
 
20
20
  import type { P2PConfig } from '../config.js';
21
21
  import type { MemPools } from '../mem_pools/interface.js';
@@ -42,11 +42,10 @@ type GossipSubService = PubSubLibp2p['services']['pubsub'];
42
42
  * Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
43
43
  * Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
44
44
  */
45
- export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
45
+ export function getMockPubSubP2PServiceFactory(
46
46
  network: MockGossipSubNetwork,
47
- ): (...args: Parameters<(typeof LibP2PService<T>)['new']>) => Promise<LibP2PService<T>> {
47
+ ): (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService> {
48
48
  return (
49
- clientType: P2PClientType,
50
49
  config: P2PConfig,
51
50
  peerId: PeerId,
52
51
  deps: {
@@ -66,8 +65,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
66
65
  const peerManager = new DummyPeerManager(peerId, network);
67
66
  const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
68
67
  const peerDiscoveryService = new DummyPeerDiscoveryService();
69
- const service = new LibP2PService<T>(
70
- clientType as T,
68
+ const service = new LibP2PService(
71
69
  config,
72
70
  libp2p,
73
71
  peerDiscoveryService,
@@ -215,6 +213,14 @@ export class MockPubSub implements PubSubLibp2p {
215
213
  get services() {
216
214
  return {
217
215
  pubsub: this.gossipSub,
216
+ components: {
217
+ addressManager: {
218
+ removeObservedAddr: () => {},
219
+ addObservedAddr: () => {},
220
+ confirmObservedAddr: () => {},
221
+ } as unknown as AddressManager,
222
+ connectionManager: {} as unknown as ConnectionManager,
223
+ },
218
224
  };
219
225
  }
220
226
 
@@ -2,7 +2,6 @@ import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
3
  import { SecretValue } from '@aztec/foundation/config';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
7
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
8
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
@@ -12,7 +11,7 @@ import type {
12
11
  IVCProofVerificationResult,
13
12
  WorldStateSynchronizer,
14
13
  } from '@aztec/stdlib/interfaces/server';
15
- import type { P2PClientType } from '@aztec/stdlib/p2p';
14
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
16
15
  import type { Tx } from '@aztec/stdlib/tx';
17
16
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
18
17
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -107,8 +106,7 @@ export async function createLibp2pNode(
107
106
  *
108
107
  *
109
108
  */
110
- export async function createTestLibP2PService<T extends P2PClientType>(
111
- clientType: T,
109
+ export async function createTestLibP2PService(
112
110
  boostrapAddrs: string[] = [],
113
111
  archiver: L2BlockSource & ContractDataSource,
114
112
  worldStateSynchronizer: WorldStateSynchronizer,
@@ -159,8 +157,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
159
157
  p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
160
158
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
161
159
 
162
- return new LibP2PService<T>(
163
- clientType,
160
+ return new LibP2PService(
164
161
  config,
165
162
  p2pNode as PubSubLibp2p,
166
163
  discoveryService,
@@ -76,7 +76,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
76
76
  return Promise.resolve({ accepted, ignored: [], rejected: [] });
77
77
  }
78
78
 
79
- canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored' | 'rejected'> {
79
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
80
80
  const key = tx.getTxHash().toString();
81
81
  if (this.txsByHash.has(key)) {
82
82
  return Promise.resolve('ignored');
@@ -273,17 +273,41 @@ export class InMemoryAttestationPool {
273
273
  * Creates a mock EpochCache for testing.
274
274
  */
275
275
  export function createMockEpochCache(): EpochCacheInterface {
276
- return {
276
+ const cache: EpochCacheInterface = {
277
277
  getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
278
278
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
279
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, nowMs: 0n }),
279
+ getSlotNow: () => SlotNumber.ZERO,
280
+ getTargetSlot: () => SlotNumber.ZERO,
281
+ getEpochNow: () => EpochNumber.ZERO,
282
+ getTargetEpoch: () => EpochNumber.ZERO,
283
+ getEpochAndSlotNow: () => ({
284
+ epoch: EpochNumber.ZERO,
285
+ slot: SlotNumber.ZERO,
286
+ ts: 0n,
287
+ nowMs: 0n,
288
+ }),
289
+ isProposerPipeliningEnabled: () => false,
280
290
  computeProposerIndex: () => 0n,
281
291
  getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
292
+ getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
282
293
  getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
283
- getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
294
+ getEpochAndSlotInNextL1Slot: () => ({
295
+ epoch: EpochNumber.ZERO,
296
+ slot: SlotNumber.ZERO,
297
+ ts: 0n,
298
+ nowSeconds: 0n,
299
+ }),
300
+ getTargetEpochAndSlotInNextL1Slot: () => ({
301
+ epoch: EpochNumber.ZERO,
302
+ slot: SlotNumber.ZERO,
303
+ ts: 0n,
304
+ nowSeconds: 0n,
305
+ }),
284
306
  isInCommittee: () => Promise.resolve(false),
285
307
  getRegisteredValidators: () => Promise.resolve([]),
286
308
  filterInCommittee: () => Promise.resolve([]),
309
+ isEscapeHatchOpen: () => Promise.resolve(false),
310
+ isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
287
311
  getL1Constants: () => ({
288
312
  l1StartBlock: 0n,
289
313
  l1GenesisTime: 0n,
@@ -292,8 +316,10 @@ export function createMockEpochCache(): EpochCacheInterface {
292
316
  ethereumSlotDuration: 1,
293
317
  proofSubmissionEpochs: 1,
294
318
  targetCommitteeSize: 48,
319
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
295
320
  }),
296
321
  };
322
+ return cache;
297
323
  }
298
324
 
299
325
  /**
@@ -12,14 +12,14 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
20
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
22
- import { type BlockProposal, P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
21
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
+ import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
23
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
24
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
25
  import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
@@ -40,7 +40,7 @@ import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requ
40
40
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
41
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
42
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import { MissingTxsTracker } from '../services/tx_collection/missing_txs_tracker.js';
43
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
44
44
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
45
45
  import {
46
46
  BENCHMARK_CONSTANTS,
@@ -86,12 +86,11 @@ export interface BenchReadyMessage {
86
86
  }
87
87
  const txCache = new Map<number, Tx[]>();
88
88
 
89
- class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
89
+ class TestLibP2PService extends LibP2PService {
90
90
  private disableTxValidation: boolean;
91
91
  private gossipMessageCount = 0;
92
92
 
93
93
  constructor(
94
- clientType: T,
95
94
  config: P2PConfig,
96
95
  node: PubSubLibp2p,
97
96
  peerDiscoveryService: PeerDiscoveryService,
@@ -107,7 +106,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
107
106
  disableTxValidation = true,
108
107
  ) {
109
108
  super(
110
- clientType,
111
109
  config,
112
110
  node,
113
111
  peerDiscoveryService,
@@ -275,10 +273,9 @@ async function runAggregatorBenchmark(
275
273
  noopTxValidator,
276
274
  );
277
275
  const fetchedTxs = await collector.collectTxs(
278
- MissingTxsTracker.fromArray(txHashes),
276
+ RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
279
277
  blockProposal,
280
278
  pinnedPeer,
281
- timeoutMs,
282
279
  );
283
280
  const durationMs = timer.ms();
284
281
  return {
@@ -295,10 +292,9 @@ async function runAggregatorBenchmark(
295
292
  BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
296
293
  );
297
294
  const fetchedTxs = await collector.collectTxs(
298
- MissingTxsTracker.fromArray(txHashes),
295
+ RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
299
296
  blockProposal,
300
297
  pinnedPeer,
301
- timeoutMs,
302
298
  );
303
299
  const durationMs = timer.ms();
304
300
  return {
@@ -342,6 +338,7 @@ process.on('message', async msg => {
342
338
  const config: P2PConfig = {
343
339
  ...rawConfig,
344
340
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
341
+ priceBumpPercentage: 10n,
345
342
  } as P2PConfig;
346
343
 
347
344
  workerConfig = config;
@@ -365,7 +362,6 @@ process.on('message', async msg => {
365
362
  };
366
363
 
367
364
  const client = await createP2PClient(
368
- P2PClientType.Full,
369
365
  config as P2PConfig & DataStoreConfig,
370
366
  l2BlockSource,
371
367
  proofVerifier as ClientProtocolCircuitVerifier,
@@ -378,7 +374,6 @@ process.on('message', async msg => {
378
374
  );
379
375
 
380
376
  const testService = new TestLibP2PService(
381
- P2PClientType.Full,
382
377
  config,
383
378
  (client as any).p2pService.node,
384
379
  (client as any).p2pService.peerDiscoveryService,
@@ -81,13 +81,15 @@ class WorkerClientManager {
81
81
  * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
82
  * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
83
  * The worker must re-wrap it in SecretValue.
84
+ * We also omit priceBumpPercentage since it's a bigint and can't be
85
+ * serialized over IPC (which uses JSON under the hood).
84
86
  */
85
87
  private createClientConfig(
86
88
  clientIndex: number,
87
89
  port: number,
88
90
  otherNodes: string[],
89
- ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
90
- return {
91
+ ): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
92
+ const { priceBumpPercentage: _, ...config } = {
91
93
  ...getP2PDefaultConfig(),
92
94
  p2pEnabled: true,
93
95
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
@@ -96,7 +98,10 @@ class WorkerClientManager {
96
98
  p2pPort: port,
97
99
  bootstrapNodes: [...otherNodes],
98
100
  ...this.p2pConfig,
99
- } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
101
+ };
102
+ return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
103
+ peerIdPrivateKey: string;
104
+ } & Partial<ChainConfig>;
100
105
  }
101
106
 
102
107
  /**
@@ -104,7 +109,9 @@ class WorkerClientManager {
104
109
  * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
105
110
  */
106
111
  private spawnWorkerProcess(
107
- config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
112
+ config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
113
+ peerIdPrivateKey: string;
114
+ } & Partial<ChainConfig>,
108
115
  clientIndex: number,
109
116
  ): [ChildProcess, Promise<void>] {
110
117
  const useCompiled = existsSync(workerJsPath);
@@ -483,7 +490,8 @@ class WorkerClientManager {
483
490
  };
484
491
 
485
492
  this.processes[0].send(aggregatorCmd);
486
- const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
493
+ const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
494
+ const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
487
495
 
488
496
  this.logger.info(
489
497
  `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
package/src/util.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
4
- import type { DataStoreConfig } from '@aztec/kv-store/config';
4
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
 
6
6
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
7
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
8
8
  import type { Identify } from '@libp2p/identify';
9
9
  import type { PeerId, PrivateKey } from '@libp2p/interface';
10
- import type { ConnectionManager } from '@libp2p/interface-internal';
10
+ import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
11
11
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
12
12
  import { resolve } from 'dns/promises';
13
13
  import { promises as fs } from 'fs';
@@ -31,6 +31,10 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
31
31
  | 'direct'
32
32
  | 'getMeshPeers'
33
33
  > & { score: Pick<GossipSub['score'], 'score'> };
34
+ components: {
35
+ connectionManager: ConnectionManager;
36
+ addressManager: AddressManager;
37
+ };
34
38
  };
35
39
  }
36
40
 
@@ -39,6 +43,7 @@ export type FullLibp2p = Libp2p<{
39
43
  pubsub: GossipSub;
40
44
  components: {
41
45
  connectionManager: ConnectionManager;
46
+ addressManager: AddressManager;
42
47
  };
43
48
  }>;
44
49
 
@@ -102,24 +107,15 @@ function addressToMultiAddressType(address: string): 'ip4' | 'ip6' | 'dns' {
102
107
  }
103
108
  }
104
109
 
105
- export async function configureP2PClientAddresses(
106
- _config: P2PConfig & DataStoreConfig,
107
- ): Promise<P2PConfig & DataStoreConfig> {
110
+ export function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): P2PConfig & DataStoreConfig {
108
111
  const config = { ..._config };
109
- const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
112
+ const { p2pBroadcastPort, p2pPort } = config;
110
113
 
111
114
  // If no broadcast port is provided, use the given p2p port as the broadcast port
112
115
  if (!p2pBroadcastPort) {
113
116
  config.p2pBroadcastPort = p2pPort;
114
117
  }
115
118
 
116
- // check if no announce IP was provided
117
- if (!p2pIp) {
118
- if (queryForIp) {
119
- const publicIp = await getPublicIp();
120
- config.p2pIp = publicIp;
121
- }
122
- }
123
119
  // TODO(md): guard against setting a local ip address as the announce ip
124
120
 
125
121
  return config;
@@ -1,23 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
3
- import type { EthAddress } from '@aztec/foundation/eth-address';
4
- import { type BlockProposal, type CheckpointProposal, type ValidationResult } from '@aztec/stdlib/p2p';
5
- import type { TxHash } from '@aztec/stdlib/tx';
6
- import type { MockProxy } from 'jest-mock-extended';
7
- export interface ProposalValidatorTestParams<TProposal extends BlockProposal | CheckpointProposal> {
8
- validatorFactory: (epochCache: EpochCacheInterface, opts: {
9
- txsPermitted: boolean;
10
- }) => {
11
- validate: (proposal: TProposal) => Promise<ValidationResult>;
12
- };
13
- makeProposal: (options?: any) => Promise<TProposal>;
14
- makeHeader: (epochNumber: number | bigint, slotNumber: number | bigint, blockNumber: number | bigint) => any;
15
- getSigner: () => Secp256k1Signer;
16
- getAddress: (signer?: Secp256k1Signer) => EthAddress;
17
- getSlot: (slot: number | bigint) => any;
18
- getTxHashes: (n: number) => TxHash[];
19
- getTxs: () => any[];
20
- epochCacheMock: () => MockProxy<EpochCacheInterface>;
21
- }
22
- export declare function sharedProposalValidatorTests<TProposal extends BlockProposal | CheckpointProposal>(params: ProposalValidatorTestParams<TProposal>): void;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvcHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBQ2xCLEtBQUssa0JBQWtCLEVBRXZCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsTUFBTSxXQUFXLDJCQUEyQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQy9GLGdCQUFnQixFQUFFLENBQ2hCLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEtBQzVCO1FBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUFFLENBQUM7SUFDdEUsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDN0csU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGVBQWUsS0FBSyxVQUFVLENBQUM7SUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxDQUFDO0lBQ3hDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDckMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDcEIsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Q0FDdEQ7QUFFRCx3QkFBZ0IsNEJBQTRCLENBQUMsU0FBUyxTQUFTLGFBQWEsR0FBRyxrQkFBa0IsRUFDL0YsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxRQXdNL0MifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal_validator_test_suite.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator_test_suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,2BAA2B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC/F,gBAAgB,EAAE,CAChB,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,KAC5B;QAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;KAAE,CAAC;IACtE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IAC7G,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC;IACrD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;CACtD;AAED,wBAAgB,4BAA4B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB,EAC/F,MAAM,EAAE,2BAA2B,CAAC,SAAS,CAAC,QAwM/C"}
@@ -1,212 +0,0 @@
1
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
- export function sharedProposalValidatorTests(params) {
3
- const { validatorFactory, makeProposal, makeHeader, getSigner, getAddress, getSlot, getTxHashes, epochCacheMock } = params;
4
- describe('shared proposal validation logic', ()=>{
5
- let epochCache;
6
- let validator;
7
- const previousSlot = getSlot(99);
8
- const currentSlot = getSlot(100);
9
- const nextSlot = getSlot(101);
10
- function mockGetProposer(currentProposer, nextProposer, previousProposer) {
11
- epochCache.getProposerAttesterAddressInSlot.mockImplementation((slot)=>{
12
- if (slot === currentSlot) {
13
- return Promise.resolve(currentProposer);
14
- }
15
- if (slot === nextSlot) {
16
- return Promise.resolve(nextProposer);
17
- }
18
- if (slot === previousSlot && previousProposer) {
19
- return Promise.resolve(previousProposer);
20
- }
21
- throw new Error('Unexpected argument');
22
- });
23
- }
24
- beforeEach(()=>{
25
- epochCache = epochCacheMock();
26
- validator = validatorFactory(epochCache, {
27
- txsPermitted: true
28
- });
29
- epochCache.getCurrentAndNextSlot.mockReturnValue({
30
- currentSlot: currentSlot,
31
- nextSlot: nextSlot
32
- });
33
- });
34
- it('returns high tolerance error if slot number is not current or next slot (outside clock tolerance)', async ()=>{
35
- const header = makeHeader(1, 99, 99);
36
- const mockProposal = await makeProposal({
37
- blockHeader: header,
38
- lastBlockHeader: header
39
- });
40
- // Mock getEpochAndSlotNow to return time OUTSIDE clock tolerance (1000ms elapsed)
41
- epochCache.getEpochAndSlotNow.mockReturnValue({
42
- epoch: 1,
43
- slot: currentSlot,
44
- ts: 1000n,
45
- nowMs: 1001000n
46
- });
47
- epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(getAddress());
48
- const result = await validator.validate(mockProposal);
49
- expect(result).toEqual({
50
- result: 'reject',
51
- severity: PeerErrorSeverity.HighToleranceError
52
- });
53
- // Should not try to resolve proposers if base validation fails
54
- expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
55
- });
56
- it('returns ignore if previous slot proposal is within clock tolerance', async ()=>{
57
- const previousProposer = getSigner();
58
- const header = makeHeader(1, 99, 99);
59
- const mockProposal = await makeProposal({
60
- blockHeader: header,
61
- lastBlockHeader: header,
62
- signer: previousProposer
63
- });
64
- // Mock getEpochAndSlotNow to return time WITHIN clock tolerance (100ms elapsed)
65
- epochCache.getEpochAndSlotNow.mockReturnValue({
66
- epoch: 1,
67
- slot: currentSlot,
68
- ts: 1000n,
69
- nowMs: 1000100n
70
- });
71
- mockGetProposer(getAddress(), getAddress(), getAddress(previousProposer));
72
- const result = await validator.validate(mockProposal);
73
- expect(result).toEqual({
74
- result: 'ignore'
75
- });
76
- });
77
- it('returns mid tolerance error if proposer is not current proposer for current slot', async ()=>{
78
- const currentProposer = getSigner();
79
- const nextProposer = getSigner();
80
- const invalidProposer = getSigner();
81
- const header = makeHeader(1, 100, 100);
82
- const mockProposal = await makeProposal({
83
- blockHeader: header,
84
- lastBlockHeader: header,
85
- signer: invalidProposer
86
- });
87
- mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
88
- const result = await validator.validate(mockProposal);
89
- expect(result).toEqual({
90
- result: 'reject',
91
- severity: PeerErrorSeverity.MidToleranceError
92
- });
93
- });
94
- it('returns mid tolerance error if proposer is not next proposer for next slot', async ()=>{
95
- const currentProposer = getSigner();
96
- const nextProposer = getSigner();
97
- const invalidProposer = getSigner();
98
- const header = makeHeader(1, 101, 101);
99
- const mockProposal = await makeProposal({
100
- blockHeader: header,
101
- lastBlockHeader: header,
102
- signer: invalidProposer
103
- });
104
- mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
105
- const result = await validator.validate(mockProposal);
106
- expect(result).toEqual({
107
- result: 'reject',
108
- severity: PeerErrorSeverity.MidToleranceError
109
- });
110
- });
111
- it('returns mid tolerance error if proposer is current proposer but proposal is for next slot', async ()=>{
112
- const currentProposer = getSigner();
113
- const nextProposer = getSigner();
114
- const header = makeHeader(1, 101, 101);
115
- const mockProposal = await makeProposal({
116
- blockHeader: header,
117
- lastBlockHeader: header,
118
- signer: currentProposer
119
- });
120
- mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
121
- const result = await validator.validate(mockProposal);
122
- expect(result).toEqual({
123
- result: 'reject',
124
- severity: PeerErrorSeverity.MidToleranceError
125
- });
126
- });
127
- it('returns undefined if proposal is valid for current slot and proposer', async ()=>{
128
- const currentProposer = getSigner();
129
- const nextProposer = getSigner();
130
- const header = makeHeader(1, 100, 100);
131
- const mockProposal = await makeProposal({
132
- blockHeader: header,
133
- lastBlockHeader: header,
134
- signer: currentProposer
135
- });
136
- mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
137
- const result = await validator.validate(mockProposal);
138
- expect(result).toEqual({
139
- result: 'accept'
140
- });
141
- });
142
- it('returns undefined if proposal is valid for next slot and proposer', async ()=>{
143
- const currentProposer = getSigner();
144
- const nextProposer = getSigner();
145
- const header = makeHeader(1, 101, 101);
146
- const mockProposal = await makeProposal({
147
- blockHeader: header,
148
- lastBlockHeader: header,
149
- signer: nextProposer
150
- });
151
- mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
152
- const result = await validator.validate(mockProposal);
153
- expect(result).toEqual({
154
- result: 'accept'
155
- });
156
- });
157
- describe('transaction permission validation', ()=>{
158
- it('returns mid tolerance error if txs not permitted and proposal contains txHashes', async ()=>{
159
- const currentProposer = getSigner();
160
- const validatorWithTxsDisabled = validatorFactory(epochCache, {
161
- txsPermitted: false
162
- });
163
- const header = makeHeader(1, 100, 100);
164
- const mockProposal = await makeProposal({
165
- blockHeader: header,
166
- lastBlockHeader: header,
167
- signer: currentProposer,
168
- txHashes: getTxHashes(2)
169
- });
170
- mockGetProposer(getAddress(currentProposer), getAddress());
171
- const result = await validatorWithTxsDisabled.validate(mockProposal);
172
- expect(result).toEqual({
173
- result: 'reject',
174
- severity: PeerErrorSeverity.MidToleranceError
175
- });
176
- });
177
- it('returns undefined if txs not permitted but proposal has no txHashes', async ()=>{
178
- const currentProposer = getSigner();
179
- const validatorWithTxsDisabled = validatorFactory(epochCache, {
180
- txsPermitted: false
181
- });
182
- const header = makeHeader(1, 100, 100);
183
- const mockProposal = await makeProposal({
184
- blockHeader: header,
185
- lastBlockHeader: header,
186
- signer: currentProposer,
187
- txHashes: getTxHashes(0)
188
- });
189
- mockGetProposer(getAddress(currentProposer), getAddress());
190
- const result = await validatorWithTxsDisabled.validate(mockProposal);
191
- expect(result).toEqual({
192
- result: 'accept'
193
- });
194
- });
195
- it('returns undefined if txs permitted and proposal contains txHashes', async ()=>{
196
- const currentProposer = getSigner();
197
- const header = makeHeader(1, 100, 100);
198
- const mockProposal = await makeProposal({
199
- blockHeader: header,
200
- lastBlockHeader: header,
201
- signer: currentProposer,
202
- txHashes: getTxHashes(2)
203
- });
204
- mockGetProposer(getAddress(currentProposer), getAddress());
205
- const result = await validator.validate(mockProposal);
206
- expect(result).toEqual({
207
- result: 'accept'
208
- });
209
- });
210
- });
211
- });
212
- }