@aztec/p2p 0.0.1-commit.6d3c34e → 0.0.1-commit.6d63667d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +1 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +9 -6
- package/dest/client/p2p_client.d.ts +4 -2
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +16 -5
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +14 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +7 -3
- 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 +20 -9
- package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +8 -5
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +119 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +90 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +89 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +131 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +63 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +91 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +70 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +63 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +5 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +4 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +197 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +6 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +71 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +95 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +99 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +332 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +55 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +156 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +69 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +748 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -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 +18 -6
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +21 -11
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +13 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +39 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +2 -3
- package/dest/services/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +19 -8
- package/dest/services/libp2p/libp2p_service.d.ts +15 -9
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +63 -58
- package/dest/services/peer-manager/metrics.d.ts +2 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +20 -5
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +8 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +3 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +6 -5
- 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 +27 -9
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +23 -6
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +44 -13
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +2 -1
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +58 -22
- package/dest/services/service.d.ts +4 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +9 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +5 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +17 -10
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +9 -2
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +49 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +8 -8
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_file_store/config.d.ts +18 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +26 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +149 -0
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +5 -5
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +212 -132
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -44
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +10 -10
- package/src/client/p2p_client.ts +20 -8
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +15 -3
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +17 -9
- package/src/mem_pools/attestation_pool/mocks.ts +6 -4
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/tx_pool/README.md +28 -13
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool_v2/README.md +209 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +147 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +118 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +111 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +23 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +164 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +86 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +72 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
- package/src/mem_pools/tx_pool_v2/index.ts +11 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +227 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +161 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +417 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +212 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +882 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +6 -2
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +64 -23
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +45 -0
- package/src/services/encoding.ts +2 -3
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +20 -7
- package/src/services/libp2p/libp2p_service.ts +108 -78
- package/src/services/peer-manager/metrics.ts +21 -4
- package/src/services/peer-manager/peer_scoring.ts +4 -1
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +3 -0
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +57 -9
- package/src/services/reqresp/protocols/status.ts +5 -3
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +4 -0
- package/src/services/tx_collection/config.ts +15 -1
- package/src/services/tx_collection/fast_tx_collection.ts +30 -17
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/proposal_tx_collector.ts +112 -0
- package/src/services/tx_collection/slow_tx_collection.ts +2 -2
- package/src/services/tx_collection/tx_collection.ts +8 -8
- package/src/services/tx_file_store/config.ts +43 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +173 -0
- package/src/services/tx_provider.ts +2 -2
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +321 -126
- package/src/testbench/worker_client_manager.ts +304 -47
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
- package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
|
@@ -6,7 +6,6 @@ import { type Logger, createLibp2pComponentLogger, createLogger } from '@aztec/f
|
|
|
6
6
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
7
7
|
import { Timer } from '@aztec/foundation/timer';
|
|
8
8
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
9
|
-
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
10
9
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
11
10
|
import type { EthAddress, L2Block, L2BlockSource } from '@aztec/stdlib/block';
|
|
12
11
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
@@ -20,6 +19,7 @@ import {
|
|
|
20
19
|
type Gossipable,
|
|
21
20
|
P2PClientType,
|
|
22
21
|
P2PMessage,
|
|
22
|
+
type ValidationResult as P2PValidationResult,
|
|
23
23
|
PeerErrorSeverity,
|
|
24
24
|
TopicType,
|
|
25
25
|
createTopicString,
|
|
@@ -60,23 +60,21 @@ import { createLibp2p } from 'libp2p';
|
|
|
60
60
|
|
|
61
61
|
import type { P2PConfig } from '../../config.js';
|
|
62
62
|
import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
|
|
63
|
-
import type { MemPools } from '../../mem_pools/
|
|
63
|
+
import type { MemPools } from '../../mem_pools/index.js';
|
|
64
64
|
import {
|
|
65
65
|
BlockProposalValidator,
|
|
66
66
|
CheckpointAttestationValidator,
|
|
67
67
|
CheckpointProposalValidator,
|
|
68
|
+
DoubleSpendTxValidator,
|
|
68
69
|
FishermanAttestationValidator,
|
|
70
|
+
getDefaultAllowedSetupFunctions,
|
|
69
71
|
} from '../../msg_validators/index.js';
|
|
70
72
|
import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
|
|
71
|
-
import { getDefaultAllowedSetupFunctions } from '../../msg_validators/tx_validator/allowed_public_setup.js';
|
|
72
|
-
import { type MessageValidator, createTxMessageValidators } from '../../msg_validators/tx_validator/factory.js';
|
|
73
73
|
import {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
TxProofValidator,
|
|
79
|
-
} from '../../msg_validators/tx_validator/index.js';
|
|
74
|
+
type MessageValidator,
|
|
75
|
+
createTxMessageValidators,
|
|
76
|
+
createTxReqRespValidator,
|
|
77
|
+
} from '../../msg_validators/tx_validator/factory.js';
|
|
80
78
|
import { GossipSubEvent } from '../../types/index.js';
|
|
81
79
|
import { type PubSubLibp2p, convertToMultiaddr } from '../../util.js';
|
|
82
80
|
import { getVersions } from '../../versioning.js';
|
|
@@ -87,29 +85,31 @@ import { gossipScoreThresholds } from '../gossipsub/scoring.js';
|
|
|
87
85
|
import type { PeerManagerInterface } from '../peer-manager/interface.js';
|
|
88
86
|
import { PeerManager } from '../peer-manager/peer_manager.js';
|
|
89
87
|
import { PeerScoring } from '../peer-manager/peer_scoring.js';
|
|
88
|
+
import type { BatchTxRequesterLibP2PService } from '../reqresp/batch-tx-requester/interface.js';
|
|
90
89
|
import type { P2PReqRespConfig } from '../reqresp/config.js';
|
|
91
90
|
import {
|
|
92
91
|
DEFAULT_SUB_PROTOCOL_VALIDATORS,
|
|
93
92
|
type ReqRespInterface,
|
|
93
|
+
type ReqRespResponse,
|
|
94
94
|
ReqRespSubProtocol,
|
|
95
95
|
type ReqRespSubProtocolHandler,
|
|
96
96
|
type ReqRespSubProtocolHandlers,
|
|
97
97
|
type ReqRespSubProtocolValidators,
|
|
98
98
|
type SubProtocolMap,
|
|
99
99
|
ValidationError,
|
|
100
|
-
} from '../reqresp/
|
|
101
|
-
import { reqRespBlockTxsHandler } from '../reqresp/protocols/block_txs/block_txs_handler.js';
|
|
102
|
-
import { reqGoodbyeHandler } from '../reqresp/protocols/goodbye.js';
|
|
100
|
+
} from '../reqresp/index.js';
|
|
103
101
|
import {
|
|
104
102
|
AuthRequest,
|
|
105
103
|
BlockTxsRequest,
|
|
106
104
|
BlockTxsResponse,
|
|
107
105
|
StatusMessage,
|
|
108
106
|
pingHandler,
|
|
107
|
+
reqGoodbyeHandler,
|
|
109
108
|
reqRespBlockHandler,
|
|
109
|
+
reqRespBlockTxsHandler,
|
|
110
110
|
reqRespStatusHandler,
|
|
111
111
|
reqRespTxHandler,
|
|
112
|
-
} from '../reqresp/
|
|
112
|
+
} from '../reqresp/index.js';
|
|
113
113
|
import { ReqResp } from '../reqresp/reqresp.js';
|
|
114
114
|
import type {
|
|
115
115
|
P2PBlockReceivedCallback,
|
|
@@ -284,14 +284,14 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
284
284
|
|
|
285
285
|
const datastore = new AztecDatastore(peerStore);
|
|
286
286
|
|
|
287
|
-
const otelMetricsAdapter = new OtelMetricsAdapter(telemetry);
|
|
287
|
+
const otelMetricsAdapter = new OtelMetricsAdapter(telemetry, logger.getBindings());
|
|
288
288
|
|
|
289
289
|
const peerDiscoveryService = new DiscV5Service(
|
|
290
290
|
peerId,
|
|
291
291
|
config,
|
|
292
292
|
packageVersion,
|
|
293
293
|
telemetry,
|
|
294
|
-
createLogger(`${logger.module}:discv5_service
|
|
294
|
+
createLogger(`${logger.module}:discv5_service`, logger.getBindings()),
|
|
295
295
|
);
|
|
296
296
|
|
|
297
297
|
// Seed libp2p's bootstrap discovery with private and trusted peers
|
|
@@ -452,7 +452,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
452
452
|
connectionManager: components.connectionManager,
|
|
453
453
|
}),
|
|
454
454
|
},
|
|
455
|
-
logger: createLibp2pComponentLogger(logger.module),
|
|
455
|
+
logger: createLibp2pComponentLogger(logger.module, logger.getBindings()),
|
|
456
456
|
});
|
|
457
457
|
|
|
458
458
|
const peerScoring = new PeerScoring(config, telemetry);
|
|
@@ -524,7 +524,11 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
524
524
|
};
|
|
525
525
|
|
|
526
526
|
if (!this.config.disableTransactions) {
|
|
527
|
-
const blockTxsHandler = reqRespBlockTxsHandler(
|
|
527
|
+
const blockTxsHandler = reqRespBlockTxsHandler(
|
|
528
|
+
this.mempools.attestationPool,
|
|
529
|
+
this.archiver,
|
|
530
|
+
this.mempools.txPool,
|
|
531
|
+
);
|
|
528
532
|
requestResponseHandlers[ReqRespSubProtocol.BLOCK_TXS] = blockTxsHandler.bind(this);
|
|
529
533
|
}
|
|
530
534
|
|
|
@@ -640,6 +644,15 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
640
644
|
return this.reqresp.sendBatchRequest(protocol, requests, pinnedPeerId);
|
|
641
645
|
}
|
|
642
646
|
|
|
647
|
+
public sendRequestToPeer(
|
|
648
|
+
peerId: PeerId,
|
|
649
|
+
subProtocol: ReqRespSubProtocol,
|
|
650
|
+
payload: Buffer,
|
|
651
|
+
dialTimeout?: number,
|
|
652
|
+
): Promise<ReqRespResponse> {
|
|
653
|
+
return this.reqresp.sendRequestToPeer(peerId, subProtocol, payload, dialTimeout);
|
|
654
|
+
}
|
|
655
|
+
|
|
643
656
|
/**
|
|
644
657
|
* Get the ENR of the node
|
|
645
658
|
* @returns The ENR of the node
|
|
@@ -923,7 +936,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
923
936
|
const validationFunc: () => Promise<ReceivedMessageValidationResult<CheckpointAttestation>> = async () => {
|
|
924
937
|
const attestation = CheckpointAttestation.fromBuffer(payloadData);
|
|
925
938
|
const pool = this.mempools.attestationPool;
|
|
926
|
-
const
|
|
939
|
+
const validationResult = await this.validateCheckpointAttestation(source, attestation);
|
|
940
|
+
const isValid = validationResult.result === 'accept';
|
|
927
941
|
const exists = isValid && (await pool.hasCheckpointAttestation(attestation));
|
|
928
942
|
|
|
929
943
|
let canAdd = true;
|
|
@@ -942,9 +956,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
942
956
|
[Attributes.P2P_ID]: source.toString(),
|
|
943
957
|
});
|
|
944
958
|
|
|
945
|
-
if (
|
|
959
|
+
if (validationResult.result === 'reject') {
|
|
946
960
|
return { result: TopicValidatorResult.Reject };
|
|
947
|
-
} else if (exists) {
|
|
961
|
+
} else if (validationResult.result === 'ignore' || exists) {
|
|
948
962
|
return { result: TopicValidatorResult.Ignore, obj: attestation };
|
|
949
963
|
} else if (!canAdd) {
|
|
950
964
|
this.logger.warn(`Dropping checkpoint attestation due to per-(slot, proposalId) attestation cap`, {
|
|
@@ -985,7 +999,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
985
999
|
private async processBlockFromPeer(payloadData: Buffer, msgId: string, source: PeerId): Promise<void> {
|
|
986
1000
|
const validationFunc: () => Promise<ReceivedMessageValidationResult<BlockProposal>> = async () => {
|
|
987
1001
|
const block = BlockProposal.fromBuffer(payloadData);
|
|
988
|
-
const
|
|
1002
|
+
const validationResult = await this.validateBlockProposal(source, block);
|
|
1003
|
+
const isValid = validationResult.result === 'accept';
|
|
989
1004
|
const pool = this.mempools.attestationPool;
|
|
990
1005
|
|
|
991
1006
|
const exists = isValid && (await pool.hasBlockProposal(block));
|
|
@@ -999,9 +1014,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
999
1014
|
[Attributes.P2P_ID]: source.toString(),
|
|
1000
1015
|
});
|
|
1001
1016
|
|
|
1002
|
-
if (
|
|
1017
|
+
if (validationResult.result === 'reject') {
|
|
1003
1018
|
return { result: TopicValidatorResult.Reject };
|
|
1004
|
-
} else if (exists) {
|
|
1019
|
+
} else if (validationResult.result === 'ignore' || exists) {
|
|
1005
1020
|
return { result: TopicValidatorResult.Ignore, obj: block };
|
|
1006
1021
|
} else if (!canAdd) {
|
|
1007
1022
|
this.peerManager.penalizePeer(source, PeerErrorSeverity.MidToleranceError);
|
|
@@ -1081,7 +1096,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1081
1096
|
// TODO(palla/mbps): This pattern is repeated across multiple message handlers, consider abstracting it.
|
|
1082
1097
|
const validationFunc: () => Promise<ReceivedMessageValidationResult<CheckpointProposal>> = async () => {
|
|
1083
1098
|
const checkpoint = CheckpointProposal.fromBuffer(payloadData);
|
|
1084
|
-
const
|
|
1099
|
+
const validationResult = await this.validateCheckpointProposal(source, checkpoint);
|
|
1100
|
+
const isValid = validationResult.result === 'accept';
|
|
1085
1101
|
const pool = this.mempools.attestationPool;
|
|
1086
1102
|
|
|
1087
1103
|
const exists = isValid && (await pool.hasCheckpointProposal(checkpoint));
|
|
@@ -1095,9 +1111,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1095
1111
|
[Attributes.P2P_ID]: source.toString(),
|
|
1096
1112
|
});
|
|
1097
1113
|
|
|
1098
|
-
if (
|
|
1114
|
+
if (validationResult.result === 'reject') {
|
|
1099
1115
|
return { result: TopicValidatorResult.Reject };
|
|
1100
|
-
} else if (exists) {
|
|
1116
|
+
} else if (validationResult.result === 'ignore' || exists) {
|
|
1101
1117
|
return { result: TopicValidatorResult.Ignore, obj: checkpoint };
|
|
1102
1118
|
} else if (!canAdd) {
|
|
1103
1119
|
this.peerManager.penalizePeer(source, PeerErrorSeverity.MidToleranceError);
|
|
@@ -1202,7 +1218,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1202
1218
|
* @returns True if the requested block transactions are valid, false otherwise.
|
|
1203
1219
|
*/
|
|
1204
1220
|
@trackSpan('Libp2pService.validateRequestedBlockTxs', request => ({
|
|
1205
|
-
[Attributes.
|
|
1221
|
+
[Attributes.BLOCK_ARCHIVE]: request.archiveRoot.toString(),
|
|
1206
1222
|
}))
|
|
1207
1223
|
private async validateRequestedBlockTxs(
|
|
1208
1224
|
request: BlockTxsRequest,
|
|
@@ -1212,10 +1228,10 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1212
1228
|
const requestedTxValidator = this.createRequestedTxValidator();
|
|
1213
1229
|
|
|
1214
1230
|
try {
|
|
1215
|
-
if (!response.
|
|
1231
|
+
if (!response.archiveRoot.equals(request.archiveRoot)) {
|
|
1216
1232
|
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
|
|
1217
1233
|
throw new ValidationError(
|
|
1218
|
-
`Received block txs for unexpected
|
|
1234
|
+
`Received block txs for unexpected archive root: expected ${request.archiveRoot.toString()}, got ${response.archiveRoot.toString()}`,
|
|
1219
1235
|
);
|
|
1220
1236
|
}
|
|
1221
1237
|
|
|
@@ -1245,7 +1261,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1245
1261
|
}
|
|
1246
1262
|
|
|
1247
1263
|
// Given proposal (should have locally), ensure returned txs are valid subset and match request indices
|
|
1248
|
-
const proposal = await this.mempools.attestationPool.getBlockProposal(request.
|
|
1264
|
+
const proposal = await this.mempools.attestationPool.getBlockProposal(request.archiveRoot.toString());
|
|
1249
1265
|
if (proposal) {
|
|
1250
1266
|
// Build intersected indices
|
|
1251
1267
|
const intersectIdx = request.txIndices.getTrueIndices().filter(i => response.txIndices.isSet(i));
|
|
@@ -1265,7 +1281,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1265
1281
|
} else {
|
|
1266
1282
|
// No local proposal, cannot check the membership/order of the returned txs
|
|
1267
1283
|
this.logger.warn(
|
|
1268
|
-
`Block proposal not found for
|
|
1284
|
+
`Block proposal not found for archive root ${request.archiveRoot.toString()}; cannot validate membership/order of returned txs`,
|
|
1269
1285
|
);
|
|
1270
1286
|
return false;
|
|
1271
1287
|
}
|
|
@@ -1304,7 +1320,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1304
1320
|
const requested = new Set(requestedTxHash.map(h => h.toString()));
|
|
1305
1321
|
const requestedTxValidator = this.createRequestedTxValidator();
|
|
1306
1322
|
|
|
1307
|
-
//TODO: (mralj) - this is somewhat naive implementation, if single tx is
|
|
1323
|
+
//TODO: (mralj) - this is somewhat naive implementation, if single tx is invalid we consider the whole response invalid.
|
|
1308
1324
|
// I think we should still extract the valid txs and return them, so that we can still use the response.
|
|
1309
1325
|
try {
|
|
1310
1326
|
await Promise.all(responseTx.map(tx => this.validateRequestedTx(tx, peerId, requestedTxValidator, requested)));
|
|
@@ -1367,27 +1383,8 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1367
1383
|
}
|
|
1368
1384
|
}
|
|
1369
1385
|
|
|
1370
|
-
private createRequestedTxValidator(): TxValidator {
|
|
1371
|
-
return new AggregateTxValidator(
|
|
1372
|
-
new DataTxValidator(),
|
|
1373
|
-
new MetadataTxValidator({
|
|
1374
|
-
l1ChainId: new Fr(this.config.l1ChainId),
|
|
1375
|
-
rollupVersion: new Fr(this.config.rollupVersion),
|
|
1376
|
-
protocolContractsHash,
|
|
1377
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
1378
|
-
}),
|
|
1379
|
-
new TxProofValidator(this.proofVerifier),
|
|
1380
|
-
);
|
|
1381
|
-
}
|
|
1382
|
-
|
|
1383
1386
|
private async validateRequestedTx(tx: Tx, peerId: PeerId, txValidator: TxValidator, requested?: Set<`0x${string}`>) {
|
|
1384
1387
|
const penalize = (severity: PeerErrorSeverity) => this.peerManager.penalizePeer(peerId, severity);
|
|
1385
|
-
|
|
1386
|
-
if (!(await tx.validateTxHash())) {
|
|
1387
|
-
penalize(PeerErrorSeverity.MidToleranceError);
|
|
1388
|
-
throw new ValidationError(`Received tx with invalid hash ${tx.getTxHash().toString()}.`);
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1391
1388
|
if (requested && !requested.has(tx.getTxHash().toString())) {
|
|
1392
1389
|
penalize(PeerErrorSeverity.MidToleranceError);
|
|
1393
1390
|
throw new ValidationError(`Received tx with hash ${tx.getTxHash().toString()} that was not requested.`);
|
|
@@ -1400,6 +1397,13 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1400
1397
|
}
|
|
1401
1398
|
}
|
|
1402
1399
|
|
|
1400
|
+
private createRequestedTxValidator(): TxValidator {
|
|
1401
|
+
return createTxReqRespValidator(this.proofVerifier, {
|
|
1402
|
+
l1ChainId: this.config.l1ChainId,
|
|
1403
|
+
rollupVersion: this.config.rollupVersion,
|
|
1404
|
+
});
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1403
1407
|
@trackSpan('Libp2pService.validatePropagatedTx', tx => ({
|
|
1404
1408
|
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
1405
1409
|
}))
|
|
@@ -1442,6 +1446,22 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1442
1446
|
return gasFees;
|
|
1443
1447
|
}
|
|
1444
1448
|
|
|
1449
|
+
/**
|
|
1450
|
+
* Get the BatchTxRequesterLibP2PService dependencies for creating BatchTxRequester instances
|
|
1451
|
+
*/
|
|
1452
|
+
public getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
|
|
1453
|
+
return {
|
|
1454
|
+
reqResp: this.reqresp,
|
|
1455
|
+
connectionSampler: this.reqresp.getConnectionSampler(),
|
|
1456
|
+
txValidatorConfig: {
|
|
1457
|
+
l1ChainId: this.config.l1ChainId,
|
|
1458
|
+
rollupVersion: this.config.rollupVersion,
|
|
1459
|
+
proofVerifier: this.proofVerifier,
|
|
1460
|
+
},
|
|
1461
|
+
peerScoring: this.peerManager,
|
|
1462
|
+
};
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1445
1465
|
public async validate(txs: Tx[]): Promise<void> {
|
|
1446
1466
|
const currentBlockNumber = await this.archiver.getBlockNumber();
|
|
1447
1467
|
|
|
@@ -1492,6 +1512,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1492
1512
|
this.proofVerifier,
|
|
1493
1513
|
!this.config.disableTransactions,
|
|
1494
1514
|
allowedInSetup,
|
|
1515
|
+
this.logger.getBindings(),
|
|
1495
1516
|
);
|
|
1496
1517
|
}
|
|
1497
1518
|
|
|
@@ -1545,15 +1566,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1545
1566
|
return PeerErrorSeverity.HighToleranceError;
|
|
1546
1567
|
}
|
|
1547
1568
|
|
|
1548
|
-
const snapshotValidator = new DoubleSpendTxValidator(
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1569
|
+
const snapshotValidator = new DoubleSpendTxValidator(
|
|
1570
|
+
{
|
|
1571
|
+
nullifiersExist: async (nullifiers: Buffer[]) => {
|
|
1572
|
+
const merkleTree = this.worldStateSynchronizer.getSnapshot(
|
|
1573
|
+
BlockNumber(blockNumber - this.config.doubleSpendSeverePeerPenaltyWindow),
|
|
1574
|
+
);
|
|
1575
|
+
const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
|
|
1576
|
+
return indices.map(index => index !== undefined);
|
|
1577
|
+
},
|
|
1555
1578
|
},
|
|
1556
|
-
|
|
1579
|
+
this.logger.getBindings(),
|
|
1580
|
+
);
|
|
1557
1581
|
|
|
1558
1582
|
const validSnapshot = await snapshotValidator.validateTx(tx);
|
|
1559
1583
|
if (validSnapshot.result !== 'valid') {
|
|
@@ -1574,15 +1598,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1574
1598
|
[Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
|
|
1575
1599
|
[Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then(i => i.toString()),
|
|
1576
1600
|
}))
|
|
1577
|
-
public async validateCheckpointAttestation(
|
|
1578
|
-
|
|
1579
|
-
|
|
1601
|
+
public async validateCheckpointAttestation(
|
|
1602
|
+
peerId: PeerId,
|
|
1603
|
+
attestation: CheckpointAttestation,
|
|
1604
|
+
): Promise<P2PValidationResult> {
|
|
1605
|
+
const result = await this.checkpointAttestationValidator.validate(attestation);
|
|
1606
|
+
|
|
1607
|
+
if (result.result === 'reject') {
|
|
1580
1608
|
this.logger.debug(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1581
|
-
this.peerManager.penalizePeer(peerId, severity);
|
|
1582
|
-
return false;
|
|
1609
|
+
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1583
1610
|
}
|
|
1584
1611
|
|
|
1585
|
-
return
|
|
1612
|
+
return result;
|
|
1586
1613
|
}
|
|
1587
1614
|
|
|
1588
1615
|
/**
|
|
@@ -1594,15 +1621,15 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1594
1621
|
@trackSpan('Libp2pService.validateBlockProposal', (_peerId, block) => ({
|
|
1595
1622
|
[Attributes.SLOT_NUMBER]: block.slotNumber.toString(),
|
|
1596
1623
|
}))
|
|
1597
|
-
public async validateBlockProposal(peerId: PeerId, block: BlockProposal): Promise<
|
|
1598
|
-
const
|
|
1599
|
-
|
|
1624
|
+
public async validateBlockProposal(peerId: PeerId, block: BlockProposal): Promise<P2PValidationResult> {
|
|
1625
|
+
const result = await this.blockProposalValidator.validate(block);
|
|
1626
|
+
|
|
1627
|
+
if (result.result === 'reject') {
|
|
1600
1628
|
this.logger.debug(`Penalizing peer ${peerId} for block proposal validation failure`);
|
|
1601
|
-
this.peerManager.penalizePeer(peerId, severity);
|
|
1602
|
-
return false;
|
|
1629
|
+
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1603
1630
|
}
|
|
1604
1631
|
|
|
1605
|
-
return
|
|
1632
|
+
return result;
|
|
1606
1633
|
}
|
|
1607
1634
|
|
|
1608
1635
|
/**
|
|
@@ -1614,15 +1641,18 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
|
|
|
1614
1641
|
@trackSpan('Libp2pService.validateCheckpointProposal', (_peerId, checkpoint) => ({
|
|
1615
1642
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1616
1643
|
}))
|
|
1617
|
-
public async validateCheckpointProposal(
|
|
1618
|
-
|
|
1619
|
-
|
|
1644
|
+
public async validateCheckpointProposal(
|
|
1645
|
+
peerId: PeerId,
|
|
1646
|
+
checkpoint: CheckpointProposal,
|
|
1647
|
+
): Promise<P2PValidationResult> {
|
|
1648
|
+
const result = await this.checkpointProposalValidator.validate(checkpoint);
|
|
1649
|
+
|
|
1650
|
+
if (result.result === 'reject') {
|
|
1620
1651
|
this.logger.debug(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
|
|
1621
|
-
this.peerManager.penalizePeer(peerId, severity);
|
|
1622
|
-
return false;
|
|
1652
|
+
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1623
1653
|
}
|
|
1624
1654
|
|
|
1625
|
-
return
|
|
1655
|
+
return result;
|
|
1626
1656
|
}
|
|
1627
1657
|
|
|
1628
1658
|
public getPeerScore(peerId: PeerId): number {
|
|
@@ -6,12 +6,13 @@ import {
|
|
|
6
6
|
type TelemetryClient,
|
|
7
7
|
type Tracer,
|
|
8
8
|
type UpDownCounter,
|
|
9
|
+
createUpDownCounterWithDefault,
|
|
9
10
|
getTelemetryClient,
|
|
10
11
|
} from '@aztec/telemetry-client';
|
|
11
12
|
|
|
12
13
|
import type { PeerId } from '@libp2p/interface';
|
|
13
14
|
|
|
14
|
-
import {
|
|
15
|
+
import { GoodByeReason, prettyGoodbyeReason } from '../reqresp/protocols/index.js';
|
|
15
16
|
|
|
16
17
|
export class PeerManagerMetrics {
|
|
17
18
|
private sentGoodbyes: UpDownCounter;
|
|
@@ -31,10 +32,26 @@ export class PeerManagerMetrics {
|
|
|
31
32
|
this.tracer = telemetryClient.getTracer(name);
|
|
32
33
|
|
|
33
34
|
const meter = telemetryClient.getMeter(name);
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
const goodbyeReasonAttrs = {
|
|
36
|
+
[Attributes.P2P_GOODBYE_REASON]: [
|
|
37
|
+
prettyGoodbyeReason(GoodByeReason.SHUTDOWN),
|
|
38
|
+
prettyGoodbyeReason(GoodByeReason.MAX_PEERS),
|
|
39
|
+
prettyGoodbyeReason(GoodByeReason.LOW_SCORE),
|
|
40
|
+
prettyGoodbyeReason(GoodByeReason.BANNED),
|
|
41
|
+
prettyGoodbyeReason(GoodByeReason.WRONG_NETWORK),
|
|
42
|
+
prettyGoodbyeReason(GoodByeReason.UNKNOWN),
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
this.sentGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_SENT, goodbyeReasonAttrs);
|
|
46
|
+
this.receivedGoodbyes = createUpDownCounterWithDefault(
|
|
47
|
+
meter,
|
|
48
|
+
Metrics.PEER_MANAGER_GOODBYES_RECEIVED,
|
|
49
|
+
goodbyeReasonAttrs,
|
|
50
|
+
);
|
|
36
51
|
this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
|
|
37
|
-
this.lowScoreDisconnects = meter
|
|
52
|
+
this.lowScoreDisconnects = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
|
|
53
|
+
[Attributes.P2P_PEER_SCORE_STATE]: ['Banned', 'Disconnect'],
|
|
54
|
+
});
|
|
38
55
|
this.peerConnectionDuration = meter.createHistogram(Metrics.PEER_MANAGER_PEER_CONNECTION_DURATION);
|
|
39
56
|
}
|
|
40
57
|
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
Metrics,
|
|
7
7
|
type TelemetryClient,
|
|
8
8
|
type UpDownCounter,
|
|
9
|
+
createUpDownCounterWithDefault,
|
|
9
10
|
getTelemetryClient,
|
|
10
11
|
} from '@aztec/telemetry-client';
|
|
11
12
|
|
|
@@ -52,7 +53,9 @@ export class PeerScoring {
|
|
|
52
53
|
|
|
53
54
|
const meter = telemetry.getMeter('PeerScoring');
|
|
54
55
|
|
|
55
|
-
this.peerStateCounter = meter
|
|
56
|
+
this.peerStateCounter = createUpDownCounterWithDefault(meter, Metrics.P2P_PEER_STATE_COUNT, {
|
|
57
|
+
[Attributes.P2P_PEER_SCORE_STATE]: ['Healthy', 'Disconnect', 'Banned'],
|
|
58
|
+
});
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
public penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity) {
|