@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,84 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { L2Block } from '@aztec/stdlib/block';
3
+ import { Tx, TxHash } from '@aztec/stdlib/tx';
4
+ /*
5
+ * Request Response Sub Protocols
6
+ */ export const PING_PROTOCOL = '/aztec/req/ping/0.1.0';
7
+ export const STATUS_PROTOCOL = '/aztec/req/status/0.1.0';
8
+ export const GOODBYE_PROTOCOL = '/aztec/req/goodbye/0.1.0';
9
+ export const TX_REQ_PROTOCOL = '/aztec/req/tx/0.1.0';
10
+ export const BLOCK_REQ_PROTOCOL = '/aztec/req/block/0.1.0';
11
+ export var ReqRespSubProtocol = /*#__PURE__*/ function(ReqRespSubProtocol) {
12
+ ReqRespSubProtocol[ReqRespSubProtocol["PING"] = PING_PROTOCOL] = "PING";
13
+ ReqRespSubProtocol[ReqRespSubProtocol["STATUS"] = STATUS_PROTOCOL] = "STATUS";
14
+ ReqRespSubProtocol[ReqRespSubProtocol["GOODBYE"] = GOODBYE_PROTOCOL] = "GOODBYE";
15
+ ReqRespSubProtocol[ReqRespSubProtocol["TX"] = TX_REQ_PROTOCOL] = "TX";
16
+ ReqRespSubProtocol[ReqRespSubProtocol["BLOCK"] = BLOCK_REQ_PROTOCOL] = "BLOCK";
17
+ return ReqRespSubProtocol;
18
+ }({});
19
+ export const noopValidator = ()=>Promise.resolve(true);
20
+ export const DEFAULT_SUB_PROTOCOL_VALIDATORS = {
21
+ [ReqRespSubProtocol.PING]: noopValidator,
22
+ [ReqRespSubProtocol.STATUS]: noopValidator,
23
+ [ReqRespSubProtocol.TX]: noopValidator,
24
+ [ReqRespSubProtocol.GOODBYE]: noopValidator,
25
+ [ReqRespSubProtocol.BLOCK]: noopValidator
26
+ };
27
+ /**
28
+ * Default handler for unimplemented sub protocols, this SHOULD be overwritten
29
+ * by the service, but is provided as a fallback
30
+ */ const defaultHandler = (_msg)=>{
31
+ return Promise.resolve(Buffer.from('unimplemented'));
32
+ };
33
+ /**
34
+ * Default sub protocol handlers - this SHOULD be overwritten by the service,
35
+ */ export const DEFAULT_SUB_PROTOCOL_HANDLERS = {
36
+ [ReqRespSubProtocol.PING]: defaultHandler,
37
+ [ReqRespSubProtocol.STATUS]: defaultHandler,
38
+ [ReqRespSubProtocol.TX]: defaultHandler,
39
+ [ReqRespSubProtocol.GOODBYE]: defaultHandler,
40
+ [ReqRespSubProtocol.BLOCK]: defaultHandler
41
+ };
42
+ /**
43
+ * RequestableBuffer is a wrapper around a buffer that allows it to be
44
+ * used in generic request response protocols
45
+ *
46
+ * An instance of the RequestResponsePair defined above
47
+ */ export class RequestableBuffer {
48
+ buffer;
49
+ constructor(buffer){
50
+ this.buffer = buffer;
51
+ }
52
+ toBuffer() {
53
+ return this.buffer;
54
+ }
55
+ static fromBuffer(buffer) {
56
+ return new RequestableBuffer(buffer);
57
+ }
58
+ }
59
+ /**
60
+ * A mapping from each protocol to their request and response types
61
+ * This defines the request and response types for each sub protocol, used primarily
62
+ * as a type rather than an object
63
+ */ export const subProtocolMap = {
64
+ [ReqRespSubProtocol.PING]: {
65
+ request: RequestableBuffer,
66
+ response: RequestableBuffer
67
+ },
68
+ [ReqRespSubProtocol.STATUS]: {
69
+ request: RequestableBuffer,
70
+ response: RequestableBuffer
71
+ },
72
+ [ReqRespSubProtocol.TX]: {
73
+ request: TxHash,
74
+ response: Tx
75
+ },
76
+ [ReqRespSubProtocol.GOODBYE]: {
77
+ request: RequestableBuffer,
78
+ response: RequestableBuffer
79
+ },
80
+ [ReqRespSubProtocol.BLOCK]: {
81
+ request: Fr,
82
+ response: L2Block
83
+ }
84
+ };
@@ -0,0 +1,15 @@
1
+ import type { TelemetryClient, Tracer } from '@aztec/telemetry-client';
2
+ export declare class ReqRespMetrics {
3
+ readonly telemetryClient: TelemetryClient;
4
+ readonly tracer: Tracer;
5
+ private readonly sentRequests;
6
+ private readonly receivedRequests;
7
+ private readonly failedOutboundRequests;
8
+ private readonly failedInboundRequests;
9
+ constructor(telemetryClient: TelemetryClient, name?: string);
10
+ recordRequestSent(protocol: string): void;
11
+ recordRequestReceived(protocol: string): void;
12
+ recordRequestError(protocol: string): void;
13
+ recordResponseError(protocol: string): void;
14
+ }
15
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/metrics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAiB,MAAM,yBAAyB,CAAC;AAEtF,qBAAa,cAAc;IASb,QAAQ,CAAC,eAAe,EAAE,eAAe;IARrD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAEjD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;gBAEjC,eAAe,EAAE,eAAe,EAAE,IAAI,SAAY;IA4BhE,iBAAiB,CAAC,QAAQ,EAAE,MAAM;IAIlC,qBAAqB,CAAC,QAAQ,EAAE,MAAM;IAItC,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAInC,mBAAmB,CAAC,QAAQ,EAAE,MAAM;CAG5C"}
@@ -0,0 +1,55 @@
1
+ // Request response metrics
2
+ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
3
+ export class ReqRespMetrics {
4
+ telemetryClient;
5
+ tracer;
6
+ sentRequests;
7
+ receivedRequests;
8
+ failedOutboundRequests;
9
+ failedInboundRequests;
10
+ constructor(telemetryClient, name = 'ReqResp'){
11
+ this.telemetryClient = telemetryClient;
12
+ this.tracer = telemetryClient.getTracer(name);
13
+ const meter = telemetryClient.getMeter(name);
14
+ this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS, {
15
+ description: 'Number of requests sent to peers',
16
+ unit: 'requests',
17
+ valueType: ValueType.INT
18
+ });
19
+ this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS, {
20
+ description: 'Number of requests received from peers',
21
+ unit: 'requests',
22
+ valueType: ValueType.INT
23
+ });
24
+ this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS, {
25
+ description: 'Number of failed outbound requests - nodes not getting valid responses',
26
+ unit: 'requests',
27
+ valueType: ValueType.INT
28
+ });
29
+ this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS, {
30
+ description: 'Number of failed inbound requests - node failing to respond to requests',
31
+ unit: 'requests',
32
+ valueType: ValueType.INT
33
+ });
34
+ }
35
+ recordRequestSent(protocol) {
36
+ this.sentRequests.add(1, {
37
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
38
+ });
39
+ }
40
+ recordRequestReceived(protocol) {
41
+ this.receivedRequests.add(1, {
42
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
43
+ });
44
+ }
45
+ recordRequestError(protocol) {
46
+ this.failedOutboundRequests.add(1, {
47
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
48
+ });
49
+ }
50
+ recordResponseError(protocol) {
51
+ this.failedInboundRequests.add(1, {
52
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
53
+ });
54
+ }
55
+ }
@@ -0,0 +1,4 @@
1
+ import type { L2BlockSource } from '@aztec/stdlib/block';
2
+ import type { ReqRespSubProtocolHandler } from '../interface.js';
3
+ export declare function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubProtocolHandler;
4
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/block.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,yBAAyB,CAO3F"}
@@ -0,0 +1,8 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ export function reqRespBlockHandler(l2BlockSource) {
3
+ return async (_peerId, msg)=>{
4
+ const blockNumber = Fr.fromBuffer(msg);
5
+ const foundBlock = await l2BlockSource.getBlock(Number(blockNumber));
6
+ return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
7
+ };
8
+ }
@@ -0,0 +1,51 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import type { PeerId } from '@libp2p/interface';
4
+ import type { PeerManager } from '../../peer-manager/peer_manager.js';
5
+ import { type ReqRespSubProtocolHandler } from '../interface.js';
6
+ import type { ReqResp } from '../reqresp.js';
7
+ /**
8
+ * Enum defining the possible reasons for a goodbye message.
9
+ */
10
+ export declare enum GoodByeReason {
11
+ /** The peer has shutdown, will be received whenever a peer's node is routinely stopped */
12
+ SHUTDOWN = 1,
13
+ /** The max peer count has been reached, will be received whenever a low scoring peer is disconnected to satisfy the max peer count */
14
+ MAX_PEERS = 2,
15
+ /** The peer has a low score, will be received whenever a peer's score is low */
16
+ LOW_SCORE = 3,
17
+ /** The peer has been banned, will be received whenever a peer is banned */
18
+ BANNED = 4,
19
+ /** Wrong network / fork */
20
+ WRONG_NETWORK = 5,
21
+ /** Unknown reason */
22
+ UNKNOWN = 6
23
+ }
24
+ export declare function encodeGoodbyeReason(reason: GoodByeReason): Buffer;
25
+ export declare function decodeGoodbyeReason(buffer: Buffer): GoodByeReason;
26
+ /**
27
+ * Pretty prints the goodbye reason.
28
+ * @param reason - The goodbye reason.
29
+ * @returns The pretty printed goodbye reason.
30
+ */
31
+ export declare function prettyGoodbyeReason(reason: GoodByeReason): string;
32
+ /**
33
+ * Handles a goodbye message request
34
+ */
35
+ export declare class GoodbyeProtocolHandler {
36
+ private reqresp;
37
+ private logger;
38
+ constructor(reqresp: ReqResp);
39
+ sendGoodbye(peerId: PeerId, reason: GoodByeReason): Promise<void>;
40
+ }
41
+ /**
42
+ * Handles the goodbye request. In request response, the goodbye request is handled by the peer manager.
43
+ *
44
+ * @dev Implemented as returning a function as the function is bound in the libp2p service, however
45
+ * its implementation is here to keep functionality together.
46
+ *
47
+ * @param peerManager - The peer manager.
48
+ * @returns A resolved promise with the goodbye response.
49
+ */
50
+ export declare function reqGoodbyeHandler(peerManager: PeerManager): ReqRespSubProtocolHandler;
51
+ //# sourceMappingURL=goodbye.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goodbye.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/goodbye.ts"],"names":[],"mappings":";;AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,oBAAY,aAAa;IACvB,0FAA0F;IAC1F,QAAQ,IAAM;IACd,sIAAsI;IACtI,SAAS,IAAM;IACf,gFAAgF;IAChF,SAAS,IAAM;IACf,2EAA2E;IAC3E,MAAM,IAAM;IACZ,2BAA2B;IAC3B,aAAa,IAAM;IACnB,qBAAqB;IACrB,OAAO,IAAM;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CASjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgBjE;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,MAAM,CAAwC;gBAElC,OAAO,EAAE,OAAO;IAEvB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,yBAAyB,CASrF"}
@@ -0,0 +1,87 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { ReqRespSubProtocol } from '../interface.js';
3
+ /**
4
+ * Enum defining the possible reasons for a goodbye message.
5
+ */ export var GoodByeReason = /*#__PURE__*/ function(GoodByeReason) {
6
+ /** The peer has shutdown, will be received whenever a peer's node is routinely stopped */ GoodByeReason[GoodByeReason["SHUTDOWN"] = 1] = "SHUTDOWN";
7
+ /** The max peer count has been reached, will be received whenever a low scoring peer is disconnected to satisfy the max peer count */ GoodByeReason[GoodByeReason["MAX_PEERS"] = 2] = "MAX_PEERS";
8
+ /** The peer has a low score, will be received whenever a peer's score is low */ GoodByeReason[GoodByeReason["LOW_SCORE"] = 3] = "LOW_SCORE";
9
+ /** The peer has been banned, will be received whenever a peer is banned */ GoodByeReason[GoodByeReason["BANNED"] = 4] = "BANNED";
10
+ /** Wrong network / fork */ GoodByeReason[GoodByeReason["WRONG_NETWORK"] = 5] = "WRONG_NETWORK";
11
+ /** Unknown reason */ GoodByeReason[GoodByeReason["UNKNOWN"] = 6] = "UNKNOWN";
12
+ return GoodByeReason;
13
+ }({});
14
+ export function encodeGoodbyeReason(reason) {
15
+ return Buffer.from([
16
+ reason
17
+ ]);
18
+ }
19
+ export function decodeGoodbyeReason(buffer) {
20
+ try {
21
+ if (buffer.length !== 1) {
22
+ throw new Error('Invalid goodbye reason buffer length');
23
+ }
24
+ return buffer[0];
25
+ } catch (error) {
26
+ return 6;
27
+ }
28
+ }
29
+ /**
30
+ * Pretty prints the goodbye reason.
31
+ * @param reason - The goodbye reason.
32
+ * @returns The pretty printed goodbye reason.
33
+ */ export function prettyGoodbyeReason(reason) {
34
+ switch(reason){
35
+ case 1:
36
+ return 'shutdown';
37
+ case 2:
38
+ return 'max_peers';
39
+ case 3:
40
+ return 'low_score';
41
+ case 4:
42
+ return 'banned';
43
+ // TODO(#11328): implement
44
+ case 5:
45
+ return 'wrong_network';
46
+ case 6:
47
+ return 'unknown';
48
+ }
49
+ }
50
+ /**
51
+ * Handles a goodbye message request
52
+ */ export class GoodbyeProtocolHandler {
53
+ reqresp;
54
+ logger;
55
+ constructor(reqresp){
56
+ this.reqresp = reqresp;
57
+ this.logger = createLogger('p2p:goodbye-protocol');
58
+ }
59
+ async sendGoodbye(peerId, reason) {
60
+ try {
61
+ await this.reqresp.sendRequestToPeer(peerId, ReqRespSubProtocol.GOODBYE, Buffer.from([
62
+ reason
63
+ ]));
64
+ this.logger.debug(`Sent goodbye to peer ${peerId.toString()} with reason ${reason}`);
65
+ } catch (error) {
66
+ this.logger.debug(`Failed to send goodbye to peer ${peerId.toString()}: ${error}`);
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * Handles the goodbye request. In request response, the goodbye request is handled by the peer manager.
72
+ *
73
+ * @dev Implemented as returning a function as the function is bound in the libp2p service, however
74
+ * its implementation is here to keep functionality together.
75
+ *
76
+ * @param peerManager - The peer manager.
77
+ * @returns A resolved promise with the goodbye response.
78
+ */ export function reqGoodbyeHandler(peerManager) {
79
+ return (peerId, _msg)=>{
80
+ const reason = decodeGoodbyeReason(_msg);
81
+ peerManager.goodbyeReceived(peerId, reason);
82
+ // Return a buffer of length 1 as an acknowledgement: this is allowed to fail
83
+ return Promise.resolve(Buffer.from([
84
+ 0x0
85
+ ]));
86
+ };
87
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Request Response protocol handlers
3
+ */
4
+ export * from './ping.js';
5
+ export * from './status.js';
6
+ export * from './tx.js';
7
+ export * from './goodbye.js';
8
+ export * from './block.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Request Response protocol handlers
3
+ */ export * from './ping.js';
4
+ export * from './status.js';
5
+ export * from './tx.js';
6
+ export * from './goodbye.js';
7
+ export * from './block.js';
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ /**
4
+ * Handles the ping request.
5
+ * @param _msg - The ping request message.
6
+ * @returns A resolved promise with the pong response.
7
+ */
8
+ export declare function pingHandler(_msg: any): Promise<Buffer>;
9
+ //# sourceMappingURL=ping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/ping.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtD"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Handles the ping request.
3
+ * @param _msg - The ping request message.
4
+ * @returns A resolved promise with the pong response.
5
+ */ export function pingHandler(_msg) {
6
+ return Promise.resolve(Buffer.from('pong'));
7
+ }
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ /**
4
+ * Handles the status request.
5
+ * @param _msg - The status request message.
6
+ * @returns A resolved promise with the ok response.
7
+ */
8
+ export declare function statusHandler(_msg: any): Promise<Buffer>;
9
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/status.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAExD"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Handles the status request.
3
+ * @param _msg - The status request message.
4
+ * @returns A resolved promise with the ok response.
5
+ */ export function statusHandler(_msg) {
6
+ return Promise.resolve(Buffer.from('ok'));
7
+ }
@@ -0,0 +1,13 @@
1
+ import type { P2PClientType } from '@aztec/stdlib/p2p';
2
+ import type { MemPools } from '../../../mem_pools/interface.js';
3
+ import type { ReqRespSubProtocolHandler } from '../interface.js';
4
+ /**
5
+ * We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
6
+ * so we need to pass it in as a parameter.
7
+ *
8
+ * Handler for tx requests
9
+ * @param mempools - the mempools
10
+ * @returns the tx response message
11
+ */
12
+ export declare function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>): ReqRespSubProtocolHandler;
13
+ //# sourceMappingURL=tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAY1G"}
@@ -0,0 +1,20 @@
1
+ import { TxHash } from '@aztec/stdlib/tx';
2
+ /**
3
+ * We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
4
+ * so we need to pass it in as a parameter.
5
+ *
6
+ * Handler for tx requests
7
+ * @param mempools - the mempools
8
+ * @returns the tx response message
9
+ */ export function reqRespTxHandler(mempools) {
10
+ /**
11
+ * Handler for tx requests
12
+ * @param msg - the tx request message
13
+ * @returns the tx response message
14
+ */ return async (_peerId, msg)=>{
15
+ const txHash = TxHash.fromBuffer(msg);
16
+ const foundTx = await mempools.txPool.getTxByHash(txHash);
17
+ const buf = foundTx ? foundTx.toBuffer() : Buffer.alloc(0);
18
+ return buf;
19
+ };
20
+ }
@@ -0,0 +1,2 @@
1
+ export { RequestResponseRateLimiter } from './rate_limiter.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { RequestResponseRateLimiter } from './rate_limiter.js';
@@ -0,0 +1,102 @@
1
+ import type { PeerId } from '@libp2p/interface';
2
+ import type { PeerScoring } from '../../peer-manager/peer_scoring.js';
3
+ import type { ReqRespSubProtocol, ReqRespSubProtocolRateLimits } from '../interface.js';
4
+ /**
5
+ * GCRARateLimiter: A Generic Cell Rate Algorithm (GCRA) based rate limiter.
6
+ *
7
+ * How it works:
8
+ * 1. The rate limiter allows a certain number of operations (quotaCount) within a specified
9
+ * time interval (quotaTimeMs).
10
+ * 2. It uses a "virtual scheduling time" (VST) to determine when the next operation should be allowed.
11
+ * 3. When an operation is requested, the limiter checks if enough time has passed since the last
12
+ * allowed operation.
13
+ * 4. If sufficient time has passed, the operation is allowed, and the VST is updated.
14
+ * 5. If not enough time has passed, the operation is denied.
15
+ *
16
+ * The limiter also allows for short bursts of activity, as long as the overall rate doesn't exceed
17
+ * the specified quota over time.
18
+ *
19
+ * Usage example:
20
+ * ```
21
+ * const limiter = new GCRARateLimiter(100, 60000); // 100 operations per minute
22
+ * ```
23
+ */
24
+ export declare class GCRARateLimiter {
25
+ private vst;
26
+ private readonly emissionInterval;
27
+ private readonly limitInterval;
28
+ /**
29
+ * @param quotaCount - The number of requests to allow over the limit interval
30
+ * @param quotaTimeMs - The time interval over which the quotaCount applies
31
+ */
32
+ constructor(quotaCount: number, quotaTimeMs: number);
33
+ allow(): boolean;
34
+ }
35
+ export declare enum RateLimitStatus {
36
+ DeniedGlobal = 0,
37
+ DeniedPeer = 1,
38
+ Allowed = 2
39
+ }
40
+ export declare function prettyPrintRateLimitStatus(status: RateLimitStatus): "DeniedGlobal" | "DeniedPeer" | "Allowed";
41
+ /**
42
+ * SubProtocolRateLimiter: A rate limiter for managing request rates on a per-peer and global basis for a specific subprotocol.
43
+ *
44
+ * This class provides a two-tier rate limiting system:
45
+ * 1. A global rate limit for all requests across all peers for this subprotocol.
46
+ * 2. Individual rate limits for each peer.
47
+ *
48
+ * How it works:
49
+ * - When a request comes in, it first checks against the global rate limit.
50
+ * - If the global limit allows, it then checks against the specific peer's rate limit.
51
+ * - The request is only allowed if both the global and peer-specific limits allow it.
52
+ * - It automatically creates and manages rate limiters for new peers as they make requests.
53
+ * - It periodically cleans up rate limiters for inactive peers to conserve memory.
54
+ *
55
+ * Note: Remember to call `start()` to begin the cleanup process and `stop()` when shutting down to clear the cleanup interval.
56
+ */
57
+ export declare class SubProtocolRateLimiter {
58
+ private peerLimiters;
59
+ private globalLimiter;
60
+ private readonly peerQuotaCount;
61
+ private readonly peerQuotaTimeMs;
62
+ constructor(peerQuotaCount: number, peerQuotaTimeMs: number, globalQuotaCount: number, globalQuotaTimeMs: number);
63
+ allow(peerId: PeerId): RateLimitStatus;
64
+ cleanupInactivePeers(): void;
65
+ }
66
+ /**
67
+ * RequestResponseRateLimiter.
68
+ *
69
+ * A rate limiter that is protocol aware, then peer aware.
70
+ * SubProtocols can have their own global / peer level rate limits.
71
+ *
72
+ * How it works:
73
+ * - Initializes with a set of rate limit configurations for different subprotocols.
74
+ * - Creates a separate SubProtocolRateLimiter for each configured subprotocol.
75
+ * - When a request comes in, it routes the rate limiting decision to the appropriate subprotocol limiter.
76
+ * - Peers who exceed their peer rate limits will be penalised by the peer manager.
77
+ *
78
+ * Usage:
79
+ * ```
80
+ * const peerManager = new PeerManager(...);
81
+ * const rateLimits = {
82
+ * subprotocol1: { peerLimit: { quotaCount: 10, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 100, quotaTimeMs: 1000 } },
83
+ * subprotocol2: { peerLimit: { quotaCount: 5, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 50, quotaTimeMs: 1000 } }
84
+ * };
85
+ * const limiter = new RequestResponseRateLimiter(peerManager, rateLimits);
86
+ *
87
+ * Note: Ensure to call `stop()` when shutting down to properly clean up all subprotocol limiters.
88
+ */
89
+ export declare class RequestResponseRateLimiter {
90
+ private peerScoring;
91
+ private subProtocolRateLimiters;
92
+ private cleanupInterval;
93
+ constructor(peerScoring: PeerScoring, rateLimits?: ReqRespSubProtocolRateLimits);
94
+ start(): void;
95
+ allow(subProtocol: ReqRespSubProtocol, peerId: PeerId): RateLimitStatus;
96
+ cleanupInactivePeers(): void;
97
+ /**
98
+ * Make sure to call destroy on each of the sub protocol rate limiters when cleaning up
99
+ */
100
+ stop(): void;
101
+ }
102
+ //# sourceMappingURL=rate_limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAMxF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMnD,KAAK,IAAI,OAAO;CAWjB;AASD,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,6CASjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM;IAOhH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAwBtC,oBAAoB;CAQrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,0BAA0B;IAKzB,OAAO,CAAC,WAAW;IAJ/B,OAAO,CAAC,uBAAuB,CAAkD;IAEjF,OAAO,CAAC,eAAe,CAAyC;gBAE5C,WAAW,EAAE,WAAW,EAAE,UAAU,GAAE,4BAAkD;IAgB5G,KAAK;IAML,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAavE,oBAAoB;IAIpB;;OAEG;IACH,IAAI;CAGL"}