@aztec/p2p 0.0.1-commit.9b94fc1 → 0.0.1-commit.9d2bcf6d
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 +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +11 -9
- package/dest/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +18 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +473 -129
- 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 +17 -8
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +15 -14
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- 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 +239 -265
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +17 -13
- package/dest/mem_pools/instrumentation.d.ts +7 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +31 -13
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +37 -27
- 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 +314 -335
- 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 +11 -6
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
- 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 +52 -19
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- 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/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 +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- 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 +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +22 -12
- 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 +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
- 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/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/test_utils.d.ts +2 -2
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- 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 +18 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +42 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -6
- 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 +39 -16
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +754 -191
- 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 +4 -12
- 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 +7 -4
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -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 +566 -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 +50 -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 +37 -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 +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -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 +139 -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 +4 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +1 -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/auth.d.ts +2 -2
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.js +2 -2
- package/dest/services/reqresp/protocols/block.d.ts +1 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +3 -2
- 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 +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 +16 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -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 +44 -14
- package/dest/services/reqresp/protocols/status.d.ts +5 -4
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +7 -3
- package/dest/services/reqresp/protocols/tx.d.ts +2 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- 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 +460 -46
- package/dest/services/service.d.ts +19 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +10 -2
- package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -6
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -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 +10 -13
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -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 +4 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +10 -9
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_file_store/config.d.ts +18 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +26 -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 +47 -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 +149 -0
- package/dest/services/tx_provider.d.ts +4 -2
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +11 -2
- package/dest/services/tx_provider_instrumentation.d.ts +5 -2
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +14 -14
- 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/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -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 +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -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 +218 -123
- 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/package.json +18 -18
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +15 -20
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +114 -155
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +25 -19
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +39 -14
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
- 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 +11 -5
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
- package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
- 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/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +67 -25
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
- 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/test_utils.ts +1 -1
- package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
- 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 +51 -0
- package/src/services/encoding.ts +6 -5
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +32 -73
- package/src/services/libp2p/libp2p_service.ts +425 -180
- package/src/services/peer-manager/metrics.ts +39 -21
- package/src/services/peer-manager/peer_manager.ts +5 -4
- package/src/services/peer-manager/peer_scoring.ts +3 -4
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -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 +4 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
- package/src/services/reqresp/protocols/status.ts +16 -12
- package/src/services/reqresp/protocols/tx.ts +1 -2
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +23 -4
- package/src/services/tx_collection/config.ts +16 -2
- package/src/services/tx_collection/fast_tx_collection.ts +39 -15
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +5 -13
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +3 -3
- package/src/services/tx_collection/tx_collection.ts +10 -9
- package/src/services/tx_file_store/config.ts +43 -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 +173 -0
- package/src/services/tx_provider.ts +19 -3
- package/src/services/tx_provider_instrumentation.ts +24 -14
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/mock-pubsub.ts +1 -1
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +338 -119
- package/src/testbench/worker_client_manager.ts +304 -42
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
- 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 -238
- 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/tx_pool/memory_tx_pool.ts +0 -283
- 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,31 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
|
-
import type { AztecAsyncKVStore,
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
L2BlockSource,
|
|
5
|
+
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
6
|
+
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
7
|
+
import {
|
|
8
|
+
type EthAddress,
|
|
9
|
+
type L2Block,
|
|
10
|
+
type L2BlockSource,
|
|
11
11
|
L2BlockStream,
|
|
12
|
-
L2BlockStreamEvent,
|
|
13
|
-
L2Tips,
|
|
14
|
-
|
|
12
|
+
type L2BlockStreamEvent,
|
|
13
|
+
type L2Tips,
|
|
14
|
+
type L2TipsStore,
|
|
15
15
|
} from '@aztec/stdlib/block';
|
|
16
16
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
17
17
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
18
18
|
import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
19
|
-
import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec/stdlib/p2p';
|
|
20
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
21
19
|
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
} from '@aztec/telemetry-client';
|
|
20
|
+
type BlockProposal,
|
|
21
|
+
CheckpointAttestation,
|
|
22
|
+
type CheckpointProposal,
|
|
23
|
+
type P2PClientType,
|
|
24
|
+
} from '@aztec/stdlib/p2p';
|
|
25
|
+
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
26
|
+
import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
29
27
|
|
|
30
28
|
import type { PeerId } from '@libp2p/interface';
|
|
31
29
|
import type { ENR } from '@nethermindeth/enr';
|
|
@@ -41,8 +39,9 @@ import {
|
|
|
41
39
|
type ReqRespSubProtocolValidators,
|
|
42
40
|
} from '../services/reqresp/interface.js';
|
|
43
41
|
import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
|
|
44
|
-
import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
|
|
42
|
+
import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
|
|
45
43
|
import { TxCollection } from '../services/tx_collection/tx_collection.js';
|
|
44
|
+
import type { TxFileStore } from '../services/tx_file_store/tx_file_store.js';
|
|
46
45
|
import { TxProvider } from '../services/tx_provider.js';
|
|
47
46
|
import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
|
|
48
47
|
|
|
@@ -63,14 +62,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
63
62
|
private provenBlockNumberAtStart = -1;
|
|
64
63
|
private finalizedBlockNumberAtStart = -1;
|
|
65
64
|
|
|
66
|
-
private
|
|
67
|
-
private synchedLatestBlockNumber: AztecAsyncSingleton<number>;
|
|
68
|
-
private synchedProvenBlockNumber: AztecAsyncSingleton<number>;
|
|
69
|
-
private synchedFinalizedBlockNumber: AztecAsyncSingleton<number>;
|
|
65
|
+
private l2Tips: L2TipsStore;
|
|
70
66
|
private synchedLatestSlot: AztecAsyncSingleton<bigint>;
|
|
71
67
|
|
|
72
68
|
private txPool: TxPool;
|
|
73
|
-
private attestationPool:
|
|
69
|
+
private attestationPool: AttestationPool;
|
|
74
70
|
|
|
75
71
|
private config: P2PConfig;
|
|
76
72
|
|
|
@@ -92,9 +88,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
92
88
|
_clientType: T,
|
|
93
89
|
private store: AztecAsyncKVStore,
|
|
94
90
|
private l2BlockSource: L2BlockSource & ContractDataSource,
|
|
95
|
-
mempools: MemPools
|
|
91
|
+
mempools: MemPools,
|
|
96
92
|
private p2pService: P2PService,
|
|
97
93
|
private txCollection: TxCollection,
|
|
94
|
+
private txFileStore: TxFileStore | undefined,
|
|
98
95
|
config: Partial<P2PConfig> = {},
|
|
99
96
|
private _dateProvider: DateProvider = new DateProvider(),
|
|
100
97
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
@@ -104,7 +101,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
104
101
|
|
|
105
102
|
this.config = { ...getP2PDefaultConfig(), ...config };
|
|
106
103
|
this.txPool = mempools.txPool;
|
|
107
|
-
this.attestationPool = mempools.attestationPool
|
|
104
|
+
this.attestationPool = mempools.attestationPool;
|
|
108
105
|
|
|
109
106
|
this.txProvider = new TxProvider(
|
|
110
107
|
this.txCollection,
|
|
@@ -115,7 +112,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
115
112
|
);
|
|
116
113
|
|
|
117
114
|
// Default to collecting all txs when we see a valid proposal
|
|
118
|
-
// This can be overridden by the validator client to
|
|
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.
|
|
119
117
|
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
120
118
|
// validator-client code into here so we can validate a proposal is reasonable.
|
|
121
119
|
this.registerBlockProposalHandler(async (block, sender) => {
|
|
@@ -124,21 +122,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
124
122
|
const constants = this.txCollection.getConstants();
|
|
125
123
|
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
126
124
|
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
127
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.
|
|
125
|
+
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
128
126
|
if (!parentBlock) {
|
|
129
127
|
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
130
|
-
return;
|
|
128
|
+
return false;
|
|
131
129
|
}
|
|
132
|
-
const blockNumber = parentBlock.getBlockNumber() + 1;
|
|
130
|
+
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
133
131
|
await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
|
|
134
|
-
return
|
|
132
|
+
return true;
|
|
135
133
|
});
|
|
136
134
|
|
|
137
|
-
|
|
138
|
-
this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
|
|
139
|
-
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
140
|
-
this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
|
|
141
|
-
this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
|
|
135
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
142
136
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
143
137
|
}
|
|
144
138
|
|
|
@@ -163,8 +157,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
163
157
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
164
158
|
}
|
|
165
159
|
|
|
166
|
-
public getL2BlockHash(number:
|
|
167
|
-
return this.
|
|
160
|
+
public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
|
|
161
|
+
return this.l2Tips.getL2BlockHash(number);
|
|
168
162
|
}
|
|
169
163
|
|
|
170
164
|
public updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
|
|
@@ -173,82 +167,45 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
173
167
|
return Promise.resolve();
|
|
174
168
|
}
|
|
175
169
|
|
|
176
|
-
public
|
|
177
|
-
|
|
178
|
-
let latestBlockHash: string | undefined;
|
|
179
|
-
|
|
180
|
-
const provenBlockNumber = await this.getSyncedProvenBlockNum();
|
|
181
|
-
let provenBlockHash: string | undefined;
|
|
182
|
-
|
|
183
|
-
const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
|
|
184
|
-
let finalizedBlockHash: string | undefined;
|
|
185
|
-
|
|
186
|
-
if (latestBlockNumber > 0) {
|
|
187
|
-
latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
|
|
188
|
-
if (typeof latestBlockHash === 'undefined') {
|
|
189
|
-
throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (provenBlockNumber > 0) {
|
|
194
|
-
provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
|
|
195
|
-
if (typeof provenBlockHash === 'undefined') {
|
|
196
|
-
throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (finalizedBlockNumber > 0) {
|
|
201
|
-
finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
|
|
202
|
-
if (typeof finalizedBlockHash === 'undefined') {
|
|
203
|
-
throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return {
|
|
208
|
-
latest: { hash: latestBlockHash!, number: latestBlockNumber },
|
|
209
|
-
proven: { hash: provenBlockHash!, number: provenBlockNumber },
|
|
210
|
-
finalized: { hash: finalizedBlockHash!, number: finalizedBlockNumber },
|
|
211
|
-
};
|
|
170
|
+
public getL2Tips(): Promise<L2Tips> {
|
|
171
|
+
return this.l2Tips.getL2Tips();
|
|
212
172
|
}
|
|
213
173
|
|
|
214
174
|
public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
|
|
215
175
|
this.log.debug(`Handling block stream event ${event.type}`);
|
|
176
|
+
|
|
216
177
|
switch (event.type) {
|
|
217
178
|
case 'blocks-added':
|
|
218
179
|
await this.handleLatestL2Blocks(event.blocks);
|
|
219
180
|
break;
|
|
220
181
|
case 'chain-finalized': {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
const from = (await this.getSyncedFinalizedBlockNum()) + 1;
|
|
182
|
+
const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
|
|
183
|
+
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
224
184
|
const limit = event.block.number - from + 1;
|
|
225
185
|
if (limit > 0) {
|
|
226
|
-
|
|
186
|
+
const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
|
|
187
|
+
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
227
188
|
}
|
|
228
189
|
break;
|
|
229
190
|
}
|
|
230
|
-
case 'chain-proven':
|
|
231
|
-
await this.setBlockHash(event.block);
|
|
191
|
+
case 'chain-proven':
|
|
232
192
|
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
233
|
-
await this.synchedProvenBlockNumber.set(event.block.number);
|
|
234
193
|
break;
|
|
235
|
-
}
|
|
236
194
|
case 'chain-pruned':
|
|
237
|
-
await this.setBlockHash(event.block);
|
|
238
195
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
239
196
|
await this.handlePruneL2Blocks(event.block.number);
|
|
240
197
|
break;
|
|
198
|
+
case 'chain-checkpointed':
|
|
199
|
+
break;
|
|
241
200
|
default: {
|
|
242
201
|
const _: never = event;
|
|
243
202
|
break;
|
|
244
203
|
}
|
|
245
204
|
}
|
|
246
|
-
}
|
|
247
205
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
206
|
+
// Pass the event through to our l2 tips store
|
|
207
|
+
await this.l2Tips.handleBlockStreamEvent(event);
|
|
208
|
+
await this.startServiceIfSynched();
|
|
252
209
|
}
|
|
253
210
|
|
|
254
211
|
#assertIsReady() {
|
|
@@ -272,20 +229,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
272
229
|
|
|
273
230
|
// get the current latest block numbers
|
|
274
231
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
275
|
-
this.latestBlockNumberAtStart = latestBlockNumbers.
|
|
276
|
-
this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
|
|
277
|
-
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
|
|
232
|
+
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
233
|
+
this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
|
|
234
|
+
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
|
|
278
235
|
|
|
279
236
|
const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
|
|
280
237
|
const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
|
|
281
238
|
const syncedFinalizedBlock = (await this.getSyncedFinalizedBlockNum()) + 1;
|
|
282
239
|
|
|
283
|
-
if (
|
|
284
|
-
(await this.txPool.isEmpty()) &&
|
|
285
|
-
(this.attestationPool === undefined || (await this.attestationPool?.isEmpty()))
|
|
286
|
-
) {
|
|
240
|
+
if ((await this.txPool.isEmpty()) && (await this.attestationPool.isEmpty())) {
|
|
287
241
|
// if mempools are empty, we don't care about syncing prior blocks
|
|
288
|
-
this.initBlockStream(this.latestBlockNumberAtStart);
|
|
242
|
+
this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
|
|
289
243
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
290
244
|
this.syncPromise = Promise.resolve();
|
|
291
245
|
await this.p2pService.start();
|
|
@@ -322,6 +276,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
322
276
|
|
|
323
277
|
this.blockStream!.start();
|
|
324
278
|
await this.txCollection.start();
|
|
279
|
+
this.txFileStore?.start();
|
|
325
280
|
return this.syncPromise;
|
|
326
281
|
}
|
|
327
282
|
|
|
@@ -333,15 +288,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
333
288
|
return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
|
|
334
289
|
}
|
|
335
290
|
|
|
336
|
-
private initBlockStream(startingBlock?:
|
|
291
|
+
private initBlockStream(startingBlock?: BlockNumber) {
|
|
337
292
|
if (!this.blockStream) {
|
|
338
293
|
const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
|
|
339
|
-
this.blockStream = new
|
|
294
|
+
this.blockStream = new L2BlockStream(
|
|
340
295
|
this.l2BlockSource,
|
|
341
296
|
this,
|
|
342
297
|
this,
|
|
343
|
-
this.telemetry.getTracer('P2PL2BlockStream'),
|
|
344
|
-
'P2PL2BlockStream',
|
|
345
298
|
createLogger(`${this.log.module}:l2-block-stream`),
|
|
346
299
|
{ batchSize, pollIntervalMS, startingBlock },
|
|
347
300
|
);
|
|
@@ -356,6 +309,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
356
309
|
this.log.debug('Stopping p2p client...');
|
|
357
310
|
await tryStop(this.txCollection);
|
|
358
311
|
this.log.debug('Stopped tx collection service');
|
|
312
|
+
await this.txFileStore?.stop();
|
|
313
|
+
this.log.debug('Stopped tx file store');
|
|
359
314
|
await this.p2pService.stop();
|
|
360
315
|
this.log.debug('Stopped p2p service');
|
|
361
316
|
await this.blockStream?.stop();
|
|
@@ -376,30 +331,44 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
376
331
|
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
377
332
|
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
|
|
378
333
|
}))
|
|
379
|
-
public broadcastProposal(proposal: BlockProposal): Promise<void> {
|
|
334
|
+
public async broadcastProposal(proposal: BlockProposal): Promise<void> {
|
|
380
335
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
336
|
+
// Store our own proposal so we can respond to req/resp requests for it
|
|
337
|
+
await this.attestationPool.addBlockProposal(proposal);
|
|
381
338
|
return this.p2pService.propagate(proposal);
|
|
382
339
|
}
|
|
383
340
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
341
|
+
@trackSpan('p2pClient.broadcastCheckpointProposal', async proposal => ({
|
|
342
|
+
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
343
|
+
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
344
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
|
|
345
|
+
}))
|
|
346
|
+
public async broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
|
|
347
|
+
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
348
|
+
const blockProposal = proposal.getBlockProposal();
|
|
349
|
+
if (blockProposal) {
|
|
350
|
+
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
351
|
+
await this.attestationPool.addBlockProposal(blockProposal);
|
|
352
|
+
}
|
|
353
|
+
return this.p2pService.propagate(proposal);
|
|
387
354
|
}
|
|
388
355
|
|
|
389
|
-
public async
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
? this.attestationPool?.getAttestationsForSlotAndProposal(slot, proposalId)
|
|
393
|
-
: this.attestationPool?.getAttestationsForSlot(slot))) ?? []
|
|
394
|
-
);
|
|
356
|
+
public async broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
|
|
357
|
+
this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
|
|
358
|
+
await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
|
|
395
359
|
}
|
|
396
360
|
|
|
397
|
-
public
|
|
398
|
-
|
|
361
|
+
public async getCheckpointAttestationsForSlot(
|
|
362
|
+
slot: SlotNumber,
|
|
363
|
+
proposalId?: string,
|
|
364
|
+
): Promise<CheckpointAttestation[]> {
|
|
365
|
+
return await (proposalId
|
|
366
|
+
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
|
|
367
|
+
: this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
399
368
|
}
|
|
400
369
|
|
|
401
|
-
public
|
|
402
|
-
return this.attestationPool
|
|
370
|
+
public addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
|
|
371
|
+
return this.attestationPool.addCheckpointAttestations(attestations);
|
|
403
372
|
}
|
|
404
373
|
|
|
405
374
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
@@ -408,6 +377,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
408
377
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
409
378
|
}
|
|
410
379
|
|
|
380
|
+
public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
381
|
+
this.p2pService.registerCheckpointReceivedCallback(handler);
|
|
382
|
+
}
|
|
383
|
+
|
|
411
384
|
/**
|
|
412
385
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
413
386
|
*/
|
|
@@ -649,20 +622,23 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
649
622
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
650
623
|
* @returns Block number of latest L2 Block we've synced with.
|
|
651
624
|
*/
|
|
652
|
-
public async getSyncedLatestBlockNum(): Promise<
|
|
653
|
-
|
|
625
|
+
public async getSyncedLatestBlockNum(): Promise<BlockNumber> {
|
|
626
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
627
|
+
return tips.proposed.number;
|
|
654
628
|
}
|
|
655
629
|
|
|
656
630
|
/**
|
|
657
631
|
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
658
632
|
* @returns Block number of latest proven L2 Block we've synced with.
|
|
659
633
|
*/
|
|
660
|
-
public async getSyncedProvenBlockNum(): Promise<
|
|
661
|
-
|
|
634
|
+
public async getSyncedProvenBlockNum(): Promise<BlockNumber> {
|
|
635
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
636
|
+
return tips.proven.block.number;
|
|
662
637
|
}
|
|
663
638
|
|
|
664
|
-
public async getSyncedFinalizedBlockNum(): Promise<
|
|
665
|
-
|
|
639
|
+
public async getSyncedFinalizedBlockNum(): Promise<BlockNumber> {
|
|
640
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
641
|
+
return tips.finalized.block.number;
|
|
666
642
|
}
|
|
667
643
|
|
|
668
644
|
/** Returns latest L2 slot for which we have seen an L2 block. */
|
|
@@ -678,7 +654,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
678
654
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
679
655
|
const blockHash =
|
|
680
656
|
blockNumber === 0
|
|
681
|
-
?
|
|
657
|
+
? GENESIS_BLOCK_HEADER_HASH.toString()
|
|
682
658
|
: await this.l2BlockSource
|
|
683
659
|
.getBlockHeader(blockNumber)
|
|
684
660
|
.then(header => header?.hash())
|
|
@@ -686,8 +662,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
686
662
|
|
|
687
663
|
return {
|
|
688
664
|
state: this.currentState,
|
|
689
|
-
syncedToL2Block: { number: blockNumber, hash: blockHash },
|
|
690
|
-
}
|
|
665
|
+
syncedToL2Block: { number: blockNumber, hash: blockHash! },
|
|
666
|
+
};
|
|
691
667
|
}
|
|
692
668
|
|
|
693
669
|
/**
|
|
@@ -698,7 +674,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
698
674
|
private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
|
|
699
675
|
for (const block of blocks) {
|
|
700
676
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
701
|
-
await this.txPool.markAsMined(txHashes, block.
|
|
677
|
+
await this.txPool.markAsMined(txHashes, block.header);
|
|
702
678
|
}
|
|
703
679
|
}
|
|
704
680
|
|
|
@@ -707,29 +683,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
707
683
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
708
684
|
* @returns Empty promise.
|
|
709
685
|
*/
|
|
710
|
-
private async handleLatestL2Blocks(blocks:
|
|
686
|
+
private async handleLatestL2Blocks(blocks: L2Block[]): Promise<void> {
|
|
711
687
|
if (!blocks.length) {
|
|
712
688
|
return Promise.resolve();
|
|
713
689
|
}
|
|
714
690
|
|
|
715
|
-
await this.markTxsAsMinedFromBlocks(blocks
|
|
716
|
-
await this.
|
|
717
|
-
|
|
718
|
-
const lastBlock = blocks.at(-1)!.block;
|
|
691
|
+
await this.markTxsAsMinedFromBlocks(blocks);
|
|
692
|
+
await this.txPool.clearNonEvictableTxs();
|
|
693
|
+
await this.startCollectingMissingTxs(blocks);
|
|
719
694
|
|
|
720
|
-
|
|
721
|
-
blocks.map(async block =>
|
|
722
|
-
this.setBlockHash({
|
|
723
|
-
number: block.block.number,
|
|
724
|
-
hash: await block.block.hash().then(h => h.toString()),
|
|
725
|
-
}),
|
|
726
|
-
),
|
|
727
|
-
);
|
|
728
|
-
|
|
729
|
-
await this.synchedLatestBlockNumber.set(lastBlock.number);
|
|
695
|
+
const lastBlock = blocks.at(-1)!;
|
|
730
696
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
731
697
|
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
732
|
-
await this.startServiceIfSynched();
|
|
733
698
|
}
|
|
734
699
|
|
|
735
700
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */
|
|
@@ -780,19 +745,16 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
780
745
|
await this.txPool.deleteTxs(txHashes, { permanently: true });
|
|
781
746
|
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
782
747
|
|
|
783
|
-
await this.attestationPool
|
|
748
|
+
await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
|
|
784
749
|
|
|
785
|
-
await this.synchedFinalizedBlockNumber.set(lastBlockNum);
|
|
786
750
|
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
787
|
-
|
|
788
|
-
await this.startServiceIfSynched();
|
|
789
751
|
}
|
|
790
752
|
|
|
791
753
|
/**
|
|
792
754
|
* Updates the tx pool after a chain prune.
|
|
793
755
|
* @param latestBlock - The block number the chain was pruned to.
|
|
794
756
|
*/
|
|
795
|
-
private async handlePruneL2Blocks(latestBlock:
|
|
757
|
+
private async handlePruneL2Blocks(latestBlock: BlockNumber): Promise<void> {
|
|
796
758
|
const txsToDelete = new Map<string, TxHash>();
|
|
797
759
|
const minedTxs = await this.txPool.getMinedTxHashes();
|
|
798
760
|
|
|
@@ -831,21 +793,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
831
793
|
this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
|
|
832
794
|
await this.txPool.deleteTxs(minedTxsFromReorg);
|
|
833
795
|
} else {
|
|
834
|
-
this.
|
|
835
|
-
await this.txPool.markMinedAsPending(minedTxsFromReorg);
|
|
796
|
+
await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
|
|
836
797
|
}
|
|
837
|
-
|
|
838
|
-
await this.synchedLatestBlockNumber.set(latestBlock);
|
|
839
|
-
// no need to update block hashes, as they will be updated as new blocks are added
|
|
840
798
|
}
|
|
841
799
|
|
|
842
800
|
private async startServiceIfSynched() {
|
|
843
801
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
844
802
|
return;
|
|
845
803
|
}
|
|
846
|
-
const
|
|
847
|
-
const
|
|
848
|
-
const
|
|
804
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
805
|
+
const syncedFinalizedBlock = tips.finalized.block.number;
|
|
806
|
+
const syncedProvenBlock = tips.proven.block.number;
|
|
807
|
+
const syncedLatestBlock = tips.proposed.number;
|
|
849
808
|
|
|
850
809
|
if (
|
|
851
810
|
syncedLatestBlock >= this.latestBlockNumberAtStart &&
|