@aztec/p2p 5.0.0-private.20260319 → 5.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +4 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +33 -24
- package/dest/client/interface.d.ts +43 -11
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +33 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +100 -44
- package/dest/config.d.ts +137 -107
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +64 -23
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -196
- 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 +175 -59
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +17 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +22 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +10 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +8 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +7 -4
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +8 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +153 -111
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +77 -14
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +36 -17
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
- 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/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +119 -23
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +15 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +15 -16
- package/dest/services/encoding.d.ts +8 -8
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +11 -15
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +44 -39
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +383 -278
- package/dest/services/peer-manager/peer_manager.d.ts +20 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +79 -23
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +102 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +26 -207
- package/dest/services/service.d.ts +25 -12
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/tx_collection.d.ts +35 -51
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +13 -8
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +23 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +44 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +14 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +25 -13
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +102 -41
- package/dest/testbench/worker_client_manager.d.ts +10 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +51 -9
- package/dest/util.d.ts +11 -6
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +52 -24
- package/src/client/interface.ts +38 -17
- package/src/client/p2p_client.ts +118 -76
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +130 -31
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +319 -238
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +5 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +18 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +12 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +8 -4
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +163 -117
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
- package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -11
- package/src/msg_validators/tx_validator/README.md +13 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +44 -1
- package/src/msg_validators/tx_validator/factory.ts +44 -20
- package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +20 -39
- package/src/services/encoding.ts +11 -21
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +436 -311
- package/src/services/peer-manager/peer_manager.ts +86 -22
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +0 -14
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
- package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +29 -252
- package/src/services/service.ts +31 -28
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/tx_collection.ts +330 -173
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +10 -8
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +3 -0
- package/src/test-helpers/mock-pubsub.ts +46 -60
- package/src/test-helpers/reqresp-nodes.ts +12 -22
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +31 -26
- package/src/testbench/p2p_client_testbench_worker.ts +110 -55
- package/src/testbench/worker_client_manager.ts +59 -20
- package/src/util.ts +32 -17
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
- package/dest/msg_validators/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -38
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -311
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
- package/src/msg_validators/clock_tolerance.ts +0 -52
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -361
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
package/src/client/interface.ts
CHANGED
|
@@ -9,15 +9,13 @@ import type { ENR } from '@nethermindeth/enr';
|
|
|
9
9
|
|
|
10
10
|
import type { P2PConfig } from '../config.js';
|
|
11
11
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
12
|
-
import type {
|
|
13
|
-
ReqRespSubProtocol,
|
|
14
|
-
ReqRespSubProtocolHandler,
|
|
15
|
-
ReqRespSubProtocolValidators,
|
|
16
|
-
} from '../services/reqresp/interface.js';
|
|
12
|
+
import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
|
|
17
13
|
import type {
|
|
18
14
|
DuplicateAttestationInfo,
|
|
19
15
|
DuplicateProposalInfo,
|
|
16
|
+
OversizedProposalInfo,
|
|
20
17
|
P2PBlockReceivedCallback,
|
|
18
|
+
P2PCheckpointAttestationCallback,
|
|
21
19
|
P2PCheckpointReceivedCallback,
|
|
22
20
|
} from '../services/service.js';
|
|
23
21
|
|
|
@@ -82,7 +80,15 @@ export type P2P = P2PClient & {
|
|
|
82
80
|
*
|
|
83
81
|
* @param handler - A function taking a received checkpoint proposal and producing attestations
|
|
84
82
|
*/
|
|
85
|
-
|
|
83
|
+
registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
|
|
87
|
+
* Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
|
|
88
|
+
*
|
|
89
|
+
* @param handler - A function taking a received checkpoint proposal
|
|
90
|
+
*/
|
|
91
|
+
registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
86
92
|
|
|
87
93
|
/**
|
|
88
94
|
* Registers a callback invoked when a duplicate proposal is detected (equivocation).
|
|
@@ -92,6 +98,14 @@ export type P2P = P2PClient & {
|
|
|
92
98
|
*/
|
|
93
99
|
registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
|
|
94
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Registers a callback invoked when an oversized block proposal (index at or beyond the consensus
|
|
103
|
+
* per-checkpoint block limit) is stored and re-broadcast as slashing evidence.
|
|
104
|
+
*
|
|
105
|
+
* @param callback - Function called with info about the oversized proposal
|
|
106
|
+
*/
|
|
107
|
+
registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void;
|
|
108
|
+
|
|
95
109
|
/**
|
|
96
110
|
* Registers a callback invoked when a duplicate attestation is detected (equivocation).
|
|
97
111
|
* A validator signing attestations for different proposals at the same slot.
|
|
@@ -101,6 +115,9 @@ export type P2P = P2PClient & {
|
|
|
101
115
|
*/
|
|
102
116
|
registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
|
|
103
117
|
|
|
118
|
+
/** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
|
|
119
|
+
registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
|
|
120
|
+
|
|
104
121
|
/**
|
|
105
122
|
* Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
|
|
106
123
|
* @param tx - The transaction.
|
|
@@ -116,16 +133,18 @@ export type P2P = P2PClient & {
|
|
|
116
133
|
/**
|
|
117
134
|
* Returns a transaction in the transaction pool by its hash.
|
|
118
135
|
* @param txHash - Hash of tx to return.
|
|
136
|
+
* @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
|
|
119
137
|
* @returns A single tx or undefined.
|
|
120
138
|
*/
|
|
121
|
-
getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
|
|
139
|
+
getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined>;
|
|
122
140
|
|
|
123
141
|
/**
|
|
124
142
|
* Returns transactions in the transaction pool by hash.
|
|
125
143
|
* @param txHashes - Hashes of txs to return.
|
|
144
|
+
* @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
126
145
|
* @returns An array of txs or undefined.
|
|
127
146
|
*/
|
|
128
|
-
getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
147
|
+
getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]>;
|
|
129
148
|
|
|
130
149
|
/**
|
|
131
150
|
* Checks if transactions exist in the pool
|
|
@@ -148,11 +167,17 @@ export type P2P = P2PClient & {
|
|
|
148
167
|
*/
|
|
149
168
|
getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
|
|
150
169
|
|
|
151
|
-
/**
|
|
152
|
-
|
|
170
|
+
/**
|
|
171
|
+
* Returns an iterator over pending txs on the mempool.
|
|
172
|
+
* Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
173
|
+
*/
|
|
174
|
+
iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
|
|
153
175
|
|
|
154
|
-
/**
|
|
155
|
-
|
|
176
|
+
/**
|
|
177
|
+
* Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building.
|
|
178
|
+
* Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
179
|
+
*/
|
|
180
|
+
iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx>;
|
|
156
181
|
|
|
157
182
|
/** Returns the number of pending txs in the mempool. */
|
|
158
183
|
getPendingTxCount(): Promise<number>;
|
|
@@ -216,11 +241,7 @@ export type P2P = P2PClient & {
|
|
|
216
241
|
/** Clears the db. */
|
|
217
242
|
clear(): Promise<void>;
|
|
218
243
|
|
|
219
|
-
addReqRespSubProtocol(
|
|
220
|
-
subProtocol: ReqRespSubProtocol,
|
|
221
|
-
handler: ReqRespSubProtocolHandler,
|
|
222
|
-
validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
223
|
-
): Promise<void>;
|
|
244
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
|
|
224
245
|
|
|
225
246
|
handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
|
|
226
247
|
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
2
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
BlockNumber,
|
|
4
|
+
CheckpointNumber,
|
|
5
|
+
type CheckpointProposalHash,
|
|
6
|
+
SlotNumber,
|
|
7
|
+
} from '@aztec/foundation/branded-types';
|
|
4
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import { RunningPromise } from '@aztec/foundation/promise';
|
|
6
9
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
7
10
|
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
8
11
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
9
12
|
import {
|
|
13
|
+
type BlockData,
|
|
14
|
+
type BlockHash,
|
|
10
15
|
type CheckpointId,
|
|
11
16
|
type EthAddress,
|
|
12
17
|
type L2Block,
|
|
@@ -14,11 +19,12 @@ import {
|
|
|
14
19
|
type L2BlockSource,
|
|
15
20
|
L2BlockStream,
|
|
16
21
|
type L2BlockStreamEvent,
|
|
17
|
-
type L2Tips,
|
|
18
22
|
type L2TipsStore,
|
|
23
|
+
type LocalL2Tips,
|
|
19
24
|
} from '@aztec/stdlib/block';
|
|
20
25
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
21
|
-
import {
|
|
26
|
+
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
27
|
+
import { type GetTxByHashOptions, type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
|
|
22
28
|
import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type TopicType } from '@aztec/stdlib/p2p';
|
|
23
29
|
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
24
30
|
import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -28,18 +34,15 @@ import type { ENR } from '@nethermindeth/enr';
|
|
|
28
34
|
|
|
29
35
|
import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
|
|
30
36
|
import { TxPoolError } from '../errors/tx-pool.error.js';
|
|
31
|
-
import type { AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
37
|
+
import type { AttestationPoolApi, ProposalsForSlot } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
32
38
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
33
39
|
import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
34
40
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
35
|
-
import {
|
|
36
|
-
ReqRespSubProtocol,
|
|
37
|
-
type ReqRespSubProtocolHandler,
|
|
38
|
-
type ReqRespSubProtocolValidators,
|
|
39
|
-
} from '../services/reqresp/interface.js';
|
|
41
|
+
import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../services/reqresp/interface.js';
|
|
40
42
|
import type {
|
|
41
43
|
DuplicateAttestationInfo,
|
|
42
44
|
DuplicateProposalInfo,
|
|
45
|
+
OversizedProposalInfo,
|
|
43
46
|
P2PBlockReceivedCallback,
|
|
44
47
|
P2PCheckpointReceivedCallback,
|
|
45
48
|
P2PService,
|
|
@@ -80,9 +83,6 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
80
83
|
/** Tracks the last slot for which we called prepareForSlot */
|
|
81
84
|
private lastSlotProcessed: SlotNumber = SlotNumber.ZERO;
|
|
82
85
|
|
|
83
|
-
/** Polls for slot changes and calls prepareForSlot on the tx pool */
|
|
84
|
-
private slotMonitor: RunningPromise | undefined;
|
|
85
|
-
|
|
86
86
|
constructor(
|
|
87
87
|
private store: AztecAsyncKVStore,
|
|
88
88
|
private l2BlockSource: L2BlockSource & ContractDataSource,
|
|
@@ -95,6 +95,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
95
95
|
private _dateProvider: DateProvider = new DateProvider(),
|
|
96
96
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
97
97
|
private log = createLogger('p2p'),
|
|
98
|
+
initialBlockHash: BlockHash,
|
|
98
99
|
) {
|
|
99
100
|
super(telemetry, 'P2PClient');
|
|
100
101
|
|
|
@@ -110,7 +111,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
110
111
|
this.telemetry,
|
|
111
112
|
);
|
|
112
113
|
|
|
113
|
-
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
114
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
|
|
114
115
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
115
116
|
}
|
|
116
117
|
|
|
@@ -148,7 +149,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
148
149
|
this.p2pService.updateConfig(config);
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
public getL2Tips(): Promise<
|
|
152
|
+
public getL2Tips(): Promise<LocalL2Tips> {
|
|
152
153
|
return this.l2Tips.getL2Tips();
|
|
153
154
|
}
|
|
154
155
|
|
|
@@ -164,7 +165,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
164
165
|
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
165
166
|
const limit = event.block.number - from + 1;
|
|
166
167
|
if (limit > 0) {
|
|
167
|
-
const oldBlocks = await this.l2BlockSource.
|
|
168
|
+
const oldBlocks = await this.l2BlockSource.getBlocksData({ from, limit });
|
|
168
169
|
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
169
170
|
}
|
|
170
171
|
break;
|
|
@@ -174,10 +175,12 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
174
175
|
break;
|
|
175
176
|
case 'chain-pruned':
|
|
176
177
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
177
|
-
await this.handlePruneL2Blocks(event.block, event.checkpoint);
|
|
178
|
+
await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
|
|
178
179
|
break;
|
|
179
180
|
case 'chain-checkpointed':
|
|
180
181
|
break;
|
|
182
|
+
case 'chain-proposed':
|
|
183
|
+
break;
|
|
181
184
|
default: {
|
|
182
185
|
const _: never = event;
|
|
183
186
|
break;
|
|
@@ -257,27 +260,18 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
257
260
|
});
|
|
258
261
|
}
|
|
259
262
|
|
|
260
|
-
|
|
261
|
-
|
|
263
|
+
// Should never happen: all branches above call initBlockStream()
|
|
264
|
+
if (!this.blockStream) {
|
|
265
|
+
throw new Error('Block stream not initialized');
|
|
266
|
+
}
|
|
267
|
+
this.blockStream.start();
|
|
262
268
|
this.txFileStore?.start();
|
|
263
269
|
|
|
264
|
-
// Start slot monitor to call prepareForSlot when the slot changes
|
|
265
|
-
this.slotMonitor = new RunningPromise(
|
|
266
|
-
() => this.maybeCallPrepareForSlot(),
|
|
267
|
-
this.log,
|
|
268
|
-
this.config.slotCheckIntervalMS,
|
|
269
|
-
);
|
|
270
|
-
this.slotMonitor.start();
|
|
271
|
-
|
|
272
270
|
return this.syncPromise;
|
|
273
271
|
}
|
|
274
272
|
|
|
275
|
-
addReqRespSubProtocol(
|
|
276
|
-
subProtocol
|
|
277
|
-
handler: ReqRespSubProtocolHandler,
|
|
278
|
-
validator: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
279
|
-
): Promise<void> {
|
|
280
|
-
return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
|
|
273
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
274
|
+
return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
|
|
281
275
|
}
|
|
282
276
|
|
|
283
277
|
private initBlockStream(startingBlock?: BlockNumber) {
|
|
@@ -299,8 +293,6 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
299
293
|
*/
|
|
300
294
|
public async stop() {
|
|
301
295
|
this.log.debug('Stopping p2p client...');
|
|
302
|
-
await this.slotMonitor?.stop();
|
|
303
|
-
this.log.debug('Stopped slot monitor');
|
|
304
296
|
await tryStop(this.txCollection);
|
|
305
297
|
this.log.debug('Stopped tx collection service');
|
|
306
298
|
await this.txFileStore?.stop();
|
|
@@ -319,7 +311,11 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
319
311
|
/** Triggers a sync to the archiver. Used for testing. */
|
|
320
312
|
public async sync() {
|
|
321
313
|
this.initBlockStream();
|
|
322
|
-
|
|
314
|
+
// Should never happen: initBlockStream() creates blockStream if absent
|
|
315
|
+
if (!this.blockStream) {
|
|
316
|
+
throw new Error('Block stream not initialized');
|
|
317
|
+
}
|
|
318
|
+
await this.blockStream.sync();
|
|
323
319
|
}
|
|
324
320
|
|
|
325
321
|
@trackSpan('p2pClient.broadcastProposal', async proposal => ({
|
|
@@ -357,6 +353,19 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
357
353
|
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
358
354
|
await this.attestationPool.tryAddBlockProposal(blockProposal);
|
|
359
355
|
}
|
|
356
|
+
const checkpointCore = proposal.toCore();
|
|
357
|
+
const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
|
|
358
|
+
if (count > 1) {
|
|
359
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
360
|
+
this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
|
|
361
|
+
slot: proposal.slotNumber,
|
|
362
|
+
archive: proposal.archive.toString(),
|
|
363
|
+
count,
|
|
364
|
+
});
|
|
365
|
+
} else {
|
|
366
|
+
throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
360
369
|
return this.p2pService.propagate(proposal);
|
|
361
370
|
}
|
|
362
371
|
|
|
@@ -367,10 +376,10 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
367
376
|
|
|
368
377
|
public async getCheckpointAttestationsForSlot(
|
|
369
378
|
slot: SlotNumber,
|
|
370
|
-
|
|
379
|
+
proposalPayloadHash?: CheckpointProposalHash,
|
|
371
380
|
): Promise<CheckpointAttestation[]> {
|
|
372
|
-
return await (
|
|
373
|
-
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot,
|
|
381
|
+
return await (proposalPayloadHash
|
|
382
|
+
? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash)
|
|
374
383
|
: this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
375
384
|
}
|
|
376
385
|
|
|
@@ -378,29 +387,49 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
378
387
|
return this.attestationPool.addOwnCheckpointAttestations(attestations);
|
|
379
388
|
}
|
|
380
389
|
|
|
390
|
+
public getProposalsForSlot(slot: SlotNumber): Promise<ProposalsForSlot> {
|
|
391
|
+
return this.attestationPool.getProposalsForSlot(slot);
|
|
392
|
+
}
|
|
393
|
+
|
|
381
394
|
public hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean> {
|
|
382
395
|
return this.attestationPool.hasBlockProposalsForSlot(slot);
|
|
383
396
|
}
|
|
384
397
|
|
|
398
|
+
public hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
|
|
399
|
+
return this.attestationPool.hasCheckpointProposalForSlot(slot);
|
|
400
|
+
}
|
|
401
|
+
|
|
385
402
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
386
403
|
// ^ This pattern is not my favorite (md)
|
|
387
404
|
public registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void {
|
|
388
405
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
389
406
|
}
|
|
390
407
|
|
|
391
|
-
public
|
|
392
|
-
this.p2pService.
|
|
408
|
+
public registerValidatorCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
409
|
+
this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
public registerAllNodesCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
|
|
413
|
+
this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
|
|
393
414
|
}
|
|
394
415
|
|
|
395
416
|
public registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void {
|
|
396
417
|
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
397
418
|
}
|
|
398
419
|
|
|
420
|
+
public registerOversizedProposalCallback(callback: (info: OversizedProposalInfo) => void): void {
|
|
421
|
+
this.p2pService.registerOversizedProposalCallback(callback);
|
|
422
|
+
}
|
|
423
|
+
|
|
399
424
|
public registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void {
|
|
400
425
|
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
401
426
|
}
|
|
402
427
|
|
|
403
|
-
public
|
|
428
|
+
public registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void {
|
|
429
|
+
this.p2pService.registerCheckpointAttestationCallback(callback);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
public async getPendingTxs(limit?: number, after?: TxHash, options?: GetTxByHashOptions): Promise<Tx[]> {
|
|
404
433
|
if (limit !== undefined && limit <= 0) {
|
|
405
434
|
throw new TypeError('limit must be greater than 0');
|
|
406
435
|
}
|
|
@@ -419,7 +448,9 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
419
448
|
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
420
449
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
421
450
|
|
|
422
|
-
|
|
451
|
+
// This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
|
|
452
|
+
const includeProof = !!options?.includeProof;
|
|
453
|
+
const maybeTxs = await Promise.all(txHashes.map(txHash => this.txPool.getTxByHash(txHash, { includeProof })));
|
|
423
454
|
return maybeTxs.filter((tx): tx is Tx => !!tx);
|
|
424
455
|
}
|
|
425
456
|
|
|
@@ -427,18 +458,18 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
427
458
|
return this.txPool.getPendingTxCount();
|
|
428
459
|
}
|
|
429
460
|
|
|
430
|
-
public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
|
|
461
|
+
public async *iteratePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
|
|
431
462
|
for (const txHash of await this.txPool.getPendingTxHashes()) {
|
|
432
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
463
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
433
464
|
if (tx) {
|
|
434
465
|
yield tx;
|
|
435
466
|
}
|
|
436
467
|
}
|
|
437
468
|
}
|
|
438
469
|
|
|
439
|
-
public async *iterateEligiblePendingTxs(): AsyncIterableIterator<Tx> {
|
|
470
|
+
public async *iterateEligiblePendingTxs(opts?: { includeProof?: boolean }): AsyncIterableIterator<Tx> {
|
|
440
471
|
for (const txHash of await this.txPool.getEligiblePendingTxHashes()) {
|
|
441
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
472
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
442
473
|
if (tx) {
|
|
443
474
|
yield tx;
|
|
444
475
|
}
|
|
@@ -448,19 +479,21 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
448
479
|
/**
|
|
449
480
|
* Returns a transaction in the transaction pool by its hash.
|
|
450
481
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
482
|
+
* @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
|
|
451
483
|
* @returns A single tx or undefined.
|
|
452
484
|
*/
|
|
453
|
-
getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
|
|
454
|
-
return this.txPool.getTxByHash(txHash);
|
|
485
|
+
getTxByHashFromPool(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
|
|
486
|
+
return this.txPool.getTxByHash(txHash, opts);
|
|
455
487
|
}
|
|
456
488
|
|
|
457
489
|
/**
|
|
458
490
|
* Returns transactions in the transaction pool by hash.
|
|
459
491
|
* @param txHashes - Hashes of the transactions to look for.
|
|
492
|
+
* @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
460
493
|
* @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
|
|
461
494
|
*/
|
|
462
|
-
getTxsByHashFromPool(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
|
|
463
|
-
return this.txPool.getTxsByHash(txHashes);
|
|
495
|
+
getTxsByHashFromPool(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
|
|
496
|
+
return this.txPool.getTxsByHash(txHashes, opts);
|
|
464
497
|
}
|
|
465
498
|
|
|
466
499
|
hasTxsInPool(txHashes: TxHash[]): Promise<boolean[]> {
|
|
@@ -570,13 +603,10 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
570
603
|
*/
|
|
571
604
|
public async getStatus(): Promise<P2PSyncState> {
|
|
572
605
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
573
|
-
const blockHash =
|
|
574
|
-
blockNumber
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
.getBlockHeader(blockNumber)
|
|
578
|
-
.then(header => header?.hash())
|
|
579
|
-
.then(hash => hash?.toString());
|
|
606
|
+
const blockHash = await this.l2BlockSource
|
|
607
|
+
.getBlockData({ number: blockNumber })
|
|
608
|
+
.then(data => data?.header.hash())
|
|
609
|
+
.then(hash => hash?.toString());
|
|
580
610
|
|
|
581
611
|
return {
|
|
582
612
|
state: this.currentState,
|
|
@@ -605,15 +635,20 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
605
635
|
return;
|
|
606
636
|
}
|
|
607
637
|
|
|
608
|
-
await this.handleMinedBlocks(blocks);
|
|
609
|
-
await this.maybeCallPrepareForSlot();
|
|
610
|
-
await this.startCollectingMissingTxs(blocks);
|
|
611
638
|
const lastBlock = blocks.at(-1)!;
|
|
612
|
-
|
|
639
|
+
const lastSlot = lastBlock.header.getSlot();
|
|
640
|
+
|
|
641
|
+
// Mark txs mined before releasing protections: a block landing at this slot supersedes any
|
|
642
|
+
// protection for txs it includes, so mined-marking must run first to keep just-landed txs from
|
|
643
|
+
// being unprotected into pending where they could be evicted before they are recorded as mined.
|
|
644
|
+
await this.handleMinedBlocks(blocks);
|
|
645
|
+
await this.maybeCallPrepareForSlot(lastSlot);
|
|
646
|
+
await this.collectingMissingTxs(blocks);
|
|
647
|
+
await this.synchedLatestSlot.set(BigInt(lastSlot));
|
|
613
648
|
}
|
|
614
649
|
|
|
615
|
-
/** Request txs for unproven blocks so the prover node
|
|
616
|
-
private async
|
|
650
|
+
/** Request txs for unproven blocks so the prover node can prove. */
|
|
651
|
+
private async collectingMissingTxs(blocks: L2Block[]): Promise<void> {
|
|
617
652
|
try {
|
|
618
653
|
// TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
|
|
619
654
|
// be much lower than the actual one, and it does not update until the pending chain is
|
|
@@ -621,7 +656,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
621
656
|
// are already proven, but the archiver has not yet updated its state. Until this is properly
|
|
622
657
|
// fixed, it is mitigated by the expiration date of collection requests, which depends on
|
|
623
658
|
// the slot number of the block.
|
|
624
|
-
const provenBlockNumber = await this.l2BlockSource.
|
|
659
|
+
const provenBlockNumber = (await this.l2BlockSource.getBlockNumber({ tag: 'proven' })) ?? BlockNumber.ZERO;
|
|
625
660
|
const unprovenBlocks = blocks.filter(block => block.number > provenBlockNumber);
|
|
626
661
|
for (const block of unprovenBlocks) {
|
|
627
662
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
@@ -633,7 +668,17 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
633
668
|
`Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`,
|
|
634
669
|
{ missingTxHashes, blockNumber: block.number, blockHash: await block.hash().then(h => h.toString()) },
|
|
635
670
|
);
|
|
636
|
-
|
|
671
|
+
// Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
|
|
672
|
+
// count *full slots after the block slot* — value N means collection runs until
|
|
673
|
+
// `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
|
|
674
|
+
// gives up before the data-withholding slash verdict is rendered.
|
|
675
|
+
const blockSlot = block.header.getSlot();
|
|
676
|
+
const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
|
|
677
|
+
const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
|
|
678
|
+
const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
|
|
679
|
+
const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
|
|
680
|
+
const deadline = new Date(Number(deadlineSeconds) * 1000);
|
|
681
|
+
await this.txCollection.collectFastForBlock(block, missingTxHashes, { deadline });
|
|
637
682
|
}
|
|
638
683
|
}
|
|
639
684
|
} catch (err) {
|
|
@@ -646,7 +691,7 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
646
691
|
* @param blocks - A list of finalized L2 blocks.
|
|
647
692
|
* @returns Empty promise.
|
|
648
693
|
*/
|
|
649
|
-
private async handleFinalizedL2Blocks(blocks:
|
|
694
|
+
private async handleFinalizedL2Blocks(blocks: BlockData[]): Promise<void> {
|
|
650
695
|
if (!blocks.length) {
|
|
651
696
|
return;
|
|
652
697
|
}
|
|
@@ -694,16 +739,13 @@ export class P2PClient extends WithTracer implements P2P {
|
|
|
694
739
|
return isEpochPrune;
|
|
695
740
|
}
|
|
696
741
|
|
|
697
|
-
/**
|
|
698
|
-
private async maybeCallPrepareForSlot(): Promise<void> {
|
|
699
|
-
|
|
700
|
-
// Knowledege of pending checkpoints is in the PR above
|
|
701
|
-
const { targetSlot } = this.epochCache.getTargetAndNextSlot();
|
|
702
|
-
if (targetSlot <= this.lastSlotProcessed) {
|
|
742
|
+
/** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */
|
|
743
|
+
private async maybeCallPrepareForSlot(slot: SlotNumber): Promise<void> {
|
|
744
|
+
if (slot <= this.lastSlotProcessed) {
|
|
703
745
|
return;
|
|
704
746
|
}
|
|
705
|
-
this.lastSlotProcessed =
|
|
706
|
-
await this.txPool.prepareForSlot(
|
|
747
|
+
this.lastSlotProcessed = slot;
|
|
748
|
+
await this.txPool.prepareForSlot(slot);
|
|
707
749
|
}
|
|
708
750
|
|
|
709
751
|
private async startServiceIfSynched() {
|