@aztec/p2p 0.0.1-commit.b33fc05d0 → 0.0.1-commit.b3d3157a
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 +129 -3
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +4 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +26 -14
- package/dest/client/interface.d.ts +14 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +13 -9
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +88 -26
- package/dest/config.d.ts +135 -99
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +62 -7
- 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 +99 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -199
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +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/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -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 +10 -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 +13 -3
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
- 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 +3 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
- 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 +84 -86
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- 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/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +56 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
- 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 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +36 -13
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
- 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.d.ts +21 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
- 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 +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +11 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +12 -16
- package/dest/services/encoding.d.ts +5 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -1
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- 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 +36 -46
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +272 -262
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +38 -10
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +81 -86
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +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 +41 -214
- package/dest/services/service.d.ts +9 -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/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- 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 +12 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +38 -14
- 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 +83 -38
- 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 +15 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +49 -7
- package/src/client/interface.ts +15 -11
- package/src/client/p2p_client.ts +104 -47
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +123 -6
- 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 +316 -241
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
- 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/eviction/fee_payer_balance_eviction_rule.ts +2 -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 +9 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +31 -9
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +85 -92
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
- package/src/msg_validators/clock_tolerance.ts +73 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
- package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
- package/src/msg_validators/tx_validator/README.md +15 -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 +46 -8
- package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +14 -39
- package/src/services/encoding.ts +9 -1
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +302 -300
- package/src/services/peer-manager/peer_manager.ts +44 -10
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +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 +45 -260
- package/src/services/service.ts +12 -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/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +8 -7
- 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 +50 -28
- package/src/testbench/p2p_client_testbench_worker.ts +87 -54
- 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 -304
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -16
- 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/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -23
- 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/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -17,9 +17,7 @@ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
|
17
17
|
const testChainConfig = {
|
|
18
18
|
l1ChainId: 31337,
|
|
19
19
|
rollupVersion: 1,
|
|
20
|
-
|
|
21
|
-
rollupAddress: EthAddress.random()
|
|
22
|
-
}
|
|
20
|
+
rollupAddress: EthAddress.random()
|
|
23
21
|
};
|
|
24
22
|
class WorkerClientManager {
|
|
25
23
|
processes = [];
|
|
@@ -37,7 +35,6 @@ class WorkerClientManager {
|
|
|
37
35
|
destroy() {
|
|
38
36
|
this.cleanup().catch((error)=>{
|
|
39
37
|
this.logger.error('Failed to cleanup worker client manager', error);
|
|
40
|
-
process.exit(1);
|
|
41
38
|
});
|
|
42
39
|
}
|
|
43
40
|
/**
|
|
@@ -318,6 +315,55 @@ class WorkerClientManager {
|
|
|
318
315
|
this.logger.info('All worker processes cleaned up');
|
|
319
316
|
}
|
|
320
317
|
/**
|
|
318
|
+
* Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
|
|
319
|
+
* This prevents benchmark cases from starting with degraded connectivity after a previous case
|
|
320
|
+
* caused connection failures.
|
|
321
|
+
*/ async waitForConnectivity(minPeers, timeoutMs = 15_000) {
|
|
322
|
+
const waitInterval = 1000;
|
|
323
|
+
let waited = 0;
|
|
324
|
+
while(waited < timeoutMs){
|
|
325
|
+
const count = await this.getPeerCount(0, 5000);
|
|
326
|
+
if (count >= minPeers) {
|
|
327
|
+
this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
|
|
328
|
+
return count;
|
|
329
|
+
}
|
|
330
|
+
this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
|
|
331
|
+
await sleep(waitInterval);
|
|
332
|
+
waited += waitInterval;
|
|
333
|
+
}
|
|
334
|
+
const finalCount = await this.getPeerCount(0, 5000);
|
|
335
|
+
this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
|
|
336
|
+
return finalCount;
|
|
337
|
+
}
|
|
338
|
+
getPeerCount(clientIndex, timeoutMs) {
|
|
339
|
+
return new Promise((resolve)=>{
|
|
340
|
+
let resolved = false;
|
|
341
|
+
const handler = (msg)=>{
|
|
342
|
+
if (resolved) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (msg.type === 'PEER_COUNT') {
|
|
346
|
+
resolved = true;
|
|
347
|
+
clearTimeout(timeout);
|
|
348
|
+
this.processes[clientIndex].off('message', handler);
|
|
349
|
+
resolve(msg.count);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
const timeout = setTimeout(()=>{
|
|
353
|
+
if (resolved) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
resolved = true;
|
|
357
|
+
this.processes[clientIndex].off('message', handler);
|
|
358
|
+
resolve(0);
|
|
359
|
+
}, timeoutMs);
|
|
360
|
+
this.processes[clientIndex].on('message', handler);
|
|
361
|
+
this.processes[clientIndex].send({
|
|
362
|
+
type: 'GET_PEER_COUNT'
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
321
367
|
* Run a req/resp benchmark across all worker clients.
|
|
322
368
|
*
|
|
323
369
|
* This sends a BENCH_REQRESP command to all workers:
|
|
@@ -334,7 +380,7 @@ class WorkerClientManager {
|
|
|
334
380
|
const seed = config.seed ?? Date.now();
|
|
335
381
|
const blockNumber = config.blockNumber ?? 1;
|
|
336
382
|
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
337
|
-
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}
|
|
383
|
+
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
|
|
338
384
|
const readyPromises = [];
|
|
339
385
|
for(let i = 1; i < peerCount; i++){
|
|
340
386
|
const cmd = {
|
|
@@ -342,7 +388,6 @@ class WorkerClientManager {
|
|
|
342
388
|
txCount: config.txCount,
|
|
343
389
|
peerCount,
|
|
344
390
|
distribution: config.distribution,
|
|
345
|
-
collectorType: config.collectorType,
|
|
346
391
|
timeoutMs: config.timeoutMs,
|
|
347
392
|
isAggregator: false,
|
|
348
393
|
peerIndex: i,
|
|
@@ -361,7 +406,6 @@ class WorkerClientManager {
|
|
|
361
406
|
txCount: config.txCount,
|
|
362
407
|
peerCount,
|
|
363
408
|
distribution: config.distribution,
|
|
364
|
-
collectorType: config.collectorType,
|
|
365
409
|
timeoutMs: config.timeoutMs,
|
|
366
410
|
isAggregator: true,
|
|
367
411
|
peerIndex: 0,
|
|
@@ -377,7 +421,6 @@ class WorkerClientManager {
|
|
|
377
421
|
return {
|
|
378
422
|
txCount: config.txCount,
|
|
379
423
|
distribution: config.distribution,
|
|
380
|
-
collector: config.collectorType,
|
|
381
424
|
durationMs: result.durationMs,
|
|
382
425
|
fetchedCount: result.fetchedCount,
|
|
383
426
|
success: result.success,
|
|
@@ -446,4 +489,3 @@ class WorkerClientManager {
|
|
|
446
489
|
}
|
|
447
490
|
}
|
|
448
491
|
export { WorkerClientManager, testChainConfig };
|
|
449
|
-
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
package/dest/util.d.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { SecretValue } from '@aztec/foundation/config';
|
|
2
|
-
import type
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
4
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
5
5
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
6
6
|
import type { Identify } from '@libp2p/identify';
|
|
7
7
|
import type { PeerId } from '@libp2p/interface';
|
|
8
|
-
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
8
|
+
import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
|
|
9
9
|
import type { Libp2p } from 'libp2p';
|
|
10
|
-
import type
|
|
10
|
+
import { type P2PConfig } from './config.js';
|
|
11
11
|
export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' | 'peerId'> {
|
|
12
12
|
services: {
|
|
13
13
|
pubsub: Pick<GossipSub, 'addEventListener' | 'removeEventListener' | 'publish' | 'subscribe' | 'reportMessageValidationResult' | 'direct' | 'getMeshPeers'> & {
|
|
14
14
|
score: Pick<GossipSub['score'], 'score'>;
|
|
15
15
|
};
|
|
16
|
+
components: {
|
|
17
|
+
addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
|
|
18
|
+
};
|
|
16
19
|
};
|
|
17
20
|
}
|
|
18
21
|
export type FullLibp2p = Libp2p<{
|
|
@@ -20,6 +23,7 @@ export type FullLibp2p = Libp2p<{
|
|
|
20
23
|
pubsub: GossipSub;
|
|
21
24
|
components: {
|
|
22
25
|
connectionManager: ConnectionManager;
|
|
26
|
+
addressManager: AddressManager;
|
|
23
27
|
};
|
|
24
28
|
}>;
|
|
25
29
|
/**
|
|
@@ -32,9 +36,10 @@ export type FullLibp2p = Libp2p<{
|
|
|
32
36
|
* @returns A multiaddr compliant string. */
|
|
33
37
|
export declare function convertToMultiaddr(address: string, port: number, protocol: 'tcp' | 'udp'): string;
|
|
34
38
|
/**
|
|
35
|
-
* Queries the public IP address of the machine.
|
|
39
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
40
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
36
41
|
*/
|
|
37
|
-
export declare function getPublicIp(): Promise<string>;
|
|
42
|
+
export declare function getPublicIp(services?: string[]): Promise<string>;
|
|
38
43
|
export declare function isValidIpAddress(address: string): boolean;
|
|
39
44
|
export declare function resolveAddressIfNecessary(address: string, port: string): Promise<string>;
|
|
40
45
|
export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
|
|
@@ -58,4 +63,4 @@ export declare function getPeerIdPrivateKey(config: {
|
|
|
58
63
|
* @returns The peer ID.
|
|
59
64
|
*/
|
|
60
65
|
export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUlwRixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJckMsT0FBTyxFQUE4QixLQUFLLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl6RSxNQUFNLFdBQVcsWUFBYSxTQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ3hGLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxJQUFJLENBQ1YsU0FBUyxFQUNQLGtCQUFrQixHQUNsQixxQkFBcUIsR0FDckIsU0FBUyxHQUNULFdBQVcsR0FDWCwrQkFBK0IsR0FDL0IsUUFBUSxHQUNSLGNBQWMsQ0FDakIsR0FBRztZQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQUUsQ0FBQztRQUNqRCxVQUFVLEVBQUU7WUFDVixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsR0FBRyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3hHLENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCxNQUFNLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ25CLE1BQU0sRUFBRSxTQUFTLENBQUM7SUFDbEIsVUFBVSxFQUFFO1FBQ1YsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7UUFDckMsY0FBYyxFQUFFLGNBQWMsQ0FBQztLQUNoQyxDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7NkNBTzZDO0FBQzdDLHdCQUFnQixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQU9qRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixXQUFXLENBQUMsUUFBUSxHQUFFLE1BQU0sRUFBK0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBZ0JsRztBQUVELHdCQUFnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FHekQ7QUFFRCx3QkFBc0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXOUY7QUFjRCx3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxTQUFTLEdBQUcsZUFBZSxHQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQXFCdEM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsTUFBTSxFQUFFO0lBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLEVBQ3pHLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBMkQ5QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBUzFGIn0=
|
package/dest/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzE,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACP,kBAAkB,GAClB,qBAAqB,GACrB,SAAS,GACT,WAAW,GACX,+BAA+B,GAC/B,QAAQ,GACR,cAAc,CACjB,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACjD,UAAU,EAAE;YACV,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;SACxG,CAAC;KACH,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,GAAE,MAAM,EAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlG;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAqBtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EACzG,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CA2D9B;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|
package/dest/util.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { SecretValue } from '@aztec/foundation/config';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
3
4
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
4
5
|
import { resolve } from 'dns/promises';
|
|
5
6
|
import { promises as fs } from 'fs';
|
|
6
7
|
import net from 'net';
|
|
7
8
|
import path from 'path';
|
|
9
|
+
import { DEFAULT_PUBLIC_IP_SERVICES } from './config.js';
|
|
8
10
|
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
9
11
|
/**
|
|
10
12
|
* Converts an address string to a multiaddr string.
|
|
@@ -21,15 +23,26 @@ const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
|
21
23
|
return `/${multiaddrPrefix}/${address}/${protocol}/${port}`;
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
24
|
-
* Queries the public IP address of the machine.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
27
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
28
|
+
*/ export async function getPublicIp(services = DEFAULT_PUBLIC_IP_SERVICES) {
|
|
29
|
+
const errors = [];
|
|
30
|
+
for (const url of services){
|
|
31
|
+
try {
|
|
32
|
+
const resp = await fetch(url, {
|
|
33
|
+
signal: AbortSignal.timeout(5000)
|
|
34
|
+
});
|
|
35
|
+
const text = await resp.text();
|
|
36
|
+
const address = text.trim();
|
|
37
|
+
if (isValidIpAddress(address)) {
|
|
38
|
+
return address;
|
|
39
|
+
}
|
|
40
|
+
errors.push(`${url}: invalid IP "${address}"`);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
errors.push(`${url}: ${err.message ?? err}`);
|
|
43
|
+
}
|
|
31
44
|
}
|
|
32
|
-
|
|
45
|
+
throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
|
|
33
46
|
}
|
|
34
47
|
export function isValidIpAddress(address) {
|
|
35
48
|
const netType = net.isIP(address);
|
|
@@ -63,16 +76,24 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
63
76
|
..._config
|
|
64
77
|
};
|
|
65
78
|
const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
|
|
79
|
+
const logger = createLogger('p2p:config');
|
|
66
80
|
// If no broadcast port is provided, use the given p2p port as the broadcast port
|
|
67
81
|
if (!p2pBroadcastPort) {
|
|
68
82
|
config.p2pBroadcastPort = p2pPort;
|
|
69
83
|
}
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
84
|
+
// Resolve the initial public IP so the ENR and announce address are set at startup.
|
|
85
|
+
// If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
|
|
86
|
+
if (!p2pIp && queryForIp) {
|
|
87
|
+
config.p2pIp = await getPublicIp(config.publicIpServices);
|
|
88
|
+
logger.info('Resolved initial public IP for P2P', {
|
|
89
|
+
ip: config.p2pIp,
|
|
90
|
+
queryForIp
|
|
91
|
+
});
|
|
92
|
+
} else if (p2pIp) {
|
|
93
|
+
logger.info('Using configured static P2P IP', {
|
|
94
|
+
ip: p2pIp,
|
|
95
|
+
queryForIp
|
|
96
|
+
});
|
|
76
97
|
}
|
|
77
98
|
// TODO(md): guard against setting a local ip address as the announce ip
|
|
78
99
|
return config;
|
package/dest/versioning.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
2
|
-
import { type ComponentsVersions } from '@aztec/stdlib/versioning';
|
|
3
2
|
import type { SignableENR } from '@nethermindeth/enr';
|
|
4
3
|
/** Returns the component versions based on config and this build. */
|
|
5
|
-
export declare function getVersions(config: ChainConfig): ComponentsVersions;
|
|
4
|
+
export declare function getVersions(config: ChainConfig): import("@aztec/stdlib/versioning").ComponentsVersions;
|
|
6
5
|
/** Sets the aztec key on the ENR record with versioning info. */
|
|
7
|
-
export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig
|
|
6
|
+
export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig): import("@aztec/stdlib/versioning").ComponentsVersions;
|
|
8
7
|
/** Sets the Aztec client version on ENR record **/
|
|
9
8
|
export declare function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string): void;
|
|
10
|
-
|
|
11
|
-
export declare function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions): void;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcnNpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTdEQscUVBQXFFO0FBQ3JFLHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsc0JBRTlDO0FBRUQsaUVBQWlFO0FBQ2pFLHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsVUFBYyxzQkFLNUY7QUFFRCxtREFBbUQ7QUFDbkQsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFJbEY7QUFFRCwrRUFBK0U7QUFDL0Usd0JBQWdCLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLFFBVTFGIn0=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcnNpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHeEQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJdEQscUVBQXFFO0FBQ3JFLHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcseURBRTlDO0FBRUQsaUVBQWlFO0FBQ2pFLHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyx5REFJbkU7QUFFRCxtREFBbUQ7QUFDbkQsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFJbEYifQ==
|
package/dest/versioning.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,yDAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,yDAInE;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,QAIlF"}
|
package/dest/versioning.js
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
2
1
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
2
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
4
|
-
import {
|
|
5
|
-
import xxhashFactory from 'xxhash-wasm';
|
|
3
|
+
import { compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
6
4
|
import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
|
|
7
|
-
const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
|
|
8
|
-
const XX_HASH_LEN = 8;
|
|
9
|
-
const xxhash = await xxhashFactory();
|
|
10
5
|
/** Returns the component versions based on config and this build. */ export function getVersions(config) {
|
|
11
6
|
return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
|
|
12
7
|
}
|
|
13
|
-
/** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config
|
|
8
|
+
/** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config) {
|
|
14
9
|
const versions = getVersions(config);
|
|
15
|
-
|
|
16
|
-
enr.set(AZTEC_ENR_KEY, value);
|
|
10
|
+
enr.set(AZTEC_ENR_KEY, Buffer.from(compressComponentVersions(versions)));
|
|
17
11
|
return versions;
|
|
18
12
|
}
|
|
19
13
|
/** Sets the Aztec client version on ENR record **/ export function setAztecClientVersionEnrKey(enr, clientVersion) {
|
|
@@ -21,18 +15,3 @@ const xxhash = await xxhashFactory();
|
|
|
21
15
|
enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
|
|
22
16
|
}
|
|
23
17
|
}
|
|
24
|
-
/** Checks the given value from an ENR record against the expected versions. */ export function checkAztecEnrVersion(enrValue, expectedVersions) {
|
|
25
|
-
if (enrValue.length === XX_HASH_LEN) {
|
|
26
|
-
const expected = versionsToEnrValue(expectedVersions, true);
|
|
27
|
-
if (!Buffer.from(enrValue).equals(expected)) {
|
|
28
|
-
throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
const actual = Buffer.from(enrValue).toString();
|
|
32
|
-
checkCompressedComponentVersion(actual, expectedVersions);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function versionsToEnrValue(versions, useXxHash) {
|
|
36
|
-
const compressed = compressComponentVersions(versions);
|
|
37
|
-
return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
|
|
38
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.b3d3157a",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -67,17 +67,18 @@
|
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
72
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
73
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
74
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
75
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
78
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
79
|
-
"@aztec/
|
|
80
|
-
"@aztec/
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.b3d3157a",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.b3d3157a",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.b3d3157a",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.b3d3157a",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.b3d3157a",
|
|
75
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.b3d3157a",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.b3d3157a",
|
|
77
|
+
"@aztec/protocol-contracts": "0.0.1-commit.b3d3157a",
|
|
78
|
+
"@aztec/simulator": "0.0.1-commit.b3d3157a",
|
|
79
|
+
"@aztec/standard-contracts": "0.0.1-commit.b3d3157a",
|
|
80
|
+
"@aztec/stdlib": "0.0.1-commit.b3d3157a",
|
|
81
|
+
"@aztec/telemetry-client": "0.0.1-commit.b3d3157a",
|
|
81
82
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
82
83
|
"@chainsafe/libp2p-noise": "^15.0.0",
|
|
83
84
|
"@chainsafe/libp2p-yamux": "^6.0.2",
|
|
@@ -104,8 +105,8 @@
|
|
|
104
105
|
"xxhash-wasm": "^1.1.0"
|
|
105
106
|
},
|
|
106
107
|
"devDependencies": {
|
|
107
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
108
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
108
|
+
"@aztec/archiver": "0.0.1-commit.b3d3157a",
|
|
109
|
+
"@aztec/world-state": "0.0.1-commit.b3d3157a",
|
|
109
110
|
"@jest/globals": "^30.0.0",
|
|
110
111
|
"@types/jest": "^30.0.0",
|
|
111
112
|
"@types/node": "^22.15.17",
|
|
@@ -40,7 +40,7 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
40
40
|
if (!p2pIp) {
|
|
41
41
|
if (queryForIp) {
|
|
42
42
|
this.logger.info('Querying for public IP address...');
|
|
43
|
-
const publicIp = await getPublicIp();
|
|
43
|
+
const publicIp = await getPublicIp(config.publicIpServices);
|
|
44
44
|
p2pIp = publicIp;
|
|
45
45
|
this.logger.info(`Found public IP address: ${publicIp}`);
|
|
46
46
|
}
|
|
@@ -86,6 +86,14 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
86
86
|
this.node.on('discovered', async (enr: SignableENR) => {
|
|
87
87
|
const addr = await enr.getFullMultiaddr('udp');
|
|
88
88
|
this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
|
|
89
|
+
// discv5's discovered() only updates routing table entries that already exist. Nodes that
|
|
90
|
+
// established a session with an empty-IP ENR are never inserted, so even after their ENR
|
|
91
|
+
// gains a valid socket address the routing table stays empty and FINDNODE always returns 0
|
|
92
|
+
// peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
|
|
93
|
+
// the routing table so these nodes become discoverable to other peers.
|
|
94
|
+
if (addr) {
|
|
95
|
+
this.node.addEnr(enr);
|
|
96
|
+
}
|
|
89
97
|
});
|
|
90
98
|
|
|
91
99
|
try {
|
package/src/client/factory.ts
CHANGED
|
@@ -4,9 +4,10 @@ import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
5
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
6
6
|
import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
|
-
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
7
|
+
import type { BlockHash, L2BlockSource } from '@aztec/stdlib/block';
|
|
8
8
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
9
9
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
10
|
+
import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
|
|
10
11
|
import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
11
12
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
12
13
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -17,7 +18,13 @@ import { AttestationPool, type AttestationPoolApi } from '../mem_pools/attestati
|
|
|
17
18
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
18
19
|
import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
19
20
|
import { AztecKVTxPoolV2 } from '../mem_pools/tx_pool_v2/tx_pool_v2.js';
|
|
20
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
createCheckAllowedSetupCalls,
|
|
23
|
+
createTxValidatorForOnDemandReceivedTxs,
|
|
24
|
+
createTxValidatorForTransactionsEnteringPendingTxPool,
|
|
25
|
+
getDefaultAllowedSetupFunctions,
|
|
26
|
+
} from '../msg_validators/index.js';
|
|
27
|
+
import { TxValidationCache } from '../msg_validators/tx_validator/tx_validation_cache.js';
|
|
21
28
|
import { DummyP2PService } from '../services/dummy_service.js';
|
|
22
29
|
import { LibP2PService } from '../services/index.js';
|
|
23
30
|
import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
|
|
@@ -47,10 +54,12 @@ export async function createP2PClient(
|
|
|
47
54
|
proofVerifier: ClientProtocolCircuitVerifier,
|
|
48
55
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
49
56
|
epochCache: EpochCacheInterface,
|
|
57
|
+
blockMinFeesProvider: BlockMinFeesProvider,
|
|
50
58
|
packageVersion: string,
|
|
51
59
|
dateProvider: DateProvider = new DateProvider(),
|
|
52
60
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
53
61
|
deps: P2PClientDeps = {},
|
|
62
|
+
initialBlockHash: BlockHash,
|
|
54
63
|
) {
|
|
55
64
|
const config = await configureP2PClientAddresses({
|
|
56
65
|
...inputConfig,
|
|
@@ -69,12 +78,22 @@ export async function createP2PClient(
|
|
|
69
78
|
const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
|
|
70
79
|
const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
|
|
71
80
|
const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
|
|
72
|
-
const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME,
|
|
81
|
+
const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 2, config, bindings);
|
|
73
82
|
const l1Constants = await archiver.getL1Constants();
|
|
74
83
|
|
|
75
|
-
const rollupAddress = inputConfig.
|
|
84
|
+
const rollupAddress = inputConfig.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
|
|
76
85
|
const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
|
|
77
86
|
|
|
87
|
+
const allowedInSetup = [
|
|
88
|
+
...(await getDefaultAllowedSetupFunctions()),
|
|
89
|
+
...(inputConfig.txPublicSetupAllowListExtend ?? []),
|
|
90
|
+
];
|
|
91
|
+
const checkAllowedSetupCalls = createCheckAllowedSetupCalls(
|
|
92
|
+
archiver,
|
|
93
|
+
allowedInSetup,
|
|
94
|
+
() => epochCache.getEpochAndSlotInNextL1Slot().ts,
|
|
95
|
+
);
|
|
96
|
+
|
|
78
97
|
const txPool =
|
|
79
98
|
deps.txPool ??
|
|
80
99
|
new AztecKVTxPoolV2(
|
|
@@ -83,11 +102,12 @@ export async function createP2PClient(
|
|
|
83
102
|
{
|
|
84
103
|
l2BlockSource: archiver,
|
|
85
104
|
worldStateSynchronizer,
|
|
105
|
+
checkAllowedSetupCalls,
|
|
86
106
|
createTxValidator: async () => {
|
|
87
|
-
// We accept transactions if they are not expired by the next slot and block number (checked based on the ExpirationTimestamp field)
|
|
88
107
|
const currentBlockNumber = await archiver.getBlockNumber();
|
|
89
108
|
const { ts: nextSlotTimestamp } = epochCache.getEpochAndSlotInNextL1Slot();
|
|
90
109
|
const l1Constants = await archiver.getL1Constants();
|
|
110
|
+
const gasFees = await blockMinFeesProvider.getCurrentMinFees();
|
|
91
111
|
return createTxValidatorForTransactionsEnteringPendingTxPool(
|
|
92
112
|
worldStateSynchronizer,
|
|
93
113
|
nextSlotTimestamp,
|
|
@@ -97,8 +117,10 @@ export async function createP2PClient(
|
|
|
97
117
|
maxBlockL2Gas: config.validateMaxL2BlockGas,
|
|
98
118
|
maxBlockDAGas: config.validateMaxDABlockGas,
|
|
99
119
|
},
|
|
120
|
+
gasFees,
|
|
100
121
|
);
|
|
101
122
|
},
|
|
123
|
+
blockMinFeesProvider,
|
|
102
124
|
},
|
|
103
125
|
telemetry,
|
|
104
126
|
{
|
|
@@ -116,12 +138,16 @@ export async function createP2PClient(
|
|
|
116
138
|
attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
|
|
117
139
|
};
|
|
118
140
|
|
|
141
|
+
const txValidationCache =
|
|
142
|
+
config.txValidationCacheSize > 0 ? new TxValidationCache(config.txValidationCacheSize) : undefined;
|
|
143
|
+
|
|
119
144
|
const p2pService = await createP2PService(
|
|
120
145
|
config,
|
|
121
146
|
archiver,
|
|
122
147
|
proofVerifier,
|
|
123
148
|
worldStateSynchronizer,
|
|
124
149
|
epochCache,
|
|
150
|
+
blockMinFeesProvider,
|
|
125
151
|
store,
|
|
126
152
|
peerStore,
|
|
127
153
|
mempools,
|
|
@@ -129,11 +155,20 @@ export async function createP2PClient(
|
|
|
129
155
|
packageVersion,
|
|
130
156
|
logger.createChild('libp2p_service'),
|
|
131
157
|
telemetry,
|
|
158
|
+
txValidationCache,
|
|
132
159
|
);
|
|
133
160
|
|
|
161
|
+
const txValidatorForTxCollection = createTxValidatorForOnDemandReceivedTxs(
|
|
162
|
+
proofVerifier,
|
|
163
|
+
config,
|
|
164
|
+
/*bindings=*/ undefined,
|
|
165
|
+
txValidationCache,
|
|
166
|
+
);
|
|
134
167
|
const nodeSources = [
|
|
135
|
-
...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
|
|
136
|
-
...(deps.rpcTxProviders ?? []).map(
|
|
168
|
+
...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, txValidatorForTxCollection, config),
|
|
169
|
+
...(deps.rpcTxProviders ?? []).map(
|
|
170
|
+
(node, i) => new NodeRpcTxSource(node, txValidatorForTxCollection, `node-rpc-provider-${i}`),
|
|
171
|
+
),
|
|
137
172
|
...(deps.txCollectionNodeSources ?? []),
|
|
138
173
|
];
|
|
139
174
|
if (nodeSources.length > 0) {
|
|
@@ -145,6 +180,7 @@ export async function createP2PClient(
|
|
|
145
180
|
const fileStoreSources = await createFileStoreTxSources(
|
|
146
181
|
config.txCollectionFileStoreUrls,
|
|
147
182
|
txFileStoreBasePath,
|
|
183
|
+
txValidatorForTxCollection,
|
|
148
184
|
logger.createChild('file-store-tx-source'),
|
|
149
185
|
telemetry,
|
|
150
186
|
);
|
|
@@ -185,6 +221,8 @@ export async function createP2PClient(
|
|
|
185
221
|
config,
|
|
186
222
|
dateProvider,
|
|
187
223
|
telemetry,
|
|
224
|
+
undefined,
|
|
225
|
+
initialBlockHash,
|
|
188
226
|
);
|
|
189
227
|
}
|
|
190
228
|
|
|
@@ -194,6 +232,7 @@ async function createP2PService(
|
|
|
194
232
|
proofVerifier: ClientProtocolCircuitVerifier,
|
|
195
233
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
196
234
|
epochCache: EpochCacheInterface,
|
|
235
|
+
blockMinFeesProvider: BlockMinFeesProvider,
|
|
197
236
|
store: AztecAsyncKVStore,
|
|
198
237
|
peerStore: AztecLMDBStoreV2,
|
|
199
238
|
mempools: MemPools,
|
|
@@ -201,6 +240,7 @@ async function createP2PService(
|
|
|
201
240
|
packageVersion: string,
|
|
202
241
|
logger: Logger,
|
|
203
242
|
telemetry: TelemetryClient,
|
|
243
|
+
txValidationCache?: TxValidationCache,
|
|
204
244
|
) {
|
|
205
245
|
if (!config.p2pEnabled) {
|
|
206
246
|
logger.verbose('P2P is disabled. Using dummy P2P service.');
|
|
@@ -221,8 +261,10 @@ async function createP2PService(
|
|
|
221
261
|
proofVerifier,
|
|
222
262
|
worldStateSynchronizer,
|
|
223
263
|
peerStore,
|
|
264
|
+
blockMinFeesProvider,
|
|
224
265
|
telemetry,
|
|
225
266
|
logger: logger.createChild(`libp2p_service`),
|
|
267
|
+
txValidationCache,
|
|
226
268
|
});
|
|
227
269
|
|
|
228
270
|
return p2pService;
|
package/src/client/interface.ts
CHANGED
|
@@ -9,15 +9,12 @@ 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,
|
|
20
16
|
P2PBlockReceivedCallback,
|
|
17
|
+
P2PCheckpointAttestationCallback,
|
|
21
18
|
P2PCheckpointReceivedCallback,
|
|
22
19
|
} from '../services/service.js';
|
|
23
20
|
|
|
@@ -82,7 +79,15 @@ export type P2P = P2PClient & {
|
|
|
82
79
|
*
|
|
83
80
|
* @param handler - A function taking a received checkpoint proposal and producing attestations
|
|
84
81
|
*/
|
|
85
|
-
|
|
82
|
+
registerValidatorCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Registers a callback that runs for ALL nodes (not just validators) when a checkpoint proposal is received.
|
|
86
|
+
* Used to set the proposed checkpoint number on the archiver so the sequencer can build on top of it.
|
|
87
|
+
*
|
|
88
|
+
* @param handler - A function taking a received checkpoint proposal
|
|
89
|
+
*/
|
|
90
|
+
registerAllNodesCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
86
91
|
|
|
87
92
|
/**
|
|
88
93
|
* Registers a callback invoked when a duplicate proposal is detected (equivocation).
|
|
@@ -101,6 +106,9 @@ export type P2P = P2PClient & {
|
|
|
101
106
|
*/
|
|
102
107
|
registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
|
|
103
108
|
|
|
109
|
+
/** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
|
|
110
|
+
registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
|
|
111
|
+
|
|
104
112
|
/**
|
|
105
113
|
* Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
|
|
106
114
|
* @param tx - The transaction.
|
|
@@ -216,11 +224,7 @@ export type P2P = P2PClient & {
|
|
|
216
224
|
/** Clears the db. */
|
|
217
225
|
clear(): Promise<void>;
|
|
218
226
|
|
|
219
|
-
addReqRespSubProtocol(
|
|
220
|
-
subProtocol: ReqRespSubProtocol,
|
|
221
|
-
handler: ReqRespSubProtocolHandler,
|
|
222
|
-
validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
223
|
-
): Promise<void>;
|
|
227
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
|
|
224
228
|
|
|
225
229
|
handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
|
|
226
230
|
|