@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.5476d83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -9
- package/dest/client/factory.d.ts +14 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +60 -24
- package/dest/client/index.d.ts +2 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +157 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +72 -187
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +373 -177
- package/dest/config.d.ts +151 -125
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +183 -34
- package/dest/enr/generate-enr.d.ts +11 -3
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +27 -5
- package/dest/enr/index.d.ts +1 -1
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +4 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +68 -8
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +214 -63
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -6
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +126 -25
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +19 -6
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +111 -21
- package/dest/mem_pools/attestation_pool/mocks.d.ts +225 -5
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +9 -15
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +10 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +35 -38
- package/dest/mem_pools/interface.d.ts +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +62 -13
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +469 -97
- package/dest/mem_pools/tx_pool/index.d.ts +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +34 -10
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +133 -36
- package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
- package/dest/mem_pools/tx_pool/priority.js +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +65 -9
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +264 -39
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +45 -9
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +6 -2
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +73 -12
- package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
- package/dest/msg_validators/index.d.ts +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- 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/allowed_public_setup.d.ts +3 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +56 -86
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
- package/dest/msg_validators/tx_validator/factory.d.ts +15 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +74 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
- package/dest/msg_validators/tx_validator/index.d.ts +8 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +7 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +8 -4
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/test_utils.js +22 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -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 +6 -5
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.d.ts +10 -9
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +63 -36
- package/dest/services/dummy_service.d.ts +50 -11
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +88 -5
- package/dest/services/encoding.d.ts +26 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +73 -5
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +5 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +4 -0
- package/dest/services/libp2p/instrumentation.d.ts +20 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +164 -0
- package/dest/services/libp2p/libp2p_service.d.ts +78 -89
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +698 -246
- package/dest/services/peer-manager/interface.d.ts +23 -0
- package/dest/services/peer-manager/interface.d.ts.map +1 -0
- package/dest/services/peer-manager/interface.js +1 -0
- package/dest/services/peer-manager/metrics.d.ts +6 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +22 -2
- package/dest/services/peer-manager/peer_manager.d.ts +102 -22
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +549 -72
- 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 +40 -2
- package/dest/services/reqresp/config.d.ts +11 -9
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +18 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +31 -17
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
- package/dest/services/reqresp/index.d.ts +3 -2
- package/dest/services/reqresp/index.d.ts.map +1 -1
- package/dest/services/reqresp/index.js +2 -1
- package/dest/services/reqresp/interface.d.ts +73 -24
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +45 -26
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.d.ts +43 -0
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/auth.js +71 -0
- package/dest/services/reqresp/protocols/block.d.ts +6 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +28 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +47 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +7 -7
- package/dest/services/reqresp/protocols/index.d.ts +3 -1
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +2 -0
- package/dest/services/reqresp/protocols/ping.d.ts +1 -3
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +39 -7
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +72 -5
- package/dest/services/reqresp/protocols/tx.d.ts +13 -2
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +34 -6
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
- 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 +21 -1
- package/dest/services/reqresp/reqresp.d.ts +24 -66
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +298 -207
- package/dest/services/reqresp/status.d.ts +10 -4
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/reqresp/status.js +9 -2
- package/dest/services/service.d.ts +23 -19
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +25 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +58 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +50 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/fast_tx_collection.js +300 -0
- package/dest/services/tx_collection/index.d.ts +3 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +2 -0
- package/dest/services/tx_collection/instrumentation.d.ts +10 -0
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_collection/instrumentation.js +34 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +52 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/slow_tx_collection.js +177 -0
- package/dest/services/tx_collection/tx_collection.d.ts +109 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +128 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +111 -0
- package/dest/services/tx_collection/tx_source.d.ts +18 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +31 -0
- package/dest/services/tx_provider.d.ts +49 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +210 -0
- package/dest/services/tx_provider_instrumentation.d.ts +13 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +34 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +2 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +1 -0
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +4 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +86 -16
- package/dest/test-helpers/mock-pubsub.d.ts +59 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +130 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
- package/dest/test-helpers/mock-tx-helpers.js +19 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +62 -28
- package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +103 -29
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/testbench.js +4 -4
- package/dest/testbench/worker_client_manager.d.ts +1 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +11 -19
- package/dest/types/index.d.ts +4 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +2 -0
- package/dest/util.d.ts +24 -16
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +75 -69
- package/dest/versioning.d.ts +4 -4
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +8 -3
- package/package.json +32 -27
- package/src/bootstrap/bootstrap.ts +27 -11
- package/src/client/factory.ts +136 -45
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +198 -0
- package/src/client/p2p_client.ts +469 -330
- package/src/config.ts +305 -134
- package/src/enr/generate-enr.ts +39 -6
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/index.ts +4 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +75 -7
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +264 -65
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +173 -34
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +156 -30
- package/src/mem_pools/attestation_pool/mocks.ts +11 -10
- package/src/mem_pools/instrumentation.ts +43 -44
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +549 -108
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +153 -44
- package/src/mem_pools/tx_pool/priority.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +67 -8
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +217 -34
- package/src/msg_validators/attestation_validator/attestation_validator.ts +54 -11
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +82 -14
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +4 -4
- package/src/msg_validators/tx_validator/data_validator.ts +81 -69
- package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
- package/src/msg_validators/tx_validator/factory.ts +109 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
- package/src/msg_validators/tx_validator/index.ts +7 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +58 -21
- package/src/msg_validators/tx_validator/phases_validator.ts +116 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +46 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
- package/src/services/discv5/discV5_service.ts +84 -38
- package/src/services/dummy_service.ts +147 -9
- package/src/services/encoding.ts +80 -5
- package/src/services/index.ts +4 -0
- package/src/services/libp2p/instrumentation.ts +167 -0
- package/src/services/libp2p/libp2p_service.ts +866 -294
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +26 -1
- package/src/services/peer-manager/peer_manager.ts +654 -78
- package/src/services/peer-manager/peer_scoring.ts +46 -3
- package/src/services/reqresp/config.ts +26 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +148 -95
- package/src/services/reqresp/index.ts +2 -0
- package/src/services/reqresp/interface.ts +91 -36
- package/src/services/reqresp/metrics.ts +4 -1
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block.ts +24 -3
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +9 -7
- package/src/services/reqresp/protocols/index.ts +2 -0
- package/src/services/reqresp/protocols/status.ts +117 -5
- package/src/services/reqresp/protocols/tx.ts +35 -6
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
- package/src/services/reqresp/reqresp.ts +387 -256
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +45 -21
- package/src/services/tx_collection/config.ts +84 -0
- package/src/services/tx_collection/fast_tx_collection.ts +340 -0
- package/src/services/tx_collection/index.ts +2 -0
- package/src/services/tx_collection/instrumentation.ts +43 -0
- package/src/services/tx_collection/slow_tx_collection.ts +233 -0
- package/src/services/tx_collection/tx_collection.ts +215 -0
- package/src/services/tx_collection/tx_collection_sink.ts +129 -0
- package/src/services/tx_collection/tx_source.ts +37 -0
- package/src/services/tx_provider.ts +216 -0
- package/src/services/tx_provider_instrumentation.ts +44 -0
- package/src/test-helpers/index.ts +1 -0
- package/src/test-helpers/make-enrs.ts +4 -5
- package/src/test-helpers/make-test-p2p-clients.ts +111 -21
- package/src/test-helpers/mock-pubsub.ts +188 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +86 -35
- package/src/testbench/p2p_client_testbench_worker.ts +151 -25
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +17 -23
- package/src/types/index.ts +2 -0
- package/src/util.ts +105 -91
- package/src/versioning.ts +11 -4
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
4
|
+
import { mockTx } from '@aztec/stdlib/testing';
|
|
5
|
+
import { Tx } from '@aztec/stdlib/tx';
|
|
6
|
+
|
|
7
|
+
import type { P2PConfig } from '../config.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Helper function to create mock transactions with the correct metadata values
|
|
11
|
+
* that will pass validation when sent over the p2p network.
|
|
12
|
+
*
|
|
13
|
+
* @param config - The P2P configuration containing chainId and rollupVersion
|
|
14
|
+
* @param seed - Optional seed for the mock transaction
|
|
15
|
+
* @returns A mock transaction with valid metadata for p2p network transmission
|
|
16
|
+
*/
|
|
17
|
+
export const createMockTxWithMetadata = (config: P2PConfig, seed?: number): Promise<Tx> => {
|
|
18
|
+
return mockTx(seed, {
|
|
19
|
+
chainId: new Fr(config.l1ChainId),
|
|
20
|
+
version: new Fr(config.rollupVersion),
|
|
21
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
22
|
+
protocolContractsHash,
|
|
23
|
+
});
|
|
24
|
+
};
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
2
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
5
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
4
6
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
5
7
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
6
8
|
import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
|
|
7
|
-
import type {
|
|
9
|
+
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
10
|
+
import type {
|
|
11
|
+
ClientProtocolCircuitVerifier,
|
|
12
|
+
IVCProofVerificationResult,
|
|
13
|
+
WorldStateSynchronizer,
|
|
14
|
+
} from '@aztec/stdlib/interfaces/server';
|
|
8
15
|
import type { P2PClientType } from '@aztec/stdlib/p2p';
|
|
9
16
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
17
|
+
import { compressComponentVersions } from '@aztec/stdlib/versioning';
|
|
10
18
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
11
19
|
|
|
12
|
-
import { SignableENR } from '@chainsafe/enr';
|
|
13
20
|
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
14
21
|
import { noise } from '@chainsafe/libp2p-noise';
|
|
15
22
|
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
@@ -19,6 +26,7 @@ import type { PeerId } from '@libp2p/interface';
|
|
|
19
26
|
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
20
27
|
import { tcp } from '@libp2p/tcp';
|
|
21
28
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
29
|
+
import { SignableENR } from '@nethermindeth/enr';
|
|
22
30
|
import getPort from 'get-port';
|
|
23
31
|
import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
|
|
24
32
|
|
|
@@ -27,17 +35,20 @@ import type { BootnodeConfig, P2PConfig } from '../config.js';
|
|
|
27
35
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
28
36
|
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
29
37
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
30
|
-
import
|
|
38
|
+
import { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
39
|
+
import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
|
|
31
40
|
import type { P2PReqRespConfig } from '../services/reqresp/config.js';
|
|
32
41
|
import {
|
|
33
42
|
ReqRespSubProtocol,
|
|
34
43
|
type ReqRespSubProtocolHandlers,
|
|
44
|
+
type ReqRespSubProtocolRateLimits,
|
|
35
45
|
type ReqRespSubProtocolValidators,
|
|
36
46
|
noopValidator,
|
|
37
47
|
} from '../services/reqresp/interface.js';
|
|
38
|
-
import { pingHandler
|
|
48
|
+
import { pingHandler } from '../services/reqresp/protocols/index.js';
|
|
39
49
|
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
40
|
-
import { type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
50
|
+
import { type FullLibp2p, type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
51
|
+
import { getVersions } from '../versioning.js';
|
|
41
52
|
|
|
42
53
|
/**
|
|
43
54
|
* Creates a libp2p node, pre configured.
|
|
@@ -50,13 +61,13 @@ export async function createLibp2pNode(
|
|
|
50
61
|
port?: number,
|
|
51
62
|
enableGossipSub: boolean = false,
|
|
52
63
|
start: boolean = true,
|
|
53
|
-
): Promise<
|
|
64
|
+
): Promise<FullLibp2p> {
|
|
54
65
|
port = port ?? (await getPort());
|
|
55
66
|
const options: Libp2pOptions = {
|
|
56
67
|
start,
|
|
57
68
|
addresses: {
|
|
58
|
-
listen: [`/ip4/
|
|
59
|
-
announce: [`/ip4/
|
|
69
|
+
listen: [`/ip4/127.0.0.1/tcp/${port}`],
|
|
70
|
+
announce: [`/ip4/127.0.0.1/tcp/${port}`],
|
|
60
71
|
},
|
|
61
72
|
connectionEncryption: [noise()],
|
|
62
73
|
streamMuxers: [yamux()],
|
|
@@ -86,7 +97,7 @@ export async function createLibp2pNode(
|
|
|
86
97
|
});
|
|
87
98
|
}
|
|
88
99
|
|
|
89
|
-
return await createLibp2p(options);
|
|
100
|
+
return (await createLibp2p(options)) as FullLibp2p;
|
|
90
101
|
}
|
|
91
102
|
|
|
92
103
|
/**
|
|
@@ -98,7 +109,7 @@ export async function createLibp2pNode(
|
|
|
98
109
|
export async function createTestLibP2PService<T extends P2PClientType>(
|
|
99
110
|
clientType: T,
|
|
100
111
|
boostrapAddrs: string[] = [],
|
|
101
|
-
|
|
112
|
+
archiver: L2BlockSource & ContractDataSource,
|
|
102
113
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
103
114
|
epochCache: EpochCache,
|
|
104
115
|
mempools: MemPools<T>,
|
|
@@ -109,31 +120,53 @@ export async function createTestLibP2PService<T extends P2PClientType>(
|
|
|
109
120
|
) {
|
|
110
121
|
peerId = peerId ?? (await createSecp256k1PeerId());
|
|
111
122
|
const config = {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
tcpListenAddress: `0.0.0.0:${port}`,
|
|
115
|
-
udpListenAddress: `0.0.0.0:${port}`,
|
|
123
|
+
p2pIp: `127.0.0.1`,
|
|
124
|
+
p2pPort: port,
|
|
116
125
|
bootstrapNodes: boostrapAddrs,
|
|
117
126
|
peerCheckIntervalMS: 1000,
|
|
118
127
|
maxPeerCount: 5,
|
|
119
128
|
p2pEnabled: true,
|
|
120
|
-
peerIdPrivateKey: Buffer.from(peerId.privateKey!).toString('hex'),
|
|
129
|
+
peerIdPrivateKey: new SecretValue(Buffer.from(peerId.privateKey!).toString('hex')),
|
|
121
130
|
bootstrapNodeEnrVersionCheck: false,
|
|
122
131
|
...chainConfig,
|
|
123
132
|
} as P2PConfig & DataStoreConfig;
|
|
124
|
-
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
133
|
+
const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
|
|
125
134
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
126
135
|
|
|
127
136
|
// No bootstrap nodes provided as the libp2p service will register them in the constructor
|
|
128
137
|
const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
|
|
129
138
|
|
|
139
|
+
// Duplicated setup code from Libp2pService.new
|
|
140
|
+
const peerScoring = new PeerScoring(config);
|
|
141
|
+
const reqresp = new ReqResp(config, p2pNode, peerScoring);
|
|
142
|
+
const versions = getVersions(config);
|
|
143
|
+
const protocolVersion = compressComponentVersions(versions);
|
|
144
|
+
const peerManager = new PeerManager(
|
|
145
|
+
p2pNode,
|
|
146
|
+
discoveryService,
|
|
147
|
+
config,
|
|
148
|
+
telemetry,
|
|
149
|
+
createLogger(`p2p:peer_manager`),
|
|
150
|
+
peerScoring,
|
|
151
|
+
reqresp,
|
|
152
|
+
worldStateSynchronizer,
|
|
153
|
+
protocolVersion,
|
|
154
|
+
epochCache,
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
p2pNode.services.pubsub.score.params.appSpecificWeight = 10;
|
|
158
|
+
p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
|
|
159
|
+
peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
160
|
+
|
|
130
161
|
return new LibP2PService<T>(
|
|
131
162
|
clientType,
|
|
132
163
|
config,
|
|
133
164
|
p2pNode as PubSubLibp2p,
|
|
134
165
|
discoveryService,
|
|
166
|
+
reqresp,
|
|
167
|
+
peerManager,
|
|
135
168
|
mempools,
|
|
136
|
-
|
|
169
|
+
archiver,
|
|
137
170
|
epochCache,
|
|
138
171
|
proofVerifier,
|
|
139
172
|
worldStateSynchronizer,
|
|
@@ -153,10 +186,12 @@ export type ReqRespNode = {
|
|
|
153
186
|
// Mock sub protocol handlers
|
|
154
187
|
export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
|
|
155
188
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
156
|
-
[ReqRespSubProtocol.STATUS]:
|
|
189
|
+
[ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
|
|
157
190
|
[ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
|
|
158
191
|
[ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
|
|
159
192
|
[ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
|
|
193
|
+
[ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
|
|
194
|
+
[ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
|
|
160
195
|
};
|
|
161
196
|
|
|
162
197
|
// By default, all requests are valid
|
|
@@ -167,14 +202,20 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
|
|
|
167
202
|
[ReqRespSubProtocol.TX]: noopValidator,
|
|
168
203
|
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
169
204
|
[ReqRespSubProtocol.BLOCK]: noopValidator,
|
|
205
|
+
[ReqRespSubProtocol.AUTH]: noopValidator,
|
|
206
|
+
[ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
|
|
170
207
|
};
|
|
171
208
|
|
|
172
209
|
/**
|
|
173
210
|
* @param numberOfNodes - the number of nodes to create
|
|
174
211
|
* @returns An array of the created nodes
|
|
175
212
|
*/
|
|
176
|
-
export const createNodes = (
|
|
177
|
-
|
|
213
|
+
export const createNodes = (
|
|
214
|
+
peerScoring: PeerScoring,
|
|
215
|
+
numberOfNodes: number,
|
|
216
|
+
rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
|
|
217
|
+
): Promise<ReqRespNode[]> => {
|
|
218
|
+
return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
|
|
178
219
|
};
|
|
179
220
|
|
|
180
221
|
export const startNodes = async (
|
|
@@ -193,17 +234,19 @@ export const stopNodes = async (nodes: ReqRespNode[]): Promise<void> => {
|
|
|
193
234
|
};
|
|
194
235
|
|
|
195
236
|
// Create a req resp node, exposing the underlying p2p node
|
|
196
|
-
export const createReqResp = async (
|
|
237
|
+
export const createReqResp = async (
|
|
238
|
+
peerScoring: PeerScoring,
|
|
239
|
+
rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
|
|
240
|
+
): Promise<ReqRespNode> => {
|
|
197
241
|
const p2p = await createLibp2pNode();
|
|
198
242
|
const config: P2PReqRespConfig = {
|
|
199
243
|
overallRequestTimeoutMs: 4000,
|
|
200
244
|
individualRequestTimeoutMs: 2000,
|
|
245
|
+
dialTimeoutMs: 1000,
|
|
246
|
+
p2pOptimisticNegotiation: false,
|
|
201
247
|
};
|
|
202
|
-
const req = new ReqResp(config, p2p, peerScoring);
|
|
203
|
-
return {
|
|
204
|
-
p2p,
|
|
205
|
-
req,
|
|
206
|
-
};
|
|
248
|
+
const req = new ReqResp(config, p2p, peerScoring, undefined, rateLimits);
|
|
249
|
+
return { p2p, req };
|
|
207
250
|
};
|
|
208
251
|
|
|
209
252
|
// Given a node list; hand shake all of the nodes with each other
|
|
@@ -221,13 +264,19 @@ export const connectToPeers = async (nodes: ReqRespNode[]): Promise<void> => {
|
|
|
221
264
|
|
|
222
265
|
// Mock circuit verifier for testing - reimplementation from bb to avoid dependency
|
|
223
266
|
export class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
224
|
-
|
|
225
|
-
return Promise.resolve(
|
|
267
|
+
stop(): Promise<void> {
|
|
268
|
+
return Promise.resolve();
|
|
269
|
+
}
|
|
270
|
+
verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
|
|
271
|
+
return Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 });
|
|
226
272
|
}
|
|
227
273
|
}
|
|
228
274
|
export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
229
|
-
|
|
230
|
-
return Promise.resolve(
|
|
275
|
+
stop(): Promise<void> {
|
|
276
|
+
return Promise.resolve();
|
|
277
|
+
}
|
|
278
|
+
verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
|
|
279
|
+
return Promise.resolve({ valid: false, durationMs: 0, totalDurationMs: 0 });
|
|
231
280
|
}
|
|
232
281
|
}
|
|
233
282
|
|
|
@@ -235,12 +284,14 @@ export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier
|
|
|
235
284
|
export function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig {
|
|
236
285
|
return {
|
|
237
286
|
l1ChainId: chainConfig.l1ChainId,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
peerIdPrivateKey: privateKey,
|
|
287
|
+
p2pIp: '127.0.0.1',
|
|
288
|
+
p2pPort: port,
|
|
289
|
+
peerIdPrivateKey: new SecretValue(privateKey),
|
|
241
290
|
dataDirectory: undefined,
|
|
242
|
-
|
|
291
|
+
dataStoreMapSizeKb: 0,
|
|
243
292
|
bootstrapNodes: [],
|
|
293
|
+
listenAddress: '127.0.0.1',
|
|
294
|
+
queryForIp: false,
|
|
244
295
|
};
|
|
245
296
|
}
|
|
246
297
|
|
|
@@ -263,7 +314,7 @@ export function createBootstrapNodeFromPrivateKey(
|
|
|
263
314
|
export async function getBootstrapNodeEnr(privateKey: string, port: number) {
|
|
264
315
|
const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
|
|
265
316
|
const enr = SignableENR.createFromPeerId(peerId);
|
|
266
|
-
const listenAddrUdp = multiaddr(convertToMultiaddr(
|
|
317
|
+
const listenAddrUdp = multiaddr(convertToMultiaddr('127.0.0.1', port, 'udp'));
|
|
267
318
|
enr.setLocationMultiaddr(listenAddrUdp);
|
|
268
319
|
|
|
269
320
|
return enr;
|
|
@@ -5,28 +5,41 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
7
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
|
+
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
8
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
10
|
import { createLogger } from '@aztec/foundation/log';
|
|
10
11
|
import { sleep } from '@aztec/foundation/sleep';
|
|
11
12
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
12
13
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
13
|
-
import type {
|
|
14
|
-
import {
|
|
14
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
15
|
+
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
16
|
+
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
17
|
+
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
15
18
|
import { Tx, TxStatus } from '@aztec/stdlib/tx';
|
|
19
|
+
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
16
20
|
|
|
17
21
|
import type { Message, PeerId } from '@libp2p/interface';
|
|
22
|
+
import { TopicValidatorResult } from '@libp2p/interface';
|
|
23
|
+
import EventEmitter from 'events';
|
|
18
24
|
|
|
19
25
|
import type { P2PConfig } from '../config.js';
|
|
20
26
|
import { createP2PClient } from '../index.js';
|
|
21
27
|
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
28
|
+
import type { MemPools } from '../mem_pools/interface.js';
|
|
22
29
|
import type { TxPool } from '../mem_pools/tx_pool/index.js';
|
|
30
|
+
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
31
|
+
import type { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
32
|
+
import type { ReqResp } from '../services/reqresp/reqresp.js';
|
|
33
|
+
import type { PeerDiscoveryService } from '../services/service.js';
|
|
23
34
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
35
|
+
import type { PubSubLibp2p } from '../util.js';
|
|
24
36
|
|
|
25
37
|
// Simple mock implementation
|
|
26
38
|
function mockTxPool(): TxPool {
|
|
27
39
|
// Mock all methods
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
const pool: Omit<TxPool, keyof EventEmitter> = {
|
|
41
|
+
isEmpty: () => Promise.resolve(false),
|
|
42
|
+
addTxs: () => Promise.resolve(1),
|
|
30
43
|
getTxByHash: () => Promise.resolve(undefined),
|
|
31
44
|
getArchivedTxByHash: () => Promise.resolve(undefined),
|
|
32
45
|
markAsMined: () => Promise.resolve(),
|
|
@@ -35,55 +48,159 @@ function mockTxPool(): TxPool {
|
|
|
35
48
|
getAllTxs: () => Promise.resolve([]),
|
|
36
49
|
getAllTxHashes: () => Promise.resolve([]),
|
|
37
50
|
getPendingTxHashes: () => Promise.resolve([]),
|
|
51
|
+
getPendingTxCount: () => Promise.resolve(0),
|
|
38
52
|
getMinedTxHashes: () => Promise.resolve([]),
|
|
39
53
|
getTxStatus: () => Promise.resolve(TxStatus.PENDING),
|
|
54
|
+
getTxsByHash: () => Promise.resolve([]),
|
|
55
|
+
hasTxs: () => Promise.resolve([]),
|
|
56
|
+
hasTx: () => Promise.resolve(false),
|
|
57
|
+
updateConfig: () => {},
|
|
58
|
+
markTxsAsNonEvictable: () => Promise.resolve(),
|
|
59
|
+
cleanupDeletedMinedTxs: () => Promise.resolve(0),
|
|
40
60
|
};
|
|
61
|
+
return Object.assign(new EventEmitter(), pool);
|
|
41
62
|
}
|
|
42
63
|
|
|
43
64
|
function mockAttestationPool(): AttestationPool {
|
|
44
65
|
return {
|
|
66
|
+
isEmpty: () => Promise.resolve(false),
|
|
45
67
|
addAttestations: () => Promise.resolve(),
|
|
46
68
|
deleteAttestations: () => Promise.resolve(),
|
|
47
69
|
deleteAttestationsOlderThan: () => Promise.resolve(),
|
|
48
70
|
deleteAttestationsForSlot: () => Promise.resolve(),
|
|
49
71
|
deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
|
|
50
72
|
getAttestationsForSlot: () => Promise.resolve([]),
|
|
73
|
+
getAttestationsForSlotAndProposal: () => Promise.resolve([]),
|
|
74
|
+
addBlockProposal: () => Promise.resolve(),
|
|
75
|
+
getBlockProposal: () => Promise.resolve(undefined),
|
|
76
|
+
hasBlockProposal: () => Promise.resolve(false),
|
|
77
|
+
hasAttestation: () => Promise.resolve(false),
|
|
78
|
+
canAddProposal: () => Promise.resolve(true),
|
|
79
|
+
canAddAttestation: () => Promise.resolve(true),
|
|
51
80
|
};
|
|
52
81
|
}
|
|
53
82
|
|
|
54
83
|
function mockEpochCache(): EpochCacheInterface {
|
|
55
84
|
return {
|
|
56
|
-
getCommittee: () => Promise.resolve([]
|
|
85
|
+
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO }),
|
|
57
86
|
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
58
|
-
getEpochAndSlotNow: () => ({ epoch:
|
|
87
|
+
getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n }),
|
|
59
88
|
computeProposerIndex: () => 0n,
|
|
60
|
-
|
|
89
|
+
getProposerAttesterAddressInCurrentOrNextSlot: () =>
|
|
61
90
|
Promise.resolve({
|
|
62
91
|
currentProposer: EthAddress.ZERO,
|
|
63
92
|
nextProposer: EthAddress.ZERO,
|
|
64
|
-
currentSlot:
|
|
65
|
-
nextSlot:
|
|
93
|
+
currentSlot: SlotNumber.ZERO,
|
|
94
|
+
nextSlot: SlotNumber.ZERO,
|
|
66
95
|
}),
|
|
96
|
+
getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
|
|
67
97
|
isInCommittee: () => Promise.resolve(false),
|
|
98
|
+
getRegisteredValidators: () => Promise.resolve([]),
|
|
99
|
+
filterInCommittee: () => Promise.resolve([]),
|
|
68
100
|
};
|
|
69
101
|
}
|
|
70
102
|
|
|
103
|
+
function mockWorldStateSynchronizer(): WorldStateSynchronizer {
|
|
104
|
+
return {
|
|
105
|
+
status: () =>
|
|
106
|
+
Promise.resolve({
|
|
107
|
+
syncSummary: {
|
|
108
|
+
latestBlockNumber: 0,
|
|
109
|
+
latestBlockHash: '',
|
|
110
|
+
finalizedBlockNumber: 0,
|
|
111
|
+
treesAreSynched: false,
|
|
112
|
+
oldestHistoricBlockNumber: 0,
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
115
|
+
} as WorldStateSynchronizer;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
|
|
119
|
+
private disableTxValidation: boolean;
|
|
120
|
+
private gossipMessageCount: number = 0;
|
|
121
|
+
|
|
122
|
+
constructor(
|
|
123
|
+
clientType: T,
|
|
124
|
+
config: P2PConfig,
|
|
125
|
+
node: PubSubLibp2p,
|
|
126
|
+
peerDiscoveryService: PeerDiscoveryService,
|
|
127
|
+
reqresp: ReqResp,
|
|
128
|
+
peerManager: PeerManager,
|
|
129
|
+
mempools: MemPools<T>,
|
|
130
|
+
archiver: L2BlockSource & ContractDataSource,
|
|
131
|
+
epochCache: EpochCacheInterface,
|
|
132
|
+
proofVerifier: ClientProtocolCircuitVerifier,
|
|
133
|
+
worldStateSynchronizer: WorldStateSynchronizer,
|
|
134
|
+
telemetry: TelemetryClient,
|
|
135
|
+
logger = createLogger('p2p:test:libp2p_service'),
|
|
136
|
+
disableTxValidation = true,
|
|
137
|
+
) {
|
|
138
|
+
super(
|
|
139
|
+
clientType,
|
|
140
|
+
config,
|
|
141
|
+
node,
|
|
142
|
+
peerDiscoveryService,
|
|
143
|
+
reqresp,
|
|
144
|
+
peerManager,
|
|
145
|
+
mempools,
|
|
146
|
+
archiver,
|
|
147
|
+
epochCache,
|
|
148
|
+
proofVerifier,
|
|
149
|
+
worldStateSynchronizer,
|
|
150
|
+
telemetry,
|
|
151
|
+
logger,
|
|
152
|
+
);
|
|
153
|
+
this.disableTxValidation = disableTxValidation;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
public getGossipMessageCount(): number {
|
|
157
|
+
return this.gossipMessageCount;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
public setDisableTxValidation(disable: boolean): void {
|
|
161
|
+
this.disableTxValidation = disable;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
protected override async handleGossipedTx(payload: Buffer, msgId: string, source: PeerId) {
|
|
165
|
+
if (this.disableTxValidation) {
|
|
166
|
+
const p2pMessage = P2PMessage.fromMessageData(payload);
|
|
167
|
+
const tx = Tx.fromBuffer(p2pMessage.payload);
|
|
168
|
+
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
|
|
169
|
+
|
|
170
|
+
const txHash = tx.getTxHash();
|
|
171
|
+
const txHashString = txHash.toString();
|
|
172
|
+
this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
|
|
173
|
+
await this.mempools.txPool.addTxs([tx]);
|
|
174
|
+
} else {
|
|
175
|
+
await super.handleGossipedTx(payload, msgId, source);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
protected override async handleNewGossipMessage(msg: Message, msgId: string, source: PeerId) {
|
|
180
|
+
this.gossipMessageCount++;
|
|
181
|
+
process.send!({
|
|
182
|
+
type: 'GOSSIP_RECEIVED',
|
|
183
|
+
count: this.gossipMessageCount,
|
|
184
|
+
});
|
|
185
|
+
await super.handleNewGossipMessage(msg, msgId, source);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
71
189
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
72
190
|
process.on('message', async msg => {
|
|
73
191
|
const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
|
|
74
|
-
|
|
75
192
|
try {
|
|
76
193
|
if (type === 'START') {
|
|
77
194
|
const txPool = mockTxPool();
|
|
78
195
|
const attestationPool = mockAttestationPool();
|
|
79
196
|
const epochCache = mockEpochCache();
|
|
80
|
-
const worldState =
|
|
197
|
+
const worldState = mockWorldStateSynchronizer();
|
|
81
198
|
const l2BlockSource = new MockL2BlockSource();
|
|
82
|
-
await l2BlockSource.createBlocks(100);
|
|
83
199
|
|
|
84
200
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
85
201
|
const kvStore = await openTmpStore(`test-${clientIndex}`);
|
|
86
202
|
const logger = createLogger(`p2p:${clientIndex}`);
|
|
203
|
+
const telemetry = getTelemetryClient();
|
|
87
204
|
|
|
88
205
|
const deps = {
|
|
89
206
|
txPool,
|
|
@@ -99,23 +216,32 @@ process.on('message', async msg => {
|
|
|
99
216
|
proofVerifier,
|
|
100
217
|
worldState,
|
|
101
218
|
epochCache,
|
|
219
|
+
'test-p2p-bench-worker',
|
|
102
220
|
undefined,
|
|
221
|
+
telemetry,
|
|
103
222
|
deps,
|
|
104
223
|
);
|
|
105
224
|
|
|
106
|
-
// Create
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
225
|
+
// Create test service with validation disabled
|
|
226
|
+
const testService = new TestLibP2PService(
|
|
227
|
+
P2PClientType.Full,
|
|
228
|
+
config,
|
|
229
|
+
(client as any).p2pService.node,
|
|
230
|
+
(client as any).p2pService.peerDiscoveryService,
|
|
231
|
+
(client as any).p2pService.mempools,
|
|
232
|
+
(client as any).p2pService.reqresp,
|
|
233
|
+
(client as any).p2pService.peerManager,
|
|
234
|
+
(client as any).p2pService.archiver,
|
|
235
|
+
epochCache,
|
|
236
|
+
proofVerifier,
|
|
237
|
+
worldState,
|
|
238
|
+
telemetry,
|
|
239
|
+
logger,
|
|
240
|
+
true, // disable validation
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
// Replace the existing p2pService with our test version
|
|
244
|
+
(client as any).p2pService = testService;
|
|
119
245
|
|
|
120
246
|
await client.start();
|
|
121
247
|
// Wait until the client is ready
|
|
@@ -37,7 +37,7 @@ function getTimestamp(line: string): number | null {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* Parses a single log line. If the line contains an "
|
|
40
|
+
* Parses a single log line. If the line contains an "Received tx" event,
|
|
41
41
|
* it extracts the timestamp and the peer ID.
|
|
42
42
|
*/
|
|
43
43
|
function parseReceivedTx(line: string): LogEvent | null {
|
|
@@ -52,9 +52,9 @@ function parseReceivedTx(line: string): LogEvent | null {
|
|
|
52
52
|
return null;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
const peerIdMatch = line.match(/p2p:(\d+)
|
|
55
|
+
// Extract the peer ID from the log line
|
|
56
|
+
// Example format: "module":"p2p:1","msg":"Received tx 0x0feeafa65f25fd8d613fe4aca44fd65fe41c149ef1941e2019d40925c40748f9 from external peer 16Uiu2HAm8w4oxXF3TwDKoGL9U66thMXWqCgPnb2CgkYwmUqFCWbC."
|
|
57
|
+
const peerIdMatch = line.match(/"module":"p2p:(\d+)"/);
|
|
58
58
|
if (!peerIdMatch) {
|
|
59
59
|
logger.error('No peer Number found in received tx log');
|
|
60
60
|
return null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
|
-
import {
|
|
3
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
4
4
|
import { mockTx } from '@aztec/stdlib/testing';
|
|
5
5
|
|
|
6
6
|
import assert from 'assert';
|
|
@@ -21,7 +21,7 @@ async function main() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
|
|
24
|
-
const config = await import(configPath, {
|
|
24
|
+
const config = await import(configPath, { with: { type: 'json' } });
|
|
25
25
|
const testConfig = { ...testChainConfig, ...config.default };
|
|
26
26
|
const numberOfClients = config.default.numberOfClients;
|
|
27
27
|
|
|
@@ -35,14 +35,14 @@ async function main() {
|
|
|
35
35
|
|
|
36
36
|
// Send tx from client 0
|
|
37
37
|
const tx = await mockTx(1, {
|
|
38
|
-
|
|
38
|
+
chonkProof: ChonkProof.random(),
|
|
39
39
|
});
|
|
40
40
|
|
|
41
41
|
workerClientManager.processes[0].send({ type: 'SEND_TX', tx: tx.toBuffer() });
|
|
42
42
|
logger.info('Transaction sent from client 0');
|
|
43
43
|
|
|
44
44
|
// Give time for message propagation
|
|
45
|
-
await sleep(
|
|
45
|
+
await sleep(10000);
|
|
46
46
|
logger.info('Checking message propagation results');
|
|
47
47
|
|
|
48
48
|
// Check message propagation results
|