@aztec/p2p 0.0.1-commit.c0b82b2 → 0.0.1-commit.c2eed6949

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 (230) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +22 -9
  5. package/dest/client/p2p_client.d.ts +1 -1
  6. package/dest/client/p2p_client.d.ts.map +1 -1
  7. package/dest/client/p2p_client.js +22 -34
  8. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +3 -3
  9. package/dest/config.d.ts +32 -11
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +86 -32
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
  13. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/attestation_pool.js +8 -4
  15. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  16. package/dest/mem_pools/instrumentation.d.ts +4 -2
  17. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  18. package/dest/mem_pools/instrumentation.js +16 -14
  19. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  20. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  21. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
  22. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  23. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  24. package/dest/mem_pools/tx_pool/priority.js +4 -4
  25. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  29. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  35. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  36. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  37. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  39. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  40. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
  43. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +33 -10
  45. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  52. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +24 -6
  54. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  55. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  56. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  57. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  58. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  59. package/dest/msg_validators/clock_tolerance.js +4 -3
  60. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  61. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  62. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  63. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  64. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  66. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  67. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  69. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  70. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  71. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  72. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  73. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  74. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  75. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  76. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  77. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  78. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  79. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  81. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  82. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  83. package/dest/msg_validators/tx_validator/factory.js +36 -10
  84. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  85. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  86. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  87. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  88. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/gas_validator.js +39 -9
  90. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  91. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/index.js +1 -0
  93. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  94. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  96. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  97. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  99. package/dest/services/discv5/discV5_service.d.ts +1 -1
  100. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  101. package/dest/services/discv5/discV5_service.js +4 -2
  102. package/dest/services/encoding.d.ts +5 -1
  103. package/dest/services/encoding.d.ts.map +1 -1
  104. package/dest/services/encoding.js +7 -1
  105. package/dest/services/libp2p/libp2p_service.d.ts +7 -9
  106. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  107. package/dest/services/libp2p/libp2p_service.js +166 -72
  108. package/dest/services/peer-manager/metrics.d.ts +3 -1
  109. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  110. package/dest/services/peer-manager/metrics.js +6 -0
  111. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  112. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  113. package/dest/services/peer-manager/peer_manager.js +6 -3
  114. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  115. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  116. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  117. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  118. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  119. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  120. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  121. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  122. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  123. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  124. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  125. package/dest/services/reqresp/reqresp.d.ts +1 -1
  126. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  127. package/dest/services/reqresp/reqresp.js +17 -9
  128. package/dest/services/service.d.ts +7 -1
  129. package/dest/services/service.d.ts.map +1 -1
  130. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  131. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  132. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  133. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  134. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  135. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  136. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  137. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  138. package/dest/services/tx_collection/request_tracker.js +84 -0
  139. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  140. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  141. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  142. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  143. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  144. package/dest/test-helpers/mock-pubsub.d.ts +6 -1
  145. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  146. package/dest/test-helpers/mock-pubsub.js +9 -1
  147. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  148. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  149. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  150. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  151. package/dest/test-helpers/testbench-utils.js +22 -3
  152. package/dest/testbench/p2p_client_testbench_worker.js +5 -4
  153. package/dest/testbench/worker_client_manager.d.ts +3 -1
  154. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  155. package/dest/testbench/worker_client_manager.js +6 -2
  156. package/dest/util.d.ts +9 -4
  157. package/dest/util.d.ts.map +1 -1
  158. package/dest/util.js +2 -9
  159. package/package.json +14 -14
  160. package/src/client/factory.ts +37 -13
  161. package/src/client/p2p_client.ts +22 -34
  162. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +4 -6
  163. package/src/config.ts +124 -34
  164. package/src/mem_pools/attestation_pool/attestation_pool.ts +8 -7
  165. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  166. package/src/mem_pools/instrumentation.ts +17 -13
  167. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  168. package/src/mem_pools/tx_pool/priority.ts +4 -4
  169. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  170. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  171. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  172. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  173. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  174. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  175. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  176. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +52 -12
  177. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  178. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  179. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +28 -6
  180. package/src/msg_validators/attestation_validator/README.md +49 -0
  181. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  182. package/src/msg_validators/clock_tolerance.ts +4 -3
  183. package/src/msg_validators/proposal_validator/README.md +123 -0
  184. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  185. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  186. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  187. package/src/msg_validators/tx_validator/README.md +5 -1
  188. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  189. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  190. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  191. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  192. package/src/msg_validators/tx_validator/factory.ts +43 -3
  193. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  194. package/src/msg_validators/tx_validator/gas_validator.ts +41 -8
  195. package/src/msg_validators/tx_validator/index.ts +1 -0
  196. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  197. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  198. package/src/services/discv5/discV5_service.ts +4 -2
  199. package/src/services/encoding.ts +9 -1
  200. package/src/services/libp2p/libp2p_service.ts +164 -80
  201. package/src/services/peer-manager/metrics.ts +7 -0
  202. package/src/services/peer-manager/peer_manager.ts +7 -3
  203. package/src/services/reqresp/README.md +229 -0
  204. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  205. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  206. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  207. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  208. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  209. package/src/services/reqresp/reqresp.ts +19 -11
  210. package/src/services/service.ts +7 -0
  211. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  212. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  213. package/src/services/tx_collection/request_tracker.ts +127 -0
  214. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  215. package/src/services/tx_collection/tx_collection.ts +3 -5
  216. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  217. package/src/test-helpers/mock-pubsub.ts +9 -0
  218. package/src/test-helpers/reqresp-nodes.ts +1 -1
  219. package/src/test-helpers/testbench-utils.ts +29 -3
  220. package/src/testbench/p2p_client_testbench_worker.ts +5 -6
  221. package/src/testbench/worker_client_manager.ts +13 -5
  222. package/src/util.ts +9 -13
  223. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  224. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  225. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  226. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  227. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  228. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  229. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  230. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -370,14 +370,15 @@ function applyDecs2203RFactory() {
370
370
  function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
371
  return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
372
372
  }
373
- var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _initProto;
373
+ var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _initProto;
374
374
  import { BlockNumber } from '@aztec/foundation/branded-types';
375
+ import { maxBy } from '@aztec/foundation/collection';
375
376
  import { createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
376
377
  import { RunningPromise } from '@aztec/foundation/running-promise';
377
378
  import { Timer } from '@aztec/foundation/timer';
378
379
  import { protocolContractsHash } from '@aztec/protocol-contracts';
379
380
  import { GasFees } from '@aztec/stdlib/gas';
380
- import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, PeerErrorSeverityByHarshness, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
382
  import { MerkleTreeId } from '@aztec/stdlib/trees';
382
383
  import { Tx } from '@aztec/stdlib/tx';
383
384
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
@@ -392,6 +393,7 @@ import { identify } from '@libp2p/identify';
392
393
  import { TopicValidatorResult } from '@libp2p/interface';
393
394
  import { mplex } from '@libp2p/mplex';
394
395
  import { tcp } from '@libp2p/tcp';
396
+ import { multiaddr } from '@multiformats/multiaddr';
395
397
  import { ENR } from '@nethermindeth/enr';
396
398
  import { createLibp2p } from 'libp2p';
397
399
  import { BlockProposalValidator, CheckpointAttestationValidator, CheckpointProposalValidator, DoubleSpendTxValidator, FishermanAttestationValidator, getDefaultAllowedSetupFunctions } from '../../msg_validators/index.js';
@@ -431,10 +433,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
431
433
  [Attributes.TX_HASH]: requestedTxHash.toString()
432
434
  })), _dec7 = trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock)=>({
433
435
  [Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString()
434
- })), _dec8 = trackSpan('Libp2pService.validateCheckpointAttestation', async (_, attestation)=>({
435
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
436
- [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
437
- [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
438
436
  }));
439
437
  /**
440
438
  * Lib P2P implementation of the P2PService interface.
@@ -490,11 +488,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
490
488
  _dec7,
491
489
  2,
492
490
  "validateRequestedBlock"
493
- ],
494
- [
495
- _dec8,
496
- 2,
497
- "validateCheckpointAttestation"
498
491
  ]
499
492
  ], []));
500
493
  }
@@ -520,6 +513,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
520
513
  * @returns The attestations for the checkpoint, if any.
521
514
  */ checkpointReceivedCallback;
522
515
  gossipSubEventHandler;
516
+ ipChangedHandler;
517
+ /** Discovered public IP address (set when queryForIp is enabled and no static IP was configured). */ discoveredP2pIp;
523
518
  instrumentation;
524
519
  telemetry;
525
520
  logger;
@@ -540,19 +535,19 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
540
535
  this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
541
536
  this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
542
537
  this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
543
- this.blockProposalValidator = new BlockProposalValidator(epochCache, {
544
- txsPermitted: !config.disableTransactions
545
- });
546
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
547
- txsPermitted: !config.disableTransactions
548
- });
538
+ const proposalValidatorOpts = {
539
+ txsPermitted: !config.disableTransactions,
540
+ maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint
541
+ };
542
+ this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
543
+ this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
549
544
  this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
550
545
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
551
546
  this.blockReceivedCallback = async (block)=>{
552
- this.logger.debug(`Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`, {
547
+ this.logger.warn(`Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`, {
553
548
  p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
554
549
  });
555
- return false;
550
+ return true;
556
551
  };
557
552
  this.checkpointReceivedCallback = (checkpoint)=>{
558
553
  this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
@@ -717,7 +712,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
717
712
  })
718
713
  }),
719
714
  components: (components)=>({
720
- connectionManager: components.connectionManager
715
+ connectionManager: components.connectionManager,
716
+ addressManager: components.addressManager
721
717
  })
722
718
  },
723
719
  logger: createLibp2pComponentLogger(logger.module, logger.getBindings())
@@ -744,10 +740,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
744
740
  }
745
741
  // Get listen & announce addresses for logging
746
742
  const { p2pIp, p2pPort } = this.config;
747
- if (!p2pIp) {
743
+ if (!p2pIp && !this.config.queryForIp) {
748
744
  throw new Error('Announce address not provided.');
749
745
  }
750
- const announceTcpMultiaddr = convertToMultiaddr(p2pIp, p2pPort, 'tcp');
746
+ const announceTcpMultiaddr = p2pIp ? convertToMultiaddr(p2pIp, p2pPort, 'tcp') : undefined;
751
747
  // Create request response protocol handlers
752
748
  const txHandler = reqRespTxHandler(this.mempools);
753
749
  const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
@@ -786,6 +782,29 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
786
782
  if (!this.config.p2pDiscoveryDisabled) {
787
783
  await this.peerDiscoveryService.start();
788
784
  }
785
+ // When queryForIp is enabled and no static IP was configured, bridge discv5 IP discovery to libp2p.
786
+ // Discv5 discovers our public IP via peer WHOAREYOU exchanges (enrUpdate=true) and emits 'ip:changed'.
787
+ // We confirm the discovered address in the libp2p AddressManager so it appears in getMultiaddrs()
788
+ // and is pushed to all connected peers via the identify protocol.
789
+ if (this.config.queryForIp && !p2pIp) {
790
+ this.ipChangedHandler = (ip)=>{
791
+ const addressManager = this.node.services.components.addressManager;
792
+ const newAddr = multiaddr(convertToMultiaddr(ip, this.config.p2pPort, 'tcp'));
793
+ // Remove old discovered IP if one exists
794
+ if (this.discoveredP2pIp) {
795
+ const oldAddr = multiaddr(convertToMultiaddr(this.discoveredP2pIp, this.config.p2pPort, 'tcp'));
796
+ addressManager.removeObservedAddr(oldAddr);
797
+ }
798
+ addressManager.addObservedAddr(newAddr);
799
+ addressManager.confirmObservedAddr(newAddr);
800
+ // Store discovered IP
801
+ this.discoveredP2pIp = ip;
802
+ this.logger.info('Public IP discovered via discv5', {
803
+ ip
804
+ });
805
+ };
806
+ this.peerDiscoveryService.on('ip:changed', this.ipChangedHandler);
807
+ }
789
808
  this.discoveryRunningPromise = new RunningPromise(async ()=>{
790
809
  await this.peerManager.heartbeat();
791
810
  }, this.logger, this.config.peerCheckIntervalMS);
@@ -793,7 +812,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
793
812
  this.logger.info(`Started P2P service`, {
794
813
  listen: this.config.listenAddress,
795
814
  port: this.config.p2pPort,
796
- announce: announceTcpMultiaddr,
815
+ announce: announceTcpMultiaddr ?? 'pending (queryForIp=true)',
797
816
  peerId: this.node.peerId.toString()
798
817
  });
799
818
  }
@@ -803,6 +822,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
803
822
  */ async stop() {
804
823
  // Remove gossip sub listener
805
824
  this.node.services.pubsub.removeEventListener(GossipSubEvent.MESSAGE, this.gossipSubEventHandler);
825
+ // Remove ip:changed listener if registered
826
+ if (this.ipChangedHandler) {
827
+ this.peerDiscoveryService.off('ip:changed', this.ipChangedHandler);
828
+ this.ipChangedHandler = undefined;
829
+ }
806
830
  // Stop peer manager
807
831
  this.logger.debug('Stopping peer manager...');
808
832
  await this.peerManager.stop();
@@ -926,6 +950,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
926
950
  if (!validator || !validator.addMessage(msgId)) {
927
951
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
928
952
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
953
+ if (topicType === TopicType.tx) {
954
+ this.logger.verbose(`Ignoring already-seen tx gossip message`, {
955
+ msgId,
956
+ source: source.toString()
957
+ });
958
+ }
929
959
  return {
930
960
  result: false,
931
961
  topicType
@@ -1031,29 +1061,67 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1031
1061
  return;
1032
1062
  }
1033
1063
  async validateReceivedMessage(validationFunc, msgId, source, topicType) {
1064
+ // Default to reject result with a penalty if validation function throws an error
1034
1065
  let resultAndObj = {
1035
- result: TopicValidatorResult.Reject
1066
+ result: TopicValidatorResult.Reject,
1067
+ severity: PeerErrorSeverity.MidToleranceError
1036
1068
  };
1037
1069
  const timer = new Timer();
1038
1070
  try {
1039
1071
  resultAndObj = await validationFunc();
1040
1072
  } catch (err) {
1041
- this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
1042
- this.logger.error(`Error deserializing and validating gossipsub message`, err, {
1073
+ this.logger.error(`Error validating gossipsub message`, err, {
1043
1074
  msgId,
1044
1075
  source: source.toString(),
1045
1076
  topicType
1046
1077
  });
1047
1078
  }
1048
1079
  if (resultAndObj.result === TopicValidatorResult.Accept) {
1080
+ this.logger.debug(`Message ${topicType} accepted by validator`, {
1081
+ msgId,
1082
+ source: source.toString(),
1083
+ topicType
1084
+ });
1049
1085
  this.instrumentation.recordMessageValidation(topicType, timer);
1086
+ } else if (resultAndObj.result === TopicValidatorResult.Reject) {
1087
+ this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
1088
+ msgId,
1089
+ source: source.toString(),
1090
+ topicType,
1091
+ severity: resultAndObj.severity
1092
+ });
1093
+ this.peerManager.penalizePeer(source, resultAndObj.severity);
1094
+ } else {
1095
+ this.logger.trace(`Message ${topicType} ignored by validator`, {
1096
+ msgId,
1097
+ source: source.toString(),
1098
+ topicType
1099
+ });
1050
1100
  }
1051
1101
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
1052
1102
  return resultAndObj;
1053
1103
  }
1104
+ tryDeserialize(deserializeFunc, msgId, source) {
1105
+ try {
1106
+ return deserializeFunc();
1107
+ } catch (err) {
1108
+ this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
1109
+ err,
1110
+ msgId,
1111
+ source: source.toString()
1112
+ });
1113
+ return undefined;
1114
+ }
1115
+ }
1054
1116
  async handleGossipedTx(payloadData, msgId, source) {
1055
1117
  const validationFunc = async ()=>{
1056
- const tx = Tx.fromBuffer(payloadData);
1118
+ const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
1119
+ if (!tx) {
1120
+ return {
1121
+ result: TopicValidatorResult.Reject,
1122
+ severity: PeerErrorSeverity.LowToleranceError
1123
+ };
1124
+ }
1057
1125
  const currentBlockNumber = await this.archiver.getBlockNumber();
1058
1126
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1059
1127
  // Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
@@ -1069,14 +1137,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1069
1137
  const txBlockNumber = BlockNumber(currentBlockNumber + 1);
1070
1138
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
1071
1139
  }
1072
- this.peerManager.penalizePeer(source, severity);
1140
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
1141
+ validator: name,
1142
+ severity,
1143
+ source: source.toString()
1144
+ });
1073
1145
  return {
1074
- result: TopicValidatorResult.Reject
1146
+ result: TopicValidatorResult.Reject,
1147
+ severity
1075
1148
  };
1076
1149
  }
1077
1150
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
1078
1151
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
1079
1152
  if (canAdd === 'ignored') {
1153
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
1154
+ source: source.toString()
1155
+ });
1080
1156
  return {
1081
1157
  result: TopicValidatorResult.Ignore,
1082
1158
  obj: tx
@@ -1086,10 +1162,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1086
1162
  const secondStageValidators = this.createSecondStageMessageValidators();
1087
1163
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
1088
1164
  if (!secondStageOutcome.allPassed) {
1089
- const { severity } = secondStageOutcome.failure;
1090
- this.peerManager.penalizePeer(source, severity);
1165
+ const { severity, name } = secondStageOutcome.failure;
1166
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
1167
+ validator: name,
1168
+ severity,
1169
+ source: source.toString()
1170
+ });
1091
1171
  return {
1092
- result: TopicValidatorResult.Reject
1172
+ result: TopicValidatorResult.Reject,
1173
+ severity
1093
1174
  };
1094
1175
  }
1095
1176
  // Pool add: persist the tx
@@ -1101,7 +1182,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1101
1182
  });
1102
1183
  const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
1103
1184
  const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
1104
- this.logger.trace(`Validate propagated tx`, {
1185
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
1105
1186
  wasAccepted,
1106
1187
  wasIgnored,
1107
1188
  [Attributes.P2P_ID]: source.toString()
@@ -1117,8 +1198,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1117
1198
  obj: tx
1118
1199
  };
1119
1200
  } else {
1201
+ this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
1202
+ source: source.toString(),
1203
+ txHash: txHash.toString()
1204
+ });
1120
1205
  return {
1121
- result: TopicValidatorResult.Reject
1206
+ result: TopicValidatorResult.Reject,
1207
+ severity: PeerErrorSeverity.HighToleranceError
1122
1208
  };
1123
1209
  }
1124
1210
  };
@@ -1139,7 +1225,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1139
1225
  * Process a checkpoint attestation from a peer.
1140
1226
  * Validates the attestation and adds it to the pool.
1141
1227
  */ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
1142
- const { result, obj: attestation } = await this.validateReceivedMessage(()=>this.validateAndStoreCheckpointAttestation(source, CheckpointAttestation.fromBuffer(payloadData)), msgId, source, TopicType.checkpoint_attestation);
1228
+ const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
1229
+ const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
1230
+ if (!attestation) {
1231
+ return Promise.resolve({
1232
+ result: TopicValidatorResult.Reject,
1233
+ severity: PeerErrorSeverity.LowToleranceError
1234
+ });
1235
+ }
1236
+ return this.validateAndStoreCheckpointAttestation(source, attestation);
1237
+ }, msgId, source, TopicType.checkpoint_attestation);
1143
1238
  if (result !== TopicValidatorResult.Accept || !attestation) {
1144
1239
  return;
1145
1240
  }
@@ -1154,9 +1249,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1154
1249
  const validationResult = await this.checkpointAttestationValidator.validate(attestation);
1155
1250
  if (validationResult.result === 'reject') {
1156
1251
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1157
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1158
1252
  return {
1159
- result: TopicValidatorResult.Reject
1253
+ result: TopicValidatorResult.Reject,
1254
+ severity: validationResult.severity
1160
1255
  };
1161
1256
  }
1162
1257
  if (validationResult.result === 'ignore') {
@@ -1183,9 +1278,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1183
1278
  obj: attestation
1184
1279
  };
1185
1280
  }
1186
- // Could not add (cap reached for signer), no need to re-broadcast
1281
+ // Could not add (cap reached for signer), penalize and do not re-broadcast
1187
1282
  if (!added) {
1188
- this.logger.warn(`Dropping checkpoint attestation due to cap`, {
1283
+ this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
1189
1284
  slot: slot.toString(),
1190
1285
  archive: attestation.archive.toString(),
1191
1286
  source: peerId.toString(),
@@ -1193,8 +1288,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1193
1288
  count
1194
1289
  });
1195
1290
  return {
1196
- result: TopicValidatorResult.Ignore,
1197
- obj: attestation
1291
+ result: TopicValidatorResult.Reject,
1292
+ severity: PeerErrorSeverity.HighToleranceError
1198
1293
  };
1199
1294
  }
1200
1295
  // Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
@@ -1232,9 +1327,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1232
1327
  const validationResult = await this.blockProposalValidator.validate(block);
1233
1328
  if (validationResult.result === 'reject') {
1234
1329
  this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
1235
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1236
1330
  return {
1237
- result: TopicValidatorResult.Reject
1331
+ result: TopicValidatorResult.Reject,
1332
+ severity: validationResult.severity
1238
1333
  };
1239
1334
  }
1240
1335
  if (validationResult.result === 'ignore') {
@@ -1264,7 +1359,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1264
1359
  }
1265
1360
  // Too many blocks received for this slot and index, penalize peer and do not re-broadcast
1266
1361
  if (!added) {
1267
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1268
1362
  this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
1269
1363
  ...block.toBlockInfo(),
1270
1364
  indexWithinCheckpoint: block.indexWithinCheckpoint,
@@ -1276,7 +1370,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1276
1370
  result: TopicValidatorResult.Reject,
1277
1371
  metadata: {
1278
1372
  isEquivocated
1279
- }
1373
+ },
1374
+ severity: PeerErrorSeverity.HighToleranceError
1280
1375
  };
1281
1376
  }
1282
1377
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1325,7 +1420,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1325
1420
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1326
1421
  const isValid = await this.blockReceivedCallback(block, sender);
1327
1422
  if (!isValid) {
1328
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1423
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1329
1424
  }
1330
1425
  }
1331
1426
  /**
@@ -1350,9 +1445,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1350
1445
  const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
1351
1446
  if (validationResult.result === 'reject') {
1352
1447
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1353
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1354
1448
  return {
1355
- result: TopicValidatorResult.Reject
1449
+ result: TopicValidatorResult.Reject,
1450
+ severity: validationResult.severity
1356
1451
  };
1357
1452
  }
1358
1453
  if (validationResult.result === 'ignore') {
@@ -1369,18 +1464,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1369
1464
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1370
1465
  [Attributes.P2P_ID]: peerId.toString()
1371
1466
  });
1372
- const { result, obj, metadata: { isEquivocated } = {} } = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1373
- if (result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1467
+ const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1468
+ const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
1469
+ if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1374
1470
  this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
1375
1471
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1376
1472
  [Attributes.P2P_ID]: peerId.toString(),
1377
1473
  isEquivocated,
1378
- result
1474
+ result: blockProposalResult.result
1379
1475
  });
1380
1476
  return {
1381
- result: TopicValidatorResult.Reject
1477
+ result: TopicValidatorResult.Reject,
1478
+ severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
1382
1479
  };
1383
- } else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1480
+ } else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1384
1481
  processBlock = true;
1385
1482
  }
1386
1483
  }
@@ -1407,7 +1504,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1407
1504
  // Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
1408
1505
  // Note: We still return the checkpoint obj so the lastBlock can be processed if valid
1409
1506
  if (!added) {
1410
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1411
1507
  this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
1412
1508
  ...checkpoint.toCheckpointInfo(),
1413
1509
  count,
@@ -1419,7 +1515,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1419
1515
  metadata: {
1420
1516
  isEquivocated,
1421
1517
  processBlock
1422
- }
1518
+ },
1519
+ severity: PeerErrorSeverity.HighToleranceError
1423
1520
  };
1424
1521
  }
1425
1522
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1689,9 +1786,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1689
1786
  }
1690
1787
  /** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
1691
1788
  const gasFees = await this.getGasFees(currentBlockNumber);
1692
- const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
1789
+ const allowedInSetup = [
1790
+ ...await getDefaultAllowedSetupFunctions(),
1791
+ ...this.config.txPublicSetupAllowListExtend ?? []
1792
+ ];
1693
1793
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1694
- return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings());
1794
+ const l1Constants = await this.archiver.getL1Constants();
1795
+ return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
1796
+ rollupManaLimit: l1Constants.rollupManaLimit,
1797
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1798
+ maxBlockDAGas: this.config.validateMaxDABlockGas
1799
+ });
1695
1800
  }
1696
1801
  /** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
1697
1802
  return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
@@ -1712,8 +1817,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1712
1817
  });
1713
1818
  // A promise that resolves when all validations have been run
1714
1819
  const allValidations = await Promise.all(validationPromises);
1715
- const failed = allValidations.find((x)=>!x.isValid);
1716
- if (failed) {
1820
+ const failures = allValidations.filter((x)=>!x.isValid);
1821
+ if (failures.length > 0) {
1822
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1823
+ const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
1717
1824
  return {
1718
1825
  allPassed: false,
1719
1826
  failure: {
@@ -1760,19 +1867,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1760
1867
  }
1761
1868
  return PeerErrorSeverity.HighToleranceError;
1762
1869
  }
1763
- /**
1764
- * Validate a checkpoint attestation.
1765
- *
1766
- * @param attestation - The checkpoint attestation to validate.
1767
- * @returns True if the checkpoint attestation is valid, false otherwise.
1768
- */ async validateCheckpointAttestation(peerId, attestation) {
1769
- const result = await this.checkpointAttestationValidator.validate(attestation);
1770
- if (result.result === 'reject') {
1771
- this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1772
- this.peerManager.penalizePeer(peerId, result.severity);
1773
- }
1774
- return result;
1775
- }
1776
1870
  getPeerScore(peerId) {
1777
1871
  return this.node.services.pubsub.score.score(peerId.toString());
1778
1872
  }
@@ -6,6 +6,7 @@ export declare class PeerManagerMetrics {
6
6
  private sentGoodbyes;
7
7
  private receivedGoodbyes;
8
8
  private peerCount;
9
+ private healthyPeerCount;
9
10
  private lowScoreDisconnects;
10
11
  private peerConnectionDuration;
11
12
  private peerConnectedAt;
@@ -14,8 +15,9 @@ export declare class PeerManagerMetrics {
14
15
  recordGoodbyeSent(reason: GoodByeReason): void;
15
16
  recordGoodbyeReceived(reason: GoodByeReason): void;
16
17
  recordPeerCount(count: number): void;
18
+ recordHealthyPeerCount(count: number): void;
17
19
  recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect'): void;
18
20
  peerConnected(id: PeerId): void;
19
21
  peerDisconnected(id: PeerId): void;
20
22
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQVlYLGVBQWUsRUFBRSxlQUFlO0lBWGxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsbUJBQW1CLENBQWdCO0lBQzNDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUUxQyxPQUFPLENBQUMsZUFBZSxDQUFrRDtJQUV6RSxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFlBQ2tCLGVBQWUsR0FBRSxlQUFzQyxFQUN2RSxJQUFJLFNBQWdCLEVBMEJyQjtJQUVNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRTdDO0lBRU0scUJBQXFCLENBQUMsTUFBTSxFQUFFLGFBQWEsUUFFakQ7SUFFTSxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFbkM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUtqQztDQUNGIn0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQWFYLGVBQWUsRUFBRSxlQUFlO0lBWmxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsZ0JBQWdCLENBQVE7SUFDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsc0JBQXNCLENBQVk7SUFFMUMsT0FBTyxDQUFDLGVBQWUsQ0FBa0Q7SUFFekUsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNrQixlQUFlLEdBQUUsZUFBc0MsRUFDdkUsSUFBSSxTQUFnQixFQTJCckI7SUFFTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUU3QztJQUVNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRWpEO0lBRU0sZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRW5DO0lBRU0sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFMUM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU1qQztDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAYX,eAAe,EAAE,eAAe;IAXlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA0BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAKjC;CACF"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAaX,eAAe,EAAE,eAAe;IAZlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA2BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,QAE1C;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAMjC;CACF"}
@@ -5,6 +5,7 @@ export class PeerManagerMetrics {
5
5
  sentGoodbyes;
6
6
  receivedGoodbyes;
7
7
  peerCount;
8
+ healthyPeerCount;
8
9
  lowScoreDisconnects;
9
10
  peerConnectionDuration;
10
11
  peerConnectedAt;
@@ -27,6 +28,7 @@ export class PeerManagerMetrics {
27
28
  this.sentGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_SENT, goodbyeReasonAttrs);
28
29
  this.receivedGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_RECEIVED, goodbyeReasonAttrs);
29
30
  this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
31
+ this.healthyPeerCount = meter.createGauge(Metrics.PEER_MANAGER_HEALTHY_PEER_COUNT);
30
32
  this.lowScoreDisconnects = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
31
33
  [Attributes.P2P_PEER_SCORE_STATE]: [
32
34
  'Banned',
@@ -48,6 +50,9 @@ export class PeerManagerMetrics {
48
50
  recordPeerCount(count) {
49
51
  this.peerCount.record(count);
50
52
  }
53
+ recordHealthyPeerCount(count) {
54
+ this.healthyPeerCount.record(count);
55
+ }
51
56
  recordLowScoreDisconnect(scoreState) {
52
57
  this.lowScoreDisconnects.add(1, {
53
58
  [Attributes.P2P_PEER_SCORE_STATE]: scoreState
@@ -60,6 +65,7 @@ export class PeerManagerMetrics {
60
65
  const connectedAt = this.peerConnectedAt.get(id.toString());
61
66
  if (connectedAt) {
62
67
  this.peerConnectionDuration.record(Date.now() - connectedAt);
68
+ this.peerConnectedAt.delete(id.toString());
63
69
  }
64
70
  }
65
71
  }
@@ -171,4 +171,4 @@ export declare class PeerManager implements PeerManagerInterface {
171
171
  handleAuthRequestFromPeer(_authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
172
172
  private updateAuthenticatedPeers;
173
173
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
@@ -1 +1 @@
1
- {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}