@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
|
@@ -1,9 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { BufferReader } from '@aztec/foundation/serialize';
|
|
3
|
+
import type { WorldStateSyncStatus, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
4
|
+
import type { PeerId } from '@libp2p/interface';
|
|
5
|
+
export declare class StatusMessage {
|
|
6
|
+
readonly compressedComponentsVersion: string;
|
|
7
|
+
readonly latestBlockNumber: number;
|
|
8
|
+
readonly latestBlockHash: string;
|
|
9
|
+
readonly finalizedBlockNumber: number;
|
|
10
|
+
constructor(compressedComponentsVersion: string, latestBlockNumber: number, latestBlockHash: string, finalizedBlockNumber: number);
|
|
11
|
+
/**
|
|
12
|
+
* Deserializes the StatusMessage object from a Buffer.
|
|
13
|
+
* @param buffer - Buffer or BufferReader object to deserialize.
|
|
14
|
+
* @returns An instance of StatusMessage.
|
|
15
|
+
*/
|
|
16
|
+
static fromBuffer(buffer: Buffer | BufferReader): StatusMessage;
|
|
17
|
+
/**
|
|
18
|
+
* Serializes the StatusMessage object into a Buffer.
|
|
19
|
+
* @returns Buffer representation of the StatusMessage object.
|
|
20
|
+
*/
|
|
21
|
+
toBuffer(): Buffer<ArrayBufferLike>;
|
|
22
|
+
/**
|
|
23
|
+
* Builds Status message
|
|
24
|
+
* @param version - Compressed Components Version
|
|
25
|
+
* @param worldStateSyncStatus - Info about the current sync status
|
|
26
|
+
* @returns StatusMessage instance
|
|
27
|
+
*/
|
|
28
|
+
static fromWorldStateSyncStatus(version: string, syncStatus: WorldStateSyncStatus): StatusMessage;
|
|
29
|
+
static random(): StatusMessage;
|
|
30
|
+
validate(peerStatus: StatusMessage): boolean;
|
|
31
|
+
equals(other: StatusMessage): boolean;
|
|
32
|
+
}
|
|
3
33
|
/**
|
|
4
|
-
* Handles the status request.
|
|
5
|
-
* @param
|
|
6
|
-
* @
|
|
34
|
+
* Handles the status request. By immediately responding with the current node status.
|
|
35
|
+
* @param compressedComponentsVersion - Compressed Components Version
|
|
36
|
+
* @param worldStateSynchronizer - World State Synchronizer to fetch the sync status from.
|
|
37
|
+
* Note the WorldStateSynchronizer must be injected to fetch the fresh sync status, we cannot pass in pre-built StatusMessage.
|
|
38
|
+
* @returns Status message handler
|
|
7
39
|
*/
|
|
8
|
-
export declare function
|
|
9
|
-
//# sourceMappingURL=
|
|
40
|
+
export declare function reqRespStatusHandler(compressedComponentsVersion: string, worldStateSynchronizer: WorldStateSynchronizer, logger?: Logger): (peerId: PeerId, _msg: Buffer<ArrayBufferLike>) => Promise<Buffer<ArrayBufferLike>>;
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9wcm90b2NvbHMvc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFOUUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVFoRCxxQkFBYSxhQUFhO0lBRXRCLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxNQUFNO0lBQzVDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNO0lBQ2xDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTTtJQUNoQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsTUFBTTtJQUp2QyxZQUNXLDJCQUEyQixFQUFFLE1BQU0sRUFDbkMsaUJBQWlCLEVBQUUsTUFBTSxFQUN6QixlQUFlLEVBQUUsTUFBTSxFQUN2QixvQkFBb0IsRUFBRSxNQUFNLEVBR25DO0lBRUo7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsYUFBYSxDQVU5RDtJQUVEOzs7T0FHRztJQUNILFFBQVEsNEJBU1A7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsR0FBRyxhQUFhLENBUWhHO0lBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBUTdCO0lBRUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUczQztJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FPcEM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQixvQkFBb0IsQ0FDbEMsMkJBQTJCLEVBQUUsTUFBTSxFQUNuQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsTUFBTSxDQUFDLEVBQUUsTUFBTSx1RkFZaEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQhD,qBAAa,aAAa;IAEtB,QAAQ,CAAC,2BAA2B,EAAE,MAAM;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IAJvC,YACW,2BAA2B,EAAE,MAAM,EACnC,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAGnC;IAEJ;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAU9D;IAED;;;OAGG;IACH,QAAQ,4BASP;IAED;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,aAAa,CAQhG;IAED,MAAM,CAAC,MAAM,IAAI,aAAa,CAQ7B;IAED,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAG3C;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAOpC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,2BAA2B,EAAE,MAAM,EACnC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,CAAC,EAAE,MAAM,uFAYhB"}
|
|
@@ -1,7 +1,74 @@
|
|
|
1
|
+
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
+
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
3
|
+
import { bufferToHex } from '@aztec/foundation/string';
|
|
4
|
+
/*
|
|
5
|
+
* P2P Status Message
|
|
6
|
+
* It is used to establish Status handshake between to peers
|
|
7
|
+
* By validating Status handshake we ensure peers are on the same Blockchain fork
|
|
8
|
+
* And get peer sync status
|
|
9
|
+
*/ export class StatusMessage {
|
|
10
|
+
compressedComponentsVersion;
|
|
11
|
+
latestBlockNumber;
|
|
12
|
+
latestBlockHash;
|
|
13
|
+
finalizedBlockNumber;
|
|
14
|
+
constructor(compressedComponentsVersion, latestBlockNumber, latestBlockHash, finalizedBlockNumber){
|
|
15
|
+
this.compressedComponentsVersion = compressedComponentsVersion;
|
|
16
|
+
this.latestBlockNumber = latestBlockNumber;
|
|
17
|
+
this.latestBlockHash = latestBlockHash;
|
|
18
|
+
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Deserializes the StatusMessage object from a Buffer.
|
|
22
|
+
* @param buffer - Buffer or BufferReader object to deserialize.
|
|
23
|
+
* @returns An instance of StatusMessage.
|
|
24
|
+
*/ static fromBuffer(buffer) {
|
|
25
|
+
const reader = BufferReader.asReader(buffer);
|
|
26
|
+
return new StatusMessage(reader.readString(), reader.readNumber(), reader.readString(), reader.readNumber());
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Serializes the StatusMessage object into a Buffer.
|
|
30
|
+
* @returns Buffer representation of the StatusMessage object.
|
|
31
|
+
*/ toBuffer() {
|
|
32
|
+
return serializeToBuffer([
|
|
33
|
+
this.compressedComponentsVersion,
|
|
34
|
+
this.latestBlockNumber,
|
|
35
|
+
this.latestBlockHash,
|
|
36
|
+
this.finalizedBlockNumber
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Builds Status message
|
|
41
|
+
* @param version - Compressed Components Version
|
|
42
|
+
* @param worldStateSyncStatus - Info about the current sync status
|
|
43
|
+
* @returns StatusMessage instance
|
|
44
|
+
*/ static fromWorldStateSyncStatus(version, syncStatus) {
|
|
45
|
+
return new StatusMessage(version, syncStatus.latestBlockNumber, syncStatus.latestBlockHash, syncStatus.finalizedBlockNumber);
|
|
46
|
+
}
|
|
47
|
+
static random() {
|
|
48
|
+
return new StatusMessage('1.0.0', Math.floor(Math.random() * 100), Buffer32.random().toString(), Math.floor(Math.random() * 100));
|
|
49
|
+
}
|
|
50
|
+
validate(peerStatus) {
|
|
51
|
+
// TODO: Validate other fields as well
|
|
52
|
+
return this.compressedComponentsVersion === peerStatus.compressedComponentsVersion;
|
|
53
|
+
}
|
|
54
|
+
equals(other) {
|
|
55
|
+
return this.compressedComponentsVersion === other.compressedComponentsVersion && this.latestBlockNumber === other.latestBlockNumber && this.latestBlockHash === other.latestBlockHash && this.finalizedBlockNumber === other.finalizedBlockNumber;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
1
58
|
/**
|
|
2
|
-
* Handles the status request.
|
|
3
|
-
* @param
|
|
4
|
-
* @
|
|
5
|
-
|
|
6
|
-
|
|
59
|
+
* Handles the status request. By immediately responding with the current node status.
|
|
60
|
+
* @param compressedComponentsVersion - Compressed Components Version
|
|
61
|
+
* @param worldStateSynchronizer - World State Synchronizer to fetch the sync status from.
|
|
62
|
+
* Note the WorldStateSynchronizer must be injected to fetch the fresh sync status, we cannot pass in pre-built StatusMessage.
|
|
63
|
+
* @returns Status message handler
|
|
64
|
+
*/ export function reqRespStatusHandler(compressedComponentsVersion, worldStateSynchronizer, logger) {
|
|
65
|
+
return async (peerId, _msg)=>{
|
|
66
|
+
logger?.trace(`Received status handshake request from ${peerId}`);
|
|
67
|
+
const status = StatusMessage.fromWorldStateSyncStatus(compressedComponentsVersion, (await worldStateSynchronizer.status()).syncSummary);
|
|
68
|
+
const response = status.toBuffer();
|
|
69
|
+
logger?.trace(`Responding status handshake from ${peerId}`, {
|
|
70
|
+
data: bufferToHex(response)
|
|
71
|
+
});
|
|
72
|
+
return response;
|
|
73
|
+
};
|
|
7
74
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { P2PClientType } from '@aztec/stdlib/p2p';
|
|
2
|
+
import { TxHash, TxHashArray } from '@aztec/stdlib/tx';
|
|
2
3
|
import type { MemPools } from '../../../mem_pools/interface.js';
|
|
3
4
|
import type { ReqRespSubProtocolHandler } from '../interface.js';
|
|
4
5
|
/**
|
|
@@ -7,7 +8,17 @@ import type { ReqRespSubProtocolHandler } from '../interface.js';
|
|
|
7
8
|
*
|
|
8
9
|
* Handler for tx requests
|
|
9
10
|
* @param mempools - the mempools
|
|
10
|
-
* @returns the
|
|
11
|
+
* @returns the Tx request handler
|
|
11
12
|
*/
|
|
12
13
|
export declare function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>): ReqRespSubProtocolHandler;
|
|
13
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Helper function to chunk an array of transaction hashes into chunks of a specified size.
|
|
16
|
+
* This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
|
|
17
|
+
*
|
|
18
|
+
* @param hashes - The array of transaction hashes to chunk.
|
|
19
|
+
* @param chunkSize - The size of each chunk. Default is 8. Reasoning:
|
|
20
|
+
* Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
|
|
21
|
+
* we define Q as max number of transactions per batch, the comment explains why we use 8.
|
|
22
|
+
*/
|
|
23
|
+
export declare function chunkTxHashesRequest(hashes: TxHash[], chunkSize?: number): Array<TxHashArray>;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQVcsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWhFLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakU7Ozs7Ozs7R0FPRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcseUJBQXlCLENBd0IxRztBQUVEOzs7Ozs7OztHQVFHO0FBR0gsd0JBQWdCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLFNBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBRXhGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAW,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAwB1G;AAED;;;;;;;;GAQG;AAGH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAExF"}
|
|
@@ -1,20 +1,48 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { chunk } from '@aztec/foundation/collection';
|
|
2
|
+
import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
|
|
3
|
+
import { ReqRespStatus, ReqRespStatusError } from '../status.js';
|
|
2
4
|
/**
|
|
3
5
|
* We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
|
|
4
6
|
* so we need to pass it in as a parameter.
|
|
5
7
|
*
|
|
6
8
|
* Handler for tx requests
|
|
7
9
|
* @param mempools - the mempools
|
|
8
|
-
* @returns the
|
|
10
|
+
* @returns the Tx request handler
|
|
9
11
|
*/ export function reqRespTxHandler(mempools) {
|
|
10
12
|
/**
|
|
11
13
|
* Handler for tx requests
|
|
12
14
|
* @param msg - the tx request message
|
|
13
15
|
* @returns the tx response message
|
|
16
|
+
* @throws if msg is not a valid tx hash
|
|
14
17
|
*/ return async (_peerId, msg)=>{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
let txHashes;
|
|
19
|
+
try {
|
|
20
|
+
txHashes = TxHashArray.fromBuffer(msg);
|
|
21
|
+
} catch (err) {
|
|
22
|
+
throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, {
|
|
23
|
+
cause: err
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const txs = new TxArray(...(await Promise.all(txHashes.map((txHash)=>mempools.txPool.getTxByHash(txHash)))).filter((t)=>!!t));
|
|
28
|
+
return txs.toBuffer();
|
|
29
|
+
} catch (err) {
|
|
30
|
+
throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, {
|
|
31
|
+
cause: err
|
|
32
|
+
});
|
|
33
|
+
}
|
|
19
34
|
};
|
|
20
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Helper function to chunk an array of transaction hashes into chunks of a specified size.
|
|
38
|
+
* This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
|
|
39
|
+
*
|
|
40
|
+
* @param hashes - The array of transaction hashes to chunk.
|
|
41
|
+
* @param chunkSize - The size of each chunk. Default is 8. Reasoning:
|
|
42
|
+
* Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
|
|
43
|
+
* we define Q as max number of transactions per batch, the comment explains why we use 8.
|
|
44
|
+
*/ //TODO: (mralj) chunk size should by default be 8, this is just temporary until the protocol is implemented correctly
|
|
45
|
+
//more info: https://github.com/AztecProtocol/aztec-packages/pull/15516#pullrequestreview-2995474321
|
|
46
|
+
export function chunkTxHashesRequest(hashes, chunkSize = 1) {
|
|
47
|
+
return chunk(hashes, chunkSize).map((chunk)=>new TxHashArray(...chunk));
|
|
48
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { RequestResponseRateLimiter } from './rate_limiter.js';
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3JhdGUtbGltaXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PeerId } from '@libp2p/interface';
|
|
2
2
|
import type { PeerScoring } from '../../peer-manager/peer_scoring.js';
|
|
3
|
-
import type { ReqRespSubProtocol, ReqRespSubProtocolRateLimits } from '../interface.js';
|
|
3
|
+
import type { ProtocolRateLimitQuota, ReqRespSubProtocol, ReqRespSubProtocolRateLimits } from '../interface.js';
|
|
4
4
|
/**
|
|
5
5
|
* GCRARateLimiter: A Generic Cell Rate Algorithm (GCRA) based rate limiter.
|
|
6
6
|
*
|
|
@@ -37,7 +37,7 @@ export declare enum RateLimitStatus {
|
|
|
37
37
|
DeniedPeer = 1,
|
|
38
38
|
Allowed = 2
|
|
39
39
|
}
|
|
40
|
-
export declare function prettyPrintRateLimitStatus(status: RateLimitStatus): "
|
|
40
|
+
export declare function prettyPrintRateLimitStatus(status: RateLimitStatus): "Allowed" | "DeniedGlobal" | "DeniedPeer";
|
|
41
41
|
/**
|
|
42
42
|
* SubProtocolRateLimiter: A rate limiter for managing request rates on a per-peer and global basis for a specific subprotocol.
|
|
43
43
|
*
|
|
@@ -89,8 +89,9 @@ export declare class SubProtocolRateLimiter {
|
|
|
89
89
|
export declare class RequestResponseRateLimiter {
|
|
90
90
|
private peerScoring;
|
|
91
91
|
private subProtocolRateLimiters;
|
|
92
|
+
private rateLimits;
|
|
92
93
|
private cleanupInterval;
|
|
93
|
-
constructor(peerScoring: PeerScoring, rateLimits?: ReqRespSubProtocolRateLimits);
|
|
94
|
+
constructor(peerScoring: PeerScoring, rateLimits?: Partial<ReqRespSubProtocolRateLimits>);
|
|
94
95
|
start(): void;
|
|
95
96
|
allow(subProtocol: ReqRespSubProtocol, peerId: PeerId): RateLimitStatus;
|
|
96
97
|
cleanupInactivePeers(): void;
|
|
@@ -98,5 +99,6 @@ export declare class RequestResponseRateLimiter {
|
|
|
98
99
|
* Make sure to call destroy on each of the sub protocol rate limiters when cleaning up
|
|
99
100
|
*/
|
|
100
101
|
stop(): void;
|
|
102
|
+
getRateLimits(protocol: ReqRespSubProtocol): ProtocolRateLimitQuota;
|
|
101
103
|
}
|
|
102
|
-
//# sourceMappingURL=
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlLWxpbWl0ZXIvcmF0ZV9saW1pdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNaEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxxQkFBYSxlQUFlO0lBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFFcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBUztJQUUxQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBUztJQUV2Qzs7O09BR0c7SUFDSCxZQUFZLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFJbEQ7SUFFRCxLQUFLLElBQUksT0FBTyxDQVVmO0NBQ0Y7QUFTRCxvQkFBWSxlQUFlO0lBQ3pCLFlBQVksSUFBQTtJQUNaLFVBQVUsSUFBQTtJQUNWLE9BQU8sSUFBQTtDQUNSO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxlQUFlLDZDQVNqRTtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHFCQUFhLHNCQUFzQjtJQUNqQyxPQUFPLENBQUMsWUFBWSxDQUEyQztJQUMvRCxPQUFPLENBQUMsYUFBYSxDQUFrQjtJQUN2QyxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBUztJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBUztJQUV6QyxZQUFZLGNBQWMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUsvRztJQUVELEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGVBQWUsQ0FzQnJDO0lBRUQsb0JBQW9CLFNBT25CO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILHFCQUFhLDBCQUEwQjtJQU9uQyxPQUFPLENBQUMsV0FBVztJQU5yQixPQUFPLENBQUMsdUJBQXVCLENBQWtEO0lBQ2pGLE9BQU8sQ0FBQyxVQUFVLENBQStCO0lBRWpELE9BQU8sQ0FBQyxlQUFlLENBQXlDO0lBRWhFLFlBQ1UsV0FBVyxFQUFFLFdBQVcsRUFDaEMsVUFBVSxHQUFFLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBTSxFQWdCdkQ7SUFFRCxLQUFLLFNBSUo7SUFFRCxLQUFLLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsZUFBZSxDQVd0RTtJQUVELG9CQUFvQixTQUVuQjtJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUVIO0lBRUQsYUFBYSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FFbEU7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAMhH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;IACH,YAAY,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAIlD;IAED,KAAK,IAAI,OAAO,CAUf;CACF;AASD,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,6CASjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YAAY,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAK/G;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAsBrC;IAED,oBAAoB,SAOnB;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,0BAA0B;IAOnC,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,uBAAuB,CAAkD;IACjF,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,eAAe,CAAyC;IAEhE,YACU,WAAW,EAAE,WAAW,EAChC,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EAgBvD;IAED,KAAK,SAIJ;IAED,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAWtE;IAED,oBAAoB,SAEnB;IAED;;OAEG;IACH,IAAI,SAEH;IAED,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,CAElE;CACF"}
|
|
@@ -148,12 +148,17 @@ export function prettyPrintRateLimitStatus(status) {
|
|
|
148
148
|
*/ export class RequestResponseRateLimiter {
|
|
149
149
|
peerScoring;
|
|
150
150
|
subProtocolRateLimiters;
|
|
151
|
+
rateLimits;
|
|
151
152
|
cleanupInterval;
|
|
152
|
-
constructor(peerScoring, rateLimits =
|
|
153
|
+
constructor(peerScoring, rateLimits = {}){
|
|
153
154
|
this.peerScoring = peerScoring;
|
|
154
155
|
this.cleanupInterval = undefined;
|
|
155
156
|
this.subProtocolRateLimiters = new Map();
|
|
156
|
-
|
|
157
|
+
this.rateLimits = {
|
|
158
|
+
...DEFAULT_RATE_LIMITS,
|
|
159
|
+
...rateLimits
|
|
160
|
+
};
|
|
161
|
+
for (const [subProtocol, protocolLimits] of Object.entries(this.rateLimits)){
|
|
157
162
|
this.subProtocolRateLimiters.set(subProtocol, new SubProtocolRateLimiter(protocolLimits.peerLimit.quotaCount, protocolLimits.peerLimit.quotaTimeMs, protocolLimits.globalLimit.quotaCount, protocolLimits.globalLimit.quotaTimeMs));
|
|
158
163
|
}
|
|
159
164
|
}
|
|
@@ -181,4 +186,7 @@ export function prettyPrintRateLimitStatus(status) {
|
|
|
181
186
|
*/ stop() {
|
|
182
187
|
clearInterval(this.cleanupInterval);
|
|
183
188
|
}
|
|
189
|
+
getRateLimits(protocol) {
|
|
190
|
+
return this.rateLimits[protocol];
|
|
191
|
+
}
|
|
184
192
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type ReqRespSubProtocolRateLimits } from '../interface.js';
|
|
2
2
|
export declare const DEFAULT_RATE_LIMITS: ReqRespSubProtocolRateLimits;
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3JhdGUtbGltaXRlci9yYXRlX2xpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNCLEtBQUssNEJBQTRCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RixlQUFPLE1BQU0sbUJBQW1CLEVBQUUsNEJBdUVqQyxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,4BAuEjC,CAAC"}
|
|
@@ -21,6 +21,16 @@ export const DEFAULT_RATE_LIMITS = {
|
|
|
21
21
|
quotaCount: 10
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
+
[ReqRespSubProtocol.AUTH]: {
|
|
25
|
+
peerLimit: {
|
|
26
|
+
quotaTimeMs: 1000,
|
|
27
|
+
quotaCount: 5
|
|
28
|
+
},
|
|
29
|
+
globalLimit: {
|
|
30
|
+
quotaTimeMs: 1000,
|
|
31
|
+
quotaCount: 10
|
|
32
|
+
}
|
|
33
|
+
},
|
|
24
34
|
[ReqRespSubProtocol.TX]: {
|
|
25
35
|
peerLimit: {
|
|
26
36
|
quotaTimeMs: 1000,
|
|
@@ -28,7 +38,7 @@ export const DEFAULT_RATE_LIMITS = {
|
|
|
28
38
|
},
|
|
29
39
|
globalLimit: {
|
|
30
40
|
quotaTimeMs: 1000,
|
|
31
|
-
quotaCount:
|
|
41
|
+
quotaCount: 200
|
|
32
42
|
}
|
|
33
43
|
},
|
|
34
44
|
[ReqRespSubProtocol.BLOCK]: {
|
|
@@ -50,5 +60,15 @@ export const DEFAULT_RATE_LIMITS = {
|
|
|
50
60
|
quotaTimeMs: 1000,
|
|
51
61
|
quotaCount: 10
|
|
52
62
|
}
|
|
63
|
+
},
|
|
64
|
+
[ReqRespSubProtocol.BLOCK_TXS]: {
|
|
65
|
+
peerLimit: {
|
|
66
|
+
quotaTimeMs: 1000,
|
|
67
|
+
quotaCount: 10
|
|
68
|
+
},
|
|
69
|
+
globalLimit: {
|
|
70
|
+
quotaTimeMs: 1000,
|
|
71
|
+
quotaCount: 200
|
|
72
|
+
}
|
|
53
73
|
}
|
|
54
74
|
};
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type Logger } from '@aztec/foundation/log';
|
|
4
1
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
2
|
import type { PeerId } from '@libp2p/interface';
|
|
6
3
|
import type { Libp2p } from 'libp2p';
|
|
7
4
|
import type { PeerScoring } from '../peer-manager/peer_scoring.js';
|
|
8
|
-
import type
|
|
9
|
-
import { type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators, type SubProtocolMap } from './interface.js';
|
|
5
|
+
import { type P2PReqRespConfig } from './config.js';
|
|
6
|
+
import { type ReqRespInterface, type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolHandlers, type ReqRespSubProtocolRateLimits, type ReqRespSubProtocolValidators, type SubProtocolMap } from './interface.js';
|
|
10
7
|
/**
|
|
11
8
|
* The Request Response Service
|
|
12
9
|
*
|
|
@@ -21,58 +18,30 @@ import { type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandle
|
|
|
21
18
|
*
|
|
22
19
|
* see: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-reqresp-domain
|
|
23
20
|
*/
|
|
24
|
-
export declare class ReqResp {
|
|
21
|
+
export declare class ReqResp implements ReqRespInterface {
|
|
25
22
|
private libp2p;
|
|
26
23
|
private peerScoring;
|
|
27
|
-
|
|
28
|
-
private overallRequestTimeoutMs;
|
|
24
|
+
private logger;
|
|
29
25
|
private individualRequestTimeoutMs;
|
|
26
|
+
private dialTimeoutMs;
|
|
30
27
|
private subProtocolHandlers;
|
|
31
28
|
private subProtocolValidators;
|
|
32
29
|
private connectionSampler;
|
|
33
30
|
private rateLimiter;
|
|
34
31
|
private snappyTransform;
|
|
35
32
|
private metrics;
|
|
36
|
-
constructor(config: P2PReqRespConfig, libp2p: Libp2p, peerScoring: PeerScoring, telemetryClient?: TelemetryClient);
|
|
33
|
+
constructor(config: P2PReqRespConfig, libp2p: Libp2p, peerScoring: PeerScoring, logger?: import("@aztec/foundation/log").Logger, rateLimits?: Partial<ReqRespSubProtocolRateLimits>, telemetryClient?: TelemetryClient);
|
|
34
|
+
updateConfig(config: Partial<P2PReqRespConfig>): void;
|
|
37
35
|
get tracer(): import("@aztec/telemetry-client").Tracer;
|
|
38
36
|
/**
|
|
39
37
|
* Start the reqresp service
|
|
40
38
|
*/
|
|
41
39
|
start(subProtocolHandlers: ReqRespSubProtocolHandlers, subProtocolValidators: ReqRespSubProtocolValidators): Promise<void>;
|
|
40
|
+
addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler, validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
|
|
42
41
|
/**
|
|
43
42
|
* Stop the reqresp service
|
|
44
43
|
*/
|
|
45
44
|
stop(): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Send a request to peers, returns the first response
|
|
48
|
-
*
|
|
49
|
-
* @param subProtocol - The protocol being requested
|
|
50
|
-
* @param request - The request to send
|
|
51
|
-
* @returns - The response from the peer, otherwise undefined
|
|
52
|
-
*
|
|
53
|
-
* @description
|
|
54
|
-
* This method attempts to send a request to all active peers using the specified sub-protocol.
|
|
55
|
-
* It opens a stream with each peer, sends the request, and awaits a response.
|
|
56
|
-
* If a valid response is received, it returns the response; otherwise, it continues to the next peer.
|
|
57
|
-
* If no response is received from any peer, it returns undefined.
|
|
58
|
-
*
|
|
59
|
-
* The method performs the following steps:
|
|
60
|
-
* - Sample a peer to send the request to.
|
|
61
|
-
* - Opens a stream with the peer using the specified sub-protocol.
|
|
62
|
-
*
|
|
63
|
-
* When a response is received, it is validated using the given sub protocols response validator.
|
|
64
|
-
* To see the interface for the response validator - see `interface.ts`
|
|
65
|
-
*
|
|
66
|
-
* Failing a response validation requests in a severe peer penalty, and will
|
|
67
|
-
* prompt the node to continue to search to the next peer.
|
|
68
|
-
* For example, a transaction request validator will check that the payload returned does in fact
|
|
69
|
-
* match the txHash that was requested. A peer that fails this check an only be an extremely naughty peer.
|
|
70
|
-
*
|
|
71
|
-
* This entire operation is wrapped in an overall timeout, that is independent of the
|
|
72
|
-
* peer it is requesting data from.
|
|
73
|
-
*
|
|
74
|
-
*/
|
|
75
|
-
sendRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, request: InstanceType<SubProtocolMap[SubProtocol]['request']>): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined>;
|
|
76
45
|
/**
|
|
77
46
|
* Request multiple messages over the same sub protocol, balancing the requests across peers.
|
|
78
47
|
*
|
|
@@ -95,7 +64,7 @@ export declare class ReqResp {
|
|
|
95
64
|
*
|
|
96
65
|
* @throws {CollectiveReqRespTimeoutError} - If the request batch exceeds the specified timeout (`timeoutMs`).
|
|
97
66
|
*/
|
|
98
|
-
sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
|
|
67
|
+
sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeer: PeerId | undefined, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
|
|
99
68
|
/**
|
|
100
69
|
* Sends a request to a specific peer
|
|
101
70
|
*
|
|
@@ -106,6 +75,7 @@ export declare class ReqResp {
|
|
|
106
75
|
* @param peerId - The peer to send the request to
|
|
107
76
|
* @param subProtocol - The protocol to use to request
|
|
108
77
|
* @param payload - The payload to send
|
|
78
|
+
* @param dialTimeout - If establishing a stream takes longer than this an error will be thrown
|
|
109
79
|
* @returns If the request is successful, the response is returned, otherwise undefined
|
|
110
80
|
*
|
|
111
81
|
* @description
|
|
@@ -120,7 +90,7 @@ export declare class ReqResp {
|
|
|
120
90
|
* If the stream is not closed by the dialled peer, and a timeout occurs, then
|
|
121
91
|
* the stream is closed on the requester's end and sender (us) updates its peer score
|
|
122
92
|
*/
|
|
123
|
-
sendRequestToPeer(peerId: PeerId, subProtocol: ReqRespSubProtocol, payload: Buffer): Promise<ReqRespResponse
|
|
93
|
+
sendRequestToPeer(peerId: PeerId, subProtocol: ReqRespSubProtocol, payload: Buffer, dialTimeout?: number): Promise<ReqRespResponse>;
|
|
124
94
|
/**
|
|
125
95
|
* Handle a response error
|
|
126
96
|
*
|
|
@@ -132,35 +102,23 @@ export declare class ReqResp {
|
|
|
132
102
|
* @returns If the error is non pubishable, then undefined is returned, otherwise the peer is penalized
|
|
133
103
|
*/
|
|
134
104
|
private handleResponseError;
|
|
105
|
+
private readMessage;
|
|
106
|
+
private streamHandler;
|
|
107
|
+
private processStream;
|
|
108
|
+
private trySendError;
|
|
109
|
+
private handleRequestError;
|
|
135
110
|
/**
|
|
136
|
-
* Categorize the error and log it.
|
|
137
|
-
*/
|
|
138
|
-
private categorizeError;
|
|
139
|
-
/**
|
|
140
|
-
* Read a message returned from a stream into a single buffer
|
|
111
|
+
* Categorize the request error and log it.
|
|
141
112
|
*
|
|
142
|
-
*
|
|
143
|
-
* - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
|
|
144
|
-
* - The second chunk should contain the response data
|
|
113
|
+
* @returns Severity of the error, or undefined if the error is not punishable.
|
|
145
114
|
*/
|
|
146
|
-
private
|
|
115
|
+
private categorizeRequestError;
|
|
147
116
|
/**
|
|
148
|
-
*
|
|
149
|
-
* Reads the incoming stream, determines the protocol, then triggers the appropriate handler
|
|
117
|
+
* Categorize the response error and log it.
|
|
150
118
|
*
|
|
151
|
-
* @
|
|
152
|
-
*
|
|
153
|
-
* @description
|
|
154
|
-
* An individual stream handler will be bound to each sub protocol, and handles returning data back
|
|
155
|
-
* to the requesting peer.
|
|
156
|
-
*
|
|
157
|
-
* The sub protocol handler interface is defined within `interface.ts` and will be assigned to the
|
|
158
|
-
* req resp service on start up.
|
|
159
|
-
*
|
|
160
|
-
* We check rate limits for each peer, note the peer will be penalised within the rate limiter implementation
|
|
161
|
-
* if they exceed their peer specific limits.
|
|
119
|
+
* @returns Severity of the error, or undefined if the error is not punishable.
|
|
162
120
|
*/
|
|
163
|
-
private
|
|
164
|
-
private
|
|
121
|
+
private categorizeResponseError;
|
|
122
|
+
private categorizeConnectionErrors;
|
|
165
123
|
}
|
|
166
|
-
//# sourceMappingURL=
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvcmVxcmVzcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsS0FBSyxlQUFlLEVBQWlDLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxLQUFLLEVBQXNCLE1BQU0sRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQVVyQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBR0wsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssZUFBZSxFQUNwQixrQkFBa0IsRUFDbEIsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSywwQkFBMEIsRUFDL0IsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyxjQUFjLEVBRXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFTeEI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILHFCQUFhLE9BQVEsWUFBVyxnQkFBZ0I7SUFnQjVDLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFdBQVc7SUFDbkIsT0FBTyxDQUFDLE1BQU07SUFqQmhCLE9BQU8sQ0FBQywwQkFBMEIsQ0FBaUQ7SUFDbkYsT0FBTyxDQUFDLGFBQWEsQ0FBMkM7SUFFaEUsT0FBTyxDQUFDLG1CQUFtQixDQUEyQztJQUN0RSxPQUFPLENBQUMscUJBQXFCLENBQTZDO0lBRTFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBNkI7SUFFaEQsT0FBTyxDQUFDLGVBQWUsQ0FBa0I7SUFFekMsT0FBTyxDQUFDLE9BQU8sQ0FBaUI7SUFFaEMsWUFDRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsV0FBVyxFQUFFLFdBQVcsRUFDeEIsTUFBTSx5Q0FBOEIsRUFDNUMsVUFBVSxHQUFFLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBTSxFQUN0RCxlQUFlLEdBQUUsZUFBc0MsRUFnQnhEO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBUTNEO0lBRUQsSUFBSSxNQUFNLDZDQUVUO0lBRUQ7O09BRUc7SUFDRyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLGlCQWdCL0c7SUFFSyxjQUFjLENBQ2xCLFdBQVcsRUFBRSxrQkFBa0IsRUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUNsQyxTQUFTLEdBQUUsNEJBQTRCLENBQUMsa0JBQWtCLENBQWdELEdBQ3pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FXZjtJQUVEOztPQUVHO0lBQ0csSUFBSSxrQkFrQlQ7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBUUcsZ0JBQWdCLENBQUMsV0FBVyxTQUFTLGtCQUFrQixFQUMzRCxXQUFXLEVBQUUsV0FBVyxFQUN4QixRQUFRLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQ2hFLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixTQUFTLFNBQVEsRUFDakIsUUFBUSxTQUErQyxFQUN2RCxnQkFBZ0IsU0FBSSxHQUNuQixPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0E4SWxFO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdCRztJQUtVLGlCQUFpQixDQUM1QixNQUFNLEVBQUUsTUFBTSxFQUNkLFdBQVcsRUFBRSxrQkFBa0IsRUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFDZixXQUFXLEdBQUUsTUFBMkIsR0FDdkMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQW9EMUI7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxPQUFPLENBQUMsbUJBQW1CO1lBY2IsV0FBVztZQWtFWCxhQUFhO1lBK0RiLGFBQWE7WUF3Q2IsWUFBWTtJQW1DMUIsT0FBTyxDQUFDLGtCQUFrQjtJQU8xQjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLHNCQUFzQjtJQWlCOUI7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyx1QkFBdUI7SUF5Qi9CLE9BQU8sQ0FBQywwQkFBMEI7Q0E4RG5DIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,eAAe,EAAiC,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAsB,MAAM,EAAU,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AASxB;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAgB5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IAjBhB,OAAO,CAAC,0BAA0B,CAAiD;IACnF,OAAO,CAAC,aAAa,CAA2C;IAEhE,OAAO,CAAC,mBAAmB,CAA2C;IACtE,OAAO,CAAC,qBAAqB,CAA6C;IAE1E,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,OAAO,CAAiB;IAEhC,YACE,MAAM,EAAE,gBAAgB,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,yCAA8B,EAC5C,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EACtD,eAAe,GAAE,eAAsC,EAgBxD;IAEM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAQ3D;IAED,IAAI,MAAM,6CAET;IAED;;OAEG;IACG,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,4BAA4B,iBAgB/G;IAEK,cAAc,CAClB,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,yBAAyB,EAClC,SAAS,GAAE,4BAA4B,CAAC,kBAAkB,CAAgD,GACzG,OAAO,CAAC,IAAI,CAAC,CAWf;IAED;;OAEG;IACG,IAAI,kBAkBT;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IAQG,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EAC3D,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,SAAQ,EACjB,QAAQ,SAA+C,EACvD,gBAAgB,SAAI,GACnB,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CA8IlE;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IAKU,iBAAiB,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAA2B,GACvC,OAAO,CAAC,eAAe,CAAC,CAoD1B;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;YAcb,WAAW;YAkEX,aAAa;YA+Db,aAAa;YAwCb,YAAY;IAmC1B,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,0BAA0B;CA8DnC"}
|