@aztec/p2p 0.0.1-commit.03f7ef2 → 0.0.1-commit.0658669b3
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.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +7 -6
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +41 -14
- package/dest/client/interface.d.ts +60 -34
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +46 -59
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +600 -313
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +38 -13
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +29 -18
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +111 -76
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +527 -287
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +16 -12
- package/dest/mem_pools/index.d.ts +3 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -1
- package/dest/mem_pools/instrumentation.d.ts +3 -3
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +11 -18
- package/dest/mem_pools/interface.d.ts +5 -5
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +35 -26
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +312 -336
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -4
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +7 -7
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +95 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +5 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +105 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +164 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +355 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +891 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -7
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
- package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +228 -57
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +28 -4
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +49 -1
- package/dest/services/encoding.d.ts +2 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +9 -7
- package/dest/services/gossipsub/index.d.ts +3 -0
- package/dest/services/gossipsub/index.d.ts.map +1 -0
- package/dest/services/gossipsub/index.js +2 -0
- package/dest/services/gossipsub/scoring.d.ts +21 -3
- package/dest/services/gossipsub/scoring.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.js +24 -7
- package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +346 -0
- package/dest/services/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +30 -72
- package/dest/services/libp2p/libp2p_service.d.ts +111 -35
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1019 -365
- package/dest/services/peer-manager/metrics.d.ts +7 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +33 -21
- package/dest/services/peer-manager/peer_manager.d.ts +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +2 -10
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -6
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +12 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +15 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +4 -1
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +20 -0
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +471 -50
- package/dest/services/service.d.ts +56 -4
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +22 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +55 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +71 -44
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +90 -0
- package/dest/services/tx_collection/index.d.ts +3 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +2 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +11 -13
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +60 -26
- package/dest/services/tx_collection/tx_collection.d.ts +29 -16
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +79 -7
- package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +26 -29
- package/dest/services/tx_collection/tx_source.d.ts +8 -3
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +19 -2
- package/dest/services/tx_file_store/config.d.ts +16 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +22 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +152 -0
- package/dest/services/tx_provider.d.ts +6 -6
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -9
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +7 -20
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +29 -2
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +103 -2
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +2 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +163 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +366 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +221 -126
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -39
- package/dest/util.d.ts +2 -2
- package/dest/util.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +76 -24
- package/src/client/interface.ts +78 -35
- package/src/client/p2p_client.ts +263 -358
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +346 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +57 -27
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +510 -78
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +612 -320
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +20 -13
- package/src/mem_pools/index.ts +4 -1
- package/src/mem_pools/instrumentation.ts +19 -25
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +360 -368
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +7 -7
- package/src/mem_pools/tx_pool_v2/README.md +275 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +255 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1063 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +21 -18
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/README.md +115 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +372 -55
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -19
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +65 -2
- package/src/services/encoding.ts +8 -6
- package/src/services/gossipsub/README.md +641 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +29 -5
- package/src/services/gossipsub/topic_score_params.ts +487 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +32 -73
- package/src/services/libp2p/libp2p_service.ts +705 -364
- package/src/services/peer-manager/metrics.ts +39 -21
- package/src/services/peer-manager/peer_manager.ts +3 -2
- package/src/services/peer-manager/peer_scoring.ts +28 -4
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +29 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
- package/src/services/reqresp/protocols/status.ts +7 -4
- package/src/services/reqresp/protocols/tx.ts +22 -0
- package/src/services/reqresp/reqresp.ts +79 -22
- package/src/services/service.ts +73 -5
- package/src/services/tx_collection/config.ts +83 -1
- package/src/services/tx_collection/fast_tx_collection.ts +93 -47
- package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
- package/src/services/tx_collection/file_store_tx_source.ts +117 -0
- package/src/services/tx_collection/index.ts +6 -0
- package/src/services/tx_collection/instrumentation.ts +11 -13
- package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
- package/src/services/tx_collection/slow_tx_collection.ts +68 -35
- package/src/services/tx_collection/tx_collection.ts +121 -24
- package/src/services/tx_collection/tx_collection_sink.ts +30 -34
- package/src/services/tx_collection/tx_source.ts +22 -3
- package/src/services/tx_file_store/config.ts +37 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +175 -0
- package/src/services/tx_provider.ts +16 -12
- package/src/services/tx_provider_instrumentation.ts +13 -20
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +3 -3
- package/src/test-helpers/mock-pubsub.ts +143 -3
- package/src/test-helpers/reqresp-nodes.ts +2 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +430 -0
- package/src/testbench/p2p_client_testbench_worker.ts +348 -122
- package/src/testbench/worker_client_manager.ts +304 -42
- package/src/util.ts +7 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -37
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -213
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -30
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -219
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -242
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -298
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -287
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -288
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -19,8 +19,20 @@ import {
|
|
|
19
19
|
|
|
20
20
|
import type { P2PConfig } from '../config.js';
|
|
21
21
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
22
|
-
import { DummyPeerDiscoveryService, DummyPeerManager,
|
|
23
|
-
import type {
|
|
22
|
+
import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
|
|
23
|
+
import type { P2PReqRespConfig } from '../services/reqresp/config.js';
|
|
24
|
+
import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
|
|
25
|
+
import {
|
|
26
|
+
type ReqRespInterface,
|
|
27
|
+
type ReqRespResponse,
|
|
28
|
+
type ReqRespSubProtocol,
|
|
29
|
+
type ReqRespSubProtocolHandler,
|
|
30
|
+
type ReqRespSubProtocolHandlers,
|
|
31
|
+
type ReqRespSubProtocolValidators,
|
|
32
|
+
type SubProtocolMap,
|
|
33
|
+
responseFromBuffer,
|
|
34
|
+
} from '../services/reqresp/interface.js';
|
|
35
|
+
import { ReqRespStatus } from '../services/reqresp/status.js';
|
|
24
36
|
import { GossipSubEvent } from '../types/index.js';
|
|
25
37
|
import type { PubSubLibp2p } from '../util.js';
|
|
26
38
|
|
|
@@ -52,7 +64,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
|
|
|
52
64
|
deps.logger.verbose('Creating mock PubSub service');
|
|
53
65
|
const libp2p = new MockPubSub(peerId, network);
|
|
54
66
|
const peerManager = new DummyPeerManager(peerId, network);
|
|
55
|
-
const reqresp: ReqRespInterface = new
|
|
67
|
+
const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
|
|
56
68
|
const peerDiscoveryService = new DummyPeerDiscoveryService();
|
|
57
69
|
const service = new LibP2PService<T>(
|
|
58
70
|
clientType as T,
|
|
@@ -74,6 +86,115 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
|
|
|
74
86
|
};
|
|
75
87
|
}
|
|
76
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
|
|
91
|
+
* When a peer calls sendBatchRequest, the mock iterates over network peers and invokes their registered handler
|
|
92
|
+
* for the sub-protocol, simulating the request-response protocol without actual libp2p streams.
|
|
93
|
+
*/
|
|
94
|
+
class MockReqResp implements ReqRespInterface {
|
|
95
|
+
private handlers: Partial<ReqRespSubProtocolHandlers> = {};
|
|
96
|
+
private logger = createLogger('p2p:test:mock-reqresp');
|
|
97
|
+
|
|
98
|
+
constructor(
|
|
99
|
+
private peerId: PeerId,
|
|
100
|
+
private network: MockGossipSubNetwork,
|
|
101
|
+
) {
|
|
102
|
+
network.registerReqRespPeer(this);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
106
|
+
|
|
107
|
+
start(
|
|
108
|
+
subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
|
|
109
|
+
_subProtocolValidators: ReqRespSubProtocolValidators,
|
|
110
|
+
): Promise<void> {
|
|
111
|
+
Object.assign(this.handlers, subProtocolHandlers);
|
|
112
|
+
return Promise.resolve();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
addSubProtocol(
|
|
116
|
+
subProtocol: ReqRespSubProtocol,
|
|
117
|
+
handler: ReqRespSubProtocolHandler,
|
|
118
|
+
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
119
|
+
): Promise<void> {
|
|
120
|
+
this.handlers[subProtocol] = handler;
|
|
121
|
+
return Promise.resolve();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
stop(): Promise<void> {
|
|
125
|
+
this.handlers = {};
|
|
126
|
+
return Promise.resolve();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
getHandler(subProtocol: ReqRespSubProtocol): ReqRespSubProtocolHandler | undefined {
|
|
130
|
+
return this.handlers[subProtocol];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
134
|
+
subProtocol: SubProtocol,
|
|
135
|
+
requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
|
|
136
|
+
pinnedPeer: PeerId | undefined,
|
|
137
|
+
_timeoutMs?: number,
|
|
138
|
+
_maxPeers?: number,
|
|
139
|
+
_maxRetryAttempts?: number,
|
|
140
|
+
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
|
|
141
|
+
const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
|
|
142
|
+
const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
|
|
143
|
+
const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
|
|
144
|
+
|
|
145
|
+
for (const request of requests) {
|
|
146
|
+
const requestBuffer = request.toBuffer();
|
|
147
|
+
for (const peer of targetPeers) {
|
|
148
|
+
const handler = peer.getHandler(subProtocol);
|
|
149
|
+
if (!handler) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const responseBuffer = await handler(this.peerId, requestBuffer);
|
|
154
|
+
if (responseBuffer.length > 0) {
|
|
155
|
+
const response = responseFromBuffer(subProtocol, responseBuffer);
|
|
156
|
+
responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
} catch (err) {
|
|
160
|
+
this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return responses;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
async sendRequestToPeer(
|
|
169
|
+
peerId: PeerId,
|
|
170
|
+
subProtocol: ReqRespSubProtocol,
|
|
171
|
+
payload: Buffer,
|
|
172
|
+
_dialTimeout?: number,
|
|
173
|
+
): Promise<ReqRespResponse> {
|
|
174
|
+
const peer = this.network.getReqRespPeers().find(p => p.peerId.equals(peerId));
|
|
175
|
+
const handler = peer?.getHandler(subProtocol);
|
|
176
|
+
if (!handler) {
|
|
177
|
+
return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const data = await handler(this.peerId, payload);
|
|
181
|
+
return { status: ReqRespStatus.SUCCESS, data };
|
|
182
|
+
} catch {
|
|
183
|
+
return { status: ReqRespStatus.FAILURE };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
|
|
188
|
+
return {
|
|
189
|
+
getPeerListSortedByConnectionCountAsc: () =>
|
|
190
|
+
this.network
|
|
191
|
+
.getReqRespPeers()
|
|
192
|
+
.filter(p => !p.peerId.equals(this.peerId))
|
|
193
|
+
.map(p => p.peerId),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
77
198
|
/**
|
|
78
199
|
* Implementation of PubSub services that relies on a mock gossip sub network.
|
|
79
200
|
* This is used in tests to simulate a gossip sub network without needing a real P2P network.
|
|
@@ -149,6 +270,16 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
149
270
|
{ msgId, propagationSource, acceptance },
|
|
150
271
|
);
|
|
151
272
|
}
|
|
273
|
+
|
|
274
|
+
getMeshPeers(topic?: TopicStr): PeerIdStr[] {
|
|
275
|
+
if (topic && !this.subscribedTopics.has(topic)) {
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
return this.network
|
|
279
|
+
.getPeers()
|
|
280
|
+
.filter(peer => !this.peerId.equals(peer))
|
|
281
|
+
.map(peer => peer.toString());
|
|
282
|
+
}
|
|
152
283
|
}
|
|
153
284
|
|
|
154
285
|
/**
|
|
@@ -157,6 +288,7 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
157
288
|
*/
|
|
158
289
|
export class MockGossipSubNetwork {
|
|
159
290
|
private peers: MockGossipSubService[] = [];
|
|
291
|
+
private reqRespPeers: MockReqResp[] = [];
|
|
160
292
|
private nextMsgId = 0;
|
|
161
293
|
|
|
162
294
|
private logger = createLogger('p2p:test:mock-gossipsub-network');
|
|
@@ -169,6 +301,14 @@ export class MockGossipSubNetwork {
|
|
|
169
301
|
this.peers.push(peer);
|
|
170
302
|
}
|
|
171
303
|
|
|
304
|
+
public registerReqRespPeer(peer: MockReqResp): void {
|
|
305
|
+
this.reqRespPeers.push(peer);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
public getReqRespPeers(): MockReqResp[] {
|
|
309
|
+
return this.reqRespPeers;
|
|
310
|
+
}
|
|
311
|
+
|
|
172
312
|
public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
|
|
173
313
|
const msgId = (this.nextMsgId++).toString();
|
|
174
314
|
this.logger.debug(`Network is distributing message on topic ${topic}`, {
|
|
@@ -34,6 +34,7 @@ import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
|
34
34
|
import type { BootnodeConfig, P2PConfig } from '../config.js';
|
|
35
35
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
36
36
|
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
37
|
+
import { APP_SPECIFIC_WEIGHT } from '../services/gossipsub/scoring.js';
|
|
37
38
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
38
39
|
import { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
39
40
|
import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
|
|
@@ -154,7 +155,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
|
|
|
154
155
|
epochCache,
|
|
155
156
|
);
|
|
156
157
|
|
|
157
|
-
p2pNode.services.pubsub.score.params.appSpecificWeight =
|
|
158
|
+
p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
|
|
158
159
|
p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
|
|
159
160
|
peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
160
161
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
3
|
+
import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
|
|
4
|
+
import type { BlockProposal } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
6
|
+
|
|
7
|
+
import type { PeerId } from '@libp2p/interface';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Test transaction provider that can be seeded with transactions.
|
|
11
|
+
* Returns seeded txs when requested by hash, useful for testing block
|
|
12
|
+
* proposal handling without requiring a full P2P network.
|
|
13
|
+
*/
|
|
14
|
+
export class TestTxProvider implements ITxProvider {
|
|
15
|
+
private txs: Map<string, Tx> = new Map();
|
|
16
|
+
|
|
17
|
+
/** Seed transactions that will be returned when requested. */
|
|
18
|
+
seed(txs: Tx[]) {
|
|
19
|
+
for (const tx of txs) {
|
|
20
|
+
this.txs.set(tx.getTxHash().toString(), tx);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Clear all seeded transactions. */
|
|
25
|
+
clear() {
|
|
26
|
+
this.txs.clear();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Returns txs from the seeded collection given their hashes. */
|
|
30
|
+
getAvailableTxs(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
|
|
31
|
+
return this.getTxsByHashes(txHashes);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Get txs for a block proposal, returning any seeded txs that match the requested hashes. */
|
|
35
|
+
getTxsForBlockProposal(
|
|
36
|
+
blockProposal: BlockProposal,
|
|
37
|
+
_blockNumber: BlockNumber,
|
|
38
|
+
_opts: { pinnedPeer: PeerId | undefined; deadline: Date },
|
|
39
|
+
): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
|
|
40
|
+
return this.getTxsByHashes(blockProposal.txHashes);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Get txs for a block, returning any seeded txs that match the tx effects in the block. */
|
|
44
|
+
getTxsForBlock(block: L2Block, _opts: { deadline: Date }): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
|
|
45
|
+
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
46
|
+
return this.getTxsByHashes(txHashes);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private getTxsByHashes(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
|
|
50
|
+
const txs: Tx[] = [];
|
|
51
|
+
const missingTxs: TxHash[] = [];
|
|
52
|
+
|
|
53
|
+
for (const txHash of txHashes) {
|
|
54
|
+
const tx = this.txs.get(txHash.toString());
|
|
55
|
+
if (tx) {
|
|
56
|
+
txs.push(tx);
|
|
57
|
+
} else {
|
|
58
|
+
missingTxs.push(txHash);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return Promise.resolve({ txs, missingTxs });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
4
|
+
import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
|
|
5
|
+
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
6
|
+
import type {
|
|
7
|
+
BlockProposal,
|
|
8
|
+
CheckpointAttestation,
|
|
9
|
+
CheckpointProposal,
|
|
10
|
+
CheckpointProposalCore,
|
|
11
|
+
} from '@aztec/stdlib/p2p';
|
|
12
|
+
import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
13
|
+
|
|
14
|
+
import EventEmitter from 'events';
|
|
15
|
+
|
|
16
|
+
import type { TryAddResult } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
17
|
+
import type { AddTxsResult, TxPoolV2, TxPoolV2Config } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
18
|
+
import type { TxState } from '../mem_pools/tx_pool_v2/tx_metadata.js';
|
|
19
|
+
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* In-memory TxPool implementation for testing.
|
|
23
|
+
* Provides basic tx storage without persistence.
|
|
24
|
+
* Implements TxPoolV2 interface with stub implementations for testing.
|
|
25
|
+
*/
|
|
26
|
+
export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
27
|
+
private txsByHash = new Map<string, Tx>();
|
|
28
|
+
private logger: Logger | null = null;
|
|
29
|
+
|
|
30
|
+
setLogger(logger: Logger): void {
|
|
31
|
+
this.logger = logger;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
setTxs(txs: Tx[]): number {
|
|
35
|
+
this.txsByHash.clear();
|
|
36
|
+
return this.appendTxs(txs);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
appendTxs(txs: Tx[]): number {
|
|
40
|
+
let added = 0;
|
|
41
|
+
for (const tx of txs) {
|
|
42
|
+
const key = tx.getTxHash().toString();
|
|
43
|
+
if (!this.txsByHash.has(key)) {
|
|
44
|
+
added += 1;
|
|
45
|
+
}
|
|
46
|
+
this.txsByHash.set(key, tx);
|
|
47
|
+
}
|
|
48
|
+
return added;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
clearTxs(): void {
|
|
52
|
+
this.txsByHash.clear();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
resetState(): void {
|
|
56
|
+
this.txsByHash.clear();
|
|
57
|
+
this.removeAllListeners();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// === Core Operations (TxPoolV2) ===
|
|
61
|
+
|
|
62
|
+
addPendingTxs(txs: Tx[], opts?: { source?: string; feeComparisonOnly?: boolean }): Promise<AddTxsResult> {
|
|
63
|
+
const accepted: TxHash[] = [];
|
|
64
|
+
const newTxs: Tx[] = [];
|
|
65
|
+
for (const tx of txs) {
|
|
66
|
+
const key = tx.getTxHash().toString();
|
|
67
|
+
if (!this.txsByHash.has(key)) {
|
|
68
|
+
newTxs.push(tx);
|
|
69
|
+
accepted.push(tx.getTxHash());
|
|
70
|
+
}
|
|
71
|
+
this.txsByHash.set(key, tx);
|
|
72
|
+
}
|
|
73
|
+
if (newTxs.length > 0) {
|
|
74
|
+
this.emit('txs-added', { txs: newTxs, source: opts?.source });
|
|
75
|
+
}
|
|
76
|
+
return Promise.resolve({ accepted, ignored: [], rejected: [] });
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
|
|
80
|
+
const key = tx.getTxHash().toString();
|
|
81
|
+
if (this.txsByHash.has(key)) {
|
|
82
|
+
return Promise.resolve('ignored');
|
|
83
|
+
}
|
|
84
|
+
return Promise.resolve('accepted');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
addProtectedTxs(txs: Tx[], _block: BlockHeader, opts?: { source?: string }): Promise<void> {
|
|
88
|
+
for (const tx of txs) {
|
|
89
|
+
const key = tx.getTxHash().toString();
|
|
90
|
+
this.txsByHash.set(key, tx);
|
|
91
|
+
}
|
|
92
|
+
if (txs.length > 0) {
|
|
93
|
+
this.emit('txs-added', { txs, source: opts?.source });
|
|
94
|
+
}
|
|
95
|
+
return Promise.resolve();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protectTxs(txHashes: TxHash[], _block: BlockHeader): Promise<TxHash[]> {
|
|
99
|
+
const notFound: TxHash[] = [];
|
|
100
|
+
for (const txHash of txHashes) {
|
|
101
|
+
if (!this.txsByHash.has(txHash.toString())) {
|
|
102
|
+
notFound.push(txHash);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return Promise.resolve(notFound);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
addMinedTxs(txs: Tx[], _block: BlockHeader, _opts?: { source?: string }): Promise<void> {
|
|
109
|
+
for (const tx of txs) {
|
|
110
|
+
const key = tx.getTxHash().toString();
|
|
111
|
+
this.txsByHash.set(key, tx);
|
|
112
|
+
}
|
|
113
|
+
return Promise.resolve();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// === State Transition Handlers (TxPoolV2) ===
|
|
117
|
+
|
|
118
|
+
handleMinedBlock(_block: L2Block): Promise<void> {
|
|
119
|
+
return Promise.resolve();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
prepareForSlot(_slotNumber: SlotNumber): Promise<void> {
|
|
123
|
+
return Promise.resolve();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
|
|
127
|
+
return Promise.resolve();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
handleFailedExecution(txHashes: TxHash[]): Promise<void> {
|
|
131
|
+
for (const txHash of txHashes) {
|
|
132
|
+
this.txsByHash.delete(txHash.toString());
|
|
133
|
+
}
|
|
134
|
+
return Promise.resolve();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
handleFinalizedBlock(_block: BlockHeader): Promise<void> {
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// === Query Operations (TxPoolV2) ===
|
|
142
|
+
|
|
143
|
+
getTxByHash(hash: TxHash): Promise<Tx | undefined> {
|
|
144
|
+
return Promise.resolve(this.txsByHash.get(hash.toString()));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]> {
|
|
148
|
+
const result = hashes.map(h => this.txsByHash.get(h.toString()));
|
|
149
|
+
const found = result.filter(tx => tx !== undefined).length;
|
|
150
|
+
this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
|
|
151
|
+
return Promise.resolve(result);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
hasTxs(hashes: TxHash[]): Promise<boolean[]> {
|
|
155
|
+
return Promise.resolve(hashes.map(h => this.txsByHash.has(h.toString())));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined> {
|
|
159
|
+
return Promise.resolve(undefined);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
getPendingTxHashes(): Promise<TxHash[]> {
|
|
163
|
+
return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
getEligiblePendingTxHashes(): Promise<TxHash[]> {
|
|
167
|
+
return this.getPendingTxHashes();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
getPendingTxCount(): Promise<number> {
|
|
171
|
+
return Promise.resolve(this.txsByHash.size);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
|
|
175
|
+
return Promise.resolve([]);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
getMinedTxCount(): Promise<number> {
|
|
179
|
+
return Promise.resolve(0);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
getTxStatus(hash: TxHash): Promise<TxState | 'deleted' | undefined> {
|
|
183
|
+
return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
isEmpty(): Promise<boolean> {
|
|
187
|
+
return Promise.resolve(this.txsByHash.size === 0);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
getLowestPriorityPending(_limit: number): Promise<TxHash[]> {
|
|
191
|
+
return Promise.resolve([]);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// === Configuration (TxPoolV2) ===
|
|
195
|
+
|
|
196
|
+
updateConfig(_config: Partial<TxPoolV2Config>): Promise<void> {
|
|
197
|
+
return Promise.resolve();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// === Lifecycle (TxPoolV2) ===
|
|
201
|
+
|
|
202
|
+
start(): Promise<void> {
|
|
203
|
+
return Promise.resolve();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
stop(): Promise<void> {
|
|
207
|
+
return Promise.resolve();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* In-memory AttestationPool mock for testing/benchmarking.
|
|
213
|
+
* Provides minimal implementation without persistence.
|
|
214
|
+
*/
|
|
215
|
+
export class InMemoryAttestationPool {
|
|
216
|
+
private proposals = new Map<string, BlockProposal>();
|
|
217
|
+
|
|
218
|
+
tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
|
|
219
|
+
const id = blockProposal.archive.toString();
|
|
220
|
+
const alreadyExists = this.proposals.has(id);
|
|
221
|
+
if (alreadyExists) {
|
|
222
|
+
return Promise.resolve({ added: false, alreadyExists: true, count: 1 });
|
|
223
|
+
}
|
|
224
|
+
this.proposals.set(id, blockProposal);
|
|
225
|
+
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
getBlockProposal(id: string): Promise<BlockProposal | undefined> {
|
|
229
|
+
return Promise.resolve(this.proposals.get(id));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
|
|
233
|
+
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
|
|
237
|
+
return Promise.resolve(undefined);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
|
|
241
|
+
|
|
242
|
+
async deleteOlderThan(_slot: SlotNumber): Promise<void> {}
|
|
243
|
+
|
|
244
|
+
getCheckpointAttestationsForSlot(_slot: SlotNumber): Promise<CheckpointAttestation[]> {
|
|
245
|
+
return Promise.resolve([]);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
getCheckpointAttestationsForSlotAndProposal(
|
|
249
|
+
_slot: SlotNumber,
|
|
250
|
+
_proposalId: string,
|
|
251
|
+
): Promise<CheckpointAttestation[]> {
|
|
252
|
+
return Promise.resolve([]);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
tryAddCheckpointAttestation(_attestation: CheckpointAttestation): Promise<TryAddResult> {
|
|
256
|
+
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean> {
|
|
260
|
+
return Promise.resolve(false);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
isEmpty(): Promise<boolean> {
|
|
264
|
+
return Promise.resolve(this.proposals.size === 0);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
resetState(): void {
|
|
268
|
+
this.proposals.clear();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Creates a mock EpochCache for testing.
|
|
274
|
+
*/
|
|
275
|
+
export function createMockEpochCache(): EpochCacheInterface {
|
|
276
|
+
return {
|
|
277
|
+
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
|
|
278
|
+
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
279
|
+
getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, nowMs: 0n }),
|
|
280
|
+
computeProposerIndex: () => 0n,
|
|
281
|
+
getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
282
|
+
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
283
|
+
getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
|
|
284
|
+
isInCommittee: () => Promise.resolve(false),
|
|
285
|
+
getRegisteredValidators: () => Promise.resolve([]),
|
|
286
|
+
filterInCommittee: () => Promise.resolve([]),
|
|
287
|
+
getL1Constants: () => ({
|
|
288
|
+
l1StartBlock: 0n,
|
|
289
|
+
l1GenesisTime: 0n,
|
|
290
|
+
epochDuration: 1,
|
|
291
|
+
slotDuration: 1,
|
|
292
|
+
ethereumSlotDuration: 1,
|
|
293
|
+
proofSubmissionEpochs: 1,
|
|
294
|
+
targetCommitteeSize: 48,
|
|
295
|
+
}),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Creates a mock WorldStateSynchronizer for testing.
|
|
301
|
+
*/
|
|
302
|
+
export function createMockWorldStateSynchronizer(): WorldStateSynchronizer {
|
|
303
|
+
return {
|
|
304
|
+
status: () =>
|
|
305
|
+
Promise.resolve({
|
|
306
|
+
syncSummary: {
|
|
307
|
+
latestBlockNumber: 0,
|
|
308
|
+
latestBlockHash: '',
|
|
309
|
+
finalizedBlockNumber: 0,
|
|
310
|
+
treesAreSynched: false,
|
|
311
|
+
oldestHistoricBlockNumber: 0,
|
|
312
|
+
},
|
|
313
|
+
}),
|
|
314
|
+
} as WorldStateSynchronizer;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Unlimited rate limit configuration for benchmarks.
|
|
319
|
+
*/
|
|
320
|
+
export const UNLIMITED_RATE_LIMIT_QUOTA = {
|
|
321
|
+
peerLimit: { quotaTimeMs: 1000, quotaCount: 10_000 },
|
|
322
|
+
globalLimit: { quotaTimeMs: 1000, quotaCount: 100_000 },
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Installs unlimited rate limits on a ReqResp instance.
|
|
327
|
+
* Used in benchmarks to avoid rate limiting affecting results.
|
|
328
|
+
*
|
|
329
|
+
* Note: Uses `as any` because rateLimiter is private. This is acceptable
|
|
330
|
+
* in test code where we need to override internal behavior.
|
|
331
|
+
*/
|
|
332
|
+
export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
|
|
333
|
+
const rateLimiter = reqResp.rateLimiter;
|
|
334
|
+
rateLimiter.getRateLimits = () => UNLIMITED_RATE_LIMIT_QUOTA;
|
|
335
|
+
rateLimiter.allow = () => RateLimitStatus.Allowed;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Distribution patterns for benchmark transaction distribution.
|
|
340
|
+
*/
|
|
341
|
+
export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Collector implementation types for benchmarking.
|
|
345
|
+
*/
|
|
346
|
+
export type CollectorType = 'batch-requester' | 'send-batch-request';
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Display names for collector types (for output/logging only).
|
|
350
|
+
*/
|
|
351
|
+
export const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string> = {
|
|
352
|
+
'batch-requester': 'batch-requester (new)',
|
|
353
|
+
'send-batch-request': 'send-batch-request (old)',
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Benchmark timing constants.
|
|
358
|
+
*/
|
|
359
|
+
export const BENCHMARK_CONSTANTS = {
|
|
360
|
+
/** Time to wait for peers to connect before starting benchmark */
|
|
361
|
+
PEER_DISCOVERY_WAIT_MS: 10_000,
|
|
362
|
+
/** Maximum time to wait for peer connections */
|
|
363
|
+
MAX_PEER_WAIT_MS: 60_000,
|
|
364
|
+
/** Interval between peer connection checks */
|
|
365
|
+
PEER_CHECK_INTERVAL_MS: 500,
|
|
366
|
+
/** Default worker ready timeout */
|
|
367
|
+
WORKER_READY_TIMEOUT_MS: 30_000,
|
|
368
|
+
/** Graceful shutdown timeout before force kill */
|
|
369
|
+
GRACEFUL_SHUTDOWN_TIMEOUT_MS: 5_000,
|
|
370
|
+
/** Overall cleanup timeout */
|
|
371
|
+
CLEANUP_TIMEOUT_MS: 10_000,
|
|
372
|
+
/** Buffer time for internal timeout to ensure we return before outer timeout */
|
|
373
|
+
TIMEOUT_BUFFER_MS: 5_000,
|
|
374
|
+
/** Minimum internal timeout regardless of buffer */
|
|
375
|
+
MIN_INTERNAL_TIMEOUT_MS: 1_000,
|
|
376
|
+
/** Fixed max peers for fair benchmarking */
|
|
377
|
+
FIXED_MAX_PEERS: 10,
|
|
378
|
+
/** Fixed max retry attempts for fair benchmarking */
|
|
379
|
+
FIXED_MAX_RETRY_ATTEMPTS: 3,
|
|
380
|
+
/** LMDB map size for temp stores used in benchmarks (in KB). */
|
|
381
|
+
KV_STORE_MAP_SIZE_KB: 256 * 1024,
|
|
382
|
+
} as const;
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Filters transactions based on distribution pattern for benchmark responders.
|
|
386
|
+
*
|
|
387
|
+
* @param allTxs - All transactions to filter
|
|
388
|
+
* @param peerIndex - Index of the current peer (0 = aggregator)
|
|
389
|
+
* @param peerCount - Total number of peers
|
|
390
|
+
* @param distribution - Distribution pattern to apply
|
|
391
|
+
* @param pinnedPeerIndex - Index of the pinned peer (for pinned-only distribution)
|
|
392
|
+
* @returns Filtered transactions for this peer
|
|
393
|
+
*/
|
|
394
|
+
export function filterTxsByDistribution(
|
|
395
|
+
allTxs: Tx[],
|
|
396
|
+
peerIndex: number,
|
|
397
|
+
peerCount: number,
|
|
398
|
+
distribution: DistributionPattern,
|
|
399
|
+
pinnedPeerIndex: number = 1,
|
|
400
|
+
): Tx[] {
|
|
401
|
+
if (peerIndex === 0) {
|
|
402
|
+
return [];
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
const responderCount = peerCount - 1;
|
|
406
|
+
|
|
407
|
+
switch (distribution) {
|
|
408
|
+
case 'uniform':
|
|
409
|
+
return allTxs;
|
|
410
|
+
|
|
411
|
+
case 'sparse': {
|
|
412
|
+
const responderIndex = peerIndex - 1;
|
|
413
|
+
return allTxs.filter((_, txIndex) => {
|
|
414
|
+
const bucket = txIndex % responderCount;
|
|
415
|
+
return bucket === responderIndex || bucket === (responderIndex + 1) % responderCount;
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
case 'pinned-only':
|
|
420
|
+
return peerIndex === pinnedPeerIndex ? allTxs : [];
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Calculates the internal timeout for collector operations.
|
|
426
|
+
* Ensures we return before the outer timeout while maintaining a minimum.
|
|
427
|
+
*/
|
|
428
|
+
export function calculateInternalTimeout(timeoutMs: number): number {
|
|
429
|
+
return Math.max(timeoutMs - BENCHMARK_CONSTANTS.TIMEOUT_BUFFER_MS, BENCHMARK_CONSTANTS.MIN_INTERNAL_TIMEOUT_MS);
|
|
430
|
+
}
|