@aztec/p2p 0.0.1-commit.993d52e → 0.0.1-commit.9badcec54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +24 -10
- package/dest/client/interface.d.ts +9 -2
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +3 -2
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +46 -38
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
- package/dest/config.d.ts +124 -106
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +87 -38
- 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/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -9
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +16 -14
- 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 +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -7
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
- 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 +26 -43
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
- 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 +6 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
- 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 +29 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +54 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +14 -9
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +65 -55
- 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 +24 -20
- 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/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 +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +35 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +36 -10
- 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 +13 -4
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +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/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/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/dummy_service.d.ts +6 -3
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +6 -1
- package/dest/services/encoding.d.ts +5 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -1
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +15 -25
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +176 -127
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +39 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -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 +82 -101
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- 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/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +14 -9
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -11
- 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/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 +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +4 -2
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +30 -12
- package/dest/services/service.d.ts +5 -2
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +57 -73
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
- 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/slow_tx_collection.js +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +3 -6
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +11 -3
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +35 -10
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +1 -2
- package/dest/test-helpers/testbench-utils.d.ts +1 -1
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +23 -3
- package/dest/testbench/p2p_client_testbench_worker.js +68 -16
- package/dest/testbench/worker_client_manager.d.ts +10 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +55 -3
- package/dest/util.d.ts +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +43 -14
- package/src/client/interface.ts +9 -1
- package/src/client/p2p_client.ts +50 -39
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
- package/src/config.ts +129 -45
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +17 -13
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +23 -7
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +31 -5
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
- package/src/msg_validators/clock_tolerance.ts +72 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +74 -58
- package/src/msg_validators/tx_validator/README.md +5 -1
- 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/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +42 -1
- package/src/msg_validators/tx_validator/factory.ts +43 -3
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/services/data_store.ts +5 -13
- package/src/services/dummy_service.ts +8 -2
- package/src/services/encoding.ts +9 -1
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +175 -143
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +45 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +229 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +78 -111
- package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -11
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +40 -13
- package/src/services/service.ts +6 -1
- package/src/services/tx_collection/fast_tx_collection.ts +57 -83
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/slow_tx_collection.ts +1 -1
- package/src/services/tx_collection/tx_collection.ts +3 -5
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/test-helpers/make-test-p2p-clients.ts +1 -1
- package/src/test-helpers/mock-pubsub.ts +31 -5
- package/src/test-helpers/reqresp-nodes.ts +3 -3
- package/src/test-helpers/testbench-utils.ts +30 -3
- package/src/testbench/p2p_client_testbench_worker.ts +72 -15
- package/src/testbench/worker_client_manager.ts +68 -6
- package/src/util.ts +1 -1
- 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/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
- 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 -378
- 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/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
|
@@ -370,14 +370,15 @@ function applyDecs2203RFactory() {
|
|
|
370
370
|
function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
371
371
|
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
372
|
}
|
|
373
|
-
var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6,
|
|
373
|
+
var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _initProto;
|
|
374
374
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
375
|
+
import { maxBy } from '@aztec/foundation/collection';
|
|
375
376
|
import { createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
|
|
376
377
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
377
378
|
import { Timer } from '@aztec/foundation/timer';
|
|
378
379
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
379
380
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
380
|
-
import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
|
|
381
|
+
import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, PeerErrorSeverityByHarshness, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
|
|
381
382
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
382
383
|
import { Tx } from '@aztec/stdlib/tx';
|
|
383
384
|
import { compressComponentVersions } from '@aztec/stdlib/versioning';
|
|
@@ -394,6 +395,7 @@ import { mplex } from '@libp2p/mplex';
|
|
|
394
395
|
import { tcp } from '@libp2p/tcp';
|
|
395
396
|
import { ENR } from '@nethermindeth/enr';
|
|
396
397
|
import { createLibp2p } from 'libp2p';
|
|
398
|
+
import { CheckpointProposalReceivedCallbackNotRegisteredError } from '../../errors/p2p-service.error.js';
|
|
397
399
|
import { BlockProposalValidator, CheckpointAttestationValidator, CheckpointProposalValidator, DoubleSpendTxValidator, FishermanAttestationValidator, getDefaultAllowedSetupFunctions } from '../../msg_validators/index.js';
|
|
398
400
|
import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
|
|
399
401
|
import { createFirstStageTxValidationsForGossipedTransactions, createSecondStageTxValidationsForGossipedTransactions, createTxValidatorForBlockProposalReceivedTxs, createTxValidatorForReqResponseReceivedTxs } from '../../msg_validators/tx_validator/factory.js';
|
|
@@ -407,7 +409,7 @@ import { APP_SPECIFIC_WEIGHT, gossipScoreThresholds } from '../gossipsub/scoring
|
|
|
407
409
|
import { createAllTopicScoreParams } from '../gossipsub/topic_score_params.js';
|
|
408
410
|
import { PeerManager } from '../peer-manager/peer_manager.js';
|
|
409
411
|
import { PeerScoring } from '../peer-manager/peer_scoring.js';
|
|
410
|
-
import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, ValidationError, pingHandler, reqGoodbyeHandler,
|
|
412
|
+
import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, ValidationError, pingHandler, reqGoodbyeHandler, reqRespBlockTxsHandler, reqRespStatusHandler, reqRespTxHandler } from '../reqresp/index.js';
|
|
411
413
|
import { ReqResp } from '../reqresp/reqresp.js';
|
|
412
414
|
import { P2PInstrumentation } from './instrumentation.js';
|
|
413
415
|
_dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId, attestation)=>({
|
|
@@ -429,12 +431,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
429
431
|
[Attributes.BLOCK_ARCHIVE]: request.archiveRoot.toString()
|
|
430
432
|
})), _dec6 = trackSpan('Libp2pService.validateRequestedTx', (requestedTxHash, _responseTx)=>({
|
|
431
433
|
[Attributes.TX_HASH]: requestedTxHash.toString()
|
|
432
|
-
})), _dec7 = trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock)=>({
|
|
433
|
-
[Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString()
|
|
434
|
-
})), _dec8 = trackSpan('Libp2pService.validateCheckpointAttestation', async (_, attestation)=>({
|
|
435
|
-
[Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
|
|
436
|
-
[Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
|
|
437
|
-
[Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
|
|
438
434
|
}));
|
|
439
435
|
/**
|
|
440
436
|
* Lib P2P implementation of the P2PService interface.
|
|
@@ -485,16 +481,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
485
481
|
_dec6,
|
|
486
482
|
2,
|
|
487
483
|
"validateRequestedTxs"
|
|
488
|
-
],
|
|
489
|
-
[
|
|
490
|
-
_dec7,
|
|
491
|
-
2,
|
|
492
|
-
"validateRequestedBlock"
|
|
493
|
-
],
|
|
494
|
-
[
|
|
495
|
-
_dec8,
|
|
496
|
-
2,
|
|
497
|
-
"validateCheckpointAttestation"
|
|
498
484
|
]
|
|
499
485
|
], []));
|
|
500
486
|
}
|
|
@@ -518,7 +504,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
518
504
|
* Callback for when a checkpoint proposal is received from a peer.
|
|
519
505
|
* @param checkpoint - The checkpoint proposal received from the peer.
|
|
520
506
|
* @returns The attestations for the checkpoint, if any.
|
|
521
|
-
*/
|
|
507
|
+
*/ allNodesCheckpointReceivedCallback;
|
|
508
|
+
/**
|
|
509
|
+
* Callback for when a checkpoint proposal is received - specifically for validators - from a peer.
|
|
510
|
+
* @param checkpoint - The checkpoint proposal received from the peer.
|
|
511
|
+
* @returns The attestations for the checkpoint, if any.
|
|
512
|
+
*/ validatorCheckpointReceivedCallback;
|
|
522
513
|
gossipSubEventHandler;
|
|
523
514
|
instrumentation;
|
|
524
515
|
telemetry;
|
|
@@ -540,24 +531,30 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
540
531
|
this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
|
|
541
532
|
this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
|
|
542
533
|
this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
maxTxsPerBlock: config.maxTxsPerBlock
|
|
546
|
-
});
|
|
547
|
-
this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
|
|
534
|
+
const p2pPropagationTime = config.attestationPropagationTime;
|
|
535
|
+
const proposalValidatorOpts = {
|
|
548
536
|
txsPermitted: !config.disableTransactions,
|
|
549
|
-
maxTxsPerBlock: config.
|
|
537
|
+
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
|
|
538
|
+
p2pPropagationTime
|
|
539
|
+
};
|
|
540
|
+
this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
|
|
541
|
+
this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
|
|
542
|
+
this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry, {
|
|
543
|
+
l1PublishingTime: config.l1PublishingTime
|
|
544
|
+
}) : new CheckpointAttestationValidator(epochCache, {
|
|
545
|
+
l1PublishingTime: config.l1PublishingTime
|
|
550
546
|
});
|
|
551
|
-
this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
|
|
552
547
|
this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
|
|
553
548
|
this.blockReceivedCallback = async (block)=>{
|
|
554
|
-
this.logger.
|
|
549
|
+
this.logger.warn(`Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`, {
|
|
555
550
|
p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
|
|
556
551
|
});
|
|
557
|
-
return
|
|
552
|
+
return true;
|
|
558
553
|
};
|
|
559
|
-
this.
|
|
560
|
-
|
|
554
|
+
this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
|
|
555
|
+
throw new CheckpointProposalReceivedCallbackNotRegisteredError();
|
|
556
|
+
};
|
|
557
|
+
this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
|
|
561
558
|
return Promise.resolve(undefined);
|
|
562
559
|
};
|
|
563
560
|
}
|
|
@@ -610,9 +607,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
610
607
|
const l1Constants = epochCache.getL1Constants();
|
|
611
608
|
const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
|
|
612
609
|
slotDurationMs: l1Constants.slotDuration * 1000,
|
|
610
|
+
ethereumSlotDuration: l1Constants.ethereumSlotDuration,
|
|
613
611
|
heartbeatIntervalMs: config.gossipsubInterval,
|
|
614
612
|
targetCommitteeSize: l1Constants.targetCommitteeSize,
|
|
615
613
|
blockDurationMs: config.blockDurationMs,
|
|
614
|
+
l1PublishingTime: config.l1PublishingTime,
|
|
615
|
+
p2pPropagationTime: config.attestationPropagationTime,
|
|
616
616
|
expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot
|
|
617
617
|
});
|
|
618
618
|
const node = await createLibp2p({
|
|
@@ -727,6 +727,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
727
727
|
const peerScoring = new PeerScoring(config, telemetry);
|
|
728
728
|
const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
|
|
729
729
|
const peerManager = new PeerManager(node, peerDiscoveryService, config, telemetry, createLogger(`${logger.module}:peer_manager`), peerScoring, reqresp, worldStateSynchronizer, protocolVersion, epochCache);
|
|
730
|
+
// Gate req/resp data protocols for unauthenticated peers when p2pAllowOnlyValidators is enabled
|
|
731
|
+
reqresp.setShouldRejectPeer((peerId)=>peerManager.shouldDisableP2PGossip(peerId));
|
|
730
732
|
// Configure application-specific scoring for gossipsub.
|
|
731
733
|
// The weight scales app score to align with gossipsub thresholds:
|
|
732
734
|
// - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
|
|
@@ -753,13 +755,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
753
755
|
// Create request response protocol handlers
|
|
754
756
|
const txHandler = reqRespTxHandler(this.mempools);
|
|
755
757
|
const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
|
|
756
|
-
const blockHandler = reqRespBlockHandler(this.archiver);
|
|
757
758
|
const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
|
|
758
759
|
const requestResponseHandlers = {
|
|
759
760
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
760
761
|
[ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
|
|
761
|
-
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
762
|
-
[ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
|
|
762
|
+
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
763
763
|
};
|
|
764
764
|
if (!this.config.disableTransactions) {
|
|
765
765
|
const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.archiver, this.mempools.txPool);
|
|
@@ -772,8 +772,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
772
772
|
const reqrespSubProtocolValidators = {
|
|
773
773
|
...DEFAULT_SUB_PROTOCOL_VALIDATORS,
|
|
774
774
|
[ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
|
|
775
|
-
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
776
|
-
[ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
|
|
775
|
+
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
777
776
|
};
|
|
778
777
|
await this.peerManager.initializePeers();
|
|
779
778
|
await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
|
|
@@ -861,8 +860,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
861
860
|
registerBlockReceivedCallback(callback) {
|
|
862
861
|
this.blockReceivedCallback = callback;
|
|
863
862
|
}
|
|
864
|
-
|
|
865
|
-
this.
|
|
863
|
+
registerValidatorCheckpointReceivedCallback(callback) {
|
|
864
|
+
this.validatorCheckpointReceivedCallback = callback;
|
|
865
|
+
}
|
|
866
|
+
registerAllNodesCheckpointReceivedCallback(callback) {
|
|
867
|
+
this.allNodesCheckpointReceivedCallback = callback;
|
|
868
|
+
}
|
|
869
|
+
async notifyOwnCheckpointProposal(checkpoint) {
|
|
870
|
+
await this.allNodesCheckpointReceivedCallback(checkpoint, this.node.peerId);
|
|
866
871
|
}
|
|
867
872
|
/**
|
|
868
873
|
* Registers a callback to be invoked when a duplicate proposal is detected.
|
|
@@ -928,6 +933,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
928
933
|
if (!validator || !validator.addMessage(msgId)) {
|
|
929
934
|
this.instrumentation.incMessagePrevalidationStatus(false, topicType);
|
|
930
935
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
|
|
936
|
+
if (topicType === TopicType.tx) {
|
|
937
|
+
this.logger.verbose(`Ignoring already-seen tx gossip message`, {
|
|
938
|
+
msgId,
|
|
939
|
+
source: source.toString()
|
|
940
|
+
});
|
|
941
|
+
}
|
|
931
942
|
return {
|
|
932
943
|
result: false,
|
|
933
944
|
topicType
|
|
@@ -1033,29 +1044,79 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1033
1044
|
return;
|
|
1034
1045
|
}
|
|
1035
1046
|
async validateReceivedMessage(validationFunc, msgId, source, topicType) {
|
|
1047
|
+
// Default to reject result with a penalty if validation function throws an error
|
|
1036
1048
|
let resultAndObj = {
|
|
1037
|
-
result: TopicValidatorResult.Reject
|
|
1049
|
+
result: TopicValidatorResult.Reject,
|
|
1050
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
1038
1051
|
};
|
|
1039
1052
|
const timer = new Timer();
|
|
1040
1053
|
try {
|
|
1041
1054
|
resultAndObj = await validationFunc();
|
|
1042
1055
|
} catch (err) {
|
|
1043
|
-
this.
|
|
1044
|
-
this.logger.error(`Error deserializing and validating gossipsub message`, err, {
|
|
1056
|
+
this.logger.error(`Error validating gossipsub message`, err, {
|
|
1045
1057
|
msgId,
|
|
1046
1058
|
source: source.toString(),
|
|
1047
1059
|
topicType
|
|
1048
1060
|
});
|
|
1049
1061
|
}
|
|
1062
|
+
const validationTimeMs = timer.ms();
|
|
1063
|
+
const mcacheWindowMs = this.config.gossipsubMcacheLength * this.config.gossipsubInterval;
|
|
1064
|
+
if (validationTimeMs > mcacheWindowMs * 0.75) {
|
|
1065
|
+
this.instrumentation.incSlowValidation(topicType);
|
|
1066
|
+
this.logger.warn(`Gossip validation for ${topicType} took ${validationTimeMs}ms, approaching mcache eviction window of ${mcacheWindowMs}ms. ` + `Message forwarding may be skipped if validation exceeds the window.`, {
|
|
1067
|
+
msgId,
|
|
1068
|
+
source: source.toString(),
|
|
1069
|
+
topicType,
|
|
1070
|
+
validationTimeMs,
|
|
1071
|
+
mcacheWindowMs
|
|
1072
|
+
});
|
|
1073
|
+
}
|
|
1050
1074
|
if (resultAndObj.result === TopicValidatorResult.Accept) {
|
|
1075
|
+
this.logger.debug(`Message ${topicType} accepted by validator`, {
|
|
1076
|
+
msgId,
|
|
1077
|
+
source: source.toString(),
|
|
1078
|
+
topicType
|
|
1079
|
+
});
|
|
1051
1080
|
this.instrumentation.recordMessageValidation(topicType, timer);
|
|
1081
|
+
} else if (resultAndObj.result === TopicValidatorResult.Reject) {
|
|
1082
|
+
this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
|
|
1083
|
+
msgId,
|
|
1084
|
+
source: source.toString(),
|
|
1085
|
+
topicType,
|
|
1086
|
+
severity: resultAndObj.severity
|
|
1087
|
+
});
|
|
1088
|
+
this.peerManager.penalizePeer(source, resultAndObj.severity);
|
|
1089
|
+
} else {
|
|
1090
|
+
this.logger.trace(`Message ${topicType} ignored by validator`, {
|
|
1091
|
+
msgId,
|
|
1092
|
+
source: source.toString(),
|
|
1093
|
+
topicType
|
|
1094
|
+
});
|
|
1052
1095
|
}
|
|
1053
1096
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
|
|
1054
1097
|
return resultAndObj;
|
|
1055
1098
|
}
|
|
1099
|
+
tryDeserialize(deserializeFunc, msgId, source) {
|
|
1100
|
+
try {
|
|
1101
|
+
return deserializeFunc();
|
|
1102
|
+
} catch (err) {
|
|
1103
|
+
this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
|
|
1104
|
+
err,
|
|
1105
|
+
msgId,
|
|
1106
|
+
source: source.toString()
|
|
1107
|
+
});
|
|
1108
|
+
return undefined;
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1056
1111
|
async handleGossipedTx(payloadData, msgId, source) {
|
|
1057
1112
|
const validationFunc = async ()=>{
|
|
1058
|
-
const tx = Tx.fromBuffer(payloadData);
|
|
1113
|
+
const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
|
|
1114
|
+
if (!tx) {
|
|
1115
|
+
return {
|
|
1116
|
+
result: TopicValidatorResult.Reject,
|
|
1117
|
+
severity: PeerErrorSeverity.LowToleranceError
|
|
1118
|
+
};
|
|
1119
|
+
}
|
|
1059
1120
|
const currentBlockNumber = await this.archiver.getBlockNumber();
|
|
1060
1121
|
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
1061
1122
|
// Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
|
|
@@ -1071,14 +1132,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1071
1132
|
const txBlockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1072
1133
|
severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
|
|
1073
1134
|
}
|
|
1074
|
-
this.
|
|
1135
|
+
this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
|
|
1136
|
+
validator: name,
|
|
1137
|
+
severity,
|
|
1138
|
+
source: source.toString()
|
|
1139
|
+
});
|
|
1075
1140
|
return {
|
|
1076
|
-
result: TopicValidatorResult.Reject
|
|
1141
|
+
result: TopicValidatorResult.Reject,
|
|
1142
|
+
severity
|
|
1077
1143
|
};
|
|
1078
1144
|
}
|
|
1079
1145
|
// Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
|
|
1080
1146
|
const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
|
|
1081
1147
|
if (canAdd === 'ignored') {
|
|
1148
|
+
this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
|
|
1149
|
+
source: source.toString()
|
|
1150
|
+
});
|
|
1082
1151
|
return {
|
|
1083
1152
|
result: TopicValidatorResult.Ignore,
|
|
1084
1153
|
obj: tx
|
|
@@ -1088,10 +1157,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1088
1157
|
const secondStageValidators = this.createSecondStageMessageValidators();
|
|
1089
1158
|
const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
|
|
1090
1159
|
if (!secondStageOutcome.allPassed) {
|
|
1091
|
-
const { severity } = secondStageOutcome.failure;
|
|
1092
|
-
this.
|
|
1160
|
+
const { severity, name } = secondStageOutcome.failure;
|
|
1161
|
+
this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
|
|
1162
|
+
validator: name,
|
|
1163
|
+
severity,
|
|
1164
|
+
source: source.toString()
|
|
1165
|
+
});
|
|
1093
1166
|
return {
|
|
1094
|
-
result: TopicValidatorResult.Reject
|
|
1167
|
+
result: TopicValidatorResult.Reject,
|
|
1168
|
+
severity
|
|
1095
1169
|
};
|
|
1096
1170
|
}
|
|
1097
1171
|
// Pool add: persist the tx
|
|
@@ -1103,7 +1177,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1103
1177
|
});
|
|
1104
1178
|
const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
|
|
1105
1179
|
const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
|
|
1106
|
-
this.logger.
|
|
1180
|
+
this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
|
|
1107
1181
|
wasAccepted,
|
|
1108
1182
|
wasIgnored,
|
|
1109
1183
|
[Attributes.P2P_ID]: source.toString()
|
|
@@ -1119,8 +1193,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1119
1193
|
obj: tx
|
|
1120
1194
|
};
|
|
1121
1195
|
} else {
|
|
1196
|
+
this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
|
|
1197
|
+
source: source.toString(),
|
|
1198
|
+
txHash: txHash.toString()
|
|
1199
|
+
});
|
|
1122
1200
|
return {
|
|
1123
|
-
result: TopicValidatorResult.Reject
|
|
1201
|
+
result: TopicValidatorResult.Reject,
|
|
1202
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1124
1203
|
};
|
|
1125
1204
|
}
|
|
1126
1205
|
};
|
|
@@ -1141,7 +1220,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1141
1220
|
* Process a checkpoint attestation from a peer.
|
|
1142
1221
|
* Validates the attestation and adds it to the pool.
|
|
1143
1222
|
*/ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
|
|
1144
|
-
const { result, obj: attestation } = await this.validateReceivedMessage(()=>
|
|
1223
|
+
const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
|
|
1224
|
+
const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
|
|
1225
|
+
if (!attestation) {
|
|
1226
|
+
return Promise.resolve({
|
|
1227
|
+
result: TopicValidatorResult.Reject,
|
|
1228
|
+
severity: PeerErrorSeverity.LowToleranceError
|
|
1229
|
+
});
|
|
1230
|
+
}
|
|
1231
|
+
return this.validateAndStoreCheckpointAttestation(source, attestation);
|
|
1232
|
+
}, msgId, source, TopicType.checkpoint_attestation);
|
|
1145
1233
|
if (result !== TopicValidatorResult.Accept || !attestation) {
|
|
1146
1234
|
return;
|
|
1147
1235
|
}
|
|
@@ -1156,9 +1244,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1156
1244
|
const validationResult = await this.checkpointAttestationValidator.validate(attestation);
|
|
1157
1245
|
if (validationResult.result === 'reject') {
|
|
1158
1246
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1159
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1160
1247
|
return {
|
|
1161
|
-
result: TopicValidatorResult.Reject
|
|
1248
|
+
result: TopicValidatorResult.Reject,
|
|
1249
|
+
severity: validationResult.severity
|
|
1162
1250
|
};
|
|
1163
1251
|
}
|
|
1164
1252
|
if (validationResult.result === 'ignore') {
|
|
@@ -1185,9 +1273,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1185
1273
|
obj: attestation
|
|
1186
1274
|
};
|
|
1187
1275
|
}
|
|
1188
|
-
// Could not add (cap reached for signer),
|
|
1276
|
+
// Could not add (cap reached for signer), penalize and do not re-broadcast
|
|
1189
1277
|
if (!added) {
|
|
1190
|
-
this.logger.warn(`
|
|
1278
|
+
this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
|
|
1191
1279
|
slot: slot.toString(),
|
|
1192
1280
|
archive: attestation.archive.toString(),
|
|
1193
1281
|
source: peerId.toString(),
|
|
@@ -1195,8 +1283,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1195
1283
|
count
|
|
1196
1284
|
});
|
|
1197
1285
|
return {
|
|
1198
|
-
result: TopicValidatorResult.
|
|
1199
|
-
|
|
1286
|
+
result: TopicValidatorResult.Reject,
|
|
1287
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1200
1288
|
};
|
|
1201
1289
|
}
|
|
1202
1290
|
// Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
|
|
@@ -1234,9 +1322,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1234
1322
|
const validationResult = await this.blockProposalValidator.validate(block);
|
|
1235
1323
|
if (validationResult.result === 'reject') {
|
|
1236
1324
|
this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
|
|
1237
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1238
1325
|
return {
|
|
1239
|
-
result: TopicValidatorResult.Reject
|
|
1326
|
+
result: TopicValidatorResult.Reject,
|
|
1327
|
+
severity: validationResult.severity
|
|
1240
1328
|
};
|
|
1241
1329
|
}
|
|
1242
1330
|
if (validationResult.result === 'ignore') {
|
|
@@ -1266,7 +1354,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1266
1354
|
}
|
|
1267
1355
|
// Too many blocks received for this slot and index, penalize peer and do not re-broadcast
|
|
1268
1356
|
if (!added) {
|
|
1269
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1270
1357
|
this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
|
|
1271
1358
|
...block.toBlockInfo(),
|
|
1272
1359
|
indexWithinCheckpoint: block.indexWithinCheckpoint,
|
|
@@ -1278,7 +1365,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1278
1365
|
result: TopicValidatorResult.Reject,
|
|
1279
1366
|
metadata: {
|
|
1280
1367
|
isEquivocated
|
|
1281
|
-
}
|
|
1368
|
+
},
|
|
1369
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1282
1370
|
};
|
|
1283
1371
|
}
|
|
1284
1372
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1327,7 +1415,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1327
1415
|
// Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
|
|
1328
1416
|
const isValid = await this.blockReceivedCallback(block, sender);
|
|
1329
1417
|
if (!isValid) {
|
|
1330
|
-
this.logger.
|
|
1418
|
+
this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
|
|
1331
1419
|
}
|
|
1332
1420
|
}
|
|
1333
1421
|
/**
|
|
@@ -1352,9 +1440,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1352
1440
|
const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
|
|
1353
1441
|
if (validationResult.result === 'reject') {
|
|
1354
1442
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
|
|
1355
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1356
1443
|
return {
|
|
1357
|
-
result: TopicValidatorResult.Reject
|
|
1444
|
+
result: TopicValidatorResult.Reject,
|
|
1445
|
+
severity: validationResult.severity
|
|
1358
1446
|
};
|
|
1359
1447
|
}
|
|
1360
1448
|
if (validationResult.result === 'ignore') {
|
|
@@ -1371,18 +1459,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1371
1459
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1372
1460
|
[Attributes.P2P_ID]: peerId.toString()
|
|
1373
1461
|
});
|
|
1374
|
-
const
|
|
1375
|
-
|
|
1462
|
+
const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
|
|
1463
|
+
const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
|
|
1464
|
+
if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
|
|
1376
1465
|
this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
|
|
1377
1466
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1378
1467
|
[Attributes.P2P_ID]: peerId.toString(),
|
|
1379
1468
|
isEquivocated,
|
|
1380
|
-
result
|
|
1469
|
+
result: blockProposalResult.result
|
|
1381
1470
|
});
|
|
1382
1471
|
return {
|
|
1383
|
-
result: TopicValidatorResult.Reject
|
|
1472
|
+
result: TopicValidatorResult.Reject,
|
|
1473
|
+
severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
|
|
1384
1474
|
};
|
|
1385
|
-
} else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1475
|
+
} else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1386
1476
|
processBlock = true;
|
|
1387
1477
|
}
|
|
1388
1478
|
}
|
|
@@ -1409,7 +1499,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1409
1499
|
// Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
|
|
1410
1500
|
// Note: We still return the checkpoint obj so the lastBlock can be processed if valid
|
|
1411
1501
|
if (!added) {
|
|
1412
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1413
1502
|
this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
|
|
1414
1503
|
...checkpoint.toCheckpointInfo(),
|
|
1415
1504
|
count,
|
|
@@ -1421,7 +1510,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1421
1510
|
metadata: {
|
|
1422
1511
|
isEquivocated,
|
|
1423
1512
|
processBlock
|
|
1424
|
-
}
|
|
1513
|
+
},
|
|
1514
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1425
1515
|
};
|
|
1426
1516
|
}
|
|
1427
1517
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1471,9 +1561,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1471
1561
|
archive: checkpoint.archive.toString(),
|
|
1472
1562
|
source: sender.toString()
|
|
1473
1563
|
});
|
|
1564
|
+
await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
|
|
1474
1565
|
// Call the checkpoint received callback with the core version (without lastBlock)
|
|
1475
1566
|
// to validate and potentially generate attestations
|
|
1476
|
-
const attestations = await this.
|
|
1567
|
+
const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
|
|
1477
1568
|
if (attestations && attestations.length > 0) {
|
|
1478
1569
|
// If the callback returned attestations, add them to the pool and propagate them
|
|
1479
1570
|
await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
@@ -1593,45 +1684,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1593
1684
|
return false;
|
|
1594
1685
|
}
|
|
1595
1686
|
}
|
|
1596
|
-
/**
|
|
1597
|
-
* Validates a BLOCK response.
|
|
1598
|
-
*
|
|
1599
|
-
* If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
|
|
1600
|
-
* Penalizes on block number mismatch or hash mismatch.
|
|
1601
|
-
*
|
|
1602
|
-
* @param requestedBlockNumber - The requested block number.
|
|
1603
|
-
* @param responseBlock - The block returned by the peer.
|
|
1604
|
-
* @param peerId - The peer that returned the block.
|
|
1605
|
-
* @returns True if the response is valid, false otherwise.
|
|
1606
|
-
*/ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
|
|
1607
|
-
try {
|
|
1608
|
-
const reqNum = Number(requestedBlockNumber.toString());
|
|
1609
|
-
if (responseBlock.number !== reqNum) {
|
|
1610
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
1611
|
-
return false;
|
|
1612
|
-
}
|
|
1613
|
-
const local = await this.archiver.getBlock(BlockNumber(reqNum));
|
|
1614
|
-
if (!local) {
|
|
1615
|
-
// We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
|
|
1616
|
-
// TODO: Consider extending this validator to accept an expected hash or
|
|
1617
|
-
// performing quorum-based checks when using P2P syncing prior to L1 sync.
|
|
1618
|
-
this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
|
|
1619
|
-
return false;
|
|
1620
|
-
}
|
|
1621
|
-
const [localHash, respHash] = await Promise.all([
|
|
1622
|
-
local.hash(),
|
|
1623
|
-
responseBlock.hash()
|
|
1624
|
-
]);
|
|
1625
|
-
if (!localHash.equals(respHash)) {
|
|
1626
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
|
|
1627
|
-
return false;
|
|
1628
|
-
}
|
|
1629
|
-
return true;
|
|
1630
|
-
} catch (e) {
|
|
1631
|
-
this.logger.warn(`Error validating requested block`, e);
|
|
1632
|
-
return false;
|
|
1633
|
-
}
|
|
1634
|
-
}
|
|
1635
1687
|
async validateRequestedTx(tx, peerId, txValidator, requested) {
|
|
1636
1688
|
const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
|
|
1637
1689
|
if (requested && !requested.has(tx.getTxHash().toString())) {
|
|
@@ -1691,9 +1743,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1691
1743
|
}
|
|
1692
1744
|
/** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
|
|
1693
1745
|
const gasFees = await this.getGasFees(currentBlockNumber);
|
|
1694
|
-
const allowedInSetup =
|
|
1746
|
+
const allowedInSetup = [
|
|
1747
|
+
...await getDefaultAllowedSetupFunctions(),
|
|
1748
|
+
...this.config.txPublicSetupAllowListExtend ?? []
|
|
1749
|
+
];
|
|
1695
1750
|
const blockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1696
|
-
|
|
1751
|
+
const l1Constants = await this.archiver.getL1Constants();
|
|
1752
|
+
return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
|
|
1753
|
+
rollupManaLimit: l1Constants.rollupManaLimit,
|
|
1754
|
+
maxBlockL2Gas: this.config.validateMaxL2BlockGas,
|
|
1755
|
+
maxBlockDAGas: this.config.validateMaxDABlockGas
|
|
1756
|
+
});
|
|
1697
1757
|
}
|
|
1698
1758
|
/** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
|
|
1699
1759
|
return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
|
|
@@ -1714,8 +1774,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1714
1774
|
});
|
|
1715
1775
|
// A promise that resolves when all validations have been run
|
|
1716
1776
|
const allValidations = await Promise.all(validationPromises);
|
|
1717
|
-
const
|
|
1718
|
-
if (
|
|
1777
|
+
const failures = allValidations.filter((x)=>!x.isValid);
|
|
1778
|
+
if (failures.length > 0) {
|
|
1779
|
+
// Pick the most severe failure (lowest tolerance = harshest penalty)
|
|
1780
|
+
const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
|
|
1719
1781
|
return {
|
|
1720
1782
|
allPassed: false,
|
|
1721
1783
|
failure: {
|
|
@@ -1762,19 +1824,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1762
1824
|
}
|
|
1763
1825
|
return PeerErrorSeverity.HighToleranceError;
|
|
1764
1826
|
}
|
|
1765
|
-
/**
|
|
1766
|
-
* Validate a checkpoint attestation.
|
|
1767
|
-
*
|
|
1768
|
-
* @param attestation - The checkpoint attestation to validate.
|
|
1769
|
-
* @returns True if the checkpoint attestation is valid, false otherwise.
|
|
1770
|
-
*/ async validateCheckpointAttestation(peerId, attestation) {
|
|
1771
|
-
const result = await this.checkpointAttestationValidator.validate(attestation);
|
|
1772
|
-
if (result.result === 'reject') {
|
|
1773
|
-
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1774
|
-
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1775
|
-
}
|
|
1776
|
-
return result;
|
|
1777
|
-
}
|
|
1778
1827
|
getPeerScore(peerId) {
|
|
1779
1828
|
return this.node.services.pubsub.score.score(peerId.toString());
|
|
1780
1829
|
}
|
|
@@ -6,6 +6,7 @@ export declare class PeerManagerMetrics {
|
|
|
6
6
|
private sentGoodbyes;
|
|
7
7
|
private receivedGoodbyes;
|
|
8
8
|
private peerCount;
|
|
9
|
+
private healthyPeerCount;
|
|
9
10
|
private lowScoreDisconnects;
|
|
10
11
|
private peerConnectionDuration;
|
|
11
12
|
private peerConnectedAt;
|
|
@@ -14,8 +15,9 @@ export declare class PeerManagerMetrics {
|
|
|
14
15
|
recordGoodbyeSent(reason: GoodByeReason): void;
|
|
15
16
|
recordGoodbyeReceived(reason: GoodByeReason): void;
|
|
16
17
|
recordPeerCount(count: number): void;
|
|
18
|
+
recordHealthyPeerCount(count: number): void;
|
|
17
19
|
recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect'): void;
|
|
18
20
|
peerConnected(id: PeerId): void;
|
|
19
21
|
peerDisconnected(id: PeerId): void;
|
|
20
22
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQWFYLGVBQWUsRUFBRSxlQUFlO0lBWmxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsZ0JBQWdCLENBQVE7SUFDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsc0JBQXNCLENBQVk7SUFFMUMsT0FBTyxDQUFDLGVBQWUsQ0FBa0Q7SUFFekUsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNrQixlQUFlLEdBQUUsZUFBc0MsRUFDdkUsSUFBSSxTQUFnQixFQTJCckI7SUFFTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUU3QztJQUVNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRWpEO0lBRU0sZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRW5DO0lBRU0sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFMUM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU1qQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAaX,eAAe,EAAE,eAAe;IAZlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA2BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,QAE1C;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAMjC;CACF"}
|