@aztec/p2p 0.0.1-commit.f2ce05ee → 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 +11 -10
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +64 -17
- package/dest/client/interface.d.ts +86 -40
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +67 -64
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +251 -251
- package/dest/config.d.ts +173 -94
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +158 -44
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +106 -55
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +302 -195
- 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 +274 -115
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +7 -5
- package/dest/mem_pools/index.d.ts +2 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +12 -5
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +38 -17
- package/dest/mem_pools/interface.d.ts +3 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- 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 +104 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
- 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 +8 -4
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
- 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 +15 -5
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +2 -1
- 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 +54 -5
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
- 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 +6 -5
- 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 +9 -8
- 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 +15 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
- 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 +16 -4
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
- 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 +3 -3
- package/dest/mem_pools/tx_pool_v2/index.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +2 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +25 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +62 -16
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +6 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +81 -15
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +147 -19
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +26 -3
- 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 +79 -43
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +27 -7
- 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 +94 -32
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +62 -9
- 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 +537 -246
- 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 +12 -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 +12 -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 +36 -9
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +130 -48
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.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/double_spend_validator.d.ts +13 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
- package/dest/msg_validators/tx_validator/factory.d.ts +133 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +261 -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 +104 -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/timestamp_validator.d.ts +20 -4
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
- 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 +25 -19
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +28 -20
- package/dest/services/encoding.d.ts +24 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +43 -26
- package/dest/services/gossipsub/topic_score_params.d.ts +23 -17
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +36 -24
- 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 +71 -60
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +602 -407
- 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 +31 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +127 -26
- 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 +5 -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 +95 -127
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
- 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 +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 +25 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +23 -19
- package/dest/services/reqresp/metrics.d.ts +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 +3 -3
- 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 +18 -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 +57 -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 +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +21 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +85 -219
- package/dest/services/service.d.ts +63 -19
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +11 -14
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +26 -33
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +100 -0
- package/dest/services/tx_collection/index.d.ts +3 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -1
- package/dest/services/tx_collection/instrumentation.js +1 -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 +45 -51
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +296 -68
- package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +28 -31
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +29 -7
- package/dest/services/tx_file_store/config.d.ts +1 -3
- package/dest/services/tx_file_store/config.d.ts.map +1 -1
- package/dest/services/tx_file_store/config.js +0 -4
- package/dest/services/tx_file_store/tx_file_store.d.ts +4 -5
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +13 -20
- package/dest/services/tx_provider.d.ts +6 -4
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +56 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +128 -14
- 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 +49 -37
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +142 -50
- 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 +112 -49
- 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 +13 -8
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +17 -17
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +129 -28
- package/src/client/interface.ts +88 -48
- package/src/client/p2p_client.ts +284 -317
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +280 -49
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +373 -236
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +298 -119
- package/src/mem_pools/attestation_pool/index.ts +3 -3
- package/src/mem_pools/attestation_pool/mocks.ts +14 -8
- package/src/mem_pools/index.ts +1 -1
- package/src/mem_pools/instrumentation.ts +27 -17
- package/src/mem_pools/interface.ts +2 -2
- package/src/mem_pools/tx_pool_v2/README.md +85 -11
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +6 -4
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +21 -6
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +5 -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 +59 -4
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +4 -6
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +8 -10
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -10
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
- package/src/mem_pools/tx_pool_v2/index.ts +2 -1
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +63 -16
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +215 -27
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +91 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +122 -33
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +602 -242
- 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 +155 -49
- package/src/msg_validators/tx_validator/README.md +129 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
- 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/double_spend_validator.ts +11 -6
- package/src/msg_validators/tx_validator/factory.ts +413 -80
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +195 -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/timestamp_validator.ts +23 -18
- 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 +38 -46
- package/src/services/encoding.ts +42 -26
- package/src/services/gossipsub/README.md +59 -22
- package/src/services/gossipsub/topic_score_params.ts +58 -31
- package/src/services/libp2p/instrumentation.ts +22 -0
- package/src/services/libp2p/libp2p_service.ts +687 -466
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +140 -25
- 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 +92 -138
- package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
- 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 +19 -2
- package/src/services/reqresp/interface.ts +45 -46
- 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 +36 -32
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +64 -20
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +23 -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 +100 -263
- package/src/services/service.ts +80 -35
- package/src/services/tx_collection/config.ts +40 -49
- package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
- package/src/services/tx_collection/file_store_tx_source.ts +129 -0
- package/src/services/tx_collection/index.ts +2 -6
- package/src/services/tx_collection/instrumentation.ts +1 -1
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +362 -110
- package/src/services/tx_collection/tx_collection_sink.ts +32 -36
- package/src/services/tx_collection/tx_source.ts +29 -8
- package/src/services/tx_file_store/config.ts +0 -6
- package/src/services/tx_file_store/tx_file_store.ts +15 -25
- package/src/services/tx_provider.ts +15 -9
- package/src/test-helpers/make-test-p2p-clients.ts +7 -6
- package/src/test-helpers/mock-pubsub.ts +152 -14
- 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 +171 -68
- package/src/testbench/p2p_client_testbench_worker.ts +121 -64
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +40 -19
- 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/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 -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 -52
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -307
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -49
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -177
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
- 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 -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 -354
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -112
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -12,42 +12,40 @@ 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';
|
|
22
|
-
import
|
|
23
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
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';
|
|
29
31
|
import { TopicValidatorResult } from '@libp2p/interface';
|
|
30
32
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
31
33
|
|
|
32
|
-
import type { P2PClient } from '../client/
|
|
34
|
+
import type { P2PClient } from '../client/index.js';
|
|
33
35
|
import type { P2PConfig } from '../config.js';
|
|
34
36
|
import { createP2PClient } from '../index.js';
|
|
35
|
-
import type { MemPools } from '../mem_pools/
|
|
36
|
-
import { LibP2PService } from '../services/
|
|
37
|
+
import type { MemPools } from '../mem_pools/index.js';
|
|
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 {
|
|
44
|
-
|
|
45
|
-
SendBatchRequestCollector,
|
|
46
|
-
} from '../services/tx_collection/proposal_tx_collector.js';
|
|
47
|
-
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
45
|
+
import { RequestTracker } from '../services/tx_collection/request_tracker.js';
|
|
46
|
+
import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
|
|
48
47
|
import {
|
|
49
48
|
BENCHMARK_CONSTANTS,
|
|
50
|
-
type CollectorType,
|
|
51
49
|
type DistributionPattern,
|
|
52
50
|
InMemoryAttestationPool,
|
|
53
51
|
InMemoryTxPool,
|
|
@@ -55,18 +53,16 @@ import {
|
|
|
55
53
|
createMockEpochCache,
|
|
56
54
|
createMockWorldStateSynchronizer,
|
|
57
55
|
filterTxsByDistribution,
|
|
58
|
-
} from '../test-helpers/
|
|
56
|
+
} from '../test-helpers/index.js';
|
|
59
57
|
import type { PubSubLibp2p } from '../util.js';
|
|
60
58
|
|
|
61
|
-
export type { DistributionPattern
|
|
62
|
-
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
59
|
+
export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
|
|
63
60
|
|
|
64
61
|
export interface BenchReqRespCommand {
|
|
65
62
|
type: 'BENCH_REQRESP';
|
|
66
63
|
txCount: number;
|
|
67
64
|
peerCount: number;
|
|
68
65
|
distribution: DistributionPattern;
|
|
69
|
-
collectorType: CollectorType;
|
|
70
66
|
timeoutMs: number;
|
|
71
67
|
isAggregator: boolean;
|
|
72
68
|
peerIndex: number;
|
|
@@ -89,12 +85,30 @@ export interface BenchReadyMessage {
|
|
|
89
85
|
}
|
|
90
86
|
const txCache = new Map<number, Tx[]>();
|
|
91
87
|
|
|
92
|
-
|
|
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
|
+
|
|
107
|
+
class TestLibP2PService extends LibP2PService {
|
|
93
108
|
private disableTxValidation: boolean;
|
|
94
109
|
private gossipMessageCount = 0;
|
|
95
110
|
|
|
96
111
|
constructor(
|
|
97
|
-
clientType: T,
|
|
98
112
|
config: P2PConfig,
|
|
99
113
|
node: PubSubLibp2p,
|
|
100
114
|
peerDiscoveryService: PeerDiscoveryService,
|
|
@@ -110,7 +124,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
110
124
|
disableTxValidation = true,
|
|
111
125
|
) {
|
|
112
126
|
super(
|
|
113
|
-
clientType,
|
|
114
127
|
config,
|
|
115
128
|
node,
|
|
116
129
|
peerDiscoveryService,
|
|
@@ -121,6 +134,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
121
134
|
epochCache,
|
|
122
135
|
proofVerifier,
|
|
123
136
|
worldStateSynchronizer,
|
|
137
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
124
138
|
telemetry,
|
|
125
139
|
logger,
|
|
126
140
|
);
|
|
@@ -144,7 +158,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
144
158
|
const txHash = tx.getTxHash();
|
|
145
159
|
const txHashString = txHash.toString();
|
|
146
160
|
this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
|
|
147
|
-
await this.mempools.txPool.
|
|
161
|
+
await this.mempools.txPool.addPendingTxs([tx]);
|
|
148
162
|
} else {
|
|
149
163
|
await super.handleGossipedTx(payload, msgId, source);
|
|
150
164
|
}
|
|
@@ -166,7 +180,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
|
|
|
166
180
|
return cached.slice(0, txCount);
|
|
167
181
|
}
|
|
168
182
|
|
|
169
|
-
const
|
|
183
|
+
const expirationTimestampBase = BigInt(seed);
|
|
170
184
|
for (let i = cached.length; i < txCount; i++) {
|
|
171
185
|
const txSeed = seed * 10000 + i;
|
|
172
186
|
const tx = await mockTx(txSeed, {
|
|
@@ -182,7 +196,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
|
|
|
182
196
|
hasPublicTeardownCallRequest: false,
|
|
183
197
|
publicCalldataSize: 0,
|
|
184
198
|
});
|
|
185
|
-
tx.data.
|
|
199
|
+
tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
|
|
186
200
|
await tx.recomputeHash();
|
|
187
201
|
cached.push(tx);
|
|
188
202
|
}
|
|
@@ -209,10 +223,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
|
|
|
209
223
|
rateLimiter.allow = () => RateLimitStatus.Allowed;
|
|
210
224
|
}
|
|
211
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
|
+
|
|
212
245
|
async function runAggregatorBenchmark(
|
|
213
246
|
client: P2PClient,
|
|
214
247
|
blockProposal: BlockProposal,
|
|
215
|
-
collectorType: CollectorType,
|
|
216
248
|
timeoutMs: number,
|
|
217
249
|
pinnedPeerId: string | undefined,
|
|
218
250
|
pinnedPeerIndex: number | undefined,
|
|
@@ -263,36 +295,22 @@ async function runAggregatorBenchmark(
|
|
|
263
295
|
}
|
|
264
296
|
}
|
|
265
297
|
|
|
266
|
-
const noopTxValidator:
|
|
267
|
-
|
|
268
|
-
validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
|
|
269
|
-
Promise.resolve(txs.map(() => ({ result: 'valid' }))),
|
|
298
|
+
const noopTxValidator: TxValidator = {
|
|
299
|
+
validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
|
|
270
300
|
};
|
|
271
301
|
|
|
272
302
|
timer = new Timer();
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
noopTxValidator,
|
|
279
|
-
);
|
|
280
|
-
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
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(
|
|
303
|
+
const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
|
|
304
|
+
const batchRequester = new BatchTxRequester(
|
|
305
|
+
tracker,
|
|
306
|
+
blockProposal,
|
|
307
|
+
pinnedPeer,
|
|
291
308
|
batchTxRequesterService,
|
|
292
|
-
|
|
293
|
-
|
|
309
|
+
logger,
|
|
310
|
+
new DateProvider(),
|
|
311
|
+
{ txValidator: noopTxValidator },
|
|
294
312
|
);
|
|
295
|
-
const fetchedTxs = await
|
|
313
|
+
const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
|
|
296
314
|
const durationMs = timer.ms();
|
|
297
315
|
return {
|
|
298
316
|
type: 'BENCH_RESULT',
|
|
@@ -318,6 +336,37 @@ let workerConfig: P2PConfig | null = null;
|
|
|
318
336
|
let workerLogger: Logger | null = null;
|
|
319
337
|
let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
|
|
320
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
|
+
|
|
321
370
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
322
371
|
process.on('message', async msg => {
|
|
323
372
|
const {
|
|
@@ -335,14 +384,15 @@ process.on('message', async msg => {
|
|
|
335
384
|
const config: P2PConfig = {
|
|
336
385
|
...rawConfig,
|
|
337
386
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
387
|
+
priceBumpPercentage: 10n,
|
|
338
388
|
} as P2PConfig;
|
|
339
389
|
|
|
340
390
|
workerConfig = config;
|
|
341
391
|
workerTxPool = new InMemoryTxPool();
|
|
342
392
|
workerAttestationPool = new InMemoryAttestationPool();
|
|
343
|
-
const epochCache =
|
|
393
|
+
const epochCache = createBenchmarkEpochCache();
|
|
344
394
|
const worldState = createMockWorldStateSynchronizer();
|
|
345
|
-
const l2BlockSource = new
|
|
395
|
+
const l2BlockSource = new TestbenchL2BlockSource();
|
|
346
396
|
|
|
347
397
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
348
398
|
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
@@ -358,20 +408,20 @@ process.on('message', async msg => {
|
|
|
358
408
|
};
|
|
359
409
|
|
|
360
410
|
const client = await createP2PClient(
|
|
361
|
-
P2PClientType.Full,
|
|
362
411
|
config as P2PConfig & DataStoreConfig,
|
|
363
412
|
l2BlockSource,
|
|
364
413
|
proofVerifier as ClientProtocolCircuitVerifier,
|
|
365
414
|
worldState,
|
|
366
415
|
epochCache,
|
|
416
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
367
417
|
'test-p2p-bench-worker',
|
|
368
418
|
undefined,
|
|
369
419
|
telemetry as TelemetryClient,
|
|
370
420
|
deps,
|
|
421
|
+
await l2BlockSource.getInitialHeader().hash(),
|
|
371
422
|
);
|
|
372
423
|
|
|
373
424
|
const testService = new TestLibP2PService(
|
|
374
|
-
P2PClientType.Full,
|
|
375
425
|
config,
|
|
376
426
|
(client as any).p2pService.node,
|
|
377
427
|
(client as any).p2pService.peerDiscoveryService,
|
|
@@ -408,13 +458,8 @@ process.on('message', async msg => {
|
|
|
408
458
|
const cmd = msg as any;
|
|
409
459
|
switch (cmd.type) {
|
|
410
460
|
case 'STOP':
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
if (kvStore?.close) {
|
|
415
|
-
await kvStore.close();
|
|
416
|
-
}
|
|
417
|
-
process.exit(0);
|
|
461
|
+
await stopWorker();
|
|
462
|
+
gracefulExit(0);
|
|
418
463
|
break;
|
|
419
464
|
|
|
420
465
|
case 'SEND_TX':
|
|
@@ -424,6 +469,13 @@ process.on('message', async msg => {
|
|
|
424
469
|
}
|
|
425
470
|
break;
|
|
426
471
|
|
|
472
|
+
case 'GET_PEER_COUNT':
|
|
473
|
+
process.send!({
|
|
474
|
+
type: 'PEER_COUNT',
|
|
475
|
+
count: workerClient ? getConnectedPeerCount(workerClient) : 0,
|
|
476
|
+
});
|
|
477
|
+
break;
|
|
478
|
+
|
|
427
479
|
case 'BENCH_REQRESP': {
|
|
428
480
|
const benchCmd = cmd as BenchReqRespCommand;
|
|
429
481
|
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
@@ -440,6 +492,7 @@ process.on('message', async msg => {
|
|
|
440
492
|
// Reset state before each benchmark run to avoid cross-run contamination
|
|
441
493
|
workerTxPool.resetState();
|
|
442
494
|
workerAttestationPool.resetState();
|
|
495
|
+
resetPeerScores(workerClient);
|
|
443
496
|
|
|
444
497
|
installUnlimitedRateLimits(workerClient);
|
|
445
498
|
|
|
@@ -456,13 +509,12 @@ process.on('message', async msg => {
|
|
|
456
509
|
workerTxPool.clearTxs();
|
|
457
510
|
|
|
458
511
|
workerLogger.info(
|
|
459
|
-
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount},
|
|
512
|
+
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
|
|
460
513
|
);
|
|
461
514
|
|
|
462
515
|
const result = await runAggregatorBenchmark(
|
|
463
516
|
workerClient,
|
|
464
517
|
blockProposal,
|
|
465
|
-
benchCmd.collectorType,
|
|
466
518
|
benchCmd.timeoutMs,
|
|
467
519
|
benchCmd.pinnedPeerId,
|
|
468
520
|
benchCmd.pinnedPeerIndex,
|
|
@@ -491,7 +543,12 @@ process.on('message', async msg => {
|
|
|
491
543
|
}
|
|
492
544
|
}
|
|
493
545
|
} catch (err: any) {
|
|
494
|
-
|
|
495
|
-
|
|
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);
|
|
496
553
|
}
|
|
497
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';
|
package/src/util.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { SecretValue } from '@aztec/foundation/config';
|
|
2
|
-
import type
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
4
|
-
import type { DataStoreConfig } from '@aztec/kv-store
|
|
4
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
5
5
|
|
|
6
6
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
7
7
|
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
8
8
|
import type { Identify } from '@libp2p/identify';
|
|
9
9
|
import type { PeerId, PrivateKey } from '@libp2p/interface';
|
|
10
|
-
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
10
|
+
import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
|
|
11
11
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
12
12
|
import { resolve } from 'dns/promises';
|
|
13
13
|
import { promises as fs } from 'fs';
|
|
@@ -15,7 +15,7 @@ import type { Libp2p } from 'libp2p';
|
|
|
15
15
|
import net from 'net';
|
|
16
16
|
import path from 'path';
|
|
17
17
|
|
|
18
|
-
import type
|
|
18
|
+
import { DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from './config.js';
|
|
19
19
|
|
|
20
20
|
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
21
21
|
|
|
@@ -23,8 +23,17 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
|
|
|
23
23
|
services: {
|
|
24
24
|
pubsub: Pick<
|
|
25
25
|
GossipSub,
|
|
26
|
-
|
|
26
|
+
| 'addEventListener'
|
|
27
|
+
| 'removeEventListener'
|
|
28
|
+
| 'publish'
|
|
29
|
+
| 'subscribe'
|
|
30
|
+
| 'reportMessageValidationResult'
|
|
31
|
+
| 'direct'
|
|
32
|
+
| 'getMeshPeers'
|
|
27
33
|
> & { score: Pick<GossipSub['score'], 'score'> };
|
|
34
|
+
components: {
|
|
35
|
+
addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
|
|
36
|
+
};
|
|
28
37
|
};
|
|
29
38
|
}
|
|
30
39
|
|
|
@@ -33,6 +42,7 @@ export type FullLibp2p = Libp2p<{
|
|
|
33
42
|
pubsub: GossipSub;
|
|
34
43
|
components: {
|
|
35
44
|
connectionManager: ConnectionManager;
|
|
45
|
+
addressManager: AddressManager;
|
|
36
46
|
};
|
|
37
47
|
}>;
|
|
38
48
|
|
|
@@ -54,16 +64,25 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
|
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
|
-
* Queries the public IP address of the machine.
|
|
67
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
68
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
58
69
|
*/
|
|
59
|
-
export async function getPublicIp(): Promise<string> {
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
export async function getPublicIp(services: string[] = DEFAULT_PUBLIC_IP_SERVICES): Promise<string> {
|
|
71
|
+
const errors: string[] = [];
|
|
72
|
+
for (const url of services) {
|
|
73
|
+
try {
|
|
74
|
+
const resp = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
75
|
+
const text = await resp.text();
|
|
76
|
+
const address = text.trim();
|
|
77
|
+
if (isValidIpAddress(address)) {
|
|
78
|
+
return address;
|
|
79
|
+
}
|
|
80
|
+
errors.push(`${url}: invalid IP "${address}"`);
|
|
81
|
+
} catch (err: any) {
|
|
82
|
+
errors.push(`${url}: ${err.message ?? err}`);
|
|
83
|
+
}
|
|
65
84
|
}
|
|
66
|
-
|
|
85
|
+
throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
|
|
67
86
|
}
|
|
68
87
|
|
|
69
88
|
export function isValidIpAddress(address: string): boolean {
|
|
@@ -101,18 +120,20 @@ export async function configureP2PClientAddresses(
|
|
|
101
120
|
): Promise<P2PConfig & DataStoreConfig> {
|
|
102
121
|
const config = { ..._config };
|
|
103
122
|
const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
|
|
123
|
+
const logger = createLogger('p2p:config');
|
|
104
124
|
|
|
105
125
|
// If no broadcast port is provided, use the given p2p port as the broadcast port
|
|
106
126
|
if (!p2pBroadcastPort) {
|
|
107
127
|
config.p2pBroadcastPort = p2pPort;
|
|
108
128
|
}
|
|
109
129
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
130
|
+
// Resolve the initial public IP so the ENR and announce address are set at startup.
|
|
131
|
+
// If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
|
|
132
|
+
if (!p2pIp && queryForIp) {
|
|
133
|
+
config.p2pIp = await getPublicIp(config.publicIpServices);
|
|
134
|
+
logger.info('Resolved initial public IP for P2P', { ip: config.p2pIp, queryForIp });
|
|
135
|
+
} else if (p2pIp) {
|
|
136
|
+
logger.info('Using configured static P2P IP', { ip: p2pIp, queryForIp });
|
|
116
137
|
}
|
|
117
138
|
// TODO(md): guard against setting a local ip address as the announce ip
|
|
118
139
|
|