@aztec/p2p 0.0.1-commit.f295ac2 → 0.0.1-commit.f8ca9b2f3
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 +5 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +47 -13
- package/dest/client/interface.d.ts +33 -15
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +35 -36
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +115 -139
- 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 +24 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -2
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +102 -88
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +436 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
- 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 +353 -87
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -2
- package/dest/mem_pools/index.d.ts +3 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -1
- 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/interface.d.ts +5 -5
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +8 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
- 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_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/deleted_pool.d.ts +87 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +180 -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 +6 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +5 -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 +93 -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 +127 -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 +751 -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 +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +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/aggregate_tx_validator.d.ts +3 -3
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- 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 +20 -6
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- 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 +15 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
- 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/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 +3 -2
- 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 +22 -5
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +4 -4
- 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 +22 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +45 -0
- package/dest/services/encoding.d.ts +2 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +4 -5
- package/dest/services/gossipsub/index.d.ts +3 -0
- package/dest/services/gossipsub/index.d.ts.map +1 -0
- package/dest/services/gossipsub/index.js +2 -0
- package/dest/services/gossipsub/scoring.d.ts +21 -3
- package/dest/services/gossipsub/scoring.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.js +24 -7
- package/dest/services/gossipsub/topic_score_params.d.ts +161 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +324 -0
- 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 +14 -3
- package/dest/services/libp2p/libp2p_service.d.ts +91 -36
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +407 -303
- 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 +33 -4
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/interface.d.ts +14 -3
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +17 -3
- 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 +5 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -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 +29 -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 +59 -13
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +20 -0
- 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 +69 -26
- package/dest/services/service.d.ts +38 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +10 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +25 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +34 -13
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +44 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +118 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +27 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +57 -0
- package/dest/services/tx_collection/index.d.ts +3 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +2 -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 +5 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +48 -19
- package/dest/services/tx_collection/tx_collection.d.ts +23 -13
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +62 -6
- package/dest/services/tx_collection/tx_collection_sink.d.ts +15 -6
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +13 -7
- package/dest/services/tx_file_store/config.d.ts +16 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +22 -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 +5 -5
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +5 -4
- 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/make-test-p2p-clients.d.ts +3 -3
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +27 -1
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +97 -2
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +2 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +360 -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 +213 -134
- 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 +14 -14
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +78 -22
- package/src/client/interface.ts +39 -14
- package/src/client/p2p_client.ts +155 -166
- 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 +38 -2
- package/src/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +488 -91
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/index.ts +4 -1
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +10 -7
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/mem_pools/tx_pool_v2/README.md +259 -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/deleted_pool.ts +234 -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 +12 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +227 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +207 -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 +895 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -10
- 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/aggregate_tx_validator.ts +2 -2
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- package/src/msg_validators/tx_validator/data_validator.ts +6 -2
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +64 -23
- package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
- 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 +25 -17
- 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 +57 -0
- package/src/services/encoding.ts +4 -5
- package/src/services/gossipsub/README.md +626 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +29 -5
- package/src/services/gossipsub/topic_score_params.ts +451 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +15 -2
- package/src/services/libp2p/libp2p_service.ts +437 -316
- package/src/services/peer-manager/metrics.ts +21 -4
- package/src/services/peer-manager/peer_scoring.ts +29 -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/interface.ts +31 -3
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
- package/src/services/reqresp/protocols/tx.ts +22 -0
- package/src/services/reqresp/reqresp.ts +79 -22
- package/src/services/service.ts +44 -0
- package/src/services/tx_collection/config.ts +41 -1
- package/src/services/tx_collection/fast_tx_collection.ts +44 -19
- package/src/services/tx_collection/file_store_tx_collection.ts +152 -0
- package/src/services/tx_collection/file_store_tx_source.ts +70 -0
- package/src/services/tx_collection/index.ts +6 -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 +57 -28
- package/src/services/tx_collection/tx_collection.ts +86 -20
- package/src/services/tx_collection/tx_collection_sink.ts +17 -7
- package/src/services/tx_file_store/config.ts +37 -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 +10 -9
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +3 -3
- package/src/test-helpers/mock-pubsub.ts +133 -3
- package/src/test-helpers/reqresp-nodes.ts +2 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +422 -0
- package/src/testbench/p2p_client_testbench_worker.ts +322 -127
- package/src/testbench/worker_client_manager.ts +304 -47
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
|
@@ -374,6 +374,7 @@ var _dec, _dec1, _initProto;
|
|
|
374
374
|
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
375
375
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
376
376
|
import { createLogger } from '@aztec/foundation/log';
|
|
377
|
+
import { RunningPromise } from '@aztec/foundation/promise';
|
|
377
378
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
379
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
379
380
|
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
@@ -401,6 +402,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
401
402
|
l2BlockSource;
|
|
402
403
|
p2pService;
|
|
403
404
|
txCollection;
|
|
405
|
+
txFileStore;
|
|
406
|
+
epochCache;
|
|
404
407
|
_dateProvider;
|
|
405
408
|
telemetry;
|
|
406
409
|
log;
|
|
@@ -433,15 +436,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
433
436
|
blockStream;
|
|
434
437
|
txProvider;
|
|
435
438
|
validatorAddresses;
|
|
436
|
-
/**
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
441
|
-
* @param p2pService - The concrete instance of p2p networking to use.
|
|
442
|
-
* @param log - A logger.
|
|
443
|
-
*/ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
444
|
-
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
|
|
439
|
+
/** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
|
|
440
|
+
/** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
|
|
441
|
+
constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
442
|
+
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this.epochCache = epochCache, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [], this.lastSlotProcessed = SlotNumber.ZERO;
|
|
445
443
|
this.config = {
|
|
446
444
|
...getP2PDefaultConfig(),
|
|
447
445
|
...config
|
|
@@ -496,10 +494,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
496
494
|
getL2BlockHash(number) {
|
|
497
495
|
return this.l2Tips.getL2BlockHash(number);
|
|
498
496
|
}
|
|
499
|
-
updateP2PConfig(config) {
|
|
500
|
-
this.txPool.updateConfig(config);
|
|
497
|
+
async updateP2PConfig(config) {
|
|
498
|
+
await this.txPool.updateConfig(config);
|
|
501
499
|
this.p2pService.updateConfig(config);
|
|
502
|
-
return Promise.resolve();
|
|
503
500
|
}
|
|
504
501
|
getL2Tips() {
|
|
505
502
|
return this.l2Tips.getL2Tips();
|
|
@@ -526,7 +523,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
526
523
|
break;
|
|
527
524
|
case 'chain-pruned':
|
|
528
525
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
529
|
-
await this.handlePruneL2Blocks(event.block
|
|
526
|
+
await this.handlePruneL2Blocks(event.block);
|
|
530
527
|
break;
|
|
531
528
|
case 'chain-checkpointed':
|
|
532
529
|
break;
|
|
@@ -541,7 +538,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
541
538
|
await this.startServiceIfSynched();
|
|
542
539
|
}
|
|
543
540
|
#assertIsReady() {
|
|
544
|
-
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
545
541
|
if (!this.isReady()) {
|
|
546
542
|
throw new Error('P2P client not ready');
|
|
547
543
|
}
|
|
@@ -556,6 +552,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
556
552
|
if (this.currentState !== P2PClientState.IDLE) {
|
|
557
553
|
return this.syncPromise;
|
|
558
554
|
}
|
|
555
|
+
// Start the tx pool first, as it needs to hydrate state from persistence
|
|
556
|
+
await this.txPool.start();
|
|
559
557
|
// get the current latest block numbers
|
|
560
558
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
561
559
|
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
@@ -598,6 +596,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
598
596
|
}
|
|
599
597
|
this.blockStream.start();
|
|
600
598
|
await this.txCollection.start();
|
|
599
|
+
this.txFileStore?.start();
|
|
600
|
+
// Start slot monitor to call prepareForSlot when the slot changes
|
|
601
|
+
this.slotMonitor = new RunningPromise(()=>this.maybeCallPrepareForSlot(), this.log, this.config.slotCheckIntervalMS);
|
|
602
|
+
this.slotMonitor.start();
|
|
601
603
|
return this.syncPromise;
|
|
602
604
|
}
|
|
603
605
|
addReqRespSubProtocol(subProtocol, handler, validator) {
|
|
@@ -618,12 +620,18 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
618
620
|
* 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
|
|
619
621
|
*/ async stop() {
|
|
620
622
|
this.log.debug('Stopping p2p client...');
|
|
623
|
+
await this.slotMonitor?.stop();
|
|
624
|
+
this.log.debug('Stopped slot monitor');
|
|
621
625
|
await tryStop(this.txCollection);
|
|
622
626
|
this.log.debug('Stopped tx collection service');
|
|
627
|
+
await this.txFileStore?.stop();
|
|
628
|
+
this.log.debug('Stopped tx file store');
|
|
623
629
|
await this.p2pService.stop();
|
|
624
630
|
this.log.debug('Stopped p2p service');
|
|
625
631
|
await this.blockStream?.stop();
|
|
626
632
|
this.log.debug('Stopped block downloader');
|
|
633
|
+
await this.txPool.stop();
|
|
634
|
+
this.log.debug('Stopped tx pool');
|
|
627
635
|
await this.runningPromise;
|
|
628
636
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
629
637
|
this.log.info('P2P client stopped');
|
|
@@ -632,12 +640,30 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
632
640
|
this.initBlockStream();
|
|
633
641
|
await this.blockStream.sync();
|
|
634
642
|
}
|
|
635
|
-
broadcastProposal(proposal) {
|
|
643
|
+
async broadcastProposal(proposal) {
|
|
636
644
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
645
|
+
// Store our own proposal so we can respond to req/resp requests for it
|
|
646
|
+
const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
|
|
647
|
+
if (count > 1) {
|
|
648
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
649
|
+
this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
|
|
650
|
+
slot: proposal.slotNumber,
|
|
651
|
+
archive: proposal.archive.toString(),
|
|
652
|
+
count
|
|
653
|
+
});
|
|
654
|
+
} else {
|
|
655
|
+
throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
637
658
|
return this.p2pService.propagate(proposal);
|
|
638
659
|
}
|
|
639
|
-
broadcastCheckpointProposal(proposal) {
|
|
660
|
+
async broadcastCheckpointProposal(proposal) {
|
|
640
661
|
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
662
|
+
const blockProposal = proposal.getBlockProposal();
|
|
663
|
+
if (blockProposal) {
|
|
664
|
+
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
665
|
+
await this.attestationPool.tryAddBlockProposal(blockProposal);
|
|
666
|
+
}
|
|
641
667
|
return this.p2pService.propagate(proposal);
|
|
642
668
|
}
|
|
643
669
|
async broadcastCheckpointAttestations(attestations) {
|
|
@@ -647,8 +673,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
647
673
|
async getCheckpointAttestationsForSlot(slot, proposalId) {
|
|
648
674
|
return await (proposalId ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
649
675
|
}
|
|
650
|
-
|
|
651
|
-
return this.attestationPool.
|
|
676
|
+
addOwnCheckpointAttestations(attestations) {
|
|
677
|
+
return this.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
652
678
|
}
|
|
653
679
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
654
680
|
// ^ This pattern is not my favorite (md)
|
|
@@ -658,6 +684,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
658
684
|
registerCheckpointProposalHandler(handler) {
|
|
659
685
|
this.p2pService.registerCheckpointReceivedCallback(handler);
|
|
660
686
|
}
|
|
687
|
+
registerDuplicateProposalCallback(callback) {
|
|
688
|
+
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
689
|
+
}
|
|
690
|
+
registerDuplicateAttestationCallback(callback) {
|
|
691
|
+
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
692
|
+
}
|
|
661
693
|
/**
|
|
662
694
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
663
695
|
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
@@ -668,73 +700,41 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
668
700
|
const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
|
|
669
701
|
const txs = txBatches.flat();
|
|
670
702
|
if (txs.length > 0) {
|
|
671
|
-
await this.txPool.
|
|
703
|
+
await this.txPool.addPendingTxs(txs);
|
|
672
704
|
}
|
|
673
705
|
const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
|
|
674
706
|
this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
|
|
675
707
|
// We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
|
|
676
708
|
return txs;
|
|
677
709
|
}
|
|
678
|
-
getPendingTxs(limit, after) {
|
|
679
|
-
return this.getTxs('pending', limit, after);
|
|
680
|
-
}
|
|
681
|
-
getPendingTxCount() {
|
|
682
|
-
return this.txPool.getPendingTxCount();
|
|
683
|
-
}
|
|
684
|
-
async *iteratePendingTxs() {
|
|
685
|
-
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
686
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
687
|
-
if (tx) {
|
|
688
|
-
yield tx;
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
/**
|
|
693
|
-
* Returns all transactions in the transaction pool.
|
|
694
|
-
* @param filter - The type of txs to return
|
|
695
|
-
* @param limit - How many txs to return
|
|
696
|
-
* @param after - If paginating, the last known tx hash. Will return txs after this hash
|
|
697
|
-
* @returns An array of Txs.
|
|
698
|
-
*/ async getTxs(filter, limit, after) {
|
|
710
|
+
async getPendingTxs(limit, after) {
|
|
699
711
|
if (limit !== undefined && limit <= 0) {
|
|
700
712
|
throw new TypeError('limit must be greater than 0');
|
|
701
713
|
}
|
|
702
|
-
let
|
|
703
|
-
let txHashes;
|
|
704
|
-
if (filter === 'all') {
|
|
705
|
-
txs = await this.txPool.getAllTxs();
|
|
706
|
-
txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
|
|
707
|
-
} else if (filter === 'mined') {
|
|
708
|
-
const minedTxHashes = await this.txPool.getMinedTxHashes();
|
|
709
|
-
txHashes = minedTxHashes.map(([txHash])=>txHash);
|
|
710
|
-
} else if (filter === 'pending') {
|
|
711
|
-
txHashes = await this.txPool.getPendingTxHashes();
|
|
712
|
-
} else {
|
|
713
|
-
const _ = filter;
|
|
714
|
-
throw new Error(`Unknown filter ${filter}`);
|
|
715
|
-
}
|
|
714
|
+
let txHashes = await this.txPool.getPendingTxHashes();
|
|
716
715
|
let startIndex = 0;
|
|
717
|
-
let endIndex = undefined;
|
|
718
716
|
if (after) {
|
|
719
717
|
startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
|
|
720
|
-
// if we can't find the last tx in our set then return an empty array as pagination is no longer valid.
|
|
721
718
|
if (startIndex === -1) {
|
|
722
719
|
return [];
|
|
723
720
|
}
|
|
724
|
-
// increment by one because we don't want to return the same tx again
|
|
725
721
|
startIndex++;
|
|
726
722
|
}
|
|
727
|
-
|
|
728
|
-
endIndex = startIndex + limit;
|
|
729
|
-
}
|
|
723
|
+
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
730
724
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
725
|
+
const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
726
|
+
return maybeTxs.filter((tx)=>!!tx);
|
|
727
|
+
}
|
|
728
|
+
getPendingTxCount() {
|
|
729
|
+
return this.txPool.getPendingTxCount();
|
|
730
|
+
}
|
|
731
|
+
async *iteratePendingTxs() {
|
|
732
|
+
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
733
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
734
|
+
if (tx) {
|
|
735
|
+
yield tx;
|
|
736
|
+
}
|
|
736
737
|
}
|
|
737
|
-
return txs;
|
|
738
738
|
}
|
|
739
739
|
/**
|
|
740
740
|
* Returns a transaction in the transaction pool by its hash.
|
|
@@ -797,16 +797,18 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
797
797
|
return this.txPool.getArchivedTxByHash(txHash);
|
|
798
798
|
}
|
|
799
799
|
/**
|
|
800
|
-
*
|
|
801
|
-
* @param tx - The tx to
|
|
800
|
+
* Accepts a transaction, adds it to local tx pool and forwards it to other peers.
|
|
801
|
+
* @param tx - The tx to send.
|
|
802
802
|
* @returns Empty promise.
|
|
803
803
|
**/ async sendTx(tx) {
|
|
804
|
-
|
|
804
|
+
this.#assertIsReady();
|
|
805
|
+
const result = await this.txPool.addPendingTxs([
|
|
805
806
|
tx
|
|
806
807
|
]);
|
|
807
|
-
|
|
808
|
-
if (txAddedSuccessfully) {
|
|
808
|
+
if (result.accepted.length === 1) {
|
|
809
809
|
await this.p2pService.propagate(tx);
|
|
810
|
+
} else {
|
|
811
|
+
this.log.warn(`Tx ${tx.getTxHash()} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`);
|
|
810
812
|
}
|
|
811
813
|
}
|
|
812
814
|
/**
|
|
@@ -814,14 +816,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
814
816
|
* @param txs - The transactions.
|
|
815
817
|
**/ async addTxsToPool(txs) {
|
|
816
818
|
this.#assertIsReady();
|
|
817
|
-
return await this.txPool.
|
|
819
|
+
return (await this.txPool.addPendingTxs(txs)).accepted.length;
|
|
818
820
|
}
|
|
819
821
|
/**
|
|
820
822
|
* Returns whether the given tx hash is flagged as pending or mined.
|
|
821
823
|
* @param txHash - Hash of the tx to query.
|
|
822
824
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
823
|
-
*/ getTxStatus(txHash) {
|
|
824
|
-
|
|
825
|
+
*/ async getTxStatus(txHash) {
|
|
826
|
+
const status = await this.txPool.getTxStatus(txHash);
|
|
827
|
+
return status === 'protected' ? 'pending' : status;
|
|
825
828
|
}
|
|
826
829
|
getEnr() {
|
|
827
830
|
return this.p2pService.getEnr();
|
|
@@ -830,13 +833,11 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
830
833
|
return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
|
|
831
834
|
}
|
|
832
835
|
/**
|
|
833
|
-
*
|
|
834
|
-
*
|
|
835
|
-
|
|
836
|
-
* @returns Empty promise.
|
|
837
|
-
**/ async deleteTxs(txHashes) {
|
|
836
|
+
* Handles failed transaction execution by removing txs from the pool.
|
|
837
|
+
* @param txHashes - Hashes of the transactions that failed execution.
|
|
838
|
+
**/ async handleFailedExecution(txHashes) {
|
|
838
839
|
this.#assertIsReady();
|
|
839
|
-
await this.txPool.
|
|
840
|
+
await this.txPool.handleFailedExecution(txHashes);
|
|
840
841
|
}
|
|
841
842
|
/**
|
|
842
843
|
* Public function to check if the p2p client is fully synced and ready to receive txs.
|
|
@@ -880,13 +881,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
880
881
|
};
|
|
881
882
|
}
|
|
882
883
|
/**
|
|
883
|
-
*
|
|
884
|
+
* Handles mined blocks by marking the txs in them as mined.
|
|
884
885
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
885
886
|
* @returns Empty promise.
|
|
886
|
-
*/ async
|
|
887
|
+
*/ async handleMinedBlocks(blocks) {
|
|
887
888
|
for (const block of blocks){
|
|
888
|
-
|
|
889
|
-
await this.txPool.markAsMined(txHashes, block.header);
|
|
889
|
+
await this.txPool.handleMinedBlock(block);
|
|
890
890
|
}
|
|
891
891
|
}
|
|
892
892
|
/**
|
|
@@ -895,14 +895,13 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
895
895
|
* @returns Empty promise.
|
|
896
896
|
*/ async handleLatestL2Blocks(blocks) {
|
|
897
897
|
if (!blocks.length) {
|
|
898
|
-
return
|
|
898
|
+
return;
|
|
899
899
|
}
|
|
900
|
-
await this.
|
|
901
|
-
await this.
|
|
900
|
+
await this.handleMinedBlocks(blocks);
|
|
901
|
+
await this.maybeCallPrepareForSlot();
|
|
902
902
|
await this.startCollectingMissingTxs(blocks);
|
|
903
903
|
const lastBlock = blocks.at(-1);
|
|
904
904
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
905
|
-
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
906
905
|
}
|
|
907
906
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
|
|
908
907
|
try {
|
|
@@ -936,59 +935,26 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
936
935
|
* @returns Empty promise.
|
|
937
936
|
*/ async handleFinalizedL2Blocks(blocks) {
|
|
938
937
|
if (!blocks.length) {
|
|
939
|
-
return
|
|
938
|
+
return;
|
|
940
939
|
}
|
|
941
|
-
|
|
942
|
-
const
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
this.log.debug(`Deleting ${txHashes.length} txs from pool from finalized blocks up to ${lastBlockNum}`);
|
|
946
|
-
await this.txPool.deleteTxs(txHashes, {
|
|
947
|
-
permanently: true
|
|
948
|
-
});
|
|
949
|
-
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
950
|
-
await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
|
|
951
|
-
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
940
|
+
// Finalization is monotonic, so we only need to call with the last block
|
|
941
|
+
const lastBlock = blocks.at(-1);
|
|
942
|
+
await this.txPool.handleFinalizedBlock(lastBlock.header);
|
|
943
|
+
await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
|
|
952
944
|
}
|
|
953
945
|
/**
|
|
954
946
|
* Updates the tx pool after a chain prune.
|
|
955
|
-
* @param latestBlock - The block
|
|
947
|
+
* @param latestBlock - The block ID the chain was pruned to.
|
|
956
948
|
*/ async handlePruneL2Blocks(latestBlock) {
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
const txHash = tx.getTxHash();
|
|
964
|
-
txsToDelete.set(txHash.toString(), txHash);
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
this.log.info(`Detected chain prune. Removing ${txsToDelete.size} txs built against pruned blocks.`, {
|
|
968
|
-
newLatestBlock: latestBlock,
|
|
969
|
-
previousLatestBlock: await this.getSyncedLatestBlockNum(),
|
|
970
|
-
txsToDelete: Array.from(txsToDelete.keys())
|
|
971
|
-
});
|
|
972
|
-
// delete invalid txs (both pending and mined)
|
|
973
|
-
await this.txPool.deleteTxs(Array.from(txsToDelete.values()));
|
|
974
|
-
// everything left in the mined set was built against a block on the proven chain so its still valid
|
|
975
|
-
// move back to pending the txs that were reorged out of the chain, unless txPoolDeleteTxsAfterReorg is set,
|
|
976
|
-
// in which case we clean them up to avoid potential reorg loops
|
|
977
|
-
// NOTE: we can't move _all_ txs back to pending because the tx pool could keep hold of mined txs for longer
|
|
978
|
-
// (see this.keepProvenTxsFor)
|
|
979
|
-
const minedTxsFromReorg = [];
|
|
980
|
-
for (const [txHash, blockNumber] of minedTxs){
|
|
981
|
-
// We keep the txsToDelete out of this list as they have already been deleted above
|
|
982
|
-
if (blockNumber > latestBlock && !txsToDelete.has(txHash.toString())) {
|
|
983
|
-
minedTxsFromReorg.push(txHash);
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
if (this.config.txPoolDeleteTxsAfterReorg) {
|
|
987
|
-
this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
|
|
988
|
-
await this.txPool.deleteTxs(minedTxsFromReorg);
|
|
989
|
-
} else {
|
|
990
|
-
await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
|
|
949
|
+
await this.txPool.handlePrunedBlocks(latestBlock);
|
|
950
|
+
}
|
|
951
|
+
/** Checks if the slot has changed and calls prepareForSlot if so. */ async maybeCallPrepareForSlot() {
|
|
952
|
+
const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
953
|
+
if (currentSlot <= this.lastSlotProcessed) {
|
|
954
|
+
return;
|
|
991
955
|
}
|
|
956
|
+
this.lastSlotProcessed = currentSlot;
|
|
957
|
+
await this.txPool.prepareForSlot(currentSlot);
|
|
992
958
|
}
|
|
993
959
|
async startServiceIfSynched() {
|
|
994
960
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
@@ -1023,10 +989,20 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
1023
989
|
return this.p2pService.validate(txs);
|
|
1024
990
|
}
|
|
1025
991
|
/**
|
|
1026
|
-
*
|
|
1027
|
-
*
|
|
1028
|
-
|
|
1029
|
-
|
|
992
|
+
* Protects existing transactions by hash for a given slot.
|
|
993
|
+
* Returns hashes of transactions that weren't found in the pool.
|
|
994
|
+
* @param txHashes - Hashes of the transactions to protect.
|
|
995
|
+
* @param blockHeader - The block header providing slot context.
|
|
996
|
+
* @returns Hashes of transactions not found in the pool.
|
|
997
|
+
*/ protectTxs(txHashes, blockHeader) {
|
|
998
|
+
return this.txPool.protectTxs(txHashes, blockHeader);
|
|
999
|
+
}
|
|
1000
|
+
/**
|
|
1001
|
+
* Prepares the pool for a new slot.
|
|
1002
|
+
* Unprotects transactions from earlier slots and validates them.
|
|
1003
|
+
* @param slotNumber - The slot number to prepare for
|
|
1004
|
+
*/ async prepareForSlot(slotNumber) {
|
|
1005
|
+
await this.txPool.prepareForSlot(slotNumber);
|
|
1030
1006
|
}
|
|
1031
1007
|
handleAuthRequestFromPeer(authRequest, peerId) {
|
|
1032
1008
|
return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdHhfY29sbGVjdG9yX3dvcmtlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC90ZXN0L3R4X3Byb3Bvc2FsX2NvbGxlY3Rvci9wcm9wb3NhbF90eF9jb2xsZWN0b3Jfd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal_tx_collector_worker.d.ts","sourceRoot":"","sources":["../../../../src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts"],"names":[],"mappings":""}
|