@aztec/p2p 0.0.1-commit.7b97ef96e → 0.0.1-commit.7cbc774
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +7 -7
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +39 -32
- package/dest/client/interface.d.ts +19 -17
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +16 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +94 -105
- package/dest/config.d.ts +154 -106
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +134 -40
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +33 -15
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +10 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +18 -9
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +51 -11
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +90 -19
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +5 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +256 -220
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +61 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +252 -61
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
- package/dest/msg_validators/tx_validator/index.d.ts +5 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +4 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +12 -17
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +13 -20
- package/dest/services/encoding.d.ts +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +14 -8
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +47 -55
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +344 -308
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +40 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +97 -107
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +43 -215
- package/dest/services/service.d.ts +10 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +5 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +7 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +24 -11
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +45 -45
- package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +17 -19
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +13 -15
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +42 -15
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +88 -42
- package/dest/testbench/worker_client_manager.d.ts +12 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +57 -11
- package/dest/util.d.ts +12 -7
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +15 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +74 -49
- package/src/client/interface.ts +20 -30
- package/src/client/p2p_client.ts +108 -156
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +227 -45
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +22 -14
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -2
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +10 -6
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +19 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +130 -23
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +17 -2
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +267 -229
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
- package/src/msg_validators/clock_tolerance.ts +79 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +6 -15
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +44 -1
- package/src/msg_validators/tx_validator/factory.ts +407 -80
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
- package/src/msg_validators/tx_validator/index.ts +4 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +15 -44
- package/src/services/encoding.ts +14 -7
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +390 -360
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +97 -119
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +48 -261
- package/src/services/service.ts +13 -29
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +7 -2
- package/src/test-helpers/make-test-p2p-clients.ts +4 -3
- package/src/test-helpers/mock-pubsub.ts +49 -66
- package/src/test-helpers/reqresp-nodes.ts +15 -28
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +54 -29
- package/src/testbench/p2p_client_testbench_worker.ts +91 -61
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +33 -18
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -346
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { chunkWrapAround } from '@aztec/foundation/collection';
|
|
2
|
-
import { TimeoutError } from '@aztec/foundation/error';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { FifoMemoryQueue, Semaphore } from '@aztec/foundation/queue';
|
|
5
4
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
|
-
import { DateProvider
|
|
5
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
7
6
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
8
7
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
9
|
-
import { peerIdFromString } from '@libp2p/peer-id';
|
|
10
8
|
import { ReqRespSubProtocol } from '.././interface.js';
|
|
11
9
|
import { BlockTxsRequest, BlockTxsResponse } from '.././protocols/index.js';
|
|
12
10
|
import { ReqRespStatus } from '.././status.js';
|
|
13
11
|
import { DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD, DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT, DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT, DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE } from './config.js';
|
|
14
12
|
import { MissingTxMetadataCollection } from './missing_txs.js';
|
|
15
13
|
import { PeerCollection } from './peer_collection.js';
|
|
16
|
-
import {
|
|
14
|
+
import { createBatchRequestTxValidator } from './tx_validator.js';
|
|
17
15
|
/*
|
|
18
16
|
* Tries to fetch all missing transaction until deadline is hit.
|
|
19
17
|
* Transactions are yield by calling run*() method
|
|
@@ -31,79 +29,64 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
31
29
|
* - Bad peer:
|
|
32
30
|
* - Is the peer which was unable to send us successful response N times in a row
|
|
33
31
|
* */ export class BatchTxRequester {
|
|
32
|
+
requestTracker;
|
|
34
33
|
blockTxsSource;
|
|
35
34
|
pinnedPeer;
|
|
36
|
-
timeoutMs;
|
|
37
35
|
p2pService;
|
|
38
36
|
logger;
|
|
39
|
-
dateProvider;
|
|
40
37
|
opts;
|
|
41
38
|
peers;
|
|
42
39
|
txsMetadata;
|
|
43
|
-
deadline;
|
|
44
40
|
smartRequesterSemaphore;
|
|
45
41
|
txQueue;
|
|
46
42
|
txValidator;
|
|
47
43
|
smartParallelWorkerCount;
|
|
48
44
|
dumbParallelWorkerCount;
|
|
49
45
|
txBatchSize;
|
|
50
|
-
constructor(
|
|
46
|
+
constructor(requestTracker, blockTxsSource, pinnedPeer, p2pService, logger, dateProvider, opts){
|
|
47
|
+
this.requestTracker = requestTracker;
|
|
51
48
|
this.blockTxsSource = blockTxsSource;
|
|
52
49
|
this.pinnedPeer = pinnedPeer;
|
|
53
|
-
this.timeoutMs = timeoutMs;
|
|
54
50
|
this.p2pService = p2pService;
|
|
55
51
|
this.logger = logger ?? createLogger('p2p:reqresp_batch');
|
|
56
|
-
this.dateProvider = dateProvider ?? new DateProvider();
|
|
57
52
|
this.opts = opts ?? {};
|
|
58
53
|
this.smartParallelWorkerCount = this.opts.smartParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT;
|
|
59
54
|
this.dumbParallelWorkerCount = this.opts.dumbParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT;
|
|
60
55
|
this.txBatchSize = this.opts.txBatchSize ?? DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE;
|
|
61
|
-
this.deadline = this.dateProvider.now() + this.timeoutMs;
|
|
62
56
|
this.txQueue = new FifoMemoryQueue(this.logger);
|
|
63
|
-
this.txValidator = this.opts.txValidator ??
|
|
57
|
+
this.txValidator = this.opts.txValidator ?? createBatchRequestTxValidator(this.p2pService.txValidatorConfig);
|
|
64
58
|
if (this.opts.peerCollection) {
|
|
65
59
|
this.peers = this.opts.peerCollection;
|
|
66
60
|
} else {
|
|
67
|
-
const initialPeers = this.p2pService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
68
61
|
const badPeerThreshold = this.opts.badPeerThreshold ?? DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD;
|
|
69
|
-
this.peers = new PeerCollection(
|
|
62
|
+
this.peers = new PeerCollection(this.p2pService.connectionSampler, this.pinnedPeer, dateProvider ?? new DateProvider(), badPeerThreshold, this.p2pService.peerScoring);
|
|
70
63
|
}
|
|
71
|
-
this.txsMetadata = new MissingTxMetadataCollection(
|
|
64
|
+
this.txsMetadata = new MissingTxMetadataCollection(requestTracker, this.txBatchSize);
|
|
72
65
|
this.smartRequesterSemaphore = this.opts.semaphore ?? new Semaphore(0);
|
|
73
66
|
}
|
|
74
67
|
/*
|
|
75
|
-
* Fetches all missing transactions and yields them
|
|
68
|
+
* Fetches all missing transactions and yields them one by one
|
|
76
69
|
* */ async *run() {
|
|
77
|
-
// Our timeout is represented in milliseconds but queue expects seconds
|
|
78
|
-
// We also want to make sure we wait at least 1 second in case of very low timeouts
|
|
79
|
-
const timeoutQueueAfter = Math.max(Math.ceil(this.timeoutMs / 1_000), 1);
|
|
80
70
|
try {
|
|
81
71
|
if (this.txsMetadata.getMissingTxHashes().size === 0) {
|
|
82
72
|
return undefined;
|
|
83
73
|
}
|
|
84
|
-
// Start workers in background
|
|
85
|
-
const workersPromise =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
74
|
+
// Start workers in background. Workers stop themselves via requestTracker.checkCancelled().
|
|
75
|
+
const workersPromise = Promise.allSettled([
|
|
76
|
+
this.smartRequester(),
|
|
77
|
+
this.dumbRequester(),
|
|
78
|
+
this.pinnedPeerRequester()
|
|
79
|
+
]).finally(()=>{
|
|
90
80
|
this.txQueue.end();
|
|
91
81
|
});
|
|
82
|
+
// Yield txs as workers put them on the queue. The queue's end() drains remaining items
|
|
83
|
+
// before returning null, so we don't lose any txs.
|
|
92
84
|
while(true){
|
|
93
|
-
const tx = await this.txQueue.get(
|
|
94
|
-
// null indicates that the queue has ended
|
|
85
|
+
const tx = await this.txQueue.get();
|
|
95
86
|
if (tx === null) {
|
|
96
87
|
break;
|
|
97
88
|
}
|
|
98
89
|
yield tx;
|
|
99
|
-
if (this.shouldStop()) {
|
|
100
|
-
// Drain queue before ending
|
|
101
|
-
let remaining;
|
|
102
|
-
while((remaining = this.txQueue.getImmediate()) !== undefined){
|
|
103
|
-
yield remaining;
|
|
104
|
-
}
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
90
|
}
|
|
108
91
|
this.unlockSmartRequesterSemaphores();
|
|
109
92
|
await workersPromise;
|
|
@@ -177,7 +160,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
177
160
|
/*
|
|
178
161
|
* Starts dumb worker loops
|
|
179
162
|
* */ async dumbRequester() {
|
|
180
|
-
const nextPeerIndex = this.makeRoundRobinIndexer();
|
|
181
163
|
const nextBatchIndex = this.makeRoundRobinIndexer();
|
|
182
164
|
// Chunk missing tx hashes into batches of txBatchSize, wrapping around to ensure no peer gets less than txBatchSize
|
|
183
165
|
const txChunks = ()=>{
|
|
@@ -205,15 +187,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
205
187
|
txs
|
|
206
188
|
};
|
|
207
189
|
};
|
|
208
|
-
const
|
|
209
|
-
const peers = this.peers.getDumbPeersToQuery();
|
|
210
|
-
const idx = nextPeerIndex(()=>peers.length);
|
|
211
|
-
return idx === undefined ? undefined : peerIdFromString(peers[idx]);
|
|
212
|
-
};
|
|
213
|
-
const workerCount = Math.min(this.dumbParallelWorkerCount, this.peers.getAllPeers().size);
|
|
190
|
+
const workerCount = this.dumbParallelWorkerCount;
|
|
214
191
|
const workers = Array.from({
|
|
215
192
|
length: workerCount
|
|
216
|
-
}, (_, index)=>this.dumbWorkerLoop(
|
|
193
|
+
}, (_, index)=>this.dumbWorkerLoop(this.peers.nextDumbPeerToQuery.bind(this.peers), makeRequest, index + 1));
|
|
217
194
|
await Promise.allSettled(workers);
|
|
218
195
|
}
|
|
219
196
|
/*
|
|
@@ -257,12 +234,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
257
234
|
/*
|
|
258
235
|
* Starts smart worker loops
|
|
259
236
|
* */ async smartRequester() {
|
|
260
|
-
const nextPeerIndex = this.makeRoundRobinIndexer();
|
|
261
|
-
const nextPeer = ()=>{
|
|
262
|
-
const peers = this.peers.getSmartPeersToQuery();
|
|
263
|
-
const idx = nextPeerIndex(()=>peers.length);
|
|
264
|
-
return idx === undefined ? undefined : peerIdFromString(peers[idx]);
|
|
265
|
-
};
|
|
266
237
|
const makeRequest = (pid)=>{
|
|
267
238
|
const txs = this.txsMetadata.getTxsToRequestFromThePeer(pid);
|
|
268
239
|
const blockRequest = BlockTxsRequest.fromTxsSourceAndMissingTxs(this.blockTxsSource, txs);
|
|
@@ -275,8 +246,8 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
275
246
|
};
|
|
276
247
|
};
|
|
277
248
|
const workers = Array.from({
|
|
278
|
-
length:
|
|
279
|
-
}, (_, index)=>this.smartWorkerLoop(
|
|
249
|
+
length: this.smartParallelWorkerCount
|
|
250
|
+
}, (_, index)=>this.smartWorkerLoop(this.peers.nextSmartPeerToQuery.bind(this.peers), makeRequest, index + 1));
|
|
280
251
|
await Promise.allSettled(workers);
|
|
281
252
|
}
|
|
282
253
|
/*
|
|
@@ -294,35 +265,40 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
294
265
|
* */ async smartWorkerLoop(pickNextPeer, request, workerIndex) {
|
|
295
266
|
try {
|
|
296
267
|
this.logger.trace(`Smart worker ${workerIndex} started`);
|
|
297
|
-
await
|
|
268
|
+
await Promise.race([
|
|
269
|
+
this.smartRequesterSemaphore.acquire(),
|
|
270
|
+
this.requestTracker.cancellationToken
|
|
271
|
+
]);
|
|
272
|
+
if (this.requestTracker.checkCancelled()) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
298
275
|
this.logger.trace(`Smart worker ${workerIndex} acquired semaphore`);
|
|
299
276
|
while(!this.shouldStop()){
|
|
300
277
|
const peerId = pickNextPeer();
|
|
301
278
|
const weRanOutOfPeersToQuery = peerId === undefined;
|
|
302
279
|
if (weRanOutOfPeersToQuery) {
|
|
303
280
|
this.logger.debug(`Worker loop smart: No more peers to query`);
|
|
304
|
-
// If
|
|
305
|
-
|
|
306
|
-
const
|
|
307
|
-
if (
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
|
|
311
|
-
if (thereAreSomeRateLimitedSmartPeers) {
|
|
312
|
-
await this.sleepClampedToDeadline(nextSmartPeerDelay);
|
|
313
|
-
continue;
|
|
314
|
-
}
|
|
315
|
-
this.logger.debug(`Worker loop smart: No more smart peers to query killing ${workerIndex}`);
|
|
316
|
-
break;
|
|
281
|
+
// If we have rate limited peers wait for them.
|
|
282
|
+
const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
|
|
283
|
+
const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
|
|
284
|
+
if (thereAreSomeRateLimitedSmartPeers) {
|
|
285
|
+
await this.sleepClampedToDeadline(nextSmartPeerDelay);
|
|
286
|
+
continue;
|
|
317
287
|
}
|
|
318
|
-
// Otherwise there are still some dumb peers that could become smart.
|
|
319
288
|
// We end up here when all known smart peers became temporarily unavailable via combination of
|
|
320
289
|
// (bad, in-flight, or rate-limited) or in some weird scenario all current smart peers turn bad which is permanent
|
|
321
|
-
// but dumb peers
|
|
290
|
+
// but there are dumb peers that could be promoted
|
|
291
|
+
// or new peer can join as dumb and be promoted later
|
|
322
292
|
//
|
|
323
293
|
// When a dumb peer responds with valid txIndices, it gets
|
|
324
294
|
// promoted to smart and releases the semaphore, waking this worker.
|
|
325
|
-
await
|
|
295
|
+
await Promise.race([
|
|
296
|
+
this.smartRequesterSemaphore.acquire(),
|
|
297
|
+
this.requestTracker.cancellationToken
|
|
298
|
+
]);
|
|
299
|
+
if (this.requestTracker.checkCancelled()) {
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
326
302
|
this.logger.debug(`Worker loop smart: acquired next smart peer`);
|
|
327
303
|
continue;
|
|
328
304
|
}
|
|
@@ -345,11 +321,7 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
345
321
|
});
|
|
346
322
|
}
|
|
347
323
|
} catch (err) {
|
|
348
|
-
|
|
349
|
-
this.logger.debug(`Smart worker ${workerIndex} timed out waiting for semaphore`);
|
|
350
|
-
} else {
|
|
351
|
-
this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
|
|
352
|
-
}
|
|
324
|
+
this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
|
|
353
325
|
} finally{
|
|
354
326
|
this.logger.debug(`Smart worker ${workerIndex} finished`);
|
|
355
327
|
}
|
|
@@ -369,6 +341,13 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
369
341
|
return;
|
|
370
342
|
}
|
|
371
343
|
const blockResponse = BlockTxsResponse.fromBuffer(response.data);
|
|
344
|
+
// Validate response. Peers will be penalised by the validator if they send invalid response.
|
|
345
|
+
const isValid = await this.p2pService.validateRequestedBlockTxsConsistency(request, blockResponse, peerId);
|
|
346
|
+
if (!isValid) {
|
|
347
|
+
this.logger.debug(`Peer ${peerId.toString()} sent invalid response`);
|
|
348
|
+
this.handleFailResponseFromPeer(peerId, ReqRespStatus.INTERNAL_ERROR);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
372
351
|
await this.handleSuccessResponseFromPeer(peerId, blockResponse);
|
|
373
352
|
} catch (err) {
|
|
374
353
|
this.logger.error(`Failed to get valid response from peer ${peerId.toString()}: ${err.message}`, {
|
|
@@ -384,12 +363,22 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
384
363
|
* Handles failed response form the peer
|
|
385
364
|
* There are 3 scenarios
|
|
386
365
|
* - RATE_LIMIT_EXCEEDED: We mark this and don't query this peer again for some_time
|
|
366
|
+
* - INTERNAL_ERROR: We use this to cover cases where the request-response consistency validation fails.
|
|
387
367
|
* - FAILURE and UNKNOWN: We penalise this, if peer has been penalised this way N times they are not queried again
|
|
388
368
|
* this implies we will query these peers couple of more times and give them a chance to "redeem" themselves before completely ignoring them
|
|
389
369
|
*/ handleFailResponseFromPeer(peerId, responseStatus) {
|
|
390
|
-
//TODO: Should we ban these peers?
|
|
391
370
|
if (responseStatus === ReqRespStatus.FAILURE || responseStatus === ReqRespStatus.UNKNOWN) {
|
|
392
371
|
this.peers.penalisePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
372
|
+
this.peers.markPeerDumb(peerId);
|
|
373
|
+
this.txsMetadata.clearPeerData(peerId);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
// NOT_FOUND means the peer pruned its block proposal — it can no longer serve
|
|
377
|
+
// index-based requests, but this is a legitimate state so we don't penalize.
|
|
378
|
+
// We use INTERNAL_ERROR to cover cases where the request-response consistency validation fails.
|
|
379
|
+
if (responseStatus === ReqRespStatus.NOT_FOUND || responseStatus === ReqRespStatus.INTERNAL_ERROR) {
|
|
380
|
+
this.peers.markPeerDumb(peerId);
|
|
381
|
+
this.txsMetadata.clearPeerData(peerId);
|
|
393
382
|
return;
|
|
394
383
|
}
|
|
395
384
|
if (responseStatus === ReqRespStatus.RATE_LIMIT_EXCEEDED) {
|
|
@@ -409,16 +398,16 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
409
398
|
* Handles received txs.
|
|
410
399
|
* Transactions are validated and then put on async queue
|
|
411
400
|
* to be yielded by main running loop
|
|
412
|
-
|
|
401
|
+
*/ async handleReceivedTxs(peerId, txs) {
|
|
413
402
|
const newTxs = txs.filter((tx)=>!this.txsMetadata.alreadyFetched(tx.txHash));
|
|
414
403
|
if (newTxs.length === 0) {
|
|
415
404
|
return;
|
|
416
405
|
}
|
|
417
|
-
//TODO: this validation can be slow, maybe spawn worker just for validation
|
|
406
|
+
// TODO: this validation can be slow, maybe spawn worker just for validation
|
|
418
407
|
// We could use the async queue for communication.
|
|
419
408
|
const validationResults = await Promise.allSettled(newTxs.map(async (tx)=>({
|
|
420
409
|
tx,
|
|
421
|
-
isValid: (await this.txValidator.
|
|
410
|
+
isValid: (await this.txValidator.validateTx(tx)).result === 'valid'
|
|
422
411
|
})));
|
|
423
412
|
let hasInvalidTx = false;
|
|
424
413
|
validationResults.forEach((result)=>{
|
|
@@ -431,6 +420,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
431
420
|
}
|
|
432
421
|
});
|
|
433
422
|
if (hasInvalidTx) {
|
|
423
|
+
this.logger.warn(`Penalizing peer ${peerId.toString()} for sending invalid transactions in batch response`, {
|
|
424
|
+
peerId
|
|
425
|
+
});
|
|
434
426
|
this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
435
427
|
} else {
|
|
436
428
|
// If we have received successful response from the peer, they have "redeemed" themselves and not considered bad anymore
|
|
@@ -458,10 +450,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
458
450
|
if (smartPeersAreDisabled) {
|
|
459
451
|
return;
|
|
460
452
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
if (!this.isBlockResponseValid(response)) {
|
|
453
|
+
const hasArchiveRootMismatch = this.blockTxsSource.archive.toString() !== response.archiveRoot.toString();
|
|
454
|
+
if (hasArchiveRootMismatch) {
|
|
455
|
+
this.handleArchiveRootMismatch(peerId, response);
|
|
465
456
|
return;
|
|
466
457
|
}
|
|
467
458
|
// We mark peer as "smart" only if they have some txs we are missing
|
|
@@ -473,16 +464,24 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
473
464
|
this.peers.markPeerSmart(peerId);
|
|
474
465
|
this.markTxsPeerHas(peerId, response);
|
|
475
466
|
// Unblock smart workers
|
|
476
|
-
|
|
477
|
-
this.smartRequesterSemaphore.release();
|
|
478
|
-
}
|
|
467
|
+
this.smartRequesterSemaphore.release();
|
|
479
468
|
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
469
|
+
/**
|
|
470
|
+
* Handles an archive root mismatch between local state and peer response.
|
|
471
|
+
*
|
|
472
|
+
* - Response archive is Fr.ZERO (peer pruned proposal, legitimate): marks peer dumb.
|
|
473
|
+
* - Non-zero archive mismatch (malicious response): penalises + marks dumb.
|
|
474
|
+
*/ handleArchiveRootMismatch(peerId, response) {
|
|
475
|
+
if (!response.archiveRoot.isZero()) {
|
|
476
|
+
this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
477
|
+
}
|
|
478
|
+
this.peers.markPeerDumb(peerId);
|
|
479
|
+
this.txsMetadata.clearPeerData(peerId);
|
|
484
480
|
}
|
|
485
481
|
peerHasSomeTxsWeAreMissing(_peerId, response) {
|
|
482
|
+
if (response.txIndices.isEmpty()) {
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
486
485
|
const txsPeerHas = new Set(this.extractHashesPeerHasFromResponse(response).map((h)=>h.toString()));
|
|
487
486
|
return this.txsMetadata.getMissingTxHashes().intersection(txsPeerHas).size > 0;
|
|
488
487
|
}
|
|
@@ -523,23 +522,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
523
522
|
};
|
|
524
523
|
}
|
|
525
524
|
/*
|
|
526
|
-
*
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
/*
|
|
530
|
-
* Checks if the BatchTxRequester should stop fetching missing txs
|
|
531
|
-
* Conditions for stopping are:
|
|
532
|
-
* - There have been no missing transactions to start with
|
|
533
|
-
* - All transactions have been fetched
|
|
534
|
-
* - The deadline has been hit (no more time to fetch)
|
|
535
|
-
* - This process has been cancelled via abortSignal
|
|
536
|
-
*
|
|
537
|
-
* @returns true if BatchTxRequester should stop, otherwise false*/ shouldStop() {
|
|
538
|
-
const aborted = this.opts.abortSignal?.aborted ?? false;
|
|
539
|
-
if (aborted) {
|
|
525
|
+
* Checks if the BatchTxRequester should stop fetching missing txs.
|
|
526
|
+
* Delegates to requestTracker which covers: deadline hit, all txs fetched, or external cancellation. */ shouldStop() {
|
|
527
|
+
if (this.requestTracker.checkCancelled()) {
|
|
540
528
|
this.unlockSmartRequesterSemaphores();
|
|
541
529
|
}
|
|
542
|
-
return
|
|
530
|
+
return this.requestTracker.checkCancelled();
|
|
543
531
|
}
|
|
544
532
|
/*
|
|
545
533
|
* Helper function which unlocks all smart requester semaphores
|
|
@@ -553,10 +541,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
553
541
|
* Sleeps for the given duration, but clamped to the deadline.
|
|
554
542
|
* This ensures we don't sleep past the deadline.
|
|
555
543
|
* */ async sleepClampedToDeadline(durationMs) {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
if (thereIsTimeRemaining) {
|
|
559
|
-
await sleep(Math.min(durationMs, remaining));
|
|
544
|
+
if (this.requestTracker.checkCancelled()) {
|
|
545
|
+
return;
|
|
560
546
|
}
|
|
547
|
+
await Promise.race([
|
|
548
|
+
sleep(durationMs),
|
|
549
|
+
this.requestTracker.cancellationToken
|
|
550
|
+
]);
|
|
561
551
|
}
|
|
562
552
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { ISemaphore } from '@aztec/foundation/queue';
|
|
2
2
|
import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
3
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { Tx, TxHash, TxValidator } from '@aztec/stdlib/tx';
|
|
4
4
|
import type { PeerId } from '@libp2p/interface';
|
|
5
5
|
import type { ConnectionSampler } from '../connection-sampler/connection_sampler.js';
|
|
6
|
+
import type { BlockTxsRequest, BlockTxsResponse } from '../index.js';
|
|
6
7
|
import type { ReqRespInterface } from '../interface.js';
|
|
7
8
|
import type { IPeerCollection } from './peer_collection.js';
|
|
8
|
-
import type { BatchRequestTxValidatorConfig
|
|
9
|
+
import type { BatchRequestTxValidatorConfig } from './tx_validator.js';
|
|
9
10
|
export interface IPeerPenalizer {
|
|
10
11
|
penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): void;
|
|
11
12
|
}
|
|
@@ -18,19 +19,23 @@ export interface ITxMetadataCollection {
|
|
|
18
19
|
markNotInFlightBySmartPeer(txHash: TxHash): void;
|
|
19
20
|
alreadyFetched(txHash: TxHash): boolean;
|
|
20
21
|
markPeerHas(peerId: PeerId, txHashes: TxHash[]): void;
|
|
22
|
+
/** Remove all tx metadata associations for a peer (e.g. on demotion from smart to dumb). */
|
|
23
|
+
clearPeerData(peerId: PeerId): void;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
26
|
* Interface for BatchTxRequester dependencies that can be injected from upstream
|
|
24
27
|
*/
|
|
25
28
|
export interface BatchTxRequesterLibP2PService {
|
|
26
29
|
/** ReqResp interface for sending requests to peers */
|
|
27
|
-
reqResp: Pick<ReqRespInterface, '
|
|
30
|
+
reqResp: Pick<ReqRespInterface, 'sendRequestToPeer'>;
|
|
28
31
|
/** Connection sampler for getting peer lists */
|
|
29
32
|
connectionSampler: Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'>;
|
|
30
33
|
/** Configuration needed for transaction validation */
|
|
31
34
|
txValidatorConfig: BatchRequestTxValidatorConfig;
|
|
32
35
|
/** Peer scoring for penalizing peers */
|
|
33
36
|
peerScoring: IPeerPenalizer;
|
|
37
|
+
/** Validate the requested block transactions request-response consistency */
|
|
38
|
+
validateRequestedBlockTxsConsistency: (request: BlockTxsRequest, response: BlockTxsResponse, peerId: PeerId) => Promise<boolean>;
|
|
34
39
|
}
|
|
35
40
|
export interface BatchTxRequesterOptions {
|
|
36
41
|
smartParallelWorkerCount?: number;
|
|
@@ -39,8 +44,7 @@ export interface BatchTxRequesterOptions {
|
|
|
39
44
|
badPeerThreshold?: number;
|
|
40
45
|
semaphore?: ISemaphore;
|
|
41
46
|
peerCollection?: IPeerCollection;
|
|
42
|
-
abortSignal?: AbortSignal;
|
|
43
47
|
/** Optional tx validator for testing - if not provided, one is created from p2pService.txValidatorConfig */
|
|
44
|
-
txValidator?:
|
|
48
|
+
txValidator?: TxValidator;
|
|
45
49
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkUsTUFBTSxXQUFXLGNBQWM7SUFDN0IsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQztDQUNoRTtBQUVELE1BQU0sV0FBVyxxQkFBcUI7SUFDcEMsa0JBQWtCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzdDLDBCQUEwQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDbkQsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzlDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2pELGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUV4QyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3RELDRGQUE0RjtJQUM1RixhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDckM7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyw2QkFBNkI7SUFDNUMsc0RBQXNEO0lBQ3RELE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNyRCxnREFBZ0Q7SUFDaEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLHVDQUF1QyxDQUFDLENBQUM7SUFDcEYsc0RBQXNEO0lBQ3RELGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0lBQ2pELHdDQUF3QztJQUN4QyxXQUFXLEVBQUUsY0FBYyxDQUFDO0lBQzVCLDZFQUE2RTtJQUM3RSxvQ0FBb0MsRUFBRSxDQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUN4QixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLE1BQU0sRUFBRSxNQUFNLEtBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3ZCO0FBRUQsTUFBTSxXQUFXLHVCQUF1QjtJQUN0Qyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQyx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNqQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDckIsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFMUIsU0FBUyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLGNBQWMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUNqQyw0R0FBNEc7SUFDNUcsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDO0NBQzNCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7C,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtD,4FAA4F;IAC5F,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACrD,gDAAgD;IAChD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACpF,sDAAsD;IACtD,iBAAiB,EAAE,6BAA6B,CAAC;IACjD,wCAAwC;IACxC,WAAW,EAAE,cAAc,CAAC;IAC5B,6EAA6E;IAC7E,oCAAoC,EAAE,CACpC,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,4GAA4G;IAC5G,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
2
2
|
import type { PeerId } from '@libp2p/interface';
|
|
3
|
-
import type {
|
|
3
|
+
import type { IRequestTracker } from '../../tx_collection/request_tracker.js';
|
|
4
4
|
import type { ITxMetadataCollection } from './interface.js';
|
|
5
5
|
declare class MissingTxMetadata {
|
|
6
6
|
readonly txHash: string;
|
|
@@ -15,10 +15,10 @@ declare class MissingTxMetadata {
|
|
|
15
15
|
isInFlight(): boolean;
|
|
16
16
|
}
|
|
17
17
|
export declare class MissingTxMetadataCollection implements ITxMetadataCollection {
|
|
18
|
-
private
|
|
18
|
+
private requestTracker;
|
|
19
19
|
private readonly txBatchSize;
|
|
20
20
|
private txMetadata;
|
|
21
|
-
constructor(
|
|
21
|
+
constructor(requestTracker: IRequestTracker, txBatchSize?: number);
|
|
22
22
|
getPrioritizingNotInFlightAndLowerRequestCount(txs: string[]): MissingTxMetadata[];
|
|
23
23
|
getMissingTxHashes(): Set<string>;
|
|
24
24
|
getTxsPeerHas(peer: PeerId): Set<string>;
|
|
@@ -29,6 +29,7 @@ export declare class MissingTxMetadataCollection implements ITxMetadataCollectio
|
|
|
29
29
|
alreadyFetched(txHash: TxHash): boolean;
|
|
30
30
|
markFetched(peerId: PeerId, tx: Tx): boolean;
|
|
31
31
|
markPeerHas(peerId: PeerId, txHash: TxHash[]): void;
|
|
32
|
+
clearPeerData(peerId: PeerId): void;
|
|
32
33
|
}
|
|
33
34
|
export {};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZ190eHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL2JhdGNoLXR4LXJlcXVlc3Rlci9taXNzaW5nX3R4cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFOUUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxjQUFNLGlCQUFpQjthQUVILE1BQU0sRUFBRSxNQUFNO0lBQ3ZCLGNBQWM7SUFDZCxhQUFhO0lBQ2IsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTO2FBQ1QsS0FBSztJQUx2QixZQUNrQixNQUFNLEVBQUUsTUFBTSxFQUN2QixjQUFjLFNBQUksRUFDbEIsYUFBYSxTQUFJLEVBQ2pCLEVBQUUsR0FBRSxFQUFFLEdBQUcsU0FBcUIsRUFDckIsS0FBSyxjQUFvQixFQUN2QztJQUVHLGVBQWUsU0FFckI7SUFFTSxZQUFZLFNBRWxCO0lBRU0sZUFBZSxTQUVyQjtJQUVNLFVBQVUsSUFBSSxPQUFPLENBRTNCO0NBQ0Y7QUFPRCxxQkFBYSwyQkFBNEIsWUFBVyxxQkFBcUI7SUFJckUsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBSjlCLE9BQU8sQ0FBQyxVQUFVLENBQXdDO0lBRTFELFlBQ1UsY0FBYyxFQUFFLGVBQWUsRUFDdEIsV0FBVyxHQUFFLE1BQWlELEVBR2hGO0lBRU0sOENBQThDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBZXhGO0lBRU0sa0JBQWtCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUV2QztJQUVNLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FXOUM7SUFFTSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQXVCeEQ7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFbEM7SUFPTSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUU1QztJQU1NLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRS9DO0lBRU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUU3QztJQUVNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQWNsRDtJQUVNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFVbEQ7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFLbEM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,cAAM,iBAAiB;aAEH,MAAM,EAAE,MAAM;IACvB,cAAc;IACd,aAAa;IACb,EAAE,EAAE,EAAE,GAAG,SAAS;aACT,KAAK;IALvB,YACkB,MAAM,EAAE,MAAM,EACvB,cAAc,SAAI,EAClB,aAAa,SAAI,EACjB,EAAE,GAAE,EAAE,GAAG,SAAqB,EACrB,KAAK,cAAoB,EACvC;IAEG,eAAe,SAErB;IAEM,YAAY,SAElB;IAEM,eAAe,SAErB;IAEM,UAAU,IAAI,OAAO,CAE3B;CACF;AAOD,qBAAa,2BAA4B,YAAW,qBAAqB;IAIrE,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,UAAU,CAAwC;IAE1D,YACU,cAAc,EAAE,eAAe,EACtB,WAAW,GAAE,MAAiD,EAGhF;IAEM,8CAA8C,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAexF;IAEM,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAW9C;IAEM,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBxD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAElC;IAOM,uBAAuB,CAAC,MAAM,EAAE,MAAM,QAE5C;IAMM,0BAA0B,CAAC,MAAM,EAAE,MAAM,QAE/C;IAEM,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7C;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAclD;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAUlD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAKlC;CACF"}
|
|
@@ -31,14 +31,14 @@ class MissingTxMetadata {
|
|
|
31
31
|
* This could be better optimized but given expected count of missing txs (N < 100)
|
|
32
32
|
* At the moment there is no need for it. And benefit is that we have everything in single store
|
|
33
33
|
* */ export class MissingTxMetadataCollection {
|
|
34
|
-
|
|
34
|
+
requestTracker;
|
|
35
35
|
txBatchSize;
|
|
36
36
|
txMetadata;
|
|
37
|
-
constructor(
|
|
38
|
-
this.
|
|
37
|
+
constructor(requestTracker, txBatchSize = DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE){
|
|
38
|
+
this.requestTracker = requestTracker;
|
|
39
39
|
this.txBatchSize = txBatchSize;
|
|
40
40
|
this.txMetadata = new Map();
|
|
41
|
-
|
|
41
|
+
requestTracker.missingTxHashes.forEach((hash)=>this.txMetadata.set(hash, new MissingTxMetadata(hash)));
|
|
42
42
|
}
|
|
43
43
|
getPrioritizingNotInFlightAndLowerRequestCount(txs) {
|
|
44
44
|
const filtered = Array.from(this.txMetadata.values()).filter((txMeta)=>txs.includes(txMeta.txHash.toString()));
|
|
@@ -57,7 +57,7 @@ class MissingTxMetadata {
|
|
|
57
57
|
];
|
|
58
58
|
}
|
|
59
59
|
getMissingTxHashes() {
|
|
60
|
-
return this.
|
|
60
|
+
return this.requestTracker.missingTxHashes;
|
|
61
61
|
}
|
|
62
62
|
getTxsPeerHas(peer) {
|
|
63
63
|
const peerIdStr = peer.toString();
|
|
@@ -102,7 +102,7 @@ class MissingTxMetadata {
|
|
|
102
102
|
this.txMetadata.get(txHash.toString())?.markNotInFlight();
|
|
103
103
|
}
|
|
104
104
|
alreadyFetched(txHash) {
|
|
105
|
-
return !this.
|
|
105
|
+
return !this.requestTracker.isMissing(txHash.toString());
|
|
106
106
|
}
|
|
107
107
|
markFetched(peerId, tx) {
|
|
108
108
|
const txHashStr = tx.txHash.toString();
|
|
@@ -116,7 +116,7 @@ class MissingTxMetadata {
|
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
118
|
txMeta.peers.add(peerId.toString());
|
|
119
|
-
return this.
|
|
119
|
+
return this.requestTracker.markFetched(tx);
|
|
120
120
|
}
|
|
121
121
|
markPeerHas(peerId, txHash) {
|
|
122
122
|
const peerIdStr = peerId.toString();
|
|
@@ -127,4 +127,10 @@ class MissingTxMetadata {
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
|
+
clearPeerData(peerId) {
|
|
131
|
+
const peerIdStr = peerId.toString();
|
|
132
|
+
for (const txMeta of this.txMetadata.values()){
|
|
133
|
+
txMeta.peers.delete(peerIdStr);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
130
136
|
}
|