@aztec/p2p 0.0.1-commit.d3ec352c → 0.0.1-commit.e310a4c8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +8 -8
- package/dest/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +11 -14
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +464 -125
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +11 -8
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +12 -13
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +17 -13
- package/dest/mem_pools/instrumentation.d.ts +7 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +31 -13
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +35 -26
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -4
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +25 -20
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +9 -4
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +22 -12
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +18 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +42 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -6
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +30 -72
- package/dest/services/libp2p/libp2p_service.d.ts +39 -16
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +750 -187
- package/dest/services/peer-manager/metrics.d.ts +7 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +33 -21
- package/dest/services/peer-manager/peer_manager.d.ts +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +4 -12
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +7 -4
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +4 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +1 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/auth.d.ts +2 -2
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.js +2 -2
- package/dest/services/reqresp/protocols/block.js +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -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 +44 -14
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +4 -1
- package/dest/services/reqresp/protocols/tx.d.ts +2 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +460 -46
- package/dest/services/service.d.ts +19 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +10 -2
- package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +10 -13
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/tx_collection.d.ts +6 -6
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +6 -6
- package/dest/services/tx_provider.d.ts +4 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +11 -2
- package/dest/services/tx_provider_instrumentation.d.ts +5 -2
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +14 -14
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +218 -123
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -39
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +11 -20
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +97 -145
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +18 -19
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +39 -14
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +362 -367
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +18 -13
- package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +65 -24
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +1 -1
- package/src/msg_validators/tx_validator/timestamp_validator.ts +9 -4
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +51 -0
- package/src/services/encoding.ts +6 -5
- package/src/services/libp2p/instrumentation.ts +32 -73
- package/src/services/libp2p/libp2p_service.ts +418 -173
- package/src/services/peer-manager/metrics.ts +39 -21
- package/src/services/peer-manager/peer_manager.ts +5 -4
- package/src/services/peer-manager/peer_scoring.ts +3 -4
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +4 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block.ts +1 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
- package/src/services/reqresp/protocols/status.ts +7 -4
- package/src/services/reqresp/protocols/tx.ts +1 -2
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +23 -4
- package/src/services/tx_collection/config.ts +16 -2
- package/src/services/tx_collection/fast_tx_collection.ts +36 -13
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +5 -13
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/tx_collection.ts +7 -7
- package/src/services/tx_provider.ts +19 -4
- package/src/services/tx_provider_instrumentation.ts +24 -14
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/mock-pubsub.ts +1 -1
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +338 -119
- package/src/testbench/worker_client_manager.ts +304 -42
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -239
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -285
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
4
3
|
import { fork } from 'child_process';
|
|
4
|
+
import { existsSync } from 'fs';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { getP2PDefaultConfig } from '../config.js';
|
|
8
8
|
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
9
9
|
import { getPorts } from '../test-helpers/get-ports.js';
|
|
10
10
|
import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
|
|
11
|
+
import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
|
|
11
12
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
-
const
|
|
13
|
+
const p2pRoot = path.resolve(__dirname, '../..');
|
|
14
|
+
const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
|
|
15
|
+
const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
|
|
16
|
+
const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
13
17
|
const testChainConfig = {
|
|
14
18
|
l1ChainId: 31337,
|
|
15
19
|
rollupVersion: 1,
|
|
@@ -22,6 +26,7 @@ class WorkerClientManager {
|
|
|
22
26
|
peerIdPrivateKeys = [];
|
|
23
27
|
peerEnrs = [];
|
|
24
28
|
ports = [];
|
|
29
|
+
peerIds = [];
|
|
25
30
|
p2pConfig;
|
|
26
31
|
logger;
|
|
27
32
|
messageReceivedByClient = [];
|
|
@@ -36,12 +41,15 @@ class WorkerClientManager {
|
|
|
36
41
|
});
|
|
37
42
|
}
|
|
38
43
|
/**
|
|
39
|
-
* Creates a client configuration object
|
|
44
|
+
* Creates a client configuration object for IPC.
|
|
45
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
46
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
47
|
+
* The worker must re-wrap it in SecretValue.
|
|
40
48
|
*/ createClientConfig(clientIndex, port, otherNodes) {
|
|
41
49
|
return {
|
|
42
50
|
...getP2PDefaultConfig(),
|
|
43
51
|
p2pEnabled: true,
|
|
44
|
-
peerIdPrivateKey:
|
|
52
|
+
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
45
53
|
listenAddress: '127.0.0.1',
|
|
46
54
|
p2pIp: '127.0.0.1',
|
|
47
55
|
p2pPort: port,
|
|
@@ -52,9 +60,26 @@ class WorkerClientManager {
|
|
|
52
60
|
};
|
|
53
61
|
}
|
|
54
62
|
/**
|
|
55
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
63
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
64
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
56
65
|
*/ spawnWorkerProcess(config, clientIndex) {
|
|
57
|
-
const
|
|
66
|
+
const useCompiled = existsSync(workerJsPath);
|
|
67
|
+
const workerPath = useCompiled ? workerJsPath : workerTsPath;
|
|
68
|
+
const execArgv = [
|
|
69
|
+
...process.execArgv
|
|
70
|
+
];
|
|
71
|
+
if (!useCompiled && !execArgv.includes('ts-node/esm')) {
|
|
72
|
+
execArgv.push('--loader', 'ts-node/esm');
|
|
73
|
+
}
|
|
74
|
+
const env = {
|
|
75
|
+
...process.env,
|
|
76
|
+
TS_NODE_PROJECT: tsconfigPath
|
|
77
|
+
};
|
|
78
|
+
const childProcess = fork(workerPath, {
|
|
79
|
+
cwd: p2pRoot,
|
|
80
|
+
execArgv,
|
|
81
|
+
env
|
|
82
|
+
});
|
|
58
83
|
childProcess.send({
|
|
59
84
|
type: 'START',
|
|
60
85
|
config,
|
|
@@ -73,29 +98,54 @@ class WorkerClientManager {
|
|
|
73
98
|
});
|
|
74
99
|
// Create ready signal promise
|
|
75
100
|
const readySignal = new Promise((resolve, reject)=>{
|
|
76
|
-
|
|
101
|
+
let resolved = false;
|
|
77
102
|
const timeout = setTimeout(()=>{
|
|
103
|
+
if (resolved) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
resolved = true;
|
|
107
|
+
childProcess.off('message', messageHandler);
|
|
108
|
+
childProcess.off('exit', exitHandler);
|
|
78
109
|
reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
|
|
110
|
+
}, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
|
|
111
|
+
const messageHandler = (msg)=>{
|
|
112
|
+
if (resolved) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
|
|
82
116
|
if (msg.type === 'READY') {
|
|
117
|
+
resolved = true;
|
|
118
|
+
clearTimeout(timeout);
|
|
119
|
+
childProcess.off('message', messageHandler);
|
|
120
|
+
childProcess.off('exit', exitHandler);
|
|
121
|
+
if (typeof msg.peerId === 'string') {
|
|
122
|
+
this.peerIds[clientIndex] = msg.peerId;
|
|
123
|
+
}
|
|
83
124
|
resolve();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
125
|
+
} else if (msg.type === 'ERROR') {
|
|
126
|
+
resolved = true;
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
childProcess.off('message', messageHandler);
|
|
129
|
+
childProcess.off('exit', exitHandler);
|
|
87
130
|
reject(new Error(msg.error));
|
|
88
131
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
132
|
+
// Ignore other message types and keep waiting for READY/ERROR
|
|
133
|
+
};
|
|
134
|
+
const exitHandler = (code)=>{
|
|
135
|
+
if (resolved) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
resolved = true;
|
|
92
139
|
clearTimeout(timeout);
|
|
140
|
+
childProcess.off('message', messageHandler);
|
|
93
141
|
if (code === 0) {
|
|
94
142
|
resolve();
|
|
95
143
|
} else {
|
|
96
144
|
reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
|
|
97
145
|
}
|
|
98
|
-
}
|
|
146
|
+
};
|
|
147
|
+
childProcess.on('message', messageHandler);
|
|
148
|
+
childProcess.once('exit', exitHandler);
|
|
99
149
|
});
|
|
100
150
|
return [
|
|
101
151
|
childProcess,
|
|
@@ -103,34 +153,46 @@ class WorkerClientManager {
|
|
|
103
153
|
];
|
|
104
154
|
}
|
|
105
155
|
/**
|
|
106
|
-
* Creates a number of worker clients in separate processes
|
|
107
|
-
* All are configured to connect to each other and
|
|
156
|
+
* Creates a number of worker clients in separate processes.
|
|
157
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
108
158
|
*
|
|
109
159
|
* @param numberOfClients - The number of clients to create
|
|
160
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
110
161
|
* @returns The ENRs of the created clients
|
|
111
|
-
*/ async makeWorkerClients(numberOfClients) {
|
|
162
|
+
*/ async makeWorkerClients(numberOfClients, options = {}) {
|
|
112
163
|
try {
|
|
164
|
+
const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
|
|
165
|
+
const seedPeerLimit = options.seedPeerLimit ?? 10;
|
|
166
|
+
const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
|
|
167
|
+
const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
|
|
113
168
|
this.messageReceivedByClient = new Array(numberOfClients).fill(0);
|
|
114
169
|
this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
|
|
115
170
|
this.ports = await getPorts(numberOfClients);
|
|
116
171
|
this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
|
|
172
|
+
this.peerIds = new Array(numberOfClients);
|
|
117
173
|
this.processes = [];
|
|
118
174
|
const readySignals = [];
|
|
119
|
-
for(let
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
175
|
+
for(let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize){
|
|
176
|
+
const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
|
|
177
|
+
const batchPromises = [];
|
|
178
|
+
for(let i = batchStart; i < batchEnd; i++){
|
|
179
|
+
this.logger.info(`Creating client ${i}`);
|
|
180
|
+
const otherNodes = bootstrapMode === 'all' ? this.peerEnrs.filter((_, ind)=>ind !== i) : this.peerEnrs.filter((_, ind)=>ind < Math.min(i, seedPeerLimit));
|
|
181
|
+
const config = this.createClientConfig(i, this.ports[i], otherNodes);
|
|
182
|
+
const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
|
|
183
|
+
readySignals.push(readySignal);
|
|
184
|
+
batchPromises.push(readySignal);
|
|
185
|
+
this.processes.push(childProcess);
|
|
186
|
+
}
|
|
187
|
+
await Promise.all(batchPromises);
|
|
188
|
+
if (batchEnd < numberOfClients && batchDelayMs > 0) {
|
|
189
|
+
await sleep(batchDelayMs);
|
|
190
|
+
}
|
|
127
191
|
}
|
|
128
|
-
|
|
129
|
-
await sleep(10000);
|
|
130
|
-
// Wait for all peers to be booted up with timeout
|
|
192
|
+
await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
|
|
131
193
|
await Promise.race([
|
|
132
194
|
Promise.all(readySignals),
|
|
133
|
-
new Promise((_, reject)=>setTimeout(()=>reject(new Error('Timeout waiting for all workers to be ready')),
|
|
195
|
+
new Promise((_, reject)=>setTimeout(()=>reject(new Error('Timeout waiting for all workers to be ready')), BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS))
|
|
134
196
|
]);
|
|
135
197
|
return this.peerEnrs;
|
|
136
198
|
} catch (error) {
|
|
@@ -172,10 +234,9 @@ class WorkerClientManager {
|
|
|
172
234
|
const config = this.createClientConfig(clientIndex, newPort, otherNodes);
|
|
173
235
|
const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
|
|
174
236
|
this.processes[clientIndex] = childProcess;
|
|
175
|
-
// Wait for the process to be ready with a timeout
|
|
176
237
|
await Promise.race([
|
|
177
238
|
readySignal,
|
|
178
|
-
new Promise((_, reject)=>setTimeout(()=>reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)),
|
|
239
|
+
new Promise((_, reject)=>setTimeout(()=>reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)), BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS))
|
|
179
240
|
]);
|
|
180
241
|
} catch (error) {
|
|
181
242
|
this.logger.error(`Error during changePort for client ${clientIndex}:`, error);
|
|
@@ -191,15 +252,14 @@ class WorkerClientManager {
|
|
|
191
252
|
return Promise.resolve();
|
|
192
253
|
}
|
|
193
254
|
return new Promise((resolve)=>{
|
|
194
|
-
// Set a timeout for the graceful exit
|
|
195
255
|
const forceKillTimeout = setTimeout(()=>{
|
|
196
256
|
this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
|
|
197
257
|
try {
|
|
198
|
-
process1.kill('SIGKILL');
|
|
258
|
+
process1.kill('SIGKILL');
|
|
199
259
|
} catch (e) {
|
|
200
260
|
this.logger.error(`Error force killing process ${index}:`, e);
|
|
201
261
|
}
|
|
202
|
-
},
|
|
262
|
+
}, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
|
|
203
263
|
// Listen for process exit
|
|
204
264
|
process1.once('exit', ()=>{
|
|
205
265
|
clearTimeout(forceKillTimeout);
|
|
@@ -228,7 +288,6 @@ class WorkerClientManager {
|
|
|
228
288
|
this.logger.info(`Cleaning up ${this.processes.length} worker processes`);
|
|
229
289
|
// Create array of promises for each process termination
|
|
230
290
|
const terminationPromises = this.processes.map((process1, index)=>this.terminateProcess(process1, index));
|
|
231
|
-
// Wait for all processes to terminate with a timeout
|
|
232
291
|
try {
|
|
233
292
|
await Promise.race([
|
|
234
293
|
Promise.all(terminationPromises),
|
|
@@ -245,14 +304,142 @@ class WorkerClientManager {
|
|
|
245
304
|
}
|
|
246
305
|
});
|
|
247
306
|
resolve();
|
|
248
|
-
},
|
|
307
|
+
}, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
|
|
249
308
|
})
|
|
250
309
|
]);
|
|
251
310
|
} catch (error) {
|
|
252
311
|
this.logger.error('Error during cleanup:', error);
|
|
253
312
|
}
|
|
254
313
|
this.processes = [];
|
|
314
|
+
this.peerIds = [];
|
|
255
315
|
this.logger.info('All worker processes cleaned up');
|
|
256
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Run a req/resp benchmark across all worker clients.
|
|
319
|
+
*
|
|
320
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
321
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
322
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
323
|
+
*
|
|
324
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
325
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
326
|
+
*/ async runReqRespBenchmark(config) {
|
|
327
|
+
const peerCount = this.processes.length;
|
|
328
|
+
if (peerCount < 2) {
|
|
329
|
+
throw new Error('Need at least 2 peers to run req/resp benchmark');
|
|
330
|
+
}
|
|
331
|
+
const seed = config.seed ?? Date.now();
|
|
332
|
+
const blockNumber = config.blockNumber ?? 1;
|
|
333
|
+
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
334
|
+
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`);
|
|
335
|
+
const readyPromises = [];
|
|
336
|
+
for(let i = 1; i < peerCount; i++){
|
|
337
|
+
const cmd = {
|
|
338
|
+
type: 'BENCH_REQRESP',
|
|
339
|
+
txCount: config.txCount,
|
|
340
|
+
peerCount,
|
|
341
|
+
distribution: config.distribution,
|
|
342
|
+
collectorType: config.collectorType,
|
|
343
|
+
timeoutMs: config.timeoutMs,
|
|
344
|
+
isAggregator: false,
|
|
345
|
+
peerIndex: i,
|
|
346
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
347
|
+
pinnedPeerId,
|
|
348
|
+
blockNumber,
|
|
349
|
+
seed
|
|
350
|
+
};
|
|
351
|
+
this.processes[i].send(cmd);
|
|
352
|
+
readyPromises.push(this.waitForBenchReady(i, 30000));
|
|
353
|
+
}
|
|
354
|
+
await Promise.all(readyPromises);
|
|
355
|
+
this.logger.info('All responder peers ready, starting aggregator benchmark...');
|
|
356
|
+
const aggregatorCmd = {
|
|
357
|
+
type: 'BENCH_REQRESP',
|
|
358
|
+
txCount: config.txCount,
|
|
359
|
+
peerCount,
|
|
360
|
+
distribution: config.distribution,
|
|
361
|
+
collectorType: config.collectorType,
|
|
362
|
+
timeoutMs: config.timeoutMs,
|
|
363
|
+
isAggregator: true,
|
|
364
|
+
peerIndex: 0,
|
|
365
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
366
|
+
pinnedPeerId,
|
|
367
|
+
blockNumber,
|
|
368
|
+
seed
|
|
369
|
+
};
|
|
370
|
+
this.processes[0].send(aggregatorCmd);
|
|
371
|
+
const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
|
|
372
|
+
this.logger.info(`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`);
|
|
373
|
+
return {
|
|
374
|
+
txCount: config.txCount,
|
|
375
|
+
distribution: config.distribution,
|
|
376
|
+
collector: config.collectorType,
|
|
377
|
+
durationMs: result.durationMs,
|
|
378
|
+
fetchedCount: result.fetchedCount,
|
|
379
|
+
success: result.success,
|
|
380
|
+
error: result.error
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
waitForBenchReady(clientIndex, timeoutMs) {
|
|
384
|
+
return new Promise((resolve, reject)=>{
|
|
385
|
+
let resolved = false;
|
|
386
|
+
const handler = (msg)=>{
|
|
387
|
+
if (resolved) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
if (msg.type === 'BENCH_READY') {
|
|
391
|
+
resolved = true;
|
|
392
|
+
clearTimeout(timeout);
|
|
393
|
+
this.processes[clientIndex].off('message', handler);
|
|
394
|
+
resolve();
|
|
395
|
+
} else if (msg.type === 'ERROR') {
|
|
396
|
+
resolved = true;
|
|
397
|
+
clearTimeout(timeout);
|
|
398
|
+
this.processes[clientIndex].off('message', handler);
|
|
399
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
const timeout = setTimeout(()=>{
|
|
403
|
+
if (resolved) {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
resolved = true;
|
|
407
|
+
this.processes[clientIndex].off('message', handler);
|
|
408
|
+
reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
|
|
409
|
+
}, timeoutMs);
|
|
410
|
+
this.processes[clientIndex].on('message', handler);
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
waitForBenchResult(clientIndex, timeoutMs) {
|
|
414
|
+
return new Promise((resolve, reject)=>{
|
|
415
|
+
let resolved = false;
|
|
416
|
+
const handler = (msg)=>{
|
|
417
|
+
if (resolved) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (msg.type === 'BENCH_RESULT') {
|
|
421
|
+
resolved = true;
|
|
422
|
+
clearTimeout(timeout);
|
|
423
|
+
this.processes[clientIndex].off('message', handler);
|
|
424
|
+
resolve(msg);
|
|
425
|
+
} else if (msg.type === 'ERROR') {
|
|
426
|
+
resolved = true;
|
|
427
|
+
clearTimeout(timeout);
|
|
428
|
+
this.processes[clientIndex].off('message', handler);
|
|
429
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
const timeout = setTimeout(()=>{
|
|
433
|
+
if (resolved) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
resolved = true;
|
|
437
|
+
this.processes[clientIndex].off('message', handler);
|
|
438
|
+
reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
|
|
439
|
+
}, timeoutMs);
|
|
440
|
+
this.processes[clientIndex].on('message', handler);
|
|
441
|
+
});
|
|
442
|
+
}
|
|
257
443
|
}
|
|
258
444
|
export { WorkerClientManager, testChainConfig };
|
|
445
|
+
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.e310a4c8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
25
25
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
26
26
|
"start": "node ./dest",
|
|
27
|
-
"start:dev": "concurrently -k \"
|
|
27
|
+
"start:dev": "concurrently -k \"../scripts/tsc.sh --watch\" \"nodemon --watch dest --exec yarn start\""
|
|
28
28
|
},
|
|
29
29
|
"inherits": [
|
|
30
30
|
"../package.common.json"
|
|
@@ -67,17 +67,17 @@
|
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
72
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
73
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
74
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
75
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
78
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
79
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
80
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.e310a4c8",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.e310a4c8",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.e310a4c8",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.e310a4c8",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.e310a4c8",
|
|
75
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.e310a4c8",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.e310a4c8",
|
|
77
|
+
"@aztec/protocol-contracts": "0.0.1-commit.e310a4c8",
|
|
78
|
+
"@aztec/simulator": "0.0.1-commit.e310a4c8",
|
|
79
|
+
"@aztec/stdlib": "0.0.1-commit.e310a4c8",
|
|
80
|
+
"@aztec/telemetry-client": "0.0.1-commit.e310a4c8",
|
|
81
81
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
82
82
|
"@chainsafe/libp2p-noise": "^15.0.0",
|
|
83
83
|
"@chainsafe/libp2p-yamux": "^6.0.2",
|
|
@@ -104,12 +104,12 @@
|
|
|
104
104
|
"xxhash-wasm": "^1.1.0"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
108
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
107
|
+
"@aztec/archiver": "0.0.1-commit.e310a4c8",
|
|
108
|
+
"@aztec/world-state": "0.0.1-commit.e310a4c8",
|
|
109
109
|
"@jest/globals": "^30.0.0",
|
|
110
110
|
"@types/jest": "^30.0.0",
|
|
111
111
|
"@types/node": "^22.15.17",
|
|
112
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
112
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
113
113
|
"get-port": "^7.1.0",
|
|
114
114
|
"it-drain": "^3.0.5",
|
|
115
115
|
"it-length": "^3.0.6",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
3
|
import type { P2PBootstrapApi } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -18,12 +18,15 @@ import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js
|
|
|
18
18
|
export class BootstrapNode implements P2PBootstrapApi {
|
|
19
19
|
private node?: Discv5EventEmitter = undefined;
|
|
20
20
|
private peerId?: PeerId;
|
|
21
|
+
private logger: Logger;
|
|
21
22
|
|
|
22
23
|
constructor(
|
|
23
24
|
private store: AztecAsyncKVStore,
|
|
24
25
|
private telemetry: TelemetryClient,
|
|
25
|
-
|
|
26
|
-
) {
|
|
26
|
+
bindings?: LoggerBindings,
|
|
27
|
+
) {
|
|
28
|
+
this.logger = createLogger('p2p:bootstrap', bindings);
|
|
29
|
+
}
|
|
27
30
|
|
|
28
31
|
/**
|
|
29
32
|
* Starts the bootstrap node.
|
|
@@ -65,7 +68,7 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
65
68
|
|
|
66
69
|
this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
|
|
67
70
|
|
|
68
|
-
const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
|
|
71
|
+
const metricsRegistry = new OtelMetricsAdapter(this.telemetry, this.logger.getBindings());
|
|
69
72
|
this.node = Discv5.create({
|
|
70
73
|
enr: ourEnr,
|
|
71
74
|
peerId,
|
package/src/client/factory.ts
CHANGED
|
@@ -26,7 +26,7 @@ import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerI
|
|
|
26
26
|
export type P2PClientDeps<T extends P2PClientType> = {
|
|
27
27
|
txPool?: TxPool;
|
|
28
28
|
store?: AztecAsyncKVStore;
|
|
29
|
-
attestationPool?:
|
|
29
|
+
attestationPool?: AttestationPool;
|
|
30
30
|
logger?: Logger;
|
|
31
31
|
txCollectionNodeSources?: TxSource[];
|
|
32
32
|
p2pServiceFactory?: (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService<T>>;
|
|
@@ -62,30 +62,21 @@ export async function createP2PClient<T extends P2PClientType>(
|
|
|
62
62
|
);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
1,
|
|
71
|
-
config,
|
|
72
|
-
createLogger('p2p-attestation:lmdb-v2'),
|
|
73
|
-
);
|
|
65
|
+
const bindings = logger.getBindings();
|
|
66
|
+
const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
|
|
67
|
+
const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
|
|
68
|
+
const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
|
|
69
|
+
const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
|
|
74
70
|
const l1Constants = await archiver.getL1Constants();
|
|
75
71
|
|
|
76
|
-
const mempools: MemPools
|
|
72
|
+
const mempools: MemPools = {
|
|
77
73
|
txPool:
|
|
78
74
|
deps.txPool ??
|
|
79
75
|
new AztecKVTxPool(store, archive, worldStateSynchronizer, telemetry, {
|
|
80
|
-
|
|
76
|
+
maxPendingTxCount: config.maxPendingTxCount,
|
|
81
77
|
archivedTxLimit: config.archivedTxLimit,
|
|
82
78
|
}),
|
|
83
|
-
attestationPool:
|
|
84
|
-
clientType === P2PClientType.Full
|
|
85
|
-
? ((deps.attestationPool ?? new KvAttestationPool(attestationStore, telemetry)) as T extends P2PClientType.Full
|
|
86
|
-
? AttestationPool
|
|
87
|
-
: undefined)
|
|
88
|
-
: undefined,
|
|
79
|
+
attestationPool: deps.attestationPool ?? new KvAttestationPool(attestationStore, telemetry),
|
|
89
80
|
};
|
|
90
81
|
|
|
91
82
|
const p2pService = await createP2PService<T>(
|
|
@@ -115,7 +106,7 @@ export async function createP2PClient<T extends P2PClientType>(
|
|
|
115
106
|
}
|
|
116
107
|
|
|
117
108
|
const txCollection = new TxCollection(
|
|
118
|
-
p2pService,
|
|
109
|
+
p2pService.getBatchTxRequesterService(),
|
|
119
110
|
nodeSources,
|
|
120
111
|
l1Constants,
|
|
121
112
|
mempools.txPool,
|
|
@@ -147,7 +138,7 @@ async function createP2PService<T extends P2PClientType>(
|
|
|
147
138
|
epochCache: EpochCacheInterface,
|
|
148
139
|
store: AztecAsyncKVStore,
|
|
149
140
|
peerStore: AztecLMDBStoreV2,
|
|
150
|
-
mempools: MemPools
|
|
141
|
+
mempools: MemPools,
|
|
151
142
|
p2pServiceFactory: P2PClientDeps<T>['p2pServiceFactory'],
|
|
152
143
|
packageVersion: string,
|
|
153
144
|
logger: Logger,
|
package/src/client/interface.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
|
|
2
2
|
import type { P2PApiFull } from '@aztec/stdlib/interfaces/server';
|
|
3
|
-
import type {
|
|
3
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PClientType } from '@aztec/stdlib/p2p';
|
|
4
4
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
5
|
|
|
6
6
|
import type { PeerId } from '@libp2p/interface';
|
|
@@ -13,7 +13,7 @@ import type {
|
|
|
13
13
|
ReqRespSubProtocolHandler,
|
|
14
14
|
ReqRespSubProtocolValidators,
|
|
15
15
|
} from '../services/reqresp/interface.js';
|
|
16
|
-
import type { P2PBlockReceivedCallback } from '../services/service.js';
|
|
16
|
+
import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Enum defining the possible states of the p2p client.
|
|
@@ -50,8 +50,15 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
|
|
|
50
50
|
*/
|
|
51
51
|
broadcastProposal(proposal: BlockProposal): Promise<void>;
|
|
52
52
|
|
|
53
|
-
/**
|
|
54
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Broadcasts a checkpoint proposal (last block in a checkpoint) to other peers.
|
|
55
|
+
*
|
|
56
|
+
* @param proposal - the checkpoint proposal
|
|
57
|
+
*/
|
|
58
|
+
broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
|
|
59
|
+
|
|
60
|
+
/** Broadcasts checkpoint attestations to other peers. */
|
|
61
|
+
broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
|
|
55
62
|
|
|
56
63
|
/**
|
|
57
64
|
* Registers a callback from the validator client that determines how to behave when
|
|
@@ -63,6 +70,14 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
|
|
|
63
70
|
// ^ This pattern is not my favorite (md)
|
|
64
71
|
registerBlockProposalHandler(callback: P2PBlockReceivedCallback): void;
|
|
65
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Registers a callback from the validator client that determines how to behave when
|
|
75
|
+
* foreign checkpoint proposals are received
|
|
76
|
+
*
|
|
77
|
+
* @param handler - A function taking a received checkpoint proposal and producing attestations
|
|
78
|
+
*/
|
|
79
|
+
registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
80
|
+
|
|
66
81
|
/**
|
|
67
82
|
* Request a list of transactions from another peer by their tx hashes.
|
|
68
83
|
* @param txHashes - Hashes of the txs to query.
|