@aztec/p2p 0.0.1-commit.f2ce05ee → 0.0.1-commit.f5a9928
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 +130 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +11 -10
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +64 -17
- package/dest/client/interface.d.ts +86 -40
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +67 -64
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +251 -251
- package/dest/config.d.ts +173 -94
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +158 -44
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/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 +106 -55
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +302 -195
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +274 -115
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -1
- 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 +2 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +12 -5
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +38 -17
- package/dest/mem_pools/interface.d.ts +3 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +10 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +29 -20
- 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 +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +8 -4
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +15 -5
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +2 -1
- 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 +64 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +6 -5
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +9 -8
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +15 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
- package/dest/mem_pools/tx_pool_v2/index.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +2 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +25 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +62 -16
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +6 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +81 -15
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +147 -19
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +26 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +79 -43
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +27 -7
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +94 -32
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +62 -9
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +537 -246
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +12 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +12 -5
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +36 -9
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +130 -48
- 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 +133 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +261 -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 +104 -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 +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +119 -23
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +25 -19
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +28 -20
- package/dest/services/encoding.d.ts +24 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +43 -26
- package/dest/services/gossipsub/topic_score_params.d.ts +23 -17
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +36 -24
- package/dest/services/libp2p/instrumentation.d.ts +6 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +21 -0
- package/dest/services/libp2p/libp2p_service.d.ts +71 -60
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +602 -407
- 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 +31 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +127 -26
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +102 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +5 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +95 -127
- 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 +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- package/dest/services/reqresp/interface.d.ts +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 +3 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +57 -24
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +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 +3 -13
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +85 -219
- package/dest/services/service.d.ts +63 -19
- 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 +29 -7
- package/dest/services/tx_file_store/config.d.ts +1 -3
- package/dest/services/tx_file_store/config.d.ts.map +1 -1
- package/dest/services/tx_file_store/config.js +0 -4
- package/dest/services/tx_file_store/tx_file_store.d.ts +4 -5
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +13 -20
- 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 +56 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +128 -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 +17 -19
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +49 -37
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +142 -50
- 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 +112 -49
- 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 +17 -17
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +129 -28
- package/src/client/interface.ts +88 -48
- package/src/client/p2p_client.ts +284 -317
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +280 -49
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +373 -236
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +298 -119
- package/src/mem_pools/attestation_pool/index.ts +3 -3
- package/src/mem_pools/attestation_pool/mocks.ts +14 -8
- package/src/mem_pools/index.ts +1 -1
- package/src/mem_pools/instrumentation.ts +27 -17
- package/src/mem_pools/interface.ts +2 -2
- package/src/mem_pools/tx_pool_v2/README.md +85 -11
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +6 -4
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +21 -6
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +5 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +4 -6
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +8 -10
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -10
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
- package/src/mem_pools/tx_pool_v2/index.ts +2 -1
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +63 -16
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +215 -27
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +91 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +122 -33
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +602 -242
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +155 -49
- package/src/msg_validators/tx_validator/README.md +129 -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 +413 -80
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +195 -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 +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +38 -46
- package/src/services/encoding.ts +42 -26
- package/src/services/gossipsub/README.md +59 -22
- package/src/services/gossipsub/topic_score_params.ts +58 -31
- package/src/services/libp2p/instrumentation.ts +22 -0
- package/src/services/libp2p/libp2p_service.ts +687 -466
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +140 -25
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +92 -138
- 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 +19 -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 +36 -32
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +64 -20
- 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 +3 -13
- package/src/services/reqresp/reqresp.ts +100 -263
- package/src/services/service.ts +80 -35
- 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 +29 -8
- package/src/services/tx_file_store/config.ts +0 -6
- package/src/services/tx_file_store/tx_file_store.ts +15 -25
- 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 +152 -14
- package/src/test-helpers/reqresp-nodes.ts +15 -28
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +171 -68
- package/src/testbench/p2p_client_testbench_worker.ts +121 -64
- 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/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -37
- package/dest/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 -52
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -307
- 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 -49
- 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/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/clock_tolerance.ts +0 -51
- 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 -354
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -112
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -31,7 +31,13 @@ export declare class TxPoolIndices {
|
|
|
31
31
|
* Iterates pending transaction hashes in priority order.
|
|
32
32
|
* @param order - 'desc' for highest priority first, 'asc' for lowest priority first
|
|
33
33
|
*/
|
|
34
|
-
iteratePendingByPriority(order: 'asc' | 'desc'): Generator<string>;
|
|
34
|
+
iteratePendingByPriority(order: 'asc' | 'desc', filter?: (hash: string) => boolean): Generator<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Iterates pending transaction hashes in priority order, skipping txs received after maxReceivedAt.
|
|
37
|
+
* @param order - 'desc' for highest priority first, 'asc' for lowest priority first
|
|
38
|
+
* @param maxReceivedAt - Only yield txs with receivedAt <= this value
|
|
39
|
+
*/
|
|
40
|
+
iterateEligiblePendingByPriority(order: 'asc' | 'desc', maxReceivedAt: number): Generator<string>;
|
|
35
41
|
/** Iterates all metadata entries */
|
|
36
42
|
iterateMetadata(): Generator<[string, TxMetaData]>;
|
|
37
43
|
/** Adds a new pending transaction to all indices */
|
|
@@ -65,6 +71,14 @@ export declare class TxPoolIndices {
|
|
|
65
71
|
getFeePayerPendingTxs(feePayer: string): TxMetaData[];
|
|
66
72
|
/** Gets the count of pending transactions */
|
|
67
73
|
getPendingTxCount(): number;
|
|
74
|
+
/**
|
|
75
|
+
* Returns whether at least `minCount` pending transactions were received at or before maxReceivedAt,
|
|
76
|
+
* i.e. are old enough to be eligible for block building. Stops as soon as the threshold is met, so it
|
|
77
|
+
* does not scan the whole pool when only a handful of eligible txs are needed. The total pending count
|
|
78
|
+
* is an upper bound on the eligible count, so a pool with fewer than `minCount` pending can never
|
|
79
|
+
* satisfy the threshold and short-circuits without scanning.
|
|
80
|
+
*/
|
|
81
|
+
hasEligiblePendingTxs(maxReceivedAt: number, minCount: number): boolean;
|
|
68
82
|
/** Gets the lowest priority pending transaction hashes (up to limit) */
|
|
69
83
|
getLowestPriorityPending(limit: number): string[];
|
|
70
84
|
/** Gets the lowest priority pending transaction */
|
|
@@ -83,17 +97,26 @@ export declare class TxPoolIndices {
|
|
|
83
97
|
findTxsMinedAtOrBefore(blockNumber: number): string[];
|
|
84
98
|
/** Finds protected tx hashes from slots earlier than the given slot number */
|
|
85
99
|
findExpiredProtectedTxs(slotNumber: SlotNumber): string[];
|
|
100
|
+
/**
|
|
101
|
+
* From the given hashes, returns those whose protection is recorded at exactly the given slot.
|
|
102
|
+
* Used to release the protections a single block proposal created without disturbing entries a
|
|
103
|
+
* later proposal raised to a higher slot via updateProtection.
|
|
104
|
+
*/
|
|
105
|
+
findProtectedTxsAtSlot(txHashes: string[], slotNumber: SlotNumber): string[];
|
|
86
106
|
/** Filters out transactions that are currently protected */
|
|
87
107
|
filterUnprotected(txs: TxMetaData[]): TxMetaData[];
|
|
88
108
|
/** Filters to transactions that have metadata and are not mined */
|
|
89
109
|
filterRestorable(txHashes: string[]): TxMetaData[];
|
|
90
|
-
/** Counts transactions by state */
|
|
110
|
+
/** Counts transactions by state and estimates total metadata memory usage */
|
|
91
111
|
countTxs(): {
|
|
92
112
|
pending: number;
|
|
93
113
|
protected: number;
|
|
94
114
|
mined: number;
|
|
115
|
+
totalMetadataBytes: number;
|
|
95
116
|
};
|
|
117
|
+
/** Returns the estimated total memory consumed by all metadata objects */
|
|
118
|
+
getTotalMetadataBytes(): number;
|
|
96
119
|
/** Gets all mined transactions with their block IDs */
|
|
97
120
|
getMinedTxs(): [string, L2BlockId][];
|
|
98
121
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF9pbmRpY2VzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2xfdjIvdHhfcG9vbF9pbmRpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQTJCLEtBQUssVUFBVSxFQUFFLEtBQUssT0FBTyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBRTNHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gscUJBQWEsYUFBYTs7SUFnQnhCOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FRcEM7SUFFRCxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUVsRDtJQUVELEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FFM0I7SUFFRCxPQUFPLElBQUksT0FBTyxDQUVqQjtJQUVELFVBQVUsSUFBSSxNQUFNLENBRW5CO0lBTUQ7OztPQUdHO0lBQ0Ysd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxLQUFLLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBV3RHO0lBRUQ7Ozs7T0FJRztJQUNGLGdDQUFnQyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQU9qRztJQUVELG9DQUFvQztJQUNuQyxlQUFlLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBRWxEO0lBTUQsb0RBQW9EO0lBQ3BELFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FHakM7SUFFRCxzRUFBc0U7SUFDdEUsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBR3JEO0lBRUQsa0VBQWtFO0lBQ2xFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FFL0I7SUFFRCw4RUFBOEU7SUFDOUUsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBT3REO0lBRUQsaURBQWlEO0lBQ2pELGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FFcEM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQWlCN0Q7SUFFRCxrRUFBa0U7SUFDbEUsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBRTFEO0lBRUQsMERBQTBEO0lBQzFELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FFeEQ7SUFFRCx3Q0FBd0M7SUFDeEMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBSXhDO0lBRUQsNkNBQTZDO0lBQzdDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FTM0I7SUFFRCxxRUFBcUU7SUFDckUsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBRS9DO0lBRUQsOEVBQThFO0lBQzlFLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUUxQztJQU1ELDBEQUEwRDtJQUMxRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQWFwRDtJQUVELDZDQUE2QztJQUM3QyxpQkFBaUIsSUFBSSxNQUFNLENBRTFCO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FjdEU7SUFFRCx3RUFBd0U7SUFDeEUsd0JBQXdCLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FhaEQ7SUFFRCxtREFBbUQ7SUFDbkQsMEJBQTBCLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FRbkQ7SUFFRCxvQ0FBb0M7SUFDcEMsYUFBYSxJQUFJLFVBQVUsRUFBRSxDQVM1QjtJQUVELG9EQUFvRDtJQUNwRCxtQkFBbUIsSUFBSSxNQUFNLEVBQUUsQ0FFOUI7SUFFRCxxRUFBcUU7SUFDckUsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUUxRDtJQUVELG9DQUFvQztJQUNwQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBRS9EO0lBTUQsMEVBQTBFO0lBQzFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBUW5EO0lBRUQsZ0VBQWdFO0lBQ2hFLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBUXBEO0lBRUQsOEVBQThFO0lBQzlFLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBUXhEO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUUzRTtJQUVELDREQUE0RDtJQUM1RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBRWpEO0lBRUQsbUVBQW1FO0lBQ25FLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FTakQ7SUFNRCw2RUFBNkU7SUFDN0UsUUFBUSxJQUFJO1FBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FtQjVGO0lBRUQsMEVBQTBFO0lBQzFFLHFCQUFxQixJQUFJLE1BQU0sQ0FNOUI7SUFFRCx1REFBdUQ7SUFDdkQsV0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBUW5DO0NBa0RGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool_indices.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_indices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tx_pool_indices.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_indices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAA2B,KAAK,UAAU,EAAE,KAAK,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAE3G;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;;IAgBxB;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAQpC;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElD;IAED,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3B;IAED,OAAO,IAAI,OAAO,CAEjB;IAED,UAAU,IAAI,MAAM,CAEnB;IAMD;;;OAGG;IACF,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAWtG;IAED;;;;OAIG;IACF,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAOjG;IAED,oCAAoC;IACnC,eAAe,IAAI,SAAS,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAElD;IAMD,oDAAoD;IACpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAGjC;IAED,sEAAsE;IACtE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAGrD;IAED,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAE/B;IAED,8EAA8E;IAC9E,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAOtD;IAED,iDAAiD;IACjD,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAEpC;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAiB7D;IAED,kEAAkE;IAClE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAE1D;IAED,0DAA0D;IAC1D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAExD;IAED,wCAAwC;IACxC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAIxC;IAED,6CAA6C;IAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAS3B;IAED,qEAAqE;IACrE,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAE/C;IAED,8EAA8E;IAC9E,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAE1C;IAMD,0DAA0D;IAC1D,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAapD;IAED,6CAA6C;IAC7C,iBAAiB,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CActE;IAED,wEAAwE;IACxE,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAahD;IAED,mDAAmD;IACnD,0BAA0B,IAAI,UAAU,GAAG,SAAS,CAQnD;IAED,oCAAoC;IACpC,aAAa,IAAI,UAAU,EAAE,CAS5B;IAED,oDAAoD;IACpD,mBAAmB,IAAI,MAAM,EAAE,CAE9B;IAED,qEAAqE;IACrE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;IAED,oCAAoC;IACpC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAE/D;IAMD,0EAA0E;IAC1E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAQnD;IAED,gEAAgE;IAChE,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpD;IAED,8EAA8E;IAC9E,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAQxD;IAED;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAE3E;IAED,4DAA4D;IAC5D,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAEjD;IAED,mEAAmE;IACnE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CASjD;IAMD,6EAA6E;IAC7E,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAmB5F;IAED,0EAA0E;IAC1E,qBAAqB,IAAI,MAAM,CAM9B;IAED,uDAAuD;IACvD,WAAW,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAQnC;CAkDF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { insertIntoSortedArray, removeFromSortedArray } from '@aztec/foundation/array';
|
|
2
|
+
import { comparePriority } from './tx_metadata.js';
|
|
2
3
|
/**
|
|
3
4
|
* Manages in-memory indices for the transaction pool.
|
|
4
5
|
*
|
|
@@ -14,7 +15,7 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
14
15
|
/** Primary metadata store: txHash -> TxMetaData */ #metadata = new Map();
|
|
15
16
|
/** Nullifier to txHash index (pending txs only) */ #nullifierToTxHash = new Map();
|
|
16
17
|
/** Fee payer to txHashes index (pending txs only) */ #feePayerToTxHashes = new Map();
|
|
17
|
-
/** Pending
|
|
18
|
+
/** Pending transactions sorted ascending by priority fee, ties broken by txHash */ #pendingByPriority = [];
|
|
18
19
|
/** Protected transactions: txHash -> slotNumber */ #protectedTransactions = new Map();
|
|
19
20
|
// ============================================================================
|
|
20
21
|
// STATE QUERIES
|
|
@@ -52,24 +53,28 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
52
53
|
/**
|
|
53
54
|
* Iterates pending transaction hashes in priority order.
|
|
54
55
|
* @param order - 'desc' for highest priority first, 'asc' for lowest priority first
|
|
55
|
-
*/ *iteratePendingByPriority(order) {
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const hashesAtFee = this.#pendingByPriority.get(fee);
|
|
64
|
-
// Use compareTxHash from tx_metadata, swap args for descending order
|
|
65
|
-
const sortedHashes = [
|
|
66
|
-
...hashesAtFee
|
|
67
|
-
].sort(hashCompareFn);
|
|
68
|
-
for (const hash of sortedHashes){
|
|
69
|
-
yield hash;
|
|
56
|
+
*/ *iteratePendingByPriority(order, filter) {
|
|
57
|
+
const arr = this.#pendingByPriority;
|
|
58
|
+
const start = order === 'asc' ? 0 : arr.length - 1;
|
|
59
|
+
const step = order === 'asc' ? 1 : -1;
|
|
60
|
+
const inBounds = order === 'asc' ? (i)=>i < arr.length : (i)=>i >= 0;
|
|
61
|
+
for(let i = start; inBounds(i); i += step){
|
|
62
|
+
if (filter === undefined || filter(arr[i].txHash)) {
|
|
63
|
+
yield arr[i].txHash;
|
|
70
64
|
}
|
|
71
65
|
}
|
|
72
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Iterates pending transaction hashes in priority order, skipping txs received after maxReceivedAt.
|
|
69
|
+
* @param order - 'desc' for highest priority first, 'asc' for lowest priority first
|
|
70
|
+
* @param maxReceivedAt - Only yield txs with receivedAt <= this value
|
|
71
|
+
*/ *iterateEligiblePendingByPriority(order, maxReceivedAt) {
|
|
72
|
+
const filter = (hash)=>{
|
|
73
|
+
const meta = this.#metadata.get(hash);
|
|
74
|
+
return meta !== undefined && meta.receivedAt <= maxReceivedAt;
|
|
75
|
+
};
|
|
76
|
+
yield* this.iteratePendingByPriority(order, filter);
|
|
77
|
+
}
|
|
73
78
|
/** Iterates all metadata entries */ *iterateMetadata() {
|
|
74
79
|
yield* this.#metadata;
|
|
75
80
|
}
|
|
@@ -91,6 +96,9 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
91
96
|
meta.minedL2BlockId = blockId;
|
|
92
97
|
// Safe to call unconditionally - removeFromPendingIndices is idempotent
|
|
93
98
|
this.#removeFromPendingIndices(meta);
|
|
99
|
+
// A mined tx supersedes any protection: drop the stale entry so it can't linger in the map and
|
|
100
|
+
// be matched by later protection scans.
|
|
101
|
+
this.#protectedTransactions.delete(meta.txHash);
|
|
94
102
|
}
|
|
95
103
|
/** Clears the mined status from a transaction */ markAsUnmined(meta) {
|
|
96
104
|
meta.minedL2BlockId = undefined;
|
|
@@ -157,11 +165,28 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
157
165
|
return result;
|
|
158
166
|
}
|
|
159
167
|
/** Gets the count of pending transactions */ getPendingTxCount() {
|
|
168
|
+
return this.#pendingByPriority.length;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns whether at least `minCount` pending transactions were received at or before maxReceivedAt,
|
|
172
|
+
* i.e. are old enough to be eligible for block building. Stops as soon as the threshold is met, so it
|
|
173
|
+
* does not scan the whole pool when only a handful of eligible txs are needed. The total pending count
|
|
174
|
+
* is an upper bound on the eligible count, so a pool with fewer than `minCount` pending can never
|
|
175
|
+
* satisfy the threshold and short-circuits without scanning.
|
|
176
|
+
*/ hasEligiblePendingTxs(maxReceivedAt, minCount) {
|
|
177
|
+
if (minCount <= 0) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
if (this.#pendingByPriority.length < minCount) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
160
183
|
let count = 0;
|
|
161
|
-
for (const
|
|
162
|
-
count
|
|
184
|
+
for (const _ of this.iterateEligiblePendingByPriority('desc', maxReceivedAt)){
|
|
185
|
+
if (++count >= minCount) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
163
188
|
}
|
|
164
|
-
return
|
|
189
|
+
return false;
|
|
165
190
|
}
|
|
166
191
|
/** Gets the lowest priority pending transaction hashes (up to limit) */ getLowestPriorityPending(limit) {
|
|
167
192
|
if (limit <= 0) {
|
|
@@ -187,12 +212,10 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
187
212
|
}
|
|
188
213
|
/** Gets all pending transactions */ getPendingTxs() {
|
|
189
214
|
const result = [];
|
|
190
|
-
for (const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
result.push(meta);
|
|
195
|
-
}
|
|
215
|
+
for (const entry of this.#pendingByPriority){
|
|
216
|
+
const meta = this.#metadata.get(entry.txHash);
|
|
217
|
+
if (meta) {
|
|
218
|
+
result.push(meta);
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
return result;
|
|
@@ -236,6 +259,13 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
236
259
|
}
|
|
237
260
|
return result;
|
|
238
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* From the given hashes, returns those whose protection is recorded at exactly the given slot.
|
|
264
|
+
* Used to release the protections a single block proposal created without disturbing entries a
|
|
265
|
+
* later proposal raised to a higher slot via updateProtection.
|
|
266
|
+
*/ findProtectedTxsAtSlot(txHashes, slotNumber) {
|
|
267
|
+
return txHashes.filter((txHash)=>this.#protectedTransactions.get(txHash) === slotNumber);
|
|
268
|
+
}
|
|
239
269
|
/** Filters out transactions that are currently protected */ filterUnprotected(txs) {
|
|
240
270
|
return txs.filter((meta)=>!this.#protectedTransactions.has(meta.txHash));
|
|
241
271
|
}
|
|
@@ -252,11 +282,13 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
252
282
|
// ============================================================================
|
|
253
283
|
// METRICS
|
|
254
284
|
// ============================================================================
|
|
255
|
-
/** Counts transactions by state */ countTxs() {
|
|
285
|
+
/** Counts transactions by state and estimates total metadata memory usage */ countTxs() {
|
|
256
286
|
let pending = 0;
|
|
257
287
|
let protected_ = 0;
|
|
258
288
|
let mined = 0;
|
|
289
|
+
let totalMetadataBytes = 0;
|
|
259
290
|
for (const meta of this.#metadata.values()){
|
|
291
|
+
totalMetadataBytes += meta.estimatedSizeBytes;
|
|
260
292
|
const state = this.getTxState(meta);
|
|
261
293
|
if (state === 'pending') {
|
|
262
294
|
pending++;
|
|
@@ -269,9 +301,17 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
269
301
|
return {
|
|
270
302
|
pending,
|
|
271
303
|
protected: protected_,
|
|
272
|
-
mined
|
|
304
|
+
mined,
|
|
305
|
+
totalMetadataBytes
|
|
273
306
|
};
|
|
274
307
|
}
|
|
308
|
+
/** Returns the estimated total memory consumed by all metadata objects */ getTotalMetadataBytes() {
|
|
309
|
+
let total = 0;
|
|
310
|
+
for (const meta of this.#metadata.values()){
|
|
311
|
+
total += meta.estimatedSizeBytes;
|
|
312
|
+
}
|
|
313
|
+
return total;
|
|
314
|
+
}
|
|
275
315
|
/** Gets all mined transactions with their block IDs */ getMinedTxs() {
|
|
276
316
|
const result = [];
|
|
277
317
|
for (const [txHash, meta] of this.#metadata){
|
|
@@ -299,13 +339,11 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
299
339
|
this.#feePayerToTxHashes.set(meta.feePayer, feePayerSet);
|
|
300
340
|
}
|
|
301
341
|
feePayerSet.add(meta.txHash);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
prioritySet.add(meta.txHash);
|
|
342
|
+
insertIntoSortedArray(this.#pendingByPriority, {
|
|
343
|
+
txHash: meta.txHash,
|
|
344
|
+
priorityFee: meta.priorityFee,
|
|
345
|
+
txHashBigInt: meta.txHashBigInt
|
|
346
|
+
}, comparePriority, false);
|
|
309
347
|
}
|
|
310
348
|
#removeFromPendingIndices(meta) {
|
|
311
349
|
// Remove from nullifier index
|
|
@@ -320,13 +358,11 @@ import { compareFee, compareTxHash } from './tx_metadata.js';
|
|
|
320
358
|
this.#feePayerToTxHashes.delete(meta.feePayer);
|
|
321
359
|
}
|
|
322
360
|
}
|
|
323
|
-
// Remove from priority
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
}
|
|
330
|
-
}
|
|
361
|
+
// Remove from priority array
|
|
362
|
+
removeFromSortedArray(this.#pendingByPriority, {
|
|
363
|
+
txHash: meta.txHash,
|
|
364
|
+
priorityFee: meta.priorityFee,
|
|
365
|
+
txHashBigInt: meta.txHashBigInt
|
|
366
|
+
}, comparePriority);
|
|
331
367
|
}
|
|
332
368
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
3
4
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
4
5
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
5
6
|
import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
|
|
6
7
|
import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
8
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
8
|
-
import type { AddTxsResult, TxPoolV2, TxPoolV2Config, TxPoolV2Dependencies, TxPoolV2Events } from './interfaces.js';
|
|
9
|
+
import type { AddTxsResult, PoolReadAccess, TxPoolV2, TxPoolV2Config, TxPoolV2Dependencies, TxPoolV2Events } from './interfaces.js';
|
|
9
10
|
import type { TxState } from './tx_metadata.js';
|
|
10
11
|
declare const AztecKVTxPoolV2_base: new () => TypedEventEmitter<TxPoolV2Events>;
|
|
11
12
|
/**
|
|
@@ -16,11 +17,12 @@ declare const AztecKVTxPoolV2_base: new () => TypedEventEmitter<TxPoolV2Events>;
|
|
|
16
17
|
*/
|
|
17
18
|
export declare class AztecKVTxPoolV2 extends AztecKVTxPoolV2_base implements TxPoolV2 {
|
|
18
19
|
#private;
|
|
19
|
-
constructor(store: AztecAsyncKVStore, archiveStore: AztecAsyncKVStore, deps: TxPoolV2Dependencies, telemetry?: TelemetryClient, config?: Partial<TxPoolV2Config>, log?: Logger);
|
|
20
|
+
constructor(store: AztecAsyncKVStore, archiveStore: AztecAsyncKVStore, deps: TxPoolV2Dependencies, telemetry?: TelemetryClient, config?: Partial<TxPoolV2Config>, dateProvider?: DateProvider, log?: Logger);
|
|
20
21
|
addPendingTxs(txs: Tx[], opts?: {
|
|
21
22
|
source?: string;
|
|
23
|
+
feeComparisonOnly?: boolean;
|
|
22
24
|
}): Promise<AddTxsResult>;
|
|
23
|
-
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'
|
|
25
|
+
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'>;
|
|
24
26
|
addProtectedTxs(txs: Tx[], block: BlockHeader, opts?: {
|
|
25
27
|
source?: string;
|
|
26
28
|
}): Promise<void>;
|
|
@@ -30,20 +32,38 @@ export declare class AztecKVTxPoolV2 extends AztecKVTxPoolV2_base implements TxP
|
|
|
30
32
|
}): Promise<void>;
|
|
31
33
|
handleMinedBlock(block: L2Block): Promise<void>;
|
|
32
34
|
prepareForSlot(slotNumber: SlotNumber): Promise<void>;
|
|
33
|
-
|
|
35
|
+
unprotectTxs(txHashes: TxHash[], slotNumber: SlotNumber): Promise<void>;
|
|
36
|
+
handlePrunedBlocks(latestBlock: L2BlockId, options?: {
|
|
37
|
+
deleteAllTxs?: boolean;
|
|
38
|
+
}): Promise<void>;
|
|
34
39
|
handleFailedExecution(txHashes: TxHash[]): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Handles a finalized block by archiving and deleting the mined txs it finalizes. The work is
|
|
42
|
+
* split into chunk-sized serial-queue items rather than one long-running item, so gossip-driven
|
|
43
|
+
* pool operations (canAddPendingTx / addPendingTxs) interleave with finalization instead of
|
|
44
|
+
* stalling behind an entire epoch's worth of tx processing. Finalizations run on their own serial
|
|
45
|
+
* queue so two concurrent calls never interleave their chunks with each other.
|
|
46
|
+
*/
|
|
35
47
|
handleFinalizedBlock(block: BlockHeader): Promise<void>;
|
|
36
|
-
getTxByHash(txHash: TxHash
|
|
37
|
-
|
|
48
|
+
getTxByHash(txHash: TxHash, opts?: {
|
|
49
|
+
includeProof?: boolean;
|
|
50
|
+
}): Promise<Tx | undefined>;
|
|
51
|
+
getTxsByHash(txHashes: TxHash[], opts?: {
|
|
52
|
+
includeProof?: boolean;
|
|
53
|
+
}): Promise<(Tx | undefined)[]>;
|
|
38
54
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
39
55
|
getTxStatus(txHash: TxHash): Promise<TxState | 'deleted' | undefined>;
|
|
40
56
|
getPendingTxHashes(): Promise<TxHash[]>;
|
|
57
|
+
getEligiblePendingTxHashes(): Promise<TxHash[]>;
|
|
41
58
|
getPendingTxCount(): Promise<number>;
|
|
59
|
+
hasEligiblePendingTxs(minCount: number): Promise<boolean>;
|
|
42
60
|
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]>;
|
|
43
61
|
getMinedTxCount(): Promise<number>;
|
|
44
62
|
isEmpty(): Promise<boolean>;
|
|
45
63
|
getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
46
64
|
getLowestPriorityPending(limit: number): Promise<TxHash[]>;
|
|
65
|
+
/** Returns read-only access to the pool. Used for testing. */
|
|
66
|
+
getPoolReadAccess(): PoolReadAccess;
|
|
47
67
|
updateConfig(config: Partial<TxPoolV2Config>): Promise<void>;
|
|
48
68
|
/**
|
|
49
69
|
* Starts the pool and initializes state from persistence.
|
|
@@ -52,4 +72,4 @@ export declare class AztecKVTxPoolV2 extends AztecKVTxPoolV2_base implements TxP
|
|
|
52
72
|
stop(): Promise<void>;
|
|
53
73
|
}
|
|
54
74
|
export {};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF92Mi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sX3YyL3R4X3Bvb2xfdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFNbkYsT0FBTyxLQUFLLEVBQ1YsWUFBWSxFQUNaLGNBQWMsRUFDZCxRQUFRLEVBQ1IsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2YsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFJaEQ7Ozs7O0dBS0c7QUFDSCxxQkFBYSxlQUFnQixTQUFRLG9CQUE4RCxZQUFXLFFBQVE7O0lBWXBILFlBQ0UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLElBQUksRUFBRSxvQkFBb0IsRUFDMUIsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0sR0FBRSxPQUFPLENBQUMsY0FBYyxDQUFNLEVBQ3BDLFlBQVksR0FBRSxZQUFp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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool_v2.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"tx_pool_v2.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { chunk } from '@aztec/foundation/collection';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
4
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
3
5
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
4
6
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
7
|
import EventEmitter from 'node:events';
|
|
6
8
|
import { PoolInstrumentation, PoolName } from '../instrumentation.js';
|
|
7
|
-
import {
|
|
9
|
+
import { TxPoolQueueInstrumentation } from './instrumentation.js';
|
|
10
|
+
import { FINALIZE_BLOCK_CHUNK_SIZE, TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
8
11
|
/**
|
|
9
12
|
* Implementation of TxPoolV2 with explicit state management.
|
|
10
13
|
*
|
|
@@ -12,107 +15,162 @@ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
|
12
15
|
* all operations to TxPoolV2Impl.
|
|
13
16
|
*/ export class AztecKVTxPoolV2 extends EventEmitter {
|
|
14
17
|
#queue;
|
|
18
|
+
#queueMetrics;
|
|
19
|
+
/** Serializes finalizations so their chunked #queue items never interleave with each other. */ #finalizationQueue = new SerialQueue();
|
|
15
20
|
#impl;
|
|
16
21
|
#metrics;
|
|
17
22
|
#store;
|
|
18
23
|
#telemetry;
|
|
19
24
|
#log;
|
|
20
25
|
#started = false;
|
|
21
|
-
constructor(store, archiveStore, deps, telemetry = getTelemetryClient(), config = {}, log = createLogger('p2p:tx_pool_v2')){
|
|
26
|
+
constructor(store, archiveStore, deps, telemetry = getTelemetryClient(), config = {}, dateProvider = new DateProvider(), log = createLogger('p2p:tx_pool_v2')){
|
|
22
27
|
super();
|
|
23
28
|
this.#store = store;
|
|
24
29
|
this.#telemetry = telemetry;
|
|
25
30
|
this.#log = log;
|
|
26
31
|
this.#queue = new SerialQueue();
|
|
32
|
+
this.#queueMetrics = new TxPoolQueueInstrumentation(telemetry, ()=>this.#queue.length());
|
|
27
33
|
// Create callbacks that the impl uses to notify us about events and metrics
|
|
28
34
|
const callbacks = {
|
|
29
35
|
onTxsAdded: (txs, opts)=>{
|
|
30
|
-
this.#metrics?.transactionsAdded(txs);
|
|
31
36
|
this.emit('txs-added', {
|
|
32
37
|
txs,
|
|
33
38
|
...opts
|
|
34
39
|
});
|
|
35
40
|
},
|
|
36
41
|
onTxsRemoved: (txHashes)=>{
|
|
37
|
-
this.#metrics?.transactionsRemoved(txHashes);
|
|
38
42
|
// Convert to TxHash objects for the event
|
|
39
43
|
const hashes = txHashes.map((h)=>typeof h === 'string' ? TxHash.fromString(h) : TxHash.fromBigInt(h));
|
|
40
44
|
this.emit('txs-removed', {
|
|
41
45
|
txHashes: hashes
|
|
42
46
|
});
|
|
47
|
+
},
|
|
48
|
+
onTxsMined: (minedTxs)=>{
|
|
49
|
+
// Pending-to-mined delay is derived from the tx's persisted receivedAt at the mined
|
|
50
|
+
// transition (see TxPoolV2Impl.handleMinedBlock), not the add/remove timestamp map —
|
|
51
|
+
// so eviction no longer pollutes MEMPOOL_TX_MINED_DELAY.
|
|
52
|
+
for (const { minedDelayMs } of minedTxs){
|
|
53
|
+
if (minedDelayMs !== undefined) {
|
|
54
|
+
this.#metrics?.recordMinedDelay(minedDelayMs);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
43
57
|
}
|
|
44
58
|
};
|
|
45
59
|
// Create the implementation
|
|
46
|
-
this.#impl = new TxPoolV2Impl(store, archiveStore, deps, callbacks, config, log);
|
|
60
|
+
this.#impl = new TxPoolV2Impl(store, archiveStore, deps, callbacks, telemetry, config, dateProvider, log);
|
|
47
61
|
}
|
|
48
62
|
// ============================================================================
|
|
49
63
|
// PUBLIC API - All methods queue to the implementation
|
|
50
64
|
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Enqueues an operation on the serial queue, recording how long it waited behind other queued
|
|
67
|
+
* work and how long it took to execute once running.
|
|
68
|
+
*/ #run(operation, fn) {
|
|
69
|
+
const waitTimer = new Timer();
|
|
70
|
+
return this.#queue.put(async ()=>{
|
|
71
|
+
const waitMs = waitTimer.ms();
|
|
72
|
+
const executionTimer = new Timer();
|
|
73
|
+
try {
|
|
74
|
+
return await fn();
|
|
75
|
+
} finally{
|
|
76
|
+
this.#queueMetrics.record(operation, waitMs, executionTimer.ms());
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
51
80
|
// === Core Operations ===
|
|
52
81
|
addPendingTxs(txs, opts = {}) {
|
|
53
|
-
return this.#
|
|
82
|
+
return this.#run('addPendingTxs', ()=>this.#impl.addPendingTxs(txs, opts));
|
|
54
83
|
}
|
|
55
84
|
canAddPendingTx(tx) {
|
|
56
|
-
return this.#
|
|
85
|
+
return this.#run('canAddPendingTx', ()=>this.#impl.canAddPendingTx(tx));
|
|
57
86
|
}
|
|
58
87
|
addProtectedTxs(txs, block, opts = {}) {
|
|
59
|
-
return this.#
|
|
88
|
+
return this.#run('addProtectedTxs', ()=>this.#impl.addProtectedTxs(txs, block, opts));
|
|
60
89
|
}
|
|
61
90
|
protectTxs(txHashes, block) {
|
|
62
|
-
return this.#
|
|
91
|
+
return this.#run('protectTxs', ()=>this.#impl.protectTxs(txHashes, block));
|
|
63
92
|
}
|
|
64
93
|
addMinedTxs(txs, block, opts = {}) {
|
|
65
|
-
return this.#
|
|
94
|
+
return this.#run('addMinedTxs', ()=>this.#impl.addMinedTxs(txs, block, opts));
|
|
66
95
|
}
|
|
67
96
|
// === State Transition Handlers ===
|
|
68
97
|
handleMinedBlock(block) {
|
|
69
|
-
return this.#
|
|
98
|
+
return this.#run('handleMinedBlock', ()=>this.#impl.handleMinedBlock(block));
|
|
70
99
|
}
|
|
71
100
|
prepareForSlot(slotNumber) {
|
|
72
|
-
return this.#
|
|
101
|
+
return this.#run('prepareForSlot', ()=>this.#impl.prepareForSlot(slotNumber));
|
|
102
|
+
}
|
|
103
|
+
unprotectTxs(txHashes, slotNumber) {
|
|
104
|
+
return this.#run('unprotectTxs', ()=>this.#impl.unprotectTxs(txHashes, slotNumber));
|
|
73
105
|
}
|
|
74
|
-
handlePrunedBlocks(latestBlock) {
|
|
75
|
-
return this.#
|
|
106
|
+
handlePrunedBlocks(latestBlock, options) {
|
|
107
|
+
return this.#run('handlePrunedBlocks', ()=>this.#impl.handlePrunedBlocks(latestBlock, options));
|
|
76
108
|
}
|
|
77
109
|
handleFailedExecution(txHashes) {
|
|
78
|
-
return this.#
|
|
110
|
+
return this.#run('handleFailedExecution', ()=>this.#impl.handleFailedExecution(txHashes));
|
|
79
111
|
}
|
|
80
|
-
|
|
81
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Handles a finalized block by archiving and deleting the mined txs it finalizes. The work is
|
|
114
|
+
* split into chunk-sized serial-queue items rather than one long-running item, so gossip-driven
|
|
115
|
+
* pool operations (canAddPendingTx / addPendingTxs) interleave with finalization instead of
|
|
116
|
+
* stalling behind an entire epoch's worth of tx processing. Finalizations run on their own serial
|
|
117
|
+
* queue so two concurrent calls never interleave their chunks with each other.
|
|
118
|
+
*/ handleFinalizedBlock(block) {
|
|
119
|
+
return this.#finalizationQueue.put(()=>this.#handleFinalizedBlock(block));
|
|
120
|
+
}
|
|
121
|
+
async #handleFinalizedBlock(block) {
|
|
122
|
+
const { cutoffBlock, txHashes } = await this.#run('prepareFinalization', ()=>this.#impl.prepareFinalization(block));
|
|
123
|
+
const batches = chunk(txHashes, FINALIZE_BLOCK_CHUNK_SIZE);
|
|
124
|
+
for (const batch of batches){
|
|
125
|
+
await this.#run('archiveFinalizedTxs', ()=>this.#impl.archiveFinalizedTxs(batch));
|
|
126
|
+
}
|
|
127
|
+
for (const batch of batches){
|
|
128
|
+
await this.#run('deleteFinalizedTxs', ()=>this.#impl.deleteFinalizedTxs(batch, cutoffBlock));
|
|
129
|
+
}
|
|
130
|
+
await this.#run('completeFinalization', ()=>this.#impl.completeFinalization(txHashes, cutoffBlock, block.globalVariables.blockNumber));
|
|
82
131
|
}
|
|
83
132
|
// === Queries ===
|
|
84
|
-
getTxByHash(txHash) {
|
|
85
|
-
return this.#
|
|
133
|
+
getTxByHash(txHash, opts) {
|
|
134
|
+
return this.#run('getTxByHash', ()=>this.#impl.getTxByHash(txHash, opts));
|
|
86
135
|
}
|
|
87
|
-
getTxsByHash(txHashes) {
|
|
88
|
-
return this.#
|
|
136
|
+
getTxsByHash(txHashes, opts) {
|
|
137
|
+
return this.#run('getTxsByHash', ()=>this.#impl.getTxsByHash(txHashes, opts));
|
|
89
138
|
}
|
|
90
139
|
hasTxs(txHashes) {
|
|
91
|
-
return this.#
|
|
140
|
+
return this.#run('hasTxs', ()=>this.#impl.hasTxs(txHashes));
|
|
92
141
|
}
|
|
93
142
|
getTxStatus(txHash) {
|
|
94
|
-
return this.#
|
|
143
|
+
return this.#run('getTxStatus', ()=>this.#impl.getTxStatus(txHash));
|
|
95
144
|
}
|
|
96
145
|
getPendingTxHashes() {
|
|
97
|
-
return this.#
|
|
146
|
+
return this.#run('getPendingTxHashes', ()=>this.#impl.getPendingTxHashes());
|
|
147
|
+
}
|
|
148
|
+
getEligiblePendingTxHashes() {
|
|
149
|
+
return this.#run('getEligiblePendingTxHashes', ()=>this.#impl.getEligiblePendingTxHashes());
|
|
98
150
|
}
|
|
99
151
|
getPendingTxCount() {
|
|
100
|
-
return this.#
|
|
152
|
+
return this.#run('getPendingTxCount', ()=>this.#impl.getPendingTxCount());
|
|
153
|
+
}
|
|
154
|
+
hasEligiblePendingTxs(minCount) {
|
|
155
|
+
return this.#run('hasEligiblePendingTxs', ()=>this.#impl.hasEligiblePendingTxs(minCount));
|
|
101
156
|
}
|
|
102
157
|
getMinedTxHashes() {
|
|
103
|
-
return this.#
|
|
158
|
+
return this.#run('getMinedTxHashes', ()=>this.#impl.getMinedTxHashes());
|
|
104
159
|
}
|
|
105
160
|
getMinedTxCount() {
|
|
106
|
-
return this.#
|
|
161
|
+
return this.#run('getMinedTxCount', ()=>this.#impl.getMinedTxCount());
|
|
107
162
|
}
|
|
108
163
|
isEmpty() {
|
|
109
|
-
return this.#
|
|
164
|
+
return this.#run('isEmpty', ()=>this.#impl.isEmpty());
|
|
110
165
|
}
|
|
111
166
|
getArchivedTxByHash(txHash) {
|
|
112
|
-
return this.#
|
|
167
|
+
return this.#run('getArchivedTxByHash', ()=>this.#impl.getArchivedTxByHash(txHash));
|
|
113
168
|
}
|
|
114
169
|
getLowestPriorityPending(limit) {
|
|
115
|
-
return this.#
|
|
170
|
+
return this.#run('getLowestPriorityPending', ()=>this.#impl.getLowestPriorityPending(limit));
|
|
171
|
+
}
|
|
172
|
+
/** Returns read-only access to the pool. Used for testing. */ getPoolReadAccess() {
|
|
173
|
+
return this.#impl.getPoolReadAccess();
|
|
116
174
|
}
|
|
117
175
|
// === Configuration ===
|
|
118
176
|
updateConfig(config) {
|
|
@@ -129,8 +187,9 @@ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
|
129
187
|
return;
|
|
130
188
|
}
|
|
131
189
|
this.#log.info('Starting transaction pool...');
|
|
132
|
-
// Start the serial
|
|
190
|
+
// Start the serial queues
|
|
133
191
|
this.#queue.start();
|
|
192
|
+
this.#finalizationQueue.start();
|
|
134
193
|
this.#started = true;
|
|
135
194
|
// Setup metrics - created after queue is started so callbacks can safely queue
|
|
136
195
|
this.#metrics = new PoolInstrumentation(this.#telemetry, PoolName.TX_POOL, ()=>this.#queue.put(()=>{
|
|
@@ -139,7 +198,8 @@ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
|
139
198
|
itemCount: {
|
|
140
199
|
pending: counts.pending,
|
|
141
200
|
protected: counts.protected,
|
|
142
|
-
mined: counts.mined
|
|
201
|
+
mined: counts.mined,
|
|
202
|
+
softDeleted: counts.softDeleted
|
|
143
203
|
}
|
|
144
204
|
});
|
|
145
205
|
}), ()=>this.#store.estimateSize());
|
|
@@ -149,6 +209,8 @@ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
|
149
209
|
}
|
|
150
210
|
async stop() {
|
|
151
211
|
if (this.#started) {
|
|
212
|
+
// End the finalization queue first: an in-flight finalization still needs #queue to run its chunks.
|
|
213
|
+
await this.#finalizationQueue.end();
|
|
152
214
|
await this.#queue.end();
|
|
153
215
|
this.#started = false;
|
|
154
216
|
}
|