@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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# BatchTxRequester Benchmarks
|
|
2
2
|
|
|
3
|
-
This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal
|
|
3
|
+
This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal under several controlled "who-has-which-txs" distributions.
|
|
4
4
|
|
|
5
5
|
## Purpose
|
|
6
6
|
|
|
@@ -10,12 +10,6 @@ This benchmark answers:
|
|
|
10
10
|
|
|
11
11
|
- How long does it take to fetch **N missing txs** (N ∈ **{10, 50, 100, 500}**)?
|
|
12
12
|
- How do different **peer availability patterns** affect performance?
|
|
13
|
-
- Which collector strategy performs better under each pattern?
|
|
14
|
-
|
|
15
|
-
The suite compares two collectors:
|
|
16
|
-
|
|
17
|
-
- **`BatchTxRequesterCollector`** (collector type: `batch-requester`)
|
|
18
|
-
- **`SendBatchRequestCollector`** (collector type: `send-batch-request`)
|
|
19
13
|
|
|
20
14
|
## Architecture
|
|
21
15
|
|
|
@@ -24,7 +18,7 @@ The benchmark runs a small simulated network on localhost:
|
|
|
24
18
|
```
|
|
25
19
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
26
20
|
│ Test Process (Driver) │
|
|
27
|
-
│ p2p_client.
|
|
21
|
+
│ p2p_client.batch_tx_requester.bench.test.ts │
|
|
28
22
|
│ ┌─────────────────────────────────────────────────────────────┐ │
|
|
29
23
|
│ │ WorkerClientManager │ │
|
|
30
24
|
│ │ (src/testbench/worker_client_manager.ts) │ │
|
|
@@ -34,7 +28,7 @@ The benchmark runs a small simulated network on localhost:
|
|
|
34
28
|
│ ▼ ▼ ▼ │
|
|
35
29
|
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
|
|
36
30
|
│ │ Worker 0 │◄──────►│ Worker 1 │◄──────►│ Worker N-1│ │
|
|
37
|
-
│ │
|
|
31
|
+
│ │(Aggregator│ P2P │(Responder)│ P2P │(Responder)│ │
|
|
38
32
|
│ │ Node) │ │ │ │ │ │
|
|
39
33
|
│ │ TxPool:[] │ │ TxPool: │ │ TxPool: │ │
|
|
40
34
|
│ │ │ │ [txs...] │ │ [txs...] │ │
|
|
@@ -54,12 +48,12 @@ Using separate OS processes makes the setup closer to real networking behavior (
|
|
|
54
48
|
|
|
55
49
|
The network is intentionally asymmetric:
|
|
56
50
|
|
|
57
|
-
- **Worker 0 is the
|
|
51
|
+
- **Worker 0 is the aggregator/proposer node**
|
|
58
52
|
- Starts with an **empty tx pool** (`[]`)
|
|
59
|
-
- Is the only worker instructed to run
|
|
53
|
+
- Is the only worker instructed to run `BatchTxRequester` for each `BENCH_REQRESP` command
|
|
60
54
|
- **Workers 1..N-1 are responder peers**
|
|
61
55
|
- Locally generate and filter txs according to the distribution pattern
|
|
62
|
-
- Respond to req/resp queries made by Worker 0's
|
|
56
|
+
- Respond to req/resp queries made by Worker 0's `BatchTxRequester`
|
|
63
57
|
|
|
64
58
|
This models a proposer that has only `txHashes` in a proposal and must fetch the full tx bodies from the network.
|
|
65
59
|
|
|
@@ -72,7 +66,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
|
|
|
72
66
|
**Every responder peer has every transaction.**
|
|
73
67
|
|
|
74
68
|
- Simulates the best-case: high replication / high gossip success
|
|
75
|
-
- Expectation:
|
|
69
|
+
- Expectation: the requester should quickly succeed; differences mostly reflect requester overhead and batching strategy
|
|
76
70
|
|
|
77
71
|
### `sparse`
|
|
78
72
|
|
|
@@ -81,7 +75,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
|
|
|
81
75
|
Each responder is bucketed and holds txs whose index falls into its bucket or the "next" bucket (striped by tx index).
|
|
82
76
|
|
|
83
77
|
- Simulates partial propagation, churn, or uneven mempool convergence
|
|
84
|
-
- Expectation:
|
|
78
|
+
- Expectation: the requester must query multiple peers and cope with "misses"
|
|
85
79
|
|
|
86
80
|
### `pinned-only`
|
|
87
81
|
|
|
@@ -92,33 +86,13 @@ Each responder is bucketed and holds txs whose index falls into its bucket or th
|
|
|
92
86
|
|
|
93
87
|
> **Guardrail:** the pinned peer index must be within `(0, numberOfPeers)` (Worker 0 cannot be pinned).
|
|
94
88
|
|
|
95
|
-
## Collectors Under Test
|
|
96
|
-
|
|
97
|
-
### `BatchTxRequesterCollector` (`batch-requester`)
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
new BatchTxRequesterCollector(p2pService, logger, new DateProvider())
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Uses the P2P service plus internal logic to fetch missing txs, coordinating requests in a batched or staged way.
|
|
104
|
-
|
|
105
|
-
### `SendBatchRequestCollector` (`send-batch-request`)
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
const maxPeers = 10;
|
|
109
|
-
const maxRetryAttempts = Math.max(peerIds.length, 3);
|
|
110
|
-
new SendBatchRequestCollector(p2pService, maxPeers, maxRetryAttempts)
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Explicitly caps the number of peers it will involve (`maxPeers`) and uses a retry budget derived from peer count.
|
|
114
|
-
|
|
115
89
|
## Test Parameters
|
|
116
90
|
|
|
117
91
|
| Parameter | Value | Description |
|
|
118
92
|
|-----------|-------|-------------|
|
|
119
93
|
| `PEERS_PER_RUN` | 30 | Number of worker processes spawned |
|
|
120
94
|
| `MISSING_TX_COUNTS` | 10, 50, 100, 500 | Number of missing transactions to fetch |
|
|
121
|
-
| `TIMEOUT_MS` | 30,000 ms |
|
|
95
|
+
| `TIMEOUT_MS` | 30,000 ms | Per-case timeout for the requester |
|
|
122
96
|
| `TEST_TIMEOUT_MS` | 600,000 ms | Overall Jest timeout (10 minutes) |
|
|
123
97
|
|
|
124
98
|
## Running
|
|
@@ -127,13 +101,13 @@ From the p2p package:
|
|
|
127
101
|
|
|
128
102
|
```bash
|
|
129
103
|
cd yarn-project/p2p
|
|
130
|
-
yarn test src/client/test/
|
|
104
|
+
yarn test src/client/test/p2p_client.batch_tx_requester.bench.test.ts
|
|
131
105
|
```
|
|
132
106
|
|
|
133
107
|
Or from repo root:
|
|
134
108
|
|
|
135
109
|
```bash
|
|
136
|
-
yarn test p2p_client.
|
|
110
|
+
yarn test p2p_client.batch_tx_requester.bench.test.ts
|
|
137
111
|
```
|
|
138
112
|
|
|
139
113
|
The benchmark is intentionally long due to spawning many processes and running multiple cases.
|
|
@@ -145,14 +119,12 @@ The benchmark is intentionally long due to spawning many processes and running m
|
|
|
145
119
|
If no env vars are set, the suite prints a table:
|
|
146
120
|
|
|
147
121
|
```
|
|
148
|
-
|
|
|
149
|
-
|
|
150
|
-
|
|
|
151
|
-
|
|
|
122
|
+
| Distribution | Missing | Duration (ms) | Fetched | Success |
|
|
123
|
+
|--------------|---------|---------------|---------|---------|
|
|
124
|
+
| pinned-only | 10 | 123 | 10 | Yes |
|
|
125
|
+
| pinned-only | 50 | 145 | 50 | Yes |
|
|
152
126
|
```
|
|
153
127
|
|
|
154
|
-
Plus a comparison summary stating which collector was faster per `(distribution, missing)` pair.
|
|
155
|
-
|
|
156
128
|
### JSON metrics (for CI/dashboards)
|
|
157
129
|
|
|
158
130
|
```bash
|
|
@@ -160,8 +132,8 @@ BENCH_OUTPUT=/path/results.json yarn test ...
|
|
|
160
132
|
```
|
|
161
133
|
|
|
162
134
|
Writes JSON metrics like:
|
|
163
|
-
- `
|
|
164
|
-
- `
|
|
135
|
+
- `BatchTxRequester/<distribution>/missing_<N>/duration` (ms)
|
|
136
|
+
- `BatchTxRequester/<distribution>/missing_<N>/fetched` (txs)
|
|
165
137
|
|
|
166
138
|
### Markdown file output
|
|
167
139
|
|
|
@@ -175,14 +147,14 @@ Writes the pretty table + summary to disk.
|
|
|
175
147
|
|
|
176
148
|
For each case the benchmark records:
|
|
177
149
|
|
|
178
|
-
- `durationMs`: wall-clock time spent inside the
|
|
179
|
-
- `fetchedCount`: how many txs were returned by the
|
|
150
|
+
- `durationMs`: wall-clock time spent inside the requester call
|
|
151
|
+
- `fetchedCount`: how many txs were returned by the requester
|
|
180
152
|
- `success`: `fetchedCount === missingTxCount`
|
|
181
153
|
|
|
182
154
|
**Guidelines:**
|
|
183
155
|
|
|
184
156
|
- **Always check `Success` first.** A faster run that fetched fewer txs is not a win.
|
|
185
|
-
- Compare
|
|
157
|
+
- Compare runs **within the same distribution + missing count** only.
|
|
186
158
|
- Expect `pinned-only` to highlight pinned-peer behavior (fast if pinned peer is used effectively; slow if the algorithm wastes time sampling other peers).
|
|
187
159
|
- Expect `sparse` to be the most "network-like" stress case, since many peers won't have each requested tx.
|
|
188
160
|
|
|
@@ -193,7 +165,7 @@ Inside each worker, the benchmark intentionally reduces variability:
|
|
|
193
165
|
- **Unlimited rate limits** are installed so the req/resp rate limiter doesn't dominate results
|
|
194
166
|
- **Deterministic tx generation** ensures all workers see the same tx set without large IPC payloads
|
|
195
167
|
|
|
196
|
-
This makes the benchmark better for
|
|
168
|
+
This makes the benchmark better for tracking regressions, but it is **not** a perfect model of production networking conditions.
|
|
197
169
|
|
|
198
170
|
## Limitations
|
|
199
171
|
|
|
@@ -207,9 +179,7 @@ This benchmark does **not** measure:
|
|
|
207
179
|
|
|
208
180
|
| File | Purpose |
|
|
209
181
|
|------|---------|
|
|
210
|
-
| `p2p_client.
|
|
211
|
-
| `proposal_tx_collector_worker.ts` | Collector-specific worker implementation |
|
|
212
|
-
| `proposal_tx_collector_worker_protocol.ts` | IPC message types and serialization |
|
|
182
|
+
| `p2p_client.batch_tx_requester.bench.test.ts` | Test suite (cases, distributions, output formatting) |
|
|
213
183
|
| `src/testbench/worker_client_manager.ts` | Worker process manager (forking, IPC, orchestration) |
|
|
214
184
|
| `src/testbench/p2p_client_testbench_worker.ts` | General testbench worker implementation |
|
|
215
185
|
| `src/test-helpers/testbench-utils.ts` | Shared mocks and utilities (InMemoryTxPool, InMemoryAttestationPool, etc.) |
|
package/src/config.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
getConfigFromMappings,
|
|
7
7
|
getDefaultConfig,
|
|
8
8
|
numberConfigHelper,
|
|
9
|
+
optionalNumberConfigHelper,
|
|
9
10
|
percentageConfigHelper,
|
|
10
11
|
pickConfigMappings,
|
|
11
12
|
secretStringConfigHelper,
|
|
@@ -39,28 +40,28 @@ export interface P2PConfig
|
|
|
39
40
|
ChainConfig,
|
|
40
41
|
TxCollectionConfig,
|
|
41
42
|
TxFileStoreConfig,
|
|
42
|
-
Pick<
|
|
43
|
+
Pick<
|
|
44
|
+
SequencerConfig,
|
|
45
|
+
| 'expectedBlockProposalsPerSlot'
|
|
46
|
+
| 'maxTxsPerBlock'
|
|
47
|
+
| 'checkpointProposalSyncGraceSeconds'
|
|
48
|
+
| 'maxBlocksPerCheckpoint'
|
|
49
|
+
>,
|
|
50
|
+
// `blockDurationMs` is optional on the loose `SequencerConfig` but is always populated for p2p via
|
|
51
|
+
// the shared `numberConfigHelper(3000)` mapping, so it is required here.
|
|
52
|
+
Required<Pick<SequencerConfig, 'blockDurationMs'>> {
|
|
43
53
|
/** Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set. */
|
|
44
54
|
validateMaxTxsPerBlock?: number;
|
|
45
55
|
|
|
46
56
|
/** Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set. */
|
|
47
57
|
validateMaxTxsPerCheckpoint?: number;
|
|
48
58
|
|
|
49
|
-
/** Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
50
|
-
validateMaxL2BlockGas?: number;
|
|
51
|
-
|
|
52
|
-
/** Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
53
|
-
validateMaxDABlockGas?: number;
|
|
54
|
-
|
|
55
59
|
/** A flag dictating whether the P2P subsystem should be enabled. */
|
|
56
60
|
p2pEnabled: boolean;
|
|
57
61
|
|
|
58
62
|
/** The frequency in which to check for new L2 blocks. */
|
|
59
63
|
blockCheckIntervalMS: number;
|
|
60
64
|
|
|
61
|
-
/** The frequency in which to check for new L2 slots. */
|
|
62
|
-
slotCheckIntervalMS: number;
|
|
63
|
-
|
|
64
65
|
/** The number of blocks to fetch in a single batch. */
|
|
65
66
|
blockRequestBatchSize: number;
|
|
66
67
|
|
|
@@ -109,6 +110,11 @@ export interface P2PConfig
|
|
|
109
110
|
/** If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false. */
|
|
110
111
|
queryForIp: boolean;
|
|
111
112
|
|
|
113
|
+
/**
|
|
114
|
+
* HTTPS URLs that return plain-text public IPv4, tried in order when resolving the announce IP (e.g. when `queryForIp` is true and `p2pIp` is unset).
|
|
115
|
+
*/
|
|
116
|
+
publicIpServices: string[];
|
|
117
|
+
|
|
112
118
|
/** The interval of the gossipsub heartbeat to perform maintenance tasks. */
|
|
113
119
|
gossipsubInterval: number;
|
|
114
120
|
|
|
@@ -136,6 +142,13 @@ export interface P2PConfig
|
|
|
136
142
|
/** How long to keep message IDs in the seen cache (ms). */
|
|
137
143
|
gossipsubSeenTTL: number;
|
|
138
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Maximum clock-disparity tolerance (ms) applied to proposal/attestation gossip receive windows. Both
|
|
147
|
+
* ends of each acceptance window are widened by this much so peers are not penalized for messages valid
|
|
148
|
+
* when sent but arriving slightly early or late due to clock skew (Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY).
|
|
149
|
+
*/
|
|
150
|
+
maxGossipClockDisparityMs: number;
|
|
151
|
+
|
|
139
152
|
/** The 'age' (in # of L2 blocks) of a processed tx after which we heavily penalize a peer for re-sending it. */
|
|
140
153
|
doubleSpendSeverePeerPenaltyWindow: number;
|
|
141
154
|
|
|
@@ -151,6 +164,9 @@ export interface P2PConfig
|
|
|
151
164
|
/** The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors. */
|
|
152
165
|
peerPenaltyValues: number[];
|
|
153
166
|
|
|
167
|
+
/** How long (in seconds) a peer is banned for once its score drops below the ban threshold. */
|
|
168
|
+
peerBanDurationSeconds: number;
|
|
169
|
+
|
|
154
170
|
/** Limit of transactions to archive in the tx pool. Once the archived tx limit is reached, the oldest archived txs will be purged. */
|
|
155
171
|
archivedTxLimit: number;
|
|
156
172
|
|
|
@@ -175,6 +191,9 @@ export interface P2PConfig
|
|
|
175
191
|
/** The node's seen message ID cache size */
|
|
176
192
|
seenMessageCacheSize: number;
|
|
177
193
|
|
|
194
|
+
/** Maximum number of (validator, tx) pairs to keep in the tx validation LRU cache. */
|
|
195
|
+
txValidationCacheSize: number;
|
|
196
|
+
|
|
178
197
|
/** True to disable the status handshake on peer connected. */
|
|
179
198
|
p2pDisableStatusHandshake?: boolean;
|
|
180
199
|
|
|
@@ -207,34 +226,59 @@ export interface P2PConfig
|
|
|
207
226
|
/** Minimum age (ms) a transaction must have been in the pool before it's eligible for block building. */
|
|
208
227
|
minTxPoolAgeMs: number;
|
|
209
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Number of full L2 slots to wait after a checkpoint's slot before declaring its txs missing
|
|
231
|
+
* for data-withholding slashing.
|
|
232
|
+
*/
|
|
233
|
+
slashDataWithholdingToleranceSlots: number;
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Number of L2 slots after a mined block's slot to keep collecting its missing txs. Clamped
|
|
237
|
+
* up so that collection always runs at least until the data-withholding slash verdict is
|
|
238
|
+
* rendered (`block.slot + slashDataWithholdingToleranceSlots + 1`). Defaults to undefined,
|
|
239
|
+
* in which case the tolerance window is used directly.
|
|
240
|
+
*/
|
|
241
|
+
p2pMissingTxCollectionDeadlineSlots?: number;
|
|
242
|
+
|
|
210
243
|
/** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
|
|
211
244
|
priceBumpPercentage: bigint;
|
|
245
|
+
|
|
246
|
+
/** Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only) */
|
|
247
|
+
skipIncomingProposals?: boolean;
|
|
248
|
+
|
|
249
|
+
/** Accept proposal gossip regardless of slot timing (for testing only). */
|
|
250
|
+
skipProposalSlotValidation?: boolean;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Whether this node skips checkpoint proposal validation and always attests. When set, the checkpoint
|
|
254
|
+
* attestation is created and broadcast before the embedded last block is processed, so it is not delayed
|
|
255
|
+
* past the slot's attestation window by that block's re-execution. Mirrors the validator config flag.
|
|
256
|
+
*/
|
|
257
|
+
skipCheckpointProposalValidation?: boolean;
|
|
212
258
|
}
|
|
213
259
|
|
|
214
260
|
export const DEFAULT_P2P_PORT = 40400;
|
|
215
261
|
|
|
262
|
+
/** Default endpoints used to discover this machine's public IPv4 when `queryForIp` is enabled. */
|
|
263
|
+
export const DEFAULT_PUBLIC_IP_SERVICES: string[] = [
|
|
264
|
+
'https://api.ipify.org/',
|
|
265
|
+
'https://checkip.amazonaws.com/',
|
|
266
|
+
'https://ifconfig.me/ip',
|
|
267
|
+
'https://icanhazip.com/',
|
|
268
|
+
];
|
|
269
|
+
|
|
216
270
|
export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
217
271
|
validateMaxTxsPerBlock: {
|
|
218
272
|
env: 'VALIDATOR_MAX_TX_PER_BLOCK',
|
|
219
273
|
description:
|
|
220
274
|
'Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set.',
|
|
221
|
-
|
|
275
|
+
...optionalNumberConfigHelper(),
|
|
222
276
|
},
|
|
223
277
|
validateMaxTxsPerCheckpoint: {
|
|
224
278
|
env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
|
|
225
279
|
description:
|
|
226
280
|
'Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set.',
|
|
227
|
-
|
|
228
|
-
},
|
|
229
|
-
validateMaxL2BlockGas: {
|
|
230
|
-
env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
|
|
231
|
-
description: 'Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
232
|
-
parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
|
|
233
|
-
},
|
|
234
|
-
validateMaxDABlockGas: {
|
|
235
|
-
env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
|
|
236
|
-
description: 'Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
237
|
-
parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
|
|
281
|
+
...optionalNumberConfigHelper(),
|
|
238
282
|
},
|
|
239
283
|
p2pEnabled: {
|
|
240
284
|
env: 'P2P_ENABLED',
|
|
@@ -251,11 +295,6 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
251
295
|
description: 'The frequency in which to check for new L2 blocks.',
|
|
252
296
|
...numberConfigHelper(100),
|
|
253
297
|
},
|
|
254
|
-
slotCheckIntervalMS: {
|
|
255
|
-
env: 'P2P_SLOT_CHECK_INTERVAL_MS',
|
|
256
|
-
description: 'The frequency in which to check for new L2 slots.',
|
|
257
|
-
...numberConfigHelper(1000),
|
|
258
|
-
},
|
|
259
298
|
debugDisableColocationPenalty: {
|
|
260
299
|
env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
|
|
261
300
|
description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
|
|
@@ -331,6 +370,17 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
331
370
|
'If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.',
|
|
332
371
|
...booleanConfigHelper(),
|
|
333
372
|
},
|
|
373
|
+
publicIpServices: {
|
|
374
|
+
env: 'P2P_PUBLIC_IP_SERVICES',
|
|
375
|
+
parseEnv: (val: string) =>
|
|
376
|
+
val
|
|
377
|
+
.split(',')
|
|
378
|
+
.map(s => s.trim())
|
|
379
|
+
.filter(Boolean),
|
|
380
|
+
description:
|
|
381
|
+
'Comma-separated HTTPS URLs that return plain-text public IPv4. Used when P2P_QUERY_FOR_IP is true and P2P_IP is unset. Tried in order until one succeeds.',
|
|
382
|
+
defaultValue: DEFAULT_PUBLIC_IP_SERVICES,
|
|
383
|
+
},
|
|
334
384
|
gossipsubInterval: {
|
|
335
385
|
env: 'P2P_GOSSIPSUB_INTERVAL_MS',
|
|
336
386
|
description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
|
|
@@ -364,7 +414,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
364
414
|
gossipsubMcacheLength: {
|
|
365
415
|
env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
|
|
366
416
|
description: 'The number of gossipsub interval message cache windows to keep.',
|
|
367
|
-
...numberConfigHelper(
|
|
417
|
+
...numberConfigHelper(12),
|
|
368
418
|
},
|
|
369
419
|
gossipsubMcacheGossip: {
|
|
370
420
|
env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP',
|
|
@@ -376,6 +426,12 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
376
426
|
description: 'How long to keep message IDs in the seen cache.',
|
|
377
427
|
...numberConfigHelper(20 * 60 * 1000),
|
|
378
428
|
},
|
|
429
|
+
maxGossipClockDisparityMs: {
|
|
430
|
+
env: 'P2P_MAX_GOSSIP_CLOCK_DISPARITY_MS',
|
|
431
|
+
description:
|
|
432
|
+
'Maximum clock-disparity tolerance (ms) applied to both ends of proposal/attestation gossip receive windows.',
|
|
433
|
+
...numberConfigHelper(500),
|
|
434
|
+
},
|
|
379
435
|
gossipsubTxTopicWeight: {
|
|
380
436
|
env: 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT',
|
|
381
437
|
description: 'The weight of the tx topic for the gossipsub protocol.',
|
|
@@ -398,6 +454,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
398
454
|
'The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors.',
|
|
399
455
|
defaultValue: [2, 10, 50],
|
|
400
456
|
},
|
|
457
|
+
peerBanDurationSeconds: {
|
|
458
|
+
env: 'P2P_PEER_BAN_DURATION_SECONDS',
|
|
459
|
+
description: 'How long (in seconds) a peer is banned for once its score drops below the ban threshold.',
|
|
460
|
+
...numberConfigHelper(24 * 60 * 60),
|
|
461
|
+
},
|
|
401
462
|
doubleSpendSeverePeerPenaltyWindow: {
|
|
402
463
|
env: 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW',
|
|
403
464
|
description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.',
|
|
@@ -436,7 +497,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
436
497
|
},
|
|
437
498
|
p2pStoreMapSizeKb: {
|
|
438
499
|
env: 'P2P_STORE_MAP_SIZE_KB',
|
|
439
|
-
|
|
500
|
+
...optionalNumberConfigHelper(),
|
|
440
501
|
description: 'The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb.',
|
|
441
502
|
},
|
|
442
503
|
txPublicSetupAllowListExtend: {
|
|
@@ -459,6 +520,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
459
520
|
description: 'The number of messages to keep in the seen message cache',
|
|
460
521
|
...numberConfigHelper(100_000), // 100K
|
|
461
522
|
},
|
|
523
|
+
txValidationCacheSize: {
|
|
524
|
+
env: 'P2P_TX_VALIDATION_CACHE_SIZE',
|
|
525
|
+
description: 'Maximum number of items to keep in the tx validation LRU cache.',
|
|
526
|
+
...numberConfigHelper(5_000),
|
|
527
|
+
},
|
|
462
528
|
p2pDisableStatusHandshake: {
|
|
463
529
|
env: 'P2P_DISABLE_STATUS_HANDSHAKE',
|
|
464
530
|
description: 'True to disable the status handshake on peer connected.',
|
|
@@ -506,18 +572,49 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
506
572
|
'Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only).',
|
|
507
573
|
...booleanConfigHelper(false),
|
|
508
574
|
},
|
|
575
|
+
skipIncomingProposals: {
|
|
576
|
+
description: 'Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only)',
|
|
577
|
+
...booleanConfigHelper(false),
|
|
578
|
+
},
|
|
579
|
+
skipProposalSlotValidation: {
|
|
580
|
+
description: 'Accept proposal gossip regardless of slot timing (for testing only)',
|
|
581
|
+
...booleanConfigHelper(false),
|
|
582
|
+
},
|
|
583
|
+
skipCheckpointProposalValidation: {
|
|
584
|
+
description:
|
|
585
|
+
'Skip checkpoint proposal validation and always attest, broadcasting the attestation before processing the embedded last block',
|
|
586
|
+
...booleanConfigHelper(false),
|
|
587
|
+
},
|
|
509
588
|
minTxPoolAgeMs: {
|
|
510
589
|
env: 'P2P_MIN_TX_POOL_AGE_MS',
|
|
511
590
|
description: 'Minimum age (ms) a transaction must have been in the pool before it is eligible for block building.',
|
|
512
591
|
...numberConfigHelper(2_000),
|
|
513
592
|
},
|
|
593
|
+
slashDataWithholdingToleranceSlots: {
|
|
594
|
+
env: 'SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS',
|
|
595
|
+
description:
|
|
596
|
+
'L2 slots to wait after a checkpoint slot before declaring its txs missing. Drives both the data-withholding slasher check and the missing-tx collection deadline.',
|
|
597
|
+
...numberConfigHelper(3),
|
|
598
|
+
},
|
|
599
|
+
p2pMissingTxCollectionDeadlineSlots: {
|
|
600
|
+
env: 'P2P_MISSING_TX_COLLECTION_DEADLINE_SLOTS',
|
|
601
|
+
description:
|
|
602
|
+
'Optional deadline (in L2 slots after the block slot) for collecting missing txs for unproven mined blocks. Clamped up to the data-withholding tolerance window so collection never gives up before the slash verdict.',
|
|
603
|
+
...optionalNumberConfigHelper(),
|
|
604
|
+
},
|
|
514
605
|
priceBumpPercentage: {
|
|
515
606
|
env: 'P2P_RPC_PRICE_BUMP_PERCENTAGE',
|
|
516
607
|
description:
|
|
517
608
|
'Minimum percentage fee increase required to replace an existing tx via RPC. Even at 0%, replacement still requires paying at least 1 unit more.',
|
|
518
609
|
...bigintConfigHelper(10n),
|
|
519
610
|
},
|
|
520
|
-
...sharedSequencerConfigMappings,
|
|
611
|
+
...pickConfigMappings(sharedSequencerConfigMappings, [
|
|
612
|
+
'expectedBlockProposalsPerSlot',
|
|
613
|
+
'maxTxsPerBlock',
|
|
614
|
+
'checkpointProposalSyncGraceSeconds',
|
|
615
|
+
'maxBlocksPerCheckpoint',
|
|
616
|
+
'blockDurationMs',
|
|
617
|
+
]),
|
|
521
618
|
...p2pReqRespConfigMappings,
|
|
522
619
|
...batchTxRequesterConfigMappings,
|
|
523
620
|
...chainConfigMappings,
|
|
@@ -550,6 +647,7 @@ export type BootnodeConfig = Pick<
|
|
|
550
647
|
| 'bootstrapNodes'
|
|
551
648
|
| 'listenAddress'
|
|
552
649
|
| 'queryForIp'
|
|
650
|
+
| 'publicIpServices'
|
|
553
651
|
> &
|
|
554
652
|
Required<Pick<P2PConfig, 'p2pIp' | 'p2pPort'>> &
|
|
555
653
|
Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb'> &
|
|
@@ -567,6 +665,7 @@ const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
|
|
|
567
665
|
'bootstrapNodes',
|
|
568
666
|
'l1ChainId',
|
|
569
667
|
'queryForIp',
|
|
668
|
+
'publicIpServices',
|
|
570
669
|
];
|
|
571
670
|
|
|
572
671
|
export const bootnodeConfigMappings = pickConfigMappings(
|
|
@@ -641,7 +740,7 @@ export function parseAllowList(value: string): AllowedElement[] {
|
|
|
641
740
|
|
|
642
741
|
if (typeString === 'I') {
|
|
643
742
|
entries.push({
|
|
644
|
-
address: AztecAddress.
|
|
743
|
+
address: AztecAddress.fromStringUnsafe(identifierString),
|
|
645
744
|
selector,
|
|
646
745
|
...flags,
|
|
647
746
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Checkpoint Proposal Received Callback Not Registered Error
|
|
2
|
+
*
|
|
3
|
+
* Error triggered if the allNodesCheckpointReceivedCallback is not registered
|
|
4
|
+
* @category Errors
|
|
5
|
+
*/
|
|
6
|
+
export class CheckpointProposalReceivedCallbackNotRegisteredError extends Error {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('FATAL (allNodesCheckpointReceivedCallback): All nodes should register a checkpoint proposal handler');
|
|
9
|
+
this.name = 'CheckpointProposalReceivedCallbackNotRegisteredError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -8,28 +8,3 @@ export class IndividualReqRespTimeoutError extends Error {
|
|
|
8
8
|
super(`Request to peer timed out`);
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
/** Collective request timeout error
|
|
13
|
-
*
|
|
14
|
-
* This error will be thrown when a req resp request times out regardless of the peer.
|
|
15
|
-
* @category Errors
|
|
16
|
-
*/
|
|
17
|
-
export class CollectiveReqRespTimeoutError extends Error {
|
|
18
|
-
constructor() {
|
|
19
|
-
super(`Request to all peers timed out`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Invalid response error
|
|
24
|
-
*
|
|
25
|
-
* This error will be thrown when a response is received that is not valid.
|
|
26
|
-
*
|
|
27
|
-
* This error does not need to be punished as message validators will handle punishing invalid
|
|
28
|
-
* requests
|
|
29
|
-
* @category Errors
|
|
30
|
-
*/
|
|
31
|
-
export class InvalidResponseError extends Error {
|
|
32
|
-
constructor() {
|
|
33
|
-
super(`Invalid response received`);
|
|
34
|
-
}
|
|
35
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,6 @@ export * from './client/index.js';
|
|
|
6
6
|
export * from './enr/index.js';
|
|
7
7
|
export * from './config.js';
|
|
8
8
|
export * from './mem_pools/attestation_pool/index.js';
|
|
9
|
-
export * from './mem_pools/tx_pool/index.js';
|
|
10
9
|
export * from './mem_pools/tx_pool_v2/index.js';
|
|
11
10
|
export * from './msg_validators/index.js';
|
|
12
11
|
export * from './services/index.js';
|