@aztec/p2p 0.0.1-commit.d3ec352c → 0.0.1-commit.e6bd8901

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 (274) hide show
  1. package/dest/client/factory.d.ts +2 -2
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +2 -3
  4. package/dest/client/interface.d.ts +18 -5
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +11 -14
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +456 -124
  9. package/dest/config.d.ts +4 -7
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +10 -13
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  13. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  15. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  16. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
  17. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  18. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  19. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
  20. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  21. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  23. package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
  24. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  26. package/dest/mem_pools/instrumentation.d.ts +7 -1
  27. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  28. package/dest/mem_pools/instrumentation.js +30 -12
  29. package/dest/mem_pools/interface.d.ts +3 -4
  30. package/dest/mem_pools/interface.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +35 -26
  32. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  34. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  35. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  36. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  37. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  38. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  39. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  40. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  41. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  42. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  43. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  44. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  46. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  47. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  49. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  50. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  52. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  53. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  55. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  56. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool/index.js +0 -1
  58. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  59. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/priority.js +6 -1
  61. package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -4
  62. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +25 -20
  66. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
  69. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -14
  72. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  73. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  74. package/dest/msg_validators/clock_tolerance.js +37 -0
  75. package/dest/msg_validators/index.d.ts +2 -2
  76. package/dest/msg_validators/index.d.ts.map +1 -1
  77. package/dest/msg_validators/index.js +1 -1
  78. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  79. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  80. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  81. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  82. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  83. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  84. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  85. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  86. package/dest/msg_validators/proposal_validator/index.js +3 -0
  87. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  88. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  90. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  91. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  92. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  93. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  94. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  96. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  98. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/factory.d.ts +2 -2
  100. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/factory.js +1 -1
  102. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  103. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  105. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  106. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  108. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  109. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/index.js +1 -0
  111. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  112. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  114. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  115. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  116. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  117. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  120. package/dest/services/dummy_service.d.ts +6 -2
  121. package/dest/services/dummy_service.d.ts.map +1 -1
  122. package/dest/services/dummy_service.js +3 -0
  123. package/dest/services/encoding.d.ts +1 -1
  124. package/dest/services/encoding.d.ts.map +1 -1
  125. package/dest/services/encoding.js +7 -6
  126. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  127. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  128. package/dest/services/libp2p/instrumentation.js +20 -73
  129. package/dest/services/libp2p/libp2p_service.d.ts +31 -14
  130. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  131. package/dest/services/libp2p/libp2p_service.js +718 -164
  132. package/dest/services/peer-manager/metrics.d.ts +6 -1
  133. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  134. package/dest/services/peer-manager/metrics.js +18 -21
  135. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  136. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  137. package/dest/services/peer-manager/peer_manager.js +4 -12
  138. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  139. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  140. package/dest/services/peer-manager/peer_scoring.js +2 -5
  141. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
  142. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  143. package/dest/services/reqresp/constants.d.ts +12 -0
  144. package/dest/services/reqresp/constants.d.ts.map +1 -0
  145. package/dest/services/reqresp/constants.js +7 -0
  146. package/dest/services/reqresp/interface.d.ts +2 -2
  147. package/dest/services/reqresp/interface.d.ts.map +1 -1
  148. package/dest/services/reqresp/interface.js +1 -1
  149. package/dest/services/reqresp/metrics.d.ts +1 -1
  150. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  151. package/dest/services/reqresp/metrics.js +5 -21
  152. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  153. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  154. package/dest/services/reqresp/protocols/auth.js +2 -2
  155. package/dest/services/reqresp/protocols/block.js +1 -1
  156. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  157. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +2 -2
  160. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  162. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  163. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  164. package/dest/services/reqresp/protocols/status.js +4 -1
  165. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  166. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  167. package/dest/services/reqresp/reqresp.js +402 -24
  168. package/dest/services/service.d.ts +16 -3
  169. package/dest/services/service.d.ts.map +1 -1
  170. package/dest/services/tx_collection/config.js +1 -1
  171. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  172. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  173. package/dest/services/tx_collection/instrumentation.js +4 -14
  174. package/dest/services/tx_collection/tx_collection.d.ts +3 -3
  175. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  176. package/dest/services/tx_collection/tx_collection.js +1 -1
  177. package/dest/services/tx_provider.d.ts +4 -3
  178. package/dest/services/tx_provider.d.ts.map +1 -1
  179. package/dest/services/tx_provider.js +11 -2
  180. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  181. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  182. package/dest/services/tx_provider_instrumentation.js +13 -13
  183. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  184. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  185. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  186. package/dest/testbench/p2p_client_testbench_worker.js +31 -17
  187. package/dest/testbench/worker_client_manager.d.ts +1 -1
  188. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  189. package/dest/testbench/worker_client_manager.js +6 -1
  190. package/package.json +16 -16
  191. package/src/client/factory.ts +5 -10
  192. package/src/client/interface.ts +19 -4
  193. package/src/client/p2p_client.ts +89 -144
  194. package/src/config.ts +12 -18
  195. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  196. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  197. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  198. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  199. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  200. package/src/mem_pools/instrumentation.ts +38 -14
  201. package/src/mem_pools/interface.ts +2 -4
  202. package/src/mem_pools/tx_pool/README.md +270 -0
  203. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +362 -367
  204. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  205. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  206. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  207. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  208. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  209. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  210. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  211. package/src/mem_pools/tx_pool/index.ts +0 -1
  212. package/src/mem_pools/tx_pool/priority.ts +8 -1
  213. package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
  214. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +18 -13
  215. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  216. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +13 -16
  217. package/src/msg_validators/clock_tolerance.ts +51 -0
  218. package/src/msg_validators/index.ts +1 -1
  219. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  220. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  221. package/src/msg_validators/proposal_validator/index.ts +3 -0
  222. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  223. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  224. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  225. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  226. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  227. package/src/msg_validators/tx_validator/factory.ts +1 -1
  228. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  229. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  230. package/src/msg_validators/tx_validator/index.ts +1 -0
  231. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  232. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  233. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  234. package/src/msg_validators/tx_validator/timestamp_validator.ts +3 -1
  235. package/src/services/dummy_service.ts +6 -0
  236. package/src/services/encoding.ts +6 -5
  237. package/src/services/libp2p/instrumentation.ts +19 -73
  238. package/src/services/libp2p/libp2p_service.ts +361 -130
  239. package/src/services/peer-manager/metrics.ts +22 -21
  240. package/src/services/peer-manager/peer_manager.ts +5 -4
  241. package/src/services/peer-manager/peer_scoring.ts +1 -5
  242. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  243. package/src/services/reqresp/constants.ts +14 -0
  244. package/src/services/reqresp/interface.ts +1 -1
  245. package/src/services/reqresp/metrics.ts +7 -23
  246. package/src/services/reqresp/protocols/auth.ts +2 -2
  247. package/src/services/reqresp/protocols/block.ts +1 -1
  248. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  249. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  250. package/src/services/reqresp/protocols/status.ts +7 -4
  251. package/src/services/reqresp/protocols/tx.ts +1 -2
  252. package/src/services/service.ts +19 -4
  253. package/src/services/tx_collection/config.ts +1 -1
  254. package/src/services/tx_collection/instrumentation.ts +4 -21
  255. package/src/services/tx_collection/tx_collection.ts +3 -3
  256. package/src/services/tx_provider.ts +19 -4
  257. package/src/services/tx_provider_instrumentation.ts +18 -14
  258. package/src/test-helpers/mock-pubsub.ts +1 -1
  259. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  260. package/src/test-helpers/reqresp-nodes.ts +1 -1
  261. package/src/testbench/p2p_client_testbench_worker.ts +42 -22
  262. package/src/testbench/worker_client_manager.ts +6 -1
  263. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
  264. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  265. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -239
  266. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  267. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  268. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  269. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  270. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  271. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  272. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -285
  273. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  274. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,31 +1,29 @@
1
- import { GENESIS_BLOCK_HEADER_HASH, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
1
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
2
  import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { DateProvider } from '@aztec/foundation/timer';
5
- import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncSingleton } from '@aztec/kv-store';
6
- import type {
7
- EthAddress,
8
- L2Block,
9
- L2BlockId,
10
- L2BlockSource,
5
+ import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
6
+ import { L2TipsKVStore } from '@aztec/kv-store/stores';
7
+ import {
8
+ type EthAddress,
9
+ type L2Block,
10
+ type L2BlockSource,
11
11
  L2BlockStream,
12
- L2BlockStreamEvent,
13
- L2Tips,
14
- PublishedL2Block,
12
+ type L2BlockStreamEvent,
13
+ type L2Tips,
14
+ type L2TipsStore,
15
15
  } from '@aztec/stdlib/block';
16
16
  import type { ContractDataSource } from '@aztec/stdlib/contract';
17
17
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
18
18
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
19
- import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec/stdlib/p2p';
20
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
21
19
  import {
22
- Attributes,
23
- type TelemetryClient,
24
- TraceableL2BlockStream,
25
- WithTracer,
26
- getTelemetryClient,
27
- trackSpan,
28
- } from '@aztec/telemetry-client';
20
+ type BlockProposal,
21
+ CheckpointAttestation,
22
+ type CheckpointProposal,
23
+ type P2PClientType,
24
+ } from '@aztec/stdlib/p2p';
25
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
26
+ import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
29
27
 
30
28
  import type { PeerId } from '@libp2p/interface';
31
29
  import type { ENR } from '@nethermindeth/enr';
@@ -41,7 +39,7 @@ import {
41
39
  type ReqRespSubProtocolValidators,
42
40
  } from '../services/reqresp/interface.js';
43
41
  import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
44
- import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
42
+ import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
45
43
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
46
44
  import { TxProvider } from '../services/tx_provider.js';
47
45
  import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
@@ -63,14 +61,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
63
61
  private provenBlockNumberAtStart = -1;
64
62
  private finalizedBlockNumberAtStart = -1;
65
63
 
66
- private synchedBlockHashes: AztecAsyncMap<BlockNumber, string>;
67
- private synchedLatestBlockNumber: AztecAsyncSingleton<BlockNumber>;
68
- private synchedProvenBlockNumber: AztecAsyncSingleton<BlockNumber>;
69
- private synchedFinalizedBlockNumber: AztecAsyncSingleton<BlockNumber>;
64
+ private l2Tips: L2TipsStore;
70
65
  private synchedLatestSlot: AztecAsyncSingleton<bigint>;
71
66
 
72
67
  private txPool: TxPool;
73
- private attestationPool: T extends P2PClientType.Full ? AttestationPool : undefined;
68
+ private attestationPool: AttestationPool;
74
69
 
75
70
  private config: P2PConfig;
76
71
 
@@ -92,7 +87,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
92
87
  _clientType: T,
93
88
  private store: AztecAsyncKVStore,
94
89
  private l2BlockSource: L2BlockSource & ContractDataSource,
95
- mempools: MemPools<T>,
90
+ mempools: MemPools,
96
91
  private p2pService: P2PService,
97
92
  private txCollection: TxCollection,
98
93
  config: Partial<P2PConfig> = {},
@@ -104,7 +99,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
104
99
 
105
100
  this.config = { ...getP2PDefaultConfig(), ...config };
106
101
  this.txPool = mempools.txPool;
107
- this.attestationPool = mempools.attestationPool!;
102
+ this.attestationPool = mempools.attestationPool;
108
103
 
109
104
  this.txProvider = new TxProvider(
110
105
  this.txCollection,
@@ -115,7 +110,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
115
110
  );
116
111
 
117
112
  // Default to collecting all txs when we see a valid proposal
118
- // This can be overridden by the validator client to attest, and it will call getTxsForBlockProposal on its own
113
+ // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
114
+ // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
119
115
  // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
120
116
  // validator-client code into here so we can validate a proposal is reasonable.
121
117
  this.registerBlockProposalHandler(async (block, sender) => {
@@ -124,21 +120,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
124
120
  const constants = this.txCollection.getConstants();
125
121
  const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
126
122
  const deadline = new Date(nextSlotTimestampSeconds * 1000);
127
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.payload.header.lastArchiveRoot);
123
+ const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
128
124
  if (!parentBlock) {
129
125
  this.log.debug(`Cannot collect txs for proposal as parent block not found`);
130
- return;
126
+ return false;
131
127
  }
132
128
  const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
133
129
  await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
134
- return undefined;
130
+ return true;
135
131
  });
136
132
 
137
- // REFACTOR: Try replacing these with an L2TipsStore
138
- this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
139
- this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
140
- this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
141
- this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
133
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
142
134
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
143
135
  }
144
136
 
@@ -164,7 +156,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
164
156
  }
165
157
 
166
158
  public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
167
- return this.synchedBlockHashes.getAsync(number);
159
+ return this.l2Tips.getL2BlockHash(number);
168
160
  }
169
161
 
170
162
  public updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
@@ -173,84 +165,45 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
173
165
  return Promise.resolve();
174
166
  }
175
167
 
176
- public async getL2Tips(): Promise<L2Tips> {
177
- const latestBlockNumber = await this.getSyncedLatestBlockNum();
178
- let latestBlockHash: string | undefined;
179
-
180
- const provenBlockNumber = await this.getSyncedProvenBlockNum();
181
- let provenBlockHash: string | undefined;
182
-
183
- const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
184
- let finalizedBlockHash: string | undefined;
185
-
186
- if (latestBlockNumber > 0) {
187
- latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
188
- if (typeof latestBlockHash === 'undefined') {
189
- throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
190
- }
191
- }
192
-
193
- if (provenBlockNumber > 0) {
194
- provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
195
- if (typeof provenBlockHash === 'undefined') {
196
- throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
197
- }
198
- }
199
-
200
- if (finalizedBlockNumber > 0) {
201
- finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
202
- if (typeof finalizedBlockHash === 'undefined') {
203
- throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
204
- }
205
- }
206
-
207
- const genesisHash = GENESIS_BLOCK_HEADER_HASH.toString();
208
-
209
- return {
210
- latest: { hash: latestBlockHash ?? genesisHash, number: latestBlockNumber },
211
- proven: { hash: provenBlockHash ?? genesisHash, number: provenBlockNumber },
212
- finalized: { hash: finalizedBlockHash ?? genesisHash, number: finalizedBlockNumber },
213
- };
168
+ public getL2Tips(): Promise<L2Tips> {
169
+ return this.l2Tips.getL2Tips();
214
170
  }
215
171
 
216
172
  public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
217
173
  this.log.debug(`Handling block stream event ${event.type}`);
174
+
218
175
  switch (event.type) {
219
176
  case 'blocks-added':
220
177
  await this.handleLatestL2Blocks(event.blocks);
221
178
  break;
222
179
  case 'chain-finalized': {
223
- // TODO (alexg): I think we can prune the block hashes map here
224
- await this.setBlockHash(event.block);
225
- const from = BlockNumber((await this.getSyncedFinalizedBlockNum()) + 1);
180
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
181
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
226
182
  const limit = event.block.number - from + 1;
227
183
  if (limit > 0) {
228
- await this.handleFinalizedL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
184
+ const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
185
+ await this.handleFinalizedL2Blocks(oldBlocks);
229
186
  }
230
187
  break;
231
188
  }
232
- case 'chain-proven': {
233
- await this.setBlockHash(event.block);
189
+ case 'chain-proven':
234
190
  this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
235
- await this.synchedProvenBlockNumber.set(event.block.number);
236
191
  break;
237
- }
238
192
  case 'chain-pruned':
239
- await this.setBlockHash(event.block);
240
193
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
241
194
  await this.handlePruneL2Blocks(event.block.number);
242
195
  break;
196
+ case 'chain-checkpointed':
197
+ break;
243
198
  default: {
244
199
  const _: never = event;
245
200
  break;
246
201
  }
247
202
  }
248
- }
249
203
 
250
- private async setBlockHash(block: L2BlockId): Promise<void> {
251
- if (block.hash !== undefined) {
252
- await this.synchedBlockHashes.set(block.number, block.hash.toString());
253
- }
204
+ // Pass the event through to our l2 tips store
205
+ await this.l2Tips.handleBlockStreamEvent(event);
206
+ await this.startServiceIfSynched();
254
207
  }
255
208
 
256
209
  #assertIsReady() {
@@ -274,18 +227,15 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
274
227
 
275
228
  // get the current latest block numbers
276
229
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
277
- this.latestBlockNumberAtStart = latestBlockNumbers.latest.number;
278
- this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
279
- this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
230
+ this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
231
+ this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
232
+ this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
280
233
 
281
234
  const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
282
235
  const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
283
236
  const syncedFinalizedBlock = (await this.getSyncedFinalizedBlockNum()) + 1;
284
237
 
285
- if (
286
- (await this.txPool.isEmpty()) &&
287
- (this.attestationPool === undefined || (await this.attestationPool?.isEmpty()))
288
- ) {
238
+ if ((await this.txPool.isEmpty()) && (await this.attestationPool.isEmpty())) {
289
239
  // if mempools are empty, we don't care about syncing prior blocks
290
240
  this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
291
241
  this.setCurrentState(P2PClientState.RUNNING);
@@ -338,12 +288,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
338
288
  private initBlockStream(startingBlock?: BlockNumber) {
339
289
  if (!this.blockStream) {
340
290
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
341
- this.blockStream = new TraceableL2BlockStream(
291
+ this.blockStream = new L2BlockStream(
342
292
  this.l2BlockSource,
343
293
  this,
344
294
  this,
345
- this.telemetry.getTracer('P2PL2BlockStream'),
346
- 'P2PL2BlockStream',
347
295
  createLogger(`${this.log.module}:l2-block-stream`),
348
296
  { batchSize, pollIntervalMS, startingBlock },
349
297
  );
@@ -383,25 +331,32 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
383
331
  return this.p2pService.propagate(proposal);
384
332
  }
385
333
 
386
- public async broadcastAttestations(attestations: BlockAttestation[]): Promise<void> {
387
- this.log.verbose(`Broadcasting ${attestations.length} attestations to peers`);
388
- await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
334
+ @trackSpan('p2pClient.broadcastCheckpointProposal', async proposal => ({
335
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
336
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
337
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
338
+ }))
339
+ public broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
340
+ this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
341
+ return this.p2pService.propagate(proposal);
389
342
  }
390
343
 
391
- public async getAttestationsForSlot(slot: SlotNumber, proposalId?: string): Promise<BlockAttestation[]> {
392
- return (
393
- (await (proposalId
394
- ? this.attestationPool?.getAttestationsForSlotAndProposal(slot, proposalId)
395
- : this.attestationPool?.getAttestationsForSlot(slot))) ?? []
396
- );
344
+ public async broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
345
+ this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
346
+ await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
397
347
  }
398
348
 
399
- public addAttestations(attestations: BlockAttestation[]): Promise<void> {
400
- return this.attestationPool?.addAttestations(attestations) ?? Promise.resolve();
349
+ public async getCheckpointAttestationsForSlot(
350
+ slot: SlotNumber,
351
+ proposalId?: string,
352
+ ): Promise<CheckpointAttestation[]> {
353
+ return await (proposalId
354
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
355
+ : this.attestationPool.getCheckpointAttestationsForSlot(slot));
401
356
  }
402
357
 
403
- public deleteAttestation(attestation: BlockAttestation): Promise<void> {
404
- return this.attestationPool?.deleteAttestations([attestation]) ?? Promise.resolve();
358
+ public addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
359
+ return this.attestationPool.addCheckpointAttestations(attestations);
405
360
  }
406
361
 
407
362
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
@@ -410,6 +365,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
410
365
  this.p2pService.registerBlockReceivedCallback(handler);
411
366
  }
412
367
 
368
+ public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
369
+ this.p2pService.registerCheckpointReceivedCallback(handler);
370
+ }
371
+
413
372
  /**
414
373
  * Uses the batched Request Response protocol to request a set of transactions from the network.
415
374
  */
@@ -652,7 +611,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
652
611
  * @returns Block number of latest L2 Block we've synced with.
653
612
  */
654
613
  public async getSyncedLatestBlockNum(): Promise<BlockNumber> {
655
- return (await this.synchedLatestBlockNumber.getAsync()) ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
614
+ const tips = await this.l2Tips.getL2Tips();
615
+ return tips.proposed.number;
656
616
  }
657
617
 
658
618
  /**
@@ -660,11 +620,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
660
620
  * @returns Block number of latest proven L2 Block we've synced with.
661
621
  */
662
622
  public async getSyncedProvenBlockNum(): Promise<BlockNumber> {
663
- return (await this.synchedProvenBlockNumber.getAsync()) ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
623
+ const tips = await this.l2Tips.getL2Tips();
624
+ return tips.proven.block.number;
664
625
  }
665
626
 
666
627
  public async getSyncedFinalizedBlockNum(): Promise<BlockNumber> {
667
- return (await this.synchedFinalizedBlockNumber.getAsync()) ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
628
+ const tips = await this.l2Tips.getL2Tips();
629
+ return tips.finalized.block.number;
668
630
  }
669
631
 
670
632
  /** Returns latest L2 slot for which we have seen an L2 block. */
@@ -700,7 +662,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
700
662
  private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
701
663
  for (const block of blocks) {
702
664
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
703
- await this.txPool.markAsMined(txHashes, block.getBlockHeader());
665
+ await this.txPool.markAsMined(txHashes, block.header);
704
666
  }
705
667
  }
706
668
 
@@ -709,29 +671,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
709
671
  * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
710
672
  * @returns Empty promise.
711
673
  */
712
- private async handleLatestL2Blocks(blocks: PublishedL2Block[]): Promise<void> {
674
+ private async handleLatestL2Blocks(blocks: L2Block[]): Promise<void> {
713
675
  if (!blocks.length) {
714
676
  return Promise.resolve();
715
677
  }
716
678
 
717
- await this.markTxsAsMinedFromBlocks(blocks.map(b => b.block));
718
- await this.startCollectingMissingTxs(blocks.map(b => b.block));
719
-
720
- const lastBlock = blocks.at(-1)!.block;
679
+ await this.markTxsAsMinedFromBlocks(blocks);
680
+ await this.txPool.clearNonEvictableTxs();
681
+ await this.startCollectingMissingTxs(blocks);
721
682
 
722
- await Promise.all(
723
- blocks.map(async block =>
724
- this.setBlockHash({
725
- number: block.block.number,
726
- hash: await block.block.hash().then(h => h.toString()),
727
- }),
728
- ),
729
- );
730
-
731
- await this.synchedLatestBlockNumber.set(lastBlock.number);
683
+ const lastBlock = blocks.at(-1)!;
732
684
  await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
733
685
  this.log.verbose(`Synched to latest block ${lastBlock.number}`);
734
- await this.startServiceIfSynched();
735
686
  }
736
687
 
737
688
  /** Request txs for unproven blocks so the prover node has more chances to get them. */
@@ -782,12 +733,9 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
782
733
  await this.txPool.deleteTxs(txHashes, { permanently: true });
783
734
  await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
784
735
 
785
- await this.attestationPool?.deleteAttestationsOlderThan(lastBlockSlot);
736
+ await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
786
737
 
787
- await this.synchedFinalizedBlockNumber.set(lastBlockNum);
788
738
  this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
789
-
790
- await this.startServiceIfSynched();
791
739
  }
792
740
 
793
741
  /**
@@ -833,21 +781,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
833
781
  this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
834
782
  await this.txPool.deleteTxs(minedTxsFromReorg);
835
783
  } else {
836
- this.log.info(`Moving ${minedTxsFromReorg.length} mined txs from reorg back to pending`);
837
- await this.txPool.markMinedAsPending(minedTxsFromReorg);
784
+ await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
838
785
  }
839
-
840
- await this.synchedLatestBlockNumber.set(latestBlock);
841
- // no need to update block hashes, as they will be updated as new blocks are added
842
786
  }
843
787
 
844
788
  private async startServiceIfSynched() {
845
789
  if (this.currentState !== P2PClientState.SYNCHING) {
846
790
  return;
847
791
  }
848
- const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum();
849
- const syncedProvenBlock = await this.getSyncedProvenBlockNum();
850
- const syncedLatestBlock = await this.getSyncedLatestBlockNum();
792
+ const tips = await this.l2Tips.getL2Tips();
793
+ const syncedFinalizedBlock = tips.finalized.block.number;
794
+ const syncedProvenBlock = tips.proven.block.number;
795
+ const syncedLatestBlock = tips.proposed.number;
851
796
 
852
797
  if (
853
798
  syncedLatestBlock >= this.latestBlockNumberAtStart &&
package/src/config.ts CHANGED
@@ -2,16 +2,16 @@ import {
2
2
  type ConfigMappingsType,
3
3
  SecretValue,
4
4
  booleanConfigHelper,
5
- floatConfigHelper,
6
5
  getConfigFromMappings,
7
6
  getDefaultConfig,
8
7
  numberConfigHelper,
8
+ percentageConfigHelper,
9
9
  pickConfigMappings,
10
10
  secretStringConfigHelper,
11
11
  } from '@aztec/foundation/config';
12
- import { Fr } from '@aztec/foundation/fields';
12
+ import { Fr } from '@aztec/foundation/curves/bn254';
13
13
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
14
- import { FunctionSelector } from '@aztec/stdlib/abi';
14
+ import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
15
15
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
16
16
  import { type AllowedElement, type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
17
17
 
@@ -133,11 +133,8 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig, TxCollectionCo
133
133
  /** Which calls are allowed in the public setup phase of a tx. */
134
134
  txPublicSetupAllowList: AllowedElement[];
135
135
 
136
- /** The maximum cumulative tx size (in bytes) of pending txs before evicting lower priority txs. */
137
- maxTxPoolSize: number;
138
-
139
- /** If the pool is full, it will still accept a few more txs until it reached maxTxPoolOverspillFactor * maxTxPoolSize. Then it will evict */
140
- txPoolOverflowFactor: number;
136
+ /** The maximum number of pending txs before evicting lower priority txs. */
137
+ maxPendingTxCount: number;
141
138
 
142
139
  /** The node's seen message ID cache size */
143
140
  seenMessageCacheSize: number;
@@ -375,15 +372,12 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
375
372
  printDefault: () =>
376
373
  'AuthRegistry, FeeJuice.increase_public_balance, Token.increase_public_balance, FPC.prepare_fee',
377
374
  },
378
- maxTxPoolSize: {
379
- env: 'P2P_MAX_TX_POOL_SIZE',
380
- description: 'The maximum cumulative tx size of pending txs (in bytes) before evicting lower priority txs.',
381
- ...numberConfigHelper(100_000_000), // 100MB
382
- },
383
- txPoolOverflowFactor: {
384
- env: 'P2P_TX_POOL_OVERFLOW_FACTOR',
385
- description: 'How much the tx pool can overflow before it starts evicting txs. Must be greater than 1',
386
- ...floatConfigHelper(1.1), // 10% overflow
375
+ maxPendingTxCount: {
376
+ env: 'P2P_MAX_PENDING_TX_COUNT',
377
+ description: 'The maximum number of pending txs before evicting lower priority txs.',
378
+ // Worst case scenario: Uncompressed public/private tx is ~ 156kb
379
+ // This implies we are using ~156MB of memory for pending pool
380
+ ...numberConfigHelper(1_000),
387
381
  },
388
382
  seenMessageCacheSize: {
389
383
  env: 'P2P_SEEN_MSG_CACHE_SIZE',
@@ -413,7 +407,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
413
407
  dropTransactionsProbability: {
414
408
  env: 'P2P_DROP_TX_CHANCE',
415
409
  description: 'The probability that a transaction is discarded (0 - 1). - For testing purposes only',
416
- ...floatConfigHelper(0),
410
+ ...percentageConfigHelper(0),
417
411
  },
418
412
  disableTransactions: {
419
413
  env: 'TRANSACTIONS_DISABLED',