@aztec/p2p 0.0.1-commit.f295ac2 → 0.0.1-commit.fc805bf

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 (263) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +1 -1
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +6 -5
  7. package/dest/client/p2p_client.d.ts +1 -1
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +9 -2
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  11. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  16. package/dest/config.d.ts +8 -2
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +2 -0
  19. package/dest/mem_pools/instrumentation.d.ts +1 -1
  20. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  21. package/dest/mem_pools/instrumentation.js +2 -2
  22. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
  23. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  24. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
  25. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
  27. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
  29. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  30. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +8 -1
  31. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
  32. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  34. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  35. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  36. package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
  37. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  38. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  39. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  40. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  41. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  42. package/dest/msg_validators/clock_tolerance.js +37 -0
  43. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
  44. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  45. package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
  46. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
  47. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
  48. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
  49. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  50. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  51. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  52. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  53. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  54. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  55. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  56. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  57. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  58. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  59. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  61. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  62. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  63. package/dest/msg_validators/tx_validator/factory.js +21 -11
  64. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  65. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/tx_validator/gas_validator.js +3 -2
  67. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  68. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/index.js +1 -0
  70. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  71. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  73. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  74. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  76. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  77. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  78. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  79. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  80. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  82. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  83. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  85. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  86. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  88. package/dest/services/data_store.d.ts +1 -1
  89. package/dest/services/data_store.d.ts.map +1 -1
  90. package/dest/services/data_store.js +10 -6
  91. package/dest/services/discv5/discV5_service.js +1 -1
  92. package/dest/services/dummy_service.d.ts +13 -1
  93. package/dest/services/dummy_service.d.ts.map +1 -1
  94. package/dest/services/dummy_service.js +39 -0
  95. package/dest/services/encoding.d.ts +1 -1
  96. package/dest/services/encoding.d.ts.map +1 -1
  97. package/dest/services/encoding.js +2 -3
  98. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  99. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  100. package/dest/services/libp2p/instrumentation.js +14 -3
  101. package/dest/services/libp2p/libp2p_service.d.ts +13 -7
  102. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  103. package/dest/services/libp2p/libp2p_service.js +60 -51
  104. package/dest/services/peer-manager/metrics.d.ts +2 -2
  105. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  106. package/dest/services/peer-manager/metrics.js +20 -5
  107. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  108. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  109. package/dest/services/peer-manager/peer_scoring.js +8 -2
  110. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  111. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  112. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  113. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  114. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  115. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  116. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  117. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  118. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  119. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  120. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  121. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  122. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  123. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  124. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  125. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  126. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  127. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  128. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  129. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  130. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  131. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  132. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  133. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  134. package/dest/services/reqresp/interface.d.ts +5 -3
  135. package/dest/services/reqresp/interface.d.ts.map +1 -1
  136. package/dest/services/reqresp/interface.js +2 -2
  137. package/dest/services/reqresp/metrics.d.ts +6 -5
  138. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  139. package/dest/services/reqresp/metrics.js +17 -5
  140. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  141. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  142. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  143. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  144. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  145. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  146. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -6
  147. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  148. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +43 -13
  149. package/dest/services/reqresp/reqresp.d.ts +6 -1
  150. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  151. package/dest/services/reqresp/reqresp.js +58 -22
  152. package/dest/services/service.d.ts +4 -1
  153. package/dest/services/service.d.ts.map +1 -1
  154. package/dest/services/tx_collection/config.d.ts +4 -1
  155. package/dest/services/tx_collection/config.d.ts.map +1 -1
  156. package/dest/services/tx_collection/config.js +9 -1
  157. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
  158. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  159. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  160. package/dest/services/tx_collection/index.d.ts +2 -1
  161. package/dest/services/tx_collection/index.d.ts.map +1 -1
  162. package/dest/services/tx_collection/index.js +1 -0
  163. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  164. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  165. package/dest/services/tx_collection/instrumentation.js +9 -2
  166. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  167. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  168. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  169. package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
  170. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  171. package/dest/services/tx_collection/tx_collection.d.ts +8 -8
  172. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  173. package/dest/services/tx_collection/tx_collection.js +5 -5
  174. package/dest/services/tx_provider.d.ts +3 -3
  175. package/dest/services/tx_provider.d.ts.map +1 -1
  176. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  177. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  178. package/dest/services/tx_provider_instrumentation.js +5 -5
  179. package/dest/test-helpers/index.d.ts +3 -1
  180. package/dest/test-helpers/index.d.ts.map +1 -1
  181. package/dest/test-helpers/index.js +2 -0
  182. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  183. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  184. package/dest/test-helpers/test_tx_provider.js +41 -0
  185. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  186. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  187. package/dest/test-helpers/testbench-utils.js +297 -0
  188. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  189. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  190. package/dest/testbench/p2p_client_testbench_worker.js +212 -133
  191. package/dest/testbench/worker_client_manager.d.ts +51 -6
  192. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  193. package/dest/testbench/worker_client_manager.js +226 -44
  194. package/package.json +14 -14
  195. package/src/bootstrap/bootstrap.ts +7 -4
  196. package/src/client/factory.ts +6 -10
  197. package/src/client/p2p_client.ts +14 -7
  198. package/src/client/test/tx_proposal_collector/README.md +227 -0
  199. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  200. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  201. package/src/config.ts +6 -1
  202. package/src/mem_pools/instrumentation.ts +2 -1
  203. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
  204. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
  205. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
  206. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +10 -7
  207. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  208. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
  209. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
  210. package/src/msg_validators/clock_tolerance.ts +51 -0
  211. package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
  212. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
  213. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  214. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  215. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  216. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  217. package/src/msg_validators/tx_validator/factory.ts +64 -23
  218. package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
  219. package/src/msg_validators/tx_validator/index.ts +1 -0
  220. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  221. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  222. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  223. package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
  224. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  225. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  226. package/src/services/data_store.ts +10 -7
  227. package/src/services/discv5/discV5_service.ts +1 -1
  228. package/src/services/dummy_service.ts +45 -0
  229. package/src/services/encoding.ts +2 -3
  230. package/src/services/libp2p/instrumentation.ts +15 -2
  231. package/src/services/libp2p/libp2p_service.ts +99 -73
  232. package/src/services/peer-manager/metrics.ts +21 -4
  233. package/src/services/peer-manager/peer_scoring.ts +4 -1
  234. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  235. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  236. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  237. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  238. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  239. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  240. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  241. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  242. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  243. package/src/services/reqresp/interface.ts +5 -2
  244. package/src/services/reqresp/metrics.ts +34 -9
  245. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  246. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  247. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +51 -9
  248. package/src/services/reqresp/reqresp.ts +66 -19
  249. package/src/services/service.ts +4 -0
  250. package/src/services/tx_collection/config.ts +15 -1
  251. package/src/services/tx_collection/fast_tx_collection.ts +36 -13
  252. package/src/services/tx_collection/index.ts +5 -0
  253. package/src/services/tx_collection/instrumentation.ts +11 -2
  254. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  255. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  256. package/src/services/tx_collection/tx_collection.ts +8 -8
  257. package/src/services/tx_provider.ts +2 -2
  258. package/src/services/tx_provider_instrumentation.ts +11 -5
  259. package/src/test-helpers/index.ts +2 -0
  260. package/src/test-helpers/test_tx_provider.ts +64 -0
  261. package/src/test-helpers/testbench-utils.ts +374 -0
  262. package/src/testbench/p2p_client_testbench_worker.ts +321 -126
  263. package/src/testbench/worker_client_manager.ts +304 -47
@@ -6,9 +6,8 @@ import { type Logger, createLibp2pComponentLogger, createLogger } from '@aztec/f
6
6
  import { RunningPromise } from '@aztec/foundation/running-promise';
7
7
  import { Timer } from '@aztec/foundation/timer';
8
8
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
9
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
10
9
  import { protocolContractsHash } from '@aztec/protocol-contracts';
11
- import type { EthAddress, L2BlockNew, L2BlockSource } from '@aztec/stdlib/block';
10
+ import type { EthAddress, L2Block, L2BlockSource } from '@aztec/stdlib/block';
12
11
  import type { ContractDataSource } from '@aztec/stdlib/contract';
13
12
  import { GasFees } from '@aztec/stdlib/gas';
14
13
  import type { ClientProtocolCircuitVerifier, PeerInfo, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
@@ -20,6 +19,7 @@ import {
20
19
  type Gossipable,
21
20
  P2PClientType,
22
21
  P2PMessage,
22
+ type ValidationResult as P2PValidationResult,
23
23
  PeerErrorSeverity,
24
24
  TopicType,
25
25
  createTopicString,
@@ -69,14 +69,12 @@ import {
69
69
  } from '../../msg_validators/index.js';
70
70
  import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
71
71
  import { getDefaultAllowedSetupFunctions } from '../../msg_validators/tx_validator/allowed_public_setup.js';
72
- import { type MessageValidator, createTxMessageValidators } from '../../msg_validators/tx_validator/factory.js';
73
72
  import {
74
- AggregateTxValidator,
75
- DataTxValidator,
76
- DoubleSpendTxValidator,
77
- MetadataTxValidator,
78
- TxProofValidator,
79
- } from '../../msg_validators/tx_validator/index.js';
73
+ type MessageValidator,
74
+ createTxMessageValidators,
75
+ createTxReqRespValidator,
76
+ } from '../../msg_validators/tx_validator/factory.js';
77
+ import { DoubleSpendTxValidator } from '../../msg_validators/tx_validator/index.js';
80
78
  import { GossipSubEvent } from '../../types/index.js';
81
79
  import { type PubSubLibp2p, convertToMultiaddr } from '../../util.js';
82
80
  import { getVersions } from '../../versioning.js';
@@ -87,10 +85,12 @@ import { gossipScoreThresholds } from '../gossipsub/scoring.js';
87
85
  import type { PeerManagerInterface } from '../peer-manager/interface.js';
88
86
  import { PeerManager } from '../peer-manager/peer_manager.js';
89
87
  import { PeerScoring } from '../peer-manager/peer_scoring.js';
88
+ import type { BatchTxRequesterLibP2PService } from '../reqresp/batch-tx-requester/interface.js';
90
89
  import type { P2PReqRespConfig } from '../reqresp/config.js';
91
90
  import {
92
91
  DEFAULT_SUB_PROTOCOL_VALIDATORS,
93
92
  type ReqRespInterface,
93
+ type ReqRespResponse,
94
94
  ReqRespSubProtocol,
95
95
  type ReqRespSubProtocolHandler,
96
96
  type ReqRespSubProtocolHandlers,
@@ -284,14 +284,14 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
284
284
 
285
285
  const datastore = new AztecDatastore(peerStore);
286
286
 
287
- const otelMetricsAdapter = new OtelMetricsAdapter(telemetry);
287
+ const otelMetricsAdapter = new OtelMetricsAdapter(telemetry, logger.getBindings());
288
288
 
289
289
  const peerDiscoveryService = new DiscV5Service(
290
290
  peerId,
291
291
  config,
292
292
  packageVersion,
293
293
  telemetry,
294
- createLogger(`${logger.module}:discv5_service`),
294
+ createLogger(`${logger.module}:discv5_service`, logger.getBindings()),
295
295
  );
296
296
 
297
297
  // Seed libp2p's bootstrap discovery with private and trusted peers
@@ -452,7 +452,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
452
452
  connectionManager: components.connectionManager,
453
453
  }),
454
454
  },
455
- logger: createLibp2pComponentLogger(logger.module),
455
+ logger: createLibp2pComponentLogger(logger.module, logger.getBindings()),
456
456
  });
457
457
 
458
458
  const peerScoring = new PeerScoring(config, telemetry);
@@ -640,6 +640,15 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
640
640
  return this.reqresp.sendBatchRequest(protocol, requests, pinnedPeerId);
641
641
  }
642
642
 
643
+ public sendRequestToPeer(
644
+ peerId: PeerId,
645
+ subProtocol: ReqRespSubProtocol,
646
+ payload: Buffer,
647
+ dialTimeout?: number,
648
+ ): Promise<ReqRespResponse> {
649
+ return this.reqresp.sendRequestToPeer(peerId, subProtocol, payload, dialTimeout);
650
+ }
651
+
643
652
  /**
644
653
  * Get the ENR of the node
645
654
  * @returns The ENR of the node
@@ -923,7 +932,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
923
932
  const validationFunc: () => Promise<ReceivedMessageValidationResult<CheckpointAttestation>> = async () => {
924
933
  const attestation = CheckpointAttestation.fromBuffer(payloadData);
925
934
  const pool = this.mempools.attestationPool;
926
- const isValid = await this.validateCheckpointAttestation(source, attestation);
935
+ const validationResult = await this.validateCheckpointAttestation(source, attestation);
936
+ const isValid = validationResult.result === 'accept';
927
937
  const exists = isValid && (await pool.hasCheckpointAttestation(attestation));
928
938
 
929
939
  let canAdd = true;
@@ -942,9 +952,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
942
952
  [Attributes.P2P_ID]: source.toString(),
943
953
  });
944
954
 
945
- if (!isValid) {
955
+ if (validationResult.result === 'reject') {
946
956
  return { result: TopicValidatorResult.Reject };
947
- } else if (exists) {
957
+ } else if (validationResult.result === 'ignore' || exists) {
948
958
  return { result: TopicValidatorResult.Ignore, obj: attestation };
949
959
  } else if (!canAdd) {
950
960
  this.logger.warn(`Dropping checkpoint attestation due to per-(slot, proposalId) attestation cap`, {
@@ -985,7 +995,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
985
995
  private async processBlockFromPeer(payloadData: Buffer, msgId: string, source: PeerId): Promise<void> {
986
996
  const validationFunc: () => Promise<ReceivedMessageValidationResult<BlockProposal>> = async () => {
987
997
  const block = BlockProposal.fromBuffer(payloadData);
988
- const isValid = await this.validateBlockProposal(source, block);
998
+ const validationResult = await this.validateBlockProposal(source, block);
999
+ const isValid = validationResult.result === 'accept';
989
1000
  const pool = this.mempools.attestationPool;
990
1001
 
991
1002
  const exists = isValid && (await pool.hasBlockProposal(block));
@@ -999,9 +1010,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
999
1010
  [Attributes.P2P_ID]: source.toString(),
1000
1011
  });
1001
1012
 
1002
- if (!isValid) {
1013
+ if (validationResult.result === 'reject') {
1003
1014
  return { result: TopicValidatorResult.Reject };
1004
- } else if (exists) {
1015
+ } else if (validationResult.result === 'ignore' || exists) {
1005
1016
  return { result: TopicValidatorResult.Ignore, obj: block };
1006
1017
  } else if (!canAdd) {
1007
1018
  this.peerManager.penalizePeer(source, PeerErrorSeverity.MidToleranceError);
@@ -1081,7 +1092,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1081
1092
  // TODO(palla/mbps): This pattern is repeated across multiple message handlers, consider abstracting it.
1082
1093
  const validationFunc: () => Promise<ReceivedMessageValidationResult<CheckpointProposal>> = async () => {
1083
1094
  const checkpoint = CheckpointProposal.fromBuffer(payloadData);
1084
- const isValid = await this.validateCheckpointProposal(source, checkpoint);
1095
+ const validationResult = await this.validateCheckpointProposal(source, checkpoint);
1096
+ const isValid = validationResult.result === 'accept';
1085
1097
  const pool = this.mempools.attestationPool;
1086
1098
 
1087
1099
  const exists = isValid && (await pool.hasCheckpointProposal(checkpoint));
@@ -1095,9 +1107,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1095
1107
  [Attributes.P2P_ID]: source.toString(),
1096
1108
  });
1097
1109
 
1098
- if (!isValid) {
1110
+ if (validationResult.result === 'reject') {
1099
1111
  return { result: TopicValidatorResult.Reject };
1100
- } else if (exists) {
1112
+ } else if (validationResult.result === 'ignore' || exists) {
1101
1113
  return { result: TopicValidatorResult.Ignore, obj: checkpoint };
1102
1114
  } else if (!canAdd) {
1103
1115
  this.peerManager.penalizePeer(source, PeerErrorSeverity.MidToleranceError);
@@ -1202,7 +1214,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1202
1214
  * @returns True if the requested block transactions are valid, false otherwise.
1203
1215
  */
1204
1216
  @trackSpan('Libp2pService.validateRequestedBlockTxs', request => ({
1205
- [Attributes.BLOCK_HASH]: request.blockHash.toString(),
1217
+ [Attributes.BLOCK_ARCHIVE]: request.archiveRoot.toString(),
1206
1218
  }))
1207
1219
  private async validateRequestedBlockTxs(
1208
1220
  request: BlockTxsRequest,
@@ -1212,10 +1224,10 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1212
1224
  const requestedTxValidator = this.createRequestedTxValidator();
1213
1225
 
1214
1226
  try {
1215
- if (!response.blockHash.equals(request.blockHash)) {
1227
+ if (!response.archiveRoot.equals(request.archiveRoot)) {
1216
1228
  this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
1217
1229
  throw new ValidationError(
1218
- `Received block txs for unexpected block: expected ${request.blockHash.toString()}, got ${response.blockHash.toString()}`,
1230
+ `Received block txs for unexpected archive root: expected ${request.archiveRoot.toString()}, got ${response.archiveRoot.toString()}`,
1219
1231
  );
1220
1232
  }
1221
1233
 
@@ -1245,7 +1257,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1245
1257
  }
1246
1258
 
1247
1259
  // Given proposal (should have locally), ensure returned txs are valid subset and match request indices
1248
- const proposal = await this.mempools.attestationPool.getBlockProposal(request.blockHash.toString());
1260
+ const proposal = await this.mempools.attestationPool.getBlockProposal(request.archiveRoot.toString());
1249
1261
  if (proposal) {
1250
1262
  // Build intersected indices
1251
1263
  const intersectIdx = request.txIndices.getTrueIndices().filter(i => response.txIndices.isSet(i));
@@ -1265,7 +1277,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1265
1277
  } else {
1266
1278
  // No local proposal, cannot check the membership/order of the returned txs
1267
1279
  this.logger.warn(
1268
- `Block proposal not found for block hash ${request.blockHash.toString()}; cannot validate membership/order of returned txs`,
1280
+ `Block proposal not found for archive root ${request.archiveRoot.toString()}; cannot validate membership/order of returned txs`,
1269
1281
  );
1270
1282
  return false;
1271
1283
  }
@@ -1304,7 +1316,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1304
1316
  const requested = new Set(requestedTxHash.map(h => h.toString()));
1305
1317
  const requestedTxValidator = this.createRequestedTxValidator();
1306
1318
 
1307
- //TODO: (mralj) - this is somewhat naive implementation, if single tx is invlid we consider the whole response invalid.
1319
+ //TODO: (mralj) - this is somewhat naive implementation, if single tx is invalid we consider the whole response invalid.
1308
1320
  // I think we should still extract the valid txs and return them, so that we can still use the response.
1309
1321
  try {
1310
1322
  await Promise.all(responseTx.map(tx => this.validateRequestedTx(tx, peerId, requestedTxValidator, requested)));
@@ -1336,7 +1348,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1336
1348
  }))
1337
1349
  private async validateRequestedBlock(
1338
1350
  requestedBlockNumber: Fr,
1339
- responseBlock: L2BlockNew,
1351
+ responseBlock: L2Block,
1340
1352
  peerId: PeerId,
1341
1353
  ): Promise<boolean> {
1342
1354
  try {
@@ -1367,27 +1379,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1367
1379
  }
1368
1380
  }
1369
1381
 
1370
- private createRequestedTxValidator(): TxValidator {
1371
- return new AggregateTxValidator(
1372
- new DataTxValidator(),
1373
- new MetadataTxValidator({
1374
- l1ChainId: new Fr(this.config.l1ChainId),
1375
- rollupVersion: new Fr(this.config.rollupVersion),
1376
- protocolContractsHash,
1377
- vkTreeRoot: getVKTreeRoot(),
1378
- }),
1379
- new TxProofValidator(this.proofVerifier),
1380
- );
1381
- }
1382
-
1383
1382
  private async validateRequestedTx(tx: Tx, peerId: PeerId, txValidator: TxValidator, requested?: Set<`0x${string}`>) {
1384
1383
  const penalize = (severity: PeerErrorSeverity) => this.peerManager.penalizePeer(peerId, severity);
1385
-
1386
- if (!(await tx.validateTxHash())) {
1387
- penalize(PeerErrorSeverity.MidToleranceError);
1388
- throw new ValidationError(`Received tx with invalid hash ${tx.getTxHash().toString()}.`);
1389
- }
1390
-
1391
1384
  if (requested && !requested.has(tx.getTxHash().toString())) {
1392
1385
  penalize(PeerErrorSeverity.MidToleranceError);
1393
1386
  throw new ValidationError(`Received tx with hash ${tx.getTxHash().toString()} that was not requested.`);
@@ -1400,6 +1393,13 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1400
1393
  }
1401
1394
  }
1402
1395
 
1396
+ private createRequestedTxValidator(): TxValidator {
1397
+ return createTxReqRespValidator(this.proofVerifier, {
1398
+ l1ChainId: this.config.l1ChainId,
1399
+ rollupVersion: this.config.rollupVersion,
1400
+ });
1401
+ }
1402
+
1403
1403
  @trackSpan('Libp2pService.validatePropagatedTx', tx => ({
1404
1404
  [Attributes.TX_HASH]: tx.getTxHash().toString(),
1405
1405
  }))
@@ -1442,6 +1442,22 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1442
1442
  return gasFees;
1443
1443
  }
1444
1444
 
1445
+ /**
1446
+ * Get the BatchTxRequesterLibP2PService dependencies for creating BatchTxRequester instances
1447
+ */
1448
+ public getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
1449
+ return {
1450
+ reqResp: this.reqresp,
1451
+ connectionSampler: this.reqresp.getConnectionSampler(),
1452
+ txValidatorConfig: {
1453
+ l1ChainId: this.config.l1ChainId,
1454
+ rollupVersion: this.config.rollupVersion,
1455
+ proofVerifier: this.proofVerifier,
1456
+ },
1457
+ peerScoring: this.peerManager,
1458
+ };
1459
+ }
1460
+
1445
1461
  public async validate(txs: Tx[]): Promise<void> {
1446
1462
  const currentBlockNumber = await this.archiver.getBlockNumber();
1447
1463
 
@@ -1492,6 +1508,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1492
1508
  this.proofVerifier,
1493
1509
  !this.config.disableTransactions,
1494
1510
  allowedInSetup,
1511
+ this.logger.getBindings(),
1495
1512
  );
1496
1513
  }
1497
1514
 
@@ -1545,15 +1562,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1545
1562
  return PeerErrorSeverity.HighToleranceError;
1546
1563
  }
1547
1564
 
1548
- const snapshotValidator = new DoubleSpendTxValidator({
1549
- nullifiersExist: async (nullifiers: Buffer[]) => {
1550
- const merkleTree = this.worldStateSynchronizer.getSnapshot(
1551
- BlockNumber(blockNumber - this.config.doubleSpendSeverePeerPenaltyWindow),
1552
- );
1553
- const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
1554
- return indices.map(index => index !== undefined);
1565
+ const snapshotValidator = new DoubleSpendTxValidator(
1566
+ {
1567
+ nullifiersExist: async (nullifiers: Buffer[]) => {
1568
+ const merkleTree = this.worldStateSynchronizer.getSnapshot(
1569
+ BlockNumber(blockNumber - this.config.doubleSpendSeverePeerPenaltyWindow),
1570
+ );
1571
+ const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
1572
+ return indices.map(index => index !== undefined);
1573
+ },
1555
1574
  },
1556
- });
1575
+ this.logger.getBindings(),
1576
+ );
1557
1577
 
1558
1578
  const validSnapshot = await snapshotValidator.validateTx(tx);
1559
1579
  if (validSnapshot.result !== 'valid') {
@@ -1574,15 +1594,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1574
1594
  [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
1575
1595
  [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then(i => i.toString()),
1576
1596
  }))
1577
- public async validateCheckpointAttestation(peerId: PeerId, attestation: CheckpointAttestation): Promise<boolean> {
1578
- const severity = await this.checkpointAttestationValidator.validate(attestation);
1579
- if (severity) {
1597
+ public async validateCheckpointAttestation(
1598
+ peerId: PeerId,
1599
+ attestation: CheckpointAttestation,
1600
+ ): Promise<P2PValidationResult> {
1601
+ const result = await this.checkpointAttestationValidator.validate(attestation);
1602
+
1603
+ if (result.result === 'reject') {
1580
1604
  this.logger.debug(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1581
- this.peerManager.penalizePeer(peerId, severity);
1582
- return false;
1605
+ this.peerManager.penalizePeer(peerId, result.severity);
1583
1606
  }
1584
1607
 
1585
- return true;
1608
+ return result;
1586
1609
  }
1587
1610
 
1588
1611
  /**
@@ -1594,15 +1617,15 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1594
1617
  @trackSpan('Libp2pService.validateBlockProposal', (_peerId, block) => ({
1595
1618
  [Attributes.SLOT_NUMBER]: block.slotNumber.toString(),
1596
1619
  }))
1597
- public async validateBlockProposal(peerId: PeerId, block: BlockProposal): Promise<boolean> {
1598
- const severity = await this.blockProposalValidator.validate(block);
1599
- if (severity) {
1620
+ public async validateBlockProposal(peerId: PeerId, block: BlockProposal): Promise<P2PValidationResult> {
1621
+ const result = await this.blockProposalValidator.validate(block);
1622
+
1623
+ if (result.result === 'reject') {
1600
1624
  this.logger.debug(`Penalizing peer ${peerId} for block proposal validation failure`);
1601
- this.peerManager.penalizePeer(peerId, severity);
1602
- return false;
1625
+ this.peerManager.penalizePeer(peerId, result.severity);
1603
1626
  }
1604
1627
 
1605
- return true;
1628
+ return result;
1606
1629
  }
1607
1630
 
1608
1631
  /**
@@ -1614,15 +1637,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1614
1637
  @trackSpan('Libp2pService.validateCheckpointProposal', (_peerId, checkpoint) => ({
1615
1638
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1616
1639
  }))
1617
- public async validateCheckpointProposal(peerId: PeerId, checkpoint: CheckpointProposal): Promise<boolean> {
1618
- const severity = await this.checkpointProposalValidator.validate(checkpoint);
1619
- if (severity) {
1640
+ public async validateCheckpointProposal(
1641
+ peerId: PeerId,
1642
+ checkpoint: CheckpointProposal,
1643
+ ): Promise<P2PValidationResult> {
1644
+ const result = await this.checkpointProposalValidator.validate(checkpoint);
1645
+
1646
+ if (result.result === 'reject') {
1620
1647
  this.logger.debug(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1621
- this.peerManager.penalizePeer(peerId, severity);
1622
- return false;
1648
+ this.peerManager.penalizePeer(peerId, result.severity);
1623
1649
  }
1624
1650
 
1625
- return true;
1651
+ return result;
1626
1652
  }
1627
1653
 
1628
1654
  public getPeerScore(peerId: PeerId): number {
@@ -6,12 +6,13 @@ import {
6
6
  type TelemetryClient,
7
7
  type Tracer,
8
8
  type UpDownCounter,
9
+ createUpDownCounterWithDefault,
9
10
  getTelemetryClient,
10
11
  } from '@aztec/telemetry-client';
11
12
 
12
13
  import type { PeerId } from '@libp2p/interface';
13
14
 
14
- import { type GoodByeReason, prettyGoodbyeReason } from '../reqresp/protocols/index.js';
15
+ import { GoodByeReason, prettyGoodbyeReason } from '../reqresp/protocols/index.js';
15
16
 
16
17
  export class PeerManagerMetrics {
17
18
  private sentGoodbyes: UpDownCounter;
@@ -31,10 +32,26 @@ export class PeerManagerMetrics {
31
32
  this.tracer = telemetryClient.getTracer(name);
32
33
 
33
34
  const meter = telemetryClient.getMeter(name);
34
- this.sentGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_SENT);
35
- this.receivedGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_RECEIVED);
35
+ const goodbyeReasonAttrs = {
36
+ [Attributes.P2P_GOODBYE_REASON]: [
37
+ prettyGoodbyeReason(GoodByeReason.SHUTDOWN),
38
+ prettyGoodbyeReason(GoodByeReason.MAX_PEERS),
39
+ prettyGoodbyeReason(GoodByeReason.LOW_SCORE),
40
+ prettyGoodbyeReason(GoodByeReason.BANNED),
41
+ prettyGoodbyeReason(GoodByeReason.WRONG_NETWORK),
42
+ prettyGoodbyeReason(GoodByeReason.UNKNOWN),
43
+ ],
44
+ };
45
+ this.sentGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_SENT, goodbyeReasonAttrs);
46
+ this.receivedGoodbyes = createUpDownCounterWithDefault(
47
+ meter,
48
+ Metrics.PEER_MANAGER_GOODBYES_RECEIVED,
49
+ goodbyeReasonAttrs,
50
+ );
36
51
  this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
37
- this.lowScoreDisconnects = meter.createUpDownCounter(Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS);
52
+ this.lowScoreDisconnects = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
53
+ [Attributes.P2P_PEER_SCORE_STATE]: ['Banned', 'Disconnect'],
54
+ });
38
55
  this.peerConnectionDuration = meter.createHistogram(Metrics.PEER_MANAGER_PEER_CONNECTION_DURATION);
39
56
  }
40
57
 
@@ -6,6 +6,7 @@ import {
6
6
  Metrics,
7
7
  type TelemetryClient,
8
8
  type UpDownCounter,
9
+ createUpDownCounterWithDefault,
9
10
  getTelemetryClient,
10
11
  } from '@aztec/telemetry-client';
11
12
 
@@ -52,7 +53,9 @@ export class PeerScoring {
52
53
 
53
54
  const meter = telemetry.getMeter('PeerScoring');
54
55
 
55
- this.peerStateCounter = meter.createUpDownCounter(Metrics.P2P_PEER_STATE_COUNT);
56
+ this.peerStateCounter = createUpDownCounterWithDefault(meter, Metrics.P2P_PEER_STATE_COUNT, {
57
+ [Attributes.P2P_PEER_SCORE_STATE]: ['Healthy', 'Disconnect', 'Banned'],
58
+ });
56
59
  }
57
60
 
58
61
  public penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity) {