@aztec/p2p 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0
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 +130 -3
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +26 -10
- package/dest/client/factory.d.ts +13 -12
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +70 -21
- package/dest/client/interface.d.ts +104 -41
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +72 -70
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +681 -346
- package/dest/config.d.ts +171 -89
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +169 -58
- 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 +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- 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 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +154 -77
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +518 -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 +694 -295
- 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 +11 -8
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +19 -13
- package/dest/mem_pools/index.d.ts +3 -3
- 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 +14 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +51 -12
- package/dest/mem_pools/interface.d.ts +6 -7
- package/dest/mem_pools/interface.d.ts.map +1 -1
- 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 +39 -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 +97 -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 +97 -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 +62 -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 +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 +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 +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 +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 +68 -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 +178 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -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 +1013 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +12 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +78 -22
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +11 -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 +25 -17
- 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 +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 +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 +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- 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 +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +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/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 +4 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +40 -3
- 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 +137 -6
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +268 -58
- 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_validator.d.ts +105 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +146 -67
- package/dest/msg_validators/tx_validator/index.d.ts +6 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +5 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
- 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 +24 -3
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
- 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 +2 -2
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
- 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 +4 -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 +4 -2
- 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 +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +14 -10
- package/dest/services/discv5/discV5_service.d.ts +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +120 -24
- 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 +40 -16
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +61 -14
- package/dest/services/encoding.d.ts +24 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +48 -30
- 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 +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 +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 +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +43 -71
- package/dest/services/libp2p/libp2p_service.d.ts +127 -54
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1324 -556
- package/dest/services/peer-manager/metrics.d.ts +9 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +39 -21
- package/dest/services/peer-manager/peer_manager.d.ts +21 -4
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +87 -38
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +134 -19
- 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 +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- 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 +27 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +23 -19
- 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 +16 -21
- package/dest/services/reqresp/protocols/auth.d.ts +2 -2
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.js +2 -2
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +15 -2
- 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 +35 -14
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +37 -9
- 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 +85 -21
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- 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 +8 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +21 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
- package/dest/services/reqresp/reqresp.d.ts +12 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +480 -200
- package/dest/services/service.d.ts +78 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +11 -11
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +28 -27
- 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 +3 -2
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -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 +9 -13
- 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 +49 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +299 -71
- package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +28 -31
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +29 -7
- 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 +9 -6
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +23 -10
- package/dest/services/tx_provider_instrumentation.d.ts +5 -2
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +14 -14
- 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 +7 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +46 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +115 -14
- package/dest/test-helpers/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +19 -20
- 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 +400 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +289 -131
- package/dest/testbench/worker_client_manager.d.ts +57 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +277 -44
- package/dest/util.d.ts +13 -8
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +18 -18
- package/src/bootstrap/bootstrap.ts +24 -7
- package/src/client/factory.ts +141 -46
- package/src/client/interface.ts +113 -49
- package/src/client/p2p_client.ts +342 -418
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +298 -66
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +594 -76
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +796 -329
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +29 -17
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +48 -13
- package/src/mem_pools/interface.ts +5 -7
- 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 +112 -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 +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -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 +65 -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 +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 +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 +69 -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 +252 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +71 -24
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +34 -23
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +32 -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 +129 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- 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 +62 -7
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +431 -57
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +206 -76
- package/src/msg_validators/tx_validator/index.ts +5 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +31 -12
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +1 -1
- 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 +10 -3
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +14 -19
- package/src/services/discv5/discV5_service.ts +127 -15
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +82 -38
- package/src/services/encoding.ts +46 -29
- package/src/services/gossipsub/README.md +663 -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 +478 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +48 -75
- package/src/services/libp2p/libp2p_service.ts +1073 -607
- package/src/services/peer-manager/metrics.ts +46 -21
- package/src/services/peer-manager/peer_manager.ts +96 -29
- package/src/services/peer-manager/peer_scoring.ts +130 -12
- 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 +660 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
- package/src/services/reqresp/config.ts +19 -2
- 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 +48 -46
- package/src/services/reqresp/metrics.ts +35 -27
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +19 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +109 -17
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/status.ts +7 -4
- package/src/services/reqresp/protocols/tx.ts +24 -5
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
- package/src/services/reqresp/reqresp.ts +107 -223
- package/src/services/service.ts +102 -31
- package/src/services/tx_collection/config.ts +42 -37
- 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 +2 -1
- package/src/services/tx_collection/instrumentation.ts +5 -13
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +367 -115
- package/src/services/tx_collection/tx_collection_sink.ts +32 -36
- package/src/services/tx_collection/tx_source.ts +29 -8
- 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 +163 -0
- package/src/services/tx_provider.ts +34 -13
- package/src/services/tx_provider_instrumentation.ts +24 -14
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +7 -6
- package/src/test-helpers/mock-pubsub.ts +138 -15
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +18 -30
- package/src/test-helpers/test_tx_provider.ts +69 -0
- package/src/test-helpers/testbench-utils.ts +465 -0
- package/src/testbench/p2p_client_testbench_worker.ts +406 -130
- package/src/testbench/worker_client_manager.ts +355 -46
- package/src/util.ts +40 -19
- package/src/versioning.ts +3 -33
- 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/aztec_kv_tx_pool.d.ts +0 -116
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -617
- package/dest/mem_pools/tx_pool/index.d.ts +0 -4
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -3
- 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 -239
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -8
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -10
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -123
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -395
- 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/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -300
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -177
- 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/aztec_kv_tx_pool.ts +0 -751
- package/src/mem_pools/tx_pool/index.ts +0 -3
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -285
- package/src/mem_pools/tx_pool/priority.ts +0 -13
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -136
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -314
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -341
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
3
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
4
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
6
5
|
|
|
7
6
|
import { type ChildProcess, fork } from 'child_process';
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { fileURLToPath } from 'url';
|
|
10
10
|
|
|
@@ -12,23 +12,45 @@ import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
|
|
|
12
12
|
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
13
13
|
import { getPorts } from '../test-helpers/get-ports.js';
|
|
14
14
|
import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
|
|
15
|
+
import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
|
|
16
|
+
import type { BenchReqRespCommand, BenchResultMessage, DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
15
17
|
|
|
16
18
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
const
|
|
19
|
+
const p2pRoot = path.resolve(__dirname, '../..');
|
|
20
|
+
const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
|
|
21
|
+
const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
|
|
22
|
+
const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
18
23
|
|
|
19
24
|
const testChainConfig: ChainConfig = {
|
|
20
25
|
l1ChainId: 31337,
|
|
21
26
|
rollupVersion: 1,
|
|
22
|
-
|
|
23
|
-
rollupAddress: EthAddress.random(),
|
|
24
|
-
},
|
|
27
|
+
rollupAddress: EthAddress.random(),
|
|
25
28
|
};
|
|
26
29
|
|
|
30
|
+
export interface ReqRespBenchmarkConfig {
|
|
31
|
+
txCount: number;
|
|
32
|
+
distribution: DistributionPattern;
|
|
33
|
+
timeoutMs: number;
|
|
34
|
+
pinnedPeerIndex?: number;
|
|
35
|
+
blockNumber?: number;
|
|
36
|
+
seed?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ReqRespBenchmarkResult {
|
|
40
|
+
txCount: number;
|
|
41
|
+
distribution: DistributionPattern;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
fetchedCount: number;
|
|
44
|
+
success: boolean;
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
27
48
|
class WorkerClientManager {
|
|
28
49
|
public processes: ChildProcess[] = [];
|
|
29
50
|
public peerIdPrivateKeys: string[] = [];
|
|
30
51
|
public peerEnrs: string[] = [];
|
|
31
52
|
public ports: number[] = [];
|
|
53
|
+
public peerIds: string[] = [];
|
|
32
54
|
private p2pConfig: Partial<P2PConfig>;
|
|
33
55
|
private logger: Logger;
|
|
34
56
|
private messageReceivedByClient: number[] = [];
|
|
@@ -41,38 +63,65 @@ class WorkerClientManager {
|
|
|
41
63
|
destroy() {
|
|
42
64
|
this.cleanup().catch((error: Error) => {
|
|
43
65
|
this.logger.error('Failed to cleanup worker client manager', error);
|
|
44
|
-
process.exit(1);
|
|
45
66
|
});
|
|
46
67
|
}
|
|
47
68
|
|
|
48
69
|
/**
|
|
49
|
-
* Creates a client configuration object
|
|
70
|
+
* Creates a client configuration object for IPC.
|
|
71
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
72
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
73
|
+
* The worker must re-wrap it in SecretValue.
|
|
74
|
+
* We also omit priceBumpPercentage since it's a bigint and can't be
|
|
75
|
+
* serialized over IPC (which uses JSON under the hood).
|
|
50
76
|
*/
|
|
51
77
|
private createClientConfig(
|
|
52
78
|
clientIndex: number,
|
|
53
79
|
port: number,
|
|
54
80
|
otherNodes: string[],
|
|
55
|
-
): P2PConfig & Partial<ChainConfig> {
|
|
56
|
-
|
|
81
|
+
): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
|
|
82
|
+
const { priceBumpPercentage: _, ...config } = {
|
|
57
83
|
...getP2PDefaultConfig(),
|
|
58
84
|
p2pEnabled: true,
|
|
59
|
-
peerIdPrivateKey:
|
|
85
|
+
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
60
86
|
listenAddress: '127.0.0.1',
|
|
61
87
|
p2pIp: '127.0.0.1',
|
|
62
88
|
p2pPort: port,
|
|
63
89
|
bootstrapNodes: [...otherNodes],
|
|
64
90
|
...this.p2pConfig,
|
|
65
91
|
};
|
|
92
|
+
return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
93
|
+
peerIdPrivateKey: string;
|
|
94
|
+
} & Partial<ChainConfig>;
|
|
66
95
|
}
|
|
67
96
|
|
|
68
97
|
/**
|
|
69
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
98
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
99
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
70
100
|
*/
|
|
71
101
|
private spawnWorkerProcess(
|
|
72
|
-
config: P2PConfig &
|
|
102
|
+
config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
103
|
+
peerIdPrivateKey: string;
|
|
104
|
+
} & Partial<ChainConfig>,
|
|
73
105
|
clientIndex: number,
|
|
74
106
|
): [ChildProcess, Promise<void>] {
|
|
75
|
-
const
|
|
107
|
+
const useCompiled = existsSync(workerJsPath);
|
|
108
|
+
const workerPath = useCompiled ? workerJsPath : workerTsPath;
|
|
109
|
+
|
|
110
|
+
const execArgv = [...process.execArgv];
|
|
111
|
+
if (!useCompiled && !execArgv.includes('ts-node/esm')) {
|
|
112
|
+
execArgv.push('--loader', 'ts-node/esm');
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const env = {
|
|
116
|
+
...process.env,
|
|
117
|
+
TS_NODE_PROJECT: tsconfigPath,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const childProcess = fork(workerPath, {
|
|
121
|
+
cwd: p2pRoot,
|
|
122
|
+
execArgv,
|
|
123
|
+
env,
|
|
124
|
+
});
|
|
76
125
|
childProcess.send({ type: 'START', config, clientIndex });
|
|
77
126
|
|
|
78
127
|
// Handle unexpected child process exit
|
|
@@ -90,74 +139,131 @@ class WorkerClientManager {
|
|
|
90
139
|
|
|
91
140
|
// Create ready signal promise
|
|
92
141
|
const readySignal = new Promise<void>((resolve, reject) => {
|
|
93
|
-
|
|
142
|
+
let resolved = false;
|
|
143
|
+
|
|
94
144
|
const timeout = setTimeout(() => {
|
|
145
|
+
if (resolved) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
resolved = true;
|
|
149
|
+
childProcess.off('message', messageHandler);
|
|
150
|
+
childProcess.off('exit', exitHandler);
|
|
95
151
|
reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
|
|
96
|
-
},
|
|
152
|
+
}, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
|
|
97
153
|
|
|
98
|
-
|
|
99
|
-
|
|
154
|
+
const messageHandler = (msg: any) => {
|
|
155
|
+
if (resolved) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
|
|
100
159
|
if (msg.type === 'READY') {
|
|
160
|
+
resolved = true;
|
|
161
|
+
clearTimeout(timeout);
|
|
162
|
+
childProcess.off('message', messageHandler);
|
|
163
|
+
childProcess.off('exit', exitHandler);
|
|
164
|
+
if (typeof msg.peerId === 'string') {
|
|
165
|
+
this.peerIds[clientIndex] = msg.peerId;
|
|
166
|
+
}
|
|
101
167
|
resolve();
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
168
|
+
} else if (msg.type === 'ERROR') {
|
|
169
|
+
resolved = true;
|
|
170
|
+
clearTimeout(timeout);
|
|
171
|
+
childProcess.off('message', messageHandler);
|
|
172
|
+
childProcess.off('exit', exitHandler);
|
|
105
173
|
reject(new Error(msg.error));
|
|
106
174
|
}
|
|
107
|
-
|
|
175
|
+
// Ignore other message types and keep waiting for READY/ERROR
|
|
176
|
+
};
|
|
108
177
|
|
|
109
|
-
|
|
110
|
-
|
|
178
|
+
const exitHandler = (code: number | null) => {
|
|
179
|
+
if (resolved) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
resolved = true;
|
|
111
183
|
clearTimeout(timeout);
|
|
184
|
+
childProcess.off('message', messageHandler);
|
|
112
185
|
if (code === 0) {
|
|
113
186
|
resolve();
|
|
114
187
|
} else {
|
|
115
188
|
reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
|
|
116
189
|
}
|
|
117
|
-
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
childProcess.on('message', messageHandler);
|
|
193
|
+
childProcess.once('exit', exitHandler);
|
|
118
194
|
});
|
|
119
195
|
|
|
120
196
|
return [childProcess, readySignal];
|
|
121
197
|
}
|
|
122
198
|
|
|
123
199
|
/**
|
|
124
|
-
* Creates a number of worker clients in separate processes
|
|
125
|
-
* All are configured to connect to each other and
|
|
200
|
+
* Creates a number of worker clients in separate processes.
|
|
201
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
126
202
|
*
|
|
127
203
|
* @param numberOfClients - The number of clients to create
|
|
204
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
128
205
|
* @returns The ENRs of the created clients
|
|
129
206
|
*/
|
|
130
|
-
async makeWorkerClients(
|
|
207
|
+
async makeWorkerClients(
|
|
208
|
+
numberOfClients: number,
|
|
209
|
+
options: {
|
|
210
|
+
bootstrapMode?: 'subset' | 'all';
|
|
211
|
+
seedPeerLimit?: number;
|
|
212
|
+
batchSize?: number;
|
|
213
|
+
batchDelayMs?: number;
|
|
214
|
+
} = {},
|
|
215
|
+
) {
|
|
131
216
|
try {
|
|
217
|
+
const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
|
|
218
|
+
const seedPeerLimit = options.seedPeerLimit ?? 10;
|
|
219
|
+
const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
|
|
220
|
+
const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
|
|
221
|
+
|
|
132
222
|
this.messageReceivedByClient = new Array(numberOfClients).fill(0);
|
|
133
223
|
this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
|
|
134
224
|
this.ports = await getPorts(numberOfClients);
|
|
135
225
|
this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
|
|
226
|
+
this.peerIds = new Array(numberOfClients);
|
|
136
227
|
|
|
137
228
|
this.processes = [];
|
|
138
229
|
const readySignals: Promise<void>[] = [];
|
|
139
230
|
|
|
140
|
-
for (let
|
|
141
|
-
|
|
231
|
+
for (let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize) {
|
|
232
|
+
const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
|
|
233
|
+
const batchPromises: Promise<void>[] = [];
|
|
142
234
|
|
|
143
|
-
|
|
144
|
-
|
|
235
|
+
for (let i = batchStart; i < batchEnd; i++) {
|
|
236
|
+
this.logger.info(`Creating client ${i}`);
|
|
145
237
|
|
|
146
|
-
|
|
147
|
-
|
|
238
|
+
const otherNodes =
|
|
239
|
+
bootstrapMode === 'all'
|
|
240
|
+
? this.peerEnrs.filter((_, ind) => ind !== i)
|
|
241
|
+
: this.peerEnrs.filter((_, ind) => ind < Math.min(i, seedPeerLimit));
|
|
148
242
|
|
|
149
|
-
|
|
150
|
-
|
|
243
|
+
const config = this.createClientConfig(i, this.ports[i], otherNodes);
|
|
244
|
+
const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
|
|
245
|
+
|
|
246
|
+
readySignals.push(readySignal);
|
|
247
|
+
batchPromises.push(readySignal);
|
|
248
|
+
this.processes.push(childProcess);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
await Promise.all(batchPromises);
|
|
252
|
+
|
|
253
|
+
if (batchEnd < numberOfClients && batchDelayMs > 0) {
|
|
254
|
+
await sleep(batchDelayMs);
|
|
255
|
+
}
|
|
151
256
|
}
|
|
152
257
|
|
|
153
|
-
|
|
154
|
-
await sleep(10000);
|
|
258
|
+
await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
|
|
155
259
|
|
|
156
|
-
// Wait for all peers to be booted up with timeout
|
|
157
260
|
await Promise.race([
|
|
158
261
|
Promise.all(readySignals),
|
|
159
262
|
new Promise((_, reject) =>
|
|
160
|
-
setTimeout(
|
|
263
|
+
setTimeout(
|
|
264
|
+
() => reject(new Error('Timeout waiting for all workers to be ready')),
|
|
265
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
266
|
+
),
|
|
161
267
|
),
|
|
162
268
|
]);
|
|
163
269
|
|
|
@@ -215,11 +321,13 @@ class WorkerClientManager {
|
|
|
215
321
|
|
|
216
322
|
this.processes[clientIndex] = childProcess;
|
|
217
323
|
|
|
218
|
-
// Wait for the process to be ready with a timeout
|
|
219
324
|
await Promise.race([
|
|
220
325
|
readySignal,
|
|
221
326
|
new Promise((_, reject) =>
|
|
222
|
-
setTimeout(
|
|
327
|
+
setTimeout(
|
|
328
|
+
() => reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)),
|
|
329
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
330
|
+
),
|
|
223
331
|
),
|
|
224
332
|
]);
|
|
225
333
|
} catch (error) {
|
|
@@ -239,15 +347,14 @@ class WorkerClientManager {
|
|
|
239
347
|
}
|
|
240
348
|
|
|
241
349
|
return new Promise<void>(resolve => {
|
|
242
|
-
// Set a timeout for the graceful exit
|
|
243
350
|
const forceKillTimeout = setTimeout(() => {
|
|
244
351
|
this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
|
|
245
352
|
try {
|
|
246
|
-
process.kill('SIGKILL');
|
|
353
|
+
process.kill('SIGKILL');
|
|
247
354
|
} catch (e) {
|
|
248
355
|
this.logger.error(`Error force killing process ${index}:`, e);
|
|
249
356
|
}
|
|
250
|
-
},
|
|
357
|
+
}, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
|
|
251
358
|
|
|
252
359
|
// Listen for process exit
|
|
253
360
|
process.once('exit', () => {
|
|
@@ -280,7 +387,6 @@ class WorkerClientManager {
|
|
|
280
387
|
// Create array of promises for each process termination
|
|
281
388
|
const terminationPromises = this.processes.map((process, index) => this.terminateProcess(process, index));
|
|
282
389
|
|
|
283
|
-
// Wait for all processes to terminate with a timeout
|
|
284
390
|
try {
|
|
285
391
|
await Promise.race([
|
|
286
392
|
Promise.all(terminationPromises),
|
|
@@ -297,7 +403,7 @@ class WorkerClientManager {
|
|
|
297
403
|
}
|
|
298
404
|
});
|
|
299
405
|
resolve();
|
|
300
|
-
},
|
|
406
|
+
}, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
|
|
301
407
|
}),
|
|
302
408
|
]);
|
|
303
409
|
} catch (error) {
|
|
@@ -305,8 +411,211 @@ class WorkerClientManager {
|
|
|
305
411
|
}
|
|
306
412
|
|
|
307
413
|
this.processes = [];
|
|
414
|
+
this.peerIds = [];
|
|
308
415
|
this.logger.info('All worker processes cleaned up');
|
|
309
416
|
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
|
|
420
|
+
* This prevents benchmark cases from starting with degraded connectivity after a previous case
|
|
421
|
+
* caused connection failures.
|
|
422
|
+
*/
|
|
423
|
+
async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
|
|
424
|
+
const waitInterval = 1000;
|
|
425
|
+
let waited = 0;
|
|
426
|
+
|
|
427
|
+
while (waited < timeoutMs) {
|
|
428
|
+
const count = await this.getPeerCount(0, 5000);
|
|
429
|
+
if (count >= minPeers) {
|
|
430
|
+
this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
|
|
431
|
+
return count;
|
|
432
|
+
}
|
|
433
|
+
this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
|
|
434
|
+
await sleep(waitInterval);
|
|
435
|
+
waited += waitInterval;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const finalCount = await this.getPeerCount(0, 5000);
|
|
439
|
+
this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
|
|
440
|
+
return finalCount;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
|
|
444
|
+
return new Promise<number>(resolve => {
|
|
445
|
+
let resolved = false;
|
|
446
|
+
|
|
447
|
+
const handler = (msg: any) => {
|
|
448
|
+
if (resolved) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
if (msg.type === 'PEER_COUNT') {
|
|
452
|
+
resolved = true;
|
|
453
|
+
clearTimeout(timeout);
|
|
454
|
+
this.processes[clientIndex].off('message', handler);
|
|
455
|
+
resolve(msg.count as number);
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
const timeout = setTimeout(() => {
|
|
460
|
+
if (resolved) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
resolved = true;
|
|
464
|
+
this.processes[clientIndex].off('message', handler);
|
|
465
|
+
resolve(0);
|
|
466
|
+
}, timeoutMs);
|
|
467
|
+
|
|
468
|
+
this.processes[clientIndex].on('message', handler);
|
|
469
|
+
this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Run a req/resp benchmark across all worker clients.
|
|
475
|
+
*
|
|
476
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
477
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
478
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
479
|
+
*
|
|
480
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
481
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
482
|
+
*/
|
|
483
|
+
async runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult> {
|
|
484
|
+
const peerCount = this.processes.length;
|
|
485
|
+
if (peerCount < 2) {
|
|
486
|
+
throw new Error('Need at least 2 peers to run req/resp benchmark');
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const seed = config.seed ?? Date.now();
|
|
490
|
+
const blockNumber = config.blockNumber ?? 1;
|
|
491
|
+
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
492
|
+
|
|
493
|
+
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
|
|
494
|
+
|
|
495
|
+
const readyPromises: Promise<void>[] = [];
|
|
496
|
+
|
|
497
|
+
for (let i = 1; i < peerCount; i++) {
|
|
498
|
+
const cmd: BenchReqRespCommand = {
|
|
499
|
+
type: 'BENCH_REQRESP',
|
|
500
|
+
txCount: config.txCount,
|
|
501
|
+
peerCount,
|
|
502
|
+
distribution: config.distribution,
|
|
503
|
+
timeoutMs: config.timeoutMs,
|
|
504
|
+
isAggregator: false,
|
|
505
|
+
peerIndex: i,
|
|
506
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
507
|
+
pinnedPeerId,
|
|
508
|
+
blockNumber,
|
|
509
|
+
seed,
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
this.processes[i].send(cmd);
|
|
513
|
+
readyPromises.push(this.waitForBenchReady(i, 30000));
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
await Promise.all(readyPromises);
|
|
517
|
+
this.logger.info('All responder peers ready, starting aggregator benchmark...');
|
|
518
|
+
|
|
519
|
+
const aggregatorCmd: BenchReqRespCommand = {
|
|
520
|
+
type: 'BENCH_REQRESP',
|
|
521
|
+
txCount: config.txCount,
|
|
522
|
+
peerCount,
|
|
523
|
+
distribution: config.distribution,
|
|
524
|
+
timeoutMs: config.timeoutMs,
|
|
525
|
+
isAggregator: true,
|
|
526
|
+
peerIndex: 0,
|
|
527
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
528
|
+
pinnedPeerId,
|
|
529
|
+
blockNumber,
|
|
530
|
+
seed,
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
this.processes[0].send(aggregatorCmd);
|
|
534
|
+
const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
|
|
535
|
+
const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
|
|
536
|
+
|
|
537
|
+
this.logger.info(
|
|
538
|
+
`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
return {
|
|
542
|
+
txCount: config.txCount,
|
|
543
|
+
distribution: config.distribution,
|
|
544
|
+
durationMs: result.durationMs,
|
|
545
|
+
fetchedCount: result.fetchedCount,
|
|
546
|
+
success: result.success,
|
|
547
|
+
error: result.error,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
private waitForBenchReady(clientIndex: number, timeoutMs: number): Promise<void> {
|
|
552
|
+
return new Promise((resolve, reject) => {
|
|
553
|
+
let resolved = false;
|
|
554
|
+
|
|
555
|
+
const handler = (msg: any) => {
|
|
556
|
+
if (resolved) {
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
if (msg.type === 'BENCH_READY') {
|
|
560
|
+
resolved = true;
|
|
561
|
+
clearTimeout(timeout);
|
|
562
|
+
this.processes[clientIndex].off('message', handler);
|
|
563
|
+
resolve();
|
|
564
|
+
} else if (msg.type === 'ERROR') {
|
|
565
|
+
resolved = true;
|
|
566
|
+
clearTimeout(timeout);
|
|
567
|
+
this.processes[clientIndex].off('message', handler);
|
|
568
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
569
|
+
}
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
const timeout = setTimeout(() => {
|
|
573
|
+
if (resolved) {
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
resolved = true;
|
|
577
|
+
this.processes[clientIndex].off('message', handler);
|
|
578
|
+
reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
|
|
579
|
+
}, timeoutMs);
|
|
580
|
+
|
|
581
|
+
this.processes[clientIndex].on('message', handler);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
private waitForBenchResult(clientIndex: number, timeoutMs: number): Promise<BenchResultMessage> {
|
|
586
|
+
return new Promise((resolve, reject) => {
|
|
587
|
+
let resolved = false;
|
|
588
|
+
|
|
589
|
+
const handler = (msg: any) => {
|
|
590
|
+
if (resolved) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
if (msg.type === 'BENCH_RESULT') {
|
|
594
|
+
resolved = true;
|
|
595
|
+
clearTimeout(timeout);
|
|
596
|
+
this.processes[clientIndex].off('message', handler);
|
|
597
|
+
resolve(msg as BenchResultMessage);
|
|
598
|
+
} else if (msg.type === 'ERROR') {
|
|
599
|
+
resolved = true;
|
|
600
|
+
clearTimeout(timeout);
|
|
601
|
+
this.processes[clientIndex].off('message', handler);
|
|
602
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
603
|
+
}
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
const timeout = setTimeout(() => {
|
|
607
|
+
if (resolved) {
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
resolved = true;
|
|
611
|
+
this.processes[clientIndex].off('message', handler);
|
|
612
|
+
reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
|
|
613
|
+
}, timeoutMs);
|
|
614
|
+
|
|
615
|
+
this.processes[clientIndex].on('message', handler);
|
|
616
|
+
});
|
|
617
|
+
}
|
|
310
618
|
}
|
|
311
619
|
|
|
312
620
|
export { WorkerClientManager, testChainConfig };
|
|
621
|
+
export type { DistributionPattern } from './p2p_client_testbench_worker.js';
|
package/src/util.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { SecretValue } from '@aztec/foundation/config';
|
|
2
|
-
import type
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
4
|
-
import type { DataStoreConfig } from '@aztec/kv-store
|
|
4
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
5
5
|
|
|
6
6
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
7
7
|
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
8
8
|
import type { Identify } from '@libp2p/identify';
|
|
9
9
|
import type { PeerId, PrivateKey } from '@libp2p/interface';
|
|
10
|
-
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
10
|
+
import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
|
|
11
11
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
12
12
|
import { resolve } from 'dns/promises';
|
|
13
13
|
import { promises as fs } from 'fs';
|
|
@@ -15,7 +15,7 @@ import type { Libp2p } from 'libp2p';
|
|
|
15
15
|
import net from 'net';
|
|
16
16
|
import path from 'path';
|
|
17
17
|
|
|
18
|
-
import type
|
|
18
|
+
import { DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from './config.js';
|
|
19
19
|
|
|
20
20
|
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
21
21
|
|
|
@@ -23,8 +23,17 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
|
|
|
23
23
|
services: {
|
|
24
24
|
pubsub: Pick<
|
|
25
25
|
GossipSub,
|
|
26
|
-
|
|
26
|
+
| 'addEventListener'
|
|
27
|
+
| 'removeEventListener'
|
|
28
|
+
| 'publish'
|
|
29
|
+
| 'subscribe'
|
|
30
|
+
| 'reportMessageValidationResult'
|
|
31
|
+
| 'direct'
|
|
32
|
+
| 'getMeshPeers'
|
|
27
33
|
> & { score: Pick<GossipSub['score'], 'score'> };
|
|
34
|
+
components: {
|
|
35
|
+
addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
|
|
36
|
+
};
|
|
28
37
|
};
|
|
29
38
|
}
|
|
30
39
|
|
|
@@ -33,6 +42,7 @@ export type FullLibp2p = Libp2p<{
|
|
|
33
42
|
pubsub: GossipSub;
|
|
34
43
|
components: {
|
|
35
44
|
connectionManager: ConnectionManager;
|
|
45
|
+
addressManager: AddressManager;
|
|
36
46
|
};
|
|
37
47
|
}>;
|
|
38
48
|
|
|
@@ -54,16 +64,25 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
|
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
|
-
* Queries the public IP address of the machine.
|
|
67
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
68
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
58
69
|
*/
|
|
59
|
-
export async function getPublicIp(): Promise<string> {
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
export async function getPublicIp(services: string[] = DEFAULT_PUBLIC_IP_SERVICES): Promise<string> {
|
|
71
|
+
const errors: string[] = [];
|
|
72
|
+
for (const url of services) {
|
|
73
|
+
try {
|
|
74
|
+
const resp = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
75
|
+
const text = await resp.text();
|
|
76
|
+
const address = text.trim();
|
|
77
|
+
if (isValidIpAddress(address)) {
|
|
78
|
+
return address;
|
|
79
|
+
}
|
|
80
|
+
errors.push(`${url}: invalid IP "${address}"`);
|
|
81
|
+
} catch (err: any) {
|
|
82
|
+
errors.push(`${url}: ${err.message ?? err}`);
|
|
83
|
+
}
|
|
65
84
|
}
|
|
66
|
-
|
|
85
|
+
throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
|
|
67
86
|
}
|
|
68
87
|
|
|
69
88
|
export function isValidIpAddress(address: string): boolean {
|
|
@@ -101,18 +120,20 @@ export async function configureP2PClientAddresses(
|
|
|
101
120
|
): Promise<P2PConfig & DataStoreConfig> {
|
|
102
121
|
const config = { ..._config };
|
|
103
122
|
const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
|
|
123
|
+
const logger = createLogger('p2p:config');
|
|
104
124
|
|
|
105
125
|
// If no broadcast port is provided, use the given p2p port as the broadcast port
|
|
106
126
|
if (!p2pBroadcastPort) {
|
|
107
127
|
config.p2pBroadcastPort = p2pPort;
|
|
108
128
|
}
|
|
109
129
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
130
|
+
// Resolve the initial public IP so the ENR and announce address are set at startup.
|
|
131
|
+
// If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
|
|
132
|
+
if (!p2pIp && queryForIp) {
|
|
133
|
+
config.p2pIp = await getPublicIp(config.publicIpServices);
|
|
134
|
+
logger.info('Resolved initial public IP for P2P', { ip: config.p2pIp, queryForIp });
|
|
135
|
+
} else if (p2pIp) {
|
|
136
|
+
logger.info('Using configured static P2P IP', { ip: p2pIp, queryForIp });
|
|
116
137
|
}
|
|
117
138
|
// TODO(md): guard against setting a local ip address as the announce ip
|
|
118
139
|
|