@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.03f7ef2
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 +15 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +60 -25
- 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 +75 -190
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +381 -183
- 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 +216 -65
- 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 +127 -26
- 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 +227 -7
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +10 -16
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +16 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +57 -35
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +64 -14
- 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 +472 -97
- package/dest/mem_pools/tx_pool/index.d.ts +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +36 -11
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +137 -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 +67 -10
- 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 +273 -42
- 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 +2 -2
- 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 +16 -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 +9 -5
- 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 +13 -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 +74 -6
- 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 +695 -248
- 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 +46 -27
- 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 +30 -6
- 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 +40 -7
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +73 -5
- package/dest/services/reqresp/protocols/tx.d.ts +14 -4
- 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 +51 -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 +53 -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 +110 -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 +51 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +217 -0
- package/dest/services/tx_provider_instrumentation.d.ts +16 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +47 -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 +139 -53
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +198 -0
- package/src/client/p2p_client.ts +484 -348
- 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 +266 -67
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +174 -35
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +156 -30
- package/src/mem_pools/attestation_pool/mocks.ts +13 -12
- package/src/mem_pools/instrumentation.ts +70 -40
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +555 -110
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +160 -46
- package/src/mem_pools/tx_pool/priority.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +69 -9
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +224 -35
- 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 +5 -5
- 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 +110 -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 +59 -22
- 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 +47 -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 +81 -6
- package/src/services/index.ts +4 -0
- package/src/services/libp2p/instrumentation.ts +167 -0
- package/src/services/libp2p/libp2p_service.ts +865 -298
- 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 +92 -37
- package/src/services/reqresp/metrics.ts +4 -1
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block.ts +26 -4
- 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 +118 -5
- package/src/services/reqresp/protocols/tx.ts +36 -8
- 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 +341 -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 +216 -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 +229 -0
- package/src/services/tx_provider_instrumentation.ts +61 -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 +87 -36
- 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
|
@@ -5,14 +5,20 @@ export declare enum ReqRespStatus {
|
|
|
5
5
|
SUCCESS = 0,
|
|
6
6
|
RATE_LIMIT_EXCEEDED = 1,
|
|
7
7
|
BADLY_FORMED_REQUEST = 2,
|
|
8
|
+
INTERNAL_ERROR = 3,
|
|
9
|
+
NOT_FOUND = 4,
|
|
10
|
+
FAILURE = 126,
|
|
8
11
|
UNKNOWN = 127
|
|
9
12
|
}
|
|
13
|
+
export type UnsuccessfulReqRespStatus = Exclude<ReqRespStatus, ReqRespStatus.SUCCESS>;
|
|
10
14
|
export declare class ReqRespStatusError extends Error {
|
|
11
15
|
/**
|
|
12
16
|
* The status code
|
|
13
17
|
*/
|
|
14
|
-
status:
|
|
15
|
-
constructor(status:
|
|
18
|
+
readonly status: UnsuccessfulReqRespStatus;
|
|
19
|
+
constructor(status: UnsuccessfulReqRespStatus, cause?: {
|
|
20
|
+
cause?: Error;
|
|
21
|
+
});
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
24
|
* Parse the status chunk
|
|
@@ -27,5 +33,5 @@ export declare function parseStatusChunk(chunk: Uint8Array): ReqRespStatus;
|
|
|
27
33
|
* @param status
|
|
28
34
|
* @returns
|
|
29
35
|
*/
|
|
30
|
-
export declare function prettyPrintReqRespStatus(status: ReqRespStatus): "
|
|
31
|
-
//# sourceMappingURL=
|
|
36
|
+
export declare function prettyPrintReqRespStatus(status: ReqRespStatus): "BADLY_FORMED_REQUEST" | "FAILURE" | "INTERNAL_ERROR" | "RATE_LIMIT_EXCEEDED" | "SUCCESS" | "UNKNOWN" | undefined;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sSUFBSTtJQUNYLG1CQUFtQixJQUFJO0lBQ3ZCLG9CQUFvQixJQUFJO0lBQ3hCLGNBQWMsSUFBSTtJQUNsQixTQUFTLElBQUk7SUFDYixPQUFPLE1BQU07SUFDYixPQUFPLE1BQU07Q0FDZDtBQUVELE1BQU0sTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV0RixxQkFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQztJQUUzQyxZQUFZLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQTtLQUFFLEVBR3ZFO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxhQUFhLENBV2pFO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxxSEFlN0QifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,mBAAmB,IAAI;IACvB,oBAAoB,IAAI;IACxB,OAAO,MAAM;CACd;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C;;OAEG;IACH,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,mBAAmB,IAAI;IACvB,oBAAoB,IAAI;IACxB,cAAc,IAAI;IAClB,SAAS,IAAI;IACb,OAAO,MAAM;IACb,OAAO,MAAM;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAEtF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAE3C,YAAY,MAAM,EAAE,yBAAyB,EAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAGvE;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAWjE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,qHAe7D"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
ReqRespStatus[ReqRespStatus["SUCCESS"] = 0] = "SUCCESS";
|
|
5
5
|
ReqRespStatus[ReqRespStatus["RATE_LIMIT_EXCEEDED"] = 1] = "RATE_LIMIT_EXCEEDED";
|
|
6
6
|
ReqRespStatus[ReqRespStatus["BADLY_FORMED_REQUEST"] = 2] = "BADLY_FORMED_REQUEST";
|
|
7
|
+
ReqRespStatus[ReqRespStatus["INTERNAL_ERROR"] = 3] = "INTERNAL_ERROR";
|
|
8
|
+
ReqRespStatus[ReqRespStatus["NOT_FOUND"] = 4] = "NOT_FOUND";
|
|
9
|
+
ReqRespStatus[ReqRespStatus["FAILURE"] = 126] = "FAILURE";
|
|
7
10
|
ReqRespStatus[ReqRespStatus["UNKNOWN"] = 127] = "UNKNOWN";
|
|
8
11
|
return ReqRespStatus;
|
|
9
12
|
}({});
|
|
@@ -11,8 +14,8 @@ export class ReqRespStatusError extends Error {
|
|
|
11
14
|
/**
|
|
12
15
|
* The status code
|
|
13
16
|
*/ status;
|
|
14
|
-
constructor(status){
|
|
15
|
-
super(`ReqResp Error: ${prettyPrintReqRespStatus(status)}
|
|
17
|
+
constructor(status, cause){
|
|
18
|
+
super(`ReqResp Error: ${prettyPrintReqRespStatus(status)}`, cause);
|
|
16
19
|
this.status = status;
|
|
17
20
|
}
|
|
18
21
|
}
|
|
@@ -45,6 +48,10 @@ export class ReqRespStatusError extends Error {
|
|
|
45
48
|
return 'RATE_LIMIT_EXCEEDED';
|
|
46
49
|
case 2:
|
|
47
50
|
return 'BADLY_FORMED_REQUEST';
|
|
51
|
+
case 126:
|
|
52
|
+
return 'FAILURE';
|
|
53
|
+
case 3:
|
|
54
|
+
return 'INTERNAL_ERROR';
|
|
48
55
|
case 127:
|
|
49
56
|
return 'UNKNOWN';
|
|
50
57
|
}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
3
3
|
import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
|
|
4
|
-
import type {
|
|
4
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
5
5
|
import type { PeerId } from '@libp2p/interface';
|
|
6
|
+
import type { ENR } from '@nethermindeth/enr';
|
|
6
7
|
import type EventEmitter from 'events';
|
|
7
|
-
import type {
|
|
8
|
+
import type { P2PReqRespConfig } from './reqresp/config.js';
|
|
9
|
+
import type { StatusMessage } from './reqresp/index.js';
|
|
10
|
+
import type { ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, SubProtocolMap } from './reqresp/interface.js';
|
|
11
|
+
import type { AuthRequest, AuthResponse } from './reqresp/protocols/auth.js';
|
|
8
12
|
export declare enum PeerDiscoveryState {
|
|
9
13
|
RUNNING = "running",
|
|
10
14
|
STOPPED = "stopped"
|
|
11
15
|
}
|
|
16
|
+
export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<BlockAttestation[] | undefined>;
|
|
17
|
+
export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
|
|
12
18
|
/**
|
|
13
19
|
* The interface for a P2P service implementation.
|
|
14
20
|
*/
|
|
@@ -27,15 +33,7 @@ export interface P2PService {
|
|
|
27
33
|
* Called to have the given transaction propagated through the P2P network.
|
|
28
34
|
* @param message - The message to be propagated.
|
|
29
35
|
*/
|
|
30
|
-
propagate<T extends Gossipable>(message: T): void
|
|
31
|
-
/**
|
|
32
|
-
* Request information from peers via the request response protocol.
|
|
33
|
-
*
|
|
34
|
-
* @param protocol - The request response protocol to use
|
|
35
|
-
* @param request - The request type, corresponding to the protocol
|
|
36
|
-
* @returns The response type, corresponding to the protocol
|
|
37
|
-
*/
|
|
38
|
-
sendRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
|
|
36
|
+
propagate<T extends Gossipable>(message: T): Promise<void>;
|
|
39
37
|
/**
|
|
40
38
|
* Send a batch of requests to peers, and return the responses
|
|
41
39
|
*
|
|
@@ -43,10 +41,16 @@ export interface P2PService {
|
|
|
43
41
|
* @param requests - The requests to send to the peers
|
|
44
42
|
* @returns The responses to the requests
|
|
45
43
|
*/
|
|
46
|
-
sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[]): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]
|
|
47
|
-
registerBlockReceivedCallback(callback:
|
|
44
|
+
sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[], pinnedPeerId?: PeerId, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
|
|
45
|
+
registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
|
|
48
46
|
getEnr(): ENR | undefined;
|
|
49
47
|
getPeers(includePending?: boolean): PeerInfo[];
|
|
48
|
+
validate(txs: Tx[]): Promise<void>;
|
|
49
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler, validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
|
|
50
|
+
handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
|
|
51
|
+
updateConfig(config: Partial<P2PReqRespConfig>): void;
|
|
52
|
+
/** If node running this P2P stack is validator, passes in validator address to P2P layer */
|
|
53
|
+
registerThisValidatorAddresses(address: EthAddress[]): void;
|
|
50
54
|
}
|
|
51
55
|
/**
|
|
52
56
|
* The interface for a peer discovery service implementation.
|
|
@@ -61,10 +65,10 @@ export interface PeerDiscoveryService extends EventEmitter {
|
|
|
61
65
|
* */
|
|
62
66
|
stop(): Promise<void>;
|
|
63
67
|
/**
|
|
64
|
-
* Gets all
|
|
65
|
-
* @returns An array of
|
|
68
|
+
* Gets all KadValues.
|
|
69
|
+
* @returns An array of ENRs.
|
|
66
70
|
*/
|
|
67
|
-
|
|
71
|
+
getKadValues(): ENR[];
|
|
68
72
|
/**
|
|
69
73
|
* Runs findRandomNode query.
|
|
70
74
|
*/
|
|
@@ -82,6 +86,6 @@ export interface PeerDiscoveryService extends EventEmitter {
|
|
|
82
86
|
emit(event: 'peer:discovered', enr: ENR): boolean;
|
|
83
87
|
getStatus(): PeerDiscoveryState;
|
|
84
88
|
getEnr(): ENR | undefined;
|
|
85
|
-
|
|
89
|
+
bootstrapNodeEnrs: ENR[];
|
|
86
90
|
}
|
|
87
|
-
//# sourceMappingURL=
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBRXZDLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQ1Ysa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsY0FBYyxFQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdFLG9CQUFZLGtCQUFrQjtJQUM1QixPQUFPLFlBQVk7SUFDbkIsT0FBTyxZQUFZO0NBQ3BCO0FBRUQsTUFBTSxNQUFNLHdCQUF3QixHQUFHLENBQ3JDLEtBQUssRUFBRSxhQUFhLEVBQ3BCLE1BQU0sRUFBRSxNQUFNLEtBQ1gsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFFN0MsTUFBTSxNQUFNLG9CQUFv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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
|
+
export type TxCollectionConfig = {
|
|
3
|
+
/** How long to wait before starting reqresp for fast collection */
|
|
4
|
+
txCollectionFastNodesTimeoutBeforeReqRespMs: number;
|
|
5
|
+
/** How often to collect from configured nodes */
|
|
6
|
+
txCollectionSlowNodesIntervalMs: number;
|
|
7
|
+
/** How ofter to collect from peers */
|
|
8
|
+
txCollectionSlowReqRespIntervalMs: number;
|
|
9
|
+
/** How long to wait for a reqresp response during slow collection */
|
|
10
|
+
txCollectionSlowReqRespTimeoutMs: number;
|
|
11
|
+
/** How often to reconcile found txs with the tx pool */
|
|
12
|
+
txCollectionReconcileIntervalMs: number;
|
|
13
|
+
/** Whether to disable the slow collection loop if we are dealing with any immediate requests */
|
|
14
|
+
txCollectionDisableSlowDuringFastRequests: boolean;
|
|
15
|
+
/** How many ms to wait between retried request to a node via RPC during fast collection */
|
|
16
|
+
txCollectionFastNodeIntervalMs: number;
|
|
17
|
+
/** A comma-separated list of Aztec node RPC URLs to use for tx collection */
|
|
18
|
+
txCollectionNodeRpcUrls: string[];
|
|
19
|
+
/** Maximum number of parallel requests to make to a node during fast collection */
|
|
20
|
+
txCollectionFastMaxParallelRequestsPerNode: number;
|
|
21
|
+
/** Maximum number of transactions to request from a node in a single batch */
|
|
22
|
+
txCollectionNodeRpcMaxBatchSize: number;
|
|
23
|
+
};
|
|
24
|
+
export declare const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig>;
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFHNUcsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLG9FQUFvRTtJQUNwRSwyQ0FBMkMsRUFBRSxNQUFNLENBQUM7SUFDcEQsaURBQWlEO0lBQ2pELCtCQUErQixFQUFFLE1BQU0sQ0FBQztJQUN4QyxzQ0FBc0M7SUFDdEMsaUNBQWlDLEVBQUUsTUFBTSxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxnQ0FBZ0MsRUFBRSxNQUFNLENBQUM7SUFDekMsd0RBQXdEO0lBQ3hELCtCQUErQixFQUFFLE1BQU0sQ0FBQztJQUN4QyxnR0FBZ0c7SUFDaEcseUNBQXlDLEVBQUUsT0FBTyxDQUFDO0lBQ25ELDJGQUEyRjtJQUMzRiw4QkFBOEIsRUFBRSxNQUFNLENBQUM7SUFDdkMsNkVBQTZFO0lBQzdFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLG1GQUFtRjtJQUNuRiwwQ0FBMEMsRUFBRSxNQUFNLENBQUM7SUFDbkQsOEVBQThFO0lBQzlFLCtCQUErQixFQUFFLE1BQU0sQ0FBQztDQUN6QyxDQUFDO0FBRUYsZUFBTyxNQUFNLDBCQUEwQixFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixDQXlEN0UsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA2C,MAAM,0BAA0B,CAAC;AAG5G,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oEAAoE;IACpE,2CAA2C,EAAE,MAAM,CAAC;IACpD,iDAAiD;IACjD,+BAA+B,EAAE,MAAM,CAAC;IACxC,sCAAsC;IACtC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,qEAAqE;IACrE,gCAAgC,EAAE,MAAM,CAAC;IACzC,wDAAwD;IACxD,+BAA+B,EAAE,MAAM,CAAC;IACxC,gGAAgG;IAChG,yCAAyC,EAAE,OAAO,CAAC;IACnD,2FAA2F;IAC3F,8BAA8B,EAAE,MAAM,CAAC;IACvC,6EAA6E;IAC7E,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,mFAAmF;IACnF,0CAA0C,EAAE,MAAM,CAAC;IACnD,8EAA8E;IAC9E,+BAA+B,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAyD7E,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
+
import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
|
|
3
|
+
export const txCollectionConfigMappings = {
|
|
4
|
+
txCollectionFastNodesTimeoutBeforeReqRespMs: {
|
|
5
|
+
env: 'TX_COLLECTION_FAST_NODES_TIMEOUT_BEFORE_REQ_RESP_MS',
|
|
6
|
+
description: 'How long to wait before starting reqresp for fast collection',
|
|
7
|
+
...numberConfigHelper(200)
|
|
8
|
+
},
|
|
9
|
+
txCollectionSlowNodesIntervalMs: {
|
|
10
|
+
env: 'TX_COLLECTION_SLOW_NODES_INTERVAL_MS',
|
|
11
|
+
description: 'How often to collect from configured nodes in the slow collection loop',
|
|
12
|
+
...numberConfigHelper(12_000)
|
|
13
|
+
},
|
|
14
|
+
txCollectionSlowReqRespIntervalMs: {
|
|
15
|
+
env: 'TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS',
|
|
16
|
+
description: 'How often to collect from peers via reqresp in the slow collection loop',
|
|
17
|
+
...numberConfigHelper(12_000)
|
|
18
|
+
},
|
|
19
|
+
txCollectionSlowReqRespTimeoutMs: {
|
|
20
|
+
env: 'TX_COLLECTION_SLOW_REQ_RESP_TIMEOUT_MS',
|
|
21
|
+
description: 'How long to wait for a reqresp response during slow collection',
|
|
22
|
+
...numberConfigHelper(20_000)
|
|
23
|
+
},
|
|
24
|
+
txCollectionReconcileIntervalMs: {
|
|
25
|
+
env: 'TX_COLLECTION_RECONCILE_INTERVAL_MS',
|
|
26
|
+
description: 'How often to reconcile found txs from the tx pool',
|
|
27
|
+
...numberConfigHelper(60_000)
|
|
28
|
+
},
|
|
29
|
+
txCollectionDisableSlowDuringFastRequests: {
|
|
30
|
+
env: 'TX_COLLECTION_DISABLE_SLOW_DURING_FAST_REQUESTS',
|
|
31
|
+
description: 'Whether to disable the slow collection loop if we are dealing with any immediate requests',
|
|
32
|
+
...booleanConfigHelper(true)
|
|
33
|
+
},
|
|
34
|
+
txCollectionFastNodeIntervalMs: {
|
|
35
|
+
env: 'TX_COLLECTION_FAST_NODE_INTERVAL_MS',
|
|
36
|
+
description: 'How many ms to wait between retried request to a node via RPC during fast collection',
|
|
37
|
+
...numberConfigHelper(500)
|
|
38
|
+
},
|
|
39
|
+
txCollectionNodeRpcUrls: {
|
|
40
|
+
env: 'TX_COLLECTION_NODE_RPC_URLS',
|
|
41
|
+
fallback: [
|
|
42
|
+
'PROVER_COORDINATION_NODE_URLS'
|
|
43
|
+
],
|
|
44
|
+
description: 'A comma-separated list of Aztec node RPC URLs to use for tx collection',
|
|
45
|
+
parseEnv: (val)=>val.split(',').map((url)=>url.trim().replace(/\/$/, '')).filter((url)=>url.length > 0),
|
|
46
|
+
defaultValue: []
|
|
47
|
+
},
|
|
48
|
+
txCollectionFastMaxParallelRequestsPerNode: {
|
|
49
|
+
env: 'TX_COLLECTION_FAST_MAX_PARALLEL_REQUESTS_PER_NODE',
|
|
50
|
+
description: 'Maximum number of parallel requests to make to a node during fast collection',
|
|
51
|
+
...numberConfigHelper(4)
|
|
52
|
+
},
|
|
53
|
+
txCollectionNodeRpcMaxBatchSize: {
|
|
54
|
+
env: 'TX_COLLECTION_NODE_RPC_MAX_BATCH_SIZE',
|
|
55
|
+
description: 'Maximum number of transactions to request from a node in a single batch',
|
|
56
|
+
...numberConfigHelper(MAX_RPC_TXS_LEN)
|
|
57
|
+
}
|
|
58
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
4
|
+
import type { BlockProposal } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
6
|
+
import type { PeerId } from '@libp2p/interface';
|
|
7
|
+
import { type ReqRespInterface } from '../reqresp/interface.js';
|
|
8
|
+
import type { TxCollectionConfig } from './config.js';
|
|
9
|
+
import type { FastCollectionRequest, FastCollectionRequestInput } from './tx_collection.js';
|
|
10
|
+
import type { TxCollectionSink } from './tx_collection_sink.js';
|
|
11
|
+
import type { TxSource } from './tx_source.js';
|
|
12
|
+
export declare class FastTxCollection {
|
|
13
|
+
private reqResp;
|
|
14
|
+
private nodes;
|
|
15
|
+
private txCollectionSink;
|
|
16
|
+
private config;
|
|
17
|
+
private dateProvider;
|
|
18
|
+
private log;
|
|
19
|
+
protected requests: Set<FastCollectionRequest>;
|
|
20
|
+
constructor(reqResp: Pick<ReqRespInterface, 'sendBatchRequest'>, nodes: TxSource[], txCollectionSink: TxCollectionSink, config: TxCollectionConfig, dateProvider?: DateProvider, log?: Logger);
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
getFastCollectionRequests(): Set<FastCollectionRequest>;
|
|
23
|
+
collectFastFor(input: FastCollectionRequestInput, txHashes: TxHash[] | string[], opts: {
|
|
24
|
+
deadline: Date;
|
|
25
|
+
pinnedPeer?: PeerId;
|
|
26
|
+
}): Promise<Tx[]>;
|
|
27
|
+
protected collectFast(request: FastCollectionRequest, opts: {
|
|
28
|
+
proposal?: BlockProposal;
|
|
29
|
+
deadline: Date;
|
|
30
|
+
pinnedPeer?: PeerId;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
private collectFastFromNodes;
|
|
33
|
+
private collectFastFromNode;
|
|
34
|
+
private collectFastViaReqResp;
|
|
35
|
+
/**
|
|
36
|
+
* Handle txs by marking them as found for the requests that are waiting for them, and resolves the request if all its txs have been found.
|
|
37
|
+
* Called internally and from the main tx collection manager whenever the tx pool emits a tx-added event.
|
|
38
|
+
*/
|
|
39
|
+
foundTxs(txs: Tx[]): void;
|
|
40
|
+
/**
|
|
41
|
+
* Stop collecting all txs for blocks less than or requal to the block number specified.
|
|
42
|
+
* To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
|
|
43
|
+
*/
|
|
44
|
+
stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void;
|
|
45
|
+
/**
|
|
46
|
+
* Stop collecting all txs for blocks greater than the block number specified.
|
|
47
|
+
* To be called when there is a chain prune and previously mined txs are no longer relevant.
|
|
48
|
+
*/
|
|
49
|
+
stopCollectingForBlocksAfter(blockNumber: BlockNumber): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdF90eF9jb2xsZWN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHhfY29sbGVjdGlvbi9mYXN0X3R4X2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUlsRSxPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxxQkFBYSxnQkFBZ0I7SUFLekIsT0FBTyxDQUFDLE9BQU87SUFDZixPQUFPLENBQUMsS0FBSztJQUNiLE9BQU8sQ0FBQyxnQkFBZ0I7SUFDeEIsT0FBTyxDQUFDLE1BQU07SUFDZCxPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsR0FBRztJQVJiLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQWE7SUFFM0QsWUFDVSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEVBQ25ELEtBQUssRUFBRSxRQUFRLEVBQUUsRUFDakIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLE1BQU0sRUFBRSxrQkFBa0IsRUFDMUIsWUFBWSxHQUFFLFlBQWlDLEVBQy9DLEdBQUcsR0FBRSxNQUFrRCxFQUM3RDtJQUVTLElBQUksa0JBR2hCO0lBRU0seUJBQXlCLCtCQUUvQjtJQUVZLGNBQWMsQ0FDekIsS0FBSyxFQUFFLDBCQUEwQixFQUNqQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQzdCLElBQUksRUFBRTtRQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxpQkEwQzlDO0lBRUQsVUFBZ0IsV0FBVyxDQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQzlCLElBQUksRUFBRTtRQUFFLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQztRQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxpQkErQ3hFO1lBUWEsb0JBQW9CO1lBWXBCLG1CQUFtQjtZQWlGbkIscUJBQXFCO0lBNkNuQzs7O09BR0c7SUFDSSxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQXdCeEI7SUFFRDs7O09BR0c7SUFDSSwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FPakU7SUFFRDs7O09BR0c7SUFDSSw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FPbEU7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fast_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/fast_tx_collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IARb,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAa;IAE3D,YACU,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EACnD,KAAK,EAAE,QAAQ,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAkD,EAC7D;IAES,IAAI,kBAGhB;IAEM,yBAAyB,+BAE/B;IAEY,cAAc,CACzB,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,iBA0C9C;IAED,UAAgB,WAAW,CACzB,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,iBA+CxE;YAQa,oBAAoB;YAYpB,mBAAmB;YAiFnB,qBAAqB;IA6CnC;;;OAGG;IACI,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,QAwBxB;IAED;;;OAGG;IACI,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAOjE;IAED;;;OAGG;IACI,4BAA4B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAOlE;CACF"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { times } from '@aztec/foundation/collection';
|
|
2
|
+
import { AbortError, TimeoutError } from '@aztec/foundation/error';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { boundInclusive } from '@aztec/foundation/number';
|
|
5
|
+
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
7
|
+
import { DateProvider, elapsed } from '@aztec/foundation/timer';
|
|
8
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
9
|
+
import { ReqRespSubProtocol } from '../reqresp/interface.js';
|
|
10
|
+
import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
|
|
11
|
+
export class FastTxCollection {
|
|
12
|
+
reqResp;
|
|
13
|
+
nodes;
|
|
14
|
+
txCollectionSink;
|
|
15
|
+
config;
|
|
16
|
+
dateProvider;
|
|
17
|
+
log;
|
|
18
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
19
|
+
requests;
|
|
20
|
+
constructor(reqResp, nodes, txCollectionSink, config, dateProvider = new DateProvider(), log = createLogger('p2p:tx_collection_service')){
|
|
21
|
+
this.reqResp = reqResp;
|
|
22
|
+
this.nodes = nodes;
|
|
23
|
+
this.txCollectionSink = txCollectionSink;
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.dateProvider = dateProvider;
|
|
26
|
+
this.log = log;
|
|
27
|
+
this.requests = new Set();
|
|
28
|
+
}
|
|
29
|
+
async stop() {
|
|
30
|
+
this.requests.forEach((request)=>request.promise.reject(new AbortError(`Stopped collection service`)));
|
|
31
|
+
await Promise.resolve();
|
|
32
|
+
}
|
|
33
|
+
getFastCollectionRequests() {
|
|
34
|
+
return this.requests;
|
|
35
|
+
}
|
|
36
|
+
async collectFastFor(input, txHashes, opts) {
|
|
37
|
+
const timeout = opts.deadline.getTime() - this.dateProvider.now();
|
|
38
|
+
if (timeout <= 0) {
|
|
39
|
+
this.log.warn(`Deadline for fast tx collection is in the past (${timeout}ms)`, {
|
|
40
|
+
deadline: opts.deadline.getTime(),
|
|
41
|
+
now: this.dateProvider.now()
|
|
42
|
+
});
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const blockInfo = input.type === 'proposal' ? {
|
|
46
|
+
...input.blockProposal.toBlockInfo(),
|
|
47
|
+
blockNumber: input.blockNumber
|
|
48
|
+
} : {
|
|
49
|
+
...input.block.toBlockInfo()
|
|
50
|
+
};
|
|
51
|
+
// This promise is used to await for the collection to finish during the main collectFast method.
|
|
52
|
+
// It gets resolved in `foundTxs` when all txs have been collected, or rejected if the request is aborted or hits the deadline.
|
|
53
|
+
const promise = promiseWithResolvers();
|
|
54
|
+
setTimeout(()=>promise.reject(new TimeoutError(`Timed out while collecting txs`)), timeout);
|
|
55
|
+
const request = {
|
|
56
|
+
...input,
|
|
57
|
+
blockInfo,
|
|
58
|
+
promise,
|
|
59
|
+
foundTxs: new Map(),
|
|
60
|
+
missingTxHashes: new Set(txHashes.map((t)=>t.toString())),
|
|
61
|
+
deadline: opts.deadline
|
|
62
|
+
};
|
|
63
|
+
const [duration] = await elapsed(()=>this.collectFast(request, {
|
|
64
|
+
...opts
|
|
65
|
+
}));
|
|
66
|
+
this.log.verbose(`Collected ${request.foundTxs.size} txs out of ${txHashes.length} for ${input.type} at slot ${blockInfo.slotNumber}`, {
|
|
67
|
+
...blockInfo,
|
|
68
|
+
duration,
|
|
69
|
+
requestType: input.type,
|
|
70
|
+
missingTxs: [
|
|
71
|
+
...request.missingTxHashes
|
|
72
|
+
]
|
|
73
|
+
});
|
|
74
|
+
return [
|
|
75
|
+
...request.foundTxs.values()
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
async collectFast(request, opts) {
|
|
79
|
+
this.requests.add(request);
|
|
80
|
+
const { blockInfo } = request;
|
|
81
|
+
this.log.debug(`Starting fast collection of ${request.missingTxHashes.size} txs for ${request.type} at slot ${blockInfo.slotNumber}`, {
|
|
82
|
+
...blockInfo,
|
|
83
|
+
requestType: request.type,
|
|
84
|
+
deadline: opts.deadline
|
|
85
|
+
});
|
|
86
|
+
try {
|
|
87
|
+
// Start blasting all nodes for the txs. We give them a little time to respond before we start reqresp.
|
|
88
|
+
// And keep an eye on the request promise to ensure we don't wait longer than the deadline or return as soon
|
|
89
|
+
// as we have collected all txs, whatever the source.
|
|
90
|
+
const nodeCollectionPromise = this.collectFastFromNodes(request, opts);
|
|
91
|
+
const waitBeforeReqResp = sleep(this.config.txCollectionFastNodesTimeoutBeforeReqRespMs);
|
|
92
|
+
await Promise.race([
|
|
93
|
+
request.promise.promise,
|
|
94
|
+
waitBeforeReqResp
|
|
95
|
+
]);
|
|
96
|
+
// If we have collected all txs, we can stop here
|
|
97
|
+
if (request.missingTxHashes.size === 0) {
|
|
98
|
+
this.log.debug(`All txs collected for slot ${blockInfo.slotNumber} without reqresp`, blockInfo);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Start blasting reqresp for the remaining txs. Note that node collection keeps running in parallel.
|
|
102
|
+
// We stop when we have collected all txs, timed out, or both node collection and reqresp have given up.
|
|
103
|
+
const collectionPromise = Promise.allSettled([
|
|
104
|
+
this.collectFastViaReqResp(request, opts),
|
|
105
|
+
nodeCollectionPromise
|
|
106
|
+
]);
|
|
107
|
+
await Promise.race([
|
|
108
|
+
collectionPromise,
|
|
109
|
+
request.promise.promise
|
|
110
|
+
]);
|
|
111
|
+
} catch (err) {
|
|
112
|
+
// Log and swallow all errors
|
|
113
|
+
const logCtx = {
|
|
114
|
+
...blockInfo,
|
|
115
|
+
errorMessage: err instanceof Error ? err.message : undefined,
|
|
116
|
+
missingTxs: [
|
|
117
|
+
...request.missingTxHashes
|
|
118
|
+
].map((txHash)=>txHash.toString())
|
|
119
|
+
};
|
|
120
|
+
if (err instanceof Error && err.name === 'TimeoutError') {
|
|
121
|
+
this.log.warn(`Timed out collecting txs for ${request.type} at slot ${blockInfo.slotNumber}`, logCtx);
|
|
122
|
+
} else if (err instanceof Error && err.name === 'AbortError') {
|
|
123
|
+
this.log.warn(`Aborted collecting txs for ${request.type} at slot ${blockInfo.slotNumber}`, logCtx);
|
|
124
|
+
} else {
|
|
125
|
+
this.log.error(`Error collecting txs for ${request.type} for slot ${blockInfo.slotNumber}`, err, logCtx);
|
|
126
|
+
}
|
|
127
|
+
} finally{
|
|
128
|
+
// Ensure no unresolved promises and remove the request from the set
|
|
129
|
+
request.promise.resolve();
|
|
130
|
+
this.requests.delete(request);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Starts collecting txs from all configured nodes. We send `txCollectionFastMaxParallelRequestsPerNode` requests
|
|
135
|
+
* in parallel to each node. We keep track of the number of attempts made to collect each tx, so we can prioritize
|
|
136
|
+
* the txs that have been requested less often whenever we need to send a new batch of requests. We ensure that no
|
|
137
|
+
* tx is requested more than once at the same time to the same node.
|
|
138
|
+
*/ async collectFastFromNodes(request, opts) {
|
|
139
|
+
if (this.nodes.length === 0) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Keep a shared priority queue of all txs pending to be requested, sorted by the number of attempts made to collect them.
|
|
143
|
+
const attemptsPerTx = [
|
|
144
|
+
...request.missingTxHashes
|
|
145
|
+
].map((txHash)=>({
|
|
146
|
+
txHash,
|
|
147
|
+
attempts: 0,
|
|
148
|
+
found: false
|
|
149
|
+
}));
|
|
150
|
+
// Returns once we have finished all node loops. Each loop finishes when the deadline is hit, or all txs have been collected.
|
|
151
|
+
await Promise.allSettled(this.nodes.map((node)=>this.collectFastFromNode(request, node, attemptsPerTx, opts)));
|
|
152
|
+
}
|
|
153
|
+
async collectFastFromNode(request, node, attemptsPerTx, opts) {
|
|
154
|
+
const notFinished = ()=>this.dateProvider.now() <= +opts.deadline && request.missingTxHashes.size > 0 && this.requests.has(request);
|
|
155
|
+
const maxParallelRequests = this.config.txCollectionFastMaxParallelRequestsPerNode;
|
|
156
|
+
const maxBatchSize = this.config.txCollectionNodeRpcMaxBatchSize;
|
|
157
|
+
const activeRequestsToThisNode = new Set(); // Track the txs being actively requested to this node
|
|
158
|
+
const processBatch = async ()=>{
|
|
159
|
+
while(notFinished()){
|
|
160
|
+
// Pull tx hashes from the attemptsPerTx array, which is sorted by attempts,
|
|
161
|
+
// so we prioritize txs that have been requested less often.
|
|
162
|
+
const batch = [];
|
|
163
|
+
let index = 0;
|
|
164
|
+
while(batch.length < maxBatchSize){
|
|
165
|
+
const txToRequest = attemptsPerTx[index++];
|
|
166
|
+
if (!txToRequest) {
|
|
167
|
+
break;
|
|
168
|
+
} else if (!request.missingTxHashes.has(txToRequest.txHash)) {
|
|
169
|
+
// Mark as found if it was found somewhere else, we'll then remove it from the array.
|
|
170
|
+
// We don't delete it now since 'array.splice' is pretty expensive, so we do it after sorting.
|
|
171
|
+
txToRequest.found = true;
|
|
172
|
+
} else if (!activeRequestsToThisNode.has(txToRequest.txHash)) {
|
|
173
|
+
// If the tx is not alredy being requested to this node, add it to the current batch and increase attempts.
|
|
174
|
+
// Note that we increase the attempts *before* making the request, so the next `collectFastFromNode` that
|
|
175
|
+
// needs to grab txs to send, will pick txs that have been requested less often, instead of all requesting
|
|
176
|
+
// the same txs at the same time.
|
|
177
|
+
batch.push(txToRequest);
|
|
178
|
+
activeRequestsToThisNode.add(txToRequest.txHash);
|
|
179
|
+
txToRequest.attempts++;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// After modifying the array by removing txs or updating attempts, re-sort it and trim the found txs from the end.
|
|
183
|
+
attemptsPerTx.sort((a, b)=>a.found === b.found ? a.attempts - b.attempts : Number(a.found) - Number(b.found));
|
|
184
|
+
const firstFoundTxIndex = attemptsPerTx.findIndex((tx)=>tx.found);
|
|
185
|
+
if (firstFoundTxIndex !== -1) {
|
|
186
|
+
attemptsPerTx.length = firstFoundTxIndex;
|
|
187
|
+
}
|
|
188
|
+
// If we see no more txs to request, we can stop this "process" loop
|
|
189
|
+
if (batch.length === 0) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Collect this batch from the node
|
|
193
|
+
await this.txCollectionSink.collect((txHashes)=>node.getTxsByHash(txHashes), batch.map(({ txHash })=>TxHash.fromString(txHash)), {
|
|
194
|
+
description: `fast ${node.getInfo()}`,
|
|
195
|
+
node: node.getInfo(),
|
|
196
|
+
method: 'fast-node-rpc',
|
|
197
|
+
...request.blockInfo
|
|
198
|
+
});
|
|
199
|
+
// Clear from the active requests the txs we just requested
|
|
200
|
+
for (const requestedTx of batch){
|
|
201
|
+
activeRequestsToThisNode.delete(requestedTx.txHash);
|
|
202
|
+
}
|
|
203
|
+
// Sleep a bit until hitting the node again (or not, depending on config)
|
|
204
|
+
if (notFinished()) {
|
|
205
|
+
await sleep(this.config.txCollectionFastNodeIntervalMs);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
// Kick off N parallel requests to the node, up to the maxParallelRequests limit
|
|
210
|
+
await Promise.all(times(maxParallelRequests, processBatch));
|
|
211
|
+
}
|
|
212
|
+
async collectFastViaReqResp(request, opts) {
|
|
213
|
+
const timeoutMs = +request.deadline - this.dateProvider.now();
|
|
214
|
+
const pinnedPeer = opts.pinnedPeer;
|
|
215
|
+
const maxPeers = boundInclusive(Math.ceil(request.missingTxHashes.size / 2), 8, 32);
|
|
216
|
+
const maxRetryAttempts = 5;
|
|
217
|
+
const blockInfo = request.blockInfo;
|
|
218
|
+
const slotNumber = blockInfo.slotNumber;
|
|
219
|
+
if (timeoutMs < 100) {
|
|
220
|
+
this.log.warn(`Not initiating fast reqresp for txs for ${request.type} at slot ${blockInfo.slotNumber} due to timeout`, {
|
|
221
|
+
timeoutMs,
|
|
222
|
+
...blockInfo
|
|
223
|
+
});
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this.log.debug(`Starting fast reqresp for ${request.missingTxHashes.size} txs for ${request.type} at slot ${blockInfo.slotNumber}`, {
|
|
227
|
+
...blockInfo,
|
|
228
|
+
timeoutMs,
|
|
229
|
+
pinnedPeer
|
|
230
|
+
});
|
|
231
|
+
try {
|
|
232
|
+
await this.txCollectionSink.collect(async (txHashes)=>{
|
|
233
|
+
const txs = await this.reqResp.sendBatchRequest(ReqRespSubProtocol.TX, chunkTxHashesRequest(txHashes), pinnedPeer, timeoutMs, maxPeers, maxRetryAttempts);
|
|
234
|
+
return txs.flat();
|
|
235
|
+
}, Array.from(request.missingTxHashes).map((txHash)=>TxHash.fromString(txHash)), {
|
|
236
|
+
description: `reqresp for slot ${slotNumber}`,
|
|
237
|
+
method: 'fast-req-resp',
|
|
238
|
+
...opts,
|
|
239
|
+
...request.blockInfo
|
|
240
|
+
});
|
|
241
|
+
} catch (err) {
|
|
242
|
+
this.log.error(`Error sending fast reqresp request for txs`, err, {
|
|
243
|
+
txs: [
|
|
244
|
+
...request.missingTxHashes
|
|
245
|
+
],
|
|
246
|
+
...blockInfo
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Handle txs by marking them as found for the requests that are waiting for them, and resolves the request if all its txs have been found.
|
|
252
|
+
* Called internally and from the main tx collection manager whenever the tx pool emits a tx-added event.
|
|
253
|
+
*/ foundTxs(txs) {
|
|
254
|
+
for (const request of this.requests){
|
|
255
|
+
for (const tx of txs){
|
|
256
|
+
const txHash = tx.txHash.toString();
|
|
257
|
+
// Remove the tx hash from the missing set, and add it to the found set.
|
|
258
|
+
if (request.missingTxHashes.has(txHash)) {
|
|
259
|
+
request.missingTxHashes.delete(txHash);
|
|
260
|
+
request.foundTxs.set(txHash, tx);
|
|
261
|
+
this.log.trace(`Found tx ${txHash} for fast collection request`, {
|
|
262
|
+
...request.blockInfo,
|
|
263
|
+
txHash: tx.txHash.toString(),
|
|
264
|
+
type: request.type
|
|
265
|
+
});
|
|
266
|
+
// If we found all txs for this request, we resolve the promise
|
|
267
|
+
if (request.missingTxHashes.size === 0) {
|
|
268
|
+
this.log.trace(`All txs found for fast collection request`, {
|
|
269
|
+
...request.blockInfo,
|
|
270
|
+
type: request.type
|
|
271
|
+
});
|
|
272
|
+
request.promise.resolve();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Stop collecting all txs for blocks less than or requal to the block number specified.
|
|
280
|
+
* To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
|
|
281
|
+
*/ stopCollectingForBlocksUpTo(blockNumber) {
|
|
282
|
+
for (const request of this.requests){
|
|
283
|
+
if (request.blockInfo.blockNumber <= blockNumber) {
|
|
284
|
+
request.promise.reject(new AbortError(`Stopped collecting txs up to block ${blockNumber}`));
|
|
285
|
+
this.requests.delete(request);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Stop collecting all txs for blocks greater than the block number specified.
|
|
291
|
+
* To be called when there is a chain prune and previously mined txs are no longer relevant.
|
|
292
|
+
*/ stopCollectingForBlocksAfter(blockNumber) {
|
|
293
|
+
for (const request of this.requests){
|
|
294
|
+
if (request.blockInfo.blockNumber > blockNumber) {
|
|
295
|
+
request.promise.reject(new AbortError(`Stopped collecting txs after block ${blockNumber}`));
|
|
296
|
+
this.requests.delete(request);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { TxCollection, type FastCollectionRequestInput } from './tx_collection.js';
|
|
2
|
+
export { type TxSource, createNodeRpcTxSources, NodeRpcTxSource } from './tx_source.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90eF9jb2xsZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSywwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,KAAK,QAAQ,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|