@aztec-labs/p2p 6.0.0-nightly.20260829
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/README.md +134 -0
- package/dest/bootstrap/bootstrap.d.ts +39 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +152 -0
- package/dest/client/factory.d.ts +32 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +125 -0
- package/dest/client/index.d.ts +4 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +3 -0
- package/dest/client/interface.d.ts +223 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +202 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +1051 -0
- package/dest/config.d.ts +295 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +458 -0
- package/dest/enr/generate-enr.d.ts +17 -0
- package/dest/enr/generate-enr.d.ts.map +1 -0
- package/dest/enr/generate-enr.js +52 -0
- package/dest/enr/index.d.ts +2 -0
- package/dest/enr/index.d.ts.map +1 -0
- package/dest/enr/index.js +1 -0
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +21 -0
- package/dest/errors/reqresp.error.d.ts.map +1 -0
- package/dest/errors/reqresp.error.js +23 -0
- 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 +11 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +9 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +194 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.js +521 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +745 -0
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -0
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/index.js +1 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts +242 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +33 -0
- package/dest/mem_pools/index.d.ts +4 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +1 -0
- package/dest/mem_pools/instrumentation.d.ts +41 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +120 -0
- package/dest/mem_pools/interface.d.ts +10 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +3 -0
- 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 +48 -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 +112 -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 +94 -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 +99 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -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 +12 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -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 +64 -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 +92 -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 +79 -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 +75 -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 +25 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -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 +223 -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 +122 -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 +368 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +75 -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 +218 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +122 -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 +1039 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +17 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.js +111 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +75 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +3 -0
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/index.js +2 -0
- package/dest/msg_validators/index.d.ts +4 -0
- package/dest/msg_validators/index.d.ts.map +1 -0
- package/dest/msg_validators/index.js +3 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +16 -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 +14 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +16 -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 +26 -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 +40 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +25 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +4 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +31 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +25 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/block_header_validator.js +27 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/data_validator.js +114 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +21 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.js +36 -0
- package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +302 -0
- 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 +24 -0
- package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts +73 -0
- package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_limits_validator.js +107 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +65 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +107 -0
- package/dest/msg_validators/tx_validator/index.d.ts +20 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/index.js +19 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.js +63 -0
- 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 +35 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +141 -0
- 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/test_utils.d.ts +17 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/test_utils.js +22 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +30 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +11 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +28 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +27 -0
- package/dest/services/data_store.d.ts.map +1 -0
- package/dest/services/data_store.js +192 -0
- package/dest/services/discv5/discV5_service.d.ts +54 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +337 -0
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +150 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +228 -0
- package/dest/services/encoding.d.ts +67 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +152 -0
- 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 +25 -0
- package/dest/services/gossipsub/scoring.d.ts.map +1 -0
- package/dest/services/gossipsub/scoring.js +27 -0
- package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +336 -0
- package/dest/services/index.d.ts +8 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +7 -0
- package/dest/services/libp2p/instrumentation.d.ts +25 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +143 -0
- package/dest/services/libp2p/libp2p_service.d.ts +250 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +1983 -0
- package/dest/services/peer-manager/interface.d.ts +23 -0
- package/dest/services/peer-manager/interface.d.ts.map +1 -0
- package/dest/services/peer-manager/interface.js +1 -0
- package/dest/services/peer-manager/metrics.d.ts +23 -0
- package/dest/services/peer-manager/metrics.d.ts.map +1 -0
- package/dest/services/peer-manager/metrics.js +71 -0
- package/dest/services/peer-manager/peer_manager.d.ts +202 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +1015 -0
- package/dest/services/peer-manager/peer_scoring.d.ts +65 -0
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_scoring.js +239 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -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 +534 -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 +50 -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 +35 -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 +136 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -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 +176 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -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 +7 -0
- package/dest/services/reqresp/config.d.ts +30 -0
- package/dest/services/reqresp/config.d.ts.map +1 -0
- package/dest/services/reqresp/config.js +45 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +76 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +251 -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/index.d.ts +7 -0
- package/dest/services/reqresp/index.d.ts.map +1 -0
- package/dest/services/reqresp/index.js +5 -0
- package/dest/services/reqresp/interface.d.ts +174 -0
- package/dest/services/reqresp/interface.d.ts.map +1 -0
- package/dest/services/reqresp/interface.js +107 -0
- package/dest/services/reqresp/metrics.d.ts +16 -0
- package/dest/services/reqresp/metrics.d.ts.map +1 -0
- package/dest/services/reqresp/metrics.js +50 -0
- package/dest/services/reqresp/protocols/auth.d.ts +43 -0
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/auth.js +71 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +35 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +88 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +60 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +75 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +139 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +49 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/goodbye.js +87 -0
- package/dest/services/reqresp/protocols/index.d.ts +10 -0
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/index.js +8 -0
- package/dest/services/reqresp/protocols/ping.d.ts +7 -0
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/ping.js +7 -0
- package/dest/services/reqresp/protocols/status.d.ts +42 -0
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/status.js +78 -0
- package/dest/services/reqresp/protocols/tx.d.ts +29 -0
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/tx.js +66 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/index.js +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +105 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +194 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.js +64 -0
- package/dest/services/reqresp/reqresp.d.ts +107 -0
- package/dest/services/reqresp/reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/reqresp.js +887 -0
- package/dest/services/reqresp/status.d.ts +37 -0
- package/dest/services/reqresp/status.d.ts.map +1 -0
- package/dest/services/reqresp/status.js +58 -0
- package/dest/services/service.d.ts +168 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +5 -0
- package/dest/services/tx_collection/config.d.ts +25 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +59 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -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 +127 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -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 +100 -0
- package/dest/services/tx_collection/index.d.ts +4 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +3 -0
- package/dest/services/tx_collection/instrumentation.d.ts +10 -0
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_collection/instrumentation.js +30 -0
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +104 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +356 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +108 -0
- package/dest/services/tx_collection/tx_source.d.ts +24 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +56 -0
- 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 +46 -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 +142 -0
- package/dest/services/tx_provider.d.ts +53 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +223 -0
- package/dest/services/tx_provider_instrumentation.d.ts +16 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +34 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
- package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
- package/dest/test-helpers/get-ports.d.ts +7 -0
- package/dest/test-helpers/get-ports.d.ts.map +1 -0
- package/dest/test-helpers/get-ports.js +8 -0
- package/dest/test-helpers/index.d.ts +9 -0
- package/dest/test-helpers/index.d.ts.map +1 -0
- package/dest/test-helpers/index.js +8 -0
- package/dest/test-helpers/make-enrs.d.ts +16 -0
- package/dest/test-helpers/make-enrs.d.ts.map +1 -0
- package/dest/test-helpers/make-enrs.js +31 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +63 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +140 -0
- package/dest/test-helpers/mock-pubsub.d.ts +109 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +244 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
- package/dest/test-helpers/mock-tx-helpers.js +19 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +68 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +240 -0
- package/dest/test-helpers/test_tx_provider.d.ts +42 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +44 -0
- package/dest/test-helpers/testbench-utils.d.ts +164 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +401 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
- package/dest/testbench/p2p_client_testbench_worker.js +364 -0
- package/dest/testbench/parse_log_file.d.ts +2 -0
- package/dest/testbench/parse_log_file.d.ts.map +1 -0
- package/dest/testbench/parse_log_file.js +131 -0
- package/dest/testbench/testbench.d.ts +2 -0
- package/dest/testbench/testbench.d.ts.map +1 -0
- package/dest/testbench/testbench.js +62 -0
- package/dest/testbench/worker_client_manager.d.ts +102 -0
- package/dest/testbench/worker_client_manager.d.ts.map +1 -0
- package/dest/testbench/worker_client_manager.js +492 -0
- package/dest/types/index.d.ts +34 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +30 -0
- package/dest/util.d.ts +66 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +167 -0
- package/dest/versioning.d.ts +9 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +17 -0
- package/package.json +131 -0
- package/src/bootstrap/bootstrap.ts +178 -0
- package/src/client/factory.ts +282 -0
- package/src/client/index.ts +3 -0
- package/src/client/interface.ts +264 -0
- package/src/client/p2p_client.ts +846 -0
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +787 -0
- package/src/enr/generate-enr.ts +71 -0
- package/src/enr/index.ts +1 -0
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +29 -0
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +11 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +648 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +896 -0
- package/src/mem_pools/attestation_pool/index.ts +9 -0
- package/src/mem_pools/attestation_pool/mocks.ts +56 -0
- package/src/mem_pools/index.ts +3 -0
- package/src/mem_pools/instrumentation.ts +160 -0
- package/src/mem_pools/interface.ts +10 -0
- package/src/mem_pools/tx_pool_v2/README.md +283 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +130 -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 +120 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +72 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -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 +465 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +300 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1242 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +116 -0
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +107 -0
- package/src/msg_validators/attestation_validator/index.ts +2 -0
- package/src/msg_validators/index.ts +3 -0
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +37 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
- package/src/msg_validators/tx_validator/README.md +137 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +24 -0
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +30 -0
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +38 -0
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +173 -0
- package/src/msg_validators/tx_validator/double_spend_validator.ts +46 -0
- package/src/msg_validators/tx_validator/factory.ts +490 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_limits_validator.ts +148 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +149 -0
- package/src/msg_validators/tx_validator/index.ts +19 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +104 -0
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +173 -0
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +61 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +26 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +100 -0
- package/src/services/data_store.ts +229 -0
- package/src/services/discv5/discV5_service.ts +413 -0
- package/src/services/discv5/persisted_enr_store.ts +157 -0
- package/src/services/dummy_service.ts +320 -0
- package/src/services/encoding.ts +170 -0
- package/src/services/gossipsub/README.md +663 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +37 -0
- package/src/services/gossipsub/topic_score_params.ts +477 -0
- package/src/services/index.ts +7 -0
- package/src/services/libp2p/instrumentation.ts +147 -0
- package/src/services/libp2p/libp2p_service.ts +1972 -0
- package/src/services/peer-manager/interface.ts +28 -0
- package/src/services/peer-manager/metrics.ts +90 -0
- package/src/services/peer-manager/peer_manager.ts +1221 -0
- package/src/services/peer-manager/peer_scoring.ts +265 -0
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +344 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +659 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +60 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +167 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +248 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
- package/src/services/reqresp/config.ts +69 -0
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +287 -0
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/index.ts +6 -0
- package/src/services/reqresp/interface.ts +241 -0
- package/src/services/reqresp/metrics.ts +68 -0
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +107 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +79 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +170 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +102 -0
- package/src/services/reqresp/protocols/index.ts +9 -0
- package/src/services/reqresp/protocols/ping.ts +8 -0
- package/src/services/reqresp/protocols/status.ts +123 -0
- package/src/services/reqresp/protocols/tx.ts +76 -0
- package/src/services/reqresp/rate-limiter/index.ts +1 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +240 -0
- package/src/services/reqresp/rate-limiter/rate_limits.ts +65 -0
- package/src/services/reqresp/reqresp.ts +675 -0
- package/src/services/reqresp/status.ts +68 -0
- package/src/services/service.ts +219 -0
- package/src/services/tx_collection/config.ts +89 -0
- package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
- package/src/services/tx_collection/file_store_tx_source.ts +129 -0
- package/src/services/tx_collection/index.ts +3 -0
- package/src/services/tx_collection/instrumentation.ts +35 -0
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +467 -0
- package/src/services/tx_collection/tx_collection_sink.ts +124 -0
- package/src/services/tx_collection/tx_source.ts +61 -0
- 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 +42 -0
- package/src/services/tx_file_store/tx_file_store.ts +163 -0
- package/src/services/tx_provider.ts +237 -0
- package/src/services/tx_provider_instrumentation.ts +54 -0
- package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
- package/src/test-helpers/get-ports.ts +8 -0
- package/src/test-helpers/index.ts +8 -0
- package/src/test-helpers/make-enrs.ts +42 -0
- package/src/test-helpers/make-test-p2p-clients.ts +213 -0
- package/src/test-helpers/mock-pubsub.ts +325 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +327 -0
- package/src/test-helpers/test_tx_provider.ts +68 -0
- package/src/test-helpers/testbench-utils.ts +465 -0
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +553 -0
- package/src/testbench/parse_log_file.ts +174 -0
- package/src/testbench/testbench.ts +66 -0
- package/src/testbench/worker_client_manager.ts +621 -0
- package/src/types/index.ts +38 -0
- package/src/util.ts +230 -0
- package/src/versioning.ts +26 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
|
+
*
|
|
4
|
+
* Used when running testbench commands.
|
|
5
|
+
*/ import { MockL2BlockSource } from '@aztec-labs/archiver/test';
|
|
6
|
+
import { BlockNumber } from '@aztec-labs/foundation/branded-types';
|
|
7
|
+
import { SecretValue } from '@aztec-labs/foundation/config';
|
|
8
|
+
import { Secp256k1Signer } from '@aztec-labs/foundation/crypto/secp256k1-signer';
|
|
9
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
10
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
11
|
+
import { sleep } from '@aztec-labs/foundation/sleep';
|
|
12
|
+
import { DateProvider, Timer } from '@aztec-labs/foundation/timer';
|
|
13
|
+
import { openTmpStore } from '@aztec-labs/kv-store/lmdb-v2';
|
|
14
|
+
import { getVKTreeRoot } from '@aztec-labs/noir-protocol-circuits-types/vk-tree';
|
|
15
|
+
import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
|
|
16
|
+
import { EmptyL1RollupConstants } from '@aztec-labs/stdlib/epoch-helpers';
|
|
17
|
+
import { GasFees } from '@aztec-labs/stdlib/gas';
|
|
18
|
+
import { P2PMessage } from '@aztec-labs/stdlib/p2p';
|
|
19
|
+
import { ChonkProof } from '@aztec-labs/stdlib/proofs';
|
|
20
|
+
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec-labs/stdlib/testing';
|
|
21
|
+
import { Tx } from '@aztec-labs/stdlib/tx';
|
|
22
|
+
import { getTelemetryClient } from '@aztec-labs/telemetry-client';
|
|
23
|
+
import { TopicValidatorResult } from '@libp2p/interface';
|
|
24
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
25
|
+
import { createP2PClient } from '../index.js';
|
|
26
|
+
import { LibP2PService } from '../services/index.js';
|
|
27
|
+
import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
|
|
28
|
+
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
29
|
+
import { RequestTracker } from '../services/tx_collection/request_tracker.js';
|
|
30
|
+
import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
|
|
31
|
+
import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/index.js';
|
|
32
|
+
const txCache = new Map();
|
|
33
|
+
const BENCH_L1_CONSTANTS = {
|
|
34
|
+
...EmptyL1RollupConstants,
|
|
35
|
+
slotDuration: 12,
|
|
36
|
+
ethereumSlotDuration: 4
|
|
37
|
+
};
|
|
38
|
+
class TestbenchL2BlockSource extends MockL2BlockSource {
|
|
39
|
+
getL1Constants() {
|
|
40
|
+
return Promise.resolve(BENCH_L1_CONSTANTS);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function createBenchmarkEpochCache() {
|
|
44
|
+
return {
|
|
45
|
+
...createMockEpochCache(),
|
|
46
|
+
getL1Constants: ()=>BENCH_L1_CONSTANTS
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
class TestLibP2PService extends LibP2PService {
|
|
50
|
+
disableTxValidation;
|
|
51
|
+
gossipMessageCount = 0;
|
|
52
|
+
constructor(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
|
|
53
|
+
super(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, {
|
|
54
|
+
getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
|
|
55
|
+
}, telemetry, logger);
|
|
56
|
+
this.disableTxValidation = disableTxValidation;
|
|
57
|
+
}
|
|
58
|
+
getGossipMessageCount() {
|
|
59
|
+
return this.gossipMessageCount;
|
|
60
|
+
}
|
|
61
|
+
setDisableTxValidation(disable) {
|
|
62
|
+
this.disableTxValidation = disable;
|
|
63
|
+
}
|
|
64
|
+
async handleGossipedTx(payload, msgId, source) {
|
|
65
|
+
if (this.disableTxValidation) {
|
|
66
|
+
const p2pMessage = P2PMessage.fromMessageData(payload);
|
|
67
|
+
const tx = Tx.fromBuffer(p2pMessage.payload);
|
|
68
|
+
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
|
|
69
|
+
const txHash = tx.getTxHash();
|
|
70
|
+
const txHashString = txHash.toString();
|
|
71
|
+
this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
|
|
72
|
+
await this.mempools.txPool.addPendingTxs([
|
|
73
|
+
tx
|
|
74
|
+
]);
|
|
75
|
+
} else {
|
|
76
|
+
await super.handleGossipedTx(payload, msgId, source);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async handleNewGossipMessage(msg, msgId, source) {
|
|
80
|
+
this.gossipMessageCount++;
|
|
81
|
+
process.send({
|
|
82
|
+
type: 'GOSSIP_RECEIVED',
|
|
83
|
+
count: this.gossipMessageCount
|
|
84
|
+
});
|
|
85
|
+
await super.handleNewGossipMessage(msg, msgId, source);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function generateDeterministicTxs(txCount, seed, config) {
|
|
89
|
+
const cached = txCache.get(seed) ?? [];
|
|
90
|
+
if (cached.length >= txCount) {
|
|
91
|
+
return cached.slice(0, txCount);
|
|
92
|
+
}
|
|
93
|
+
const expirationTimestampBase = BigInt(seed);
|
|
94
|
+
for(let i = cached.length; i < txCount; i++){
|
|
95
|
+
const txSeed = seed * 10000 + i;
|
|
96
|
+
const tx = await mockTx(txSeed, {
|
|
97
|
+
chainId: new Fr(config.l1ChainId),
|
|
98
|
+
version: new Fr(config.rollupVersion),
|
|
99
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
100
|
+
protocolContractsHash,
|
|
101
|
+
feePayer: makeAztecAddress(txSeed + 1),
|
|
102
|
+
chonkProof: ChonkProof.empty(),
|
|
103
|
+
numberOfNonRevertiblePublicCallRequests: 0,
|
|
104
|
+
numberOfRevertiblePublicCallRequests: 0,
|
|
105
|
+
numberOfRevertibleNullifiers: 0,
|
|
106
|
+
hasPublicTeardownCallRequest: false,
|
|
107
|
+
publicCalldataSize: 0
|
|
108
|
+
});
|
|
109
|
+
tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
|
|
110
|
+
await tx.recomputeHash();
|
|
111
|
+
cached.push(tx);
|
|
112
|
+
}
|
|
113
|
+
txCache.set(seed, cached);
|
|
114
|
+
return cached.slice(0, txCount);
|
|
115
|
+
}
|
|
116
|
+
async function createBlockProposal(blockNumber, txHashes, seed) {
|
|
117
|
+
const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
|
|
118
|
+
return await makeBlockProposal({
|
|
119
|
+
signer: Secp256k1Signer.random(),
|
|
120
|
+
blockHeader: makeBlockHeader(1, {
|
|
121
|
+
blockNumber: BlockNumber(blockNumber)
|
|
122
|
+
}),
|
|
123
|
+
archiveRoot,
|
|
124
|
+
txHashes
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function installUnlimitedRateLimits(client) {
|
|
128
|
+
const reqResp = client.p2pService.reqresp;
|
|
129
|
+
const rateLimiter = reqResp.rateLimiter;
|
|
130
|
+
rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
|
|
131
|
+
rateLimiter.allow = ()=>RateLimitStatus.Allowed;
|
|
132
|
+
}
|
|
133
|
+
/** Resets peer scores to prevent cross-case contamination in benchmarks. */ function resetPeerScores(client) {
|
|
134
|
+
const peerManager = client.p2pService.peerManager;
|
|
135
|
+
const peerScoring = peerManager?.peerScoring;
|
|
136
|
+
if (peerScoring?.resetAllScores) {
|
|
137
|
+
peerScoring.resetAllScores();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Returns the number of connected peers for connectivity checks. */ function getConnectedPeerCount(client) {
|
|
141
|
+
const p2pService = client.p2pService;
|
|
142
|
+
const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
|
|
143
|
+
if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
|
|
144
|
+
return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
|
|
145
|
+
}
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
async function runAggregatorBenchmark(client, blockProposal, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
|
|
149
|
+
let timer = new Timer();
|
|
150
|
+
try {
|
|
151
|
+
installUnlimitedRateLimits(client);
|
|
152
|
+
const txHashes = blockProposal.txHashes;
|
|
153
|
+
logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
154
|
+
const p2pService = client.p2pService;
|
|
155
|
+
const batchTxRequesterService = p2pService.getBatchTxRequesterService();
|
|
156
|
+
const minPeersRequired = Math.max(1, expectedPeerCount - 1);
|
|
157
|
+
const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
|
|
158
|
+
const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
|
|
159
|
+
let waited = 0;
|
|
160
|
+
while(waited < maxWaitMs){
|
|
161
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
162
|
+
if (connectedPeers.length >= minPeersRequired) {
|
|
163
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
|
|
167
|
+
await sleep(waitInterval);
|
|
168
|
+
waited += waitInterval;
|
|
169
|
+
}
|
|
170
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
171
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
|
|
172
|
+
logger.info(`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes.slice(0, 3).map((h)=>h.toString()).join(', ')}...`);
|
|
173
|
+
let pinnedPeer;
|
|
174
|
+
if (pinnedPeerId) {
|
|
175
|
+
pinnedPeer = peerIdFromString(pinnedPeerId);
|
|
176
|
+
} else if (pinnedPeerIndex !== undefined) {
|
|
177
|
+
if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
|
|
178
|
+
pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const noopTxValidator = {
|
|
182
|
+
validateTx: (_tx)=>Promise.resolve({
|
|
183
|
+
result: 'valid'
|
|
184
|
+
})
|
|
185
|
+
};
|
|
186
|
+
timer = new Timer();
|
|
187
|
+
const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
|
|
188
|
+
const batchRequester = new BatchTxRequester(tracker, blockProposal, pinnedPeer, batchTxRequesterService, logger, new DateProvider(), {
|
|
189
|
+
txValidator: noopTxValidator
|
|
190
|
+
});
|
|
191
|
+
const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
|
|
192
|
+
const durationMs = timer.ms();
|
|
193
|
+
return {
|
|
194
|
+
type: 'BENCH_RESULT',
|
|
195
|
+
durationMs,
|
|
196
|
+
fetchedCount: fetchedTxs.length,
|
|
197
|
+
success: fetchedTxs.length === txHashes.length
|
|
198
|
+
};
|
|
199
|
+
} catch (err) {
|
|
200
|
+
return {
|
|
201
|
+
type: 'BENCH_RESULT',
|
|
202
|
+
durationMs: timer.ms(),
|
|
203
|
+
fetchedCount: 0,
|
|
204
|
+
success: false,
|
|
205
|
+
error: err?.message ?? String(err)
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
let workerClient = null;
|
|
210
|
+
let workerTxPool = null;
|
|
211
|
+
let workerAttestationPool = null;
|
|
212
|
+
let workerConfig = null;
|
|
213
|
+
let workerLogger = null;
|
|
214
|
+
let kvStore = null;
|
|
215
|
+
async function stopWorker() {
|
|
216
|
+
try {
|
|
217
|
+
if (workerClient) {
|
|
218
|
+
await workerClient.stop();
|
|
219
|
+
workerClient = null;
|
|
220
|
+
}
|
|
221
|
+
} catch (e) {
|
|
222
|
+
workerLogger?.error('Error stopping worker client', e);
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
if (kvStore?.close) {
|
|
226
|
+
await kvStore.close();
|
|
227
|
+
kvStore = null;
|
|
228
|
+
}
|
|
229
|
+
} catch (e) {
|
|
230
|
+
workerLogger?.error('Error closing kv store', e);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function gracefulExit(code = 0) {
|
|
234
|
+
try {
|
|
235
|
+
if (process.connected) {
|
|
236
|
+
process.disconnect();
|
|
237
|
+
}
|
|
238
|
+
} catch {
|
|
239
|
+
// IPC channel already closed
|
|
240
|
+
}
|
|
241
|
+
// Safety fallback if lingering handles prevent the event loop from draining
|
|
242
|
+
setTimeout(()=>process.exit(code), 5000).unref();
|
|
243
|
+
}
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
245
|
+
process.on('message', async (msg)=>{
|
|
246
|
+
const { type, config: rawConfig, clientIndex } = msg;
|
|
247
|
+
try {
|
|
248
|
+
if (type === 'START') {
|
|
249
|
+
const config = {
|
|
250
|
+
...rawConfig,
|
|
251
|
+
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
252
|
+
priceBumpPercentage: 10n
|
|
253
|
+
};
|
|
254
|
+
workerConfig = config;
|
|
255
|
+
workerTxPool = new InMemoryTxPool();
|
|
256
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
257
|
+
const epochCache = createBenchmarkEpochCache();
|
|
258
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
259
|
+
const l2BlockSource = new TestbenchL2BlockSource();
|
|
260
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
261
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
262
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
263
|
+
workerTxPool.setLogger(workerLogger);
|
|
264
|
+
const telemetry = getTelemetryClient();
|
|
265
|
+
const deps = {
|
|
266
|
+
txPool: workerTxPool,
|
|
267
|
+
attestationPool: workerAttestationPool,
|
|
268
|
+
store: kvStore,
|
|
269
|
+
logger: workerLogger
|
|
270
|
+
};
|
|
271
|
+
const client = await createP2PClient(config, l2BlockSource, proofVerifier, worldState, epochCache, {
|
|
272
|
+
getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
|
|
273
|
+
}, 'test-p2p-bench-worker', undefined, telemetry, deps, await l2BlockSource.getInitialHeader().hash());
|
|
274
|
+
const testService = new TestLibP2PService(config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
|
|
275
|
+
client.p2pService = testService;
|
|
276
|
+
await client.start();
|
|
277
|
+
for(let i = 0; i < 100; i++){
|
|
278
|
+
const isReady = client.isReady();
|
|
279
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
280
|
+
if (isReady) {
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
await sleep(1000);
|
|
284
|
+
}
|
|
285
|
+
workerClient = client;
|
|
286
|
+
const peerId = client.p2pService.node.peerId.toString();
|
|
287
|
+
process.send({
|
|
288
|
+
type: 'READY',
|
|
289
|
+
peerId
|
|
290
|
+
});
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const cmd = msg;
|
|
294
|
+
switch(cmd.type){
|
|
295
|
+
case 'STOP':
|
|
296
|
+
await stopWorker();
|
|
297
|
+
gracefulExit(0);
|
|
298
|
+
break;
|
|
299
|
+
case 'SEND_TX':
|
|
300
|
+
if (workerClient) {
|
|
301
|
+
await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
302
|
+
process.send({
|
|
303
|
+
type: 'TX_SENT'
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
307
|
+
case 'GET_PEER_COUNT':
|
|
308
|
+
process.send({
|
|
309
|
+
type: 'PEER_COUNT',
|
|
310
|
+
count: workerClient ? getConnectedPeerCount(workerClient) : 0
|
|
311
|
+
});
|
|
312
|
+
break;
|
|
313
|
+
case 'BENCH_REQRESP':
|
|
314
|
+
{
|
|
315
|
+
const benchCmd = cmd;
|
|
316
|
+
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
317
|
+
process.send({
|
|
318
|
+
type: 'BENCH_RESULT',
|
|
319
|
+
durationMs: 0,
|
|
320
|
+
fetchedCount: 0,
|
|
321
|
+
success: false,
|
|
322
|
+
error: 'Worker not initialized'
|
|
323
|
+
});
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
// Reset state before each benchmark run to avoid cross-run contamination
|
|
327
|
+
workerTxPool.resetState();
|
|
328
|
+
workerAttestationPool.resetState();
|
|
329
|
+
resetPeerScores(workerClient);
|
|
330
|
+
installUnlimitedRateLimits(workerClient);
|
|
331
|
+
const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
|
|
332
|
+
const txHashes = allTxs.map((tx)=>tx.getTxHash());
|
|
333
|
+
const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
|
|
334
|
+
await workerAttestationPool.tryAddBlockProposal(blockProposal);
|
|
335
|
+
workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
336
|
+
if (benchCmd.isAggregator) {
|
|
337
|
+
workerTxPool.clearTxs();
|
|
338
|
+
workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`);
|
|
339
|
+
const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
|
|
340
|
+
process.send(result);
|
|
341
|
+
} else {
|
|
342
|
+
const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
|
|
343
|
+
workerTxPool.setTxs(myTxs);
|
|
344
|
+
workerLogger.info(`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`);
|
|
345
|
+
process.send({
|
|
346
|
+
type: 'BENCH_READY'
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
} catch (err) {
|
|
353
|
+
try {
|
|
354
|
+
process.send({
|
|
355
|
+
type: 'ERROR',
|
|
356
|
+
error: err.message
|
|
357
|
+
});
|
|
358
|
+
} catch {
|
|
359
|
+
// IPC channel may be closed
|
|
360
|
+
}
|
|
361
|
+
await stopWorker();
|
|
362
|
+
gracefulExit(1);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse_log_file.d.ts","sourceRoot":"","sources":["../../src/testbench/parse_log_file.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Parse Log File
|
|
2
|
+
// 1. Determine when a message was sent from the Sent Message log
|
|
3
|
+
// 2. Parse all Received Tx logs, extracting the timestamp and peer ID
|
|
4
|
+
// 3. Compute the delay for each peer relative to the timestamp of the sent message
|
|
5
|
+
// 4. Print the delays
|
|
6
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
const logger = createLogger('parse_log_file');
|
|
9
|
+
function getTimestamp(line) {
|
|
10
|
+
const timestampMatch = line.match(/"time":(\d+)/);
|
|
11
|
+
if (!timestampMatch) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return parseInt(timestampMatch[1], 10);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parses a single log line. If the line contains an "Received tx" event,
|
|
18
|
+
* it extracts the timestamp and the peer ID.
|
|
19
|
+
*/ function parseReceivedTx(line) {
|
|
20
|
+
if (!line.includes('Received tx')) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
// Extract timestamp from the line: e.g. {"time":1740142435845}
|
|
24
|
+
const timestamp = getTimestamp(line);
|
|
25
|
+
if (!timestamp) {
|
|
26
|
+
logger.error('No timestamp found in received tx log');
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Extract the peer ID from the log line
|
|
30
|
+
// Example format: "module":"p2p:1","msg":"Received tx 0x0feeafa65f25fd8d613fe4aca44fd65fe41c149ef1941e2019d40925c40748f9 from external peer 16Uiu2HAm8w4oxXF3TwDKoGL9U66thMXWqCgPnb2CgkYwmUqFCWbC."
|
|
31
|
+
const peerIdMatch = line.match(/"module":"p2p:(\d+)"/);
|
|
32
|
+
if (!peerIdMatch) {
|
|
33
|
+
logger.error('No peer Number found in received tx log');
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const peerId = peerIdMatch[1];
|
|
37
|
+
return {
|
|
38
|
+
timestamp,
|
|
39
|
+
peerId
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function parseSentMessage(line) {
|
|
43
|
+
if (!line.includes('Sent message')) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const timestamp = getTimestamp(line);
|
|
47
|
+
if (!timestamp) {
|
|
48
|
+
logger.error('No timestamp found in sent message log');
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return timestamp;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Processes the given log file, extracts all rpc.from events, computes the
|
|
55
|
+
* propagation delay for each peer relative to the earliest event, and prints
|
|
56
|
+
* some benchmark statistics.
|
|
57
|
+
*/ function processLogFile(logFilePath, outputJsonPath) {
|
|
58
|
+
const content = fs.readFileSync(logFilePath, 'utf-8');
|
|
59
|
+
const lines = content.split('\n');
|
|
60
|
+
const events = [];
|
|
61
|
+
let t0 = 0;
|
|
62
|
+
// We begin our search as soon as we see the Sent message log
|
|
63
|
+
let messageSent = false;
|
|
64
|
+
for (const line of lines){
|
|
65
|
+
// Look for Sent message log
|
|
66
|
+
if (line.includes('Sent message')) {
|
|
67
|
+
messageSent = true;
|
|
68
|
+
t0 = parseSentMessage(line);
|
|
69
|
+
}
|
|
70
|
+
if (!messageSent) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Once we see the sent message log, we begin parsing Received tx logs
|
|
74
|
+
const event = parseReceivedTx(line);
|
|
75
|
+
if (event) {
|
|
76
|
+
events.push(event);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (events.length === 0) {
|
|
80
|
+
logger.error('No message received events found in log file.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Sort events by timestamp (ascending)
|
|
84
|
+
events.sort((a, b)=>a.timestamp - b.timestamp);
|
|
85
|
+
// Compute delay for each event relative to t0
|
|
86
|
+
const numberReceived = events.length;
|
|
87
|
+
const delays = events.map((e)=>({
|
|
88
|
+
peerId: e.peerId,
|
|
89
|
+
delay: e.timestamp - t0
|
|
90
|
+
}));
|
|
91
|
+
logger.info('Propagation delays (in ms) per peer:');
|
|
92
|
+
for (const d of delays){
|
|
93
|
+
logger.info(`${d.peerId}: ${d.delay} ms`);
|
|
94
|
+
}
|
|
95
|
+
// Compute basic statistics
|
|
96
|
+
const delayValues = delays.map((d)=>d.delay);
|
|
97
|
+
const minDelay = Math.min(...delayValues);
|
|
98
|
+
const maxDelay = Math.max(...delayValues);
|
|
99
|
+
const sumDelay = delayValues.reduce((sum, val)=>sum + val, 0);
|
|
100
|
+
const avgDelay = sumDelay / delayValues.length;
|
|
101
|
+
const sortedDelays = delayValues.slice().sort((a, b)=>a - b);
|
|
102
|
+
const medianDelay = sortedDelays[Math.floor(sortedDelays.length / 2)];
|
|
103
|
+
logger.info('\nBenchmark Statistics:');
|
|
104
|
+
logger.info(`Number of messages received: ${numberReceived}`);
|
|
105
|
+
logger.info(`Min delay: ${minDelay} ms`);
|
|
106
|
+
logger.info(`Max delay: ${maxDelay} ms`);
|
|
107
|
+
logger.info(`Average delay: ${avgDelay.toFixed(2)} ms`);
|
|
108
|
+
logger.info(`Median delay: ${medianDelay} ms`);
|
|
109
|
+
// If output JSON path is provided, write results to file
|
|
110
|
+
if (outputJsonPath) {
|
|
111
|
+
const result = {
|
|
112
|
+
delays,
|
|
113
|
+
stats: {
|
|
114
|
+
numberReceived,
|
|
115
|
+
minDelay,
|
|
116
|
+
maxDelay,
|
|
117
|
+
averageDelay: Number(avgDelay.toFixed(2)),
|
|
118
|
+
medianDelay
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
fs.writeFileSync(outputJsonPath, JSON.stringify(result, null, 2));
|
|
122
|
+
logger.info(`\nResults written to ${outputJsonPath}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Get the log file path and optional output JSON path from command-line arguments
|
|
126
|
+
const [logFilePath, outputJsonPath] = process.argv.slice(2);
|
|
127
|
+
if (!logFilePath) {
|
|
128
|
+
logger.error('Usage: ts-node parse_log_file.ts <logFilePath> [outputJsonPath]');
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
processLogFile(logFilePath, outputJsonPath);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testbench.d.ts","sourceRoot":"","sources":["../../src/testbench/testbench.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { sleep } from '@aztec-labs/foundation/sleep';
|
|
3
|
+
import { ChonkProof } from '@aztec-labs/stdlib/proofs';
|
|
4
|
+
import { mockTx } from '@aztec-labs/stdlib/testing';
|
|
5
|
+
import assert from 'assert';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { WorkerClientManager, testChainConfig } from './worker_client_manager.js';
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const logger = createLogger('testbench');
|
|
11
|
+
async function main() {
|
|
12
|
+
try {
|
|
13
|
+
// Read configuration file name from command line args
|
|
14
|
+
const configFile = process.argv[2];
|
|
15
|
+
if (!configFile) {
|
|
16
|
+
throw new Error('Configuration file must be provided as first argument');
|
|
17
|
+
}
|
|
18
|
+
// @dependency ../../testbench/configurations/*.json
|
|
19
|
+
const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
|
|
20
|
+
const config = await import(configPath, {
|
|
21
|
+
with: {
|
|
22
|
+
type: 'json'
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const testConfig = {
|
|
26
|
+
...testChainConfig,
|
|
27
|
+
...config.default
|
|
28
|
+
};
|
|
29
|
+
const numberOfClients = config.default.numberOfClients;
|
|
30
|
+
// Setup clients in separate processes
|
|
31
|
+
const workerClientManager = new WorkerClientManager(logger, testConfig);
|
|
32
|
+
await workerClientManager.makeWorkerClients(numberOfClients);
|
|
33
|
+
// wait a bit longer for all peers to be ready
|
|
34
|
+
await sleep(5000);
|
|
35
|
+
logger.info('Workers Ready');
|
|
36
|
+
// Send tx from client 0
|
|
37
|
+
const tx = await mockTx(1, {
|
|
38
|
+
chonkProof: ChonkProof.random()
|
|
39
|
+
});
|
|
40
|
+
workerClientManager.processes[0].send({
|
|
41
|
+
type: 'SEND_TX',
|
|
42
|
+
tx: tx.toBuffer()
|
|
43
|
+
});
|
|
44
|
+
logger.info('Transaction sent from client 0');
|
|
45
|
+
// Give time for message propagation
|
|
46
|
+
await sleep(10000);
|
|
47
|
+
logger.info('Checking message propagation results');
|
|
48
|
+
// Check message propagation results
|
|
49
|
+
const numberOfClientsThatReceivedMessage = workerClientManager.numberOfClientsThatReceivedMessage();
|
|
50
|
+
logger.info(`Number of clients that received message: ${numberOfClientsThatReceivedMessage}`);
|
|
51
|
+
assert(numberOfClientsThatReceivedMessage === numberOfClients - 1);
|
|
52
|
+
logger.info('Test passed, cleaning up');
|
|
53
|
+
// cleanup
|
|
54
|
+
await workerClientManager.cleanup();
|
|
55
|
+
} catch (error) {
|
|
56
|
+
logger.error('Test failed with error:', error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
main().catch((error)=>{
|
|
61
|
+
logger.error('Unhandled error:', error);
|
|
62
|
+
});
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import type { ChainConfig } from '@aztec-labs/stdlib/config';
|
|
3
|
+
import { type ChildProcess } from 'child_process';
|
|
4
|
+
import { type P2PConfig } from '../config.js';
|
|
5
|
+
import type { DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
6
|
+
declare const testChainConfig: ChainConfig;
|
|
7
|
+
export interface ReqRespBenchmarkConfig {
|
|
8
|
+
txCount: number;
|
|
9
|
+
distribution: DistributionPattern;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
pinnedPeerIndex?: number;
|
|
12
|
+
blockNumber?: number;
|
|
13
|
+
seed?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ReqRespBenchmarkResult {
|
|
16
|
+
txCount: number;
|
|
17
|
+
distribution: DistributionPattern;
|
|
18
|
+
durationMs: number;
|
|
19
|
+
fetchedCount: number;
|
|
20
|
+
success: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
declare class WorkerClientManager {
|
|
24
|
+
processes: ChildProcess[];
|
|
25
|
+
peerIdPrivateKeys: string[];
|
|
26
|
+
peerEnrs: string[];
|
|
27
|
+
ports: number[];
|
|
28
|
+
peerIds: string[];
|
|
29
|
+
private p2pConfig;
|
|
30
|
+
private logger;
|
|
31
|
+
private messageReceivedByClient;
|
|
32
|
+
constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
|
|
33
|
+
destroy(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a client configuration object for IPC.
|
|
36
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
37
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
38
|
+
* The worker must re-wrap it in SecretValue.
|
|
39
|
+
* We also omit priceBumpPercentage since it's a bigint and can't be
|
|
40
|
+
* serialized over IPC (which uses JSON under the hood).
|
|
41
|
+
*/
|
|
42
|
+
private createClientConfig;
|
|
43
|
+
/**
|
|
44
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
45
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
46
|
+
*/
|
|
47
|
+
private spawnWorkerProcess;
|
|
48
|
+
/**
|
|
49
|
+
* Creates a number of worker clients in separate processes.
|
|
50
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
51
|
+
*
|
|
52
|
+
* @param numberOfClients - The number of clients to create
|
|
53
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
54
|
+
* @returns The ENRs of the created clients
|
|
55
|
+
*/
|
|
56
|
+
makeWorkerClients(numberOfClients: number, options?: {
|
|
57
|
+
bootstrapMode?: 'subset' | 'all';
|
|
58
|
+
seedPeerLimit?: number;
|
|
59
|
+
batchSize?: number;
|
|
60
|
+
batchDelayMs?: number;
|
|
61
|
+
}): Promise<string[]>;
|
|
62
|
+
purgeMessageReceivedByClient(): void;
|
|
63
|
+
numberOfClientsThatReceivedMessage(): number;
|
|
64
|
+
/**
|
|
65
|
+
* Changes the port for a specific client
|
|
66
|
+
*
|
|
67
|
+
* @param clientIndex - The index of the client to change port for
|
|
68
|
+
* @param newPort - The new port to use
|
|
69
|
+
*/
|
|
70
|
+
changePort(clientIndex: number, newPort: number): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Terminate a single process with timeout and force kill if needed
|
|
73
|
+
*/
|
|
74
|
+
private terminateProcess;
|
|
75
|
+
/**
|
|
76
|
+
* Cleans up all worker processes with timeout and force kill if needed
|
|
77
|
+
*/
|
|
78
|
+
cleanup(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
|
|
81
|
+
* This prevents benchmark cases from starting with degraded connectivity after a previous case
|
|
82
|
+
* caused connection failures.
|
|
83
|
+
*/
|
|
84
|
+
waitForConnectivity(minPeers: number, timeoutMs?: number): Promise<number>;
|
|
85
|
+
private getPeerCount;
|
|
86
|
+
/**
|
|
87
|
+
* Run a req/resp benchmark across all worker clients.
|
|
88
|
+
*
|
|
89
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
90
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
91
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
92
|
+
*
|
|
93
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
94
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
95
|
+
*/
|
|
96
|
+
runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult>;
|
|
97
|
+
private waitForBenchReady;
|
|
98
|
+
private waitForBenchResult;
|
|
99
|
+
}
|
|
100
|
+
export { WorkerClientManager, testChainConfig };
|
|
101
|
+
export type { DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUtuRSxPQUFPLEtBQUssRUFBMkMsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVNySCxRQUFBLE1BQU0sZUFBZSxFQUFFLFdBSXRCLENBQUM7QUFFRixNQUFNLFdBQVcsc0JBQXNCO0lBQ3JDLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsWUFBWSxFQUFFLG1CQUFtQixDQUFDO0lBQ2xDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDZjtBQUVELE1BQU0sV0FBVyxzQkFBc0I7SUFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDakIsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2hCO0FBRUQsY0FBTSxtQkFBbUI7SUFDaEIsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFNO0lBQy9CLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ2pDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUN4QixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDckIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQzlCLE9BQU8sQ0FBQyxTQUFTLENBQXFCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLHVCQUF1QixDQUFnQjtJQUUvQyxZQUFZLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFHeEQ7SUFFRCxPQUFPLFNBSU47SUFFRDs7Ozs7OztPQU9HO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQW9CMUI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWtHMUI7Ozs7Ozs7T0FPRztJQUNHLGlCQUFpQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixPQUFPLEdBQUU7UUFDUCxhQUFhLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixTQUFTLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDbkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2xCLHFCQStEUDtJQUVELDRCQUE0QixTQUUzQjtJQUVELGtDQUFrQyxXQUVqQztJQUVEOzs7OztPQUtHO0lBQ0csVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBOENwRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLGdCQUFnQjtJQXFDeEI7O09BRUc7SUFDRyxPQUFPLGtCQWdDWjtJQUVEOzs7O09BSUc7SUFDRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRSxNQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWtCdkY7SUFFRCxPQUFPLENBQUMsWUFBWTtJQThCcEI7Ozs7Ozs7OztPQVNHO0lBQ0csbUJBQW1CLENBQUMsTUFBTSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQWtFekY7SUFFRCxPQUFPLENBQUMsaUJBQWlCO0lBa0N6QixPQUFPLENBQUMsa0JBQWtCO0NBaUMzQjtBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUNoRCxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQyJ9
|