@aztec/p2p 0.0.1-commit.a89ec08 → 0.0.1-commit.aa0c64f
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 +7 -6
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +5 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +33 -23
- package/dest/client/interface.d.ts +48 -11
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +34 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +105 -44
- package/dest/config.d.ts +147 -111
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +78 -32
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +101 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +274 -197
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +224 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +12 -5
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +38 -17
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -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 +1 -7
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +39 -9
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -7
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +20 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
- 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 +225 -118
- 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 +8 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/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 +1 -0
- package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +29 -16
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +119 -23
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +15 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +15 -16
- package/dest/services/encoding.d.ts +19 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +25 -15
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +45 -47
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +409 -303
- 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 +20 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +83 -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 +4 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_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 +60 -209
- package/dest/services/service.d.ts +25 -12
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +1 -1
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +4 -1
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +23 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +44 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +47 -14
- 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 +102 -40
- package/dest/testbench/worker_client_manager.d.ts +10 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +53 -10
- package/dest/util.d.ts +12 -7
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +50 -25
- package/src/client/interface.ts +44 -17
- package/src/client/p2p_client.ts +125 -77
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +156 -44
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +329 -243
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +27 -17
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +38 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +24 -12
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +23 -6
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +250 -122
- package/src/msg_validators/attestation_validator/README.md +1 -1
- 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 +4 -4
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
- package/src/msg_validators/proposal_validator/proposal_validator.ts +95 -12
- package/src/msg_validators/tx_validator/README.md +13 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/data_validator.ts +2 -0
- package/src/msg_validators/tx_validator/factory.ts +37 -20
- package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
- 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 +20 -39
- package/src/services/encoding.ts +28 -20
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +457 -341
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +91 -25
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +2 -37
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +19 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
- package/src/services/reqresp/reqresp.ts +71 -252
- package/src/services/service.ts +31 -28
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +2 -1
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +4 -1
- package/src/test-helpers/mock-pubsub.ts +46 -60
- package/src/test-helpers/reqresp-nodes.ts +13 -23
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +62 -28
- package/src/testbench/p2p_client_testbench_worker.ts +110 -57
- package/src/testbench/worker_client_manager.ts +61 -21
- package/src/util.ts +33 -18
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
- 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 -402
- 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/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
- 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 -321
- package/src/msg_validators/clock_tolerance.ts +0 -51
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FifoSet } from '@aztec/foundation/fifo-set';
|
|
1
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { RunningPromise } from '@aztec/foundation/promise';
|
|
3
4
|
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
@@ -10,6 +11,8 @@ import type { TxPoolV2 } from '../../mem_pools/index.js';
|
|
|
10
11
|
import type { TxFileStoreConfig } from './config.js';
|
|
11
12
|
import { TxFileStoreInstrumentation } from './instrumentation.js';
|
|
12
13
|
|
|
14
|
+
const MAX_RECENT_UPLOADS = 1000;
|
|
15
|
+
|
|
13
16
|
/**
|
|
14
17
|
* Uploads validated transactions to a file store as a fallback retrieval mechanism.
|
|
15
18
|
* Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
|
|
@@ -21,9 +24,7 @@ export class TxFileStore {
|
|
|
21
24
|
private readonly handleTxsAdded: (args: { txs: Tx[]; source?: string }) => void;
|
|
22
25
|
|
|
23
26
|
/** Recently uploaded tx hashes for deduplication. */
|
|
24
|
-
private recentUploads
|
|
25
|
-
private recentUploadsOrder: string[] = [];
|
|
26
|
-
private readonly maxRecentUploads = 1000;
|
|
27
|
+
private recentUploads = FifoSet.withLimit<string>(MAX_RECENT_UPLOADS);
|
|
27
28
|
|
|
28
29
|
private constructor(
|
|
29
30
|
private readonly fileStore: FileStore,
|
|
@@ -127,24 +128,11 @@ export class TxFileStore {
|
|
|
127
128
|
const path = `${this.basePath}/txs/${txHash}.bin`;
|
|
128
129
|
const timer = new Timer();
|
|
129
130
|
|
|
130
|
-
if (this.recentUploads.
|
|
131
|
+
if (!this.recentUploads.addIfAbsent(txHash)) {
|
|
131
132
|
return;
|
|
132
133
|
}
|
|
133
134
|
|
|
134
135
|
try {
|
|
135
|
-
this.recentUploads.add(txHash);
|
|
136
|
-
this.recentUploadsOrder.push(txHash);
|
|
137
|
-
|
|
138
|
-
if (this.recentUploadsOrder.length > this.maxRecentUploads) {
|
|
139
|
-
// delete old entries in recentUploads
|
|
140
|
-
for (const txHashToRemove of this.recentUploadsOrder.splice(
|
|
141
|
-
0,
|
|
142
|
-
this.recentUploadsOrder.length - this.maxRecentUploads,
|
|
143
|
-
)) {
|
|
144
|
-
this.recentUploads.delete(txHashToRemove);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
136
|
await retry(
|
|
149
137
|
() => this.fileStore.save(path, tx.toBuffer(), { compress: true }),
|
|
150
138
|
`Uploading tx ${txHash}`,
|
|
@@ -32,6 +32,11 @@ export class TxProvider implements ITxProvider {
|
|
|
32
32
|
this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
/** Returns whether each tx hash is currently in the local tx pool. */
|
|
36
|
+
public hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
|
|
37
|
+
return this.txPool.hasTxs(txHashes);
|
|
38
|
+
}
|
|
39
|
+
|
|
35
40
|
/** Returns txs from the tx pool given their hashes.*/
|
|
36
41
|
public async getAvailableTxs(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
|
|
37
42
|
const response = await this.txPool.getTxsByHash(txHashes);
|
|
@@ -4,9 +4,10 @@ import { SecretValue } from '@aztec/foundation/config';
|
|
|
4
4
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
6
6
|
import { sleep } from '@aztec/foundation/sleep';
|
|
7
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
8
7
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
8
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
9
9
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
10
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
10
11
|
|
|
11
12
|
import { createP2PClient } from '../client/index.js';
|
|
12
13
|
import type { P2PClient } from '../client/p2p_client.js';
|
|
@@ -102,6 +103,7 @@ export async function makeTestP2PClient(
|
|
|
102
103
|
proofVerifier,
|
|
103
104
|
mockWorldState,
|
|
104
105
|
mockEpochCache,
|
|
106
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
105
107
|
'test-p2p-client',
|
|
106
108
|
undefined,
|
|
107
109
|
undefined,
|
|
@@ -112,6 +114,7 @@ export async function makeTestP2PClient(
|
|
|
112
114
|
logger,
|
|
113
115
|
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork),
|
|
114
116
|
},
|
|
117
|
+
await l2BlockSource.getInitialHeader().hash(),
|
|
115
118
|
);
|
|
116
119
|
|
|
117
120
|
return client;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
4
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
5
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
5
6
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
7
|
+
import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
|
|
6
8
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
7
9
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
8
10
|
|
|
@@ -21,15 +23,12 @@ import type { MemPools } from '../mem_pools/interface.js';
|
|
|
21
23
|
import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
|
|
22
24
|
import type { P2PReqRespConfig } from '../services/reqresp/config.js';
|
|
23
25
|
import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
type ReqRespSubProtocolValidators,
|
|
31
|
-
type SubProtocolMap,
|
|
32
|
-
responseFromBuffer,
|
|
26
|
+
import type {
|
|
27
|
+
ReqRespInterface,
|
|
28
|
+
ReqRespResponse,
|
|
29
|
+
ReqRespSubProtocol,
|
|
30
|
+
ReqRespSubProtocolHandler,
|
|
31
|
+
ReqRespSubProtocolHandlers,
|
|
33
32
|
} from '../services/reqresp/interface.js';
|
|
34
33
|
import { ReqRespStatus } from '../services/reqresp/status.js';
|
|
35
34
|
import { GossipSubEvent } from '../types/index.js';
|
|
@@ -55,6 +54,7 @@ export function getMockPubSubP2PServiceFactory(
|
|
|
55
54
|
proofVerifier: ClientProtocolCircuitVerifier;
|
|
56
55
|
worldStateSynchronizer: WorldStateSynchronizer;
|
|
57
56
|
peerStore: AztecAsyncKVStore;
|
|
57
|
+
blockMinFeesProvider: BlockMinFeesProvider;
|
|
58
58
|
telemetry: TelemetryClient;
|
|
59
59
|
logger: Logger;
|
|
60
60
|
},
|
|
@@ -75,6 +75,7 @@ export function getMockPubSubP2PServiceFactory(
|
|
|
75
75
|
deps.epochCache,
|
|
76
76
|
deps.proofVerifier,
|
|
77
77
|
deps.worldStateSynchronizer,
|
|
78
|
+
deps.blockMinFeesProvider,
|
|
78
79
|
deps.telemetry,
|
|
79
80
|
deps.logger,
|
|
80
81
|
);
|
|
@@ -85,8 +86,8 @@ export function getMockPubSubP2PServiceFactory(
|
|
|
85
86
|
|
|
86
87
|
/**
|
|
87
88
|
* Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
|
|
88
|
-
* When a peer calls
|
|
89
|
-
*
|
|
89
|
+
* When a peer calls sendRequestToPeer, the mock looks up the target peer's registered handler for the
|
|
90
|
+
* sub-protocol and invokes it, simulating the request-response protocol without actual libp2p streams.
|
|
90
91
|
*/
|
|
91
92
|
class MockReqResp implements ReqRespInterface {
|
|
92
93
|
private handlers: Partial<ReqRespSubProtocolHandlers> = {};
|
|
@@ -100,20 +101,14 @@ class MockReqResp implements ReqRespInterface {
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
104
|
+
setShouldRejectPeer(): void {}
|
|
103
105
|
|
|
104
|
-
start(
|
|
105
|
-
subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
|
|
106
|
-
_subProtocolValidators: ReqRespSubProtocolValidators,
|
|
107
|
-
): Promise<void> {
|
|
106
|
+
start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void> {
|
|
108
107
|
Object.assign(this.handlers, subProtocolHandlers);
|
|
109
108
|
return Promise.resolve();
|
|
110
109
|
}
|
|
111
110
|
|
|
112
|
-
addSubProtocol(
|
|
113
|
-
subProtocol: ReqRespSubProtocol,
|
|
114
|
-
handler: ReqRespSubProtocolHandler,
|
|
115
|
-
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
116
|
-
): Promise<void> {
|
|
111
|
+
addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
117
112
|
this.handlers[subProtocol] = handler;
|
|
118
113
|
return Promise.resolve();
|
|
119
114
|
}
|
|
@@ -127,41 +122,6 @@ class MockReqResp implements ReqRespInterface {
|
|
|
127
122
|
return this.handlers[subProtocol];
|
|
128
123
|
}
|
|
129
124
|
|
|
130
|
-
async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
131
|
-
subProtocol: SubProtocol,
|
|
132
|
-
requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
|
|
133
|
-
pinnedPeer: PeerId | undefined,
|
|
134
|
-
_timeoutMs?: number,
|
|
135
|
-
_maxPeers?: number,
|
|
136
|
-
_maxRetryAttempts?: number,
|
|
137
|
-
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
|
|
138
|
-
const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
|
|
139
|
-
const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
|
|
140
|
-
const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
|
|
141
|
-
|
|
142
|
-
for (const request of requests) {
|
|
143
|
-
const requestBuffer = request.toBuffer();
|
|
144
|
-
for (const peer of targetPeers) {
|
|
145
|
-
const handler = peer.getHandler(subProtocol);
|
|
146
|
-
if (!handler) {
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
try {
|
|
150
|
-
const responseBuffer = await handler(this.peerId, requestBuffer);
|
|
151
|
-
if (responseBuffer.length > 0) {
|
|
152
|
-
const response = responseFromBuffer(subProtocol, responseBuffer);
|
|
153
|
-
responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
} catch (err) {
|
|
157
|
-
this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return responses;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
125
|
async sendRequestToPeer(
|
|
166
126
|
peerId: PeerId,
|
|
167
127
|
subProtocol: ReqRespSubProtocol,
|
|
@@ -174,7 +134,12 @@ class MockReqResp implements ReqRespInterface {
|
|
|
174
134
|
return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
|
|
175
135
|
}
|
|
176
136
|
try {
|
|
137
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
138
|
+
if (delayMs > 0) {
|
|
139
|
+
await sleep(delayMs);
|
|
140
|
+
}
|
|
177
141
|
const data = await handler(this.peerId, payload);
|
|
142
|
+
|
|
178
143
|
return { status: ReqRespStatus.SUCCESS, data };
|
|
179
144
|
} catch {
|
|
180
145
|
return { status: ReqRespStatus.FAILURE };
|
|
@@ -212,6 +177,13 @@ export class MockPubSub implements PubSubLibp2p {
|
|
|
212
177
|
get services() {
|
|
213
178
|
return {
|
|
214
179
|
pubsub: this.gossipSub,
|
|
180
|
+
components: {
|
|
181
|
+
addressManager: {
|
|
182
|
+
addObservedAddr: () => {},
|
|
183
|
+
confirmObservedAddr: () => {},
|
|
184
|
+
removeObservedAddr: () => {},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
215
187
|
};
|
|
216
188
|
}
|
|
217
189
|
|
|
@@ -242,10 +214,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
242
214
|
score: (_peerId: PeerIdStr) => 0,
|
|
243
215
|
};
|
|
244
216
|
|
|
245
|
-
publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
217
|
+
async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
246
218
|
this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
|
|
247
|
-
this.network.publishToPeers(topic, data, this.peerId);
|
|
248
|
-
return
|
|
219
|
+
await this.network.publishToPeers(topic, data, this.peerId);
|
|
220
|
+
return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
|
|
249
221
|
}
|
|
250
222
|
|
|
251
223
|
receive(msg: GossipsubMessage) {
|
|
@@ -281,7 +253,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
281
253
|
|
|
282
254
|
/**
|
|
283
255
|
* Mock gossip sub network used for testing.
|
|
284
|
-
* All instances of MockGossipSubService connected to the same network
|
|
256
|
+
* All instances of MockGossipSubService connected to the same network receive the same messages,
|
|
257
|
+
* optionally delayed by a configurable propagation time.
|
|
285
258
|
*/
|
|
286
259
|
export class MockGossipSubNetwork {
|
|
287
260
|
private peers: MockGossipSubService[] = [];
|
|
@@ -290,6 +263,15 @@ export class MockGossipSubNetwork {
|
|
|
290
263
|
|
|
291
264
|
private logger = createLogger('p2p:test:mock-gossipsub-network');
|
|
292
265
|
|
|
266
|
+
constructor(
|
|
267
|
+
/** Artificial propagation delay in milliseconds applied to each message delivery. */
|
|
268
|
+
private propagationDelayMs: number = 0,
|
|
269
|
+
) {}
|
|
270
|
+
|
|
271
|
+
public getPropagationDelayMs(): number {
|
|
272
|
+
return this.propagationDelayMs;
|
|
273
|
+
}
|
|
274
|
+
|
|
293
275
|
public getPeers(): PeerId[] {
|
|
294
276
|
return this.peers.map(peer => peer.peerId);
|
|
295
277
|
}
|
|
@@ -306,7 +288,7 @@ export class MockGossipSubNetwork {
|
|
|
306
288
|
return this.reqRespPeers;
|
|
307
289
|
}
|
|
308
290
|
|
|
309
|
-
public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
|
|
291
|
+
public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
|
|
310
292
|
const msgId = (this.nextMsgId++).toString();
|
|
311
293
|
this.logger.debug(`Network is distributing message on topic ${topic}`, {
|
|
312
294
|
topic,
|
|
@@ -315,6 +297,10 @@ export class MockGossipSubNetwork {
|
|
|
315
297
|
msgId,
|
|
316
298
|
});
|
|
317
299
|
|
|
300
|
+
if (this.propagationDelayMs > 0) {
|
|
301
|
+
await sleep(this.propagationDelayMs);
|
|
302
|
+
}
|
|
303
|
+
|
|
318
304
|
const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
|
|
319
305
|
for (const peer of this.peers) {
|
|
320
306
|
if (peer.subscribedTopics.has(topic)) {
|
|
@@ -2,16 +2,17 @@ import type { EpochCache } from '@aztec/epoch-cache';
|
|
|
2
2
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
3
|
import { SecretValue } from '@aztec/foundation/config';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
5
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
6
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
8
7
|
import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
|
|
9
8
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
9
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
10
10
|
import type {
|
|
11
11
|
ClientProtocolCircuitVerifier,
|
|
12
12
|
IVCProofVerificationResult,
|
|
13
13
|
WorldStateSynchronizer,
|
|
14
14
|
} from '@aztec/stdlib/interfaces/server';
|
|
15
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
15
16
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
16
17
|
import { compressComponentVersions } from '@aztec/stdlib/versioning';
|
|
17
18
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -30,7 +31,7 @@ import getPort from 'get-port';
|
|
|
30
31
|
import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
|
|
31
32
|
|
|
32
33
|
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
33
|
-
import type
|
|
34
|
+
import { type BootnodeConfig, DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from '../config.js';
|
|
34
35
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
35
36
|
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
36
37
|
import { APP_SPECIFIC_WEIGHT } from '../services/gossipsub/scoring.js';
|
|
@@ -42,8 +43,6 @@ import {
|
|
|
42
43
|
ReqRespSubProtocol,
|
|
43
44
|
type ReqRespSubProtocolHandlers,
|
|
44
45
|
type ReqRespSubProtocolRateLimits,
|
|
45
|
-
type ReqRespSubProtocolValidators,
|
|
46
|
-
noopValidator,
|
|
47
46
|
} from '../services/reqresp/interface.js';
|
|
48
47
|
import { pingHandler } from '../services/reqresp/protocols/index.js';
|
|
49
48
|
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
@@ -76,6 +75,10 @@ export async function createLibp2pNode(
|
|
|
76
75
|
identify: identify({
|
|
77
76
|
protocolPrefix: 'aztec',
|
|
78
77
|
}),
|
|
78
|
+
components: (components: { connectionManager: any; addressManager: any }) => ({
|
|
79
|
+
connectionManager: components.connectionManager,
|
|
80
|
+
addressManager: components.addressManager,
|
|
81
|
+
}),
|
|
79
82
|
},
|
|
80
83
|
};
|
|
81
84
|
|
|
@@ -153,6 +156,8 @@ export async function createTestLibP2PService(
|
|
|
153
156
|
epochCache,
|
|
154
157
|
);
|
|
155
158
|
|
|
159
|
+
reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
|
|
160
|
+
|
|
156
161
|
p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
|
|
157
162
|
p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
|
|
158
163
|
peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
@@ -168,6 +173,7 @@ export async function createTestLibP2PService(
|
|
|
168
173
|
epochCache,
|
|
169
174
|
proofVerifier,
|
|
170
175
|
worldStateSynchronizer,
|
|
176
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
171
177
|
telemetry,
|
|
172
178
|
);
|
|
173
179
|
}
|
|
@@ -187,23 +193,10 @@ export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
|
|
|
187
193
|
[ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
|
|
188
194
|
[ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
|
|
189
195
|
[ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
|
|
190
|
-
[ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
|
|
191
196
|
[ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
|
|
192
197
|
[ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
|
|
193
198
|
};
|
|
194
199
|
|
|
195
|
-
// By default, all requests are valid
|
|
196
|
-
// If you want to test an invalid response, you can override the validator
|
|
197
|
-
export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
|
|
198
|
-
[ReqRespSubProtocol.PING]: noopValidator,
|
|
199
|
-
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
200
|
-
[ReqRespSubProtocol.TX]: noopValidator,
|
|
201
|
-
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
202
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator,
|
|
203
|
-
[ReqRespSubProtocol.AUTH]: noopValidator,
|
|
204
|
-
[ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
|
|
205
|
-
};
|
|
206
|
-
|
|
207
200
|
/**
|
|
208
201
|
* @param numberOfNodes - the number of nodes to create
|
|
209
202
|
* @returns An array of the created nodes
|
|
@@ -216,13 +209,9 @@ export const createNodes = (
|
|
|
216
209
|
return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
|
|
217
210
|
};
|
|
218
211
|
|
|
219
|
-
export const startNodes = async (
|
|
220
|
-
nodes: ReqRespNode[],
|
|
221
|
-
subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS,
|
|
222
|
-
subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS,
|
|
223
|
-
) => {
|
|
212
|
+
export const startNodes = async (nodes: ReqRespNode[], subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS) => {
|
|
224
213
|
for (const node of nodes) {
|
|
225
|
-
await node.req.start(subProtocolHandlers
|
|
214
|
+
await node.req.start(subProtocolHandlers);
|
|
226
215
|
}
|
|
227
216
|
};
|
|
228
217
|
|
|
@@ -290,6 +279,7 @@ export function createBootstrapNodeConfig(privateKey: string, port: number, chai
|
|
|
290
279
|
bootstrapNodes: [],
|
|
291
280
|
listenAddress: '127.0.0.1',
|
|
292
281
|
queryForIp: false,
|
|
282
|
+
publicIpServices: DEFAULT_PUBLIC_IP_SERVICES,
|
|
293
283
|
};
|
|
294
284
|
}
|
|
295
285
|
|
|
@@ -31,6 +31,11 @@ export class TestTxProvider implements ITxProvider {
|
|
|
31
31
|
return this.getTxsByHashes(txHashes);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/** Returns whether each tx hash is in the seeded collection. */
|
|
35
|
+
hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
|
|
36
|
+
return Promise.resolve(txHashes.map(h => this.txs.has(h.toString())));
|
|
37
|
+
}
|
|
38
|
+
|
|
34
39
|
/** Get txs for a block proposal, returning any seeded txs that match the requested hashes. */
|
|
35
40
|
getTxsForBlockProposal(
|
|
36
41
|
blockProposal: BlockProposal,
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { CheckpointProposalHash } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
5
|
import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
|
|
5
6
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
6
|
-
import type {
|
|
7
|
-
BlockProposal,
|
|
8
|
-
CheckpointAttestation,
|
|
9
|
-
CheckpointProposal,
|
|
10
|
-
CheckpointProposalCore,
|
|
11
|
-
} from '@aztec/stdlib/p2p';
|
|
7
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore } from '@aztec/stdlib/p2p';
|
|
12
8
|
import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
13
9
|
|
|
14
10
|
import EventEmitter from 'events';
|
|
@@ -123,6 +119,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
123
119
|
return Promise.resolve();
|
|
124
120
|
}
|
|
125
121
|
|
|
122
|
+
unprotectTxs(_txHashes: TxHash[], _slotNumber: SlotNumber): Promise<void> {
|
|
123
|
+
return Promise.resolve();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
126
|
handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
|
|
127
127
|
return Promise.resolve();
|
|
128
128
|
}
|
|
@@ -171,6 +171,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
171
171
|
return Promise.resolve(this.txsByHash.size);
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
async hasEligiblePendingTxs(minCount: number): Promise<boolean> {
|
|
175
|
+
return (await this.getPendingTxCount()) >= minCount;
|
|
176
|
+
}
|
|
177
|
+
|
|
174
178
|
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
|
|
175
179
|
return Promise.resolve([]);
|
|
176
180
|
}
|
|
@@ -214,6 +218,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
214
218
|
*/
|
|
215
219
|
export class InMemoryAttestationPool {
|
|
216
220
|
private proposals = new Map<string, BlockProposal>();
|
|
221
|
+
private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
|
|
217
222
|
|
|
218
223
|
tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
|
|
219
224
|
const id = blockProposal.archive.toString();
|
|
@@ -225,16 +230,33 @@ export class InMemoryAttestationPool {
|
|
|
225
230
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
226
231
|
}
|
|
227
232
|
|
|
228
|
-
|
|
233
|
+
getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
|
|
229
234
|
return Promise.resolve(this.proposals.get(id));
|
|
230
235
|
}
|
|
231
236
|
|
|
232
|
-
tryAddCheckpointProposal(
|
|
237
|
+
tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
|
|
238
|
+
const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
|
|
239
|
+
proposals.push(proposal);
|
|
240
|
+
this.checkpoints.set(proposal.slotNumber, proposals);
|
|
233
241
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
234
242
|
}
|
|
235
243
|
|
|
236
|
-
getCheckpointProposal(
|
|
237
|
-
return Promise.resolve(
|
|
244
|
+
getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
|
|
245
|
+
return Promise.resolve(this.checkpoints.get(slot)?.[0]);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
|
|
249
|
+
return Promise.resolve(this.checkpoints.has(slot));
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
getProposalsForSlot(slot: SlotNumber): Promise<{
|
|
253
|
+
blockProposals: BlockProposal[];
|
|
254
|
+
checkpointProposals: CheckpointProposalCore[];
|
|
255
|
+
}> {
|
|
256
|
+
return Promise.resolve({
|
|
257
|
+
blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
|
|
258
|
+
checkpointProposals: this.checkpoints.get(slot) ?? [],
|
|
259
|
+
});
|
|
238
260
|
}
|
|
239
261
|
|
|
240
262
|
async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
|
|
@@ -247,7 +269,7 @@ export class InMemoryAttestationPool {
|
|
|
247
269
|
|
|
248
270
|
getCheckpointAttestationsForSlotAndProposal(
|
|
249
271
|
_slot: SlotNumber,
|
|
250
|
-
|
|
272
|
+
_proposalPayloadHash: CheckpointProposalHash,
|
|
251
273
|
): Promise<CheckpointAttestation[]> {
|
|
252
274
|
return Promise.resolve([]);
|
|
253
275
|
}
|
|
@@ -261,11 +283,12 @@ export class InMemoryAttestationPool {
|
|
|
261
283
|
}
|
|
262
284
|
|
|
263
285
|
isEmpty(): Promise<boolean> {
|
|
264
|
-
return Promise.resolve(this.proposals.size === 0);
|
|
286
|
+
return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
|
|
265
287
|
}
|
|
266
288
|
|
|
267
289
|
resetState(): void {
|
|
268
290
|
this.proposals.clear();
|
|
291
|
+
this.checkpoints.clear();
|
|
269
292
|
}
|
|
270
293
|
}
|
|
271
294
|
|
|
@@ -273,17 +296,40 @@ export class InMemoryAttestationPool {
|
|
|
273
296
|
* Creates a mock EpochCache for testing.
|
|
274
297
|
*/
|
|
275
298
|
export function createMockEpochCache(): EpochCacheInterface {
|
|
276
|
-
|
|
299
|
+
const cache: EpochCacheInterface = {
|
|
277
300
|
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
|
|
278
301
|
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
279
|
-
|
|
302
|
+
getSlotNow: () => SlotNumber.ZERO,
|
|
303
|
+
getTargetSlot: () => SlotNumber.ZERO,
|
|
304
|
+
getEpochNow: () => EpochNumber.ZERO,
|
|
305
|
+
getTargetEpoch: () => EpochNumber.ZERO,
|
|
306
|
+
getEpochAndSlotNow: () => ({
|
|
307
|
+
epoch: EpochNumber.ZERO,
|
|
308
|
+
slot: SlotNumber.ZERO,
|
|
309
|
+
ts: 0n,
|
|
310
|
+
nowMs: 0n,
|
|
311
|
+
}),
|
|
280
312
|
computeProposerIndex: () => 0n,
|
|
281
313
|
getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
314
|
+
getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
282
315
|
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
283
|
-
getEpochAndSlotInNextL1Slot: () => ({
|
|
316
|
+
getEpochAndSlotInNextL1Slot: () => ({
|
|
317
|
+
epoch: EpochNumber.ZERO,
|
|
318
|
+
slot: SlotNumber.ZERO,
|
|
319
|
+
ts: 0n,
|
|
320
|
+
nowSeconds: 0n,
|
|
321
|
+
}),
|
|
322
|
+
getTargetEpochAndSlotInNextL1Slot: () => ({
|
|
323
|
+
epoch: EpochNumber.ZERO,
|
|
324
|
+
slot: SlotNumber.ZERO,
|
|
325
|
+
ts: 0n,
|
|
326
|
+
nowSeconds: 0n,
|
|
327
|
+
}),
|
|
284
328
|
isInCommittee: () => Promise.resolve(false),
|
|
285
329
|
getRegisteredValidators: () => Promise.resolve([]),
|
|
286
330
|
filterInCommittee: () => Promise.resolve([]),
|
|
331
|
+
isEscapeHatchOpen: () => Promise.resolve(false),
|
|
332
|
+
isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
|
|
287
333
|
getL1Constants: () => ({
|
|
288
334
|
l1StartBlock: 0n,
|
|
289
335
|
l1GenesisTime: 0n,
|
|
@@ -295,6 +341,7 @@ export function createMockEpochCache(): EpochCacheInterface {
|
|
|
295
341
|
rollupManaLimit: Number.MAX_SAFE_INTEGER,
|
|
296
342
|
}),
|
|
297
343
|
};
|
|
344
|
+
return cache;
|
|
298
345
|
}
|
|
299
346
|
|
|
300
347
|
/**
|
|
@@ -341,19 +388,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
|
|
|
341
388
|
*/
|
|
342
389
|
export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
|
|
343
390
|
|
|
344
|
-
/**
|
|
345
|
-
* Collector implementation types for benchmarking.
|
|
346
|
-
*/
|
|
347
|
-
export type CollectorType = 'batch-requester' | 'send-batch-request';
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* Display names for collector types (for output/logging only).
|
|
351
|
-
*/
|
|
352
|
-
export const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string> = {
|
|
353
|
-
'batch-requester': 'batch-requester (new)',
|
|
354
|
-
'send-batch-request': 'send-batch-request (old)',
|
|
355
|
-
};
|
|
356
|
-
|
|
357
391
|
/**
|
|
358
392
|
* Benchmark timing constants.
|
|
359
393
|
*/
|