@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +5 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +39 -16
- package/dest/client/interface.d.ts +52 -12
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +36 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +142 -81
- package/dest/config.d.ts +163 -98
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +130 -20
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/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 +101 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +272 -199
- 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 +224 -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 +9 -4
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +28 -9
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +10 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +29 -20
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- 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 +5 -4
- 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 +3 -1
- 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 +64 -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_mining_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
- 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 +6 -5
- 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/instrumentation.d.ts +11 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +24 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -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 +29 -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 +46 -16
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -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 +55 -41
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +19 -4
- 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 +86 -32
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +50 -6
- 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 +262 -131
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
- 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/proposal_validator/block_proposal_validator.d.ts +11 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
- 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/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -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 +21 -32
- 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 +25 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +55 -16
- 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 +53 -7
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
- package/dest/msg_validators/tx_validator/index.d.ts +4 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +3 -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/phases_validator.d.ts +21 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
- 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 +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +119 -23
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +18 -16
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +21 -16
- package/dest/services/encoding.d.ts +23 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +32 -16
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- package/dest/services/libp2p/instrumentation.d.ts +6 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +21 -0
- package/dest/services/libp2p/libp2p_service.d.ts +51 -51
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +499 -333
- package/dest/services/peer-manager/peer_manager.d.ts +31 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +125 -25
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +102 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -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 +81 -86
- 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 +3 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
- 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 +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- 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/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- 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 +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -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 +42 -24
- 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 +3 -13
- 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 +73 -215
- package/dest/services/service.d.ts +43 -18
- 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 +13 -8
- 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 +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +33 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +57 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- 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 +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +49 -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 +104 -41
- 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 +17 -17
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +62 -9
- package/src/client/interface.ts +48 -18
- package/src/client/p2p_client.ts +159 -113
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +233 -20
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +327 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +18 -12
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +4 -5
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
- 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 +67 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -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/instrumentation.ts +27 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +107 -32
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +291 -137
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
- package/src/msg_validators/tx_validator/README.md +17 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
- 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 +66 -9
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
- package/src/msg_validators/tx_validator/index.ts +3 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +26 -40
- package/src/services/encoding.ts +35 -19
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +22 -0
- package/src/services/libp2p/libp2p_service.ts +560 -369
- package/src/services/peer-manager/peer_manager.ts +138 -24
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
- 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 +5 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +19 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
- 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 +3 -13
- package/src/services/reqresp/reqresp.ts +84 -259
- package/src/services/service.ts +51 -35
- 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 +10 -8
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +4 -1
- package/src/test-helpers/mock-pubsub.ts +61 -60
- package/src/test-helpers/reqresp-nodes.ts +13 -23
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +63 -28
- package/src/testbench/p2p_client_testbench_worker.ts +111 -57
- 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 -304
- 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/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -37
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
- 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 -378
- 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 -345
- 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/clock_tolerance.ts +0 -51
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
- 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';
|
|
@@ -123,6 +119,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
123
119
|
return Promise.resolve();
|
|
124
120
|
}
|
|
125
121
|
|
|
122
|
+
unprotectTxs(_txHashes: TxHash[], _slotNumber: SlotNumber): Promise<void> {
|
|
123
|
+
return Promise.resolve();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
126
|
handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
|
|
127
127
|
return Promise.resolve();
|
|
128
128
|
}
|
|
@@ -171,6 +171,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
171
171
|
return Promise.resolve(this.txsByHash.size);
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
async hasEligiblePendingTxs(minCount: number): Promise<boolean> {
|
|
175
|
+
return (await this.getPendingTxCount()) >= minCount;
|
|
176
|
+
}
|
|
177
|
+
|
|
174
178
|
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
|
|
175
179
|
return Promise.resolve([]);
|
|
176
180
|
}
|
|
@@ -214,6 +218,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
214
218
|
*/
|
|
215
219
|
export class InMemoryAttestationPool {
|
|
216
220
|
private proposals = new Map<string, BlockProposal>();
|
|
221
|
+
private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
|
|
217
222
|
|
|
218
223
|
tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
|
|
219
224
|
const id = blockProposal.archive.toString();
|
|
@@ -225,16 +230,33 @@ export class InMemoryAttestationPool {
|
|
|
225
230
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
226
231
|
}
|
|
227
232
|
|
|
228
|
-
|
|
233
|
+
getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
|
|
229
234
|
return Promise.resolve(this.proposals.get(id));
|
|
230
235
|
}
|
|
231
236
|
|
|
232
|
-
tryAddCheckpointProposal(
|
|
237
|
+
tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
|
|
238
|
+
const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
|
|
239
|
+
proposals.push(proposal);
|
|
240
|
+
this.checkpoints.set(proposal.slotNumber, proposals);
|
|
233
241
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
234
242
|
}
|
|
235
243
|
|
|
236
|
-
getCheckpointProposal(
|
|
237
|
-
return Promise.resolve(
|
|
244
|
+
getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
|
|
245
|
+
return Promise.resolve(this.checkpoints.get(slot)?.[0]);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
|
|
249
|
+
return Promise.resolve(this.checkpoints.has(slot));
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
getProposalsForSlot(slot: SlotNumber): Promise<{
|
|
253
|
+
blockProposals: BlockProposal[];
|
|
254
|
+
checkpointProposals: CheckpointProposalCore[];
|
|
255
|
+
}> {
|
|
256
|
+
return Promise.resolve({
|
|
257
|
+
blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
|
|
258
|
+
checkpointProposals: this.checkpoints.get(slot) ?? [],
|
|
259
|
+
});
|
|
238
260
|
}
|
|
239
261
|
|
|
240
262
|
async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
|
|
@@ -247,7 +269,7 @@ export class InMemoryAttestationPool {
|
|
|
247
269
|
|
|
248
270
|
getCheckpointAttestationsForSlotAndProposal(
|
|
249
271
|
_slot: SlotNumber,
|
|
250
|
-
|
|
272
|
+
_proposalPayloadHash: CheckpointProposalHash,
|
|
251
273
|
): Promise<CheckpointAttestation[]> {
|
|
252
274
|
return Promise.resolve([]);
|
|
253
275
|
}
|
|
@@ -261,11 +283,12 @@ export class InMemoryAttestationPool {
|
|
|
261
283
|
}
|
|
262
284
|
|
|
263
285
|
isEmpty(): Promise<boolean> {
|
|
264
|
-
return Promise.resolve(this.proposals.size === 0);
|
|
286
|
+
return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
|
|
265
287
|
}
|
|
266
288
|
|
|
267
289
|
resetState(): void {
|
|
268
290
|
this.proposals.clear();
|
|
291
|
+
this.checkpoints.clear();
|
|
269
292
|
}
|
|
270
293
|
}
|
|
271
294
|
|
|
@@ -273,17 +296,40 @@ export class InMemoryAttestationPool {
|
|
|
273
296
|
* Creates a mock EpochCache for testing.
|
|
274
297
|
*/
|
|
275
298
|
export function createMockEpochCache(): EpochCacheInterface {
|
|
276
|
-
|
|
299
|
+
const cache: EpochCacheInterface = {
|
|
277
300
|
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
|
|
278
301
|
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
279
|
-
|
|
302
|
+
getSlotNow: () => SlotNumber.ZERO,
|
|
303
|
+
getTargetSlot: () => SlotNumber.ZERO,
|
|
304
|
+
getEpochNow: () => EpochNumber.ZERO,
|
|
305
|
+
getTargetEpoch: () => EpochNumber.ZERO,
|
|
306
|
+
getEpochAndSlotNow: () => ({
|
|
307
|
+
epoch: EpochNumber.ZERO,
|
|
308
|
+
slot: SlotNumber.ZERO,
|
|
309
|
+
ts: 0n,
|
|
310
|
+
nowMs: 0n,
|
|
311
|
+
}),
|
|
280
312
|
computeProposerIndex: () => 0n,
|
|
281
313
|
getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
314
|
+
getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
282
315
|
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
283
|
-
getEpochAndSlotInNextL1Slot: () => ({
|
|
316
|
+
getEpochAndSlotInNextL1Slot: () => ({
|
|
317
|
+
epoch: EpochNumber.ZERO,
|
|
318
|
+
slot: SlotNumber.ZERO,
|
|
319
|
+
ts: 0n,
|
|
320
|
+
nowSeconds: 0n,
|
|
321
|
+
}),
|
|
322
|
+
getTargetEpochAndSlotInNextL1Slot: () => ({
|
|
323
|
+
epoch: EpochNumber.ZERO,
|
|
324
|
+
slot: SlotNumber.ZERO,
|
|
325
|
+
ts: 0n,
|
|
326
|
+
nowSeconds: 0n,
|
|
327
|
+
}),
|
|
284
328
|
isInCommittee: () => Promise.resolve(false),
|
|
285
329
|
getRegisteredValidators: () => Promise.resolve([]),
|
|
286
330
|
filterInCommittee: () => Promise.resolve([]),
|
|
331
|
+
isEscapeHatchOpen: () => Promise.resolve(false),
|
|
332
|
+
isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
|
|
287
333
|
getL1Constants: () => ({
|
|
288
334
|
l1StartBlock: 0n,
|
|
289
335
|
l1GenesisTime: 0n,
|
|
@@ -292,8 +338,10 @@ export function createMockEpochCache(): EpochCacheInterface {
|
|
|
292
338
|
ethereumSlotDuration: 1,
|
|
293
339
|
proofSubmissionEpochs: 1,
|
|
294
340
|
targetCommitteeSize: 48,
|
|
341
|
+
rollupManaLimit: Number.MAX_SAFE_INTEGER,
|
|
295
342
|
}),
|
|
296
343
|
};
|
|
344
|
+
return cache;
|
|
297
345
|
}
|
|
298
346
|
|
|
299
347
|
/**
|
|
@@ -340,19 +388,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
|
|
|
340
388
|
*/
|
|
341
389
|
export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
|
|
342
390
|
|
|
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
391
|
/**
|
|
357
392
|
* Benchmark timing constants.
|
|
358
393
|
*/
|
|
@@ -12,17 +12,19 @@ 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 { EmptyL1RollupConstants, type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
21
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
21
22
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
23
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
22
24
|
import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
|
|
23
25
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
24
26
|
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
|
|
25
|
-
import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
27
|
+
import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
26
28
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
27
29
|
|
|
28
30
|
import type { Message, PeerId } from '@libp2p/interface';
|
|
@@ -33,18 +35,17 @@ import type { P2PClient } from '../client/index.js';
|
|
|
33
35
|
import type { P2PConfig } from '../config.js';
|
|
34
36
|
import { createP2PClient } from '../index.js';
|
|
35
37
|
import type { MemPools } from '../mem_pools/index.js';
|
|
36
|
-
import {
|
|
38
|
+
import { LibP2PService } from '../services/index.js';
|
|
37
39
|
import type { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
40
|
+
import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
|
|
38
41
|
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
42
|
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
41
43
|
import type { ReqResp } from '../services/reqresp/reqresp.js';
|
|
42
44
|
import type { PeerDiscoveryService } from '../services/service.js';
|
|
43
|
-
import {
|
|
45
|
+
import { RequestTracker } from '../services/tx_collection/request_tracker.js';
|
|
44
46
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
|
|
45
47
|
import {
|
|
46
48
|
BENCHMARK_CONSTANTS,
|
|
47
|
-
type CollectorType,
|
|
48
49
|
type DistributionPattern,
|
|
49
50
|
InMemoryAttestationPool,
|
|
50
51
|
InMemoryTxPool,
|
|
@@ -55,15 +56,13 @@ import {
|
|
|
55
56
|
} from '../test-helpers/index.js';
|
|
56
57
|
import type { PubSubLibp2p } from '../util.js';
|
|
57
58
|
|
|
58
|
-
export type { DistributionPattern
|
|
59
|
-
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
59
|
+
export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
|
|
60
60
|
|
|
61
61
|
export interface BenchReqRespCommand {
|
|
62
62
|
type: 'BENCH_REQRESP';
|
|
63
63
|
txCount: number;
|
|
64
64
|
peerCount: number;
|
|
65
65
|
distribution: DistributionPattern;
|
|
66
|
-
collectorType: CollectorType;
|
|
67
66
|
timeoutMs: number;
|
|
68
67
|
isAggregator: boolean;
|
|
69
68
|
peerIndex: number;
|
|
@@ -86,6 +85,25 @@ export interface BenchReadyMessage {
|
|
|
86
85
|
}
|
|
87
86
|
const txCache = new Map<number, Tx[]>();
|
|
88
87
|
|
|
88
|
+
const BENCH_L1_CONSTANTS: L1RollupConstants = {
|
|
89
|
+
...EmptyL1RollupConstants,
|
|
90
|
+
slotDuration: 12,
|
|
91
|
+
ethereumSlotDuration: 4,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
class TestbenchL2BlockSource extends MockL2BlockSource {
|
|
95
|
+
public override getL1Constants(): Promise<L1RollupConstants> {
|
|
96
|
+
return Promise.resolve(BENCH_L1_CONSTANTS);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function createBenchmarkEpochCache(): EpochCacheInterface {
|
|
101
|
+
return {
|
|
102
|
+
...createMockEpochCache(),
|
|
103
|
+
getL1Constants: () => BENCH_L1_CONSTANTS,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
89
107
|
class TestLibP2PService extends LibP2PService {
|
|
90
108
|
private disableTxValidation: boolean;
|
|
91
109
|
private gossipMessageCount = 0;
|
|
@@ -116,6 +134,7 @@ class TestLibP2PService extends LibP2PService {
|
|
|
116
134
|
epochCache,
|
|
117
135
|
proofVerifier,
|
|
118
136
|
worldStateSynchronizer,
|
|
137
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
119
138
|
telemetry,
|
|
120
139
|
logger,
|
|
121
140
|
);
|
|
@@ -204,10 +223,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
|
|
|
204
223
|
rateLimiter.allow = () => RateLimitStatus.Allowed;
|
|
205
224
|
}
|
|
206
225
|
|
|
226
|
+
/** Resets peer scores to prevent cross-case contamination in benchmarks. */
|
|
227
|
+
function resetPeerScores(client: P2PClient): void {
|
|
228
|
+
const peerManager = (client as any).p2pService.peerManager;
|
|
229
|
+
const peerScoring = peerManager?.peerScoring;
|
|
230
|
+
if (peerScoring?.resetAllScores) {
|
|
231
|
+
peerScoring.resetAllScores();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** Returns the number of connected peers for connectivity checks. */
|
|
236
|
+
function getConnectedPeerCount(client: P2PClient): number {
|
|
237
|
+
const p2pService = (client as any).p2pService;
|
|
238
|
+
const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
|
|
239
|
+
if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
|
|
240
|
+
return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
|
|
241
|
+
}
|
|
242
|
+
return 0;
|
|
243
|
+
}
|
|
244
|
+
|
|
207
245
|
async function runAggregatorBenchmark(
|
|
208
246
|
client: P2PClient,
|
|
209
247
|
blockProposal: BlockProposal,
|
|
210
|
-
collectorType: CollectorType,
|
|
211
248
|
timeoutMs: number,
|
|
212
249
|
pinnedPeerId: string | undefined,
|
|
213
250
|
pinnedPeerIndex: number | undefined,
|
|
@@ -258,46 +295,22 @@ async function runAggregatorBenchmark(
|
|
|
258
295
|
}
|
|
259
296
|
}
|
|
260
297
|
|
|
261
|
-
const noopTxValidator:
|
|
262
|
-
|
|
263
|
-
validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
|
|
264
|
-
Promise.resolve(txs.map(() => ({ result: 'valid' }))),
|
|
298
|
+
const noopTxValidator: TxValidator = {
|
|
299
|
+
validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
|
|
265
300
|
};
|
|
266
301
|
|
|
267
302
|
timer = new Timer();
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
logger,
|
|
272
|
-
new DateProvider(),
|
|
273
|
-
noopTxValidator,
|
|
274
|
-
);
|
|
275
|
-
const fetchedTxs = await collector.collectTxs(
|
|
276
|
-
MissingTxsTracker.fromArray(txHashes),
|
|
277
|
-
blockProposal,
|
|
278
|
-
pinnedPeer,
|
|
279
|
-
timeoutMs,
|
|
280
|
-
);
|
|
281
|
-
const durationMs = timer.ms();
|
|
282
|
-
return {
|
|
283
|
-
type: 'BENCH_RESULT',
|
|
284
|
-
durationMs,
|
|
285
|
-
fetchedCount: fetchedTxs.length,
|
|
286
|
-
success: fetchedTxs.length === txHashes.length,
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
const collector = new SendBatchRequestCollector(
|
|
291
|
-
batchTxRequesterService,
|
|
292
|
-
BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
|
|
293
|
-
BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
|
|
294
|
-
);
|
|
295
|
-
const fetchedTxs = await collector.collectTxs(
|
|
296
|
-
MissingTxsTracker.fromArray(txHashes),
|
|
303
|
+
const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
|
|
304
|
+
const batchRequester = new BatchTxRequester(
|
|
305
|
+
tracker,
|
|
297
306
|
blockProposal,
|
|
298
307
|
pinnedPeer,
|
|
299
|
-
|
|
308
|
+
batchTxRequesterService,
|
|
309
|
+
logger,
|
|
310
|
+
new DateProvider(),
|
|
311
|
+
{ txValidator: noopTxValidator },
|
|
300
312
|
);
|
|
313
|
+
const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
|
|
301
314
|
const durationMs = timer.ms();
|
|
302
315
|
return {
|
|
303
316
|
type: 'BENCH_RESULT',
|
|
@@ -323,6 +336,37 @@ let workerConfig: P2PConfig | null = null;
|
|
|
323
336
|
let workerLogger: Logger | null = null;
|
|
324
337
|
let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
|
|
325
338
|
|
|
339
|
+
async function stopWorker() {
|
|
340
|
+
try {
|
|
341
|
+
if (workerClient) {
|
|
342
|
+
await workerClient.stop();
|
|
343
|
+
workerClient = null;
|
|
344
|
+
}
|
|
345
|
+
} catch (e) {
|
|
346
|
+
workerLogger?.error('Error stopping worker client', e);
|
|
347
|
+
}
|
|
348
|
+
try {
|
|
349
|
+
if (kvStore?.close) {
|
|
350
|
+
await kvStore.close();
|
|
351
|
+
kvStore = null;
|
|
352
|
+
}
|
|
353
|
+
} catch (e) {
|
|
354
|
+
workerLogger?.error('Error closing kv store', e);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function gracefulExit(code: number = 0) {
|
|
359
|
+
try {
|
|
360
|
+
if (process.connected) {
|
|
361
|
+
process.disconnect();
|
|
362
|
+
}
|
|
363
|
+
} catch {
|
|
364
|
+
// IPC channel already closed
|
|
365
|
+
}
|
|
366
|
+
// Safety fallback if lingering handles prevent the event loop from draining
|
|
367
|
+
setTimeout(() => process.exit(code), 5000).unref();
|
|
368
|
+
}
|
|
369
|
+
|
|
326
370
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
327
371
|
process.on('message', async msg => {
|
|
328
372
|
const {
|
|
@@ -340,14 +384,15 @@ process.on('message', async msg => {
|
|
|
340
384
|
const config: P2PConfig = {
|
|
341
385
|
...rawConfig,
|
|
342
386
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
387
|
+
priceBumpPercentage: 10n,
|
|
343
388
|
} as P2PConfig;
|
|
344
389
|
|
|
345
390
|
workerConfig = config;
|
|
346
391
|
workerTxPool = new InMemoryTxPool();
|
|
347
392
|
workerAttestationPool = new InMemoryAttestationPool();
|
|
348
|
-
const epochCache =
|
|
393
|
+
const epochCache = createBenchmarkEpochCache();
|
|
349
394
|
const worldState = createMockWorldStateSynchronizer();
|
|
350
|
-
const l2BlockSource = new
|
|
395
|
+
const l2BlockSource = new TestbenchL2BlockSource();
|
|
351
396
|
|
|
352
397
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
353
398
|
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
@@ -368,10 +413,12 @@ process.on('message', async msg => {
|
|
|
368
413
|
proofVerifier as ClientProtocolCircuitVerifier,
|
|
369
414
|
worldState,
|
|
370
415
|
epochCache,
|
|
416
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
371
417
|
'test-p2p-bench-worker',
|
|
372
418
|
undefined,
|
|
373
419
|
telemetry as TelemetryClient,
|
|
374
420
|
deps,
|
|
421
|
+
await l2BlockSource.getInitialHeader().hash(),
|
|
375
422
|
);
|
|
376
423
|
|
|
377
424
|
const testService = new TestLibP2PService(
|
|
@@ -411,13 +458,8 @@ process.on('message', async msg => {
|
|
|
411
458
|
const cmd = msg as any;
|
|
412
459
|
switch (cmd.type) {
|
|
413
460
|
case 'STOP':
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
if (kvStore?.close) {
|
|
418
|
-
await kvStore.close();
|
|
419
|
-
}
|
|
420
|
-
process.exit(0);
|
|
461
|
+
await stopWorker();
|
|
462
|
+
gracefulExit(0);
|
|
421
463
|
break;
|
|
422
464
|
|
|
423
465
|
case 'SEND_TX':
|
|
@@ -427,6 +469,13 @@ process.on('message', async msg => {
|
|
|
427
469
|
}
|
|
428
470
|
break;
|
|
429
471
|
|
|
472
|
+
case 'GET_PEER_COUNT':
|
|
473
|
+
process.send!({
|
|
474
|
+
type: 'PEER_COUNT',
|
|
475
|
+
count: workerClient ? getConnectedPeerCount(workerClient) : 0,
|
|
476
|
+
});
|
|
477
|
+
break;
|
|
478
|
+
|
|
430
479
|
case 'BENCH_REQRESP': {
|
|
431
480
|
const benchCmd = cmd as BenchReqRespCommand;
|
|
432
481
|
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
@@ -443,6 +492,7 @@ process.on('message', async msg => {
|
|
|
443
492
|
// Reset state before each benchmark run to avoid cross-run contamination
|
|
444
493
|
workerTxPool.resetState();
|
|
445
494
|
workerAttestationPool.resetState();
|
|
495
|
+
resetPeerScores(workerClient);
|
|
446
496
|
|
|
447
497
|
installUnlimitedRateLimits(workerClient);
|
|
448
498
|
|
|
@@ -459,13 +509,12 @@ process.on('message', async msg => {
|
|
|
459
509
|
workerTxPool.clearTxs();
|
|
460
510
|
|
|
461
511
|
workerLogger.info(
|
|
462
|
-
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount},
|
|
512
|
+
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
|
|
463
513
|
);
|
|
464
514
|
|
|
465
515
|
const result = await runAggregatorBenchmark(
|
|
466
516
|
workerClient,
|
|
467
517
|
blockProposal,
|
|
468
|
-
benchCmd.collectorType,
|
|
469
518
|
benchCmd.timeoutMs,
|
|
470
519
|
benchCmd.pinnedPeerId,
|
|
471
520
|
benchCmd.pinnedPeerIndex,
|
|
@@ -494,7 +543,12 @@ process.on('message', async msg => {
|
|
|
494
543
|
}
|
|
495
544
|
}
|
|
496
545
|
} catch (err: any) {
|
|
497
|
-
|
|
498
|
-
|
|
546
|
+
try {
|
|
547
|
+
process.send!({ type: 'ERROR', error: err.message });
|
|
548
|
+
} catch {
|
|
549
|
+
// IPC channel may be closed
|
|
550
|
+
}
|
|
551
|
+
await stopWorker();
|
|
552
|
+
gracefulExit(1);
|
|
499
553
|
}
|
|
500
554
|
});
|
|
@@ -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';
|