@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +5 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +39 -16
- package/dest/client/interface.d.ts +52 -12
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +36 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +142 -81
- package/dest/config.d.ts +163 -98
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +130 -20
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/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 +101 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +272 -199
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +224 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- 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 +9 -4
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +28 -9
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +10 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +29 -20
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- 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 +5 -4
- 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 +3 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +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_mining_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
- 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/instrumentation.d.ts +11 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +24 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -9
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -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 +46 -16
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -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 +55 -41
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +19 -4
- 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 +86 -32
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +50 -6
- 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 +262 -131
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -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 +21 -32
- 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/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +25 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +55 -16
- 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 +53 -7
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
- package/dest/msg_validators/tx_validator/index.d.ts +4 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +3 -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 +21 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +119 -23
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +18 -16
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +21 -16
- package/dest/services/encoding.d.ts +23 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +32 -16
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- package/dest/services/libp2p/instrumentation.d.ts +6 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +21 -0
- package/dest/services/libp2p/libp2p_service.d.ts +51 -51
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +499 -333
- package/dest/services/peer-manager/peer_manager.d.ts +31 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +125 -25
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +102 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -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 +81 -86
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- 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/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +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 +3 -13
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +73 -215
- package/dest/services/service.d.ts +43 -18
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- 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/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- 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 +13 -8
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- 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/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +33 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +57 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +49 -15
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +104 -41
- package/dest/testbench/worker_client_manager.d.ts +12 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +57 -11
- package/dest/util.d.ts +12 -7
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +17 -17
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +62 -9
- package/src/client/interface.ts +48 -18
- package/src/client/p2p_client.ts +159 -113
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +233 -20
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +327 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +18 -12
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +4 -5
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
- 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/instrumentation.ts +27 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +107 -32
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +291 -137
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
- package/src/msg_validators/tx_validator/README.md +17 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
- 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/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +44 -1
- package/src/msg_validators/tx_validator/factory.ts +66 -9
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
- package/src/msg_validators/tx_validator/index.ts +3 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +26 -40
- package/src/services/encoding.ts +35 -19
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +22 -0
- package/src/services/libp2p/libp2p_service.ts +560 -369
- package/src/services/peer-manager/peer_manager.ts +138 -24
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- 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/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +19 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
- 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 +3 -13
- package/src/services/reqresp/reqresp.ts +84 -259
- package/src/services/service.ts +51 -35
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +10 -8
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +4 -1
- package/src/test-helpers/mock-pubsub.ts +61 -60
- package/src/test-helpers/reqresp-nodes.ts +13 -23
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +63 -28
- package/src/testbench/p2p_client_testbench_worker.ts +111 -57
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +33 -18
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -37
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- 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/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/clock_tolerance.ts +0 -51
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
package/src/client/p2p_client.ts
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
2
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
BlockNumber,
|
|
4
|
+
CheckpointNumber,
|
|
5
|
+
type CheckpointProposalHash,
|
|
6
|
+
SlotNumber,
|
|
7
|
+
} from '@aztec/foundation/branded-types';
|
|
4
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import {
|
|
9
|
+
import { type PromiseWithResolvers, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
6
10
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
7
11
|
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
8
12
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
9
13
|
import {
|
|
14
|
+
type BlockData,
|
|
15
|
+
type BlockHash,
|
|
10
16
|
type CheckpointId,
|
|
11
17
|
type EthAddress,
|
|
18
|
+
EventDrivenL2BlockStream,
|
|
12
19
|
type L2Block,
|
|
13
20
|
type L2BlockId,
|
|
14
21
|
type L2BlockSource,
|
|
15
|
-
L2BlockStream,
|
|
16
22
|
type L2BlockStreamEvent,
|
|
17
|
-
type L2Tips,
|
|
18
23
|
type L2TipsStore,
|
|
24
|
+
type LocalL2Tips,
|
|
19
25
|
} from '@aztec/stdlib/block';
|
|
20
26
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
21
27
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
22
|
-
import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
28
|
+
import { type GetTxByHashOptions, type P2PConnectivity, type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
23
29
|
import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
|
|
24
30
|
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
25
31
|
import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -29,18 +35,15 @@ import type { ENR } from '@nethermindeth/enr';
|
|
|
29
35
|
|
|
30
36
|
import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
|
|
31
37
|
import { TxPoolError } from '../errors/tx-pool.error.js';
|
|
32
|
-
import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
38
|
+
import type { AttestationPoolApi, ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
33
39
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
34
40
|
import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
35
41
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
36
|
-
import {
|
|
37
|
-
ReqRespSubProtocol,
|
|
38
|
-
type ReqRespSubProtocolHandler,
|
|
39
|
-
type ReqRespSubProtocolValidators,
|
|
40
|
-
} from '../services/reqresp/interface.js';
|
|
42
|
+
import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
|
|
41
43
|
import type {
|
|
42
44
|
DuplicateAttestationInfo,
|
|
43
45
|
DuplicateProposalInfo,
|
|
46
|
+
OversizedProposalInfo,
|
|
44
47
|
P2PBlockReceivedCallback,
|
|
45
48
|
P2PCheckpointReceivedCallback,
|
|
46
49
|
P2PService,
|
|
@@ -59,7 +62,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
59
62
|
|
|
60
63
|
private currentState = P2PClientState.IDLE;
|
|
61
64
|
private syncPromise = Promise.resolve();
|
|
62
|
-
private
|
|
65
|
+
private syncResolvers?: PromiseWithResolvers<void> = undefined;
|
|
63
66
|
private latestBlockNumberAtStart = -1;
|
|
64
67
|
private provenBlockNumberAtStart = -1;
|
|
65
68
|
private finalizedBlockNumberAtStart = -1;
|
|
@@ -72,7 +75,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
72
75
|
|
|
73
76
|
private config: P2PConfig;
|
|
74
77
|
|
|
75
|
-
private blockStream:
|
|
78
|
+
private blockStream: EventDrivenL2BlockStream | undefined;
|
|
76
79
|
|
|
77
80
|
private txProvider: TxProvider;
|
|
78
81
|
|
|
@@ -81,9 +84,6 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
81
84
|
/** Tracks the last slot for which we called prepareForSlot */
|
|
82
85
|
private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
|
|
83
86
|
|
|
84
|
-
/** Polls for slot changes and calls prepareForSlot on the tx pool */
|
|
85
|
-
private slotMonitor: RunningPromise | undefined;
|
|
86
|
-
|
|
87
87
|
constructor(
|
|
88
88
|
private store: AztecAsyncKVStore,
|
|
89
89
|
private l2BlockSource: L2BlockSource & ContractDataSource,
|
|
@@ -96,6 +96,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
96
96
|
private _dateProvider: DateProvider = new DateProvider(),
|
|
97
97
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
98
98
|
private log = createLogger('p2p'),
|
|
99
|
+
initialBlockHash: BlockHash,
|
|
99
100
|
) {
|
|
100
101
|
super(telemetry, 'P2PClient');
|
|
101
102
|
|
|
@@ -111,28 +112,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
111
112
|
this.telemetry,
|
|
112
113
|
);
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
116
|
-
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
117
|
-
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
118
|
-
// validator-client code into here so we can validate a proposal is reasonable.
|
|
119
|
-
this.registerBlockProposalHandler(async (block, sender) => {
|
|
120
|
-
this.log.debug(`Received block proposal from ${sender.toString()}`);
|
|
121
|
-
// TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
|
|
122
|
-
const constants = this.txCollection.getConstants();
|
|
123
|
-
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
124
|
-
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
125
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
126
|
-
if (!parentBlock) {
|
|
127
|
-
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
131
|
-
await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
|
|
132
|
-
return true;
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
115
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
|
|
136
116
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
137
117
|
}
|
|
138
118
|
|
|
@@ -157,6 +137,10 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
157
137
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
158
138
|
}
|
|
159
139
|
|
|
140
|
+
public getP2PConnectivity(): Promise<P2PConnectivity> {
|
|
141
|
+
return Promise.resolve(this.p2pService.getP2PConnectivity());
|
|
142
|
+
}
|
|
143
|
+
|
|
160
144
|
public getGossipMeshPeerCount(topicType: TopicType): Promise<number> {
|
|
161
145
|
return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
|
|
162
146
|
}
|
|
@@ -170,7 +154,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
170
154
|
this.p2pService.updateConfig(config);
|
|
171
155
|
}
|
|
172
156
|
|
|
173
|
-
public getL2Tips(): Promise<
|
|
157
|
+
public getL2Tips(): Promise<LocalL2Tips> {
|
|
174
158
|
return this.l2Tips.getL2Tips();
|
|
175
159
|
}
|
|
176
160
|
|
|
@@ -186,7 +170,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
186
170
|
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
187
171
|
const limit = event.block.number - from + 1;
|
|
188
172
|
if (limit > 0) {
|
|
189
|
-
const oldBlocks = await this.l2BlockSource.
|
|
173
|
+
const oldBlocks = await this.l2BlockSource.getBlocksData({ from, limit });
|
|
190
174
|
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
191
175
|
}
|
|
192
176
|
break;
|
|
@@ -196,10 +180,12 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
196
180
|
break;
|
|
197
181
|
case 'chain-pruned':
|
|
198
182
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
199
|
-
await this.handlePruneL2Blocks(event.block, event.checkpoint);
|
|
183
|
+
await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
|
|
200
184
|
break;
|
|
201
185
|
case 'chain-checkpointed':
|
|
202
186
|
break;
|
|
187
|
+
case 'chain-proposed':
|
|
188
|
+
break;
|
|
203
189
|
default: {
|
|
204
190
|
const _: never = event;
|
|
205
191
|
break;
|
|
@@ -258,9 +244,8 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
258
244
|
// this gets resolved on `startServiceIfSynched`
|
|
259
245
|
this.initBlockStream();
|
|
260
246
|
this.setCurrentState(P2PClientState.SYNCHING);
|
|
261
|
-
this.
|
|
262
|
-
|
|
263
|
-
});
|
|
247
|
+
this.syncResolvers = promiseWithResolvers<void>();
|
|
248
|
+
this.syncPromise = this.syncResolvers.promise;
|
|
264
249
|
this.log.info(`Initiating p2p sync from ${syncedLatestBlock}`, {
|
|
265
250
|
syncedLatestBlock,
|
|
266
251
|
syncedProvenBlock,
|
|
@@ -279,33 +264,24 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
279
264
|
});
|
|
280
265
|
}
|
|
281
266
|
|
|
282
|
-
|
|
283
|
-
|
|
267
|
+
// Should never happen: all branches above call initBlockStream()
|
|
268
|
+
if (!this.blockStream) {
|
|
269
|
+
throw new Error('Block stream not initialized');
|
|
270
|
+
}
|
|
271
|
+
this.blockStream.start();
|
|
284
272
|
this.txFileStore?.start();
|
|
285
273
|
|
|
286
|
-
// Start slot monitor to call prepareForSlot when the slot changes
|
|
287
|
-
this.slotMonitor = new RunningPromise(
|
|
288
|
-
() => this.maybeCallPrepareForSlot(),
|
|
289
|
-
this.log,
|
|
290
|
-
this.config.slotCheckIntervalMS,
|
|
291
|
-
);
|
|
292
|
-
this.slotMonitor.start();
|
|
293
|
-
|
|
294
274
|
return this.syncPromise;
|
|
295
275
|
}
|
|
296
276
|
|
|
297
|
-
addReqRespSubProtocol(
|
|
298
|
-
subProtocol
|
|
299
|
-
handler: ReqRespSubProtocolHandler,
|
|
300
|
-
validator: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
301
|
-
): Promise<void> {
|
|
302
|
-
return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
|
|
277
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
278
|
+
return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
|
|
303
279
|
}
|
|
304
280
|
|
|
305
281
|
private initBlockStream(startingBlock?: BlockNumber) {
|
|
306
282
|
if (!this.blockStream) {
|
|
307
283
|
const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
|
|
308
|
-
this.blockStream = new
|
|
284
|
+
this.blockStream = new EventDrivenL2BlockStream(
|
|
309
285
|
this.l2BlockSource,
|
|
310
286
|
this,
|
|
311
287
|
this,
|
|
@@ -321,8 +297,6 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
321
297
|
*/
|
|
322
298
|
public async stop() {
|
|
323
299
|
this.log.debug('Stopping p2p client...');
|
|
324
|
-
await this.slotMonitor?.stop();
|
|
325
|
-
this.log.debug('Stopped slot monitor');
|
|
326
300
|
await tryStop(this.txCollection);
|
|
327
301
|
this.log.debug('Stopped tx collection service');
|
|
328
302
|
await this.txFileStore?.stop();
|
|
@@ -341,7 +315,11 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
341
315
|
/** Triggers a sync to the archiver. Used for testing. */
|
|
342
316
|
public async sync() {
|
|
343
317
|
this.initBlockStream();
|
|
344
|
-
|
|
318
|
+
// Should never happen: initBlockStream() creates blockStream if absent
|
|
319
|
+
if (!this.blockStream) {
|
|
320
|
+
throw new Error('Block stream not initialized');
|
|
321
|
+
}
|
|
322
|
+
await this.blockStream.sync();
|
|
345
323
|
}
|
|
346
324
|
|
|
347
325
|
@trackSpan('p2pClient.broadcastProposal', async proposal => ({
|
|
@@ -379,6 +357,19 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
379
357
|
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
380
358
|
await this.attestationPool.tryAddBlockProposal(blockProposal);
|
|
381
359
|
}
|
|
360
|
+
const checkpointCore = proposal.toCore();
|
|
361
|
+
const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
|
|
362
|
+
if (count > 1) {
|
|
363
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
364
|
+
this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
|
|
365
|
+
slot: proposal.slotNumber,
|
|
366
|
+
archive: proposal.archive.toString(),
|
|
367
|
+
count,
|
|
368
|
+
});
|
|
369
|
+
} else {
|
|
370
|
+
throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
382
373
|
return this.p2pService.propagate(proposal);
|
|
383
374
|
}
|
|
384
375
|
|
|
@@ -389,10 +380,10 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
389
380
|
|
|
390
381
|
public async getCheckpointAttestationsForSlot(
|
|
391
382
|
slot: SlotNumber,
|
|
392
|
-
|
|
383
|
+
proposalPayloadHash?: CheckpointProposalHash,
|
|
393
384
|
): Promise<CheckpointAttestation[]> {
|
|
394
|
-
return await (
|
|
395
|
-
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot,
|
|
385
|
+
return await (proposalPayloadHash
|
|
386
|
+
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash)
|
|
396
387
|
: this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
397
388
|
}
|
|
398
389
|
|
|
@@ -400,29 +391,49 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
400
391
|
return this.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
401
392
|
}
|
|
402
393
|
|
|
394
|
+
public getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot> {
|
|
395
|
+
return this.attestationPool.getProposalsForSlot(slot);
|
|
396
|
+
}
|
|
397
|
+
|
|
403
398
|
public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
|
|
404
399
|
return this.attestationPool.hasBlockProposalsForSlot(slot);
|
|
405
400
|
}
|
|
406
401
|
|
|
402
|
+
public hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
|
|
403
|
+
return this.attestationPool.hasCheckpointProposalForSlot(slot);
|
|
404
|
+
}
|
|
405
|
+
|
|
407
406
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
408
407
|
// ^ This pattern is not my favorite (md)
|
|
409
408
|
public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
|
|
410
409
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
411
410
|
}
|
|
412
411
|
|
|
413
|
-
public
|
|
414
|
-
this.p2pService.
|
|
412
|
+
public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
413
|
+
this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
417
|
+
this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
|
|
415
418
|
}
|
|
416
419
|
|
|
417
420
|
public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
|
|
418
421
|
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
419
422
|
}
|
|
420
423
|
|
|
424
|
+
public registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void {
|
|
425
|
+
this.p2pService.registerOversizedProposalCallback(callback);
|
|
426
|
+
}
|
|
427
|
+
|
|
421
428
|
public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
|
|
422
429
|
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
423
430
|
}
|
|
424
431
|
|
|
425
|
-
public
|
|
432
|
+
public registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void {
|
|
433
|
+
this.p2pService.registerCheckpointAttestationCallback(callback);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
public async getPendingTxs(limit?: number, after?: TxHash, options?: GetTxByHashOptions): Promise<Tx[]> {
|
|
426
437
|
if (limit !== undefined && limit <= 0) {
|
|
427
438
|
throw new TypeError('limit must be greater than 0');
|
|
428
439
|
}
|
|
@@ -441,7 +452,9 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
441
452
|
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
442
453
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
443
454
|
|
|
444
|
-
|
|
455
|
+
// This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
|
|
456
|
+
const includeProof = !!options?.includeProof;
|
|
457
|
+
const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash, { includeProof })));
|
|
445
458
|
return maybeTxs.filter((tx): tx is Tx => !!tx);
|
|
446
459
|
}
|
|
447
460
|
|
|
@@ -449,18 +462,22 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
449
462
|
return this.txPool.getPendingTxCount();
|
|
450
463
|
}
|
|
451
464
|
|
|
452
|
-
public
|
|
465
|
+
public hasEligiblePendingTxs(minCount: number): Promise<boolean> {
|
|
466
|
+
return this.txPool.hasEligiblePendingTxs(minCount);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
public async *iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
|
|
453
470
|
for (const txHash of await this.txPool.getPendingTxHashes()) {
|
|
454
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
471
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
455
472
|
if (tx) {
|
|
456
473
|
yield tx;
|
|
457
474
|
}
|
|
458
475
|
}
|
|
459
476
|
}
|
|
460
477
|
|
|
461
|
-
public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
|
|
478
|
+
public async *iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
|
|
462
479
|
for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
|
|
463
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
480
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
464
481
|
if (tx) {
|
|
465
482
|
yield tx;
|
|
466
483
|
}
|
|
@@ -470,19 +487,21 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
470
487
|
/**
|
|
471
488
|
* Returns a transaction in the transaction pool by its hash.
|
|
472
489
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
490
|
+
* @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
|
|
473
491
|
* @returns A single tx or undefined.
|
|
474
492
|
*/
|
|
475
|
-
getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
|
|
476
|
-
return this.txPool.getTxByHash(txHash);
|
|
493
|
+
getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
|
|
494
|
+
return this.txPool.getTxByHash(txHash, opts);
|
|
477
495
|
}
|
|
478
496
|
|
|
479
497
|
/**
|
|
480
498
|
* Returns transactions in the transaction pool by hash.
|
|
481
499
|
* @param txHashes - Hashes of the transactions to look for.
|
|
500
|
+
* @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
482
501
|
* @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
|
|
483
502
|
*/
|
|
484
|
-
getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
|
|
485
|
-
return this.txPool.getTxsByHash(txHashes);
|
|
503
|
+
getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
|
|
504
|
+
return this.txPool.getTxsByHash(txHashes, opts);
|
|
486
505
|
}
|
|
487
506
|
|
|
488
507
|
hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]> {
|
|
@@ -592,13 +611,10 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
592
611
|
*/
|
|
593
612
|
public async getStatus(): Promise<P2PSyncState> {
|
|
594
613
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
595
|
-
const blockHash =
|
|
596
|
-
blockNumber
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
.getBlockHeader(blockNumber)
|
|
600
|
-
.then(header => header?.hash())
|
|
601
|
-
.then(hash => hash?.toString());
|
|
614
|
+
const blockHash = await this.l2BlockSource
|
|
615
|
+
.getBlockData({ number: blockNumber })
|
|
616
|
+
.then(data => data?.header.hash())
|
|
617
|
+
.then(hash => hash?.toString());
|
|
602
618
|
|
|
603
619
|
return {
|
|
604
620
|
state: this.currentState,
|
|
@@ -627,15 +643,20 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
627
643
|
return;
|
|
628
644
|
}
|
|
629
645
|
|
|
630
|
-
await this.handleMinedBlocks(blocks);
|
|
631
|
-
await this.maybeCallPrepareForSlot();
|
|
632
|
-
await this.startCollectingMissingTxs(blocks);
|
|
633
646
|
const lastBlock = blocks.at(-1)!;
|
|
634
|
-
|
|
647
|
+
const lastSlot = lastBlock.header.getSlot();
|
|
648
|
+
|
|
649
|
+
// Mark txs mined before releasing protections: a block landing at this slot supersedes any
|
|
650
|
+
// protection for txs it includes, so mined-marking must run first to keep just-landed txs from
|
|
651
|
+
// being unprotected into pending where they could be evicted before they are recorded as mined.
|
|
652
|
+
await this.handleMinedBlocks(blocks);
|
|
653
|
+
await this.maybeCallPrepareForSlot(lastSlot);
|
|
654
|
+
await this.collectingMissingTxs(blocks);
|
|
655
|
+
await this.synchedLatestSlot.set(BigInt(lastSlot));
|
|
635
656
|
}
|
|
636
657
|
|
|
637
|
-
/** Request txs for unproven blocks so the prover node
|
|
638
|
-
private async
|
|
658
|
+
/** Request txs for unproven blocks so the prover node can prove. */
|
|
659
|
+
private async collectingMissingTxs(blocks: L2Block[]): Promise<void> {
|
|
639
660
|
try {
|
|
640
661
|
// TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
|
|
641
662
|
// be much lower than the actual one, and it does not update until the pending chain is
|
|
@@ -643,7 +664,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
643
664
|
// are already proven, but the archiver has not yet updated its state. Until this is properly
|
|
644
665
|
// fixed, it is mitigated by the expiration date of collection requests, which depends on
|
|
645
666
|
// the slot number of the block.
|
|
646
|
-
const provenBlockNumber = await this.l2BlockSource.
|
|
667
|
+
const provenBlockNumber = (await this.l2BlockSource.getBlockNumber({ tag: 'proven' })) ?? BlockNumber.ZERO;
|
|
647
668
|
const unprovenBlocks = blocks.filter(block => block.number > provenBlockNumber);
|
|
648
669
|
for (const block of unprovenBlocks) {
|
|
649
670
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
@@ -655,7 +676,17 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
655
676
|
`Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`,
|
|
656
677
|
{ missingTxHashes, blockNumber: block.number, blockHash: await block.hash().then(h => h.toString()) },
|
|
657
678
|
);
|
|
658
|
-
|
|
679
|
+
// Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
|
|
680
|
+
// count *full slots after the block slot* — value N means collection runs until
|
|
681
|
+
// `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
|
|
682
|
+
// gives up before the data-withholding slash verdict is rendered.
|
|
683
|
+
const blockSlot = block.header.getSlot();
|
|
684
|
+
const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
|
|
685
|
+
const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
|
|
686
|
+
const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
|
|
687
|
+
const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
|
|
688
|
+
const deadline = new Date(Number(deadlineSeconds) * 1000);
|
|
689
|
+
await this.txCollection.collectFastForBlock(block, missingTxHashes, { deadline });
|
|
659
690
|
}
|
|
660
691
|
}
|
|
661
692
|
} catch (err) {
|
|
@@ -668,7 +699,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
668
699
|
* @param blocks - A list of finalized L2 blocks.
|
|
669
700
|
* @returns Empty promise.
|
|
670
701
|
*/
|
|
671
|
-
private async handleFinalizedL2Blocks(blocks:
|
|
702
|
+
private async handleFinalizedL2Blocks(blocks: BlockData[]): Promise<void> {
|
|
672
703
|
if (!blocks.length) {
|
|
673
704
|
return;
|
|
674
705
|
}
|
|
@@ -691,31 +722,38 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
691
722
|
}
|
|
692
723
|
|
|
693
724
|
/**
|
|
694
|
-
* Returns true if the prune
|
|
695
|
-
* If the
|
|
696
|
-
* If they differ, the prune spans across checkpoints (epoch prune).
|
|
725
|
+
* Returns true if the prune is an epoch prune (new checkpoint number is less than old).
|
|
726
|
+
* If the checkpoint number stays the same or increases, the prune is within a checkpoint.
|
|
697
727
|
*/
|
|
698
728
|
private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
|
|
699
729
|
const tips = await this.l2Tips.getL2Tips();
|
|
700
730
|
const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
|
|
701
|
-
if (oldCheckpointNumber <= CheckpointNumber.
|
|
731
|
+
if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
|
|
702
732
|
return false;
|
|
703
733
|
}
|
|
704
|
-
const
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
734
|
+
const newCheckpointNumber = newCheckpoint.number;
|
|
735
|
+
// We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
|
|
736
|
+
// To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
|
|
737
|
+
// This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
|
|
738
|
+
const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
|
|
739
|
+
const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
|
|
740
|
+
if (isEpochPrune) {
|
|
741
|
+
this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
|
|
742
|
+
oldCheckpointNumber,
|
|
743
|
+
newCheckpointNumber,
|
|
744
|
+
thresholdForEpochPrune,
|
|
745
|
+
});
|
|
746
|
+
}
|
|
708
747
|
return isEpochPrune;
|
|
709
748
|
}
|
|
710
749
|
|
|
711
|
-
/**
|
|
712
|
-
private async maybeCallPrepareForSlot(): Promise<void> {
|
|
713
|
-
|
|
714
|
-
if (currentSlot <= this.lastSlotProcessed) {
|
|
750
|
+
/** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */
|
|
751
|
+
private async maybeCallPrepareForSlot(slot: SlotNumber): Promise<void> {
|
|
752
|
+
if (slot <= this.lastSlotProcessed) {
|
|
715
753
|
return;
|
|
716
754
|
}
|
|
717
|
-
this.lastSlotProcessed =
|
|
718
|
-
await this.txPool.prepareForSlot(
|
|
755
|
+
this.lastSlotProcessed = slot;
|
|
756
|
+
await this.txPool.prepareForSlot(slot);
|
|
719
757
|
}
|
|
720
758
|
|
|
721
759
|
private async startServiceIfSynched() {
|
|
@@ -738,9 +776,17 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
738
776
|
syncedFinalizedBlock,
|
|
739
777
|
});
|
|
740
778
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
741
|
-
if (this.
|
|
742
|
-
|
|
743
|
-
|
|
779
|
+
if (this.syncResolvers !== undefined) {
|
|
780
|
+
// A throw here would be swallowed by the block stream event handler, so we reject the promise returned by
|
|
781
|
+
// start instead, which makes node startup fail rather than run on with a dead p2p stack.
|
|
782
|
+
try {
|
|
783
|
+
await this.p2pService.start();
|
|
784
|
+
} catch (err) {
|
|
785
|
+
this.log.fatal(`Failed to start p2p service`, { err, syncedLatestBlock });
|
|
786
|
+
this.syncResolvers.reject(err);
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
this.syncResolvers.resolve();
|
|
744
790
|
}
|
|
745
791
|
}
|
|
746
792
|
}
|