@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.c2595eba
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +8 -8
- package/dest/client/index.d.ts +1 -1
- package/dest/client/interface.d.ts +18 -3
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +16 -37
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +464 -126
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +69 -60
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +23 -14
- package/dest/enr/generate-enr.d.ts +1 -1
- package/dest/enr/index.d.ts +1 -1
- 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/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- 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 +241 -266
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
- package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +17 -13
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +9 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +37 -10
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -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 +76 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +22 -12
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -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 +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +6 -4
- 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 +5 -3
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.d.ts +1 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +18 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +42 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -6
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +1 -1
- 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 +36 -71
- package/dest/services/libp2p/libp2p_service.d.ts +48 -81
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +926 -193
- package/dest/services/peer-manager/interface.d.ts +1 -1
- 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 -16
- package/dest/services/peer-manager/peer_manager.d.ts +2 -33
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +6 -12
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +43 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -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 +566 -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 +37 -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 +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -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 +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/config.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
- 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/index.d.ts +1 -1
- package/dest/services/reqresp/interface.d.ts +4 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +1 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/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.d.ts +1 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- 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 +14 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +17 -7
- 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 +34 -4
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/ping.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +6 -5
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +7 -3
- package/dest/services/reqresp/protocols/tx.d.ts +2 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts +6 -41
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +460 -46
- package/dest/services/reqresp/status.d.ts +2 -2
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/service.d.ts +19 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +10 -2
- package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- 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 +10 -13
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +2 -1
- package/dest/services/tx_collection/tx_collection.d.ts +10 -10
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.d.ts +1 -1
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_provider.d.ts +4 -2
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +11 -2
- 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/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- 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-enrs.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +4 -4
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
- package/dest/test-helpers/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +218 -120
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -39
- package/dest/types/index.d.ts +1 -1
- package/dest/util.d.ts +2 -1
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +11 -2
- package/dest/versioning.d.ts +1 -1
- package/package.json +19 -18
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +11 -20
- package/src/client/interface.ts +20 -2
- package/src/client/p2p_client.ts +108 -155
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +36 -20
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +48 -10
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
- package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +67 -25
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
- package/src/msg_validators/tx_validator/phases_validator.ts +8 -4
- 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 +11 -5
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +51 -0
- package/src/services/encoding.ts +6 -5
- package/src/services/libp2p/instrumentation.ts +39 -71
- package/src/services/libp2p/libp2p_service.ts +628 -194
- package/src/services/peer-manager/metrics.ts +44 -16
- package/src/services/peer-manager/peer_manager.ts +7 -4
- package/src/services/peer-manager/peer_scoring.ts +45 -3
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +4 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -5
- package/src/services/reqresp/protocols/status.ts +16 -12
- package/src/services/reqresp/protocols/tx.ts +1 -2
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +23 -4
- package/src/services/tx_collection/config.ts +16 -2
- package/src/services/tx_collection/fast_tx_collection.ts +39 -15
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +5 -13
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +5 -4
- package/src/services/tx_collection/tx_collection.ts +10 -9
- package/src/services/tx_provider.ts +19 -3
- package/src/services/tx_provider_instrumentation.ts +24 -14
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/mock-pubsub.ts +1 -1
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +338 -116
- package/src/testbench/worker_client_manager.ts +304 -42
- package/src/util.ts +12 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
- 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 -238
- 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 -70
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -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,9 +12,19 @@ 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 {
|
|
17
|
+
BenchReqRespCommand,
|
|
18
|
+
BenchResultMessage,
|
|
19
|
+
CollectorType,
|
|
20
|
+
DistributionPattern,
|
|
21
|
+
} from './p2p_client_testbench_worker.js';
|
|
15
22
|
|
|
16
23
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
const
|
|
24
|
+
const p2pRoot = path.resolve(__dirname, '../..');
|
|
25
|
+
const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
|
|
26
|
+
const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
|
|
27
|
+
const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
18
28
|
|
|
19
29
|
const testChainConfig: ChainConfig = {
|
|
20
30
|
l1ChainId: 31337,
|
|
@@ -24,11 +34,32 @@ const testChainConfig: ChainConfig = {
|
|
|
24
34
|
},
|
|
25
35
|
};
|
|
26
36
|
|
|
37
|
+
export interface ReqRespBenchmarkConfig {
|
|
38
|
+
txCount: number;
|
|
39
|
+
distribution: DistributionPattern;
|
|
40
|
+
collectorType: CollectorType;
|
|
41
|
+
timeoutMs: number;
|
|
42
|
+
pinnedPeerIndex?: number;
|
|
43
|
+
blockNumber?: number;
|
|
44
|
+
seed?: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface ReqRespBenchmarkResult {
|
|
48
|
+
txCount: number;
|
|
49
|
+
distribution: DistributionPattern;
|
|
50
|
+
collector: CollectorType;
|
|
51
|
+
durationMs: number;
|
|
52
|
+
fetchedCount: number;
|
|
53
|
+
success: boolean;
|
|
54
|
+
error?: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
27
57
|
class WorkerClientManager {
|
|
28
58
|
public processes: ChildProcess[] = [];
|
|
29
59
|
public peerIdPrivateKeys: string[] = [];
|
|
30
60
|
public peerEnrs: string[] = [];
|
|
31
61
|
public ports: number[] = [];
|
|
62
|
+
public peerIds: string[] = [];
|
|
32
63
|
private p2pConfig: Partial<P2PConfig>;
|
|
33
64
|
private logger: Logger;
|
|
34
65
|
private messageReceivedByClient: number[] = [];
|
|
@@ -46,33 +77,54 @@ class WorkerClientManager {
|
|
|
46
77
|
}
|
|
47
78
|
|
|
48
79
|
/**
|
|
49
|
-
* Creates a client configuration object
|
|
80
|
+
* Creates a client configuration object for IPC.
|
|
81
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
82
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
83
|
+
* The worker must re-wrap it in SecretValue.
|
|
50
84
|
*/
|
|
51
85
|
private createClientConfig(
|
|
52
86
|
clientIndex: number,
|
|
53
87
|
port: number,
|
|
54
88
|
otherNodes: string[],
|
|
55
|
-
): P2PConfig & Partial<ChainConfig> {
|
|
89
|
+
): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
|
|
56
90
|
return {
|
|
57
91
|
...getP2PDefaultConfig(),
|
|
58
92
|
p2pEnabled: true,
|
|
59
|
-
peerIdPrivateKey:
|
|
93
|
+
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
60
94
|
listenAddress: '127.0.0.1',
|
|
61
95
|
p2pIp: '127.0.0.1',
|
|
62
96
|
p2pPort: port,
|
|
63
97
|
bootstrapNodes: [...otherNodes],
|
|
64
98
|
...this.p2pConfig,
|
|
65
|
-
}
|
|
99
|
+
} as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
|
|
66
100
|
}
|
|
67
101
|
|
|
68
102
|
/**
|
|
69
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
103
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
104
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
70
105
|
*/
|
|
71
106
|
private spawnWorkerProcess(
|
|
72
|
-
config: P2PConfig & Partial<ChainConfig>,
|
|
107
|
+
config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
|
|
73
108
|
clientIndex: number,
|
|
74
109
|
): [ChildProcess, Promise<void>] {
|
|
75
|
-
const
|
|
110
|
+
const useCompiled = existsSync(workerJsPath);
|
|
111
|
+
const workerPath = useCompiled ? workerJsPath : workerTsPath;
|
|
112
|
+
|
|
113
|
+
const execArgv = [...process.execArgv];
|
|
114
|
+
if (!useCompiled && !execArgv.includes('ts-node/esm')) {
|
|
115
|
+
execArgv.push('--loader', 'ts-node/esm');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const env = {
|
|
119
|
+
...process.env,
|
|
120
|
+
TS_NODE_PROJECT: tsconfigPath,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const childProcess = fork(workerPath, {
|
|
124
|
+
cwd: p2pRoot,
|
|
125
|
+
execArgv,
|
|
126
|
+
env,
|
|
127
|
+
});
|
|
76
128
|
childProcess.send({ type: 'START', config, clientIndex });
|
|
77
129
|
|
|
78
130
|
// Handle unexpected child process exit
|
|
@@ -90,74 +142,131 @@ class WorkerClientManager {
|
|
|
90
142
|
|
|
91
143
|
// Create ready signal promise
|
|
92
144
|
const readySignal = new Promise<void>((resolve, reject) => {
|
|
93
|
-
|
|
145
|
+
let resolved = false;
|
|
146
|
+
|
|
94
147
|
const timeout = setTimeout(() => {
|
|
148
|
+
if (resolved) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
resolved = true;
|
|
152
|
+
childProcess.off('message', messageHandler);
|
|
153
|
+
childProcess.off('exit', exitHandler);
|
|
95
154
|
reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
|
|
96
|
-
},
|
|
155
|
+
}, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
|
|
97
156
|
|
|
98
|
-
|
|
99
|
-
|
|
157
|
+
const messageHandler = (msg: any) => {
|
|
158
|
+
if (resolved) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
|
|
100
162
|
if (msg.type === 'READY') {
|
|
163
|
+
resolved = true;
|
|
164
|
+
clearTimeout(timeout);
|
|
165
|
+
childProcess.off('message', messageHandler);
|
|
166
|
+
childProcess.off('exit', exitHandler);
|
|
167
|
+
if (typeof msg.peerId === 'string') {
|
|
168
|
+
this.peerIds[clientIndex] = msg.peerId;
|
|
169
|
+
}
|
|
101
170
|
resolve();
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
171
|
+
} else if (msg.type === 'ERROR') {
|
|
172
|
+
resolved = true;
|
|
173
|
+
clearTimeout(timeout);
|
|
174
|
+
childProcess.off('message', messageHandler);
|
|
175
|
+
childProcess.off('exit', exitHandler);
|
|
105
176
|
reject(new Error(msg.error));
|
|
106
177
|
}
|
|
107
|
-
|
|
178
|
+
// Ignore other message types and keep waiting for READY/ERROR
|
|
179
|
+
};
|
|
108
180
|
|
|
109
|
-
|
|
110
|
-
|
|
181
|
+
const exitHandler = (code: number | null) => {
|
|
182
|
+
if (resolved) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
resolved = true;
|
|
111
186
|
clearTimeout(timeout);
|
|
187
|
+
childProcess.off('message', messageHandler);
|
|
112
188
|
if (code === 0) {
|
|
113
189
|
resolve();
|
|
114
190
|
} else {
|
|
115
191
|
reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
|
|
116
192
|
}
|
|
117
|
-
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
childProcess.on('message', messageHandler);
|
|
196
|
+
childProcess.once('exit', exitHandler);
|
|
118
197
|
});
|
|
119
198
|
|
|
120
199
|
return [childProcess, readySignal];
|
|
121
200
|
}
|
|
122
201
|
|
|
123
202
|
/**
|
|
124
|
-
* Creates a number of worker clients in separate processes
|
|
125
|
-
* All are configured to connect to each other and
|
|
203
|
+
* Creates a number of worker clients in separate processes.
|
|
204
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
126
205
|
*
|
|
127
206
|
* @param numberOfClients - The number of clients to create
|
|
207
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
128
208
|
* @returns The ENRs of the created clients
|
|
129
209
|
*/
|
|
130
|
-
async makeWorkerClients(
|
|
210
|
+
async makeWorkerClients(
|
|
211
|
+
numberOfClients: number,
|
|
212
|
+
options: {
|
|
213
|
+
bootstrapMode?: 'subset' | 'all';
|
|
214
|
+
seedPeerLimit?: number;
|
|
215
|
+
batchSize?: number;
|
|
216
|
+
batchDelayMs?: number;
|
|
217
|
+
} = {},
|
|
218
|
+
) {
|
|
131
219
|
try {
|
|
220
|
+
const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
|
|
221
|
+
const seedPeerLimit = options.seedPeerLimit ?? 10;
|
|
222
|
+
const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
|
|
223
|
+
const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
|
|
224
|
+
|
|
132
225
|
this.messageReceivedByClient = new Array(numberOfClients).fill(0);
|
|
133
226
|
this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
|
|
134
227
|
this.ports = await getPorts(numberOfClients);
|
|
135
228
|
this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
|
|
229
|
+
this.peerIds = new Array(numberOfClients);
|
|
136
230
|
|
|
137
231
|
this.processes = [];
|
|
138
232
|
const readySignals: Promise<void>[] = [];
|
|
139
233
|
|
|
140
|
-
for (let
|
|
141
|
-
|
|
234
|
+
for (let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize) {
|
|
235
|
+
const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
|
|
236
|
+
const batchPromises: Promise<void>[] = [];
|
|
142
237
|
|
|
143
|
-
|
|
144
|
-
|
|
238
|
+
for (let i = batchStart; i < batchEnd; i++) {
|
|
239
|
+
this.logger.info(`Creating client ${i}`);
|
|
240
|
+
|
|
241
|
+
const otherNodes =
|
|
242
|
+
bootstrapMode === 'all'
|
|
243
|
+
? this.peerEnrs.filter((_, ind) => ind !== i)
|
|
244
|
+
: this.peerEnrs.filter((_, ind) => ind < Math.min(i, seedPeerLimit));
|
|
245
|
+
|
|
246
|
+
const config = this.createClientConfig(i, this.ports[i], otherNodes);
|
|
247
|
+
const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
|
|
248
|
+
|
|
249
|
+
readySignals.push(readySignal);
|
|
250
|
+
batchPromises.push(readySignal);
|
|
251
|
+
this.processes.push(childProcess);
|
|
252
|
+
}
|
|
145
253
|
|
|
146
|
-
|
|
147
|
-
const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
|
|
254
|
+
await Promise.all(batchPromises);
|
|
148
255
|
|
|
149
|
-
|
|
150
|
-
|
|
256
|
+
if (batchEnd < numberOfClients && batchDelayMs > 0) {
|
|
257
|
+
await sleep(batchDelayMs);
|
|
258
|
+
}
|
|
151
259
|
}
|
|
152
260
|
|
|
153
|
-
|
|
154
|
-
await sleep(10000);
|
|
261
|
+
await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
|
|
155
262
|
|
|
156
|
-
// Wait for all peers to be booted up with timeout
|
|
157
263
|
await Promise.race([
|
|
158
264
|
Promise.all(readySignals),
|
|
159
265
|
new Promise((_, reject) =>
|
|
160
|
-
setTimeout(
|
|
266
|
+
setTimeout(
|
|
267
|
+
() => reject(new Error('Timeout waiting for all workers to be ready')),
|
|
268
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
269
|
+
),
|
|
161
270
|
),
|
|
162
271
|
]);
|
|
163
272
|
|
|
@@ -215,11 +324,13 @@ class WorkerClientManager {
|
|
|
215
324
|
|
|
216
325
|
this.processes[clientIndex] = childProcess;
|
|
217
326
|
|
|
218
|
-
// Wait for the process to be ready with a timeout
|
|
219
327
|
await Promise.race([
|
|
220
328
|
readySignal,
|
|
221
329
|
new Promise((_, reject) =>
|
|
222
|
-
setTimeout(
|
|
330
|
+
setTimeout(
|
|
331
|
+
() => reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)),
|
|
332
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
333
|
+
),
|
|
223
334
|
),
|
|
224
335
|
]);
|
|
225
336
|
} catch (error) {
|
|
@@ -239,15 +350,14 @@ class WorkerClientManager {
|
|
|
239
350
|
}
|
|
240
351
|
|
|
241
352
|
return new Promise<void>(resolve => {
|
|
242
|
-
// Set a timeout for the graceful exit
|
|
243
353
|
const forceKillTimeout = setTimeout(() => {
|
|
244
354
|
this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
|
|
245
355
|
try {
|
|
246
|
-
process.kill('SIGKILL');
|
|
356
|
+
process.kill('SIGKILL');
|
|
247
357
|
} catch (e) {
|
|
248
358
|
this.logger.error(`Error force killing process ${index}:`, e);
|
|
249
359
|
}
|
|
250
|
-
},
|
|
360
|
+
}, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
|
|
251
361
|
|
|
252
362
|
// Listen for process exit
|
|
253
363
|
process.once('exit', () => {
|
|
@@ -280,7 +390,6 @@ class WorkerClientManager {
|
|
|
280
390
|
// Create array of promises for each process termination
|
|
281
391
|
const terminationPromises = this.processes.map((process, index) => this.terminateProcess(process, index));
|
|
282
392
|
|
|
283
|
-
// Wait for all processes to terminate with a timeout
|
|
284
393
|
try {
|
|
285
394
|
await Promise.race([
|
|
286
395
|
Promise.all(terminationPromises),
|
|
@@ -297,7 +406,7 @@ class WorkerClientManager {
|
|
|
297
406
|
}
|
|
298
407
|
});
|
|
299
408
|
resolve();
|
|
300
|
-
},
|
|
409
|
+
}, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
|
|
301
410
|
}),
|
|
302
411
|
]);
|
|
303
412
|
} catch (error) {
|
|
@@ -305,8 +414,161 @@ class WorkerClientManager {
|
|
|
305
414
|
}
|
|
306
415
|
|
|
307
416
|
this.processes = [];
|
|
417
|
+
this.peerIds = [];
|
|
308
418
|
this.logger.info('All worker processes cleaned up');
|
|
309
419
|
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Run a req/resp benchmark across all worker clients.
|
|
423
|
+
*
|
|
424
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
425
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
426
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
427
|
+
*
|
|
428
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
429
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
430
|
+
*/
|
|
431
|
+
async runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult> {
|
|
432
|
+
const peerCount = this.processes.length;
|
|
433
|
+
if (peerCount < 2) {
|
|
434
|
+
throw new Error('Need at least 2 peers to run req/resp benchmark');
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const seed = config.seed ?? Date.now();
|
|
438
|
+
const blockNumber = config.blockNumber ?? 1;
|
|
439
|
+
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
440
|
+
|
|
441
|
+
this.logger.info(
|
|
442
|
+
`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
|
|
443
|
+
);
|
|
444
|
+
|
|
445
|
+
const readyPromises: Promise<void>[] = [];
|
|
446
|
+
|
|
447
|
+
for (let i = 1; i < peerCount; i++) {
|
|
448
|
+
const cmd: BenchReqRespCommand = {
|
|
449
|
+
type: 'BENCH_REQRESP',
|
|
450
|
+
txCount: config.txCount,
|
|
451
|
+
peerCount,
|
|
452
|
+
distribution: config.distribution,
|
|
453
|
+
collectorType: config.collectorType,
|
|
454
|
+
timeoutMs: config.timeoutMs,
|
|
455
|
+
isAggregator: false,
|
|
456
|
+
peerIndex: i,
|
|
457
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
458
|
+
pinnedPeerId,
|
|
459
|
+
blockNumber,
|
|
460
|
+
seed,
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
this.processes[i].send(cmd);
|
|
464
|
+
readyPromises.push(this.waitForBenchReady(i, 30000));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
await Promise.all(readyPromises);
|
|
468
|
+
this.logger.info('All responder peers ready, starting aggregator benchmark...');
|
|
469
|
+
|
|
470
|
+
const aggregatorCmd: BenchReqRespCommand = {
|
|
471
|
+
type: 'BENCH_REQRESP',
|
|
472
|
+
txCount: config.txCount,
|
|
473
|
+
peerCount,
|
|
474
|
+
distribution: config.distribution,
|
|
475
|
+
collectorType: config.collectorType,
|
|
476
|
+
timeoutMs: config.timeoutMs,
|
|
477
|
+
isAggregator: true,
|
|
478
|
+
peerIndex: 0,
|
|
479
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
480
|
+
pinnedPeerId,
|
|
481
|
+
blockNumber,
|
|
482
|
+
seed,
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
this.processes[0].send(aggregatorCmd);
|
|
486
|
+
const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
|
|
487
|
+
|
|
488
|
+
this.logger.info(
|
|
489
|
+
`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
|
|
490
|
+
);
|
|
491
|
+
|
|
492
|
+
return {
|
|
493
|
+
txCount: config.txCount,
|
|
494
|
+
distribution: config.distribution,
|
|
495
|
+
collector: config.collectorType,
|
|
496
|
+
durationMs: result.durationMs,
|
|
497
|
+
fetchedCount: result.fetchedCount,
|
|
498
|
+
success: result.success,
|
|
499
|
+
error: result.error,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
private waitForBenchReady(clientIndex: number, timeoutMs: number): Promise<void> {
|
|
504
|
+
return new Promise((resolve, reject) => {
|
|
505
|
+
let resolved = false;
|
|
506
|
+
|
|
507
|
+
const handler = (msg: any) => {
|
|
508
|
+
if (resolved) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
if (msg.type === 'BENCH_READY') {
|
|
512
|
+
resolved = true;
|
|
513
|
+
clearTimeout(timeout);
|
|
514
|
+
this.processes[clientIndex].off('message', handler);
|
|
515
|
+
resolve();
|
|
516
|
+
} else if (msg.type === 'ERROR') {
|
|
517
|
+
resolved = true;
|
|
518
|
+
clearTimeout(timeout);
|
|
519
|
+
this.processes[clientIndex].off('message', handler);
|
|
520
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
521
|
+
}
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
const timeout = setTimeout(() => {
|
|
525
|
+
if (resolved) {
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
resolved = true;
|
|
529
|
+
this.processes[clientIndex].off('message', handler);
|
|
530
|
+
reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
|
|
531
|
+
}, timeoutMs);
|
|
532
|
+
|
|
533
|
+
this.processes[clientIndex].on('message', handler);
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
private waitForBenchResult(clientIndex: number, timeoutMs: number): Promise<BenchResultMessage> {
|
|
538
|
+
return new Promise((resolve, reject) => {
|
|
539
|
+
let resolved = false;
|
|
540
|
+
|
|
541
|
+
const handler = (msg: any) => {
|
|
542
|
+
if (resolved) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
if (msg.type === 'BENCH_RESULT') {
|
|
546
|
+
resolved = true;
|
|
547
|
+
clearTimeout(timeout);
|
|
548
|
+
this.processes[clientIndex].off('message', handler);
|
|
549
|
+
resolve(msg as BenchResultMessage);
|
|
550
|
+
} else if (msg.type === 'ERROR') {
|
|
551
|
+
resolved = true;
|
|
552
|
+
clearTimeout(timeout);
|
|
553
|
+
this.processes[clientIndex].off('message', handler);
|
|
554
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
555
|
+
}
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
const timeout = setTimeout(() => {
|
|
559
|
+
if (resolved) {
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
resolved = true;
|
|
563
|
+
this.processes[clientIndex].off('message', handler);
|
|
564
|
+
reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
|
|
565
|
+
}, timeoutMs);
|
|
566
|
+
|
|
567
|
+
this.processes[clientIndex].on('message', handler);
|
|
568
|
+
});
|
|
569
|
+
}
|
|
310
570
|
}
|
|
311
571
|
|
|
312
572
|
export { WorkerClientManager, testChainConfig };
|
|
573
|
+
export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
|
|
574
|
+
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
package/src/util.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
|
12
12
|
import { resolve } from 'dns/promises';
|
|
13
13
|
import { promises as fs } from 'fs';
|
|
14
14
|
import type { Libp2p } from 'libp2p';
|
|
15
|
+
import net from 'net';
|
|
15
16
|
import path from 'path';
|
|
16
17
|
|
|
17
18
|
import type { P2PConfig } from './config.js';
|
|
@@ -56,9 +57,18 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
|
|
|
56
57
|
* Queries the public IP address of the machine.
|
|
57
58
|
*/
|
|
58
59
|
export async function getPublicIp(): Promise<string> {
|
|
59
|
-
const resp = await fetch('
|
|
60
|
+
const resp = await fetch('https://checkip.amazonaws.com/');
|
|
60
61
|
const text = await resp.text();
|
|
61
|
-
|
|
62
|
+
const address = text.trim();
|
|
63
|
+
if (!isValidIpAddress(address)) {
|
|
64
|
+
throw new Error(`Received invalid IP address from checkip service: ${address}`);
|
|
65
|
+
}
|
|
66
|
+
return address;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function isValidIpAddress(address: string): boolean {
|
|
70
|
+
const netType = net.isIP(address);
|
|
71
|
+
return netType === 4;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
export async function resolveAddressIfNecessary(address: string, port: string): Promise<string> {
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
2
|
-
import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
3
|
-
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
-
import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
|
|
5
|
-
declare const InMemoryTxPool_base: new () => TypedEventEmitter<TxPoolEvents>;
|
|
6
|
-
/**
|
|
7
|
-
* In-memory implementation of the Transaction Pool.
|
|
8
|
-
*/
|
|
9
|
-
export declare class InMemoryTxPool extends InMemoryTxPool_base implements TxPool {
|
|
10
|
-
private log;
|
|
11
|
-
/**
|
|
12
|
-
* Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
|
|
13
|
-
*/
|
|
14
|
-
private txs;
|
|
15
|
-
private minedTxs;
|
|
16
|
-
private pendingTxs;
|
|
17
|
-
private deletedMinedTxHashes;
|
|
18
|
-
private blockToDeletedMinedTxHash;
|
|
19
|
-
private metrics;
|
|
20
|
-
/**
|
|
21
|
-
* Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
|
|
22
|
-
* @param log - A logger.
|
|
23
|
-
*/
|
|
24
|
-
constructor(telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
25
|
-
private countTx;
|
|
26
|
-
isEmpty(): Promise<boolean>;
|
|
27
|
-
markAsMined(txHashes: TxHash[], blockHeader: BlockHeader): Promise<void>;
|
|
28
|
-
markMinedAsPending(txHashes: TxHash[]): Promise<void>;
|
|
29
|
-
getPendingTxHashes(): Promise<TxHash[]>;
|
|
30
|
-
getMinedTxHashes(): Promise<[TxHash, number][]>;
|
|
31
|
-
getPendingTxCount(): Promise<number>;
|
|
32
|
-
getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
|
|
33
|
-
/**
|
|
34
|
-
* Checks if a transaction exists in the pool and returns it.
|
|
35
|
-
* @param txHash - The generated tx hash.
|
|
36
|
-
* @returns The transaction, if found, 'undefined' otherwise.
|
|
37
|
-
*/
|
|
38
|
-
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
39
|
-
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
40
|
-
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
41
|
-
hasTx(txHash: TxHash): Promise<boolean>;
|
|
42
|
-
getArchivedTxByHash(): Promise<Tx | undefined>;
|
|
43
|
-
/**
|
|
44
|
-
* Adds a list of transactions to the pool. Duplicates are ignored.
|
|
45
|
-
* @param txs - An array of txs to be added to the pool.
|
|
46
|
-
* @returns Empty promise.
|
|
47
|
-
*/
|
|
48
|
-
addTxs(txs: Tx[], opts?: {
|
|
49
|
-
source?: string;
|
|
50
|
-
}): Promise<number>;
|
|
51
|
-
/**
|
|
52
|
-
* Deletes transactions from the pool. Tx hashes that are not present are ignored.
|
|
53
|
-
* Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
|
|
54
|
-
* @param txHashes - An array of tx hashes to be deleted from the tx pool.
|
|
55
|
-
* @returns Empty promise.
|
|
56
|
-
*/
|
|
57
|
-
deleteTxs(txHashes: TxHash[], opts?: {
|
|
58
|
-
permanently?: boolean;
|
|
59
|
-
}): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Gets all the transactions stored in the pool.
|
|
62
|
-
* @returns Array of tx objects in the order they were added to the pool.
|
|
63
|
-
*/
|
|
64
|
-
getAllTxs(): Promise<Tx[]>;
|
|
65
|
-
/**
|
|
66
|
-
* Gets the hashes of all transactions currently in the tx pool.
|
|
67
|
-
* @returns An array of transaction hashes found in the tx pool.
|
|
68
|
-
*/
|
|
69
|
-
getAllTxHashes(): Promise<TxHash[]>;
|
|
70
|
-
updateConfig(_config: TxPoolOptions): void;
|
|
71
|
-
markTxsAsNonEvictable(_: TxHash[]): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
|
|
74
|
-
* @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
|
|
75
|
-
* @returns The number of transactions permanently deleted.
|
|
76
|
-
*/
|
|
77
|
-
cleanupDeletedMinedTxs(blockNumber: number): Promise<number>;
|
|
78
|
-
}
|
|
79
|
-
export {};
|
|
80
|
-
//# sourceMappingURL=memory_tx_pool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;mCAKnB,UAAU,iBAAiB,CAAC,YAAY,CAAC;AAH9F;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAA4D,YAAW,MAAM;IAkB7G,OAAO,CAAC,GAAG;IAjBb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,yBAAyB,CAA2B;IAE5D,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBAED,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B;IAW3C,OAAO,CAAC,OAAO,CAOb;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa7C,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAM/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAexF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAG7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIxC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,mBAAmB,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAIrD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BzE;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrF;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIjC;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE1C,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;OAIG;IACI,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BpE"}
|