@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.0208eb9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +26 -13
- package/dest/client/factory.d.ts +15 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +63 -25
- package/dest/client/index.d.ts +2 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +170 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +77 -193
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +769 -229
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +160 -125
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +184 -34
- package/dest/enr/generate-enr.d.ts +11 -3
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +27 -5
- package/dest/enr/index.d.ts +1 -1
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +4 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- 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 +299 -174
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
- package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +19 -21
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +16 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +56 -41
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +7 -2
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +60 -87
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
- package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +84 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
- package/dest/msg_validators/tx_validator/index.d.ts +9 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +8 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/test_utils.js +22 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.d.ts +10 -9
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +64 -37
- package/dest/services/dummy_service.d.ts +66 -11
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +130 -5
- package/dest/services/encoding.d.ts +26 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +75 -6
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +6 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +5 -0
- package/dest/services/libp2p/instrumentation.d.ts +20 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +122 -0
- package/dest/services/libp2p/libp2p_service.d.ts +107 -95
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1328 -313
- package/dest/services/peer-manager/interface.d.ts +23 -0
- package/dest/services/peer-manager/interface.d.ts.map +1 -0
- package/dest/services/peer-manager/interface.js +1 -0
- package/dest/services/peer-manager/metrics.d.ts +12 -3
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +44 -12
- package/dest/services/peer-manager/peer_manager.d.ts +103 -23
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +551 -82
- 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 +43 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/config.d.ts +11 -9
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +18 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/index.d.ts +3 -2
- package/dest/services/reqresp/index.d.ts.map +1 -1
- package/dest/services/reqresp/index.js +2 -1
- package/dest/services/reqresp/interface.d.ts +75 -24
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +46 -27
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/auth.d.ts +43 -0
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/auth.js +71 -0
- package/dest/services/reqresp/protocols/block.d.ts +6 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +30 -6
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +7 -7
- package/dest/services/reqresp/protocols/index.d.ts +3 -1
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +2 -0
- package/dest/services/reqresp/protocols/ping.d.ts +1 -3
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +40 -7
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +76 -5
- package/dest/services/reqresp/protocols/tx.d.ts +14 -4
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +34 -6
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
- 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 +21 -1
- package/dest/services/reqresp/reqresp.d.ts +29 -66
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +753 -248
- package/dest/services/reqresp/status.d.ts +10 -4
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/reqresp/status.js +9 -2
- package/dest/services/service.d.ts +40 -20
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +28 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +66 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/fast_tx_collection.js +311 -0
- package/dest/services/tx_collection/index.d.ts +4 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +3 -0
- package/dest/services/tx_collection/instrumentation.d.ts +10 -0
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_collection/instrumentation.js +31 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/slow_tx_collection.js +177 -0
- package/dest/services/tx_collection/tx_collection.d.ts +110 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +128 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +111 -0
- package/dest/services/tx_collection/tx_source.d.ts +18 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +31 -0
- package/dest/services/tx_file_store/config.d.ts +18 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +26 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +149 -0
- package/dest/services/tx_provider.d.ts +51 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +219 -0
- package/dest/services/tx_provider_instrumentation.d.ts +16 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +34 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +4 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +3 -0
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +4 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +86 -16
- package/dest/test-helpers/mock-pubsub.d.ts +59 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +130 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
- package/dest/test-helpers/mock-tx-helpers.js +19 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +62 -28
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +259 -90
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/testbench.js +4 -4
- package/dest/testbench/worker_client_manager.d.ts +51 -11
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +232 -53
- package/dest/types/index.d.ts +4 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +2 -0
- package/dest/util.d.ts +24 -16
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +75 -69
- package/dest/versioning.d.ts +4 -4
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +8 -3
- package/package.json +32 -27
- package/src/bootstrap/bootstrap.ts +34 -15
- package/src/client/factory.ts +139 -53
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +213 -0
- package/src/client/p2p_client.ts +481 -383
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +311 -134
- package/src/enr/generate-enr.ts +39 -6
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/index.ts +4 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
- package/src/mem_pools/attestation_pool/mocks.ts +24 -17
- package/src/mem_pools/instrumentation.ts +72 -48
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +9 -2
- package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
- package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
- package/src/msg_validators/tx_validator/data_validator.ts +95 -71
- package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
- package/src/msg_validators/tx_validator/factory.ts +151 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
- package/src/msg_validators/tx_validator/index.ts +8 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
- package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +85 -39
- package/src/services/dummy_service.ts +198 -9
- package/src/services/encoding.ts +82 -6
- package/src/services/index.ts +5 -0
- package/src/services/libp2p/instrumentation.ts +126 -0
- package/src/services/libp2p/libp2p_service.ts +1170 -353
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +55 -12
- package/src/services/peer-manager/peer_manager.ts +657 -80
- package/src/services/peer-manager/peer_scoring.ts +45 -3
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/config.ts +26 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/index.ts +2 -0
- package/src/services/reqresp/interface.ts +95 -37
- package/src/services/reqresp/metrics.ts +40 -28
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block.ts +26 -4
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +9 -7
- package/src/services/reqresp/protocols/index.ts +2 -0
- package/src/services/reqresp/protocols/status.ts +121 -5
- package/src/services/reqresp/protocols/tx.ts +36 -8
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
- package/src/services/reqresp/reqresp.ts +449 -271
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +65 -22
- package/src/services/tx_collection/config.ts +98 -0
- package/src/services/tx_collection/fast_tx_collection.ts +364 -0
- package/src/services/tx_collection/index.ts +7 -0
- package/src/services/tx_collection/instrumentation.ts +35 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +233 -0
- package/src/services/tx_collection/tx_collection.ts +216 -0
- package/src/services/tx_collection/tx_collection_sink.ts +129 -0
- package/src/services/tx_collection/tx_source.ts +37 -0
- package/src/services/tx_file_store/config.ts +43 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +173 -0
- package/src/services/tx_provider.ts +232 -0
- package/src/services/tx_provider_instrumentation.ts +54 -0
- package/src/test-helpers/index.ts +3 -0
- package/src/test-helpers/make-enrs.ts +4 -5
- package/src/test-helpers/make-test-p2p-clients.ts +111 -21
- package/src/test-helpers/mock-pubsub.ts +188 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +87 -36
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +434 -89
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +315 -59
- package/src/types/index.ts +2 -0
- package/src/util.ts +105 -91
- package/src/versioning.ts +11 -4
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for the TxFileStore service.
|
|
4
|
+
*/
|
|
5
|
+
export type TxFileStoreConfig = {
|
|
6
|
+
/** URL for uploading txs to file storage (s3://, gs://, file://) */
|
|
7
|
+
txFileStoreUrl?: string;
|
|
8
|
+
/** URL for downloading txs from file storage */
|
|
9
|
+
txFileStoreDownloadUrl?: string;
|
|
10
|
+
/** Max concurrent uploads */
|
|
11
|
+
txFileStoreUploadConcurrency: number;
|
|
12
|
+
/** Max queue size to prevent unbounded memory growth */
|
|
13
|
+
txFileStoreMaxQueueSize: number;
|
|
14
|
+
/** Enable tx file store upload */
|
|
15
|
+
txFileStoreEnabled: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare const txFileStoreConfigMappings: ConfigMappingsType<TxFileStoreConfig>;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfZmlsZV9zdG9yZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFFNUc7O0dBRUc7QUFDSCxNQUFNLE1BQU0saUJBQWlCLEdBQUc7SUFDOUIsb0VBQW9FO0lBQ3BFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN4QixnREFBZ0Q7SUFDaEQsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDaEMsNkJBQTZCO0lBQzdCLDRCQUE0QixFQUFFLE1BQU0sQ0FBQztJQUNyQyx3REFBd0Q7SUFDeEQsdUJBQXVCLEVBQUUsTUFBTSxDQUFDO0lBQ2hDLGtDQUFrQztJQUNsQyxrQkFBa0IsRUFBRSxPQUFPLENBQUM7Q0FDN0IsQ0FBQztBQUVGLGVBQU8sTUFBTSx5QkFBeUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0F3QjNFLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA2C,MAAM,0BAA0B,CAAC;AAE5G;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6BAA6B;IAC7B,4BAA4B,EAAE,MAAM,CAAC;IACrC,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kCAAkC;IAClC,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAwB3E,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
+
export const txFileStoreConfigMappings = {
|
|
3
|
+
txFileStoreUrl: {
|
|
4
|
+
env: 'TX_FILE_STORE_URL',
|
|
5
|
+
description: 'URL for uploading txs to file storage (s3://, gs://, file://)'
|
|
6
|
+
},
|
|
7
|
+
txFileStoreDownloadUrl: {
|
|
8
|
+
env: 'TX_FILE_STORE_DOWNLOAD_URL',
|
|
9
|
+
description: 'URL for downloading txs from file storage'
|
|
10
|
+
},
|
|
11
|
+
txFileStoreUploadConcurrency: {
|
|
12
|
+
env: 'TX_FILE_STORE_UPLOAD_CONCURRENCY',
|
|
13
|
+
description: 'Maximum number of concurrent tx uploads',
|
|
14
|
+
...numberConfigHelper(10)
|
|
15
|
+
},
|
|
16
|
+
txFileStoreMaxQueueSize: {
|
|
17
|
+
env: 'TX_FILE_STORE_MAX_QUEUE_SIZE',
|
|
18
|
+
description: 'Maximum queue size for pending uploads (oldest dropped when exceeded)',
|
|
19
|
+
...numberConfigHelper(1000)
|
|
20
|
+
},
|
|
21
|
+
txFileStoreEnabled: {
|
|
22
|
+
env: 'TX_FILE_STORE_ENABLED',
|
|
23
|
+
description: 'Enable uploading transactions to file storage',
|
|
24
|
+
...booleanConfigHelper(false)
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { TxFileStore } from './tx_file_store.js';
|
|
2
|
+
export { TxFileStoreInstrumentation } from './instrumentation.js';
|
|
3
|
+
export { type TxFileStoreConfig, txFileStoreConfigMappings } from './config.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9maWxlX3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,KAAK,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
|
+
/** Instrumentation for the TxFileStore service. */
|
|
3
|
+
export declare class TxFileStoreInstrumentation {
|
|
4
|
+
private uploadsSuccess;
|
|
5
|
+
private uploadsFailed;
|
|
6
|
+
private uploadsSkipped;
|
|
7
|
+
private uploadDuration;
|
|
8
|
+
private queueSize;
|
|
9
|
+
constructor(client: TelemetryClient, name: string);
|
|
10
|
+
recordUploadSuccess(durationMs: number): void;
|
|
11
|
+
recordUploadFailed(): void;
|
|
12
|
+
recordUploadSkipped(): void;
|
|
13
|
+
recordQueueSize(size: number): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfZmlsZV9zdG9yZS9pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QyxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUV4SCxtREFBbUQ7QUFDbkQscUJBQWEsMEJBQTBCO0lBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQWdCO0lBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQVk7SUFDbEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUV6QixZQUFZLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFPaEQ7SUFFRCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUdyQztJQUVELGtCQUFrQixTQUVqQjtJQUVELG1CQUFtQixTQUVsQjtJQUVELGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxRQUUzQjtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAExH,mDAAmD;AACnD,qBAAa,0BAA0B;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,SAAS,CAAQ;IAEzB,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAOhD;IAED,mBAAmB,CAAC,UAAU,EAAE,MAAM,QAGrC;IAED,kBAAkB,SAEjB;IAED,mBAAmB,SAElB;IAED,eAAe,CAAC,IAAI,EAAE,MAAM,QAE3B;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Metrics } from '@aztec/telemetry-client';
|
|
2
|
+
/** Instrumentation for the TxFileStore service. */ export class TxFileStoreInstrumentation {
|
|
3
|
+
uploadsSuccess;
|
|
4
|
+
uploadsFailed;
|
|
5
|
+
uploadsSkipped;
|
|
6
|
+
uploadDuration;
|
|
7
|
+
queueSize;
|
|
8
|
+
constructor(client, name){
|
|
9
|
+
const meter = client.getMeter(name);
|
|
10
|
+
this.uploadsSuccess = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SUCCESS);
|
|
11
|
+
this.uploadsFailed = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_FAILED);
|
|
12
|
+
this.uploadsSkipped = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SKIPPED);
|
|
13
|
+
this.uploadDuration = meter.createHistogram(Metrics.TX_FILE_STORE_UPLOAD_DURATION);
|
|
14
|
+
this.queueSize = meter.createGauge(Metrics.TX_FILE_STORE_QUEUE_SIZE);
|
|
15
|
+
}
|
|
16
|
+
recordUploadSuccess(durationMs) {
|
|
17
|
+
this.uploadsSuccess.add(1);
|
|
18
|
+
this.uploadDuration.record(durationMs);
|
|
19
|
+
}
|
|
20
|
+
recordUploadFailed() {
|
|
21
|
+
this.uploadsFailed.add(1);
|
|
22
|
+
}
|
|
23
|
+
recordUploadSkipped() {
|
|
24
|
+
this.uploadsSkipped.add(1);
|
|
25
|
+
}
|
|
26
|
+
recordQueueSize(size) {
|
|
27
|
+
this.queueSize.record(size);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { type FileStore } from '@aztec/stdlib/file-store';
|
|
3
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
+
import type { TxPool } from '../../mem_pools/tx_pool/index.js';
|
|
5
|
+
import type { TxFileStoreConfig } from './config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Uploads validated transactions to a file store as a fallback retrieval mechanism.
|
|
8
|
+
* Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
|
|
9
|
+
*/
|
|
10
|
+
export declare class TxFileStore {
|
|
11
|
+
private readonly fileStore;
|
|
12
|
+
private readonly txPool;
|
|
13
|
+
private readonly config;
|
|
14
|
+
private readonly instrumentation;
|
|
15
|
+
private readonly log;
|
|
16
|
+
private uploadQueue;
|
|
17
|
+
private activeUploads;
|
|
18
|
+
private readonly queueProcessor;
|
|
19
|
+
private readonly handleTxsAdded;
|
|
20
|
+
/** Recently uploaded tx hashes for deduplication. */
|
|
21
|
+
private recentUploads;
|
|
22
|
+
private recentUploadsOrder;
|
|
23
|
+
private readonly maxRecentUploads;
|
|
24
|
+
private constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Creates and initializes the file store.
|
|
27
|
+
* @param txPool - The transaction pool to listen to.
|
|
28
|
+
* @param config - The file store configuration.
|
|
29
|
+
* @param log - Optional logger.
|
|
30
|
+
* @param telemetry - Optional telemetry client.
|
|
31
|
+
* @param fileStoreOverride - Optional FileStore for testing (bypasses createFileStore).
|
|
32
|
+
* @returns The file store instance, or undefined if not configured/enabled.
|
|
33
|
+
*/
|
|
34
|
+
static create(txPool: TxPool, config: TxFileStoreConfig, log?: Logger, telemetry?: TelemetryClient, fileStoreOverride?: FileStore): Promise<TxFileStore | undefined>;
|
|
35
|
+
/** Starts listening to TxPool events and uploading txs. */
|
|
36
|
+
start(): void;
|
|
37
|
+
/** Stops listening and waits for pending uploads to complete. */
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
private enqueueTxs;
|
|
40
|
+
private processQueueBatch;
|
|
41
|
+
private uploadTx;
|
|
42
|
+
/** Waits for all queued and in-flight uploads to complete. For testing. */
|
|
43
|
+
flush(): Promise<void>;
|
|
44
|
+
/** Returns the number of pending uploads (queued + in-flight). */
|
|
45
|
+
getPendingUploadCount(): number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZmlsZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3R4X2ZpbGVfc3RvcmUvdHhfZmlsZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFJbEUsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQWdCLE1BQU0sa0NBQWtDLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHckQ7OztHQUdHO0FBQ0gscUJBQWEsV0FBVztJQVlwQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBZnRCLE9BQU8sQ0FBQyxXQUFXLENBQVk7SUFDL0IsT0FBTyxDQUFDLGFBQWEsQ0FBSztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBaUI7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQTRCO0lBRTNELHFEQUFxRDtJQUNyRCxPQUFPLENBQUMsYUFBYSxDQUEwQjtJQUMvQyxPQUFPLENBQUMsa0JBQWtCLENBQWdCO0lBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQVE7SUFFekMsT0FBTyxlQVdOO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFhLE1BQU0sQ0FDakIsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsaUJBQWlCLEVBQ3pCLEdBQUcsR0FBRSxNQUEwQyxFQUMvQyxTQUFTLEdBQUUsZUFBc0MsRUFDakQsaUJBQWlCLENBQUMsRUFBRSxTQUFTLEdBQzVCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBb0JsQztJQUVELDJEQUEyRDtJQUNwRCxLQUFLLElBQUksSUFBSSxDQU9uQjtJQUVELGlFQUFpRTtJQUNwRCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUlqQztJQUVELE9BQU8sQ0FBQyxVQUFVO1lBZ0JKLGlCQUFpQjtZQVlqQixRQUFRO0lBdUN0QiwyRUFBMkU7SUFDOUQsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJbEM7SUFFRCxrRUFBa0U7SUFDM0QscUJBQXFCLElBQUksTUFBTSxDQUVyQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_file_store.d.ts","sourceRoot":"","sources":["../../../src/services/tx_file_store/tx_file_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,kCAAkC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD;;;GAGG;AACH,qBAAa,WAAW;IAYpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAftB,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,qDAAqD;IACrD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAEzC,OAAO,eAWN;IAED;;;;;;;;OAQG;IACH,OAAa,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,EACzB,GAAG,GAAE,MAA0C,EAC/C,SAAS,GAAE,eAAsC,EACjD,iBAAiB,CAAC,EAAE,SAAS,GAC5B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAoBlC;IAED,2DAA2D;IACpD,KAAK,IAAI,IAAI,CAOnB;IAED,iEAAiE;IACpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjC;IAED,OAAO,CAAC,UAAU;YAgBJ,iBAAiB;YAYjB,QAAQ;IAuCtB,2EAA2E;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlC;IAED,kEAAkE;IAC3D,qBAAqB,IAAI,MAAM,CAErC;CACF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { RunningPromise } from '@aztec/foundation/promise';
|
|
3
|
+
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
4
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
+
import { createFileStore } from '@aztec/stdlib/file-store';
|
|
6
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
+
import { TxFileStoreInstrumentation } from './instrumentation.js';
|
|
8
|
+
/**
|
|
9
|
+
* Uploads validated transactions to a file store as a fallback retrieval mechanism.
|
|
10
|
+
* Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
|
|
11
|
+
*/ export class TxFileStore {
|
|
12
|
+
fileStore;
|
|
13
|
+
txPool;
|
|
14
|
+
config;
|
|
15
|
+
instrumentation;
|
|
16
|
+
log;
|
|
17
|
+
uploadQueue;
|
|
18
|
+
activeUploads;
|
|
19
|
+
queueProcessor;
|
|
20
|
+
handleTxsAdded;
|
|
21
|
+
/** Recently uploaded tx hashes for deduplication. */ recentUploads;
|
|
22
|
+
recentUploadsOrder;
|
|
23
|
+
maxRecentUploads;
|
|
24
|
+
constructor(fileStore, txPool, config, instrumentation, log){
|
|
25
|
+
this.fileStore = fileStore;
|
|
26
|
+
this.txPool = txPool;
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.instrumentation = instrumentation;
|
|
29
|
+
this.log = log;
|
|
30
|
+
this.uploadQueue = [];
|
|
31
|
+
this.activeUploads = 0;
|
|
32
|
+
this.recentUploads = new Set();
|
|
33
|
+
this.recentUploadsOrder = [];
|
|
34
|
+
this.maxRecentUploads = 1000;
|
|
35
|
+
this.handleTxsAdded = (args)=>{
|
|
36
|
+
this.enqueueTxs(args.txs);
|
|
37
|
+
};
|
|
38
|
+
this.queueProcessor = new RunningPromise(()=>this.processQueueBatch(), this.log, 100);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates and initializes the file store.
|
|
42
|
+
* @param txPool - The transaction pool to listen to.
|
|
43
|
+
* @param config - The file store configuration.
|
|
44
|
+
* @param log - Optional logger.
|
|
45
|
+
* @param telemetry - Optional telemetry client.
|
|
46
|
+
* @param fileStoreOverride - Optional FileStore for testing (bypasses createFileStore).
|
|
47
|
+
* @returns The file store instance, or undefined if not configured/enabled.
|
|
48
|
+
*/ static async create(txPool, config, log = createLogger('p2p:tx_file_store'), telemetry = getTelemetryClient(), fileStoreOverride) {
|
|
49
|
+
if (!config.txFileStoreEnabled) {
|
|
50
|
+
log.debug('Tx file store is disabled');
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (!config.txFileStoreUrl) {
|
|
54
|
+
log.warn('Tx file store is enabled but URL is not configured');
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const fileStore = fileStoreOverride ?? await createFileStore(config.txFileStoreUrl, log);
|
|
58
|
+
if (!fileStore) {
|
|
59
|
+
log.warn('Failed to create file store for tx file store');
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const instrumentation = new TxFileStoreInstrumentation(telemetry, 'TxFileStore');
|
|
63
|
+
log.info('Created tx file store', {
|
|
64
|
+
url: config.txFileStoreUrl
|
|
65
|
+
});
|
|
66
|
+
return new TxFileStore(fileStore, txPool, config, instrumentation, log);
|
|
67
|
+
}
|
|
68
|
+
/** Starts listening to TxPool events and uploading txs. */ start() {
|
|
69
|
+
this.queueProcessor.start();
|
|
70
|
+
this.txPool.on('txs-added', this.handleTxsAdded);
|
|
71
|
+
this.log.info('Started tx file store', {
|
|
72
|
+
concurrency: this.config.txFileStoreUploadConcurrency,
|
|
73
|
+
maxQueueSize: this.config.txFileStoreMaxQueueSize
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Stops listening and waits for pending uploads to complete. */ async stop() {
|
|
77
|
+
this.txPool.removeListener('txs-added', this.handleTxsAdded);
|
|
78
|
+
await this.queueProcessor.stop();
|
|
79
|
+
this.log.info('Stopped tx file store');
|
|
80
|
+
}
|
|
81
|
+
enqueueTxs(txs) {
|
|
82
|
+
this.uploadQueue.push(...txs);
|
|
83
|
+
// Enforce max queue size by dropping oldest entries
|
|
84
|
+
const overflow = this.uploadQueue.length - this.config.txFileStoreMaxQueueSize;
|
|
85
|
+
if (overflow > 0) {
|
|
86
|
+
this.log.warn(`Upload queue overflow, dropping ${overflow} oldest txs`);
|
|
87
|
+
this.uploadQueue.splice(0, overflow);
|
|
88
|
+
}
|
|
89
|
+
this.instrumentation.recordQueueSize(this.uploadQueue.length);
|
|
90
|
+
// Immediately start uploading txs
|
|
91
|
+
void this.queueProcessor.trigger();
|
|
92
|
+
}
|
|
93
|
+
async processQueueBatch() {
|
|
94
|
+
const batch = this.uploadQueue.splice(0, this.config.txFileStoreUploadConcurrency);
|
|
95
|
+
this.instrumentation.recordQueueSize(this.uploadQueue.length);
|
|
96
|
+
this.activeUploads += batch.length;
|
|
97
|
+
try {
|
|
98
|
+
await Promise.all(batch.map((tx)=>this.uploadTx(tx)));
|
|
99
|
+
} finally{
|
|
100
|
+
this.activeUploads -= batch.length;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async uploadTx(tx) {
|
|
104
|
+
const txHash = tx.getTxHash().toString();
|
|
105
|
+
const path = `txs/${txHash}.bin`;
|
|
106
|
+
const timer = new Timer();
|
|
107
|
+
if (this.recentUploads.has(txHash)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
this.recentUploads.add(txHash);
|
|
112
|
+
this.recentUploadsOrder.push(txHash);
|
|
113
|
+
if (this.recentUploadsOrder.length > this.maxRecentUploads) {
|
|
114
|
+
// delete old entries in recentUploads
|
|
115
|
+
for (const txHashToRemove of this.recentUploadsOrder.splice(0, this.recentUploadsOrder.length - this.maxRecentUploads)){
|
|
116
|
+
this.recentUploads.delete(txHashToRemove);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
await retry(()=>this.fileStore.save(path, tx.toBuffer(), {
|
|
120
|
+
compress: false
|
|
121
|
+
}), `Uploading tx ${txHash}`, makeBackoff([
|
|
122
|
+
0.1,
|
|
123
|
+
0.5,
|
|
124
|
+
2
|
|
125
|
+
]), this.log, true);
|
|
126
|
+
const durationMs = Math.trunc(timer.ms());
|
|
127
|
+
this.log.debug(`Uploaded tx to file store`, {
|
|
128
|
+
txHash,
|
|
129
|
+
path,
|
|
130
|
+
durationMs
|
|
131
|
+
});
|
|
132
|
+
this.instrumentation.recordUploadSuccess(durationMs);
|
|
133
|
+
} catch (err) {
|
|
134
|
+
this.log.warn(`Failed to upload tx to file store after retries`, {
|
|
135
|
+
txHash,
|
|
136
|
+
error: err
|
|
137
|
+
});
|
|
138
|
+
this.instrumentation.recordUploadFailed();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Waits for all queued and in-flight uploads to complete. For testing. */ async flush() {
|
|
142
|
+
while(this.uploadQueue.length > 0 || this.activeUploads > 0){
|
|
143
|
+
await this.queueProcessor.trigger();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** Returns the number of pending uploads (queued + in-flight). */ getPendingUploadCount() {
|
|
147
|
+
return this.uploadQueue.length + this.activeUploads;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
4
|
+
import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import type { BlockProposal } from '@aztec/stdlib/p2p';
|
|
6
|
+
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
8
|
+
import type { PeerId } from '@libp2p/interface';
|
|
9
|
+
import type { P2PClient } from '../client/p2p_client.js';
|
|
10
|
+
import type { TxPool } from '../mem_pools/index.js';
|
|
11
|
+
import type { TxCollection } from './tx_collection/tx_collection.js';
|
|
12
|
+
import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
|
|
13
|
+
/**
|
|
14
|
+
* Gathers and returns txs given a block proposal, block, or their hashes.
|
|
15
|
+
* Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
|
|
16
|
+
*/
|
|
17
|
+
export declare class TxProvider implements ITxProvider {
|
|
18
|
+
private txCollection;
|
|
19
|
+
private txPool;
|
|
20
|
+
private txValidator;
|
|
21
|
+
private log;
|
|
22
|
+
protected instrumentation: TxProviderInstrumentation;
|
|
23
|
+
constructor(txCollection: TxCollection, txPool: TxPool, txValidator: Pick<P2PClient, 'validate'>, log?: Logger, client?: TelemetryClient);
|
|
24
|
+
/** Returns txs from the tx pool given their hashes.*/
|
|
25
|
+
getAvailableTxs(txHashes: TxHash[]): Promise<{
|
|
26
|
+
txs: Tx[];
|
|
27
|
+
missingTxs: TxHash[];
|
|
28
|
+
}>;
|
|
29
|
+
/** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */
|
|
30
|
+
getTxsForBlockProposal(blockProposal: BlockProposal, blockNumber: BlockNumber, opts: {
|
|
31
|
+
pinnedPeer: PeerId | undefined;
|
|
32
|
+
deadline: Date;
|
|
33
|
+
}): Promise<{
|
|
34
|
+
txs: Tx[];
|
|
35
|
+
missingTxs: TxHash[];
|
|
36
|
+
}>;
|
|
37
|
+
/** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */
|
|
38
|
+
getTxsForBlock(block: L2Block, opts: {
|
|
39
|
+
deadline: Date;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
txs: Tx[];
|
|
42
|
+
missingTxs: TxHash[];
|
|
43
|
+
}>;
|
|
44
|
+
private getOrderedTxsFromAllSources;
|
|
45
|
+
private orderTxs;
|
|
46
|
+
private getTxsFromAllSources;
|
|
47
|
+
private collectFromP2P;
|
|
48
|
+
private extractFromProposal;
|
|
49
|
+
private processProposalTxs;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvdmlkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy90eF9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBRW5GLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUE4QixZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RTs7O0dBR0c7QUFDSCxxQkFBYSxVQUFXLFlBQVcsV0FBVztJQUkxQyxPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxXQUFXO0lBQ25CLE9BQU8sQ0FBQyxHQUFHO0lBTmIsU0FBUyxDQUFDLGVBQWUsRUFBRSx5QkFBeUIsQ0FBQztJQUVyRCxZQUNVLFlBQVksRUFBRSxZQUFZLEVBQzFCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQ3hDLEdBQUcsR0FBRSxNQUF5QyxFQUN0RCxNQUFNLEdBQUUsZUFBc0MsRUFHL0M7SUFFRCxzREFBc0Q7SUFDekMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUE7S0FBRSxDQUFDLENBa0I3RjtJQUVELGtGQUFrRjtJQUMzRSxzQkFBc0IsQ0FDM0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsSUFBSSxFQUFFO1FBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFBO0tBQUUsR0FDdkQsT0FBTyxDQUFDO1FBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFBO0tBQUUsQ0FBQyxDQU85QztJQUVELG1FQUFtRTtJQUM1RCxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUM7UUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUE7S0FBRSxDQUFDLENBTzVHO1lBRWEsMkJBQTJCO0lBZ0N6QyxPQUFPLENBQUMsUUFBUTtZQUtGLG9CQUFvQjtZQXlGcEIsY0FBYztJQVk1QixPQUFPLENBQUMsbUJBQW1CO1lBT2Isa0JBQWtCO0NBT2pDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_provider.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAA8B,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAI1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,GAAG;IANb,SAAS,CAAC,eAAe,EAAE,yBAAyB,CAAC;IAErD,YACU,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACxC,GAAG,GAAE,MAAyC,EACtD,MAAM,GAAE,eAAsC,EAG/C;IAED,sDAAsD;IACzC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAkB7F;IAED,kFAAkF;IAC3E,sBAAsB,CAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,GACvD,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAO9C;IAED,mEAAmE;IAC5D,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAO5G;YAEa,2BAA2B;IAgCzC,OAAO,CAAC,QAAQ;YAKF,oBAAoB;YAyFpB,cAAc;IAY5B,OAAO,CAAC,mBAAmB;YAOb,kBAAkB;CAOjC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { compactArray } from '@aztec/foundation/collection';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
4
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
5
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
6
|
+
import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
|
|
7
|
+
/**
|
|
8
|
+
* Gathers and returns txs given a block proposal, block, or their hashes.
|
|
9
|
+
* Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
|
|
10
|
+
*/ export class TxProvider {
|
|
11
|
+
txCollection;
|
|
12
|
+
txPool;
|
|
13
|
+
txValidator;
|
|
14
|
+
log;
|
|
15
|
+
instrumentation;
|
|
16
|
+
constructor(txCollection, txPool, txValidator, log = createLogger('p2p:tx-collector'), client = getTelemetryClient()){
|
|
17
|
+
this.txCollection = txCollection;
|
|
18
|
+
this.txPool = txPool;
|
|
19
|
+
this.txValidator = txValidator;
|
|
20
|
+
this.log = log;
|
|
21
|
+
this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
|
|
22
|
+
}
|
|
23
|
+
/** Returns txs from the tx pool given their hashes.*/ async getAvailableTxs(txHashes) {
|
|
24
|
+
const response = await this.txPool.getTxsByHash(txHashes);
|
|
25
|
+
if (response.length !== txHashes.length) {
|
|
26
|
+
throw new Error(`Unexpected response size from tx pool: expected ${txHashes.length} but got ${response.length}`);
|
|
27
|
+
}
|
|
28
|
+
const txs = [];
|
|
29
|
+
const missingTxs = [];
|
|
30
|
+
for(let i = 0; i < txHashes.length; i++){
|
|
31
|
+
const tx = response[i];
|
|
32
|
+
if (tx === undefined) {
|
|
33
|
+
missingTxs.push(txHashes[i]);
|
|
34
|
+
} else {
|
|
35
|
+
txs.push(tx);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
txs,
|
|
40
|
+
missingTxs
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */ getTxsForBlockProposal(blockProposal, blockNumber, opts) {
|
|
44
|
+
return this.getOrderedTxsFromAllSources({
|
|
45
|
+
type: 'proposal',
|
|
46
|
+
blockProposal,
|
|
47
|
+
blockNumber
|
|
48
|
+
}, {
|
|
49
|
+
...blockProposal.toBlockInfo(),
|
|
50
|
+
blockNumber
|
|
51
|
+
}, blockProposal.txHashes, {
|
|
52
|
+
...opts,
|
|
53
|
+
pinnedPeer: opts.pinnedPeer
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */ getTxsForBlock(block, opts) {
|
|
57
|
+
return this.getOrderedTxsFromAllSources({
|
|
58
|
+
type: 'block',
|
|
59
|
+
block
|
|
60
|
+
}, block.toBlockInfo(), block.body.txEffects.map((tx)=>tx.txHash), {
|
|
61
|
+
...opts,
|
|
62
|
+
pinnedPeer: undefined
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async getOrderedTxsFromAllSources(request, blockInfo, txHashes, opts) {
|
|
66
|
+
const [durationMs, result] = await elapsed(()=>this.getTxsFromAllSources(request, blockInfo, txHashes, opts));
|
|
67
|
+
const { missingTxHashes, txsFromMempool, txsFromNetwork, txsFromProposal } = result;
|
|
68
|
+
const txs = [
|
|
69
|
+
...txsFromMempool ?? [],
|
|
70
|
+
...txsFromProposal ?? [],
|
|
71
|
+
...txsFromNetwork ?? []
|
|
72
|
+
];
|
|
73
|
+
const missingTxs = missingTxHashes?.length ?? 0;
|
|
74
|
+
const level = missingTxs === 0 ? 'verbose' : 'warn';
|
|
75
|
+
this.log[level](`Retrieved ${txs.length} out of ${blockInfo.txCount} txs for ${request.type}`, {
|
|
76
|
+
...blockInfo,
|
|
77
|
+
txsFromProposal: txsFromProposal?.length,
|
|
78
|
+
txsFromMempool: txsFromMempool?.length,
|
|
79
|
+
txsFromNetwork: txsFromNetwork?.length,
|
|
80
|
+
missingTxs,
|
|
81
|
+
durationMs
|
|
82
|
+
});
|
|
83
|
+
const orderedTxs = this.orderTxs(txs, txHashes);
|
|
84
|
+
if (orderedTxs.length + missingTxs !== txHashes.length) {
|
|
85
|
+
throw new Error(`Error collecting txs for ${request.type} with ${txHashes.length} txs: found ${orderedTxs.length} and flagged ${missingTxs} as missing`);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
txs: orderedTxs,
|
|
89
|
+
missingTxs: (missingTxHashes ?? []).map(TxHash.fromString),
|
|
90
|
+
durationMs
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
orderTxs(txs, order) {
|
|
94
|
+
const txsMap = new Map(txs.map((tx)=>[
|
|
95
|
+
tx.txHash.toString(),
|
|
96
|
+
tx
|
|
97
|
+
]));
|
|
98
|
+
return order.map((hash)=>txsMap.get(hash.toString())).filter((tx)=>tx !== undefined);
|
|
99
|
+
}
|
|
100
|
+
async getTxsFromAllSources(request, blockInfo, txHashes, opts) {
|
|
101
|
+
const missingTxHashes = new Set(txHashes.map((txHash)=>txHash.toString()));
|
|
102
|
+
if (missingTxHashes.size === 0) {
|
|
103
|
+
this.log.debug(`Received request with no transactions`, blockInfo);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
// First go to our tx pool and fetch whatever txs we have there
|
|
107
|
+
// We go to the mempool first since those txs are already validated
|
|
108
|
+
const txsFromMempool = compactArray(await this.txPool.getTxsByHash(txHashes));
|
|
109
|
+
txsFromMempool.forEach((tx)=>missingTxHashes.delete(tx.getTxHash().toString()));
|
|
110
|
+
this.instrumentation.incTxsFromMempool(txsFromMempool.length);
|
|
111
|
+
this.log.debug(`Retrieved ${txsFromMempool.length} txs from mempool for block proposal (${missingTxHashes.size} pending)`, {
|
|
112
|
+
...blockInfo,
|
|
113
|
+
missingTxHashes: [
|
|
114
|
+
...missingTxHashes
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
if (missingTxHashes.size === 0) {
|
|
118
|
+
this.instrumentation.incTxsFromP2P(0, txHashes.length);
|
|
119
|
+
return {
|
|
120
|
+
txsFromMempool
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Take txs from the proposal body if there are any
|
|
124
|
+
// Note that we still have to validate these txs, but we do it in parallel with tx collection
|
|
125
|
+
const proposal = request.type === 'proposal' ? request.blockProposal : undefined;
|
|
126
|
+
const txsFromProposal = this.extractFromProposal(proposal, [
|
|
127
|
+
...missingTxHashes
|
|
128
|
+
]);
|
|
129
|
+
if (txsFromProposal.length > 0) {
|
|
130
|
+
this.instrumentation.incTxsFromProposals(txsFromProposal.length);
|
|
131
|
+
txsFromProposal.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
|
|
132
|
+
this.log.debug(`Retrieved ${txsFromProposal.length} txs from proposal body (${missingTxHashes.size} pending)`, {
|
|
133
|
+
...blockInfo,
|
|
134
|
+
missingTxHashes: [
|
|
135
|
+
...missingTxHashes
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (missingTxHashes.size === 0) {
|
|
140
|
+
await this.processProposalTxs(txsFromProposal);
|
|
141
|
+
this.instrumentation.incTxsFromP2P(0, txHashes.length);
|
|
142
|
+
return {
|
|
143
|
+
txsFromMempool,
|
|
144
|
+
txsFromProposal
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Start tx collection from the network if needed, while we validate the txs taken from the proposal in parallel
|
|
148
|
+
const [txsFromNetwork] = await Promise.all([
|
|
149
|
+
this.collectFromP2P(request, [
|
|
150
|
+
...missingTxHashes
|
|
151
|
+
], opts),
|
|
152
|
+
this.processProposalTxs(txsFromProposal)
|
|
153
|
+
]);
|
|
154
|
+
if (txsFromNetwork.length > 0) {
|
|
155
|
+
txsFromNetwork.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
|
|
156
|
+
this.log.debug(`Retrieved ${txsFromNetwork.length} txs from network for block proposal (${missingTxHashes.size} pending)`, {
|
|
157
|
+
...blockInfo,
|
|
158
|
+
missingTxHashes: [
|
|
159
|
+
...missingTxHashes
|
|
160
|
+
]
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
this.instrumentation.incTxsFromP2P(txsFromNetwork.length, txHashes.length);
|
|
164
|
+
if (missingTxHashes.size === 0) {
|
|
165
|
+
return {
|
|
166
|
+
txsFromNetwork,
|
|
167
|
+
txsFromMempool,
|
|
168
|
+
txsFromProposal
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// We are still missing txs, make one last attempt to collect them from our pool, in case they showed up somehow else
|
|
172
|
+
const moreTxsFromPool = compactArray(await this.txPool.getTxsByHash([
|
|
173
|
+
...missingTxHashes
|
|
174
|
+
].map(TxHash.fromString)));
|
|
175
|
+
if (moreTxsFromPool.length > 0) {
|
|
176
|
+
this.instrumentation.incTxsFromMempool(moreTxsFromPool.length);
|
|
177
|
+
this.log.debug(`Retrieved ${moreTxsFromPool.length} txs from pool retry for block proposal (${missingTxHashes.size} pending)`, {
|
|
178
|
+
...blockInfo,
|
|
179
|
+
missingTxHashes: [
|
|
180
|
+
...missingTxHashes
|
|
181
|
+
]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (missingTxHashes.size > 0) {
|
|
185
|
+
this.instrumentation.incMissingTxs(missingTxHashes.size);
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
txsFromNetwork,
|
|
189
|
+
txsFromMempool: [
|
|
190
|
+
...txsFromMempool,
|
|
191
|
+
...moreTxsFromPool
|
|
192
|
+
],
|
|
193
|
+
txsFromProposal,
|
|
194
|
+
missingTxHashes: [
|
|
195
|
+
...missingTxHashes
|
|
196
|
+
]
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async collectFromP2P(input, txHashes, opts) {
|
|
200
|
+
const requestedAt = Date.now();
|
|
201
|
+
const result = await this.txCollection.collectFastFor(input, txHashes, opts);
|
|
202
|
+
const requestProcessedAt = Date.now();
|
|
203
|
+
this.instrumentation.recordTxsRequestDelay(requestProcessedAt - requestedAt);
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
extractFromProposal(proposal, missingTxHashes) {
|
|
207
|
+
if (!proposal) {
|
|
208
|
+
return [];
|
|
209
|
+
}
|
|
210
|
+
return compactArray(proposal.txs ?? []).filter((tx)=>missingTxHashes.includes(tx.getTxHash().toString()));
|
|
211
|
+
}
|
|
212
|
+
async processProposalTxs(txs) {
|
|
213
|
+
if (txs.length === 0) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
await this.txValidator.validate(txs);
|
|
217
|
+
await this.txPool.addTxs(txs);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
|
+
export declare class TxProviderInstrumentation {
|
|
3
|
+
private txFromProposalCount;
|
|
4
|
+
private txFromMempoolCount;
|
|
5
|
+
private txFromP2PCount;
|
|
6
|
+
private missingTxsCount;
|
|
7
|
+
private fractionOfTxsRequestedFromP2P;
|
|
8
|
+
private txsRequestDelay;
|
|
9
|
+
constructor(client: TelemetryClient, name: string);
|
|
10
|
+
incTxsFromProposals(count: number): void;
|
|
11
|
+
incTxsFromMempool(count: number): void;
|
|
12
|
+
incTxsFromP2P(count: number, total: number): void;
|
|
13
|
+
recordTxsRequestDelay(delay: number): void;
|
|
14
|
+
incMissingTxs(count: number): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvdmlkZXJfaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvdHhfcHJvdmlkZXJfaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxxQkFBYSx5QkFBeUI7SUFDcEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQWdCO0lBQzFDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxlQUFlLENBQWdCO0lBRXZDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBWTtJQUNqRCxPQUFPLENBQUMsZUFBZSxDQUFZO0lBRW5DLFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQWNoRDtJQUVELG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLFFBRWhDO0lBRUQsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFOUI7SUFFRCxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUd6QztJQUVELHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLFFBRWxDO0lBRUQsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRTFCO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_provider_instrumentation.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider_instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,yBAAyB;IACpC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,6BAA6B,CAAY;IACjD,OAAO,CAAC,eAAe,CAAY;IAEnC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAchD;IAED,mBAAmB,CAAC,KAAK,EAAE,MAAM,QAEhC;IAED,iBAAiB,CAAC,KAAK,EAAE,MAAM,QAE9B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAGzC;IAED,qBAAqB,CAAC,KAAK,EAAE,MAAM,QAElC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,QAE1B;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
|
|
2
|
+
export class TxProviderInstrumentation {
|
|
3
|
+
txFromProposalCount;
|
|
4
|
+
txFromMempoolCount;
|
|
5
|
+
txFromP2PCount;
|
|
6
|
+
missingTxsCount;
|
|
7
|
+
fractionOfTxsRequestedFromP2P;
|
|
8
|
+
txsRequestDelay;
|
|
9
|
+
constructor(client, name){
|
|
10
|
+
const meter = client.getMeter(name);
|
|
11
|
+
this.txFromProposalCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT);
|
|
12
|
+
this.txFromMempoolCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT);
|
|
13
|
+
this.txFromP2PCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT);
|
|
14
|
+
this.missingTxsCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_MISSING_TXS_COUNT);
|
|
15
|
+
this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION);
|
|
16
|
+
this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY);
|
|
17
|
+
}
|
|
18
|
+
incTxsFromProposals(count) {
|
|
19
|
+
this.txFromProposalCount.add(count);
|
|
20
|
+
}
|
|
21
|
+
incTxsFromMempool(count) {
|
|
22
|
+
this.txFromMempoolCount.add(count);
|
|
23
|
+
}
|
|
24
|
+
incTxsFromP2P(count, total) {
|
|
25
|
+
this.txFromP2PCount.add(count);
|
|
26
|
+
this.fractionOfTxsRequestedFromP2P.record(count / total);
|
|
27
|
+
}
|
|
28
|
+
recordTxsRequestDelay(delay) {
|
|
29
|
+
this.txsRequestDelay.record(delay);
|
|
30
|
+
}
|
|
31
|
+
incMissingTxs(count) {
|
|
32
|
+
this.missingTxsCount.add(count);
|
|
33
|
+
}
|
|
34
|
+
}
|