@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.21caa21
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,111 @@
|
|
|
1
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
2
|
+
import EventEmitter from 'node:events';
|
|
3
|
+
import { TxCollectionInstrumentation } from './instrumentation.js';
|
|
4
|
+
/**
|
|
5
|
+
* Executes collection requests from the fast and slow collection loops, and handles collected txs
|
|
6
|
+
* by adding them to the tx pool and emitting events, as well as handling logging and metrics.
|
|
7
|
+
*/ export class TxCollectionSink extends EventEmitter {
|
|
8
|
+
txPool;
|
|
9
|
+
log;
|
|
10
|
+
instrumentation;
|
|
11
|
+
constructor(txPool, telemetryClient, log){
|
|
12
|
+
super(), this.txPool = txPool, this.log = log;
|
|
13
|
+
this.instrumentation = new TxCollectionInstrumentation(telemetryClient, 'TxCollection');
|
|
14
|
+
}
|
|
15
|
+
async collect(collectValidTxsFn, requested, info) {
|
|
16
|
+
this.log.trace(`Requesting ${requested.length} txs via ${info.description}`, {
|
|
17
|
+
...info,
|
|
18
|
+
requestedTxs: requested.map((t)=>t.toString())
|
|
19
|
+
});
|
|
20
|
+
// Execute collection function and measure the time taken, catching any errors.
|
|
21
|
+
const [duration, txs] = await elapsed(async ()=>{
|
|
22
|
+
try {
|
|
23
|
+
const response = await collectValidTxsFn(requested);
|
|
24
|
+
return response.filter((tx)=>tx !== undefined);
|
|
25
|
+
} catch (err) {
|
|
26
|
+
this.log.error(`Error collecting txs via ${info.description}`, err, {
|
|
27
|
+
...info,
|
|
28
|
+
requestedTxs: requested.map((hash)=>hash.toString())
|
|
29
|
+
});
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
if (txs.length === 0) {
|
|
34
|
+
this.log.trace(`No txs found via ${info.description}`, {
|
|
35
|
+
...info,
|
|
36
|
+
requestedTxs: requested.map((t)=>t.toString())
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
txs,
|
|
40
|
+
requested,
|
|
41
|
+
duration
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Validate tx hashes for all collected txs from external sources
|
|
45
|
+
const validTxs = [];
|
|
46
|
+
const invalidTxHashes = [];
|
|
47
|
+
await Promise.all(txs.map(async (tx)=>{
|
|
48
|
+
const isValid = await tx.validateTxHash();
|
|
49
|
+
if (isValid) {
|
|
50
|
+
validTxs.push(tx);
|
|
51
|
+
} else {
|
|
52
|
+
invalidTxHashes.push(tx.getTxHash().toString());
|
|
53
|
+
}
|
|
54
|
+
}));
|
|
55
|
+
if (invalidTxHashes.length > 0) {
|
|
56
|
+
this.log.warn(`Rejecting ${invalidTxHashes.length} txs with invalid hashes from ${info.description}`, {
|
|
57
|
+
...info,
|
|
58
|
+
invalidTxHashes
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (validTxs.length === 0) {
|
|
62
|
+
this.log.trace(`No valid txs found via ${info.description} after validation`, {
|
|
63
|
+
...info,
|
|
64
|
+
requestedTxs: requested.map((t)=>t.toString()),
|
|
65
|
+
invalidTxHashes
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
txs: [],
|
|
69
|
+
requested,
|
|
70
|
+
duration
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
this.log.verbose(`Collected ${validTxs.length} txs out of ${requested.length} requested via ${info.description} in ${duration}ms`, {
|
|
74
|
+
...info,
|
|
75
|
+
duration,
|
|
76
|
+
txs: validTxs.map((t)=>t.getTxHash().toString()),
|
|
77
|
+
requestedTxs: requested.map((t)=>t.toString()),
|
|
78
|
+
rejectedCount: invalidTxHashes.length
|
|
79
|
+
});
|
|
80
|
+
return await this.foundTxs(validTxs, {
|
|
81
|
+
...info,
|
|
82
|
+
duration
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async foundTxs(txs, info) {
|
|
86
|
+
// Report metrics for the collection
|
|
87
|
+
this.instrumentation.increaseTxsFor(info.method, txs.length, info.duration);
|
|
88
|
+
// Mark txs as found in the slow missing txs set and all fast requests
|
|
89
|
+
this.emit('txs-added', {
|
|
90
|
+
txs
|
|
91
|
+
});
|
|
92
|
+
// Add the txs to the tx pool (should not fail, but we catch it just in case)
|
|
93
|
+
try {
|
|
94
|
+
await this.txPool.addTxs(txs, {
|
|
95
|
+
source: `tx-collection`
|
|
96
|
+
});
|
|
97
|
+
} catch (err) {
|
|
98
|
+
this.log.error(`Error adding txs to the pool via ${info.description}`, err, {
|
|
99
|
+
...info,
|
|
100
|
+
txs: txs.map((tx)=>tx.txHash.toString())
|
|
101
|
+
});
|
|
102
|
+
// Return no txs since none have been added
|
|
103
|
+
return {
|
|
104
|
+
txs: []
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
txs
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
2
|
+
import { type AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
3
|
+
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
4
|
+
import { type ComponentsVersions } from '@aztec/stdlib/versioning';
|
|
5
|
+
export interface TxSource {
|
|
6
|
+
getInfo(): string;
|
|
7
|
+
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
8
|
+
}
|
|
9
|
+
export declare class NodeRpcTxSource implements TxSource {
|
|
10
|
+
private readonly client;
|
|
11
|
+
private readonly info;
|
|
12
|
+
constructor(client: Pick<AztecNode, 'getTxsByHash'>, info: string);
|
|
13
|
+
static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource;
|
|
14
|
+
getInfo(): string;
|
|
15
|
+
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
16
|
+
}
|
|
17
|
+
export declare function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig): NodeRpcTxSource[];
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfc291cmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi90eF9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBbUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRyxNQUFNLFdBQVcsUUFBUTtJQUN2QixPQUFPLElBQUksTUFBTSxDQUFDO0lBQ2xCLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMvRDtBQUVELHFCQUFhLGVBQWdCLFlBQVcsUUFBUTtJQUU1QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBRnZCLFlBQ21CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUN2QyxJQUFJLEVBQUUsTUFBTSxFQUMzQjtJQUVKLE9BQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixHQUFHLGVBQWUsQ0FHcEY7SUFFTSxPQUFPLFdBRWI7SUFFTSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBRW5FO0NBQ0Y7QUFFRCx3QkFBZ0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLHFCQUc5RSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,0BAA0B,CAAC;AAGpG,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,MAAM,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACvC,IAAI,EAAE,MAAM,EAC3B;IAEJ,OAAc,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,eAAe,CAGpF;IAEM,OAAO,WAEb;IAEM,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAEnE;CACF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,qBAG9E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
2
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
3
|
+
import { createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
|
|
4
|
+
import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
5
|
+
import { makeTracedFetch } from '@aztec/telemetry-client';
|
|
6
|
+
export class NodeRpcTxSource {
|
|
7
|
+
client;
|
|
8
|
+
info;
|
|
9
|
+
constructor(client, info){
|
|
10
|
+
this.client = client;
|
|
11
|
+
this.info = info;
|
|
12
|
+
}
|
|
13
|
+
static fromUrl(nodeUrl, versions) {
|
|
14
|
+
const client = createAztecNodeClient(nodeUrl, versions, makeTracedFetch([
|
|
15
|
+
1,
|
|
16
|
+
2,
|
|
17
|
+
3
|
|
18
|
+
], false));
|
|
19
|
+
return new NodeRpcTxSource(client, nodeUrl);
|
|
20
|
+
}
|
|
21
|
+
getInfo() {
|
|
22
|
+
return this.info;
|
|
23
|
+
}
|
|
24
|
+
getTxsByHash(txHashes) {
|
|
25
|
+
return this.client.getTxsByHash(txHashes);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function createNodeRpcTxSources(urls, chainConfig) {
|
|
29
|
+
const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
|
|
30
|
+
return urls.map((url)=>NodeRpcTxSource.fromUrl(url, versions));
|
|
31
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
3
|
+
import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
|
|
4
|
+
import type { BlockProposal } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
6
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
+
import type { PeerId } from '@libp2p/interface';
|
|
8
|
+
import type { P2PClient } from '../client/p2p_client.js';
|
|
9
|
+
import type { TxPool } from '../mem_pools/index.js';
|
|
10
|
+
import type { TxCollection } from './tx_collection/tx_collection.js';
|
|
11
|
+
import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
|
|
12
|
+
/**
|
|
13
|
+
* Gathers and returns txs given a block proposal, block, or their hashes.
|
|
14
|
+
* Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
|
|
15
|
+
*/
|
|
16
|
+
export declare class TxProvider implements ITxProvider {
|
|
17
|
+
private txCollection;
|
|
18
|
+
private txPool;
|
|
19
|
+
private txValidator;
|
|
20
|
+
private log;
|
|
21
|
+
protected instrumentation: TxProviderInstrumentation;
|
|
22
|
+
constructor(txCollection: TxCollection, txPool: TxPool, txValidator: Pick<P2PClient, 'validate'>, log?: Logger, client?: TelemetryClient);
|
|
23
|
+
/** Returns txs from the tx pool given their hashes.*/
|
|
24
|
+
getAvailableTxs(txHashes: TxHash[]): Promise<{
|
|
25
|
+
txs: Tx[];
|
|
26
|
+
missingTxs: TxHash[];
|
|
27
|
+
}>;
|
|
28
|
+
/** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */
|
|
29
|
+
getTxsForBlockProposal(blockProposal: BlockProposal, blockNumber: number, opts: {
|
|
30
|
+
pinnedPeer: PeerId | undefined;
|
|
31
|
+
deadline: Date;
|
|
32
|
+
}): Promise<{
|
|
33
|
+
txs: Tx[];
|
|
34
|
+
missingTxs: TxHash[];
|
|
35
|
+
}>;
|
|
36
|
+
/** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */
|
|
37
|
+
getTxsForBlock(block: L2Block, opts: {
|
|
38
|
+
deadline: Date;
|
|
39
|
+
}): Promise<{
|
|
40
|
+
txs: Tx[];
|
|
41
|
+
missingTxs: TxHash[];
|
|
42
|
+
}>;
|
|
43
|
+
private getOrderedTxsFromAllSources;
|
|
44
|
+
private orderTxs;
|
|
45
|
+
private getTxsFromAllSources;
|
|
46
|
+
private extractFromProposal;
|
|
47
|
+
private processProposalTxs;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvdmlkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy90eF9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQThCLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFOzs7R0FHRztBQUNILHFCQUFhLFVBQVcsWUFBVyxXQUFXO0lBSTFDLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFdBQVc7SUFDbkIsT0FBTyxDQUFDLEdBQUc7SUFOYixTQUFTLENBQUMsZUFBZSxFQUFFLHlCQUF5QixDQUFDO0lBRXJELFlBQ1UsWUFBWSxFQUFFLFlBQVksRUFDMUIsTUFBTSxFQUFFLE1BQU0sRUFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFDeEMsR0FBRyxHQUFFLE1BQXlDLEVBQ3RELE1BQU0sR0FBRSxlQUFzQyxFQUcvQztJQUVELHNEQUFzRDtJQUN6QyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQTtLQUFFLENBQUMsQ0FrQjdGO0lBRUQsa0ZBQWtGO0lBQzNFLHNCQUFzQixDQUMzQixhQUFhLEVBQUUsYUFBYSxFQUM1QixXQUFXLEVBQUUsTUFBTSxFQUNuQixJQUFJLEVBQUU7UUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUFDLFFBQVEsRUFBRSxJQUFJLENBQUE7S0FBRSxHQUN2RCxPQUFPLENBQUM7UUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUE7S0FBRSxDQUFDLENBTzlDO0lBRUQsbUVBQW1FO0lBQzVELGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUFFLFFBQVEsRUFBRSxJQUFJLENBQUE7S0FBRSxHQUFHLE9BQU8sQ0FBQztRQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQTtLQUFFLENBQUMsQ0FPNUc7WUFFYSwyQkFBMkI7SUFnQ3pDLE9BQU8sQ0FBQyxRQUFRO1lBS0Ysb0JBQW9CO0lBc0ZsQyxPQUFPLENBQUMsbUJBQW1CO1lBT2Isa0JBQWtCO0NBT2pDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_provider.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAA8B,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAI1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,GAAG;IANb,SAAS,CAAC,eAAe,EAAE,yBAAyB,CAAC;IAErD,YACU,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACxC,GAAG,GAAE,MAAyC,EACtD,MAAM,GAAE,eAAsC,EAG/C;IAED,sDAAsD;IACzC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAkB7F;IAED,kFAAkF;IAC3E,sBAAsB,CAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,GACvD,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAO9C;IAED,mEAAmE;IAC5D,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAO5G;YAEa,2BAA2B;IAgCzC,OAAO,CAAC,QAAQ;YAKF,oBAAoB;IAsFlC,OAAO,CAAC,mBAAmB;YAOb,kBAAkB;CAOjC"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { compactArray } from '@aztec/foundation/collection';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
4
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
5
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
6
|
+
import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
|
|
7
|
+
/**
|
|
8
|
+
* Gathers and returns txs given a block proposal, block, or their hashes.
|
|
9
|
+
* Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
|
|
10
|
+
*/ export class TxProvider {
|
|
11
|
+
txCollection;
|
|
12
|
+
txPool;
|
|
13
|
+
txValidator;
|
|
14
|
+
log;
|
|
15
|
+
instrumentation;
|
|
16
|
+
constructor(txCollection, txPool, txValidator, log = createLogger('p2p:tx-collector'), client = getTelemetryClient()){
|
|
17
|
+
this.txCollection = txCollection;
|
|
18
|
+
this.txPool = txPool;
|
|
19
|
+
this.txValidator = txValidator;
|
|
20
|
+
this.log = log;
|
|
21
|
+
this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
|
|
22
|
+
}
|
|
23
|
+
/** Returns txs from the tx pool given their hashes.*/ async getAvailableTxs(txHashes) {
|
|
24
|
+
const response = await this.txPool.getTxsByHash(txHashes);
|
|
25
|
+
if (response.length !== txHashes.length) {
|
|
26
|
+
throw new Error(`Unexpected response size from tx pool: expected ${txHashes.length} but got ${response.length}`);
|
|
27
|
+
}
|
|
28
|
+
const txs = [];
|
|
29
|
+
const missingTxs = [];
|
|
30
|
+
for(let i = 0; i < txHashes.length; i++){
|
|
31
|
+
const tx = response[i];
|
|
32
|
+
if (tx === undefined) {
|
|
33
|
+
missingTxs.push(txHashes[i]);
|
|
34
|
+
} else {
|
|
35
|
+
txs.push(tx);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
txs,
|
|
40
|
+
missingTxs
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */ getTxsForBlockProposal(blockProposal, blockNumber, opts) {
|
|
44
|
+
return this.getOrderedTxsFromAllSources({
|
|
45
|
+
type: 'proposal',
|
|
46
|
+
blockProposal,
|
|
47
|
+
blockNumber
|
|
48
|
+
}, {
|
|
49
|
+
...blockProposal.toBlockInfo(),
|
|
50
|
+
blockNumber
|
|
51
|
+
}, blockProposal.txHashes, {
|
|
52
|
+
...opts,
|
|
53
|
+
pinnedPeer: opts.pinnedPeer
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */ getTxsForBlock(block, opts) {
|
|
57
|
+
return this.getOrderedTxsFromAllSources({
|
|
58
|
+
type: 'block',
|
|
59
|
+
block
|
|
60
|
+
}, block.toBlockInfo(), block.body.txEffects.map((tx)=>tx.txHash), {
|
|
61
|
+
...opts,
|
|
62
|
+
pinnedPeer: undefined
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async getOrderedTxsFromAllSources(request, blockInfo, txHashes, opts) {
|
|
66
|
+
const [durationMs, result] = await elapsed(()=>this.getTxsFromAllSources(request, blockInfo, txHashes, opts));
|
|
67
|
+
const { missingTxHashes, txsFromMempool, txsFromNetwork, txsFromProposal } = result;
|
|
68
|
+
const txs = [
|
|
69
|
+
...txsFromMempool ?? [],
|
|
70
|
+
...txsFromProposal ?? [],
|
|
71
|
+
...txsFromNetwork ?? []
|
|
72
|
+
];
|
|
73
|
+
const missingTxs = missingTxHashes?.length ?? 0;
|
|
74
|
+
const level = missingTxs === 0 ? 'verbose' : 'warn';
|
|
75
|
+
this.log[level](`Retrieved ${txs.length} out of ${blockInfo.txCount} txs for ${request.type}`, {
|
|
76
|
+
...blockInfo,
|
|
77
|
+
txsFromProposal: txsFromProposal?.length,
|
|
78
|
+
txsFromMempool: txsFromMempool?.length,
|
|
79
|
+
txsFromNetwork: txsFromNetwork?.length,
|
|
80
|
+
missingTxs,
|
|
81
|
+
durationMs
|
|
82
|
+
});
|
|
83
|
+
const orderedTxs = this.orderTxs(txs, txHashes);
|
|
84
|
+
if (orderedTxs.length + missingTxs !== txHashes.length) {
|
|
85
|
+
throw new Error(`Error collecting txs for ${request.type} with ${txHashes.length} txs: found ${orderedTxs.length} and flagged ${missingTxs} as missing`);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
txs: orderedTxs,
|
|
89
|
+
missingTxs: (missingTxHashes ?? []).map(TxHash.fromString),
|
|
90
|
+
durationMs
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
orderTxs(txs, order) {
|
|
94
|
+
const txsMap = new Map(txs.map((tx)=>[
|
|
95
|
+
tx.txHash.toString(),
|
|
96
|
+
tx
|
|
97
|
+
]));
|
|
98
|
+
return order.map((hash)=>txsMap.get(hash.toString())).filter((tx)=>tx !== undefined);
|
|
99
|
+
}
|
|
100
|
+
async getTxsFromAllSources(request, blockInfo, txHashes, opts) {
|
|
101
|
+
const missingTxHashes = new Set(txHashes.map((txHash)=>txHash.toString()));
|
|
102
|
+
if (missingTxHashes.size === 0) {
|
|
103
|
+
this.log.debug(`Received request with no transactions`, blockInfo);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
// First go to our tx pool and fetch whatever txs we have there
|
|
107
|
+
// We go to the mempool first since those txs are already validated
|
|
108
|
+
const txsFromMempool = compactArray(await this.txPool.getTxsByHash(txHashes));
|
|
109
|
+
txsFromMempool.forEach((tx)=>missingTxHashes.delete(tx.getTxHash().toString()));
|
|
110
|
+
this.instrumentation.incTxsFromMempool(txsFromMempool.length);
|
|
111
|
+
this.log.debug(`Retrieved ${txsFromMempool.length} txs from mempool for block proposal (${missingTxHashes.size} pending)`, {
|
|
112
|
+
...blockInfo,
|
|
113
|
+
missingTxHashes: [
|
|
114
|
+
...missingTxHashes
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
if (missingTxHashes.size === 0) {
|
|
118
|
+
return {
|
|
119
|
+
txsFromMempool
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Take txs from the proposal body if there are any
|
|
123
|
+
// Note that we still have to validate these txs, but we do it in parallel with tx collection
|
|
124
|
+
const proposal = request.type === 'proposal' ? request.blockProposal : undefined;
|
|
125
|
+
const txsFromProposal = this.extractFromProposal(proposal, [
|
|
126
|
+
...missingTxHashes
|
|
127
|
+
]);
|
|
128
|
+
if (txsFromProposal.length > 0) {
|
|
129
|
+
this.instrumentation.incTxsFromProposals(txsFromProposal.length);
|
|
130
|
+
txsFromProposal.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
|
|
131
|
+
this.log.debug(`Retrieved ${txsFromProposal.length} txs from proposal body (${missingTxHashes.size} pending)`, {
|
|
132
|
+
...blockInfo,
|
|
133
|
+
missingTxHashes: [
|
|
134
|
+
...missingTxHashes
|
|
135
|
+
]
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (missingTxHashes.size === 0) {
|
|
139
|
+
await this.processProposalTxs(txsFromProposal);
|
|
140
|
+
return {
|
|
141
|
+
txsFromMempool,
|
|
142
|
+
txsFromProposal
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Start tx collection from the network if needed, while we validate the txs taken from the proposal in parallel
|
|
146
|
+
const [txsFromNetwork] = await Promise.all([
|
|
147
|
+
this.txCollection.collectFastFor(request, [
|
|
148
|
+
...missingTxHashes
|
|
149
|
+
], opts),
|
|
150
|
+
this.processProposalTxs(txsFromProposal)
|
|
151
|
+
]);
|
|
152
|
+
if (txsFromNetwork.length > 0) {
|
|
153
|
+
txsFromNetwork.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
|
|
154
|
+
this.instrumentation.incTxsFromP2P(txsFromNetwork.length);
|
|
155
|
+
this.log.debug(`Retrieved ${txsFromNetwork.length} txs from network for block proposal (${missingTxHashes.size} pending)`, {
|
|
156
|
+
...blockInfo,
|
|
157
|
+
missingTxHashes: [
|
|
158
|
+
...missingTxHashes
|
|
159
|
+
]
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (missingTxHashes.size === 0) {
|
|
163
|
+
return {
|
|
164
|
+
txsFromNetwork,
|
|
165
|
+
txsFromMempool,
|
|
166
|
+
txsFromProposal
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// We are still missing txs, make one last attempt to collect them from our pool, in case they showed up somehow else
|
|
170
|
+
const moreTxsFromPool = compactArray(await this.txPool.getTxsByHash([
|
|
171
|
+
...missingTxHashes
|
|
172
|
+
].map(TxHash.fromString)));
|
|
173
|
+
if (moreTxsFromPool.length > 0) {
|
|
174
|
+
this.instrumentation.incTxsFromMempool(moreTxsFromPool.length);
|
|
175
|
+
this.log.debug(`Retrieved ${moreTxsFromPool.length} txs from pool retry for block proposal (${missingTxHashes.size} pending)`, {
|
|
176
|
+
...blockInfo,
|
|
177
|
+
missingTxHashes: [
|
|
178
|
+
...missingTxHashes
|
|
179
|
+
]
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (missingTxHashes.size > 0) {
|
|
183
|
+
this.instrumentation.incMissingTxs(missingTxHashes.size);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
txsFromNetwork,
|
|
187
|
+
txsFromMempool: [
|
|
188
|
+
...txsFromMempool,
|
|
189
|
+
...moreTxsFromPool
|
|
190
|
+
],
|
|
191
|
+
txsFromProposal,
|
|
192
|
+
missingTxHashes: [
|
|
193
|
+
...missingTxHashes
|
|
194
|
+
]
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
extractFromProposal(proposal, missingTxHashes) {
|
|
198
|
+
if (!proposal) {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
return compactArray(proposal.txs ?? []).filter((tx)=>missingTxHashes.includes(tx.getTxHash().toString()));
|
|
202
|
+
}
|
|
203
|
+
async processProposalTxs(txs) {
|
|
204
|
+
if (txs.length === 0) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
await this.txValidator.validate(txs);
|
|
208
|
+
await this.txPool.addTxs(txs);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
|
+
export declare class TxProviderInstrumentation {
|
|
3
|
+
private txFromProposalCount;
|
|
4
|
+
private txFromMempoolCount;
|
|
5
|
+
private txFromP2PCount;
|
|
6
|
+
private missingTxsCount;
|
|
7
|
+
constructor(client: TelemetryClient, name: string);
|
|
8
|
+
incTxsFromProposals(count: number): void;
|
|
9
|
+
incTxsFromMempool(count: number): void;
|
|
10
|
+
incTxsFromP2P(count: number): void;
|
|
11
|
+
incMissingTxs(count: number): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvdmlkZXJfaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvdHhfcHJvdmlkZXJfaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RixxQkFBYSx5QkFBeUI7SUFDcEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQWdCO0lBQzFDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxlQUFlLENBQWdCO0lBRXZDLFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQWtCaEQ7SUFFRCxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxRQUVoQztJQUVELGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLFFBRTlCO0lBRUQsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRTFCO0lBRUQsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRTFCO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_provider_instrumentation.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider_instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAE5F,qBAAa,yBAAyB;IACpC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAgB;IAEvC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAkBhD;IAED,mBAAmB,CAAC,KAAK,EAAE,MAAM,QAEhC;IAED,iBAAiB,CAAC,KAAK,EAAE,MAAM,QAE9B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,QAE1B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,QAE1B;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Metrics } from '@aztec/telemetry-client';
|
|
2
|
+
export class TxProviderInstrumentation {
|
|
3
|
+
txFromProposalCount;
|
|
4
|
+
txFromMempoolCount;
|
|
5
|
+
txFromP2PCount;
|
|
6
|
+
missingTxsCount;
|
|
7
|
+
constructor(client, name){
|
|
8
|
+
const meter = client.getMeter(name);
|
|
9
|
+
this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT, {
|
|
10
|
+
description: 'The number of txs taken from block proposals'
|
|
11
|
+
});
|
|
12
|
+
this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT, {
|
|
13
|
+
description: 'The number of txs taken from the local mempool'
|
|
14
|
+
});
|
|
15
|
+
this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT, {
|
|
16
|
+
description: 'The number of txs taken from the p2p network'
|
|
17
|
+
});
|
|
18
|
+
this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT, {
|
|
19
|
+
description: 'The number of txs not found anywhere'
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
incTxsFromProposals(count) {
|
|
23
|
+
this.txFromProposalCount.add(count);
|
|
24
|
+
}
|
|
25
|
+
incTxsFromMempool(count) {
|
|
26
|
+
this.txFromMempoolCount.add(count);
|
|
27
|
+
}
|
|
28
|
+
incTxsFromP2P(count) {
|
|
29
|
+
this.txFromP2PCount.add(count);
|
|
30
|
+
}
|
|
31
|
+
incMissingTxs(count) {
|
|
32
|
+
this.missingTxsCount.add(count);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* @returns A list of peer id private keys
|
|
5
5
|
*/
|
|
6
6
|
export declare function generatePeerIdPrivateKeys(numberOfPeers: number): string[];
|
|
7
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcGVlci1pZC1wcml2YXRlLWtleXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LWhlbHBlcnMvZ2VuZXJhdGUtcGVlci1pZC1wcml2YXRlLWtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILHdCQUFnQix5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQU96RSJ9
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* @returns A list of ports
|
|
5
5
|
*/
|
|
6
6
|
export declare const getPorts: (numberOfPeers: number) => Promise<number[]>;
|
|
7
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBvcnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL2dldC1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsZUFBTyxNQUFNLFFBQVEsOENBQWlHLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAiG,CAAC"}
|
|
@@ -3,4 +3,5 @@ export * from './get-ports.js';
|
|
|
3
3
|
export * from './make-enrs.js';
|
|
4
4
|
export * from './make-test-p2p-clients.js';
|
|
5
5
|
export * from './reqresp-nodes.js';
|
|
6
|
-
|
|
6
|
+
export * from './mock-pubsub.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LWhlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
@@ -13,4 +13,4 @@ export declare function makeEnrs(p2pPrivateKeys: string[], ports: number[], conf
|
|
|
13
13
|
* @returns The ENR of the p2p node
|
|
14
14
|
*/
|
|
15
15
|
export declare function makeEnr(p2pPrivateKey: string, port: number, config: ChainConfig): Promise<string>;
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1lbnJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL21ha2UtZW5ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVF4RDs7Ozs7R0FLRztBQUNILHdCQUFzQixRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxxQkFNNUY7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQixPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLG1CQWNyRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,mBAcrF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SignableENR } from '@chainsafe/enr';
|
|
2
1
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
2
|
+
import { SignableENR } from '@nethermindeth/enr';
|
|
3
3
|
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
4
4
|
import { setAztecEnrKey } from '../versioning.js';
|
|
5
5
|
/**
|
|
@@ -20,10 +20,9 @@ import { setAztecEnrKey } from '../versioning.js';
|
|
|
20
20
|
*/ export async function makeEnr(p2pPrivateKey, port, config) {
|
|
21
21
|
const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
|
|
22
22
|
const enr = SignableENR.createFromPeerId(peerId);
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const tcpPublicAddr = multiaddr(convertToMultiaddr(tcpAnnounceAddress, 'tcp'));
|
|
23
|
+
const p2pIp = `127.0.0.1`;
|
|
24
|
+
const udpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'udp'));
|
|
25
|
+
const tcpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'tcp'));
|
|
27
26
|
// ENRS must include the network and a discoverable address (udp for discv5)
|
|
28
27
|
setAztecEnrKey(enr, config);
|
|
29
28
|
enr.setLocationMultiaddr(udpPublicAddr);
|
|
@@ -6,7 +6,8 @@ import type { P2PClient } from '../client/p2p_client.js';
|
|
|
6
6
|
import type { P2PConfig } from '../config.js';
|
|
7
7
|
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
8
8
|
import type { TxPool } from '../mem_pools/tx_pool/index.js';
|
|
9
|
-
|
|
9
|
+
import { type MockGossipSubNetwork } from './mock-pubsub.js';
|
|
10
|
+
export interface MakeTestP2PClientOptions {
|
|
10
11
|
mockAttestationPool: AttestationPool;
|
|
11
12
|
mockTxPool: TxPool;
|
|
12
13
|
mockEpochCache: EpochCache;
|
|
@@ -15,7 +16,17 @@ interface MakeTestP2PClientOptions {
|
|
|
15
16
|
p2pBaseConfig: P2PConfig;
|
|
16
17
|
p2pConfigOverrides?: Partial<P2PConfig>;
|
|
17
18
|
logger?: Logger;
|
|
19
|
+
mockGossipSubNetwork?: MockGossipSubNetwork;
|
|
18
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a single P2P client and immediately starts it for testing purposes.
|
|
23
|
+
* @param peerIdPrivateKey - The private key of the peer.
|
|
24
|
+
* @param port - The port to run the client on.
|
|
25
|
+
* @param peers - The peers to connect to.
|
|
26
|
+
* @param options - The options for the client.
|
|
27
|
+
* @returns The created and already started client.
|
|
28
|
+
*/
|
|
29
|
+
export declare function makeAndStartTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], options: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
|
|
19
30
|
/**
|
|
20
31
|
* Creates a single P2P client for testing purposes.
|
|
21
32
|
* @param peerIdPrivateKey - The private key of the peer.
|
|
@@ -24,13 +35,30 @@ interface MakeTestP2PClientOptions {
|
|
|
24
35
|
* @param options - The options for the client.
|
|
25
36
|
* @returns The created client.
|
|
26
37
|
*/
|
|
27
|
-
export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState,
|
|
38
|
+
export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, mockGossipSubNetwork, logger }: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
|
|
39
|
+
/**
|
|
40
|
+
* Creates a number of P2P clients and immediately starts them for testing purposes.
|
|
41
|
+
* @param numberOfPeers - The number of clients to create.
|
|
42
|
+
* @param options - The options for the clients.
|
|
43
|
+
* @returns The created and started clients.
|
|
44
|
+
*/
|
|
45
|
+
export declare function makeAndStartTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<{
|
|
46
|
+
client: P2PClient<P2PClientType.Full>;
|
|
47
|
+
peerPrivateKey: string;
|
|
48
|
+
port: number;
|
|
49
|
+
enr: string;
|
|
50
|
+
}[]>;
|
|
28
51
|
/**
|
|
29
52
|
* Creates a number of P2P clients for testing purposes.
|
|
30
53
|
* @param numberOfPeers - The number of clients to create.
|
|
31
54
|
* @param options - The options for the clients.
|
|
32
55
|
* @returns The created clients.
|
|
33
56
|
*/
|
|
34
|
-
export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<
|
|
35
|
-
|
|
36
|
-
|
|
57
|
+
export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<{
|
|
58
|
+
client: P2PClient<P2PClientType.Full>;
|
|
59
|
+
peerPrivateKey: string;
|
|
60
|
+
port: number;
|
|
61
|
+
enr: string;
|
|
62
|
+
}[]>;
|
|
63
|
+
export declare function startTestP2PClients(clients: P2PClient[]): Promise<void>;
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS10ZXN0LXAycC1jbGllbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL21ha2UtdGVzdC1wMnAtY2xpZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFLbEUsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSTVELE9BQU8sRUFBRSxLQUFLLG9CQUFvQixFQUFrQyxNQUFNLGtCQUFrQixDQUFDO0FBRzdGLE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDO0lBQ3JDLFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsY0FBYyxFQUFFLFVBQVUsQ0FBQztJQUMzQixjQUFjLEVBQUUsc0JBQXNCLENBQUM7SUFDdkMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDN0IsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDaEIsb0JBQW9CLENBQUMsRUFBRSxvQkFBb0IsQ0FBQztDQUM3QztBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0IseUJBQXlCLENBQzdDLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsSUFBSSxFQUFFLE1BQU0sRUFDWixLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQ2YsT0FBTyxFQUFFLHdCQUF3QiwwQ0FNbEM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQXNCLGlCQUFpQixDQUNyQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQ3hCLElBQUksRUFBRSxNQUFNLEVBQ1osS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUNmLEVBQ0Usa0JBQXlCLEVBQ3pCLGFBQWEsRUFDYixrQkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixNQUF3QyxFQUN6QyxFQUFFLHdCQUF3QiwwQ0EyQzVCO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBc0IsMEJBQTBCLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsd0JBQXdCOzs7OztLQXVDM0c7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSx3QkFBd0I7Ozs7O0tBZ0NuRztBQUVELHdCQUFzQixtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUc3RCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAKlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,wBAAwB,0CAMlC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAwC,EACzC,EAAE,wBAAwB,0CA2C5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAuC3G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAgCnG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAG7D"}
|