@aztec/p2p 0.0.1-commit.ec5f612 → 0.0.1-commit.ec7ac5448
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 +25 -11
- 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 +37 -36
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
- package/dest/config.d.ts +34 -11
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +91 -32
- 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/interfaces.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +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 +2 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +38 -11
- 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 +24 -6
- 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 +7 -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 +7 -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 +15 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
- 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/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/libp2p_service.d.ts +15 -25
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +165 -126
- 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 +24 -9
- 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 +69 -65
- 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 +3 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
- 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 +28 -11
- 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 +39 -36
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
- package/src/config.ts +136 -34
- 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/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +59 -13
- 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 +28 -6
- 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 +79 -49
- 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/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/libp2p_service.ts +164 -139
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +28 -9
- 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 +64 -69
- 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 +5 -0
- 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 +37 -12
- 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 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/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 -230
- 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,22 +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
|
-
|
|
546
|
-
|
|
547
|
-
|
|
534
|
+
const p2pPropagationTime = config.attestationPropagationTime;
|
|
535
|
+
const proposalValidatorOpts = {
|
|
536
|
+
txsPermitted: !config.disableTransactions,
|
|
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
|
|
548
546
|
});
|
|
549
|
-
this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
|
|
550
547
|
this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
|
|
551
548
|
this.blockReceivedCallback = async (block)=>{
|
|
552
|
-
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.`, {
|
|
553
550
|
p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
|
|
554
551
|
});
|
|
555
|
-
return
|
|
552
|
+
return true;
|
|
553
|
+
};
|
|
554
|
+
this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
|
|
555
|
+
throw new CheckpointProposalReceivedCallbackNotRegisteredError();
|
|
556
556
|
};
|
|
557
|
-
this.
|
|
558
|
-
this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
|
|
557
|
+
this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
|
|
559
558
|
return Promise.resolve(undefined);
|
|
560
559
|
};
|
|
561
560
|
}
|
|
@@ -608,9 +607,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
608
607
|
const l1Constants = epochCache.getL1Constants();
|
|
609
608
|
const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
|
|
610
609
|
slotDurationMs: l1Constants.slotDuration * 1000,
|
|
610
|
+
ethereumSlotDuration: l1Constants.ethereumSlotDuration,
|
|
611
611
|
heartbeatIntervalMs: config.gossipsubInterval,
|
|
612
612
|
targetCommitteeSize: l1Constants.targetCommitteeSize,
|
|
613
613
|
blockDurationMs: config.blockDurationMs,
|
|
614
|
+
l1PublishingTime: config.l1PublishingTime,
|
|
615
|
+
p2pPropagationTime: config.attestationPropagationTime,
|
|
614
616
|
expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot
|
|
615
617
|
});
|
|
616
618
|
const node = await createLibp2p({
|
|
@@ -725,6 +727,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
725
727
|
const peerScoring = new PeerScoring(config, telemetry);
|
|
726
728
|
const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
|
|
727
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));
|
|
728
732
|
// Configure application-specific scoring for gossipsub.
|
|
729
733
|
// The weight scales app score to align with gossipsub thresholds:
|
|
730
734
|
// - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
|
|
@@ -751,13 +755,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
751
755
|
// Create request response protocol handlers
|
|
752
756
|
const txHandler = reqRespTxHandler(this.mempools);
|
|
753
757
|
const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
|
|
754
|
-
const blockHandler = reqRespBlockHandler(this.archiver);
|
|
755
758
|
const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
|
|
756
759
|
const requestResponseHandlers = {
|
|
757
760
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
758
761
|
[ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
|
|
759
|
-
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
760
|
-
[ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
|
|
762
|
+
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
761
763
|
};
|
|
762
764
|
if (!this.config.disableTransactions) {
|
|
763
765
|
const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.archiver, this.mempools.txPool);
|
|
@@ -770,8 +772,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
770
772
|
const reqrespSubProtocolValidators = {
|
|
771
773
|
...DEFAULT_SUB_PROTOCOL_VALIDATORS,
|
|
772
774
|
[ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
|
|
773
|
-
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
774
|
-
[ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
|
|
775
|
+
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
775
776
|
};
|
|
776
777
|
await this.peerManager.initializePeers();
|
|
777
778
|
await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
|
|
@@ -859,8 +860,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
859
860
|
registerBlockReceivedCallback(callback) {
|
|
860
861
|
this.blockReceivedCallback = callback;
|
|
861
862
|
}
|
|
862
|
-
|
|
863
|
-
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);
|
|
864
871
|
}
|
|
865
872
|
/**
|
|
866
873
|
* Registers a callback to be invoked when a duplicate proposal is detected.
|
|
@@ -926,6 +933,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
926
933
|
if (!validator || !validator.addMessage(msgId)) {
|
|
927
934
|
this.instrumentation.incMessagePrevalidationStatus(false, topicType);
|
|
928
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
|
+
}
|
|
929
942
|
return {
|
|
930
943
|
result: false,
|
|
931
944
|
topicType
|
|
@@ -1031,29 +1044,67 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1031
1044
|
return;
|
|
1032
1045
|
}
|
|
1033
1046
|
async validateReceivedMessage(validationFunc, msgId, source, topicType) {
|
|
1047
|
+
// Default to reject result with a penalty if validation function throws an error
|
|
1034
1048
|
let resultAndObj = {
|
|
1035
|
-
result: TopicValidatorResult.Reject
|
|
1049
|
+
result: TopicValidatorResult.Reject,
|
|
1050
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
1036
1051
|
};
|
|
1037
1052
|
const timer = new Timer();
|
|
1038
1053
|
try {
|
|
1039
1054
|
resultAndObj = await validationFunc();
|
|
1040
1055
|
} catch (err) {
|
|
1041
|
-
this.
|
|
1042
|
-
this.logger.error(`Error deserializing and validating gossipsub message`, err, {
|
|
1056
|
+
this.logger.error(`Error validating gossipsub message`, err, {
|
|
1043
1057
|
msgId,
|
|
1044
1058
|
source: source.toString(),
|
|
1045
1059
|
topicType
|
|
1046
1060
|
});
|
|
1047
1061
|
}
|
|
1048
1062
|
if (resultAndObj.result === TopicValidatorResult.Accept) {
|
|
1063
|
+
this.logger.debug(`Message ${topicType} accepted by validator`, {
|
|
1064
|
+
msgId,
|
|
1065
|
+
source: source.toString(),
|
|
1066
|
+
topicType
|
|
1067
|
+
});
|
|
1049
1068
|
this.instrumentation.recordMessageValidation(topicType, timer);
|
|
1069
|
+
} else if (resultAndObj.result === TopicValidatorResult.Reject) {
|
|
1070
|
+
this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
|
|
1071
|
+
msgId,
|
|
1072
|
+
source: source.toString(),
|
|
1073
|
+
topicType,
|
|
1074
|
+
severity: resultAndObj.severity
|
|
1075
|
+
});
|
|
1076
|
+
this.peerManager.penalizePeer(source, resultAndObj.severity);
|
|
1077
|
+
} else {
|
|
1078
|
+
this.logger.trace(`Message ${topicType} ignored by validator`, {
|
|
1079
|
+
msgId,
|
|
1080
|
+
source: source.toString(),
|
|
1081
|
+
topicType
|
|
1082
|
+
});
|
|
1050
1083
|
}
|
|
1051
1084
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
|
|
1052
1085
|
return resultAndObj;
|
|
1053
1086
|
}
|
|
1087
|
+
tryDeserialize(deserializeFunc, msgId, source) {
|
|
1088
|
+
try {
|
|
1089
|
+
return deserializeFunc();
|
|
1090
|
+
} catch (err) {
|
|
1091
|
+
this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
|
|
1092
|
+
err,
|
|
1093
|
+
msgId,
|
|
1094
|
+
source: source.toString()
|
|
1095
|
+
});
|
|
1096
|
+
return undefined;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1054
1099
|
async handleGossipedTx(payloadData, msgId, source) {
|
|
1055
1100
|
const validationFunc = async ()=>{
|
|
1056
|
-
const tx = Tx.fromBuffer(payloadData);
|
|
1101
|
+
const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
|
|
1102
|
+
if (!tx) {
|
|
1103
|
+
return {
|
|
1104
|
+
result: TopicValidatorResult.Reject,
|
|
1105
|
+
severity: PeerErrorSeverity.LowToleranceError
|
|
1106
|
+
};
|
|
1107
|
+
}
|
|
1057
1108
|
const currentBlockNumber = await this.archiver.getBlockNumber();
|
|
1058
1109
|
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
1059
1110
|
// Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
|
|
@@ -1069,14 +1120,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1069
1120
|
const txBlockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1070
1121
|
severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
|
|
1071
1122
|
}
|
|
1072
|
-
this.
|
|
1123
|
+
this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
|
|
1124
|
+
validator: name,
|
|
1125
|
+
severity,
|
|
1126
|
+
source: source.toString()
|
|
1127
|
+
});
|
|
1073
1128
|
return {
|
|
1074
|
-
result: TopicValidatorResult.Reject
|
|
1129
|
+
result: TopicValidatorResult.Reject,
|
|
1130
|
+
severity
|
|
1075
1131
|
};
|
|
1076
1132
|
}
|
|
1077
1133
|
// Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
|
|
1078
1134
|
const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
|
|
1079
1135
|
if (canAdd === 'ignored') {
|
|
1136
|
+
this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
|
|
1137
|
+
source: source.toString()
|
|
1138
|
+
});
|
|
1080
1139
|
return {
|
|
1081
1140
|
result: TopicValidatorResult.Ignore,
|
|
1082
1141
|
obj: tx
|
|
@@ -1086,10 +1145,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1086
1145
|
const secondStageValidators = this.createSecondStageMessageValidators();
|
|
1087
1146
|
const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
|
|
1088
1147
|
if (!secondStageOutcome.allPassed) {
|
|
1089
|
-
const { severity } = secondStageOutcome.failure;
|
|
1090
|
-
this.
|
|
1148
|
+
const { severity, name } = secondStageOutcome.failure;
|
|
1149
|
+
this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
|
|
1150
|
+
validator: name,
|
|
1151
|
+
severity,
|
|
1152
|
+
source: source.toString()
|
|
1153
|
+
});
|
|
1091
1154
|
return {
|
|
1092
|
-
result: TopicValidatorResult.Reject
|
|
1155
|
+
result: TopicValidatorResult.Reject,
|
|
1156
|
+
severity
|
|
1093
1157
|
};
|
|
1094
1158
|
}
|
|
1095
1159
|
// Pool add: persist the tx
|
|
@@ -1101,7 +1165,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1101
1165
|
});
|
|
1102
1166
|
const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
|
|
1103
1167
|
const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
|
|
1104
|
-
this.logger.
|
|
1168
|
+
this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
|
|
1105
1169
|
wasAccepted,
|
|
1106
1170
|
wasIgnored,
|
|
1107
1171
|
[Attributes.P2P_ID]: source.toString()
|
|
@@ -1117,8 +1181,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1117
1181
|
obj: tx
|
|
1118
1182
|
};
|
|
1119
1183
|
} else {
|
|
1184
|
+
this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
|
|
1185
|
+
source: source.toString(),
|
|
1186
|
+
txHash: txHash.toString()
|
|
1187
|
+
});
|
|
1120
1188
|
return {
|
|
1121
|
-
result: TopicValidatorResult.Reject
|
|
1189
|
+
result: TopicValidatorResult.Reject,
|
|
1190
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1122
1191
|
};
|
|
1123
1192
|
}
|
|
1124
1193
|
};
|
|
@@ -1139,7 +1208,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1139
1208
|
* Process a checkpoint attestation from a peer.
|
|
1140
1209
|
* Validates the attestation and adds it to the pool.
|
|
1141
1210
|
*/ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
|
|
1142
|
-
const { result, obj: attestation } = await this.validateReceivedMessage(()=>
|
|
1211
|
+
const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
|
|
1212
|
+
const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
|
|
1213
|
+
if (!attestation) {
|
|
1214
|
+
return Promise.resolve({
|
|
1215
|
+
result: TopicValidatorResult.Reject,
|
|
1216
|
+
severity: PeerErrorSeverity.LowToleranceError
|
|
1217
|
+
});
|
|
1218
|
+
}
|
|
1219
|
+
return this.validateAndStoreCheckpointAttestation(source, attestation);
|
|
1220
|
+
}, msgId, source, TopicType.checkpoint_attestation);
|
|
1143
1221
|
if (result !== TopicValidatorResult.Accept || !attestation) {
|
|
1144
1222
|
return;
|
|
1145
1223
|
}
|
|
@@ -1154,9 +1232,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1154
1232
|
const validationResult = await this.checkpointAttestationValidator.validate(attestation);
|
|
1155
1233
|
if (validationResult.result === 'reject') {
|
|
1156
1234
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1157
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1158
1235
|
return {
|
|
1159
|
-
result: TopicValidatorResult.Reject
|
|
1236
|
+
result: TopicValidatorResult.Reject,
|
|
1237
|
+
severity: validationResult.severity
|
|
1160
1238
|
};
|
|
1161
1239
|
}
|
|
1162
1240
|
if (validationResult.result === 'ignore') {
|
|
@@ -1183,9 +1261,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1183
1261
|
obj: attestation
|
|
1184
1262
|
};
|
|
1185
1263
|
}
|
|
1186
|
-
// Could not add (cap reached for signer),
|
|
1264
|
+
// Could not add (cap reached for signer), penalize and do not re-broadcast
|
|
1187
1265
|
if (!added) {
|
|
1188
|
-
this.logger.warn(`
|
|
1266
|
+
this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
|
|
1189
1267
|
slot: slot.toString(),
|
|
1190
1268
|
archive: attestation.archive.toString(),
|
|
1191
1269
|
source: peerId.toString(),
|
|
@@ -1193,8 +1271,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1193
1271
|
count
|
|
1194
1272
|
});
|
|
1195
1273
|
return {
|
|
1196
|
-
result: TopicValidatorResult.
|
|
1197
|
-
|
|
1274
|
+
result: TopicValidatorResult.Reject,
|
|
1275
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1198
1276
|
};
|
|
1199
1277
|
}
|
|
1200
1278
|
// Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
|
|
@@ -1232,9 +1310,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1232
1310
|
const validationResult = await this.blockProposalValidator.validate(block);
|
|
1233
1311
|
if (validationResult.result === 'reject') {
|
|
1234
1312
|
this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
|
|
1235
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1236
1313
|
return {
|
|
1237
|
-
result: TopicValidatorResult.Reject
|
|
1314
|
+
result: TopicValidatorResult.Reject,
|
|
1315
|
+
severity: validationResult.severity
|
|
1238
1316
|
};
|
|
1239
1317
|
}
|
|
1240
1318
|
if (validationResult.result === 'ignore') {
|
|
@@ -1264,7 +1342,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1264
1342
|
}
|
|
1265
1343
|
// Too many blocks received for this slot and index, penalize peer and do not re-broadcast
|
|
1266
1344
|
if (!added) {
|
|
1267
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1268
1345
|
this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
|
|
1269
1346
|
...block.toBlockInfo(),
|
|
1270
1347
|
indexWithinCheckpoint: block.indexWithinCheckpoint,
|
|
@@ -1276,7 +1353,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1276
1353
|
result: TopicValidatorResult.Reject,
|
|
1277
1354
|
metadata: {
|
|
1278
1355
|
isEquivocated
|
|
1279
|
-
}
|
|
1356
|
+
},
|
|
1357
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1280
1358
|
};
|
|
1281
1359
|
}
|
|
1282
1360
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1325,7 +1403,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1325
1403
|
// Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
|
|
1326
1404
|
const isValid = await this.blockReceivedCallback(block, sender);
|
|
1327
1405
|
if (!isValid) {
|
|
1328
|
-
this.logger.
|
|
1406
|
+
this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
|
|
1329
1407
|
}
|
|
1330
1408
|
}
|
|
1331
1409
|
/**
|
|
@@ -1350,9 +1428,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1350
1428
|
const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
|
|
1351
1429
|
if (validationResult.result === 'reject') {
|
|
1352
1430
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
|
|
1353
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1354
1431
|
return {
|
|
1355
|
-
result: TopicValidatorResult.Reject
|
|
1432
|
+
result: TopicValidatorResult.Reject,
|
|
1433
|
+
severity: validationResult.severity
|
|
1356
1434
|
};
|
|
1357
1435
|
}
|
|
1358
1436
|
if (validationResult.result === 'ignore') {
|
|
@@ -1369,18 +1447,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1369
1447
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1370
1448
|
[Attributes.P2P_ID]: peerId.toString()
|
|
1371
1449
|
});
|
|
1372
|
-
const
|
|
1373
|
-
|
|
1450
|
+
const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
|
|
1451
|
+
const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
|
|
1452
|
+
if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
|
|
1374
1453
|
this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
|
|
1375
1454
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1376
1455
|
[Attributes.P2P_ID]: peerId.toString(),
|
|
1377
1456
|
isEquivocated,
|
|
1378
|
-
result
|
|
1457
|
+
result: blockProposalResult.result
|
|
1379
1458
|
});
|
|
1380
1459
|
return {
|
|
1381
|
-
result: TopicValidatorResult.Reject
|
|
1460
|
+
result: TopicValidatorResult.Reject,
|
|
1461
|
+
severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
|
|
1382
1462
|
};
|
|
1383
|
-
} else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1463
|
+
} else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1384
1464
|
processBlock = true;
|
|
1385
1465
|
}
|
|
1386
1466
|
}
|
|
@@ -1407,7 +1487,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1407
1487
|
// Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
|
|
1408
1488
|
// Note: We still return the checkpoint obj so the lastBlock can be processed if valid
|
|
1409
1489
|
if (!added) {
|
|
1410
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1411
1490
|
this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
|
|
1412
1491
|
...checkpoint.toCheckpointInfo(),
|
|
1413
1492
|
count,
|
|
@@ -1419,7 +1498,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1419
1498
|
metadata: {
|
|
1420
1499
|
isEquivocated,
|
|
1421
1500
|
processBlock
|
|
1422
|
-
}
|
|
1501
|
+
},
|
|
1502
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1423
1503
|
};
|
|
1424
1504
|
}
|
|
1425
1505
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1469,9 +1549,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1469
1549
|
archive: checkpoint.archive.toString(),
|
|
1470
1550
|
source: sender.toString()
|
|
1471
1551
|
});
|
|
1552
|
+
await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
|
|
1472
1553
|
// Call the checkpoint received callback with the core version (without lastBlock)
|
|
1473
1554
|
// to validate and potentially generate attestations
|
|
1474
|
-
const attestations = await this.
|
|
1555
|
+
const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
|
|
1475
1556
|
if (attestations && attestations.length > 0) {
|
|
1476
1557
|
// If the callback returned attestations, add them to the pool and propagate them
|
|
1477
1558
|
await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
@@ -1591,45 +1672,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1591
1672
|
return false;
|
|
1592
1673
|
}
|
|
1593
1674
|
}
|
|
1594
|
-
/**
|
|
1595
|
-
* Validates a BLOCK response.
|
|
1596
|
-
*
|
|
1597
|
-
* If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
|
|
1598
|
-
* Penalizes on block number mismatch or hash mismatch.
|
|
1599
|
-
*
|
|
1600
|
-
* @param requestedBlockNumber - The requested block number.
|
|
1601
|
-
* @param responseBlock - The block returned by the peer.
|
|
1602
|
-
* @param peerId - The peer that returned the block.
|
|
1603
|
-
* @returns True if the response is valid, false otherwise.
|
|
1604
|
-
*/ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
|
|
1605
|
-
try {
|
|
1606
|
-
const reqNum = Number(requestedBlockNumber.toString());
|
|
1607
|
-
if (responseBlock.number !== reqNum) {
|
|
1608
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
1609
|
-
return false;
|
|
1610
|
-
}
|
|
1611
|
-
const local = await this.archiver.getBlock(BlockNumber(reqNum));
|
|
1612
|
-
if (!local) {
|
|
1613
|
-
// We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
|
|
1614
|
-
// TODO: Consider extending this validator to accept an expected hash or
|
|
1615
|
-
// performing quorum-based checks when using P2P syncing prior to L1 sync.
|
|
1616
|
-
this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
|
|
1617
|
-
return false;
|
|
1618
|
-
}
|
|
1619
|
-
const [localHash, respHash] = await Promise.all([
|
|
1620
|
-
local.hash(),
|
|
1621
|
-
responseBlock.hash()
|
|
1622
|
-
]);
|
|
1623
|
-
if (!localHash.equals(respHash)) {
|
|
1624
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
|
|
1625
|
-
return false;
|
|
1626
|
-
}
|
|
1627
|
-
return true;
|
|
1628
|
-
} catch (e) {
|
|
1629
|
-
this.logger.warn(`Error validating requested block`, e);
|
|
1630
|
-
return false;
|
|
1631
|
-
}
|
|
1632
|
-
}
|
|
1633
1675
|
async validateRequestedTx(tx, peerId, txValidator, requested) {
|
|
1634
1676
|
const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
|
|
1635
1677
|
if (requested && !requested.has(tx.getTxHash().toString())) {
|
|
@@ -1689,9 +1731,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1689
1731
|
}
|
|
1690
1732
|
/** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
|
|
1691
1733
|
const gasFees = await this.getGasFees(currentBlockNumber);
|
|
1692
|
-
const allowedInSetup =
|
|
1734
|
+
const allowedInSetup = [
|
|
1735
|
+
...await getDefaultAllowedSetupFunctions(),
|
|
1736
|
+
...this.config.txPublicSetupAllowListExtend ?? []
|
|
1737
|
+
];
|
|
1693
1738
|
const blockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1694
|
-
|
|
1739
|
+
const l1Constants = await this.archiver.getL1Constants();
|
|
1740
|
+
return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
|
|
1741
|
+
rollupManaLimit: l1Constants.rollupManaLimit,
|
|
1742
|
+
maxBlockL2Gas: this.config.validateMaxL2BlockGas,
|
|
1743
|
+
maxBlockDAGas: this.config.validateMaxDABlockGas
|
|
1744
|
+
});
|
|
1695
1745
|
}
|
|
1696
1746
|
/** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
|
|
1697
1747
|
return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
|
|
@@ -1712,8 +1762,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1712
1762
|
});
|
|
1713
1763
|
// A promise that resolves when all validations have been run
|
|
1714
1764
|
const allValidations = await Promise.all(validationPromises);
|
|
1715
|
-
const
|
|
1716
|
-
if (
|
|
1765
|
+
const failures = allValidations.filter((x)=>!x.isValid);
|
|
1766
|
+
if (failures.length > 0) {
|
|
1767
|
+
// Pick the most severe failure (lowest tolerance = harshest penalty)
|
|
1768
|
+
const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
|
|
1717
1769
|
return {
|
|
1718
1770
|
allPassed: false,
|
|
1719
1771
|
failure: {
|
|
@@ -1760,19 +1812,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1760
1812
|
}
|
|
1761
1813
|
return PeerErrorSeverity.HighToleranceError;
|
|
1762
1814
|
}
|
|
1763
|
-
/**
|
|
1764
|
-
* Validate a checkpoint attestation.
|
|
1765
|
-
*
|
|
1766
|
-
* @param attestation - The checkpoint attestation to validate.
|
|
1767
|
-
* @returns True if the checkpoint attestation is valid, false otherwise.
|
|
1768
|
-
*/ async validateCheckpointAttestation(peerId, attestation) {
|
|
1769
|
-
const result = await this.checkpointAttestationValidator.validate(attestation);
|
|
1770
|
-
if (result.result === 'reject') {
|
|
1771
|
-
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1772
|
-
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1773
|
-
}
|
|
1774
|
-
return result;
|
|
1775
|
-
}
|
|
1776
1815
|
getPeerScore(peerId) {
|
|
1777
1816
|
return this.node.services.pubsub.score.score(peerId.toString());
|
|
1778
1817
|
}
|
|
@@ -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"}
|
|
@@ -5,6 +5,7 @@ export class PeerManagerMetrics {
|
|
|
5
5
|
sentGoodbyes;
|
|
6
6
|
receivedGoodbyes;
|
|
7
7
|
peerCount;
|
|
8
|
+
healthyPeerCount;
|
|
8
9
|
lowScoreDisconnects;
|
|
9
10
|
peerConnectionDuration;
|
|
10
11
|
peerConnectedAt;
|
|
@@ -27,6 +28,7 @@ export class PeerManagerMetrics {
|
|
|
27
28
|
this.sentGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_SENT, goodbyeReasonAttrs);
|
|
28
29
|
this.receivedGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_RECEIVED, goodbyeReasonAttrs);
|
|
29
30
|
this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
|
|
31
|
+
this.healthyPeerCount = meter.createGauge(Metrics.PEER_MANAGER_HEALTHY_PEER_COUNT);
|
|
30
32
|
this.lowScoreDisconnects = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
|
|
31
33
|
[Attributes.P2P_PEER_SCORE_STATE]: [
|
|
32
34
|
'Banned',
|
|
@@ -48,6 +50,9 @@ export class PeerManagerMetrics {
|
|
|
48
50
|
recordPeerCount(count) {
|
|
49
51
|
this.peerCount.record(count);
|
|
50
52
|
}
|
|
53
|
+
recordHealthyPeerCount(count) {
|
|
54
|
+
this.healthyPeerCount.record(count);
|
|
55
|
+
}
|
|
51
56
|
recordLowScoreDisconnect(scoreState) {
|
|
52
57
|
this.lowScoreDisconnects.add(1, {
|
|
53
58
|
[Attributes.P2P_PEER_SCORE_STATE]: scoreState
|
|
@@ -60,6 +65,7 @@ export class PeerManagerMetrics {
|
|
|
60
65
|
const connectedAt = this.peerConnectedAt.get(id.toString());
|
|
61
66
|
if (connectedAt) {
|
|
62
67
|
this.peerConnectionDuration.record(Date.now() - connectedAt);
|
|
68
|
+
this.peerConnectedAt.delete(id.toString());
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
}
|