@aztec/p2p 0.0.1-commit.03f7ef2 → 0.0.1-commit.0658669b3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +7 -6
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +41 -14
- package/dest/client/interface.d.ts +60 -34
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +46 -59
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +600 -313
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +38 -13
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +29 -18
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +111 -76
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
- 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 +527 -287
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +16 -12
- package/dest/mem_pools/index.d.ts +3 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -1
- package/dest/mem_pools/instrumentation.d.ts +3 -3
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +11 -18
- package/dest/mem_pools/interface.d.ts +5 -5
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +35 -26
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +312 -336
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -4
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +7 -7
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +95 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +5 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +105 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +164 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +355 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +891 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -7
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
- package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +228 -57
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +28 -4
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +49 -1
- package/dest/services/encoding.d.ts +2 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +9 -7
- package/dest/services/gossipsub/index.d.ts +3 -0
- package/dest/services/gossipsub/index.d.ts.map +1 -0
- package/dest/services/gossipsub/index.js +2 -0
- package/dest/services/gossipsub/scoring.d.ts +21 -3
- package/dest/services/gossipsub/scoring.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.js +24 -7
- package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +346 -0
- package/dest/services/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +30 -72
- package/dest/services/libp2p/libp2p_service.d.ts +111 -35
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1019 -365
- package/dest/services/peer-manager/metrics.d.ts +7 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +33 -21
- package/dest/services/peer-manager/peer_manager.d.ts +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +2 -10
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -6
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +12 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +15 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
- 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 +27 -9
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
- 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 +59 -13
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +4 -1
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +20 -0
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +471 -50
- package/dest/services/service.d.ts +56 -4
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +22 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +55 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +71 -44
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +90 -0
- package/dest/services/tx_collection/index.d.ts +3 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +2 -0
- 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 +11 -13
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +60 -26
- package/dest/services/tx_collection/tx_collection.d.ts +29 -16
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +79 -7
- package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +26 -29
- package/dest/services/tx_collection/tx_source.d.ts +8 -3
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +19 -2
- package/dest/services/tx_file_store/config.d.ts +16 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +22 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +152 -0
- package/dest/services/tx_provider.d.ts +6 -6
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -9
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +7 -20
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +29 -2
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +103 -2
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +2 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +163 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +366 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +221 -126
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -39
- package/dest/util.d.ts +2 -2
- package/dest/util.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +76 -24
- package/src/client/interface.ts +78 -35
- package/src/client/p2p_client.ts +263 -358
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +346 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +57 -27
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +510 -78
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +612 -320
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +20 -13
- package/src/mem_pools/index.ts +4 -1
- package/src/mem_pools/instrumentation.ts +19 -25
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +360 -368
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +7 -7
- package/src/mem_pools/tx_pool_v2/README.md +275 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +255 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1063 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +21 -18
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/README.md +115 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +372 -55
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -19
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +65 -2
- package/src/services/encoding.ts +8 -6
- package/src/services/gossipsub/README.md +641 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +29 -5
- package/src/services/gossipsub/topic_score_params.ts +487 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +32 -73
- package/src/services/libp2p/libp2p_service.ts +705 -364
- package/src/services/peer-manager/metrics.ts +39 -21
- package/src/services/peer-manager/peer_manager.ts +3 -2
- package/src/services/peer-manager/peer_scoring.ts +28 -4
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +29 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
- package/src/services/reqresp/protocols/status.ts +7 -4
- package/src/services/reqresp/protocols/tx.ts +22 -0
- package/src/services/reqresp/reqresp.ts +79 -22
- package/src/services/service.ts +73 -5
- package/src/services/tx_collection/config.ts +83 -1
- package/src/services/tx_collection/fast_tx_collection.ts +93 -47
- package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
- package/src/services/tx_collection/file_store_tx_source.ts +117 -0
- package/src/services/tx_collection/index.ts +6 -0
- package/src/services/tx_collection/instrumentation.ts +11 -13
- package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
- package/src/services/tx_collection/slow_tx_collection.ts +68 -35
- package/src/services/tx_collection/tx_collection.ts +121 -24
- package/src/services/tx_collection/tx_collection_sink.ts +30 -34
- package/src/services/tx_collection/tx_source.ts +22 -3
- package/src/services/tx_file_store/config.ts +37 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +175 -0
- package/src/services/tx_provider.ts +16 -12
- package/src/services/tx_provider_instrumentation.ts +13 -20
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +3 -3
- package/src/test-helpers/mock-pubsub.ts +143 -3
- package/src/test-helpers/reqresp-nodes.ts +2 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +430 -0
- package/src/testbench/p2p_client_testbench_worker.ts +348 -122
- package/src/testbench/worker_client_manager.ts +304 -42
- package/src/util.ts +7 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -37
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -213
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -30
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -219
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -242
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -298
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -287
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -288
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
package/src/client/p2p_client.ts
CHANGED
|
@@ -1,47 +1,58 @@
|
|
|
1
|
-
import { GENESIS_BLOCK_HEADER_HASH
|
|
2
|
-
import {
|
|
1
|
+
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
2
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { RunningPromise } from '@aztec/foundation/promise';
|
|
4
6
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
|
-
import type { AztecAsyncKVStore,
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
8
|
+
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
9
|
+
import {
|
|
10
|
+
type CheckpointId,
|
|
11
|
+
type EthAddress,
|
|
12
|
+
type L2Block,
|
|
13
|
+
type L2BlockId,
|
|
14
|
+
type L2BlockSource,
|
|
11
15
|
L2BlockStream,
|
|
12
|
-
L2BlockStreamEvent,
|
|
13
|
-
L2Tips,
|
|
16
|
+
type L2BlockStreamEvent,
|
|
17
|
+
type L2Tips,
|
|
18
|
+
type L2TipsStore,
|
|
14
19
|
} from '@aztec/stdlib/block';
|
|
15
20
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
16
21
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
17
22
|
import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
18
|
-
import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec/stdlib/p2p';
|
|
19
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
20
23
|
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} from '@aztec/
|
|
24
|
+
type BlockProposal,
|
|
25
|
+
CheckpointAttestation,
|
|
26
|
+
type CheckpointProposal,
|
|
27
|
+
type P2PClientType,
|
|
28
|
+
type TopicType,
|
|
29
|
+
} from '@aztec/stdlib/p2p';
|
|
30
|
+
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
31
|
+
import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
28
32
|
|
|
29
33
|
import type { PeerId } from '@libp2p/interface';
|
|
30
34
|
import type { ENR } from '@nethermindeth/enr';
|
|
31
35
|
|
|
32
36
|
import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
|
|
33
|
-
import
|
|
37
|
+
import { TxPoolError } from '../errors/tx-pool.error.js';
|
|
38
|
+
import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
34
39
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
35
|
-
import type {
|
|
40
|
+
import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
36
41
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
37
42
|
import {
|
|
38
43
|
ReqRespSubProtocol,
|
|
39
44
|
type ReqRespSubProtocolHandler,
|
|
40
45
|
type ReqRespSubProtocolValidators,
|
|
41
46
|
} from '../services/reqresp/interface.js';
|
|
42
|
-
import {
|
|
43
|
-
|
|
47
|
+
import type {
|
|
48
|
+
DuplicateAttestationInfo,
|
|
49
|
+
DuplicateProposalInfo,
|
|
50
|
+
P2PBlockReceivedCallback,
|
|
51
|
+
P2PCheckpointReceivedCallback,
|
|
52
|
+
P2PService,
|
|
53
|
+
} from '../services/service.js';
|
|
44
54
|
import { TxCollection } from '../services/tx_collection/tx_collection.js';
|
|
55
|
+
import type { TxFileStore } from '../services/tx_file_store/tx_file_store.js';
|
|
45
56
|
import { TxProvider } from '../services/tx_provider.js';
|
|
46
57
|
import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
|
|
47
58
|
|
|
@@ -62,14 +73,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
62
73
|
private provenBlockNumberAtStart = -1;
|
|
63
74
|
private finalizedBlockNumberAtStart = -1;
|
|
64
75
|
|
|
65
|
-
private
|
|
66
|
-
private synchedLatestBlockNumber: AztecAsyncSingleton<BlockNumber>;
|
|
67
|
-
private synchedProvenBlockNumber: AztecAsyncSingleton<BlockNumber>;
|
|
68
|
-
private synchedFinalizedBlockNumber: AztecAsyncSingleton<BlockNumber>;
|
|
76
|
+
private l2Tips: L2TipsStore;
|
|
69
77
|
private synchedLatestSlot: AztecAsyncSingleton<bigint>;
|
|
70
78
|
|
|
71
|
-
private txPool:
|
|
72
|
-
private attestationPool:
|
|
79
|
+
private txPool: TxPoolV2;
|
|
80
|
+
private attestationPool: AttestationPoolApi;
|
|
73
81
|
|
|
74
82
|
private config: P2PConfig;
|
|
75
83
|
|
|
@@ -79,14 +87,12 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
79
87
|
|
|
80
88
|
private validatorAddresses: EthAddress[] = [];
|
|
81
89
|
|
|
82
|
-
/**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* @param log - A logger.
|
|
89
|
-
*/
|
|
90
|
+
/** Tracks the last slot for which we called prepareForSlot */
|
|
91
|
+
private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
|
|
92
|
+
|
|
93
|
+
/** Polls for slot changes and calls prepareForSlot on the tx pool */
|
|
94
|
+
private slotMonitor: RunningPromise | undefined;
|
|
95
|
+
|
|
90
96
|
constructor(
|
|
91
97
|
_clientType: T,
|
|
92
98
|
private store: AztecAsyncKVStore,
|
|
@@ -94,6 +100,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
94
100
|
mempools: MemPools,
|
|
95
101
|
private p2pService: P2PService,
|
|
96
102
|
private txCollection: TxCollection,
|
|
103
|
+
private txFileStore: TxFileStore | undefined,
|
|
104
|
+
private epochCache: EpochCacheInterface,
|
|
97
105
|
config: Partial<P2PConfig> = {},
|
|
98
106
|
private _dateProvider: DateProvider = new DateProvider(),
|
|
99
107
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
@@ -114,7 +122,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
114
122
|
);
|
|
115
123
|
|
|
116
124
|
// Default to collecting all txs when we see a valid proposal
|
|
117
|
-
// This can be overridden by the validator client to
|
|
125
|
+
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
126
|
+
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
118
127
|
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
119
128
|
// validator-client code into here so we can validate a proposal is reasonable.
|
|
120
129
|
this.registerBlockProposalHandler(async (block, sender) => {
|
|
@@ -123,21 +132,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
123
132
|
const constants = this.txCollection.getConstants();
|
|
124
133
|
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
125
134
|
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
126
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.
|
|
135
|
+
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
127
136
|
if (!parentBlock) {
|
|
128
137
|
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
129
|
-
return;
|
|
138
|
+
return false;
|
|
130
139
|
}
|
|
131
140
|
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
132
141
|
await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
|
|
133
|
-
return
|
|
142
|
+
return true;
|
|
134
143
|
});
|
|
135
144
|
|
|
136
|
-
|
|
137
|
-
this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
|
|
138
|
-
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
139
|
-
this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
|
|
140
|
-
this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
|
|
145
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
141
146
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
142
147
|
}
|
|
143
148
|
|
|
@@ -162,99 +167,61 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
162
167
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
163
168
|
}
|
|
164
169
|
|
|
170
|
+
public getGossipMeshPeerCount(topicType: TopicType): Promise<number> {
|
|
171
|
+
return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
|
|
172
|
+
}
|
|
173
|
+
|
|
165
174
|
public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
|
|
166
|
-
return this.
|
|
175
|
+
return this.l2Tips.getL2BlockHash(number);
|
|
167
176
|
}
|
|
168
177
|
|
|
169
|
-
public updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
|
|
170
|
-
this.txPool.updateConfig(config);
|
|
178
|
+
public async updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
|
|
179
|
+
await this.txPool.updateConfig(config);
|
|
171
180
|
this.p2pService.updateConfig(config);
|
|
172
|
-
return Promise.resolve();
|
|
173
181
|
}
|
|
174
182
|
|
|
175
|
-
public
|
|
176
|
-
|
|
177
|
-
let latestBlockHash: string | undefined;
|
|
178
|
-
|
|
179
|
-
const provenBlockNumber = await this.getSyncedProvenBlockNum();
|
|
180
|
-
let provenBlockHash: string | undefined;
|
|
181
|
-
|
|
182
|
-
const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
|
|
183
|
-
let finalizedBlockHash: string | undefined;
|
|
184
|
-
|
|
185
|
-
if (latestBlockNumber > 0) {
|
|
186
|
-
latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
|
|
187
|
-
if (typeof latestBlockHash === 'undefined') {
|
|
188
|
-
throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (provenBlockNumber > 0) {
|
|
193
|
-
provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
|
|
194
|
-
if (typeof provenBlockHash === 'undefined') {
|
|
195
|
-
throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (finalizedBlockNumber > 0) {
|
|
200
|
-
finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
|
|
201
|
-
if (typeof finalizedBlockHash === 'undefined') {
|
|
202
|
-
throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const genesisHash = GENESIS_BLOCK_HEADER_HASH.toString();
|
|
207
|
-
|
|
208
|
-
return {
|
|
209
|
-
latest: { hash: latestBlockHash ?? genesisHash, number: latestBlockNumber },
|
|
210
|
-
proven: { hash: provenBlockHash ?? genesisHash, number: provenBlockNumber },
|
|
211
|
-
finalized: { hash: finalizedBlockHash ?? genesisHash, number: finalizedBlockNumber },
|
|
212
|
-
};
|
|
183
|
+
public getL2Tips(): Promise<L2Tips> {
|
|
184
|
+
return this.l2Tips.getL2Tips();
|
|
213
185
|
}
|
|
214
186
|
|
|
215
187
|
public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
|
|
216
188
|
this.log.debug(`Handling block stream event ${event.type}`);
|
|
189
|
+
|
|
217
190
|
switch (event.type) {
|
|
218
191
|
case 'blocks-added':
|
|
219
|
-
await this.handleLatestL2Blocks(event.blocks
|
|
192
|
+
await this.handleLatestL2Blocks(event.blocks);
|
|
220
193
|
break;
|
|
221
194
|
case 'chain-finalized': {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const from = BlockNumber((await this.getSyncedFinalizedBlockNum()) + 1);
|
|
195
|
+
const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
|
|
196
|
+
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
225
197
|
const limit = event.block.number - from + 1;
|
|
226
198
|
if (limit > 0) {
|
|
227
199
|
const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
|
|
228
|
-
await this.handleFinalizedL2Blocks(oldBlocks
|
|
200
|
+
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
229
201
|
}
|
|
230
202
|
break;
|
|
231
203
|
}
|
|
232
|
-
case 'chain-proven':
|
|
233
|
-
await this.setBlockHash(event.block);
|
|
204
|
+
case 'chain-proven':
|
|
234
205
|
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
235
|
-
await this.synchedProvenBlockNumber.set(event.block.number);
|
|
236
206
|
break;
|
|
237
|
-
}
|
|
238
207
|
case 'chain-pruned':
|
|
239
|
-
await this.setBlockHash(event.block);
|
|
240
208
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
241
|
-
await this.handlePruneL2Blocks(event.block.
|
|
209
|
+
await this.handlePruneL2Blocks(event.block, event.checkpoint);
|
|
210
|
+
break;
|
|
211
|
+
case 'chain-checkpointed':
|
|
242
212
|
break;
|
|
243
213
|
default: {
|
|
244
214
|
const _: never = event;
|
|
245
215
|
break;
|
|
246
216
|
}
|
|
247
217
|
}
|
|
248
|
-
}
|
|
249
218
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
219
|
+
// Pass the event through to our l2 tips store
|
|
220
|
+
await this.l2Tips.handleBlockStreamEvent(event);
|
|
221
|
+
await this.startServiceIfSynched();
|
|
254
222
|
}
|
|
255
223
|
|
|
256
224
|
#assertIsReady() {
|
|
257
|
-
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
258
225
|
if (!this.isReady()) {
|
|
259
226
|
throw new Error('P2P client not ready');
|
|
260
227
|
}
|
|
@@ -272,11 +239,14 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
272
239
|
return this.syncPromise;
|
|
273
240
|
}
|
|
274
241
|
|
|
242
|
+
// Start the tx pool first, as it needs to hydrate state from persistence
|
|
243
|
+
await this.txPool.start();
|
|
244
|
+
|
|
275
245
|
// get the current latest block numbers
|
|
276
246
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
277
|
-
this.latestBlockNumberAtStart = latestBlockNumbers.
|
|
278
|
-
this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
|
|
279
|
-
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
|
|
247
|
+
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
248
|
+
this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
|
|
249
|
+
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
|
|
280
250
|
|
|
281
251
|
const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
|
|
282
252
|
const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
|
|
@@ -321,6 +291,16 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
321
291
|
|
|
322
292
|
this.blockStream!.start();
|
|
323
293
|
await this.txCollection.start();
|
|
294
|
+
this.txFileStore?.start();
|
|
295
|
+
|
|
296
|
+
// Start slot monitor to call prepareForSlot when the slot changes
|
|
297
|
+
this.slotMonitor = new RunningPromise(
|
|
298
|
+
() => this.maybeCallPrepareForSlot(),
|
|
299
|
+
this.log,
|
|
300
|
+
this.config.slotCheckIntervalMS,
|
|
301
|
+
);
|
|
302
|
+
this.slotMonitor.start();
|
|
303
|
+
|
|
324
304
|
return this.syncPromise;
|
|
325
305
|
}
|
|
326
306
|
|
|
@@ -335,12 +315,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
335
315
|
private initBlockStream(startingBlock?: BlockNumber) {
|
|
336
316
|
if (!this.blockStream) {
|
|
337
317
|
const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
|
|
338
|
-
this.blockStream = new
|
|
318
|
+
this.blockStream = new L2BlockStream(
|
|
339
319
|
this.l2BlockSource,
|
|
340
320
|
this,
|
|
341
321
|
this,
|
|
342
|
-
this.telemetry.getTracer('P2PL2BlockStream'),
|
|
343
|
-
'P2PL2BlockStream',
|
|
344
322
|
createLogger(`${this.log.module}:l2-block-stream`),
|
|
345
323
|
{ batchSize, pollIntervalMS, startingBlock },
|
|
346
324
|
);
|
|
@@ -353,12 +331,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
353
331
|
*/
|
|
354
332
|
public async stop() {
|
|
355
333
|
this.log.debug('Stopping p2p client...');
|
|
334
|
+
await this.slotMonitor?.stop();
|
|
335
|
+
this.log.debug('Stopped slot monitor');
|
|
356
336
|
await tryStop(this.txCollection);
|
|
357
337
|
this.log.debug('Stopped tx collection service');
|
|
338
|
+
await this.txFileStore?.stop();
|
|
339
|
+
this.log.debug('Stopped tx file store');
|
|
358
340
|
await this.p2pService.stop();
|
|
359
341
|
this.log.debug('Stopped p2p service');
|
|
360
342
|
await this.blockStream?.stop();
|
|
361
343
|
this.log.debug('Stopped block downloader');
|
|
344
|
+
await this.txPool.stop();
|
|
345
|
+
this.log.debug('Stopped tx pool');
|
|
362
346
|
await this.runningPromise;
|
|
363
347
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
364
348
|
this.log.info('P2P client stopped');
|
|
@@ -375,28 +359,59 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
375
359
|
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
376
360
|
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
|
|
377
361
|
}))
|
|
378
|
-
public broadcastProposal(proposal: BlockProposal): Promise<void> {
|
|
362
|
+
public async broadcastProposal(proposal: BlockProposal): Promise<void> {
|
|
379
363
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
364
|
+
// Store our own proposal so we can respond to req/resp requests for it
|
|
365
|
+
const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
|
|
366
|
+
if (count > 1) {
|
|
367
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
368
|
+
this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
|
|
369
|
+
slot: proposal.slotNumber,
|
|
370
|
+
archive: proposal.archive.toString(),
|
|
371
|
+
count,
|
|
372
|
+
});
|
|
373
|
+
} else {
|
|
374
|
+
throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return this.p2pService.propagate(proposal);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
@trackSpan('p2pClient.broadcastCheckpointProposal', async proposal => ({
|
|
381
|
+
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
382
|
+
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
383
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
|
|
384
|
+
}))
|
|
385
|
+
public async broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
|
|
386
|
+
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
387
|
+
const blockProposal = proposal.getBlockProposal();
|
|
388
|
+
if (blockProposal) {
|
|
389
|
+
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
390
|
+
await this.attestationPool.tryAddBlockProposal(blockProposal);
|
|
391
|
+
}
|
|
380
392
|
return this.p2pService.propagate(proposal);
|
|
381
393
|
}
|
|
382
394
|
|
|
383
|
-
public async
|
|
384
|
-
this.log.verbose(`Broadcasting ${attestations.length} attestations to peers`);
|
|
395
|
+
public async broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
|
|
396
|
+
this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
|
|
385
397
|
await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
|
|
386
398
|
}
|
|
387
399
|
|
|
388
|
-
public async
|
|
400
|
+
public async getCheckpointAttestationsForSlot(
|
|
401
|
+
slot: SlotNumber,
|
|
402
|
+
proposalId?: string,
|
|
403
|
+
): Promise<CheckpointAttestation[]> {
|
|
389
404
|
return await (proposalId
|
|
390
|
-
? this.attestationPool.
|
|
391
|
-
: this.attestationPool.
|
|
405
|
+
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
|
|
406
|
+
: this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
392
407
|
}
|
|
393
408
|
|
|
394
|
-
public
|
|
395
|
-
return this.attestationPool.
|
|
409
|
+
public addOwnCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
|
|
410
|
+
return this.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
396
411
|
}
|
|
397
412
|
|
|
398
|
-
public
|
|
399
|
-
return this.attestationPool.
|
|
413
|
+
public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
|
|
414
|
+
return this.attestationPool.hasBlockProposalsForSlot(slot);
|
|
400
415
|
}
|
|
401
416
|
|
|
402
417
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
@@ -405,109 +420,61 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
405
420
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
406
421
|
}
|
|
407
422
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
*/
|
|
411
|
-
public async requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<Tx[]> {
|
|
412
|
-
const timeoutMs = 8000; // Longer timeout for now
|
|
413
|
-
const maxRetryAttempts = 10; // Keep retrying within the timeout
|
|
414
|
-
const requests = chunkTxHashesRequest(txHashes);
|
|
415
|
-
const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
|
|
416
|
-
|
|
417
|
-
const txBatches = await this.p2pService.sendBatchRequest(
|
|
418
|
-
ReqRespSubProtocol.TX,
|
|
419
|
-
requests,
|
|
420
|
-
pinnedPeerId,
|
|
421
|
-
timeoutMs,
|
|
422
|
-
maxPeers,
|
|
423
|
-
maxRetryAttempts,
|
|
424
|
-
);
|
|
425
|
-
|
|
426
|
-
const txs = txBatches.flat();
|
|
427
|
-
if (txs.length > 0) {
|
|
428
|
-
await this.txPool.addTxs(txs);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
const txHashesStr = txHashes.map(tx => tx.toString()).join(', ');
|
|
432
|
-
this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
|
|
433
|
-
|
|
434
|
-
// We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
|
|
435
|
-
return txs;
|
|
423
|
+
public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
424
|
+
this.p2pService.registerCheckpointReceivedCallback(handler);
|
|
436
425
|
}
|
|
437
426
|
|
|
438
|
-
public
|
|
439
|
-
|
|
427
|
+
public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
|
|
428
|
+
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
440
429
|
}
|
|
441
430
|
|
|
442
|
-
public
|
|
443
|
-
|
|
431
|
+
public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
|
|
432
|
+
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
444
433
|
}
|
|
445
434
|
|
|
446
|
-
public async
|
|
447
|
-
for (const txHash of await this.txPool.getPendingTxHashes()) {
|
|
448
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
449
|
-
if (tx) {
|
|
450
|
-
yield tx;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* Returns all transactions in the transaction pool.
|
|
457
|
-
* @param filter - The type of txs to return
|
|
458
|
-
* @param limit - How many txs to return
|
|
459
|
-
* @param after - If paginating, the last known tx hash. Will return txs after this hash
|
|
460
|
-
* @returns An array of Txs.
|
|
461
|
-
*/
|
|
462
|
-
public async getTxs(filter: 'all' | 'pending' | 'mined', limit?: number, after?: TxHash): Promise<Tx[]> {
|
|
435
|
+
public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
|
|
463
436
|
if (limit !== undefined && limit <= 0) {
|
|
464
437
|
throw new TypeError('limit must be greater than 0');
|
|
465
438
|
}
|
|
466
439
|
|
|
467
|
-
let
|
|
468
|
-
let txHashes: TxHash[];
|
|
469
|
-
|
|
470
|
-
if (filter === 'all') {
|
|
471
|
-
txs = await this.txPool.getAllTxs();
|
|
472
|
-
txHashes = await Promise.all(txs.map(tx => tx.getTxHash()));
|
|
473
|
-
} else if (filter === 'mined') {
|
|
474
|
-
const minedTxHashes = await this.txPool.getMinedTxHashes();
|
|
475
|
-
txHashes = minedTxHashes.map(([txHash]) => txHash);
|
|
476
|
-
} else if (filter === 'pending') {
|
|
477
|
-
txHashes = await this.txPool.getPendingTxHashes();
|
|
478
|
-
} else {
|
|
479
|
-
const _: never = filter;
|
|
480
|
-
throw new Error(`Unknown filter ${filter}`);
|
|
481
|
-
}
|
|
440
|
+
let txHashes = await this.txPool.getPendingTxHashes();
|
|
482
441
|
|
|
483
442
|
let startIndex = 0;
|
|
484
|
-
let endIndex: number | undefined = undefined;
|
|
485
|
-
|
|
486
443
|
if (after) {
|
|
487
444
|
startIndex = txHashes.findIndex(txHash => after.equals(txHash));
|
|
488
|
-
|
|
489
|
-
// if we can't find the last tx in our set then return an empty array as pagination is no longer valid.
|
|
490
445
|
if (startIndex === -1) {
|
|
491
446
|
return [];
|
|
492
447
|
}
|
|
493
|
-
|
|
494
|
-
// increment by one because we don't want to return the same tx again
|
|
495
448
|
startIndex++;
|
|
496
449
|
}
|
|
497
450
|
|
|
498
|
-
|
|
499
|
-
endIndex = startIndex + limit;
|
|
500
|
-
}
|
|
501
|
-
|
|
451
|
+
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
502
452
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
453
|
+
|
|
454
|
+
const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash)));
|
|
455
|
+
return maybeTxs.filter((tx): tx is Tx => !!tx);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
public getPendingTxCount(): Promise<number> {
|
|
459
|
+
return this.txPool.getPendingTxCount();
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
|
|
463
|
+
for (const txHash of await this.txPool.getPendingTxHashes()) {
|
|
464
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
465
|
+
if (tx) {
|
|
466
|
+
yield tx;
|
|
467
|
+
}
|
|
508
468
|
}
|
|
469
|
+
}
|
|
509
470
|
|
|
510
|
-
|
|
471
|
+
public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
|
|
472
|
+
for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
|
|
473
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
474
|
+
if (tx) {
|
|
475
|
+
yield tx;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
511
478
|
}
|
|
512
479
|
|
|
513
480
|
/**
|
|
@@ -532,49 +499,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
532
499
|
return this.txPool.hasTxs(txHashes);
|
|
533
500
|
}
|
|
534
501
|
|
|
535
|
-
/**
|
|
536
|
-
* Returns transactions in the transaction pool by hash.
|
|
537
|
-
* If a transaction is not in the pool, it will be requested from the network.
|
|
538
|
-
* @param txHashes - Hashes of the transactions to look for.
|
|
539
|
-
* @returns The txs found, or undefined if not found in the order requested.
|
|
540
|
-
*/
|
|
541
|
-
async getTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]> {
|
|
542
|
-
const txs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash)));
|
|
543
|
-
const missingTxHashes = txs
|
|
544
|
-
.map((tx, index) => [tx, index] as const)
|
|
545
|
-
.filter(([tx, _index]) => !tx)
|
|
546
|
-
.map(([_tx, index]) => txHashes[index]);
|
|
547
|
-
|
|
548
|
-
if (missingTxHashes.length === 0) {
|
|
549
|
-
return txs as Tx[];
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
|
|
553
|
-
// TODO: optimize
|
|
554
|
-
// Merge the found txs in order
|
|
555
|
-
const mergingTxs = txHashes.map(txHash => {
|
|
556
|
-
// Is it in the txs list from the mempool?
|
|
557
|
-
for (const tx of txs) {
|
|
558
|
-
if (tx !== undefined && tx.getTxHash().equals(txHash)) {
|
|
559
|
-
return tx;
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
// Is it in the fetched missing txs?
|
|
564
|
-
// Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
|
|
565
|
-
for (const tx of missingTxs) {
|
|
566
|
-
if (tx.getTxHash().equals(txHash)) {
|
|
567
|
-
return tx;
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
// Otherwise return undefined
|
|
572
|
-
return undefined;
|
|
573
|
-
});
|
|
574
|
-
|
|
575
|
-
return mergingTxs;
|
|
576
|
-
}
|
|
577
|
-
|
|
578
502
|
/**
|
|
579
503
|
* Returns an archived transaction in the transaction pool by its hash.
|
|
580
504
|
* @param txHash - Hash of the archived transaction to look for.
|
|
@@ -585,25 +509,28 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
585
509
|
}
|
|
586
510
|
|
|
587
511
|
/**
|
|
588
|
-
*
|
|
589
|
-
* @param tx - The tx to
|
|
512
|
+
* Accepts a transaction, adds it to local tx pool and forwards it to other peers.
|
|
513
|
+
* @param tx - The tx to send.
|
|
590
514
|
* @returns Empty promise.
|
|
591
515
|
**/
|
|
592
516
|
public async sendTx(tx: Tx): Promise<void> {
|
|
593
|
-
|
|
594
|
-
const
|
|
595
|
-
if (
|
|
517
|
+
this.#assertIsReady();
|
|
518
|
+
const result = await this.txPool.addPendingTxs([tx], { feeComparisonOnly: true });
|
|
519
|
+
if (result.accepted.length === 1) {
|
|
596
520
|
await this.p2pService.propagate(tx);
|
|
521
|
+
return;
|
|
597
522
|
}
|
|
598
|
-
}
|
|
599
523
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
524
|
+
const txHashStr = tx.getTxHash().toString();
|
|
525
|
+
const reason = result.errors?.get(txHashStr);
|
|
526
|
+
if (reason) {
|
|
527
|
+
this.log.warn(`Tx ${txHashStr} not added to pool: ${reason.message}`);
|
|
528
|
+
throw new TxPoolError(reason);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
this.log.warn(
|
|
532
|
+
`Tx ${txHashStr} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`,
|
|
533
|
+
);
|
|
607
534
|
}
|
|
608
535
|
|
|
609
536
|
/**
|
|
@@ -611,8 +538,9 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
611
538
|
* @param txHash - Hash of the tx to query.
|
|
612
539
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
613
540
|
*/
|
|
614
|
-
public getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined> {
|
|
615
|
-
|
|
541
|
+
public async getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined> {
|
|
542
|
+
const status = await this.txPool.getTxStatus(txHash);
|
|
543
|
+
return status === 'protected' ? 'pending' : status;
|
|
616
544
|
}
|
|
617
545
|
|
|
618
546
|
public getEnr(): ENR | undefined {
|
|
@@ -624,14 +552,12 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
624
552
|
}
|
|
625
553
|
|
|
626
554
|
/**
|
|
627
|
-
*
|
|
628
|
-
*
|
|
629
|
-
* @param txHashes - Hashes of the transactions to delete.
|
|
630
|
-
* @returns Empty promise.
|
|
555
|
+
* Handles failed transaction execution by removing txs from the pool.
|
|
556
|
+
* @param txHashes - Hashes of the transactions that failed execution.
|
|
631
557
|
**/
|
|
632
|
-
public async
|
|
558
|
+
public async handleFailedExecution(txHashes: TxHash[]): Promise<void> {
|
|
633
559
|
this.#assertIsReady();
|
|
634
|
-
await this.txPool.
|
|
560
|
+
await this.txPool.handleFailedExecution(txHashes);
|
|
635
561
|
}
|
|
636
562
|
|
|
637
563
|
/**
|
|
@@ -647,7 +573,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
647
573
|
* @returns Block number of latest L2 Block we've synced with.
|
|
648
574
|
*/
|
|
649
575
|
public async getSyncedLatestBlockNum(): Promise<BlockNumber> {
|
|
650
|
-
|
|
576
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
577
|
+
return tips.proposed.number;
|
|
651
578
|
}
|
|
652
579
|
|
|
653
580
|
/**
|
|
@@ -655,11 +582,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
655
582
|
* @returns Block number of latest proven L2 Block we've synced with.
|
|
656
583
|
*/
|
|
657
584
|
public async getSyncedProvenBlockNum(): Promise<BlockNumber> {
|
|
658
|
-
|
|
585
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
586
|
+
return tips.proven.block.number;
|
|
659
587
|
}
|
|
660
588
|
|
|
661
589
|
public async getSyncedFinalizedBlockNum(): Promise<BlockNumber> {
|
|
662
|
-
|
|
590
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
591
|
+
return tips.finalized.block.number;
|
|
663
592
|
}
|
|
664
593
|
|
|
665
594
|
/** Returns latest L2 slot for which we have seen an L2 block. */
|
|
@@ -688,14 +617,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
688
617
|
}
|
|
689
618
|
|
|
690
619
|
/**
|
|
691
|
-
*
|
|
620
|
+
* Handles mined blocks by marking the txs in them as mined.
|
|
692
621
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
693
622
|
* @returns Empty promise.
|
|
694
623
|
*/
|
|
695
|
-
private async
|
|
624
|
+
private async handleMinedBlocks(blocks: L2Block[]): Promise<void> {
|
|
696
625
|
for (const block of blocks) {
|
|
697
|
-
|
|
698
|
-
await this.txPool.markAsMined(txHashes, block.header);
|
|
626
|
+
await this.txPool.handleMinedBlock(block);
|
|
699
627
|
}
|
|
700
628
|
}
|
|
701
629
|
|
|
@@ -704,33 +632,20 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
704
632
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
705
633
|
* @returns Empty promise.
|
|
706
634
|
*/
|
|
707
|
-
private async handleLatestL2Blocks(blocks:
|
|
635
|
+
private async handleLatestL2Blocks(blocks: L2Block[]): Promise<void> {
|
|
708
636
|
if (!blocks.length) {
|
|
709
|
-
return
|
|
637
|
+
return;
|
|
710
638
|
}
|
|
711
639
|
|
|
712
|
-
await this.
|
|
640
|
+
await this.handleMinedBlocks(blocks);
|
|
641
|
+
await this.maybeCallPrepareForSlot();
|
|
713
642
|
await this.startCollectingMissingTxs(blocks);
|
|
714
|
-
|
|
715
643
|
const lastBlock = blocks.at(-1)!;
|
|
716
|
-
|
|
717
|
-
await Promise.all(
|
|
718
|
-
blocks.map(async block =>
|
|
719
|
-
this.setBlockHash({
|
|
720
|
-
number: block.number,
|
|
721
|
-
hash: await block.hash().then(h => h.toString()),
|
|
722
|
-
}),
|
|
723
|
-
),
|
|
724
|
-
);
|
|
725
|
-
|
|
726
|
-
await this.synchedLatestBlockNumber.set(lastBlock.number);
|
|
727
644
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
728
|
-
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
729
|
-
await this.startServiceIfSynched();
|
|
730
645
|
}
|
|
731
646
|
|
|
732
647
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */
|
|
733
|
-
private async startCollectingMissingTxs(blocks:
|
|
648
|
+
private async startCollectingMissingTxs(blocks: L2Block[]): Promise<void> {
|
|
734
649
|
try {
|
|
735
650
|
// TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
|
|
736
651
|
// be much lower than the actual one, and it does not update until the pending chain is
|
|
@@ -763,86 +678,64 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
763
678
|
* @param blocks - A list of finalized L2 blocks.
|
|
764
679
|
* @returns Empty promise.
|
|
765
680
|
*/
|
|
766
|
-
private async handleFinalizedL2Blocks(blocks:
|
|
681
|
+
private async handleFinalizedL2Blocks(blocks: L2Block[]): Promise<void> {
|
|
767
682
|
if (!blocks.length) {
|
|
768
|
-
return
|
|
683
|
+
return;
|
|
769
684
|
}
|
|
770
|
-
this.log.debug(`Handling finalized blocks ${blocks.length} up to ${blocks.at(-1)?.number}`);
|
|
771
|
-
|
|
772
|
-
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
773
|
-
const lastBlockSlot = blocks[blocks.length - 1].header.getSlot();
|
|
774
685
|
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
await this.txPool.
|
|
778
|
-
await this.
|
|
779
|
-
|
|
780
|
-
await this.attestationPool.deleteAttestationsOlderThan(lastBlockSlot);
|
|
781
|
-
|
|
782
|
-
await this.synchedFinalizedBlockNumber.set(lastBlockNum);
|
|
783
|
-
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
784
|
-
|
|
785
|
-
await this.startServiceIfSynched();
|
|
686
|
+
// Finalization is monotonic, so we only need to call with the last block
|
|
687
|
+
const lastBlock = blocks.at(-1)!;
|
|
688
|
+
await this.txPool.handleFinalizedBlock(lastBlock.header);
|
|
689
|
+
await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
|
|
786
690
|
}
|
|
787
691
|
|
|
788
692
|
/**
|
|
789
693
|
* Updates the tx pool after a chain prune.
|
|
790
|
-
*
|
|
694
|
+
* Detects epoch prunes (checkpoint number changed) and deletes all txs in that case.
|
|
695
|
+
* @param latestBlock - The block ID the chain was pruned to.
|
|
696
|
+
* @param newCheckpoint - The checkpoint ID after the prune.
|
|
791
697
|
*/
|
|
792
|
-
private async handlePruneL2Blocks(latestBlock:
|
|
793
|
-
const
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
// Find transactions that reference pruned blocks in their historical header
|
|
797
|
-
for (const tx of await this.txPool.getAllTxs()) {
|
|
798
|
-
// every tx that's been generated against a block that has now been pruned is no longer valid
|
|
799
|
-
if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber > latestBlock) {
|
|
800
|
-
const txHash = tx.getTxHash();
|
|
801
|
-
txsToDelete.set(txHash.toString(), txHash);
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
|
|
805
|
-
this.log.info(`Detected chain prune. Removing ${txsToDelete.size} txs built against pruned blocks.`, {
|
|
806
|
-
newLatestBlock: latestBlock,
|
|
807
|
-
previousLatestBlock: await this.getSyncedLatestBlockNum(),
|
|
808
|
-
txsToDelete: Array.from(txsToDelete.keys()),
|
|
809
|
-
});
|
|
698
|
+
private async handlePruneL2Blocks(latestBlock: L2BlockId, newCheckpoint: CheckpointId): Promise<void> {
|
|
699
|
+
const deleteAllTxs = this.config.txPoolDeleteTxsAfterReorg && (await this.isEpochPrune(newCheckpoint));
|
|
700
|
+
await this.txPool.handlePrunedBlocks(latestBlock, { deleteAllTxs });
|
|
701
|
+
}
|
|
810
702
|
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
// We keep the txsToDelete out of this list as they have already been deleted above
|
|
822
|
-
if (blockNumber > latestBlock && !txsToDelete.has(txHash.toString())) {
|
|
823
|
-
minedTxsFromReorg.push(txHash);
|
|
824
|
-
}
|
|
703
|
+
/**
|
|
704
|
+
* Returns true if the prune crossed a checkpoint boundary.
|
|
705
|
+
* If the old and new checkpoint numbers are the same, the prune is within a single checkpoint.
|
|
706
|
+
* If they differ, the prune spans across checkpoints (epoch prune).
|
|
707
|
+
*/
|
|
708
|
+
private async isEpochPrune(newCheckpoint: CheckpointId): Promise<boolean> {
|
|
709
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
710
|
+
const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
|
|
711
|
+
if (oldCheckpointNumber <= CheckpointNumber.ZERO) {
|
|
712
|
+
return false;
|
|
825
713
|
}
|
|
714
|
+
const isEpochPrune = oldCheckpointNumber !== newCheckpoint.number;
|
|
715
|
+
this.log.info(
|
|
716
|
+
`Detected epoch prune: ${isEpochPrune}. Old checkpoint: ${oldCheckpointNumber}, new checkpoint: ${newCheckpoint.number}`,
|
|
717
|
+
);
|
|
718
|
+
return isEpochPrune;
|
|
719
|
+
}
|
|
826
720
|
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
await this.txPool.markMinedAsPending(minedTxsFromReorg);
|
|
721
|
+
/** Checks if the slot has changed and calls prepareForSlot if so. */
|
|
722
|
+
private async maybeCallPrepareForSlot(): Promise<void> {
|
|
723
|
+
const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
724
|
+
if (currentSlot <= this.lastSlotProcessed) {
|
|
725
|
+
return;
|
|
833
726
|
}
|
|
834
|
-
|
|
835
|
-
await this.
|
|
836
|
-
// no need to update block hashes, as they will be updated as new blocks are added
|
|
727
|
+
this.lastSlotProcessed = currentSlot;
|
|
728
|
+
await this.txPool.prepareForSlot(currentSlot);
|
|
837
729
|
}
|
|
838
730
|
|
|
839
731
|
private async startServiceIfSynched() {
|
|
840
732
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
841
733
|
return;
|
|
842
734
|
}
|
|
843
|
-
const
|
|
844
|
-
const
|
|
845
|
-
const
|
|
735
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
736
|
+
const syncedFinalizedBlock = tips.finalized.block.number;
|
|
737
|
+
const syncedProvenBlock = tips.proven.block.number;
|
|
738
|
+
const syncedLatestBlock = tips.proposed.number;
|
|
846
739
|
|
|
847
740
|
if (
|
|
848
741
|
syncedLatestBlock >= this.latestBlockNumberAtStart &&
|
|
@@ -872,16 +765,28 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
872
765
|
this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
|
|
873
766
|
}
|
|
874
767
|
|
|
875
|
-
public
|
|
876
|
-
return this.p2pService.
|
|
768
|
+
public validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void> {
|
|
769
|
+
return this.p2pService.validateTxsReceivedInBlockProposal(txs);
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* Protects existing transactions by hash for a given slot.
|
|
774
|
+
* Returns hashes of transactions that weren't found in the pool.
|
|
775
|
+
* @param txHashes - Hashes of the transactions to protect.
|
|
776
|
+
* @param blockHeader - The block header providing slot context.
|
|
777
|
+
* @returns Hashes of transactions not found in the pool.
|
|
778
|
+
*/
|
|
779
|
+
public protectTxs(txHashes: TxHash[], blockHeader: BlockHeader): Promise<TxHash[]> {
|
|
780
|
+
return this.txPool.protectTxs(txHashes, blockHeader);
|
|
877
781
|
}
|
|
878
782
|
|
|
879
783
|
/**
|
|
880
|
-
*
|
|
881
|
-
*
|
|
784
|
+
* Prepares the pool for a new slot.
|
|
785
|
+
* Unprotects transactions from earlier slots and validates them.
|
|
786
|
+
* @param slotNumber - The slot number to prepare for
|
|
882
787
|
*/
|
|
883
|
-
public
|
|
884
|
-
|
|
788
|
+
public async prepareForSlot(slotNumber: SlotNumber): Promise<void> {
|
|
789
|
+
await this.txPool.prepareForSlot(slotNumber);
|
|
885
790
|
}
|
|
886
791
|
|
|
887
792
|
public handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage> {
|