@aztec/p2p 0.0.1-commit.7b97ef96e → 0.0.1-commit.7cbc774
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 +129 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +7 -7
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +39 -32
- package/dest/client/interface.d.ts +19 -17
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +16 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +94 -105
- package/dest/config.d.ts +154 -106
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +134 -40
- 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 +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
- 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 +181 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +33 -15
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -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 +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +10 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +18 -9
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +51 -11
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +90 -19
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +5 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +256 -220
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +61 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
- 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.js +1 -1
- 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 +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +252 -61
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
- package/dest/msg_validators/tx_validator/index.d.ts +5 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +4 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- 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 +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- 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 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -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 +5 -5
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +12 -17
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +13 -20
- package/dest/services/encoding.d.ts +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +14 -8
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- 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 +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +47 -55
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +344 -308
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +40 -11
- 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 +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +97 -107
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- 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 +4 -2
- 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/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -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 +0 -10
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +43 -215
- package/dest/services/service.d.ts +10 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- 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 +0 -2
- 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 +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +5 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +7 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
- 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 +24 -11
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +45 -45
- 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 +17 -19
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +13 -15
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +42 -15
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +88 -42
- package/dest/testbench/worker_client_manager.d.ts +12 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +57 -11
- package/dest/util.d.ts +12 -7
- 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 +15 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +74 -49
- package/src/client/interface.ts +20 -30
- package/src/client/p2p_client.ts +108 -156
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +227 -45
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +22 -14
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -2
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -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 +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +10 -6
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +19 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +130 -23
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +17 -2
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +267 -229
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
- package/src/msg_validators/clock_tolerance.ts +79 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +6 -15
- 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 +1 -1
- 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 +44 -1
- package/src/msg_validators/tx_validator/factory.ts +407 -80
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
- package/src/msg_validators/tx_validator/index.ts +4 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +15 -44
- package/src/services/encoding.ts +14 -7
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +390 -360
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +97 -119
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +48 -261
- package/src/services/service.ts +13 -29
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +7 -2
- package/src/test-helpers/make-test-p2p-clients.ts +4 -3
- package/src/test-helpers/mock-pubsub.ts +49 -66
- package/src/test-helpers/reqresp-nodes.ts +15 -28
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +54 -29
- package/src/testbench/p2p_client_testbench_worker.ts +91 -61
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +33 -18
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- 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 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- 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 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- 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 -151
- 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 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -346
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { CheckpointProposalHash } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
5
|
import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
|
|
5
6
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
6
|
-
import type {
|
|
7
|
-
BlockProposal,
|
|
8
|
-
CheckpointAttestation,
|
|
9
|
-
CheckpointProposal,
|
|
10
|
-
CheckpointProposalCore,
|
|
11
|
-
} from '@aztec/stdlib/p2p';
|
|
7
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore } from '@aztec/stdlib/p2p';
|
|
12
8
|
import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
13
9
|
|
|
14
10
|
import EventEmitter from 'events';
|
|
@@ -76,7 +72,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
76
72
|
return Promise.resolve({ accepted, ignored: [], rejected: [] });
|
|
77
73
|
}
|
|
78
74
|
|
|
79
|
-
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'
|
|
75
|
+
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
|
|
80
76
|
const key = tx.getTxHash().toString();
|
|
81
77
|
if (this.txsByHash.has(key)) {
|
|
82
78
|
return Promise.resolve('ignored');
|
|
@@ -214,6 +210,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
214
210
|
*/
|
|
215
211
|
export class InMemoryAttestationPool {
|
|
216
212
|
private proposals = new Map<string, BlockProposal>();
|
|
213
|
+
private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
|
|
217
214
|
|
|
218
215
|
tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
|
|
219
216
|
const id = blockProposal.archive.toString();
|
|
@@ -225,16 +222,29 @@ export class InMemoryAttestationPool {
|
|
|
225
222
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
226
223
|
}
|
|
227
224
|
|
|
228
|
-
|
|
225
|
+
getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
|
|
229
226
|
return Promise.resolve(this.proposals.get(id));
|
|
230
227
|
}
|
|
231
228
|
|
|
232
|
-
tryAddCheckpointProposal(
|
|
229
|
+
tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
|
|
230
|
+
const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
|
|
231
|
+
proposals.push(proposal);
|
|
232
|
+
this.checkpoints.set(proposal.slotNumber, proposals);
|
|
233
233
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
getCheckpointProposal(
|
|
237
|
-
return Promise.resolve(
|
|
236
|
+
getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
|
|
237
|
+
return Promise.resolve(this.checkpoints.get(slot)?.[0]);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
getProposalsForSlot(slot: SlotNumber): Promise<{
|
|
241
|
+
blockProposals: BlockProposal[];
|
|
242
|
+
checkpointProposals: CheckpointProposalCore[];
|
|
243
|
+
}> {
|
|
244
|
+
return Promise.resolve({
|
|
245
|
+
blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
|
|
246
|
+
checkpointProposals: this.checkpoints.get(slot) ?? [],
|
|
247
|
+
});
|
|
238
248
|
}
|
|
239
249
|
|
|
240
250
|
async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
|
|
@@ -247,7 +257,7 @@ export class InMemoryAttestationPool {
|
|
|
247
257
|
|
|
248
258
|
getCheckpointAttestationsForSlotAndProposal(
|
|
249
259
|
_slot: SlotNumber,
|
|
250
|
-
|
|
260
|
+
_proposalPayloadHash: CheckpointProposalHash,
|
|
251
261
|
): Promise<CheckpointAttestation[]> {
|
|
252
262
|
return Promise.resolve([]);
|
|
253
263
|
}
|
|
@@ -261,11 +271,12 @@ export class InMemoryAttestationPool {
|
|
|
261
271
|
}
|
|
262
272
|
|
|
263
273
|
isEmpty(): Promise<boolean> {
|
|
264
|
-
return Promise.resolve(this.proposals.size === 0);
|
|
274
|
+
return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
|
|
265
275
|
}
|
|
266
276
|
|
|
267
277
|
resetState(): void {
|
|
268
278
|
this.proposals.clear();
|
|
279
|
+
this.checkpoints.clear();
|
|
269
280
|
}
|
|
270
281
|
}
|
|
271
282
|
|
|
@@ -273,17 +284,42 @@ export class InMemoryAttestationPool {
|
|
|
273
284
|
* Creates a mock EpochCache for testing.
|
|
274
285
|
*/
|
|
275
286
|
export function createMockEpochCache(): EpochCacheInterface {
|
|
276
|
-
|
|
287
|
+
const cache: EpochCacheInterface = {
|
|
277
288
|
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
|
|
278
289
|
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
279
|
-
|
|
290
|
+
getSlotNow: () => SlotNumber.ZERO,
|
|
291
|
+
getTargetSlot: () => SlotNumber.ZERO,
|
|
292
|
+
getEpochNow: () => EpochNumber.ZERO,
|
|
293
|
+
getTargetEpoch: () => EpochNumber.ZERO,
|
|
294
|
+
getEpochAndSlotNow: () => ({
|
|
295
|
+
epoch: EpochNumber.ZERO,
|
|
296
|
+
slot: SlotNumber.ZERO,
|
|
297
|
+
ts: 0n,
|
|
298
|
+
nowMs: 0n,
|
|
299
|
+
}),
|
|
300
|
+
isProposerPipeliningEnabled: () => false,
|
|
301
|
+
pipeliningOffset: () => 0,
|
|
280
302
|
computeProposerIndex: () => 0n,
|
|
281
303
|
getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
304
|
+
getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
282
305
|
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
283
|
-
getEpochAndSlotInNextL1Slot: () => ({
|
|
306
|
+
getEpochAndSlotInNextL1Slot: () => ({
|
|
307
|
+
epoch: EpochNumber.ZERO,
|
|
308
|
+
slot: SlotNumber.ZERO,
|
|
309
|
+
ts: 0n,
|
|
310
|
+
nowSeconds: 0n,
|
|
311
|
+
}),
|
|
312
|
+
getTargetEpochAndSlotInNextL1Slot: () => ({
|
|
313
|
+
epoch: EpochNumber.ZERO,
|
|
314
|
+
slot: SlotNumber.ZERO,
|
|
315
|
+
ts: 0n,
|
|
316
|
+
nowSeconds: 0n,
|
|
317
|
+
}),
|
|
284
318
|
isInCommittee: () => Promise.resolve(false),
|
|
285
319
|
getRegisteredValidators: () => Promise.resolve([]),
|
|
286
320
|
filterInCommittee: () => Promise.resolve([]),
|
|
321
|
+
isEscapeHatchOpen: () => Promise.resolve(false),
|
|
322
|
+
isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
|
|
287
323
|
getL1Constants: () => ({
|
|
288
324
|
l1StartBlock: 0n,
|
|
289
325
|
l1GenesisTime: 0n,
|
|
@@ -292,8 +328,10 @@ export function createMockEpochCache(): EpochCacheInterface {
|
|
|
292
328
|
ethereumSlotDuration: 1,
|
|
293
329
|
proofSubmissionEpochs: 1,
|
|
294
330
|
targetCommitteeSize: 48,
|
|
331
|
+
rollupManaLimit: Number.MAX_SAFE_INTEGER,
|
|
295
332
|
}),
|
|
296
333
|
};
|
|
334
|
+
return cache;
|
|
297
335
|
}
|
|
298
336
|
|
|
299
337
|
/**
|
|
@@ -340,19 +378,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
|
|
|
340
378
|
*/
|
|
341
379
|
export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
|
|
342
380
|
|
|
343
|
-
/**
|
|
344
|
-
* Collector implementation types for benchmarking.
|
|
345
|
-
*/
|
|
346
|
-
export type CollectorType = 'batch-requester' | 'send-batch-request';
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Display names for collector types (for output/logging only).
|
|
350
|
-
*/
|
|
351
|
-
export const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string> = {
|
|
352
|
-
'batch-requester': 'batch-requester (new)',
|
|
353
|
-
'send-batch-request': 'send-batch-request (old)',
|
|
354
|
-
};
|
|
355
|
-
|
|
356
381
|
/**
|
|
357
382
|
* Benchmark timing constants.
|
|
358
383
|
*/
|
|
@@ -12,17 +12,18 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
12
12
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
13
13
|
import { sleep } from '@aztec/foundation/sleep';
|
|
14
14
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
15
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
16
15
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
17
16
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
18
17
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
19
18
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
20
19
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
20
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
21
21
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
22
|
-
import
|
|
22
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
23
|
+
import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
|
|
23
24
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
24
25
|
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
|
|
25
|
-
import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
26
|
+
import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
26
27
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
27
28
|
|
|
28
29
|
import type { Message, PeerId } from '@libp2p/interface';
|
|
@@ -33,18 +34,17 @@ import type { P2PClient } from '../client/index.js';
|
|
|
33
34
|
import type { P2PConfig } from '../config.js';
|
|
34
35
|
import { createP2PClient } from '../index.js';
|
|
35
36
|
import type { MemPools } from '../mem_pools/index.js';
|
|
36
|
-
import {
|
|
37
|
+
import { LibP2PService } from '../services/index.js';
|
|
37
38
|
import type { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
39
|
+
import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
|
|
38
40
|
import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
|
|
39
|
-
import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
|
|
40
41
|
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
41
42
|
import type { ReqResp } from '../services/reqresp/reqresp.js';
|
|
42
43
|
import type { PeerDiscoveryService } from '../services/service.js';
|
|
43
|
-
import {
|
|
44
|
+
import { RequestTracker } from '../services/tx_collection/request_tracker.js';
|
|
44
45
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
|
|
45
46
|
import {
|
|
46
47
|
BENCHMARK_CONSTANTS,
|
|
47
|
-
type CollectorType,
|
|
48
48
|
type DistributionPattern,
|
|
49
49
|
InMemoryAttestationPool,
|
|
50
50
|
InMemoryTxPool,
|
|
@@ -55,15 +55,13 @@ import {
|
|
|
55
55
|
} from '../test-helpers/index.js';
|
|
56
56
|
import type { PubSubLibp2p } from '../util.js';
|
|
57
57
|
|
|
58
|
-
export type { DistributionPattern
|
|
59
|
-
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
58
|
+
export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
|
|
60
59
|
|
|
61
60
|
export interface BenchReqRespCommand {
|
|
62
61
|
type: 'BENCH_REQRESP';
|
|
63
62
|
txCount: number;
|
|
64
63
|
peerCount: number;
|
|
65
64
|
distribution: DistributionPattern;
|
|
66
|
-
collectorType: CollectorType;
|
|
67
65
|
timeoutMs: number;
|
|
68
66
|
isAggregator: boolean;
|
|
69
67
|
peerIndex: number;
|
|
@@ -86,12 +84,11 @@ export interface BenchReadyMessage {
|
|
|
86
84
|
}
|
|
87
85
|
const txCache = new Map<number, Tx[]>();
|
|
88
86
|
|
|
89
|
-
class TestLibP2PService
|
|
87
|
+
class TestLibP2PService extends LibP2PService {
|
|
90
88
|
private disableTxValidation: boolean;
|
|
91
89
|
private gossipMessageCount = 0;
|
|
92
90
|
|
|
93
91
|
constructor(
|
|
94
|
-
clientType: T,
|
|
95
92
|
config: P2PConfig,
|
|
96
93
|
node: PubSubLibp2p,
|
|
97
94
|
peerDiscoveryService: PeerDiscoveryService,
|
|
@@ -107,7 +104,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
107
104
|
disableTxValidation = true,
|
|
108
105
|
) {
|
|
109
106
|
super(
|
|
110
|
-
clientType,
|
|
111
107
|
config,
|
|
112
108
|
node,
|
|
113
109
|
peerDiscoveryService,
|
|
@@ -118,6 +114,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
118
114
|
epochCache,
|
|
119
115
|
proofVerifier,
|
|
120
116
|
worldStateSynchronizer,
|
|
117
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
121
118
|
telemetry,
|
|
122
119
|
logger,
|
|
123
120
|
);
|
|
@@ -206,10 +203,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
|
|
|
206
203
|
rateLimiter.allow = () => RateLimitStatus.Allowed;
|
|
207
204
|
}
|
|
208
205
|
|
|
206
|
+
/** Resets peer scores to prevent cross-case contamination in benchmarks. */
|
|
207
|
+
function resetPeerScores(client: P2PClient): void {
|
|
208
|
+
const peerManager = (client as any).p2pService.peerManager;
|
|
209
|
+
const peerScoring = peerManager?.peerScoring;
|
|
210
|
+
if (peerScoring?.resetAllScores) {
|
|
211
|
+
peerScoring.resetAllScores();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Returns the number of connected peers for connectivity checks. */
|
|
216
|
+
function getConnectedPeerCount(client: P2PClient): number {
|
|
217
|
+
const p2pService = (client as any).p2pService;
|
|
218
|
+
const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
|
|
219
|
+
if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
|
|
220
|
+
return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
|
|
221
|
+
}
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
209
225
|
async function runAggregatorBenchmark(
|
|
210
226
|
client: P2PClient,
|
|
211
227
|
blockProposal: BlockProposal,
|
|
212
|
-
collectorType: CollectorType,
|
|
213
228
|
timeoutMs: number,
|
|
214
229
|
pinnedPeerId: string | undefined,
|
|
215
230
|
pinnedPeerIndex: number | undefined,
|
|
@@ -260,46 +275,22 @@ async function runAggregatorBenchmark(
|
|
|
260
275
|
}
|
|
261
276
|
}
|
|
262
277
|
|
|
263
|
-
const noopTxValidator:
|
|
264
|
-
|
|
265
|
-
validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
|
|
266
|
-
Promise.resolve(txs.map(() => ({ result: 'valid' }))),
|
|
278
|
+
const noopTxValidator: TxValidator = {
|
|
279
|
+
validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
|
|
267
280
|
};
|
|
268
281
|
|
|
269
282
|
timer = new Timer();
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
logger,
|
|
274
|
-
new DateProvider(),
|
|
275
|
-
noopTxValidator,
|
|
276
|
-
);
|
|
277
|
-
const fetchedTxs = await collector.collectTxs(
|
|
278
|
-
MissingTxsTracker.fromArray(txHashes),
|
|
279
|
-
blockProposal,
|
|
280
|
-
pinnedPeer,
|
|
281
|
-
timeoutMs,
|
|
282
|
-
);
|
|
283
|
-
const durationMs = timer.ms();
|
|
284
|
-
return {
|
|
285
|
-
type: 'BENCH_RESULT',
|
|
286
|
-
durationMs,
|
|
287
|
-
fetchedCount: fetchedTxs.length,
|
|
288
|
-
success: fetchedTxs.length === txHashes.length,
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
const collector = new SendBatchRequestCollector(
|
|
293
|
-
batchTxRequesterService,
|
|
294
|
-
BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
|
|
295
|
-
BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
|
|
296
|
-
);
|
|
297
|
-
const fetchedTxs = await collector.collectTxs(
|
|
298
|
-
MissingTxsTracker.fromArray(txHashes),
|
|
283
|
+
const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
|
|
284
|
+
const batchRequester = new BatchTxRequester(
|
|
285
|
+
tracker,
|
|
299
286
|
blockProposal,
|
|
300
287
|
pinnedPeer,
|
|
301
|
-
|
|
288
|
+
batchTxRequesterService,
|
|
289
|
+
logger,
|
|
290
|
+
new DateProvider(),
|
|
291
|
+
{ txValidator: noopTxValidator },
|
|
302
292
|
);
|
|
293
|
+
const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
|
|
303
294
|
const durationMs = timer.ms();
|
|
304
295
|
return {
|
|
305
296
|
type: 'BENCH_RESULT',
|
|
@@ -325,6 +316,37 @@ let workerConfig: P2PConfig | null = null;
|
|
|
325
316
|
let workerLogger: Logger | null = null;
|
|
326
317
|
let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
|
|
327
318
|
|
|
319
|
+
async function stopWorker() {
|
|
320
|
+
try {
|
|
321
|
+
if (workerClient) {
|
|
322
|
+
await workerClient.stop();
|
|
323
|
+
workerClient = null;
|
|
324
|
+
}
|
|
325
|
+
} catch (e) {
|
|
326
|
+
workerLogger?.error('Error stopping worker client', e);
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
if (kvStore?.close) {
|
|
330
|
+
await kvStore.close();
|
|
331
|
+
kvStore = null;
|
|
332
|
+
}
|
|
333
|
+
} catch (e) {
|
|
334
|
+
workerLogger?.error('Error closing kv store', e);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function gracefulExit(code: number = 0) {
|
|
339
|
+
try {
|
|
340
|
+
if (process.connected) {
|
|
341
|
+
process.disconnect();
|
|
342
|
+
}
|
|
343
|
+
} catch {
|
|
344
|
+
// IPC channel already closed
|
|
345
|
+
}
|
|
346
|
+
// Safety fallback if lingering handles prevent the event loop from draining
|
|
347
|
+
setTimeout(() => process.exit(code), 5000).unref();
|
|
348
|
+
}
|
|
349
|
+
|
|
328
350
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
329
351
|
process.on('message', async msg => {
|
|
330
352
|
const {
|
|
@@ -342,6 +364,7 @@ process.on('message', async msg => {
|
|
|
342
364
|
const config: P2PConfig = {
|
|
343
365
|
...rawConfig,
|
|
344
366
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
367
|
+
priceBumpPercentage: 10n,
|
|
345
368
|
} as P2PConfig;
|
|
346
369
|
|
|
347
370
|
workerConfig = config;
|
|
@@ -365,20 +388,20 @@ process.on('message', async msg => {
|
|
|
365
388
|
};
|
|
366
389
|
|
|
367
390
|
const client = await createP2PClient(
|
|
368
|
-
P2PClientType.Full,
|
|
369
391
|
config as P2PConfig & DataStoreConfig,
|
|
370
392
|
l2BlockSource,
|
|
371
393
|
proofVerifier as ClientProtocolCircuitVerifier,
|
|
372
394
|
worldState,
|
|
373
395
|
epochCache,
|
|
396
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
374
397
|
'test-p2p-bench-worker',
|
|
375
398
|
undefined,
|
|
376
399
|
telemetry as TelemetryClient,
|
|
377
400
|
deps,
|
|
401
|
+
await l2BlockSource.getInitialHeader().hash(),
|
|
378
402
|
);
|
|
379
403
|
|
|
380
404
|
const testService = new TestLibP2PService(
|
|
381
|
-
P2PClientType.Full,
|
|
382
405
|
config,
|
|
383
406
|
(client as any).p2pService.node,
|
|
384
407
|
(client as any).p2pService.peerDiscoveryService,
|
|
@@ -415,13 +438,8 @@ process.on('message', async msg => {
|
|
|
415
438
|
const cmd = msg as any;
|
|
416
439
|
switch (cmd.type) {
|
|
417
440
|
case 'STOP':
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
}
|
|
421
|
-
if (kvStore?.close) {
|
|
422
|
-
await kvStore.close();
|
|
423
|
-
}
|
|
424
|
-
process.exit(0);
|
|
441
|
+
await stopWorker();
|
|
442
|
+
gracefulExit(0);
|
|
425
443
|
break;
|
|
426
444
|
|
|
427
445
|
case 'SEND_TX':
|
|
@@ -431,6 +449,13 @@ process.on('message', async msg => {
|
|
|
431
449
|
}
|
|
432
450
|
break;
|
|
433
451
|
|
|
452
|
+
case 'GET_PEER_COUNT':
|
|
453
|
+
process.send!({
|
|
454
|
+
type: 'PEER_COUNT',
|
|
455
|
+
count: workerClient ? getConnectedPeerCount(workerClient) : 0,
|
|
456
|
+
});
|
|
457
|
+
break;
|
|
458
|
+
|
|
434
459
|
case 'BENCH_REQRESP': {
|
|
435
460
|
const benchCmd = cmd as BenchReqRespCommand;
|
|
436
461
|
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
@@ -447,6 +472,7 @@ process.on('message', async msg => {
|
|
|
447
472
|
// Reset state before each benchmark run to avoid cross-run contamination
|
|
448
473
|
workerTxPool.resetState();
|
|
449
474
|
workerAttestationPool.resetState();
|
|
475
|
+
resetPeerScores(workerClient);
|
|
450
476
|
|
|
451
477
|
installUnlimitedRateLimits(workerClient);
|
|
452
478
|
|
|
@@ -463,13 +489,12 @@ process.on('message', async msg => {
|
|
|
463
489
|
workerTxPool.clearTxs();
|
|
464
490
|
|
|
465
491
|
workerLogger.info(
|
|
466
|
-
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount},
|
|
492
|
+
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
|
|
467
493
|
);
|
|
468
494
|
|
|
469
495
|
const result = await runAggregatorBenchmark(
|
|
470
496
|
workerClient,
|
|
471
497
|
blockProposal,
|
|
472
|
-
benchCmd.collectorType,
|
|
473
498
|
benchCmd.timeoutMs,
|
|
474
499
|
benchCmd.pinnedPeerId,
|
|
475
500
|
benchCmd.pinnedPeerIndex,
|
|
@@ -498,7 +523,12 @@ process.on('message', async msg => {
|
|
|
498
523
|
}
|
|
499
524
|
}
|
|
500
525
|
} catch (err: any) {
|
|
501
|
-
|
|
502
|
-
|
|
526
|
+
try {
|
|
527
|
+
process.send!({ type: 'ERROR', error: err.message });
|
|
528
|
+
} catch {
|
|
529
|
+
// IPC channel may be closed
|
|
530
|
+
}
|
|
531
|
+
await stopWorker();
|
|
532
|
+
gracefulExit(1);
|
|
503
533
|
}
|
|
504
534
|
});
|
|
@@ -13,12 +13,7 @@ import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-priv
|
|
|
13
13
|
import { getPorts } from '../test-helpers/get-ports.js';
|
|
14
14
|
import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
|
|
15
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';
|
|
16
|
+
import type { BenchReqRespCommand, BenchResultMessage, DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
22
17
|
|
|
23
18
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
24
19
|
const p2pRoot = path.resolve(__dirname, '../..');
|
|
@@ -29,15 +24,12 @@ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
|
29
24
|
const testChainConfig: ChainConfig = {
|
|
30
25
|
l1ChainId: 31337,
|
|
31
26
|
rollupVersion: 1,
|
|
32
|
-
|
|
33
|
-
rollupAddress: EthAddress.random(),
|
|
34
|
-
},
|
|
27
|
+
rollupAddress: EthAddress.random(),
|
|
35
28
|
};
|
|
36
29
|
|
|
37
30
|
export interface ReqRespBenchmarkConfig {
|
|
38
31
|
txCount: number;
|
|
39
32
|
distribution: DistributionPattern;
|
|
40
|
-
collectorType: CollectorType;
|
|
41
33
|
timeoutMs: number;
|
|
42
34
|
pinnedPeerIndex?: number;
|
|
43
35
|
blockNumber?: number;
|
|
@@ -47,7 +39,6 @@ export interface ReqRespBenchmarkConfig {
|
|
|
47
39
|
export interface ReqRespBenchmarkResult {
|
|
48
40
|
txCount: number;
|
|
49
41
|
distribution: DistributionPattern;
|
|
50
|
-
collector: CollectorType;
|
|
51
42
|
durationMs: number;
|
|
52
43
|
fetchedCount: number;
|
|
53
44
|
success: boolean;
|
|
@@ -72,7 +63,6 @@ class WorkerClientManager {
|
|
|
72
63
|
destroy() {
|
|
73
64
|
this.cleanup().catch((error: Error) => {
|
|
74
65
|
this.logger.error('Failed to cleanup worker client manager', error);
|
|
75
|
-
process.exit(1);
|
|
76
66
|
});
|
|
77
67
|
}
|
|
78
68
|
|
|
@@ -81,13 +71,15 @@ class WorkerClientManager {
|
|
|
81
71
|
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
82
72
|
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
83
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).
|
|
84
76
|
*/
|
|
85
77
|
private createClientConfig(
|
|
86
78
|
clientIndex: number,
|
|
87
79
|
port: number,
|
|
88
80
|
otherNodes: string[],
|
|
89
|
-
): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
|
|
90
|
-
|
|
81
|
+
): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
|
|
82
|
+
const { priceBumpPercentage: _, ...config } = {
|
|
91
83
|
...getP2PDefaultConfig(),
|
|
92
84
|
p2pEnabled: true,
|
|
93
85
|
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
@@ -96,7 +88,10 @@ class WorkerClientManager {
|
|
|
96
88
|
p2pPort: port,
|
|
97
89
|
bootstrapNodes: [...otherNodes],
|
|
98
90
|
...this.p2pConfig,
|
|
99
|
-
}
|
|
91
|
+
};
|
|
92
|
+
return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
93
|
+
peerIdPrivateKey: string;
|
|
94
|
+
} & Partial<ChainConfig>;
|
|
100
95
|
}
|
|
101
96
|
|
|
102
97
|
/**
|
|
@@ -104,7 +99,9 @@ class WorkerClientManager {
|
|
|
104
99
|
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
105
100
|
*/
|
|
106
101
|
private spawnWorkerProcess(
|
|
107
|
-
config: Omit<P2PConfig, 'peerIdPrivateKey'> & {
|
|
102
|
+
config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
103
|
+
peerIdPrivateKey: string;
|
|
104
|
+
} & Partial<ChainConfig>,
|
|
108
105
|
clientIndex: number,
|
|
109
106
|
): [ChildProcess, Promise<void>] {
|
|
110
107
|
const useCompiled = existsSync(workerJsPath);
|
|
@@ -418,6 +415,61 @@ class WorkerClientManager {
|
|
|
418
415
|
this.logger.info('All worker processes cleaned up');
|
|
419
416
|
}
|
|
420
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
|
+
|
|
421
473
|
/**
|
|
422
474
|
* Run a req/resp benchmark across all worker clients.
|
|
423
475
|
*
|
|
@@ -438,9 +490,7 @@ class WorkerClientManager {
|
|
|
438
490
|
const blockNumber = config.blockNumber ?? 1;
|
|
439
491
|
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
440
492
|
|
|
441
|
-
this.logger.info(
|
|
442
|
-
`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
|
|
443
|
-
);
|
|
493
|
+
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
|
|
444
494
|
|
|
445
495
|
const readyPromises: Promise<void>[] = [];
|
|
446
496
|
|
|
@@ -450,7 +500,6 @@ class WorkerClientManager {
|
|
|
450
500
|
txCount: config.txCount,
|
|
451
501
|
peerCount,
|
|
452
502
|
distribution: config.distribution,
|
|
453
|
-
collectorType: config.collectorType,
|
|
454
503
|
timeoutMs: config.timeoutMs,
|
|
455
504
|
isAggregator: false,
|
|
456
505
|
peerIndex: i,
|
|
@@ -472,7 +521,6 @@ class WorkerClientManager {
|
|
|
472
521
|
txCount: config.txCount,
|
|
473
522
|
peerCount,
|
|
474
523
|
distribution: config.distribution,
|
|
475
|
-
collectorType: config.collectorType,
|
|
476
524
|
timeoutMs: config.timeoutMs,
|
|
477
525
|
isAggregator: true,
|
|
478
526
|
peerIndex: 0,
|
|
@@ -483,7 +531,8 @@ class WorkerClientManager {
|
|
|
483
531
|
};
|
|
484
532
|
|
|
485
533
|
this.processes[0].send(aggregatorCmd);
|
|
486
|
-
const
|
|
534
|
+
const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
|
|
535
|
+
const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
|
|
487
536
|
|
|
488
537
|
this.logger.info(
|
|
489
538
|
`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
|
|
@@ -492,7 +541,6 @@ class WorkerClientManager {
|
|
|
492
541
|
return {
|
|
493
542
|
txCount: config.txCount,
|
|
494
543
|
distribution: config.distribution,
|
|
495
|
-
collector: config.collectorType,
|
|
496
544
|
durationMs: result.durationMs,
|
|
497
545
|
fetchedCount: result.fetchedCount,
|
|
498
546
|
success: result.success,
|
|
@@ -570,5 +618,4 @@ class WorkerClientManager {
|
|
|
570
618
|
}
|
|
571
619
|
|
|
572
620
|
export { WorkerClientManager, testChainConfig };
|
|
573
|
-
export type { DistributionPattern
|
|
574
|
-
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
|
621
|
+
export type { DistributionPattern } from './p2p_client_testbench_worker.js';
|