@aztec/p2p 0.0.1-commit.e3c1de76 → 0.0.1-commit.e57c76e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +13 -12
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +61 -17
- package/dest/client/interface.d.ts +58 -36
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +52 -58
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +233 -235
- package/dest/config.d.ts +162 -89
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +153 -42
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -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 +507 -125
- 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/attestation_pool/mocks.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +7 -5
- package/dest/mem_pools/index.d.ts +3 -3
- 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 +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +33 -15
- 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_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 +39 -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 +97 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -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 +251 -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 +128 -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 +94 -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 +97 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -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 +12 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -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 +25 -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 → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
- 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 +93 -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 +78 -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 +75 -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/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -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 +223 -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 +108 -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 +337 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -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 +167 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -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 +914 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +56 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
- package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +252 -61
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
- package/dest/msg_validators/tx_validator/index.d.ts +5 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +4 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +22 -18
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +22 -20
- package/dest/services/encoding.d.ts +7 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +18 -11
- 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 +184 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +363 -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 +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +102 -60
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +685 -562
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +40 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +57 -12
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +100 -132
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +25 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +23 -19
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +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 +34 -26
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +32 -16
- 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 +68 -34
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +21 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +53 -218
- package/dest/services/service.d.ts +46 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +11 -14
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +26 -33
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -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 +127 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -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 +100 -0
- package/dest/services/tx_collection/index.d.ts +3 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -1
- package/dest/services/tx_collection/instrumentation.js +1 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +45 -51
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +296 -68
- package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +28 -31
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +26 -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 +46 -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 +142 -0
- package/dest/services/tx_provider.d.ts +6 -4
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +46 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +115 -14
- package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +19 -20
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +53 -50
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +169 -75
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +94 -48
- package/dest/testbench/worker_client_manager.d.ts +12 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +57 -11
- package/dest/util.d.ts +13 -8
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +15 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +130 -30
- package/src/client/interface.ts +70 -44
- package/src/client/p2p_client.ts +278 -299
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +267 -46
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +14 -8
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +22 -14
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool_v2/README.md +283 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -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 +91 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -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 +430 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -9
- package/src/msg_validators/clock_tolerance.ts +73 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +44 -1
- package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
- package/src/msg_validators/tx_validator/factory.ts +407 -80
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
- package/src/msg_validators/tx_validator/index.ts +4 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +32 -45
- package/src/services/encoding.ts +18 -10
- package/src/services/gossipsub/README.md +641 -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 +519 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +738 -620
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +52 -5
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +53 -14
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
- package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +45 -46
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +84 -34
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +23 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +61 -264
- package/src/services/service.ts +62 -29
- package/src/services/tx_collection/config.ts +40 -49
- package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
- package/src/services/tx_collection/file_store_tx_source.ts +129 -0
- package/src/services/tx_collection/index.ts +2 -6
- package/src/services/tx_collection/instrumentation.ts +1 -1
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +362 -110
- package/src/services/tx_collection/tx_collection_sink.ts +32 -36
- package/src/services/tx_collection/tx_source.ts +28 -8
- 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 +163 -0
- package/src/services/tx_provider.ts +15 -9
- package/src/test-helpers/make-test-p2p-clients.ts +7 -6
- package/src/test-helpers/mock-pubsub.ts +137 -14
- package/src/test-helpers/reqresp-nodes.ts +17 -29
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +175 -96
- package/src/testbench/p2p_client_testbench_worker.ts +100 -63
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +40 -19
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/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/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -311
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -177
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -364
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -371,9 +371,9 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
|
371
371
|
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
372
|
}
|
|
373
373
|
var _dec, _dec1, _initProto;
|
|
374
|
-
import {
|
|
375
|
-
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
374
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
376
375
|
import { createLogger } from '@aztec/foundation/log';
|
|
376
|
+
import { RunningPromise } from '@aztec/foundation/promise';
|
|
377
377
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
378
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
379
379
|
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
@@ -381,8 +381,7 @@ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
|
381
381
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
382
382
|
import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
383
383
|
import { getP2PDefaultConfig } from '../config.js';
|
|
384
|
-
import {
|
|
385
|
-
import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
|
|
384
|
+
import { TxPoolError } from '../errors/tx-pool.error.js';
|
|
386
385
|
import { TxProvider } from '../services/tx_provider.js';
|
|
387
386
|
import { P2PClientState } from './interface.js';
|
|
388
387
|
_dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
@@ -401,6 +400,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
401
400
|
l2BlockSource;
|
|
402
401
|
p2pService;
|
|
403
402
|
txCollection;
|
|
403
|
+
txFileStore;
|
|
404
|
+
epochCache;
|
|
404
405
|
_dateProvider;
|
|
405
406
|
telemetry;
|
|
406
407
|
log;
|
|
@@ -433,15 +434,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
433
434
|
blockStream;
|
|
434
435
|
txProvider;
|
|
435
436
|
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 = [];
|
|
437
|
+
/** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
|
|
438
|
+
/** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
|
|
439
|
+
constructor(store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p'), initialBlockHash){
|
|
440
|
+
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
441
|
this.config = {
|
|
446
442
|
...getP2PDefaultConfig(),
|
|
447
443
|
...config
|
|
@@ -449,30 +445,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
449
445
|
this.txPool = mempools.txPool;
|
|
450
446
|
this.attestationPool = mempools.attestationPool;
|
|
451
447
|
this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
|
|
452
|
-
|
|
453
|
-
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
454
|
-
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
455
|
-
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
456
|
-
// validator-client code into here so we can validate a proposal is reasonable.
|
|
457
|
-
this.registerBlockProposalHandler(async (block, sender)=>{
|
|
458
|
-
this.log.debug(`Received block proposal from ${sender.toString()}`);
|
|
459
|
-
// TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
|
|
460
|
-
const constants = this.txCollection.getConstants();
|
|
461
|
-
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
462
|
-
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
463
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
464
|
-
if (!parentBlock) {
|
|
465
|
-
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
466
|
-
return false;
|
|
467
|
-
}
|
|
468
|
-
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
469
|
-
await this.txProvider.getTxsForBlockProposal(block, blockNumber, {
|
|
470
|
-
pinnedPeer: sender,
|
|
471
|
-
deadline
|
|
472
|
-
});
|
|
473
|
-
return true;
|
|
474
|
-
});
|
|
475
|
-
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
448
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
|
|
476
449
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
477
450
|
}
|
|
478
451
|
registerThisValidatorAddresses(addresses) {
|
|
@@ -493,13 +466,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
493
466
|
getPeers(includePending) {
|
|
494
467
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
495
468
|
}
|
|
469
|
+
getGossipMeshPeerCount(topicType) {
|
|
470
|
+
return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
|
|
471
|
+
}
|
|
496
472
|
getL2BlockHash(number) {
|
|
497
473
|
return this.l2Tips.getL2BlockHash(number);
|
|
498
474
|
}
|
|
499
|
-
updateP2PConfig(config) {
|
|
500
|
-
this.txPool.updateConfig(config);
|
|
475
|
+
async updateP2PConfig(config) {
|
|
476
|
+
await this.txPool.updateConfig(config);
|
|
501
477
|
this.p2pService.updateConfig(config);
|
|
502
|
-
return Promise.resolve();
|
|
503
478
|
}
|
|
504
479
|
getL2Tips() {
|
|
505
480
|
return this.l2Tips.getL2Tips();
|
|
@@ -516,7 +491,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
516
491
|
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
517
492
|
const limit = event.block.number - from + 1;
|
|
518
493
|
if (limit > 0) {
|
|
519
|
-
const oldBlocks = await this.l2BlockSource.
|
|
494
|
+
const oldBlocks = await this.l2BlockSource.getBlocksData({
|
|
495
|
+
from,
|
|
496
|
+
limit
|
|
497
|
+
});
|
|
520
498
|
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
521
499
|
}
|
|
522
500
|
break;
|
|
@@ -526,7 +504,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
526
504
|
break;
|
|
527
505
|
case 'chain-pruned':
|
|
528
506
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
529
|
-
await this.handlePruneL2Blocks(event.block.
|
|
507
|
+
await this.handlePruneL2Blocks(event.block, event.checkpoint);
|
|
530
508
|
break;
|
|
531
509
|
case 'chain-checkpointed':
|
|
532
510
|
break;
|
|
@@ -541,7 +519,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
541
519
|
await this.startServiceIfSynched();
|
|
542
520
|
}
|
|
543
521
|
#assertIsReady() {
|
|
544
|
-
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
545
522
|
if (!this.isReady()) {
|
|
546
523
|
throw new Error('P2P client not ready');
|
|
547
524
|
}
|
|
@@ -556,6 +533,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
556
533
|
if (this.currentState !== P2PClientState.IDLE) {
|
|
557
534
|
return this.syncPromise;
|
|
558
535
|
}
|
|
536
|
+
// Start the tx pool first, as it needs to hydrate state from persistence
|
|
537
|
+
await this.txPool.start();
|
|
559
538
|
// get the current latest block numbers
|
|
560
539
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
561
540
|
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
@@ -596,12 +575,19 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
596
575
|
syncedFinalizedBlock
|
|
597
576
|
});
|
|
598
577
|
}
|
|
578
|
+
// Should never happen: all branches above call initBlockStream()
|
|
579
|
+
if (!this.blockStream) {
|
|
580
|
+
throw new Error('Block stream not initialized');
|
|
581
|
+
}
|
|
599
582
|
this.blockStream.start();
|
|
600
|
-
|
|
583
|
+
this.txFileStore?.start();
|
|
584
|
+
// Start slot monitor to call prepareForSlot when the slot changes
|
|
585
|
+
this.slotMonitor = new RunningPromise(()=>this.maybeCallPrepareForSlot(), this.log, this.config.slotCheckIntervalMS);
|
|
586
|
+
this.slotMonitor.start();
|
|
601
587
|
return this.syncPromise;
|
|
602
588
|
}
|
|
603
|
-
addReqRespSubProtocol(subProtocol, handler
|
|
604
|
-
return this.p2pService.addReqRespSubProtocol(subProtocol, handler
|
|
589
|
+
addReqRespSubProtocol(subProtocol, handler) {
|
|
590
|
+
return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
|
|
605
591
|
}
|
|
606
592
|
initBlockStream(startingBlock) {
|
|
607
593
|
if (!this.blockStream) {
|
|
@@ -618,125 +604,141 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
618
604
|
* 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
|
|
619
605
|
*/ async stop() {
|
|
620
606
|
this.log.debug('Stopping p2p client...');
|
|
607
|
+
await this.slotMonitor?.stop();
|
|
608
|
+
this.log.debug('Stopped slot monitor');
|
|
621
609
|
await tryStop(this.txCollection);
|
|
622
610
|
this.log.debug('Stopped tx collection service');
|
|
611
|
+
await this.txFileStore?.stop();
|
|
612
|
+
this.log.debug('Stopped tx file store');
|
|
623
613
|
await this.p2pService.stop();
|
|
624
614
|
this.log.debug('Stopped p2p service');
|
|
625
615
|
await this.blockStream?.stop();
|
|
626
616
|
this.log.debug('Stopped block downloader');
|
|
617
|
+
await this.txPool.stop();
|
|
618
|
+
this.log.debug('Stopped tx pool');
|
|
627
619
|
await this.runningPromise;
|
|
628
620
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
629
621
|
this.log.info('P2P client stopped');
|
|
630
622
|
}
|
|
631
623
|
/** Triggers a sync to the archiver. Used for testing. */ async sync() {
|
|
632
624
|
this.initBlockStream();
|
|
625
|
+
// Should never happen: initBlockStream() creates blockStream if absent
|
|
626
|
+
if (!this.blockStream) {
|
|
627
|
+
throw new Error('Block stream not initialized');
|
|
628
|
+
}
|
|
633
629
|
await this.blockStream.sync();
|
|
634
630
|
}
|
|
635
631
|
async broadcastProposal(proposal) {
|
|
636
632
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
637
633
|
// Store our own proposal so we can respond to req/resp requests for it
|
|
638
|
-
await this.attestationPool.
|
|
634
|
+
const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
|
|
635
|
+
if (count > 1) {
|
|
636
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
637
|
+
this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
|
|
638
|
+
slot: proposal.slotNumber,
|
|
639
|
+
archive: proposal.archive.toString(),
|
|
640
|
+
count
|
|
641
|
+
});
|
|
642
|
+
} else {
|
|
643
|
+
throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
639
646
|
return this.p2pService.propagate(proposal);
|
|
640
647
|
}
|
|
641
|
-
broadcastCheckpointProposal(proposal) {
|
|
648
|
+
async broadcastCheckpointProposal(proposal) {
|
|
642
649
|
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
650
|
+
const blockProposal = proposal.getBlockProposal();
|
|
651
|
+
if (blockProposal) {
|
|
652
|
+
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
653
|
+
await this.attestationPool.tryAddBlockProposal(blockProposal);
|
|
654
|
+
}
|
|
655
|
+
const checkpointCore = proposal.toCore();
|
|
656
|
+
const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
|
|
657
|
+
if (count > 1) {
|
|
658
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
659
|
+
this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
|
|
660
|
+
slot: proposal.slotNumber,
|
|
661
|
+
archive: proposal.archive.toString(),
|
|
662
|
+
count
|
|
663
|
+
});
|
|
664
|
+
} else {
|
|
665
|
+
throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
643
668
|
return this.p2pService.propagate(proposal);
|
|
644
669
|
}
|
|
645
670
|
async broadcastCheckpointAttestations(attestations) {
|
|
646
671
|
this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
|
|
647
672
|
await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
|
|
648
673
|
}
|
|
649
|
-
async getCheckpointAttestationsForSlot(slot,
|
|
650
|
-
return await (
|
|
674
|
+
async getCheckpointAttestationsForSlot(slot, proposalPayloadHash) {
|
|
675
|
+
return await (proposalPayloadHash ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
676
|
+
}
|
|
677
|
+
addOwnCheckpointAttestations(attestations) {
|
|
678
|
+
return this.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
651
679
|
}
|
|
652
|
-
|
|
653
|
-
return this.attestationPool.
|
|
680
|
+
getProposalsForSlot(slot) {
|
|
681
|
+
return this.attestationPool.getProposalsForSlot(slot);
|
|
682
|
+
}
|
|
683
|
+
hasBlockProposalsForSlot(slot) {
|
|
684
|
+
return this.attestationPool.hasBlockProposalsForSlot(slot);
|
|
654
685
|
}
|
|
655
686
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
656
687
|
// ^ This pattern is not my favorite (md)
|
|
657
688
|
registerBlockProposalHandler(handler) {
|
|
658
689
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
659
690
|
}
|
|
660
|
-
|
|
661
|
-
this.p2pService.
|
|
691
|
+
registerValidatorCheckpointProposalHandler(handler) {
|
|
692
|
+
this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
|
|
662
693
|
}
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
666
|
-
const timeoutMs = 8000; // Longer timeout for now
|
|
667
|
-
const maxRetryAttempts = 10; // Keep retrying within the timeout
|
|
668
|
-
const requests = chunkTxHashesRequest(txHashes);
|
|
669
|
-
const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
|
|
670
|
-
const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
|
|
671
|
-
const txs = txBatches.flat();
|
|
672
|
-
if (txs.length > 0) {
|
|
673
|
-
await this.txPool.addTxs(txs);
|
|
674
|
-
}
|
|
675
|
-
const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
|
|
676
|
-
this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
|
|
677
|
-
// We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
|
|
678
|
-
return txs;
|
|
694
|
+
registerAllNodesCheckpointProposalHandler(handler) {
|
|
695
|
+
this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
|
|
679
696
|
}
|
|
680
|
-
|
|
681
|
-
|
|
697
|
+
registerDuplicateProposalCallback(callback) {
|
|
698
|
+
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
682
699
|
}
|
|
683
|
-
|
|
684
|
-
|
|
700
|
+
registerDuplicateAttestationCallback(callback) {
|
|
701
|
+
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
685
702
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
689
|
-
if (tx) {
|
|
690
|
-
yield tx;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
703
|
+
registerCheckpointAttestationCallback(callback) {
|
|
704
|
+
this.p2pService.registerCheckpointAttestationCallback(callback);
|
|
693
705
|
}
|
|
694
|
-
|
|
695
|
-
* Returns all transactions in the transaction pool.
|
|
696
|
-
* @param filter - The type of txs to return
|
|
697
|
-
* @param limit - How many txs to return
|
|
698
|
-
* @param after - If paginating, the last known tx hash. Will return txs after this hash
|
|
699
|
-
* @returns An array of Txs.
|
|
700
|
-
*/ async getTxs(filter, limit, after) {
|
|
706
|
+
async getPendingTxs(limit, after) {
|
|
701
707
|
if (limit !== undefined && limit <= 0) {
|
|
702
708
|
throw new TypeError('limit must be greater than 0');
|
|
703
709
|
}
|
|
704
|
-
let
|
|
705
|
-
let txHashes;
|
|
706
|
-
if (filter === 'all') {
|
|
707
|
-
txs = await this.txPool.getAllTxs();
|
|
708
|
-
txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
|
|
709
|
-
} else if (filter === 'mined') {
|
|
710
|
-
const minedTxHashes = await this.txPool.getMinedTxHashes();
|
|
711
|
-
txHashes = minedTxHashes.map(([txHash])=>txHash);
|
|
712
|
-
} else if (filter === 'pending') {
|
|
713
|
-
txHashes = await this.txPool.getPendingTxHashes();
|
|
714
|
-
} else {
|
|
715
|
-
const _ = filter;
|
|
716
|
-
throw new Error(`Unknown filter ${filter}`);
|
|
717
|
-
}
|
|
710
|
+
let txHashes = await this.txPool.getPendingTxHashes();
|
|
718
711
|
let startIndex = 0;
|
|
719
|
-
let endIndex = undefined;
|
|
720
712
|
if (after) {
|
|
721
713
|
startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
|
|
722
|
-
// if we can't find the last tx in our set then return an empty array as pagination is no longer valid.
|
|
723
714
|
if (startIndex === -1) {
|
|
724
715
|
return [];
|
|
725
716
|
}
|
|
726
|
-
// increment by one because we don't want to return the same tx again
|
|
727
717
|
startIndex++;
|
|
728
718
|
}
|
|
729
|
-
|
|
730
|
-
endIndex = startIndex + limit;
|
|
731
|
-
}
|
|
719
|
+
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
732
720
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
721
|
+
const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
722
|
+
return maybeTxs.filter((tx)=>!!tx);
|
|
723
|
+
}
|
|
724
|
+
getPendingTxCount() {
|
|
725
|
+
return this.txPool.getPendingTxCount();
|
|
726
|
+
}
|
|
727
|
+
async *iteratePendingTxs() {
|
|
728
|
+
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
729
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
730
|
+
if (tx) {
|
|
731
|
+
yield tx;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
async *iterateEligiblePendingTxs() {
|
|
736
|
+
for (const txHash of (await this.txPool.getEligiblePendingTxHashes())){
|
|
737
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
738
|
+
if (tx) {
|
|
739
|
+
yield tx;
|
|
740
|
+
}
|
|
738
741
|
}
|
|
739
|
-
return txs;
|
|
740
742
|
}
|
|
741
743
|
/**
|
|
742
744
|
* Returns a transaction in the transaction pool by its hash.
|
|
@@ -756,42 +758,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
756
758
|
return this.txPool.hasTxs(txHashes);
|
|
757
759
|
}
|
|
758
760
|
/**
|
|
759
|
-
* Returns transactions in the transaction pool by hash.
|
|
760
|
-
* If a transaction is not in the pool, it will be requested from the network.
|
|
761
|
-
* @param txHashes - Hashes of the transactions to look for.
|
|
762
|
-
* @returns The txs found, or undefined if not found in the order requested.
|
|
763
|
-
*/ async getTxsByHash(txHashes, pinnedPeerId) {
|
|
764
|
-
const txs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
765
|
-
const missingTxHashes = txs.map((tx, index)=>[
|
|
766
|
-
tx,
|
|
767
|
-
index
|
|
768
|
-
]).filter(([tx, _index])=>!tx).map(([_tx, index])=>txHashes[index]);
|
|
769
|
-
if (missingTxHashes.length === 0) {
|
|
770
|
-
return txs;
|
|
771
|
-
}
|
|
772
|
-
const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
|
|
773
|
-
// TODO: optimize
|
|
774
|
-
// Merge the found txs in order
|
|
775
|
-
const mergingTxs = txHashes.map((txHash)=>{
|
|
776
|
-
// Is it in the txs list from the mempool?
|
|
777
|
-
for (const tx of txs){
|
|
778
|
-
if (tx !== undefined && tx.getTxHash().equals(txHash)) {
|
|
779
|
-
return tx;
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
// Is it in the fetched missing txs?
|
|
783
|
-
// Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
|
|
784
|
-
for (const tx of missingTxs){
|
|
785
|
-
if (tx.getTxHash().equals(txHash)) {
|
|
786
|
-
return tx;
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
// Otherwise return undefined
|
|
790
|
-
return undefined;
|
|
791
|
-
});
|
|
792
|
-
return mergingTxs;
|
|
793
|
-
}
|
|
794
|
-
/**
|
|
795
761
|
* Returns an archived transaction in the transaction pool by its hash.
|
|
796
762
|
* @param txHash - Hash of the archived transaction to look for.
|
|
797
763
|
* @returns A single tx or undefined.
|
|
@@ -799,31 +765,35 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
799
765
|
return this.txPool.getArchivedTxByHash(txHash);
|
|
800
766
|
}
|
|
801
767
|
/**
|
|
802
|
-
*
|
|
803
|
-
* @param tx - The tx to
|
|
768
|
+
* Accepts a transaction, adds it to local tx pool and forwards it to other peers.
|
|
769
|
+
* @param tx - The tx to send.
|
|
804
770
|
* @returns Empty promise.
|
|
805
771
|
**/ async sendTx(tx) {
|
|
806
|
-
|
|
772
|
+
this.#assertIsReady();
|
|
773
|
+
const result = await this.txPool.addPendingTxs([
|
|
807
774
|
tx
|
|
808
|
-
]
|
|
809
|
-
|
|
810
|
-
|
|
775
|
+
], {
|
|
776
|
+
feeComparisonOnly: true
|
|
777
|
+
});
|
|
778
|
+
if (result.accepted.length === 1) {
|
|
811
779
|
await this.p2pService.propagate(tx);
|
|
780
|
+
return;
|
|
812
781
|
}
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
782
|
+
const txHashStr = tx.getTxHash().toString();
|
|
783
|
+
const reason = result.errors?.get(txHashStr);
|
|
784
|
+
if (reason) {
|
|
785
|
+
this.log.warn(`Tx ${txHashStr} not added to pool: ${reason.message}`);
|
|
786
|
+
throw new TxPoolError(reason);
|
|
787
|
+
}
|
|
788
|
+
this.log.warn(`Tx ${txHashStr} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`);
|
|
820
789
|
}
|
|
821
790
|
/**
|
|
822
791
|
* Returns whether the given tx hash is flagged as pending or mined.
|
|
823
792
|
* @param txHash - Hash of the tx to query.
|
|
824
793
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
825
|
-
*/ getTxStatus(txHash) {
|
|
826
|
-
|
|
794
|
+
*/ async getTxStatus(txHash) {
|
|
795
|
+
const status = await this.txPool.getTxStatus(txHash);
|
|
796
|
+
return status === 'protected' ? 'pending' : status;
|
|
827
797
|
}
|
|
828
798
|
getEnr() {
|
|
829
799
|
return this.p2pService.getEnr();
|
|
@@ -832,13 +802,11 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
832
802
|
return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
|
|
833
803
|
}
|
|
834
804
|
/**
|
|
835
|
-
*
|
|
836
|
-
*
|
|
837
|
-
|
|
838
|
-
* @returns Empty promise.
|
|
839
|
-
**/ async deleteTxs(txHashes) {
|
|
805
|
+
* Handles failed transaction execution by removing txs from the pool.
|
|
806
|
+
* @param txHashes - Hashes of the transactions that failed execution.
|
|
807
|
+
**/ async handleFailedExecution(txHashes) {
|
|
840
808
|
this.#assertIsReady();
|
|
841
|
-
await this.txPool.
|
|
809
|
+
await this.txPool.handleFailedExecution(txHashes);
|
|
842
810
|
}
|
|
843
811
|
/**
|
|
844
812
|
* Public function to check if the p2p client is fully synced and ready to receive txs.
|
|
@@ -872,7 +840,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
872
840
|
* @returns Information about p2p client status: state & syncedToBlockNum.
|
|
873
841
|
*/ async getStatus() {
|
|
874
842
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
875
|
-
const blockHash =
|
|
843
|
+
const blockHash = await this.l2BlockSource.getBlockData({
|
|
844
|
+
number: blockNumber
|
|
845
|
+
}).then((data)=>data?.header.hash()).then((hash)=>hash?.toString());
|
|
876
846
|
return {
|
|
877
847
|
state: this.currentState,
|
|
878
848
|
syncedToL2Block: {
|
|
@@ -882,13 +852,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
882
852
|
};
|
|
883
853
|
}
|
|
884
854
|
/**
|
|
885
|
-
*
|
|
855
|
+
* Handles mined blocks by marking the txs in them as mined.
|
|
886
856
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
887
857
|
* @returns Empty promise.
|
|
888
|
-
*/ async
|
|
858
|
+
*/ async handleMinedBlocks(blocks) {
|
|
889
859
|
for (const block of blocks){
|
|
890
|
-
|
|
891
|
-
await this.txPool.markAsMined(txHashes, block.header);
|
|
860
|
+
await this.txPool.handleMinedBlock(block);
|
|
892
861
|
}
|
|
893
862
|
}
|
|
894
863
|
/**
|
|
@@ -897,16 +866,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
897
866
|
* @returns Empty promise.
|
|
898
867
|
*/ async handleLatestL2Blocks(blocks) {
|
|
899
868
|
if (!blocks.length) {
|
|
900
|
-
return
|
|
869
|
+
return;
|
|
901
870
|
}
|
|
902
|
-
await this.
|
|
903
|
-
await this.
|
|
904
|
-
await this.
|
|
871
|
+
await this.handleMinedBlocks(blocks);
|
|
872
|
+
await this.maybeCallPrepareForSlot();
|
|
873
|
+
await this.collectingMissingTxs(blocks);
|
|
905
874
|
const lastBlock = blocks.at(-1);
|
|
906
875
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
907
|
-
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
908
876
|
}
|
|
909
|
-
/** Request txs for unproven blocks so the prover node
|
|
877
|
+
/** Request txs for unproven blocks so the prover node can prove. */ async collectingMissingTxs(blocks) {
|
|
910
878
|
try {
|
|
911
879
|
// TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
|
|
912
880
|
// be much lower than the actual one, and it does not update until the pending chain is
|
|
@@ -914,7 +882,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
914
882
|
// are already proven, but the archiver has not yet updated its state. Until this is properly
|
|
915
883
|
// fixed, it is mitigated by the expiration date of collection requests, which depends on
|
|
916
884
|
// the slot number of the block.
|
|
917
|
-
const provenBlockNumber = await this.l2BlockSource.
|
|
885
|
+
const provenBlockNumber = await this.l2BlockSource.getBlockNumber({
|
|
886
|
+
tag: 'proven'
|
|
887
|
+
}) ?? BlockNumber.ZERO;
|
|
918
888
|
const unprovenBlocks = blocks.filter((block)=>block.number > provenBlockNumber);
|
|
919
889
|
for (const block of unprovenBlocks){
|
|
920
890
|
const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
|
|
@@ -925,7 +895,19 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
925
895
|
blockNumber: block.number,
|
|
926
896
|
blockHash: await block.hash().then((h)=>h.toString())
|
|
927
897
|
});
|
|
928
|
-
|
|
898
|
+
// Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
|
|
899
|
+
// count *full slots after the block slot* — value N means collection runs until
|
|
900
|
+
// `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
|
|
901
|
+
// gives up before the data-withholding slash verdict is rendered.
|
|
902
|
+
const blockSlot = block.header.getSlot();
|
|
903
|
+
const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
|
|
904
|
+
const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
|
|
905
|
+
const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
|
|
906
|
+
const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
|
|
907
|
+
const deadline = new Date(Number(deadlineSeconds) * 1000);
|
|
908
|
+
await this.txCollection.collectFastForBlock(block, missingTxHashes, {
|
|
909
|
+
deadline
|
|
910
|
+
});
|
|
929
911
|
}
|
|
930
912
|
}
|
|
931
913
|
} catch (err) {
|
|
@@ -938,59 +920,65 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
938
920
|
* @returns Empty promise.
|
|
939
921
|
*/ async handleFinalizedL2Blocks(blocks) {
|
|
940
922
|
if (!blocks.length) {
|
|
941
|
-
return
|
|
923
|
+
return;
|
|
942
924
|
}
|
|
943
|
-
|
|
944
|
-
const
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
this.log.debug(`Deleting ${txHashes.length} txs from pool from finalized blocks up to ${lastBlockNum}`);
|
|
948
|
-
await this.txPool.deleteTxs(txHashes, {
|
|
949
|
-
permanently: true
|
|
950
|
-
});
|
|
951
|
-
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
952
|
-
await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
|
|
953
|
-
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
925
|
+
// Finalization is monotonic, so we only need to call with the last block
|
|
926
|
+
const lastBlock = blocks.at(-1);
|
|
927
|
+
await this.txPool.handleFinalizedBlock(lastBlock.header);
|
|
928
|
+
await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
|
|
954
929
|
}
|
|
955
930
|
/**
|
|
956
931
|
* Updates the tx pool after a chain prune.
|
|
957
|
-
*
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber > latestBlock) {
|
|
965
|
-
const txHash = tx.getTxHash();
|
|
966
|
-
txsToDelete.set(txHash.toString(), txHash);
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
this.log.info(`Detected chain prune. Removing ${txsToDelete.size} txs built against pruned blocks.`, {
|
|
970
|
-
newLatestBlock: latestBlock,
|
|
971
|
-
previousLatestBlock: await this.getSyncedLatestBlockNum(),
|
|
972
|
-
txsToDelete: Array.from(txsToDelete.keys())
|
|
932
|
+
* Detects epoch prunes (checkpoint number changed) and deletes all txs in that case.
|
|
933
|
+
* @param latestBlock - The block ID the chain was pruned to.
|
|
934
|
+
* @param newCheckpoint - The checkpoint ID after the prune.
|
|
935
|
+
*/ async handlePruneL2Blocks(latestBlock, newCheckpoint) {
|
|
936
|
+
const deleteAllTxs = this.config.txPoolDeleteTxsAfterReorg && await this.isEpochPrune(newCheckpoint);
|
|
937
|
+
await this.txPool.handlePrunedBlocks(latestBlock, {
|
|
938
|
+
deleteAllTxs
|
|
973
939
|
});
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
940
|
+
}
|
|
941
|
+
/**
|
|
942
|
+
* Returns true if the prune is an epoch prune (new checkpoint number is less than old).
|
|
943
|
+
* If the checkpoint number stays the same or increases, the prune is within a checkpoint.
|
|
944
|
+
*/ async isEpochPrune(newCheckpoint) {
|
|
945
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
946
|
+
const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
|
|
947
|
+
if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
|
|
948
|
+
return false;
|
|
949
|
+
}
|
|
950
|
+
const newCheckpointNumber = newCheckpoint.number;
|
|
951
|
+
// We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
|
|
952
|
+
// To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
|
|
953
|
+
// This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
|
|
954
|
+
const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
|
|
955
|
+
const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
|
|
956
|
+
if (isEpochPrune) {
|
|
957
|
+
this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
|
|
958
|
+
oldCheckpointNumber,
|
|
959
|
+
newCheckpointNumber,
|
|
960
|
+
thresholdForEpochPrune
|
|
961
|
+
});
|
|
987
962
|
}
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
963
|
+
return isEpochPrune;
|
|
964
|
+
}
|
|
965
|
+
/** Checks if the slot has changed and calls prepareForSlot if so. */ async maybeCallPrepareForSlot() {
|
|
966
|
+
// If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
|
|
967
|
+
const l2Tips = await this.l2Tips.getL2Tips();
|
|
968
|
+
const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
|
|
969
|
+
let slot;
|
|
970
|
+
if (hasProposedCheckpoint) {
|
|
971
|
+
const { targetSlot } = this.epochCache.getTargetAndNextSlot();
|
|
972
|
+
slot = targetSlot;
|
|
991
973
|
} else {
|
|
992
|
-
|
|
974
|
+
const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
975
|
+
slot = currentSlot;
|
|
976
|
+
}
|
|
977
|
+
if (slot <= this.lastSlotProcessed) {
|
|
978
|
+
return;
|
|
993
979
|
}
|
|
980
|
+
this.lastSlotProcessed = slot;
|
|
981
|
+
await this.txPool.prepareForSlot(slot);
|
|
994
982
|
}
|
|
995
983
|
async startServiceIfSynched() {
|
|
996
984
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
@@ -1021,14 +1009,24 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
1021
1009
|
this.currentState = newState;
|
|
1022
1010
|
this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
|
|
1023
1011
|
}
|
|
1024
|
-
|
|
1025
|
-
return this.p2pService.
|
|
1012
|
+
validateTxsReceivedInBlockProposal(txs) {
|
|
1013
|
+
return this.p2pService.validateTxsReceivedInBlockProposal(txs);
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* Protects existing transactions by hash for a given slot.
|
|
1017
|
+
* Returns hashes of transactions that weren't found in the pool.
|
|
1018
|
+
* @param txHashes - Hashes of the transactions to protect.
|
|
1019
|
+
* @param blockHeader - The block header providing slot context.
|
|
1020
|
+
* @returns Hashes of transactions not found in the pool.
|
|
1021
|
+
*/ protectTxs(txHashes, blockHeader) {
|
|
1022
|
+
return this.txPool.protectTxs(txHashes, blockHeader);
|
|
1026
1023
|
}
|
|
1027
1024
|
/**
|
|
1028
|
-
*
|
|
1029
|
-
*
|
|
1030
|
-
|
|
1031
|
-
|
|
1025
|
+
* Prepares the pool for a new slot.
|
|
1026
|
+
* Unprotects transactions from earlier slots and validates them.
|
|
1027
|
+
* @param slotNumber - The slot number to prepare for
|
|
1028
|
+
*/ async prepareForSlot(slotNumber) {
|
|
1029
|
+
await this.txPool.prepareForSlot(slotNumber);
|
|
1032
1030
|
}
|
|
1033
1031
|
handleAuthRequestFromPeer(authRequest, peerId) {
|
|
1034
1032
|
return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
|