@aztec/p2p 0.0.1-commit.358457c → 0.0.1-commit.3750d92a7
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 +5 -6
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +30 -16
- package/dest/client/interface.d.ts +12 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +6 -5
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +47 -39
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +18 -8
- package/dest/config.d.ts +125 -100
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +92 -33
- 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/fee_payer_balance_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
- 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/invalid_txs_after_reorg_rule.js +2 -2
- 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/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- 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 +40 -11
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +75 -19
- 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 -44
- 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 +60 -28
- 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/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 +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +14 -8
- 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 +19 -30
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +171 -135
- 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 +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/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 +5 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +1 -2
- package/dest/test-helpers/mock-pubsub.d.ts +12 -5
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +37 -12
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +3 -4
- 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 +73 -21
- 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 +51 -27
- package/src/client/interface.ts +12 -10
- package/src/client/p2p_client.ts +52 -51
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +20 -11
- package/src/config.ts +137 -35
- 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/fee_payer_balance_pre_add_rule.ts +3 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- 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/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +110 -22
- 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 +68 -26
- 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/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 +14 -7
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/libp2p_service.ts +169 -150
- 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 +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/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 -3
- package/src/test-helpers/mock-pubsub.ts +34 -11
- package/src/test-helpers/reqresp-nodes.ts +5 -8
- package/src/test-helpers/testbench-utils.ts +30 -3
- package/src/testbench/p2p_client_testbench_worker.ts +74 -21
- 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,
|
|
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,17 +431,10 @@ _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.
|
|
441
437
|
*/ export class LibP2PService extends WithTracer {
|
|
442
|
-
clientType;
|
|
443
438
|
config;
|
|
444
439
|
node;
|
|
445
440
|
peerDiscoveryService;
|
|
@@ -486,16 +481,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
486
481
|
_dec6,
|
|
487
482
|
2,
|
|
488
483
|
"validateRequestedTxs"
|
|
489
|
-
],
|
|
490
|
-
[
|
|
491
|
-
_dec7,
|
|
492
|
-
2,
|
|
493
|
-
"validateRequestedBlock"
|
|
494
|
-
],
|
|
495
|
-
[
|
|
496
|
-
_dec8,
|
|
497
|
-
2,
|
|
498
|
-
"validateCheckpointAttestation"
|
|
499
484
|
]
|
|
500
485
|
], []));
|
|
501
486
|
}
|
|
@@ -519,13 +504,18 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
519
504
|
* Callback for when a checkpoint proposal is received from a peer.
|
|
520
505
|
* @param checkpoint - The checkpoint proposal received from the peer.
|
|
521
506
|
* @returns The attestations for the checkpoint, if any.
|
|
522
|
-
*/
|
|
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;
|
|
523
513
|
gossipSubEventHandler;
|
|
524
514
|
instrumentation;
|
|
525
515
|
telemetry;
|
|
526
516
|
logger;
|
|
527
|
-
constructor(
|
|
528
|
-
super(telemetry, 'LibP2PService'), this.
|
|
517
|
+
constructor(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
|
|
518
|
+
super(telemetry, 'LibP2PService'), this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.epochCache = epochCache, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.msgIdSeenValidators = (_initProto(this), {}), this.protocolVersion = '', this.topicStrings = {};
|
|
529
519
|
this.telemetry = telemetry;
|
|
530
520
|
// Create child logger with fisherman prefix if in fisherman mode
|
|
531
521
|
this.logger = config.fishermanMode ? logger.createChild('[FISHERMAN]') : logger;
|
|
@@ -541,22 +531,30 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
541
531
|
this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
|
|
542
532
|
this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
|
|
543
533
|
this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
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
|
|
549
546
|
});
|
|
550
|
-
this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
|
|
551
547
|
this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
|
|
552
548
|
this.blockReceivedCallback = async (block)=>{
|
|
553
|
-
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.`, {
|
|
554
550
|
p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
|
|
555
551
|
});
|
|
556
|
-
return
|
|
552
|
+
return true;
|
|
553
|
+
};
|
|
554
|
+
this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
|
|
555
|
+
throw new CheckpointProposalReceivedCallbackNotRegisteredError();
|
|
557
556
|
};
|
|
558
|
-
this.
|
|
559
|
-
this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
|
|
557
|
+
this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
|
|
560
558
|
return Promise.resolve(undefined);
|
|
561
559
|
};
|
|
562
560
|
}
|
|
@@ -568,7 +566,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
568
566
|
* @param config - The configuration to use when creating the service.
|
|
569
567
|
* @param txPool - The transaction pool to be accessed by the service.
|
|
570
568
|
* @returns The new service.
|
|
571
|
-
*/ static async new(
|
|
569
|
+
*/ static async new(config, peerId, deps) {
|
|
572
570
|
const { worldStateSynchronizer, epochCache, l2BlockSource, mempools, proofVerifier, peerStore, telemetry, logger, packageVersion } = deps;
|
|
573
571
|
const { p2pPort, maxPeerCount, listenAddress } = config;
|
|
574
572
|
const bindAddrTcp = convertToMultiaddr(listenAddress, p2pPort, 'tcp');
|
|
@@ -609,9 +607,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
609
607
|
const l1Constants = epochCache.getL1Constants();
|
|
610
608
|
const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
|
|
611
609
|
slotDurationMs: l1Constants.slotDuration * 1000,
|
|
610
|
+
ethereumSlotDuration: l1Constants.ethereumSlotDuration,
|
|
612
611
|
heartbeatIntervalMs: config.gossipsubInterval,
|
|
613
612
|
targetCommitteeSize: l1Constants.targetCommitteeSize,
|
|
614
613
|
blockDurationMs: config.blockDurationMs,
|
|
614
|
+
l1PublishingTime: config.l1PublishingTime,
|
|
615
|
+
p2pPropagationTime: config.attestationPropagationTime,
|
|
615
616
|
expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot
|
|
616
617
|
});
|
|
617
618
|
const node = await createLibp2p({
|
|
@@ -726,6 +727,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
726
727
|
const peerScoring = new PeerScoring(config, telemetry);
|
|
727
728
|
const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
|
|
728
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));
|
|
729
732
|
// Configure application-specific scoring for gossipsub.
|
|
730
733
|
// The weight scales app score to align with gossipsub thresholds:
|
|
731
734
|
// - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
|
|
@@ -733,7 +736,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
733
736
|
// Note: positive topic scores can offset penalties, so alignment is best-effort.
|
|
734
737
|
node.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
|
|
735
738
|
node.services.pubsub.score.params.appSpecificScore = (peerId)=>peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
736
|
-
return new LibP2PService(
|
|
739
|
+
return new LibP2PService(config, node, peerDiscoveryService, reqresp, peerManager, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
|
|
737
740
|
}
|
|
738
741
|
/**
|
|
739
742
|
* Starts the LibP2P service.
|
|
@@ -752,13 +755,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
752
755
|
// Create request response protocol handlers
|
|
753
756
|
const txHandler = reqRespTxHandler(this.mempools);
|
|
754
757
|
const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
|
|
755
|
-
const blockHandler = reqRespBlockHandler(this.archiver);
|
|
756
758
|
const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
|
|
757
759
|
const requestResponseHandlers = {
|
|
758
760
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
759
761
|
[ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
|
|
760
|
-
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
761
|
-
[ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
|
|
762
|
+
[ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
|
|
762
763
|
};
|
|
763
764
|
if (!this.config.disableTransactions) {
|
|
764
765
|
const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.archiver, this.mempools.txPool);
|
|
@@ -771,14 +772,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
771
772
|
const reqrespSubProtocolValidators = {
|
|
772
773
|
...DEFAULT_SUB_PROTOCOL_VALIDATORS,
|
|
773
774
|
[ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
|
|
774
|
-
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
775
|
-
[ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
|
|
775
|
+
[ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
|
|
776
776
|
};
|
|
777
777
|
await this.peerManager.initializePeers();
|
|
778
778
|
await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
|
|
779
779
|
await this.node.start();
|
|
780
780
|
// Subscribe to standard GossipSub topics by default
|
|
781
|
-
for (const topic of
|
|
781
|
+
for (const topic of getTopicsForConfig(this.config.disableTransactions)){
|
|
782
782
|
this.subscribeToTopic(this.topicStrings[topic]);
|
|
783
783
|
}
|
|
784
784
|
// add GossipSub listener
|
|
@@ -860,8 +860,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
860
860
|
registerBlockReceivedCallback(callback) {
|
|
861
861
|
this.blockReceivedCallback = callback;
|
|
862
862
|
}
|
|
863
|
-
|
|
864
|
-
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);
|
|
865
871
|
}
|
|
866
872
|
/**
|
|
867
873
|
* Registers a callback to be invoked when a duplicate proposal is detected.
|
|
@@ -927,6 +933,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
927
933
|
if (!validator || !validator.addMessage(msgId)) {
|
|
928
934
|
this.instrumentation.incMessagePrevalidationStatus(false, topicType);
|
|
929
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
|
+
}
|
|
930
942
|
return {
|
|
931
943
|
result: false,
|
|
932
944
|
topicType
|
|
@@ -987,9 +999,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
987
999
|
if (msg.topic === this.topicStrings[TopicType.tx]) {
|
|
988
1000
|
await this.handleGossipedTx(p2pMessage.payload, msgId, source);
|
|
989
1001
|
} else if (msg.topic === this.topicStrings[TopicType.checkpoint_attestation]) {
|
|
990
|
-
|
|
991
|
-
await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
|
|
992
|
-
}
|
|
1002
|
+
await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
|
|
993
1003
|
} else if (msg.topic === this.topicStrings[TopicType.block_proposal]) {
|
|
994
1004
|
await this.processBlockFromPeer(p2pMessage.payload, msgId, source);
|
|
995
1005
|
} else if (msg.topic === this.topicStrings[TopicType.checkpoint_proposal]) {
|
|
@@ -1034,29 +1044,67 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1034
1044
|
return;
|
|
1035
1045
|
}
|
|
1036
1046
|
async validateReceivedMessage(validationFunc, msgId, source, topicType) {
|
|
1047
|
+
// Default to reject result with a penalty if validation function throws an error
|
|
1037
1048
|
let resultAndObj = {
|
|
1038
|
-
result: TopicValidatorResult.Reject
|
|
1049
|
+
result: TopicValidatorResult.Reject,
|
|
1050
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
1039
1051
|
};
|
|
1040
1052
|
const timer = new Timer();
|
|
1041
1053
|
try {
|
|
1042
1054
|
resultAndObj = await validationFunc();
|
|
1043
1055
|
} catch (err) {
|
|
1044
|
-
this.
|
|
1045
|
-
this.logger.error(`Error deserializing and validating gossipsub message`, err, {
|
|
1056
|
+
this.logger.error(`Error validating gossipsub message`, err, {
|
|
1046
1057
|
msgId,
|
|
1047
1058
|
source: source.toString(),
|
|
1048
1059
|
topicType
|
|
1049
1060
|
});
|
|
1050
1061
|
}
|
|
1051
1062
|
if (resultAndObj.result === TopicValidatorResult.Accept) {
|
|
1063
|
+
this.logger.debug(`Message ${topicType} accepted by validator`, {
|
|
1064
|
+
msgId,
|
|
1065
|
+
source: source.toString(),
|
|
1066
|
+
topicType
|
|
1067
|
+
});
|
|
1052
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
|
+
});
|
|
1053
1083
|
}
|
|
1054
1084
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
|
|
1055
1085
|
return resultAndObj;
|
|
1056
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
|
+
}
|
|
1057
1099
|
async handleGossipedTx(payloadData, msgId, source) {
|
|
1058
1100
|
const validationFunc = async ()=>{
|
|
1059
|
-
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
|
+
}
|
|
1060
1108
|
const currentBlockNumber = await this.archiver.getBlockNumber();
|
|
1061
1109
|
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
1062
1110
|
// Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
|
|
@@ -1072,14 +1120,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1072
1120
|
const txBlockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1073
1121
|
severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
|
|
1074
1122
|
}
|
|
1075
|
-
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
|
+
});
|
|
1076
1128
|
return {
|
|
1077
|
-
result: TopicValidatorResult.Reject
|
|
1129
|
+
result: TopicValidatorResult.Reject,
|
|
1130
|
+
severity
|
|
1078
1131
|
};
|
|
1079
1132
|
}
|
|
1080
1133
|
// Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
|
|
1081
1134
|
const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
|
|
1082
1135
|
if (canAdd === 'ignored') {
|
|
1136
|
+
this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
|
|
1137
|
+
source: source.toString()
|
|
1138
|
+
});
|
|
1083
1139
|
return {
|
|
1084
1140
|
result: TopicValidatorResult.Ignore,
|
|
1085
1141
|
obj: tx
|
|
@@ -1089,10 +1145,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1089
1145
|
const secondStageValidators = this.createSecondStageMessageValidators();
|
|
1090
1146
|
const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
|
|
1091
1147
|
if (!secondStageOutcome.allPassed) {
|
|
1092
|
-
const { severity } = secondStageOutcome.failure;
|
|
1093
|
-
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
|
+
});
|
|
1094
1154
|
return {
|
|
1095
|
-
result: TopicValidatorResult.Reject
|
|
1155
|
+
result: TopicValidatorResult.Reject,
|
|
1156
|
+
severity
|
|
1096
1157
|
};
|
|
1097
1158
|
}
|
|
1098
1159
|
// Pool add: persist the tx
|
|
@@ -1104,7 +1165,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1104
1165
|
});
|
|
1105
1166
|
const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
|
|
1106
1167
|
const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
|
|
1107
|
-
this.logger.
|
|
1168
|
+
this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
|
|
1108
1169
|
wasAccepted,
|
|
1109
1170
|
wasIgnored,
|
|
1110
1171
|
[Attributes.P2P_ID]: source.toString()
|
|
@@ -1120,8 +1181,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1120
1181
|
obj: tx
|
|
1121
1182
|
};
|
|
1122
1183
|
} else {
|
|
1184
|
+
this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
|
|
1185
|
+
source: source.toString(),
|
|
1186
|
+
txHash: txHash.toString()
|
|
1187
|
+
});
|
|
1123
1188
|
return {
|
|
1124
|
-
result: TopicValidatorResult.Reject
|
|
1189
|
+
result: TopicValidatorResult.Reject,
|
|
1190
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1125
1191
|
};
|
|
1126
1192
|
}
|
|
1127
1193
|
};
|
|
@@ -1142,7 +1208,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1142
1208
|
* Process a checkpoint attestation from a peer.
|
|
1143
1209
|
* Validates the attestation and adds it to the pool.
|
|
1144
1210
|
*/ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
|
|
1145
|
-
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);
|
|
1146
1221
|
if (result !== TopicValidatorResult.Accept || !attestation) {
|
|
1147
1222
|
return;
|
|
1148
1223
|
}
|
|
@@ -1157,9 +1232,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1157
1232
|
const validationResult = await this.checkpointAttestationValidator.validate(attestation);
|
|
1158
1233
|
if (validationResult.result === 'reject') {
|
|
1159
1234
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1160
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1161
1235
|
return {
|
|
1162
|
-
result: TopicValidatorResult.Reject
|
|
1236
|
+
result: TopicValidatorResult.Reject,
|
|
1237
|
+
severity: validationResult.severity
|
|
1163
1238
|
};
|
|
1164
1239
|
}
|
|
1165
1240
|
if (validationResult.result === 'ignore') {
|
|
@@ -1186,9 +1261,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1186
1261
|
obj: attestation
|
|
1187
1262
|
};
|
|
1188
1263
|
}
|
|
1189
|
-
// Could not add (cap reached for signer),
|
|
1264
|
+
// Could not add (cap reached for signer), penalize and do not re-broadcast
|
|
1190
1265
|
if (!added) {
|
|
1191
|
-
this.logger.warn(`
|
|
1266
|
+
this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
|
|
1192
1267
|
slot: slot.toString(),
|
|
1193
1268
|
archive: attestation.archive.toString(),
|
|
1194
1269
|
source: peerId.toString(),
|
|
@@ -1196,8 +1271,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1196
1271
|
count
|
|
1197
1272
|
});
|
|
1198
1273
|
return {
|
|
1199
|
-
result: TopicValidatorResult.
|
|
1200
|
-
|
|
1274
|
+
result: TopicValidatorResult.Reject,
|
|
1275
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1201
1276
|
};
|
|
1202
1277
|
}
|
|
1203
1278
|
// Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
|
|
@@ -1235,9 +1310,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1235
1310
|
const validationResult = await this.blockProposalValidator.validate(block);
|
|
1236
1311
|
if (validationResult.result === 'reject') {
|
|
1237
1312
|
this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
|
|
1238
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1239
1313
|
return {
|
|
1240
|
-
result: TopicValidatorResult.Reject
|
|
1314
|
+
result: TopicValidatorResult.Reject,
|
|
1315
|
+
severity: validationResult.severity
|
|
1241
1316
|
};
|
|
1242
1317
|
}
|
|
1243
1318
|
if (validationResult.result === 'ignore') {
|
|
@@ -1267,7 +1342,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1267
1342
|
}
|
|
1268
1343
|
// Too many blocks received for this slot and index, penalize peer and do not re-broadcast
|
|
1269
1344
|
if (!added) {
|
|
1270
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1271
1345
|
this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
|
|
1272
1346
|
...block.toBlockInfo(),
|
|
1273
1347
|
indexWithinCheckpoint: block.indexWithinCheckpoint,
|
|
@@ -1279,7 +1353,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1279
1353
|
result: TopicValidatorResult.Reject,
|
|
1280
1354
|
metadata: {
|
|
1281
1355
|
isEquivocated
|
|
1282
|
-
}
|
|
1356
|
+
},
|
|
1357
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1283
1358
|
};
|
|
1284
1359
|
}
|
|
1285
1360
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1328,7 +1403,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1328
1403
|
// Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
|
|
1329
1404
|
const isValid = await this.blockReceivedCallback(block, sender);
|
|
1330
1405
|
if (!isValid) {
|
|
1331
|
-
this.logger.
|
|
1406
|
+
this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
|
|
1332
1407
|
}
|
|
1333
1408
|
}
|
|
1334
1409
|
/**
|
|
@@ -1353,9 +1428,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1353
1428
|
const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
|
|
1354
1429
|
if (validationResult.result === 'reject') {
|
|
1355
1430
|
this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
|
|
1356
|
-
this.peerManager.penalizePeer(peerId, validationResult.severity);
|
|
1357
1431
|
return {
|
|
1358
|
-
result: TopicValidatorResult.Reject
|
|
1432
|
+
result: TopicValidatorResult.Reject,
|
|
1433
|
+
severity: validationResult.severity
|
|
1359
1434
|
};
|
|
1360
1435
|
}
|
|
1361
1436
|
if (validationResult.result === 'ignore') {
|
|
@@ -1372,18 +1447,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1372
1447
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1373
1448
|
[Attributes.P2P_ID]: peerId.toString()
|
|
1374
1449
|
});
|
|
1375
|
-
const
|
|
1376
|
-
|
|
1450
|
+
const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
|
|
1451
|
+
const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
|
|
1452
|
+
if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
|
|
1377
1453
|
this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
|
|
1378
1454
|
[Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
|
|
1379
1455
|
[Attributes.P2P_ID]: peerId.toString(),
|
|
1380
1456
|
isEquivocated,
|
|
1381
|
-
result
|
|
1457
|
+
result: blockProposalResult.result
|
|
1382
1458
|
});
|
|
1383
1459
|
return {
|
|
1384
|
-
result: TopicValidatorResult.Reject
|
|
1460
|
+
result: TopicValidatorResult.Reject,
|
|
1461
|
+
severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
|
|
1385
1462
|
};
|
|
1386
|
-
} else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1463
|
+
} else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
|
|
1387
1464
|
processBlock = true;
|
|
1388
1465
|
}
|
|
1389
1466
|
}
|
|
@@ -1410,7 +1487,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1410
1487
|
// Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
|
|
1411
1488
|
// Note: We still return the checkpoint obj so the lastBlock can be processed if valid
|
|
1412
1489
|
if (!added) {
|
|
1413
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
1414
1490
|
this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
|
|
1415
1491
|
...checkpoint.toCheckpointInfo(),
|
|
1416
1492
|
count,
|
|
@@ -1422,7 +1498,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1422
1498
|
metadata: {
|
|
1423
1499
|
isEquivocated,
|
|
1424
1500
|
processBlock
|
|
1425
|
-
}
|
|
1501
|
+
},
|
|
1502
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
1426
1503
|
};
|
|
1427
1504
|
}
|
|
1428
1505
|
// If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
|
|
@@ -1472,9 +1549,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1472
1549
|
archive: checkpoint.archive.toString(),
|
|
1473
1550
|
source: sender.toString()
|
|
1474
1551
|
});
|
|
1552
|
+
await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
|
|
1475
1553
|
// Call the checkpoint received callback with the core version (without lastBlock)
|
|
1476
1554
|
// to validate and potentially generate attestations
|
|
1477
|
-
const attestations = await this.
|
|
1555
|
+
const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
|
|
1478
1556
|
if (attestations && attestations.length > 0) {
|
|
1479
1557
|
// If the callback returned attestations, add them to the pool and propagate them
|
|
1480
1558
|
await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
@@ -1594,45 +1672,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1594
1672
|
return false;
|
|
1595
1673
|
}
|
|
1596
1674
|
}
|
|
1597
|
-
/**
|
|
1598
|
-
* Validates a BLOCK response.
|
|
1599
|
-
*
|
|
1600
|
-
* If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
|
|
1601
|
-
* Penalizes on block number mismatch or hash mismatch.
|
|
1602
|
-
*
|
|
1603
|
-
* @param requestedBlockNumber - The requested block number.
|
|
1604
|
-
* @param responseBlock - The block returned by the peer.
|
|
1605
|
-
* @param peerId - The peer that returned the block.
|
|
1606
|
-
* @returns True if the response is valid, false otherwise.
|
|
1607
|
-
*/ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
|
|
1608
|
-
try {
|
|
1609
|
-
const reqNum = Number(requestedBlockNumber.toString());
|
|
1610
|
-
if (responseBlock.number !== reqNum) {
|
|
1611
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
1612
|
-
return false;
|
|
1613
|
-
}
|
|
1614
|
-
const local = await this.archiver.getBlock(BlockNumber(reqNum));
|
|
1615
|
-
if (!local) {
|
|
1616
|
-
// We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
|
|
1617
|
-
// TODO: Consider extending this validator to accept an expected hash or
|
|
1618
|
-
// performing quorum-based checks when using P2P syncing prior to L1 sync.
|
|
1619
|
-
this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
|
|
1620
|
-
return false;
|
|
1621
|
-
}
|
|
1622
|
-
const [localHash, respHash] = await Promise.all([
|
|
1623
|
-
local.hash(),
|
|
1624
|
-
responseBlock.hash()
|
|
1625
|
-
]);
|
|
1626
|
-
if (!localHash.equals(respHash)) {
|
|
1627
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
|
|
1628
|
-
return false;
|
|
1629
|
-
}
|
|
1630
|
-
return true;
|
|
1631
|
-
} catch (e) {
|
|
1632
|
-
this.logger.warn(`Error validating requested block`, e);
|
|
1633
|
-
return false;
|
|
1634
|
-
}
|
|
1635
|
-
}
|
|
1636
1675
|
async validateRequestedTx(tx, peerId, txValidator, requested) {
|
|
1637
1676
|
const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
|
|
1638
1677
|
if (requested && !requested.has(tx.getTxHash().toString())) {
|
|
@@ -1692,9 +1731,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1692
1731
|
}
|
|
1693
1732
|
/** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
|
|
1694
1733
|
const gasFees = await this.getGasFees(currentBlockNumber);
|
|
1695
|
-
const allowedInSetup =
|
|
1734
|
+
const allowedInSetup = [
|
|
1735
|
+
...await getDefaultAllowedSetupFunctions(),
|
|
1736
|
+
...this.config.txPublicSetupAllowListExtend ?? []
|
|
1737
|
+
];
|
|
1696
1738
|
const blockNumber = BlockNumber(currentBlockNumber + 1);
|
|
1697
|
-
|
|
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
|
+
});
|
|
1698
1745
|
}
|
|
1699
1746
|
/** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
|
|
1700
1747
|
return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
|
|
@@ -1715,8 +1762,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1715
1762
|
});
|
|
1716
1763
|
// A promise that resolves when all validations have been run
|
|
1717
1764
|
const allValidations = await Promise.all(validationPromises);
|
|
1718
|
-
const
|
|
1719
|
-
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));
|
|
1720
1769
|
return {
|
|
1721
1770
|
allPassed: false,
|
|
1722
1771
|
failure: {
|
|
@@ -1763,19 +1812,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
|
|
|
1763
1812
|
}
|
|
1764
1813
|
return PeerErrorSeverity.HighToleranceError;
|
|
1765
1814
|
}
|
|
1766
|
-
/**
|
|
1767
|
-
* Validate a checkpoint attestation.
|
|
1768
|
-
*
|
|
1769
|
-
* @param attestation - The checkpoint attestation to validate.
|
|
1770
|
-
* @returns True if the checkpoint attestation is valid, false otherwise.
|
|
1771
|
-
*/ async validateCheckpointAttestation(peerId, attestation) {
|
|
1772
|
-
const result = await this.checkpointAttestationValidator.validate(attestation);
|
|
1773
|
-
if (result.result === 'reject') {
|
|
1774
|
-
this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
|
|
1775
|
-
this.peerManager.penalizePeer(peerId, result.severity);
|
|
1776
|
-
}
|
|
1777
|
-
return result;
|
|
1778
|
-
}
|
|
1779
1815
|
getPeerScore(peerId) {
|
|
1780
1816
|
return this.node.services.pubsub.score.score(peerId.toString());
|
|
1781
1817
|
}
|