@aztec/p2p 0.0.1-commit.43597cc1 → 0.0.1-commit.4ad48494d

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 (185) hide show
  1. package/dest/client/factory.d.ts +3 -3
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +42 -8
  4. package/dest/client/interface.d.ts +30 -15
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +33 -35
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +107 -137
  9. package/dest/config.d.ts +19 -2
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +14 -0
  12. package/dest/index.d.ts +2 -1
  13. package/dest/index.d.ts.map +1 -1
  14. package/dest/index.js +1 -0
  15. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +21 -12
  16. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  17. package/dest/mem_pools/attestation_pool/attestation_pool.js +67 -37
  18. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  19. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +53 -53
  21. package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
  22. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  23. package/dest/mem_pools/attestation_pool/index.js +1 -1
  24. package/dest/mem_pools/index.d.ts +2 -1
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/interface.d.ts +3 -3
  27. package/dest/mem_pools/interface.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +102 -0
  29. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  30. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +242 -0
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -0
  34. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -1
  35. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +3 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +3 -1
  39. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -1
  40. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/index.js +1 -0
  42. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +7 -3
  43. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  45. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +27 -3
  46. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +37 -4
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +8 -2
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +15 -2
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  52. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -2
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +4 -2
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +110 -78
  57. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +3 -3
  58. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  59. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  60. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  61. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  62. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  63. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  64. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  65. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  66. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  68. package/dest/services/dummy_service.d.ts +6 -2
  69. package/dest/services/dummy_service.d.ts.map +1 -1
  70. package/dest/services/dummy_service.js +3 -0
  71. package/dest/services/encoding.d.ts +2 -2
  72. package/dest/services/encoding.d.ts.map +1 -1
  73. package/dest/services/encoding.js +2 -2
  74. package/dest/services/libp2p/libp2p_service.d.ts +11 -3
  75. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  76. package/dest/services/libp2p/libp2p_service.js +71 -35
  77. package/dest/services/reqresp/interface.d.ts +10 -1
  78. package/dest/services/reqresp/interface.d.ts.map +1 -1
  79. package/dest/services/reqresp/interface.js +15 -1
  80. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +3 -3
  81. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  82. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
  83. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  84. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
  85. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  86. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  87. package/dest/services/reqresp/protocols/tx.js +20 -0
  88. package/dest/services/reqresp/reqresp.d.ts +1 -1
  89. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  90. package/dest/services/reqresp/reqresp.js +11 -4
  91. package/dest/services/service.d.ts +18 -1
  92. package/dest/services/service.d.ts.map +1 -1
  93. package/dest/services/tx_collection/config.d.ts +19 -1
  94. package/dest/services/tx_collection/config.d.ts.map +1 -1
  95. package/dest/services/tx_collection/config.js +46 -0
  96. package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -1
  97. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  98. package/dest/services/tx_collection/fast_tx_collection.js +17 -3
  99. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  100. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  101. package/dest/services/tx_collection/file_store_tx_collection.js +165 -0
  102. package/dest/services/tx_collection/file_store_tx_source.d.ts +28 -0
  103. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  104. package/dest/services/tx_collection/file_store_tx_source.js +59 -0
  105. package/dest/services/tx_collection/index.d.ts +2 -1
  106. package/dest/services/tx_collection/index.d.ts.map +1 -1
  107. package/dest/services/tx_collection/index.js +1 -0
  108. package/dest/services/tx_collection/slow_tx_collection.d.ts +6 -2
  109. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  110. package/dest/services/tx_collection/slow_tx_collection.js +55 -23
  111. package/dest/services/tx_collection/tx_collection.d.ts +19 -7
  112. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  113. package/dest/services/tx_collection/tx_collection.js +75 -3
  114. package/dest/services/tx_collection/tx_collection_sink.d.ts +15 -6
  115. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  116. package/dest/services/tx_collection/tx_collection_sink.js +13 -7
  117. package/dest/services/tx_file_store/config.d.ts +1 -3
  118. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  119. package/dest/services/tx_file_store/config.js +0 -4
  120. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -3
  121. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  122. package/dest/services/tx_file_store/tx_file_store.js +8 -5
  123. package/dest/services/tx_provider.d.ts +3 -3
  124. package/dest/services/tx_provider.d.ts.map +1 -1
  125. package/dest/services/tx_provider.js +5 -4
  126. package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
  127. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  128. package/dest/test-helpers/mock-pubsub.d.ts +27 -1
  129. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  130. package/dest/test-helpers/mock-pubsub.js +97 -2
  131. package/dest/test-helpers/testbench-utils.d.ts +32 -24
  132. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  133. package/dest/test-helpers/testbench-utils.js +93 -35
  134. package/dest/testbench/p2p_client_testbench_worker.js +1 -1
  135. package/package.json +14 -14
  136. package/src/client/factory.ts +78 -9
  137. package/src/client/interface.ts +32 -13
  138. package/src/client/p2p_client.ts +135 -157
  139. package/src/config.ts +24 -0
  140. package/src/index.ts +1 -0
  141. package/src/mem_pools/attestation_pool/attestation_pool.ts +95 -44
  142. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +57 -53
  143. package/src/mem_pools/attestation_pool/index.ts +3 -3
  144. package/src/mem_pools/index.ts +3 -0
  145. package/src/mem_pools/interface.ts +2 -2
  146. package/src/mem_pools/tx_pool_v2/README.md +75 -9
  147. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +310 -0
  148. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -0
  149. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -1
  150. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +1 -1
  151. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +3 -1
  152. package/src/mem_pools/tx_pool_v2/index.ts +1 -0
  153. package/src/mem_pools/tx_pool_v2/interfaces.ts +8 -2
  154. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +55 -5
  155. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +18 -2
  156. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +7 -1
  157. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +122 -80
  158. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +2 -2
  159. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  160. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  161. package/src/msg_validators/tx_validator/timestamp_validator.ts +19 -14
  162. package/src/services/dummy_service.ts +6 -0
  163. package/src/services/encoding.ts +2 -2
  164. package/src/services/libp2p/libp2p_service.ts +70 -37
  165. package/src/services/reqresp/interface.ts +26 -1
  166. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
  167. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
  168. package/src/services/reqresp/protocols/tx.ts +22 -0
  169. package/src/services/reqresp/reqresp.ts +13 -3
  170. package/src/services/service.ts +20 -0
  171. package/src/services/tx_collection/config.ts +68 -0
  172. package/src/services/tx_collection/fast_tx_collection.ts +14 -2
  173. package/src/services/tx_collection/file_store_tx_collection.ts +198 -0
  174. package/src/services/tx_collection/file_store_tx_source.ts +73 -0
  175. package/src/services/tx_collection/index.ts +1 -0
  176. package/src/services/tx_collection/slow_tx_collection.ts +64 -30
  177. package/src/services/tx_collection/tx_collection.ts +109 -13
  178. package/src/services/tx_collection/tx_collection_sink.ts +17 -7
  179. package/src/services/tx_file_store/config.ts +0 -6
  180. package/src/services/tx_file_store/tx_file_store.ts +9 -7
  181. package/src/services/tx_provider.ts +8 -7
  182. package/src/test-helpers/make-test-p2p-clients.ts +3 -3
  183. package/src/test-helpers/mock-pubsub.ts +133 -3
  184. package/src/test-helpers/testbench-utils.ts +108 -40
  185. package/src/testbench/p2p_client_testbench_worker.ts +1 -1
@@ -374,6 +374,7 @@ var _dec, _dec1, _initProto;
374
374
  import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
375
375
  import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
376
376
  import { createLogger } from '@aztec/foundation/log';
377
+ import { RunningPromise } from '@aztec/foundation/promise';
377
378
  import { DateProvider } from '@aztec/foundation/timer';
378
379
  import { L2TipsKVStore } from '@aztec/kv-store/stores';
379
380
  import { L2BlockStream } from '@aztec/stdlib/block';
@@ -402,6 +403,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
402
403
  p2pService;
403
404
  txCollection;
404
405
  txFileStore;
406
+ epochCache;
405
407
  _dateProvider;
406
408
  telemetry;
407
409
  log;
@@ -434,15 +436,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
434
436
  blockStream;
435
437
  txProvider;
436
438
  validatorAddresses;
437
- /**
438
- * In-memory P2P client constructor.
439
- * @param store - The client's instance of the KV store.
440
- * @param l2BlockSource - P2P client's source for fetching existing blocks.
441
- * @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
442
- * @param p2pService - The concrete instance of p2p networking to use.
443
- * @param log - A logger.
444
- */ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
445
- super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
439
+ /** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
440
+ /** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
441
+ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
442
+ super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this.epochCache = epochCache, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [], this.lastSlotProcessed = SlotNumber.ZERO;
446
443
  this.config = {
447
444
  ...getP2PDefaultConfig(),
448
445
  ...config
@@ -497,10 +494,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
497
494
  getL2BlockHash(number) {
498
495
  return this.l2Tips.getL2BlockHash(number);
499
496
  }
500
- updateP2PConfig(config) {
501
- this.txPool.updateConfig(config);
497
+ async updateP2PConfig(config) {
498
+ await this.txPool.updateConfig(config);
502
499
  this.p2pService.updateConfig(config);
503
- return Promise.resolve();
504
500
  }
505
501
  getL2Tips() {
506
502
  return this.l2Tips.getL2Tips();
@@ -527,7 +523,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
527
523
  break;
528
524
  case 'chain-pruned':
529
525
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
530
- await this.handlePruneL2Blocks(event.block.number);
526
+ await this.handlePruneL2Blocks(event.block);
531
527
  break;
532
528
  case 'chain-checkpointed':
533
529
  break;
@@ -542,7 +538,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
542
538
  await this.startServiceIfSynched();
543
539
  }
544
540
  #assertIsReady() {
545
- // this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
546
541
  if (!this.isReady()) {
547
542
  throw new Error('P2P client not ready');
548
543
  }
@@ -557,6 +552,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
557
552
  if (this.currentState !== P2PClientState.IDLE) {
558
553
  return this.syncPromise;
559
554
  }
555
+ // Start the tx pool first, as it needs to hydrate state from persistence
556
+ await this.txPool.start();
560
557
  // get the current latest block numbers
561
558
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
562
559
  this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
@@ -600,6 +597,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
600
597
  this.blockStream.start();
601
598
  await this.txCollection.start();
602
599
  this.txFileStore?.start();
600
+ // Start slot monitor to call prepareForSlot when the slot changes
601
+ this.slotMonitor = new RunningPromise(()=>this.maybeCallPrepareForSlot(), this.log, this.config.slotCheckIntervalMS);
602
+ this.slotMonitor.start();
603
603
  return this.syncPromise;
604
604
  }
605
605
  addReqRespSubProtocol(subProtocol, handler, validator) {
@@ -620,6 +620,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
620
620
  * 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
621
621
  */ async stop() {
622
622
  this.log.debug('Stopping p2p client...');
623
+ await this.slotMonitor?.stop();
624
+ this.log.debug('Stopped slot monitor');
623
625
  await tryStop(this.txCollection);
624
626
  this.log.debug('Stopped tx collection service');
625
627
  await this.txFileStore?.stop();
@@ -628,6 +630,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
628
630
  this.log.debug('Stopped p2p service');
629
631
  await this.blockStream?.stop();
630
632
  this.log.debug('Stopped block downloader');
633
+ await this.txPool.stop();
634
+ this.log.debug('Stopped tx pool');
631
635
  await this.runningPromise;
632
636
  this.setCurrentState(P2PClientState.STOPPED);
633
637
  this.log.info('P2P client stopped');
@@ -639,9 +643,17 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
639
643
  async broadcastProposal(proposal) {
640
644
  this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
641
645
  // Store our own proposal so we can respond to req/resp requests for it
642
- const { totalForPosition } = await this.attestationPool.tryAddBlockProposal(proposal);
643
- if (totalForPosition > 1) {
644
- throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
646
+ const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
647
+ if (count > 1) {
648
+ if (this.config.broadcastEquivocatedProposals) {
649
+ this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
650
+ slot: proposal.slotNumber,
651
+ archive: proposal.archive.toString(),
652
+ count
653
+ });
654
+ } else {
655
+ throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
656
+ }
645
657
  }
646
658
  return this.p2pService.propagate(proposal);
647
659
  }
@@ -664,6 +676,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
664
676
  addOwnCheckpointAttestations(attestations) {
665
677
  return this.attestationPool.addOwnCheckpointAttestations(attestations);
666
678
  }
679
+ hasBlockProposalsForSlot(slot) {
680
+ return this.attestationPool.hasBlockProposalsForSlot(slot);
681
+ }
667
682
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
668
683
  // ^ This pattern is not my favorite (md)
669
684
  registerBlockProposalHandler(handler) {
@@ -675,6 +690,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
675
690
  registerDuplicateProposalCallback(callback) {
676
691
  this.p2pService.registerDuplicateProposalCallback(callback);
677
692
  }
693
+ registerDuplicateAttestationCallback(callback) {
694
+ this.p2pService.registerDuplicateAttestationCallback(callback);
695
+ }
678
696
  /**
679
697
  * Uses the batched Request Response protocol to request a set of transactions from the network.
680
698
  */ async requestTxsByHash(txHashes, pinnedPeerId) {
@@ -685,15 +703,30 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
685
703
  const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
686
704
  const txs = txBatches.flat();
687
705
  if (txs.length > 0) {
688
- await this.txPool.addTxs(txs);
706
+ await this.txPool.addPendingTxs(txs);
689
707
  }
690
708
  const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
691
709
  this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
692
710
  // We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
693
711
  return txs;
694
712
  }
695
- getPendingTxs(limit, after) {
696
- return this.getTxs('pending', limit, after);
713
+ async getPendingTxs(limit, after) {
714
+ if (limit !== undefined && limit <= 0) {
715
+ throw new TypeError('limit must be greater than 0');
716
+ }
717
+ let txHashes = await this.txPool.getPendingTxHashes();
718
+ let startIndex = 0;
719
+ if (after) {
720
+ startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
721
+ if (startIndex === -1) {
722
+ return [];
723
+ }
724
+ startIndex++;
725
+ }
726
+ const endIndex = limit !== undefined ? startIndex + limit : undefined;
727
+ txHashes = txHashes.slice(startIndex, endIndex);
728
+ const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
729
+ return maybeTxs.filter((tx)=>!!tx);
697
730
  }
698
731
  getPendingTxCount() {
699
732
  return this.txPool.getPendingTxCount();
@@ -706,52 +739,13 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
706
739
  }
707
740
  }
708
741
  }
709
- /**
710
- * Returns all transactions in the transaction pool.
711
- * @param filter - The type of txs to return
712
- * @param limit - How many txs to return
713
- * @param after - If paginating, the last known tx hash. Will return txs after this hash
714
- * @returns An array of Txs.
715
- */ async getTxs(filter, limit, after) {
716
- if (limit !== undefined && limit <= 0) {
717
- throw new TypeError('limit must be greater than 0');
718
- }
719
- let txs = undefined;
720
- let txHashes;
721
- if (filter === 'all') {
722
- txs = await this.txPool.getAllTxs();
723
- txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
724
- } else if (filter === 'mined') {
725
- const minedTxHashes = await this.txPool.getMinedTxHashes();
726
- txHashes = minedTxHashes.map(([txHash])=>txHash);
727
- } else if (filter === 'pending') {
728
- txHashes = await this.txPool.getPendingTxHashes();
729
- } else {
730
- const _ = filter;
731
- throw new Error(`Unknown filter ${filter}`);
732
- }
733
- let startIndex = 0;
734
- let endIndex = undefined;
735
- if (after) {
736
- startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
737
- // if we can't find the last tx in our set then return an empty array as pagination is no longer valid.
738
- if (startIndex === -1) {
739
- return [];
742
+ async *iterateEligiblePendingTxs() {
743
+ for (const txHash of (await this.txPool.getEligiblePendingTxHashes())){
744
+ const tx = await this.txPool.getTxByHash(txHash);
745
+ if (tx) {
746
+ yield tx;
740
747
  }
741
- // increment by one because we don't want to return the same tx again
742
- startIndex++;
743
- }
744
- if (limit !== undefined) {
745
- endIndex = startIndex + limit;
746
- }
747
- txHashes = txHashes.slice(startIndex, endIndex);
748
- if (txs) {
749
- txs = txs.slice(startIndex, endIndex);
750
- } else {
751
- const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
752
- txs = maybeTxs.filter((tx)=>!!tx);
753
748
  }
754
- return txs;
755
749
  }
756
750
  /**
757
751
  * Returns a transaction in the transaction pool by its hash.
@@ -814,16 +808,18 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
814
808
  return this.txPool.getArchivedTxByHash(txHash);
815
809
  }
816
810
  /**
817
- * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
818
- * @param tx - The tx to verify.
811
+ * Accepts a transaction, adds it to local tx pool and forwards it to other peers.
812
+ * @param tx - The tx to send.
819
813
  * @returns Empty promise.
820
814
  **/ async sendTx(tx) {
821
- const addedCount = await this.addTxsToPool([
815
+ this.#assertIsReady();
816
+ const result = await this.txPool.addPendingTxs([
822
817
  tx
823
818
  ]);
824
- const txAddedSuccessfully = addedCount === 1;
825
- if (txAddedSuccessfully) {
819
+ if (result.accepted.length === 1) {
826
820
  await this.p2pService.propagate(tx);
821
+ } else {
822
+ this.log.warn(`Tx ${tx.getTxHash()} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`);
827
823
  }
828
824
  }
829
825
  /**
@@ -831,14 +827,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
831
827
  * @param txs - The transactions.
832
828
  **/ async addTxsToPool(txs) {
833
829
  this.#assertIsReady();
834
- return await this.txPool.addTxs(txs);
830
+ return (await this.txPool.addPendingTxs(txs)).accepted.length;
835
831
  }
836
832
  /**
837
833
  * Returns whether the given tx hash is flagged as pending or mined.
838
834
  * @param txHash - Hash of the tx to query.
839
835
  * @returns Pending or mined depending on its status, or undefined if not found.
840
- */ getTxStatus(txHash) {
841
- return this.txPool.getTxStatus(txHash);
836
+ */ async getTxStatus(txHash) {
837
+ const status = await this.txPool.getTxStatus(txHash);
838
+ return status === 'protected' ? 'pending' : status;
842
839
  }
843
840
  getEnr() {
844
841
  return this.p2pService.getEnr();
@@ -847,13 +844,11 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
847
844
  return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
848
845
  }
849
846
  /**
850
- * Deletes the 'txs' from the pool.
851
- * NOT used if we use sendTx as reconcileTxPool will handle this.
852
- * @param txHashes - Hashes of the transactions to delete.
853
- * @returns Empty promise.
854
- **/ async deleteTxs(txHashes) {
847
+ * Handles failed transaction execution by removing txs from the pool.
848
+ * @param txHashes - Hashes of the transactions that failed execution.
849
+ **/ async handleFailedExecution(txHashes) {
855
850
  this.#assertIsReady();
856
- await this.txPool.deleteTxs(txHashes);
851
+ await this.txPool.handleFailedExecution(txHashes);
857
852
  }
858
853
  /**
859
854
  * Public function to check if the p2p client is fully synced and ready to receive txs.
@@ -897,13 +892,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
897
892
  };
898
893
  }
899
894
  /**
900
- * Mark all txs from these blocks as mined.
895
+ * Handles mined blocks by marking the txs in them as mined.
901
896
  * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
902
897
  * @returns Empty promise.
903
- */ async markTxsAsMinedFromBlocks(blocks) {
898
+ */ async handleMinedBlocks(blocks) {
904
899
  for (const block of blocks){
905
- const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
906
- await this.txPool.markAsMined(txHashes, block.header);
900
+ await this.txPool.handleMinedBlock(block);
907
901
  }
908
902
  }
909
903
  /**
@@ -912,14 +906,13 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
912
906
  * @returns Empty promise.
913
907
  */ async handleLatestL2Blocks(blocks) {
914
908
  if (!blocks.length) {
915
- return Promise.resolve();
909
+ return;
916
910
  }
917
- await this.markTxsAsMinedFromBlocks(blocks);
918
- await this.txPool.clearNonEvictableTxs();
911
+ await this.handleMinedBlocks(blocks);
912
+ await this.maybeCallPrepareForSlot();
919
913
  await this.startCollectingMissingTxs(blocks);
920
914
  const lastBlock = blocks.at(-1);
921
915
  await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
922
- this.log.verbose(`Synched to latest block ${lastBlock.number}`);
923
916
  }
924
917
  /** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
925
918
  try {
@@ -953,59 +946,26 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
953
946
  * @returns Empty promise.
954
947
  */ async handleFinalizedL2Blocks(blocks) {
955
948
  if (!blocks.length) {
956
- return Promise.resolve();
949
+ return;
957
950
  }
958
- this.log.debug(`Handling finalized blocks ${blocks.length} up to ${blocks.at(-1)?.number}`);
959
- const lastBlockNum = blocks[blocks.length - 1].number;
960
- const lastBlockSlot = blocks[blocks.length - 1].header.getSlot();
961
- const txHashes = blocks.flatMap((block)=>block.body.txEffects.map((txEffect)=>txEffect.txHash));
962
- this.log.debug(`Deleting ${txHashes.length} txs from pool from finalized blocks up to ${lastBlockNum}`);
963
- await this.txPool.deleteTxs(txHashes, {
964
- permanently: true
965
- });
966
- await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
967
- await this.attestationPool.deleteOlderThan(lastBlockSlot);
968
- this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
951
+ // Finalization is monotonic, so we only need to call with the last block
952
+ const lastBlock = blocks.at(-1);
953
+ await this.txPool.handleFinalizedBlock(lastBlock.header);
954
+ await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
969
955
  }
970
956
  /**
971
957
  * Updates the tx pool after a chain prune.
972
- * @param latestBlock - The block number the chain was pruned to.
958
+ * @param latestBlock - The block ID the chain was pruned to.
973
959
  */ async handlePruneL2Blocks(latestBlock) {
974
- const txsToDelete = new Map();
975
- const minedTxs = await this.txPool.getMinedTxHashes();
976
- // Find transactions that reference pruned blocks in their historical header
977
- for (const tx of (await this.txPool.getAllTxs())){
978
- // every tx that's been generated against a block that has now been pruned is no longer valid
979
- if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber > latestBlock) {
980
- const txHash = tx.getTxHash();
981
- txsToDelete.set(txHash.toString(), txHash);
982
- }
983
- }
984
- this.log.info(`Detected chain prune. Removing ${txsToDelete.size} txs built against pruned blocks.`, {
985
- newLatestBlock: latestBlock,
986
- previousLatestBlock: await this.getSyncedLatestBlockNum(),
987
- txsToDelete: Array.from(txsToDelete.keys())
988
- });
989
- // delete invalid txs (both pending and mined)
990
- await this.txPool.deleteTxs(Array.from(txsToDelete.values()));
991
- // everything left in the mined set was built against a block on the proven chain so its still valid
992
- // move back to pending the txs that were reorged out of the chain, unless txPoolDeleteTxsAfterReorg is set,
993
- // in which case we clean them up to avoid potential reorg loops
994
- // NOTE: we can't move _all_ txs back to pending because the tx pool could keep hold of mined txs for longer
995
- // (see this.keepProvenTxsFor)
996
- const minedTxsFromReorg = [];
997
- for (const [txHash, blockNumber] of minedTxs){
998
- // We keep the txsToDelete out of this list as they have already been deleted above
999
- if (blockNumber > latestBlock && !txsToDelete.has(txHash.toString())) {
1000
- minedTxsFromReorg.push(txHash);
1001
- }
1002
- }
1003
- if (this.config.txPoolDeleteTxsAfterReorg) {
1004
- this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
1005
- await this.txPool.deleteTxs(minedTxsFromReorg);
1006
- } else {
1007
- await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
960
+ await this.txPool.handlePrunedBlocks(latestBlock);
961
+ }
962
+ /** Checks if the slot has changed and calls prepareForSlot if so. */ async maybeCallPrepareForSlot() {
963
+ const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
964
+ if (currentSlot <= this.lastSlotProcessed) {
965
+ return;
1008
966
  }
967
+ this.lastSlotProcessed = currentSlot;
968
+ await this.txPool.prepareForSlot(currentSlot);
1009
969
  }
1010
970
  async startServiceIfSynched() {
1011
971
  if (this.currentState !== P2PClientState.SYNCHING) {
@@ -1040,10 +1000,20 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
1040
1000
  return this.p2pService.validate(txs);
1041
1001
  }
1042
1002
  /**
1043
- * Marks transactions as non-evictable in the pool.
1044
- * @param txHashes - Hashes of the transactions to mark as non-evictable.
1045
- */ markTxsAsNonEvictable(txHashes) {
1046
- return this.txPool.markTxsAsNonEvictable(txHashes);
1003
+ * Protects existing transactions by hash for a given slot.
1004
+ * Returns hashes of transactions that weren't found in the pool.
1005
+ * @param txHashes - Hashes of the transactions to protect.
1006
+ * @param blockHeader - The block header providing slot context.
1007
+ * @returns Hashes of transactions not found in the pool.
1008
+ */ protectTxs(txHashes, blockHeader) {
1009
+ return this.txPool.protectTxs(txHashes, blockHeader);
1010
+ }
1011
+ /**
1012
+ * Prepares the pool for a new slot.
1013
+ * Unprotects transactions from earlier slots and validates them.
1014
+ * @param slotNumber - The slot number to prepare for
1015
+ */ async prepareForSlot(slotNumber) {
1016
+ await this.txPool.prepareForSlot(slotNumber);
1047
1017
  }
1048
1018
  handleAuthRequestFromPeer(authRequest, peerId) {
1049
1019
  return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
package/dest/config.d.ts CHANGED
@@ -13,6 +13,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
13
13
  p2pEnabled: boolean;
14
14
  /** The frequency in which to check for new L2 blocks. */
15
15
  blockCheckIntervalMS: number;
16
+ /** The frequency in which to check for new L2 slots. */
17
+ slotCheckIntervalMS: number;
16
18
  /** The number of blocks to fetch in a single batch. */
17
19
  blockRequestBatchSize: number;
18
20
  /** DEBUG: Disable colocation penalty - for testing purposes only */
@@ -107,6 +109,10 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
107
109
  debugP2PInstrumentMessages: boolean;
108
110
  /** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
109
111
  fishermanMode: boolean;
112
+ /** Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only). */
113
+ broadcastEquivocatedProposals?: boolean;
114
+ /** Minimum age (ms) a transaction must have been in the pool before it's eligible for block building. */
115
+ minTxPoolAgeMs: number;
110
116
  }
111
117
  export declare const DEFAULT_P2P_PORT = 40400;
112
118
  export declare const p2pConfigMappings: ConfigMappingsType<P2PConfig>;
@@ -132,6 +138,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
132
138
  bootstrapNodeEnrVersionCheck: unknown;
133
139
  bootstrapNodes: unknown;
134
140
  bootstrapNodesAsFullPeers: unknown;
141
+ broadcastEquivocatedProposals: unknown;
135
142
  dataDirectory: unknown;
136
143
  dataStoreMapSizeKb: unknown;
137
144
  debugDisableColocationPenalty: unknown;
@@ -161,6 +168,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
161
168
  listenAddress: unknown;
162
169
  maxPeerCount: unknown;
163
170
  maxPendingTxCount: unknown;
171
+ minTxPoolAgeMs: unknown;
164
172
  overallRequestTimeoutMs: unknown;
165
173
  p2pAllowOnlyValidators: unknown;
166
174
  p2pBroadcastPort: unknown;
@@ -181,11 +189,21 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
181
189
  queryForIp: unknown;
182
190
  rollupVersion: unknown;
183
191
  seenMessageCacheSize: unknown;
192
+ slotCheckIntervalMS: unknown;
184
193
  trustedPeers: unknown;
185
194
  txCollectionDisableSlowDuringFastRequests: unknown;
186
195
  txCollectionFastMaxParallelRequestsPerNode: unknown;
187
196
  txCollectionFastNodeIntervalMs: unknown;
188
197
  txCollectionFastNodesTimeoutBeforeReqRespMs: unknown;
198
+ txCollectionFileStoreFastBackoffBaseMs: unknown;
199
+ txCollectionFileStoreFastBackoffMaxMs: unknown;
200
+ txCollectionFileStoreFastDelayMs: unknown;
201
+ txCollectionFileStoreFastWorkerCount: unknown;
202
+ txCollectionFileStoreSlowBackoffBaseMs: unknown;
203
+ txCollectionFileStoreSlowBackoffMaxMs: unknown;
204
+ txCollectionFileStoreSlowDelayMs: unknown;
205
+ txCollectionFileStoreSlowWorkerCount: unknown;
206
+ txCollectionFileStoreUrls: unknown;
189
207
  txCollectionMissingTxsCollectorType: unknown;
190
208
  txCollectionNodeRpcMaxBatchSize: unknown;
191
209
  txCollectionNodeRpcUrls: unknown;
@@ -193,7 +211,6 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
193
211
  txCollectionSlowNodesIntervalMs: unknown;
194
212
  txCollectionSlowReqRespIntervalMs: unknown;
195
213
  txCollectionSlowReqRespTimeoutMs: unknown;
196
- txFileStoreDownloadUrl: unknown;
197
214
  txFileStoreEnabled: unknown;
198
215
  txFileStoreMaxQueueSize: unknown;
199
216
  txFileStoreUploadConcurrency: unknown;
@@ -213,4 +230,4 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
213
230
  * @returns A list of allowed elements
214
231
  */
215
232
  export declare function parseAllowList(value: string): AllowedElement[];
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBUVosTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFHbEYsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sb0NBQW9DLENBQUM7QUFDekcsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQTZCLE1BQU0sb0NBQW9DLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsU0FDZixTQUFRLGdCQUFnQixFQUN0QixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUMxQyxvRUFBb0U7SUFDcEUsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUVwQix5REFBeUQ7SUFDekQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBRTdCLHVEQUF1RDtJQUN2RCxxQkFBcUIsRUFBRSxNQUFNLENBQUM7SUFFOUIsb0VBQW9FO0lBQ3BFLDZCQUE2QixFQUFFLE9BQU8sQ0FBQztJQUV2QyxxREFBcUQ7SUFDckQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDO0lBRTVCLDJDQUEyQztJQUMzQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBRXBCLG9DQUFvQztJQUNwQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBRWhCLDZFQUE2RTtJQUM3RSxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUUxQiwwQ0FBMEM7SUFDMUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRWYsMEJBQTBCO0lBQzFCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFFdEIsNkVBQTZFO0lBQzdFLGdCQUFnQixDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLDRJQUE0STtJQUM1SSxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUU5QiwrQ0FBK0M7SUFDL0MsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBRXpCLHNFQUFzRTtJQUN0RSw0QkFBNEIsRUFBRSxPQUFPLENBQUM7SUFFdEMsaUdBQWlHO0lBQ2pHLHlCQUF5QixFQUFFLE9BQU8sQ0FBQztJQUVuQyw4R0FBOEc7SUFDOUcsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUVyQiwrSEFBK0g7SUFDL0gsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUVwQiw0RUFBNEU7SUFDNUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBRTFCLGtEQUFrRDtJQUNsRCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBRW5CLG9EQUFvRDtJQUNwRCxZQUFZLEVBQUUsTUFBTSxDQUFDO0lBRXJCLG9EQUFvRDtJQUNwRCxZQUFZLEVBQUUsTUFBTSxDQUFDO0lBRXJCLHNEQUFzRDtJQUN0RCxjQUFjLEVBQUUsTUFBTSxDQUFDO0lBRXZCLHFFQUFxRTtJQUNyRSxxQkFBcUIsRUFBRSxPQUFPLENBQUM7SUFFL0Isc0VBQXNFO0lBQ3RFLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUU5QixpRkFBaUY7SUFDakYscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBRTlCLDJEQUEyRDtJQUMzRCxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFFekIsZ0hBQWdIO0lBQ2hILGtDQUFrQyxFQUFFLE1BQU0sQ0FBQztJQUUzQyxnS0FBZ0s7SUFDaEssc0JBQXNCLEVBQUUsTUFBTSxDQUFDO0lBRS9CLGlGQUFpRjtJQUNqRix5Q0FBeUMsRUFBRSxNQUFNLENBQUM7SUFFbEQsMkdBQTJHO0lBQzNHLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztJQUVqRCxvSUFBb0k7SUFDcEksaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFFNUIsc0lBQXNJO0lBQ3RJLGVBQWUsRUFBRSxNQUFNLENBQUM7SUFFeEIsK0JBQStCO0lBQy9CLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUV2QiwrQkFBK0I7SUFDL0IsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBRXZCLGlDQUFpQztJQUNqQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFFekIsZ0dBQWdHO0lBQ2hHLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRTNCLGlFQUFpRTtJQUNqRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUV6Qyw0RUFBNEU7SUFDNUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBRTFCLDRDQUE0QztJQUM1QyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFFN0IsOERBQThEO0lBQzlELHlCQUF5QixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBRXBDLGdEQUFnRDtJQUNoRCxzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUVqQyxpREFBaUQ7SUFDakQsb0JBQW9CLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDL0IsaUZBQWlGO0lBQ2pGLCtCQUErQixFQUFFLE1BQU0sQ0FBQztJQUV4QywySEFBMkg7SUFDM0gsbUJBQW1CLEVBQUUsT0FBTyxDQUFDO0lBRTdCLDJFQUEyRTtJQUMzRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUM7SUFFMUIsbUZBQW1GO0lBQ25GLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztJQUVwQyx5R0FBeUc7SUFDekcseUJBQXlCLEVBQUUsT0FBTyxDQUFDO0lBRW5DLG9HQUFvRztJQUNwRywwQkFBMEIsRUFBRSxPQUFPLENBQUM7SUFFcEMsaUpBQWlKO0lBQ2pKLGFBQWEsRUFBRSxPQUFPLENBQUM7Q0FDeEI7QUFFRCxlQUFPLE1BQU0sZ0JBQWdCLFFBQVEsQ0FBQztBQUV0QyxlQUFPLE1BQU0saUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQTBRM0QsQ0FBQztBQUVGOzs7R0FHRztBQUNILHdCQUFnQixtQkFBbUIsSUFBSSxTQUFTLENBRS9DO0FBRUQsd0JBQWdCLG1CQUFtQixJQUFJLFNBQVMsQ0FFL0M7QUFFRDs7R0FFRztBQUNILE1BQU0sTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUMvQixTQUFTLEVBQ1AsT0FBTyxHQUNQLFNBQVMsR0FDVCxrQkFBa0IsR0FDbEIsa0JBQWtCLEdBQ2xCLHNCQUFzQixHQUN0QixnQkFBZ0IsR0FDaEIsZUFBZSxHQUNmLFlBQVksQ0FDZixHQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUM5QyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxHQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBZ0JqQyxlQUFPLE1BQU0sc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzTUFHbEMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsY0FBYyxFQUFFLENBcUM5RCJ9
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBUVosTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFHbEYsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sb0NBQW9DLENBQUM7QUFDekcsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQTZCLE1BQU0sb0NBQW9DLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsU0FDZixTQUFRLGdCQUFnQixFQUN0QixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUMxQyxvRUFBb0U7SUFDcEUsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUVwQix5REFBeUQ7SUFDekQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBRTdCLHdEQUF3RDtJQUN4RCxtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFFNUIsdURBQXVEO0lBQ3ZELHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUU5QixvRUFBb0U7SUFDcEUsNkJBQTZCLEVBQUUsT0FBTyxDQUFDO0lBRXZDLHFEQUFxRDtJQUNyRCxtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFFNUIsMkNBQTJDO0lBQzNDLFdBQVcsRUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dest/config.js CHANGED
@@ -25,6 +25,11 @@ export const p2pConfigMappings = {
25
25
  description: 'The frequency in which to check for new L2 blocks.',
26
26
  ...numberConfigHelper(100)
27
27
  },
28
+ slotCheckIntervalMS: {
29
+ env: 'P2P_SLOT_CHECK_INTERVAL_MS',
30
+ description: 'The frequency in which to check for new L2 slots.',
31
+ ...numberConfigHelper(1000)
32
+ },
28
33
  debugDisableColocationPenalty: {
29
34
  env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
30
35
  description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
@@ -264,6 +269,15 @@ export const p2pConfigMappings = {
264
269
  description: 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
265
270
  ...booleanConfigHelper(false)
266
271
  },
272
+ broadcastEquivocatedProposals: {
273
+ description: 'Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only).',
274
+ ...booleanConfigHelper(false)
275
+ },
276
+ minTxPoolAgeMs: {
277
+ env: 'P2P_MIN_TX_POOL_AGE_MS',
278
+ description: 'Minimum age (ms) a transaction must have been in the pool before it is eligible for block building.',
279
+ ...numberConfigHelper(2_000)
280
+ },
267
281
  ...sharedSequencerConfigMappings,
268
282
  ...p2pReqRespConfigMappings,
269
283
  ...batchTxRequesterConfigMappings,
package/dest/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './enr/index.js';
6
6
  export * from './config.js';
7
7
  export * from './mem_pools/attestation_pool/index.js';
8
8
  export * from './mem_pools/tx_pool/index.js';
9
+ export * from './mem_pools/tx_pool_v2/index.js';
9
10
  export * from './msg_validators/index.js';
10
11
  export * from './services/index.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQkFBcUIsQ0FBQyJ9
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHFCQUFxQixDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
package/dest/index.js CHANGED
@@ -5,5 +5,6 @@ export * from './enr/index.js';
5
5
  export * from './config.js';
6
6
  export * from './mem_pools/attestation_pool/index.js';
7
7
  export * from './mem_pools/tx_pool/index.js';
8
+ export * from './mem_pools/tx_pool_v2/index.js';
8
9
  export * from './msg_validators/index.js';
9
10
  export * from './services/index.js';