@aztec/p2p 0.0.0-test.0

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 (311) hide show
  1. package/README.md +7 -0
  2. package/dest/bootstrap/bootstrap.d.ts +38 -0
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  4. package/dest/bootstrap/bootstrap.js +123 -0
  5. package/dest/client/factory.d.ts +21 -0
  6. package/dest/client/factory.d.ts.map +1 -0
  7. package/dest/client/factory.js +37 -0
  8. package/dest/client/index.d.ts +3 -0
  9. package/dest/client/index.d.ts.map +1 -0
  10. package/dest/client/index.js +2 -0
  11. package/dest/client/p2p_client.d.ts +314 -0
  12. package/dest/client/p2p_client.d.ts.map +1 -0
  13. package/dest/client/p2p_client.js +505 -0
  14. package/dest/config.d.ts +180 -0
  15. package/dest/config.d.ts.map +1 -0
  16. package/dest/config.js +193 -0
  17. package/dest/enr/generate-enr.d.ts +9 -0
  18. package/dest/enr/generate-enr.d.ts.map +1 -0
  19. package/dest/enr/generate-enr.js +30 -0
  20. package/dest/enr/index.d.ts +2 -0
  21. package/dest/enr/index.d.ts.map +1 -0
  22. package/dest/enr/index.js +1 -0
  23. package/dest/errors/reqresp.error.d.ts +28 -0
  24. package/dest/errors/reqresp.error.d.ts.map +1 -0
  25. package/dest/errors/reqresp.error.js +30 -0
  26. package/dest/index.d.ts +8 -0
  27. package/dest/index.d.ts.map +1 -0
  28. package/dest/index.js +7 -0
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +57 -0
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  31. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -0
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +195 -0
  35. package/dest/mem_pools/attestation_pool/index.d.ts +3 -0
  36. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  37. package/dest/mem_pools/attestation_pool/index.js +2 -0
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +22 -0
  39. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
  40. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +112 -0
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -0
  42. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -0
  43. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +129 -0
  44. package/dest/mem_pools/attestation_pool/mocks.d.ts +19 -0
  45. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  46. package/dest/mem_pools/attestation_pool/mocks.js +33 -0
  47. package/dest/mem_pools/index.d.ts +4 -0
  48. package/dest/mem_pools/index.d.ts.map +1 -0
  49. package/dest/mem_pools/index.js +1 -0
  50. package/dest/mem_pools/instrumentation.d.ts +30 -0
  51. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  52. package/dest/mem_pools/instrumentation.js +84 -0
  53. package/dest/mem_pools/interface.d.ts +11 -0
  54. package/dest/mem_pools/interface.d.ts.map +1 -0
  55. package/dest/mem_pools/interface.js +3 -0
  56. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +66 -0
  57. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +245 -0
  59. package/dest/mem_pools/tx_pool/index.d.ts +4 -0
  60. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/index.js +3 -0
  62. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +56 -0
  63. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/memory_tx_pool.js +141 -0
  65. package/dest/mem_pools/tx_pool/priority.d.ts +8 -0
  66. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/priority.js +10 -0
  68. package/dest/mem_pools/tx_pool/tx_pool.d.ts +66 -0
  69. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool/tx_pool.js +3 -0
  71. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +7 -0
  72. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +169 -0
  74. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
  75. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  76. package/dest/msg_validators/attestation_validator/attestation_validator.js +19 -0
  77. package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
  78. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  79. package/dest/msg_validators/attestation_validator/index.js +1 -0
  80. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
  81. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
  82. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +21 -0
  83. package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
  84. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
  85. package/dest/msg_validators/block_proposal_validator/index.js +1 -0
  86. package/dest/msg_validators/index.d.ts +4 -0
  87. package/dest/msg_validators/index.d.ts.map +1 -0
  88. package/dest/msg_validators/index.js +3 -0
  89. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  90. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  91. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +31 -0
  92. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +11 -0
  93. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  94. package/dest/msg_validators/tx_validator/block_header_validator.js +26 -0
  95. package/dest/msg_validators/tx_validator/data_validator.d.ts +6 -0
  96. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  97. package/dest/msg_validators/tx_validator/data_validator.js +107 -0
  98. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +12 -0
  99. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  100. package/dest/msg_validators/tx_validator/double_spend_validator.js +41 -0
  101. package/dest/msg_validators/tx_validator/index.d.ts +7 -0
  102. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  103. package/dest/msg_validators/tx_validator/index.js +6 -0
  104. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -0
  105. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  106. package/dest/msg_validators/tx_validator/metadata_validator.js +44 -0
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +9 -0
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  109. package/dest/msg_validators/tx_validator/tx_proof_validator.js +25 -0
  110. package/dest/services/data_store.d.ts +27 -0
  111. package/dest/services/data_store.d.ts.map +1 -0
  112. package/dest/services/data_store.js +188 -0
  113. package/dest/services/discv5/discV5_service.d.ts +42 -0
  114. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  115. package/dest/services/discv5/discV5_service.js +214 -0
  116. package/dest/services/dummy_service.d.ts +85 -0
  117. package/dest/services/dummy_service.d.ts.map +1 -0
  118. package/dest/services/dummy_service.js +92 -0
  119. package/dest/services/encoding.d.ts +31 -0
  120. package/dest/services/encoding.d.ts.map +1 -0
  121. package/dest/services/encoding.js +66 -0
  122. package/dest/services/gossipsub/scoring.d.ts +7 -0
  123. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  124. package/dest/services/gossipsub/scoring.js +10 -0
  125. package/dest/services/index.d.ts +3 -0
  126. package/dest/services/index.d.ts.map +1 -0
  127. package/dest/services/index.js +2 -0
  128. package/dest/services/libp2p/libp2p_service.d.ts +186 -0
  129. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  130. package/dest/services/libp2p/libp2p_service.js +712 -0
  131. package/dest/services/peer-manager/metrics.d.ts +12 -0
  132. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  133. package/dest/services/peer-manager/metrics.js +33 -0
  134. package/dest/services/peer-manager/peer_manager.d.ts +94 -0
  135. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  136. package/dest/services/peer-manager/peer_manager.js +445 -0
  137. package/dest/services/peer-manager/peer_scoring.d.ts +28 -0
  138. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  139. package/dest/services/peer-manager/peer_scoring.js +86 -0
  140. package/dest/services/reqresp/config.d.ts +16 -0
  141. package/dest/services/reqresp/config.d.ts.map +1 -0
  142. package/dest/services/reqresp/config.js +20 -0
  143. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +45 -0
  144. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -0
  145. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +88 -0
  146. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +61 -0
  147. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  148. package/dest/services/reqresp/connection-sampler/connection_sampler.js +181 -0
  149. package/dest/services/reqresp/index.d.ts +6 -0
  150. package/dest/services/reqresp/index.d.ts.map +1 -0
  151. package/dest/services/reqresp/index.js +4 -0
  152. package/dest/services/reqresp/interface.d.ts +116 -0
  153. package/dest/services/reqresp/interface.d.ts.map +1 -0
  154. package/dest/services/reqresp/interface.js +84 -0
  155. package/dest/services/reqresp/metrics.d.ts +15 -0
  156. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  157. package/dest/services/reqresp/metrics.js +55 -0
  158. package/dest/services/reqresp/protocols/block.d.ts +4 -0
  159. package/dest/services/reqresp/protocols/block.d.ts.map +1 -0
  160. package/dest/services/reqresp/protocols/block.js +8 -0
  161. package/dest/services/reqresp/protocols/goodbye.d.ts +51 -0
  162. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  163. package/dest/services/reqresp/protocols/goodbye.js +87 -0
  164. package/dest/services/reqresp/protocols/index.d.ts +9 -0
  165. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  166. package/dest/services/reqresp/protocols/index.js +7 -0
  167. package/dest/services/reqresp/protocols/ping.d.ts +9 -0
  168. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  169. package/dest/services/reqresp/protocols/ping.js +7 -0
  170. package/dest/services/reqresp/protocols/status.d.ts +9 -0
  171. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  172. package/dest/services/reqresp/protocols/status.js +7 -0
  173. package/dest/services/reqresp/protocols/tx.d.ts +13 -0
  174. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  175. package/dest/services/reqresp/protocols/tx.js +20 -0
  176. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  177. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  178. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  179. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +102 -0
  180. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  181. package/dest/services/reqresp/rate-limiter/rate_limiter.js +184 -0
  182. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  183. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  184. package/dest/services/reqresp/rate-limiter/rate_limits.js +54 -0
  185. package/dest/services/reqresp/reqresp.d.ts +166 -0
  186. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  187. package/dest/services/reqresp/reqresp.js +516 -0
  188. package/dest/services/reqresp/status.d.ts +31 -0
  189. package/dest/services/reqresp/status.d.ts.map +1 -0
  190. package/dest/services/reqresp/status.js +51 -0
  191. package/dest/services/service.d.ts +87 -0
  192. package/dest/services/service.d.ts.map +1 -0
  193. package/dest/services/service.js +5 -0
  194. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  195. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  196. package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
  197. package/dest/test-helpers/get-ports.d.ts +7 -0
  198. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  199. package/dest/test-helpers/get-ports.js +8 -0
  200. package/dest/test-helpers/index.d.ts +6 -0
  201. package/dest/test-helpers/index.d.ts.map +1 -0
  202. package/dest/test-helpers/index.js +5 -0
  203. package/dest/test-helpers/make-enrs.d.ts +16 -0
  204. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  205. package/dest/test-helpers/make-enrs.js +32 -0
  206. package/dest/test-helpers/make-test-p2p-clients.d.ts +36 -0
  207. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  208. package/dest/test-helpers/make-test-p2p-clients.js +68 -0
  209. package/dest/test-helpers/reqresp-nodes.d.ts +66 -0
  210. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  211. package/dest/test-helpers/reqresp-nodes.js +207 -0
  212. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -0
  213. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  214. package/dest/testbench/p2p_client_testbench_worker.js +132 -0
  215. package/dest/testbench/parse_log_file.d.ts +2 -0
  216. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  217. package/dest/testbench/parse_log_file.js +131 -0
  218. package/dest/testbench/testbench.d.ts +2 -0
  219. package/dest/testbench/testbench.d.ts.map +1 -0
  220. package/dest/testbench/testbench.js +61 -0
  221. package/dest/testbench/worker_client_manager.d.ts +56 -0
  222. package/dest/testbench/worker_client_manager.d.ts.map +1 -0
  223. package/dest/testbench/worker_client_manager.js +266 -0
  224. package/dest/types/index.d.ts +32 -0
  225. package/dest/types/index.d.ts.map +1 -0
  226. package/dest/types/index.js +28 -0
  227. package/dest/util.d.ts +53 -0
  228. package/dest/util.d.ts.map +1 -0
  229. package/dest/util.js +140 -0
  230. package/dest/versioning.d.ts +12 -0
  231. package/dest/versioning.d.ts.map +1 -0
  232. package/dest/versioning.js +33 -0
  233. package/package.json +127 -0
  234. package/src/bootstrap/bootstrap.ts +146 -0
  235. package/src/client/factory.ts +89 -0
  236. package/src/client/index.ts +2 -0
  237. package/src/client/p2p_client.ts +754 -0
  238. package/src/config.ts +371 -0
  239. package/src/enr/generate-enr.ts +39 -0
  240. package/src/enr/index.ts +1 -0
  241. package/src/errors/reqresp.error.ts +35 -0
  242. package/src/index.ts +7 -0
  243. package/src/mem_pools/attestation_pool/attestation_pool.ts +62 -0
  244. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +230 -0
  245. package/src/mem_pools/attestation_pool/index.ts +2 -0
  246. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +159 -0
  247. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +161 -0
  248. package/src/mem_pools/attestation_pool/mocks.ts +44 -0
  249. package/src/mem_pools/index.ts +3 -0
  250. package/src/mem_pools/instrumentation.ts +126 -0
  251. package/src/mem_pools/interface.ts +12 -0
  252. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +309 -0
  253. package/src/mem_pools/tx_pool/index.ts +3 -0
  254. package/src/mem_pools/tx_pool/memory_tx_pool.ts +174 -0
  255. package/src/mem_pools/tx_pool/priority.ts +13 -0
  256. package/src/mem_pools/tx_pool/tx_pool.ts +76 -0
  257. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +130 -0
  258. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -0
  259. package/src/msg_validators/attestation_validator/index.ts +1 -0
  260. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +29 -0
  261. package/src/msg_validators/block_proposal_validator/index.ts +1 -0
  262. package/src/msg_validators/index.ts +3 -0
  263. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +32 -0
  264. package/src/msg_validators/tx_validator/block_header_validator.ts +25 -0
  265. package/src/msg_validators/tx_validator/data_validator.ts +106 -0
  266. package/src/msg_validators/tx_validator/double_spend_validator.ts +38 -0
  267. package/src/msg_validators/tx_validator/index.ts +6 -0
  268. package/src/msg_validators/tx_validator/metadata_validator.ts +48 -0
  269. package/src/msg_validators/tx_validator/tx_proof_validator.ts +18 -0
  270. package/src/services/data_store.ts +235 -0
  271. package/src/services/discv5/discV5_service.ts +256 -0
  272. package/src/services/dummy_service.ts +134 -0
  273. package/src/services/encoding.ts +79 -0
  274. package/src/services/gossipsub/scoring.ts +13 -0
  275. package/src/services/index.ts +2 -0
  276. package/src/services/libp2p/libp2p_service.ts +871 -0
  277. package/src/services/peer-manager/metrics.ts +41 -0
  278. package/src/services/peer-manager/peer_manager.ts +530 -0
  279. package/src/services/peer-manager/peer_scoring.ts +105 -0
  280. package/src/services/reqresp/config.ts +35 -0
  281. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +94 -0
  282. package/src/services/reqresp/connection-sampler/connection_sampler.ts +217 -0
  283. package/src/services/reqresp/index.ts +4 -0
  284. package/src/services/reqresp/interface.ts +185 -0
  285. package/src/services/reqresp/metrics.ts +57 -0
  286. package/src/services/reqresp/protocols/block.ts +15 -0
  287. package/src/services/reqresp/protocols/goodbye.ts +101 -0
  288. package/src/services/reqresp/protocols/index.ts +8 -0
  289. package/src/services/reqresp/protocols/ping.ts +8 -0
  290. package/src/services/reqresp/protocols/status.ts +8 -0
  291. package/src/services/reqresp/protocols/tx.ts +29 -0
  292. package/src/services/reqresp/rate-limiter/index.ts +1 -0
  293. package/src/services/reqresp/rate-limiter/rate_limiter.ts +228 -0
  294. package/src/services/reqresp/rate-limiter/rate_limits.ts +55 -0
  295. package/src/services/reqresp/reqresp.ts +661 -0
  296. package/src/services/reqresp/status.ts +59 -0
  297. package/src/services/service.ts +112 -0
  298. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  299. package/src/test-helpers/get-ports.ts +8 -0
  300. package/src/test-helpers/index.ts +5 -0
  301. package/src/test-helpers/make-enrs.ts +44 -0
  302. package/src/test-helpers/make-test-p2p-clients.ts +122 -0
  303. package/src/test-helpers/reqresp-nodes.ts +289 -0
  304. package/src/testbench/README.md +20 -0
  305. package/src/testbench/p2p_client_testbench_worker.ts +152 -0
  306. package/src/testbench/parse_log_file.ts +175 -0
  307. package/src/testbench/testbench.ts +66 -0
  308. package/src/testbench/worker_client_manager.ts +318 -0
  309. package/src/types/index.ts +36 -0
  310. package/src/util.ts +196 -0
  311. package/src/versioning.ts +50 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * A testbench worker that creates a p2p client and listens for commands from the parent.
3
+ *
4
+ * Used when running testbench commands
5
+ */
6
+ import { MockL2BlockSource } from '@aztec/archiver/test';
7
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
+ import { EthAddress } from '@aztec/foundation/eth-address';
9
+ import { createLogger } from '@aztec/foundation/log';
10
+ import { sleep } from '@aztec/foundation/sleep';
11
+ import type { DataStoreConfig } from '@aztec/kv-store/config';
12
+ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
13
+ import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
14
+ import { P2PClientType } from '@aztec/stdlib/p2p';
15
+ import { Tx, TxStatus } from '@aztec/stdlib/tx';
16
+
17
+ import type { Message, PeerId } from '@libp2p/interface';
18
+
19
+ import type { P2PConfig } from '../config.js';
20
+ import { createP2PClient } from '../index.js';
21
+ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
22
+ import type { TxPool } from '../mem_pools/tx_pool/index.js';
23
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
24
+
25
+ // Simple mock implementation
26
+ function mockTxPool(): TxPool {
27
+ // Mock all methods
28
+ return {
29
+ addTxs: () => Promise.resolve(),
30
+ getTxByHash: () => Promise.resolve(undefined),
31
+ getArchivedTxByHash: () => Promise.resolve(undefined),
32
+ markAsMined: () => Promise.resolve(),
33
+ markMinedAsPending: () => Promise.resolve(),
34
+ deleteTxs: () => Promise.resolve(),
35
+ getAllTxs: () => Promise.resolve([]),
36
+ getAllTxHashes: () => Promise.resolve([]),
37
+ getPendingTxHashes: () => Promise.resolve([]),
38
+ getMinedTxHashes: () => Promise.resolve([]),
39
+ getTxStatus: () => Promise.resolve(TxStatus.PENDING),
40
+ };
41
+ }
42
+
43
+ function mockAttestationPool(): AttestationPool {
44
+ return {
45
+ addAttestations: () => Promise.resolve(),
46
+ deleteAttestations: () => Promise.resolve(),
47
+ deleteAttestationsOlderThan: () => Promise.resolve(),
48
+ deleteAttestationsForSlot: () => Promise.resolve(),
49
+ deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
50
+ getAttestationsForSlot: () => Promise.resolve([]),
51
+ };
52
+ }
53
+
54
+ function mockEpochCache(): EpochCacheInterface {
55
+ return {
56
+ getCommittee: () => Promise.resolve([] as EthAddress[]),
57
+ getProposerIndexEncoding: () => '0x' as `0x${string}`,
58
+ getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
59
+ computeProposerIndex: () => 0n,
60
+ getProposerInCurrentOrNextSlot: () =>
61
+ Promise.resolve({
62
+ currentProposer: EthAddress.ZERO,
63
+ nextProposer: EthAddress.ZERO,
64
+ currentSlot: 0n,
65
+ nextSlot: 0n,
66
+ }),
67
+ isInCommittee: () => Promise.resolve(false),
68
+ };
69
+ }
70
+
71
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
72
+ process.on('message', async msg => {
73
+ const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
74
+
75
+ try {
76
+ if (type === 'START') {
77
+ const txPool = mockTxPool();
78
+ const attestationPool = mockAttestationPool();
79
+ const epochCache = mockEpochCache();
80
+ const worldState = {} as WorldStateSynchronizer;
81
+ const l2BlockSource = new MockL2BlockSource();
82
+ await l2BlockSource.createBlocks(100);
83
+
84
+ const proofVerifier = new AlwaysTrueCircuitVerifier();
85
+ const kvStore = await openTmpStore(`test-${clientIndex}`);
86
+ const logger = createLogger(`p2p:${clientIndex}`);
87
+
88
+ const deps = {
89
+ txPool,
90
+ attestationPool,
91
+ store: kvStore,
92
+ logger,
93
+ };
94
+
95
+ const client = await createP2PClient(
96
+ P2PClientType.Full,
97
+ config as P2PConfig & DataStoreConfig,
98
+ l2BlockSource,
99
+ proofVerifier,
100
+ worldState,
101
+ epochCache,
102
+ undefined,
103
+ deps,
104
+ );
105
+
106
+ // Create spy for gossip messages
107
+ let gossipMessageCount = 0;
108
+ (client as any).p2pService.handleNewGossipMessage = (msg: Message, msgId: string, source: PeerId) => {
109
+ gossipMessageCount++;
110
+ process.send!({
111
+ type: 'GOSSIP_RECEIVED',
112
+ count: gossipMessageCount,
113
+ });
114
+ return (client as any).p2pService.constructor.prototype.handleNewGossipMessage.apply(
115
+ (client as any).p2pService,
116
+ [msg, msgId, source],
117
+ );
118
+ };
119
+
120
+ await client.start();
121
+ // Wait until the client is ready
122
+ for (let i = 0; i < 100; i++) {
123
+ const isReady = client.isReady();
124
+ logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
125
+ if (isReady) {
126
+ break;
127
+ }
128
+ await sleep(1000);
129
+ }
130
+
131
+ // Listen for commands from parent
132
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
133
+ process.on('message', async (cmd: any) => {
134
+ switch (cmd.type) {
135
+ case 'STOP':
136
+ await client.stop();
137
+ process.exit(0);
138
+ break;
139
+ case 'SEND_TX':
140
+ await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
141
+ process.send!({ type: 'TX_SENT' });
142
+ break;
143
+ }
144
+ });
145
+
146
+ process.send!({ type: 'READY' });
147
+ }
148
+ } catch (err: any) {
149
+ process.send!({ type: 'ERROR', error: err.message });
150
+ process.exit(1);
151
+ }
152
+ });
@@ -0,0 +1,175 @@
1
+ // Parse Log File
2
+ // 1. Determine when a message was sent from the Sent Message log
3
+ // 2. Parse all Received Tx logs, extracting the timestamp and peer ID
4
+ // 3. Compute the delay for each peer relative to the timestamp of the sent message
5
+ // 4. Print the delays
6
+ import { createLogger } from '@aztec/foundation/log';
7
+
8
+ import * as fs from 'fs';
9
+
10
+ const logger = createLogger('parse_log_file');
11
+
12
+ interface LogEvent {
13
+ timestamp: number; // in milliseconds (from start of log)
14
+ peerId: string;
15
+ }
16
+
17
+ interface BenchmarkResult {
18
+ delays: {
19
+ peerId: string;
20
+ delay: number;
21
+ }[];
22
+ stats: {
23
+ numberReceived: number;
24
+ minDelay: number;
25
+ maxDelay: number;
26
+ averageDelay: number;
27
+ medianDelay: number;
28
+ };
29
+ }
30
+
31
+ function getTimestamp(line: string): number | null {
32
+ const timestampMatch = line.match(/"time":(\d+)/);
33
+ if (!timestampMatch) {
34
+ return null;
35
+ }
36
+ return parseInt(timestampMatch[1], 10);
37
+ }
38
+
39
+ /**
40
+ * Parses a single log line. If the line contains an "rpc.from" event,
41
+ * it extracts the timestamp and the peer ID.
42
+ */
43
+ function parseReceivedTx(line: string): LogEvent | null {
44
+ if (!line.includes('Received tx')) {
45
+ return null;
46
+ }
47
+
48
+ // Extract timestamp from the line: e.g. {"time":1740142435845}
49
+ const timestamp = getTimestamp(line);
50
+ if (!timestamp) {
51
+ logger.error('No timestamp found in received tx log');
52
+ return null;
53
+ }
54
+
55
+ // TODO: this is not correct - it is just the tx hash for now
56
+ // Extract the peer ID after "Received tx"
57
+ const peerIdMatch = line.match(/p2p:(\d+):/);
58
+ if (!peerIdMatch) {
59
+ logger.error('No peer Number found in received tx log');
60
+ return null;
61
+ }
62
+ const peerId = peerIdMatch[1];
63
+
64
+ return {
65
+ timestamp,
66
+ peerId,
67
+ };
68
+ }
69
+
70
+ function parseSentMessage(line: string): number | null {
71
+ if (!line.includes('Sent message')) {
72
+ return null;
73
+ }
74
+
75
+ const timestamp = getTimestamp(line);
76
+ if (!timestamp) {
77
+ logger.error('No timestamp found in sent message log');
78
+ return null;
79
+ }
80
+
81
+ return timestamp;
82
+ }
83
+
84
+ /**
85
+ * Processes the given log file, extracts all rpc.from events, computes the
86
+ * propagation delay for each peer relative to the earliest event, and prints
87
+ * some benchmark statistics.
88
+ */
89
+ function processLogFile(logFilePath: string, outputJsonPath?: string) {
90
+ const content = fs.readFileSync(logFilePath, 'utf-8');
91
+ const lines = content.split('\n');
92
+ const events: LogEvent[] = [];
93
+ let t0 = 0;
94
+
95
+ // We begin our search as soon as we see the Sent message log
96
+ let messageSent = false;
97
+ for (const line of lines) {
98
+ // Look for Sent message log
99
+ if (line.includes('Sent message')) {
100
+ messageSent = true;
101
+ t0 = parseSentMessage(line)!;
102
+ }
103
+
104
+ if (!messageSent) {
105
+ continue;
106
+ }
107
+ // Once we see the sent message log, we begin parsing Received tx logs
108
+ const event = parseReceivedTx(line);
109
+ if (event) {
110
+ events.push(event);
111
+ }
112
+ }
113
+
114
+ if (events.length === 0) {
115
+ logger.error('No message received events found in log file.');
116
+ return;
117
+ }
118
+
119
+ // Sort events by timestamp (ascending)
120
+ events.sort((a, b) => a.timestamp - b.timestamp);
121
+
122
+ // Compute delay for each event relative to t0
123
+ const numberReceived = events.length;
124
+ const delays = events.map(e => ({
125
+ peerId: e.peerId,
126
+ delay: e.timestamp - t0,
127
+ }));
128
+
129
+ logger.info('Propagation delays (in ms) per peer:');
130
+ for (const d of delays) {
131
+ logger.info(`${d.peerId}: ${d.delay} ms`);
132
+ }
133
+
134
+ // Compute basic statistics
135
+ const delayValues = delays.map(d => d.delay);
136
+ const minDelay = Math.min(...delayValues);
137
+ const maxDelay = Math.max(...delayValues);
138
+ const sumDelay = delayValues.reduce((sum, val) => sum + val, 0);
139
+ const avgDelay = sumDelay / delayValues.length;
140
+ const sortedDelays = delayValues.slice().sort((a, b) => a - b);
141
+ const medianDelay = sortedDelays[Math.floor(sortedDelays.length / 2)];
142
+
143
+ logger.info('\nBenchmark Statistics:');
144
+ logger.info(`Number of messages received: ${numberReceived}`);
145
+ logger.info(`Min delay: ${minDelay} ms`);
146
+ logger.info(`Max delay: ${maxDelay} ms`);
147
+ logger.info(`Average delay: ${avgDelay.toFixed(2)} ms`);
148
+ logger.info(`Median delay: ${medianDelay} ms`);
149
+
150
+ // If output JSON path is provided, write results to file
151
+ if (outputJsonPath) {
152
+ const result: BenchmarkResult = {
153
+ delays,
154
+ stats: {
155
+ numberReceived,
156
+ minDelay,
157
+ maxDelay,
158
+ averageDelay: Number(avgDelay.toFixed(2)),
159
+ medianDelay,
160
+ },
161
+ };
162
+
163
+ fs.writeFileSync(outputJsonPath, JSON.stringify(result, null, 2));
164
+ logger.info(`\nResults written to ${outputJsonPath}`);
165
+ }
166
+ }
167
+
168
+ // Get the log file path and optional output JSON path from command-line arguments
169
+ const [logFilePath, outputJsonPath] = process.argv.slice(2);
170
+ if (!logFilePath) {
171
+ logger.error('Usage: ts-node parse_log_file.ts <logFilePath> [outputJsonPath]');
172
+ process.exit(1);
173
+ }
174
+
175
+ processLogFile(logFilePath, outputJsonPath);
@@ -0,0 +1,66 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { sleep } from '@aztec/foundation/sleep';
3
+ import { ClientIvcProof } from '@aztec/stdlib/proofs';
4
+ import { mockTx } from '@aztec/stdlib/testing';
5
+
6
+ import assert from 'assert';
7
+ import path from 'path';
8
+ import { fileURLToPath } from 'url';
9
+
10
+ import { WorkerClientManager, testChainConfig } from './worker_client_manager.js';
11
+
12
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
+ const logger = createLogger('testbench');
14
+
15
+ async function main() {
16
+ try {
17
+ // Read configuration file name from command line args
18
+ const configFile = process.argv[2];
19
+ if (!configFile) {
20
+ throw new Error('Configuration file must be provided as first argument');
21
+ }
22
+
23
+ const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
24
+ const config = await import(configPath, { assert: { type: 'json' } });
25
+ const testConfig = { ...testChainConfig, ...config.default };
26
+ const numberOfClients = config.default.numberOfClients;
27
+
28
+ // Setup clients in separate processes
29
+ const workerClientManager = new WorkerClientManager(logger, testConfig);
30
+ await workerClientManager.makeWorkerClients(numberOfClients);
31
+
32
+ // wait a bit longer for all peers to be ready
33
+ await sleep(5000);
34
+ logger.info('Workers Ready');
35
+
36
+ // Send tx from client 0
37
+ const tx = await mockTx(1, {
38
+ clientIvcProof: ClientIvcProof.random(),
39
+ });
40
+
41
+ workerClientManager.processes[0].send({ type: 'SEND_TX', tx: tx.toBuffer() });
42
+ logger.info('Transaction sent from client 0');
43
+
44
+ // Give time for message propagation
45
+ await sleep(30000);
46
+ logger.info('Checking message propagation results');
47
+
48
+ // Check message propagation results
49
+ const numberOfClientsThatReceivedMessage = workerClientManager.numberOfClientsThatReceivedMessage();
50
+ logger.info(`Number of clients that received message: ${numberOfClientsThatReceivedMessage}`);
51
+
52
+ assert(numberOfClientsThatReceivedMessage === numberOfClients - 1);
53
+
54
+ logger.info('Test passed, cleaning up');
55
+
56
+ // cleanup
57
+ await workerClientManager.cleanup();
58
+ } catch (error) {
59
+ logger.error('Test failed with error:', error);
60
+ process.exit(1);
61
+ }
62
+ }
63
+
64
+ main().catch(error => {
65
+ logger.error('Unhandled error:', error);
66
+ });