@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.023c3e5
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 +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +26 -13
- package/dest/client/factory.d.ts +15 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +61 -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 +170 -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 -193
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +765 -229
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +154 -125
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +182 -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 +104 -25
- 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 +299 -174
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
- package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +19 -21
- 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 +56 -41
- 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 +75 -16
- 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 +493 -142
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +7 -2
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
- 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 +276 -45
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
- 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 +76 -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/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +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/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -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 +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +60 -87
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
- package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +84 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
- package/dest/msg_validators/tx_validator/index.d.ts +9 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +8 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -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/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -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 +14 -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 +9 -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 +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- 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 +64 -37
- package/dest/services/dummy_service.d.ts +66 -11
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +130 -5
- package/dest/services/encoding.d.ts +26 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +75 -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 +122 -0
- package/dest/services/libp2p/libp2p_service.d.ts +107 -95
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1328 -313
- 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 +12 -3
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +44 -12
- package/dest/services/peer-manager/peer_manager.d.ts +103 -23
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +551 -82
- 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 +43 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- 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 +23 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- 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 +75 -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 +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- 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 +34 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -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 +52 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -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 +105 -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 +76 -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 +29 -66
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +753 -248
- 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 +40 -20
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +28 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +66 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/fast_tx_collection.js +311 -0
- package/dest/services/tx_collection/index.d.ts +4 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +3 -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 +31 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -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 +219 -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 +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 +4 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +3 -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/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +259 -90
- 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 +51 -11
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +232 -53
- 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 +34 -15
- package/src/client/factory.ts +135 -53
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +213 -0
- package/src/client/p2p_client.ts +476 -383
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +304 -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 +119 -24
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
- package/src/mem_pools/attestation_pool/mocks.ts +24 -17
- package/src/mem_pools/instrumentation.ts +72 -48
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +9 -2
- package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
- package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -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 +10 -9
- package/src/msg_validators/tx_validator/data_validator.ts +95 -71
- package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
- package/src/msg_validators/tx_validator/factory.ts +151 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
- package/src/msg_validators/tx_validator/index.ts +8 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
- package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +85 -39
- package/src/services/dummy_service.ts +198 -9
- package/src/services/encoding.ts +82 -6
- package/src/services/index.ts +4 -0
- package/src/services/libp2p/instrumentation.ts +126 -0
- package/src/services/libp2p/libp2p_service.ts +1170 -353
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +55 -12
- package/src/services/peer-manager/peer_manager.ts +657 -80
- package/src/services/peer-manager/peer_scoring.ts +45 -3
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/config.ts +26 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/index.ts +2 -0
- package/src/services/reqresp/interface.ts +95 -37
- package/src/services/reqresp/metrics.ts +40 -28
- 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 +106 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -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 +121 -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 +449 -271
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +65 -22
- package/src/services/tx_collection/config.ts +98 -0
- package/src/services/tx_collection/fast_tx_collection.ts +364 -0
- package/src/services/tx_collection/index.ts +7 -0
- package/src/services/tx_collection/instrumentation.ts +35 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -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 +232 -0
- package/src/services/tx_provider_instrumentation.ts +54 -0
- package/src/test-helpers/index.ts +3 -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/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +434 -89
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +315 -59
- package/src/types/index.ts +2 -0
- package/src/util.ts +105 -91
- package/src/versioning.ts +11 -4
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -3,16 +3,16 @@ import { sleep } from '@aztec/foundation/sleep';
|
|
|
3
3
|
import { type ComponentsVersions, checkCompressedComponentVersion } from '@aztec/stdlib/versioning';
|
|
4
4
|
import { OtelMetricsAdapter, type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
5
|
|
|
6
|
-
import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
|
|
7
|
-
import { ENR, SignableENR } from '@chainsafe/enr';
|
|
8
6
|
import type { PeerId } from '@libp2p/interface';
|
|
9
7
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
8
|
+
import { Discv5, type Discv5EventEmitter, type IDiscv5CreateOptions } from '@nethermindeth/discv5';
|
|
9
|
+
import { ENR, SignableENR } from '@nethermindeth/enr';
|
|
10
10
|
import EventEmitter from 'events';
|
|
11
11
|
|
|
12
12
|
import type { P2PConfig } from '../../config.js';
|
|
13
|
+
import { createNodeENR } from '../../enr/generate-enr.js';
|
|
13
14
|
import { AZTEC_ENR_KEY, Discv5Event, PeerEvent } from '../../types/index.js';
|
|
14
15
|
import { convertToMultiaddr } from '../../util.js';
|
|
15
|
-
import { setAztecEnrKey } from '../../versioning.js';
|
|
16
16
|
import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
|
|
17
17
|
|
|
18
18
|
const delayBeforeStart = 2000; // 2sec
|
|
@@ -22,7 +22,7 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
22
22
|
*/
|
|
23
23
|
export class DiscV5Service extends EventEmitter implements PeerDiscoveryService {
|
|
24
24
|
/** The Discv5 instance */
|
|
25
|
-
private discv5:
|
|
25
|
+
private discv5: Discv5EventEmitter;
|
|
26
26
|
|
|
27
27
|
/** This instance's ENR */
|
|
28
28
|
private enr: SignableENR;
|
|
@@ -30,57 +30,74 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
30
30
|
/** Version identifiers. */
|
|
31
31
|
private versions: ComponentsVersions;
|
|
32
32
|
|
|
33
|
-
/** UDP listen addr */
|
|
34
|
-
private listenMultiAddrUdp: Multiaddr;
|
|
35
|
-
|
|
36
33
|
private currentState = PeerDiscoveryState.STOPPED;
|
|
37
34
|
|
|
38
|
-
public readonly bootstrapNodes: string[] = [];
|
|
39
35
|
private bootstrapNodePeerIds: PeerId[] = [];
|
|
40
|
-
|
|
36
|
+
public bootstrapNodeEnrs: ENR[] = [];
|
|
37
|
+
private trustedPeerEnrs: ENR[] = [];
|
|
41
38
|
|
|
42
39
|
private startTime = 0;
|
|
43
40
|
|
|
41
|
+
private handlers = {
|
|
42
|
+
onMultiaddrUpdated: this.onMultiaddrUpdated.bind(this),
|
|
43
|
+
onDiscovered: this.onDiscovered.bind(this),
|
|
44
|
+
onEnrAdded: this.onEnrAdded.bind(this),
|
|
45
|
+
};
|
|
46
|
+
|
|
44
47
|
constructor(
|
|
45
48
|
private peerId: PeerId,
|
|
46
49
|
private config: P2PConfig,
|
|
50
|
+
private readonly packageVersion: string,
|
|
47
51
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
48
52
|
private logger = createLogger('p2p:discv5_service'),
|
|
53
|
+
configOverrides: Partial<IDiscv5CreateOptions> = {},
|
|
49
54
|
) {
|
|
50
55
|
super();
|
|
51
|
-
const {
|
|
52
|
-
|
|
53
|
-
this.bootstrapNodeEnrs =
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
const { p2pIp, p2pPort, p2pBroadcastPort, bootstrapNodes, trustedPeers, privatePeers } = config;
|
|
57
|
+
|
|
58
|
+
this.bootstrapNodeEnrs = bootstrapNodes.map(x => ENR.decodeTxt(x));
|
|
59
|
+
const privatePeerEnrs = new Set(privatePeers);
|
|
60
|
+
this.trustedPeerEnrs = trustedPeers.filter(x => !privatePeerEnrs.has(x)).map(x => ENR.decodeTxt(x));
|
|
61
|
+
|
|
62
|
+
// If no overridden broadcast port is provided, use the p2p port as the broadcast port
|
|
63
|
+
if (!p2pBroadcastPort) {
|
|
64
|
+
this.logger.warn('No p2pBroadcastPort provided, using p2pPort as broadcast port');
|
|
65
|
+
config.p2pBroadcastPort = p2pPort;
|
|
61
66
|
}
|
|
62
67
|
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
`${convertToMultiaddr(udpAnnounceAddress || tcpAnnounceAddress, 'udp')}/p2p/${peerId.toString()}`,
|
|
67
|
-
);
|
|
68
|
+
const bindAddrs: any = {
|
|
69
|
+
ip4: multiaddr(convertToMultiaddr(config.listenAddress, p2pPort, 'udp')),
|
|
70
|
+
};
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
let multiAddrUdp, multiAddrTcp;
|
|
73
|
+
if (p2pIp) {
|
|
74
|
+
multiAddrTcp = multiaddr(
|
|
75
|
+
`${convertToMultiaddr(p2pIp!, config.p2pBroadcastPort!, 'tcp')}/p2p/${peerId.toString()}`,
|
|
76
|
+
);
|
|
77
|
+
multiAddrUdp = multiaddr(
|
|
78
|
+
`${convertToMultiaddr(p2pIp!, config.p2pBroadcastPort!, 'udp')}/p2p/${peerId.toString()}`,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
({ enr: this.enr, versions: this.versions } = createNodeENR(
|
|
83
|
+
peerId,
|
|
84
|
+
multiAddrUdp,
|
|
85
|
+
multiAddrTcp,
|
|
86
|
+
config,
|
|
87
|
+
this.packageVersion,
|
|
88
|
+
));
|
|
74
89
|
|
|
75
|
-
const metricsRegistry = new OtelMetricsAdapter(telemetry);
|
|
90
|
+
const metricsRegistry = new OtelMetricsAdapter(telemetry, this.logger.getBindings());
|
|
76
91
|
this.discv5 = Discv5.create({
|
|
77
92
|
enr: this.enr,
|
|
78
93
|
peerId,
|
|
79
|
-
bindAddrs
|
|
94
|
+
bindAddrs,
|
|
80
95
|
config: {
|
|
81
96
|
lookupTimeout: 2000,
|
|
82
97
|
requestTimeout: 2000,
|
|
83
98
|
allowUnverifiedSessions: true,
|
|
99
|
+
enrUpdate: !p2pIp ? true : false, // If no p2p IP is set, enrUpdate can automatically resolve it
|
|
100
|
+
...configOverrides.config,
|
|
84
101
|
},
|
|
85
102
|
metricsRegistry,
|
|
86
103
|
});
|
|
@@ -104,8 +121,17 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
104
121
|
}
|
|
105
122
|
};
|
|
106
123
|
|
|
107
|
-
this.discv5.on(Discv5Event.DISCOVERED, this.onDiscovered
|
|
108
|
-
this.discv5.on(Discv5Event.ENR_ADDED, this.onEnrAdded
|
|
124
|
+
this.discv5.on(Discv5Event.DISCOVERED, this.handlers.onDiscovered);
|
|
125
|
+
this.discv5.on(Discv5Event.ENR_ADDED, this.handlers.onEnrAdded);
|
|
126
|
+
this.discv5.on(Discv5Event.MULTIADDR_UPDATED, this.handlers.onMultiaddrUpdated);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private onMultiaddrUpdated(m: Multiaddr) {
|
|
130
|
+
// We want to update our tcp port to match the udp port
|
|
131
|
+
// p2pBroadcastPort is optional on config, however it is set to default within the p2p client factory
|
|
132
|
+
const multiAddrTcp = multiaddr(convertToMultiaddr(m.nodeAddress().address, this.config.p2pBroadcastPort!, 'tcp'));
|
|
133
|
+
this.enr.setLocationMultiaddr(multiAddrTcp);
|
|
134
|
+
this.logger.info('Multiaddr updated', { multiaddr: multiAddrTcp.toString() });
|
|
109
135
|
}
|
|
110
136
|
|
|
111
137
|
public async start(): Promise<void> {
|
|
@@ -126,10 +152,14 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
126
152
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
127
153
|
|
|
128
154
|
// Add bootnode ENR if provided
|
|
129
|
-
if (this.
|
|
155
|
+
if (this.bootstrapNodeEnrs?.length) {
|
|
130
156
|
// Do this conversion once since it involves an async function call
|
|
131
157
|
this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodeEnrs.map(enr => enr.peerId()));
|
|
132
|
-
this.logger.info(
|
|
158
|
+
this.logger.info(
|
|
159
|
+
`Adding ${this.bootstrapNodeEnrs.length} bootstrap nodes ENRs: ${this.bootstrapNodeEnrs
|
|
160
|
+
.map(enr => enr.encodeTxt())
|
|
161
|
+
.join(', ')}`,
|
|
162
|
+
);
|
|
133
163
|
for (const enr of this.bootstrapNodeEnrs) {
|
|
134
164
|
try {
|
|
135
165
|
if (this.config.bootstrapNodeEnrVersionCheck) {
|
|
@@ -145,11 +175,23 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
145
175
|
}
|
|
146
176
|
}
|
|
147
177
|
}
|
|
178
|
+
|
|
179
|
+
// Add trusted peer ENRs if provided
|
|
180
|
+
if (this.trustedPeerEnrs?.length) {
|
|
181
|
+
this.logger.info(
|
|
182
|
+
`Adding ${this.trustedPeerEnrs.length} trusted peer ENRs: ${this.trustedPeerEnrs
|
|
183
|
+
.map(enr => enr.encodeTxt())
|
|
184
|
+
.join(', ')}`,
|
|
185
|
+
);
|
|
186
|
+
for (const enr of this.trustedPeerEnrs) {
|
|
187
|
+
this.discv5.addEnr(enr);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
148
190
|
}
|
|
149
191
|
|
|
150
192
|
public async runRandomNodesQuery(): Promise<void> {
|
|
151
193
|
if (this.currentState !== PeerDiscoveryState.RUNNING) {
|
|
152
|
-
|
|
194
|
+
return;
|
|
153
195
|
}
|
|
154
196
|
|
|
155
197
|
// First, wait some time before starting the peer discovery
|
|
@@ -166,7 +208,7 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
166
208
|
}
|
|
167
209
|
}
|
|
168
210
|
|
|
169
|
-
public
|
|
211
|
+
public getKadValues(): ENR[] {
|
|
170
212
|
return this.discv5.kadValues();
|
|
171
213
|
}
|
|
172
214
|
|
|
@@ -187,8 +229,12 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
187
229
|
}
|
|
188
230
|
|
|
189
231
|
public async stop(): Promise<void> {
|
|
190
|
-
|
|
191
|
-
|
|
232
|
+
if (this.currentState !== PeerDiscoveryState.RUNNING) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
await this.discv5.off(Discv5Event.DISCOVERED, this.handlers.onDiscovered);
|
|
236
|
+
await this.discv5.off(Discv5Event.ENR_ADDED, this.handlers.onEnrAdded);
|
|
237
|
+
await this.discv5.off(Discv5Event.MULTIADDR_UPDATED, this.handlers.onMultiaddrUpdated);
|
|
192
238
|
|
|
193
239
|
await this.discv5.stop();
|
|
194
240
|
|
|
@@ -231,7 +277,7 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
231
277
|
// Check the peer is an aztec peer
|
|
232
278
|
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
233
279
|
if (!value) {
|
|
234
|
-
this.logger.
|
|
280
|
+
this.logger.debug(`Peer node ${enr.nodeId} does not have aztec key in ENR`);
|
|
235
281
|
return false;
|
|
236
282
|
}
|
|
237
283
|
|
|
@@ -1,17 +1,42 @@
|
|
|
1
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
1
2
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
2
|
-
import type {
|
|
3
|
-
import { TxHash } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { Gossipable, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
4
|
+
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
4
5
|
|
|
5
6
|
import type { PeerId } from '@libp2p/interface';
|
|
7
|
+
import type { ENR } from '@nethermindeth/enr';
|
|
6
8
|
import EventEmitter from 'events';
|
|
7
9
|
|
|
8
|
-
import type {
|
|
9
|
-
import
|
|
10
|
+
import type { PeerManagerInterface } from './peer-manager/interface.js';
|
|
11
|
+
import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
|
|
12
|
+
import type { P2PReqRespConfig } from './reqresp/config.js';
|
|
13
|
+
import type { ConnectionSampler } from './reqresp/connection-sampler/connection_sampler.js';
|
|
14
|
+
import { type AuthRequest, StatusMessage } from './reqresp/index.js';
|
|
15
|
+
import type {
|
|
16
|
+
ReqRespInterface,
|
|
17
|
+
ReqRespResponse,
|
|
18
|
+
ReqRespSubProtocol,
|
|
19
|
+
ReqRespSubProtocolHandler,
|
|
20
|
+
ReqRespSubProtocolHandlers,
|
|
21
|
+
ReqRespSubProtocolValidators,
|
|
22
|
+
SubProtocolMap,
|
|
23
|
+
} from './reqresp/interface.js';
|
|
24
|
+
import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
|
|
25
|
+
import { ReqRespStatus } from './reqresp/status.js';
|
|
26
|
+
import {
|
|
27
|
+
type P2PBlockReceivedCallback,
|
|
28
|
+
type P2PCheckpointReceivedCallback,
|
|
29
|
+
type P2PService,
|
|
30
|
+
type PeerDiscoveryService,
|
|
31
|
+
PeerDiscoveryState,
|
|
32
|
+
} from './service.js';
|
|
10
33
|
|
|
11
34
|
/**
|
|
12
35
|
* A dummy implementation of the P2P Service.
|
|
13
36
|
*/
|
|
14
37
|
export class DummyP2PService implements P2PService {
|
|
38
|
+
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
39
|
+
|
|
15
40
|
/** Returns an empty array for peers. */
|
|
16
41
|
getPeers(): PeerInfo[] {
|
|
17
42
|
return [];
|
|
@@ -37,7 +62,9 @@ export class DummyP2PService implements P2PService {
|
|
|
37
62
|
* Called to have the given message propagated through the P2P network.
|
|
38
63
|
* @param _ - The message to be propagated.
|
|
39
64
|
*/
|
|
40
|
-
public propagate<T extends Gossipable>(_: T) {
|
|
65
|
+
public propagate<T extends Gossipable>(_: T) {
|
|
66
|
+
return Promise.resolve();
|
|
67
|
+
}
|
|
41
68
|
|
|
42
69
|
/**
|
|
43
70
|
* Called upon receipt of settled transactions.
|
|
@@ -48,7 +75,12 @@ export class DummyP2PService implements P2PService {
|
|
|
48
75
|
/**
|
|
49
76
|
* Register a callback into the validator client for when a block proposal is received
|
|
50
77
|
*/
|
|
51
|
-
public registerBlockReceivedCallback(
|
|
78
|
+
public registerBlockReceivedCallback(_callback: P2PBlockReceivedCallback) {}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Register a callback into the validator client for when a checkpoint proposal is received
|
|
82
|
+
*/
|
|
83
|
+
public registerCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
|
|
52
84
|
|
|
53
85
|
/**
|
|
54
86
|
* Sends a request to a peer.
|
|
@@ -76,6 +108,15 @@ export class DummyP2PService implements P2PService {
|
|
|
76
108
|
return Promise.resolve([]);
|
|
77
109
|
}
|
|
78
110
|
|
|
111
|
+
public sendRequestToPeer(
|
|
112
|
+
_peerId: PeerId,
|
|
113
|
+
_subProtocol: ReqRespSubProtocol,
|
|
114
|
+
_payload: Buffer,
|
|
115
|
+
_dialTimeout?: number,
|
|
116
|
+
): Promise<ReqRespResponse> {
|
|
117
|
+
return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
|
|
118
|
+
}
|
|
119
|
+
|
|
79
120
|
/**
|
|
80
121
|
* Returns the ENR of the peer.
|
|
81
122
|
* @returns The ENR of the peer, otherwise undefined.
|
|
@@ -83,6 +124,50 @@ export class DummyP2PService implements P2PService {
|
|
|
83
124
|
public getEnr(): undefined {
|
|
84
125
|
return undefined;
|
|
85
126
|
}
|
|
127
|
+
|
|
128
|
+
validate(_txs: Tx[]): Promise<void> {
|
|
129
|
+
return Promise.resolve();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
validatePropagatedTx(_tx: Tx, _peerId: PeerId): Promise<boolean> {
|
|
133
|
+
return Promise.resolve(true);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
addReqRespSubProtocol(
|
|
137
|
+
_subProtocol: ReqRespSubProtocol,
|
|
138
|
+
_handler: ReqRespSubProtocolHandler,
|
|
139
|
+
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
140
|
+
): Promise<void> {
|
|
141
|
+
return Promise.resolve();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage> {
|
|
145
|
+
return Promise.resolve(StatusMessage.random());
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
//this is no-op
|
|
149
|
+
registerThisValidatorAddresses(_address: EthAddress[]): void {}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Get dummy BatchTxRequesterLibP2PService for testing
|
|
153
|
+
*/
|
|
154
|
+
getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
|
|
155
|
+
return {
|
|
156
|
+
reqResp: this, // The dummy service implements ReqRespInterface
|
|
157
|
+
connectionSampler: new DummyReqResp().getConnectionSampler(),
|
|
158
|
+
txValidatorConfig: {
|
|
159
|
+
l1ChainId: 1,
|
|
160
|
+
rollupVersion: 1,
|
|
161
|
+
proofVerifier: {
|
|
162
|
+
verifyProof: () => Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 }),
|
|
163
|
+
stop: () => Promise.resolve(),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
peerScoring: {
|
|
167
|
+
penalizePeer: (_peerId, _penalty) => {},
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
86
171
|
}
|
|
87
172
|
|
|
88
173
|
/**
|
|
@@ -90,7 +175,7 @@ export class DummyP2PService implements P2PService {
|
|
|
90
175
|
*/
|
|
91
176
|
export class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
|
|
92
177
|
private currentState = PeerDiscoveryState.STOPPED;
|
|
93
|
-
public
|
|
178
|
+
public bootstrapNodeEnrs: ENR[] = [];
|
|
94
179
|
|
|
95
180
|
/**
|
|
96
181
|
* Starts the dummy implementation.
|
|
@@ -110,9 +195,9 @@ export class DummyPeerDiscoveryService extends EventEmitter implements PeerDisco
|
|
|
110
195
|
}
|
|
111
196
|
/**
|
|
112
197
|
* Called to discover peers in the network.
|
|
113
|
-
* @returns An array of
|
|
198
|
+
* @returns An array of Enrs.
|
|
114
199
|
*/
|
|
115
|
-
public
|
|
200
|
+
public getKadValues() {
|
|
116
201
|
return [];
|
|
117
202
|
}
|
|
118
203
|
|
|
@@ -132,3 +217,107 @@ export class DummyPeerDiscoveryService extends EventEmitter implements PeerDisco
|
|
|
132
217
|
return undefined;
|
|
133
218
|
}
|
|
134
219
|
}
|
|
220
|
+
|
|
221
|
+
export class DummyPeerManager implements PeerManagerInterface {
|
|
222
|
+
constructor(
|
|
223
|
+
public peerId: PeerId,
|
|
224
|
+
private peersProvider?: { getPeers: () => PeerId[] },
|
|
225
|
+
) {}
|
|
226
|
+
|
|
227
|
+
public getPeers(_includePending?: boolean): PeerInfo[] {
|
|
228
|
+
if (!this.peersProvider) {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
return this.peersProvider
|
|
232
|
+
.getPeers()
|
|
233
|
+
.filter(peer => !peer.equals(this.peerId))
|
|
234
|
+
.map(id => ({
|
|
235
|
+
id: id.toString(),
|
|
236
|
+
status: 'connected',
|
|
237
|
+
score: 0,
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
public initializePeers(): Promise<void> {
|
|
242
|
+
return Promise.resolve();
|
|
243
|
+
}
|
|
244
|
+
public getPeerScore(_peerId: string): number {
|
|
245
|
+
return 0;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
public shouldDisableP2PGossip(_peerId: string): boolean {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
public stop(): Promise<void> {
|
|
253
|
+
return Promise.resolve();
|
|
254
|
+
}
|
|
255
|
+
public heartbeat(): Promise<void> {
|
|
256
|
+
return Promise.resolve();
|
|
257
|
+
}
|
|
258
|
+
public addTrustedPeer(_peerId: PeerId): void {}
|
|
259
|
+
public addPrivatePeer(_peerId: PeerId): void {}
|
|
260
|
+
public goodbyeReceived(_peerId: PeerId, _reason: GoodByeReason): void {}
|
|
261
|
+
public penalizePeer(_peerId: PeerId, _penalty: PeerErrorSeverity): void {}
|
|
262
|
+
public addPreferredPeer(_peerId: PeerId): void {}
|
|
263
|
+
public handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage> {
|
|
264
|
+
return Promise.resolve(StatusMessage.random());
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
//this is no-op
|
|
268
|
+
registerThisValidatorAddresses(_address: EthAddress[]): void {}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export class DummyReqResp implements ReqRespInterface {
|
|
272
|
+
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
273
|
+
start(
|
|
274
|
+
_subProtocolHandlers: ReqRespSubProtocolHandlers,
|
|
275
|
+
_subProtocolValidators: ReqRespSubProtocolValidators,
|
|
276
|
+
): Promise<void> {
|
|
277
|
+
return Promise.resolve();
|
|
278
|
+
}
|
|
279
|
+
stop(): Promise<void> {
|
|
280
|
+
return Promise.resolve();
|
|
281
|
+
}
|
|
282
|
+
sendRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
283
|
+
_subProtocol: SubProtocol,
|
|
284
|
+
_request: InstanceType<SubProtocolMap[SubProtocol]['request']>,
|
|
285
|
+
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined> {
|
|
286
|
+
return Promise.resolve(undefined);
|
|
287
|
+
}
|
|
288
|
+
sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
289
|
+
_subProtocol: SubProtocol,
|
|
290
|
+
_requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
|
|
291
|
+
_pinnedPeer: PeerId | undefined,
|
|
292
|
+
_timeoutMs?: number,
|
|
293
|
+
_maxPeers?: number,
|
|
294
|
+
_maxRetryAttempts?: number,
|
|
295
|
+
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
|
|
296
|
+
return Promise.resolve([]);
|
|
297
|
+
}
|
|
298
|
+
public sendRequestToPeer(
|
|
299
|
+
_peerId: PeerId,
|
|
300
|
+
_subProtocol: ReqRespSubProtocol,
|
|
301
|
+
_payload: Buffer,
|
|
302
|
+
_dialTimeout?: number,
|
|
303
|
+
): Promise<ReqRespResponse> {
|
|
304
|
+
return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Get dummy connection sampler for testing
|
|
309
|
+
*/
|
|
310
|
+
getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
|
|
311
|
+
return {
|
|
312
|
+
getPeerListSortedByConnectionCountAsc: () => [],
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
addSubProtocol(
|
|
317
|
+
_subProtocol: ReqRespSubProtocol,
|
|
318
|
+
_handler: ReqRespSubProtocolHandler,
|
|
319
|
+
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
320
|
+
): Promise<void> {
|
|
321
|
+
return Promise.resolve();
|
|
322
|
+
}
|
|
323
|
+
}
|
package/src/services/encoding.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Taken from lodestar: https://github.com/ChainSafe/lodestar
|
|
2
|
-
import { sha256 } from '@aztec/foundation/crypto';
|
|
2
|
+
import { sha256 } from '@aztec/foundation/crypto/sha256';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { MAX_TX_SIZE_KB, TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
|
|
3
5
|
|
|
4
6
|
import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
|
|
5
7
|
import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
|
|
@@ -49,31 +51,105 @@ export function getMsgIdFn(message: Message) {
|
|
|
49
51
|
return sha256(Buffer.concat(vec)).subarray(0, 20);
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
const DefaultMaxSizesKb: Record<TopicType, number> = {
|
|
55
|
+
[TopicType.tx]: MAX_TX_SIZE_KB,
|
|
56
|
+
// An attestation has roughly 30 fields, which is 1kb, so 5x is plenty
|
|
57
|
+
[TopicType.checkpoint_attestation]: 5,
|
|
58
|
+
// Proposals may carry some tx objects, so we allow a larger size capped at 10mb
|
|
59
|
+
// Note this may not be enough for carrying all tx objects in a block
|
|
60
|
+
[TopicType.block_proposal]: 1024 * 10,
|
|
61
|
+
// TODO(palla/mbps): Check size for checkpoint proposal
|
|
62
|
+
[TopicType.checkpoint_proposal]: 1024 * 10,
|
|
63
|
+
};
|
|
64
|
+
|
|
52
65
|
/**
|
|
53
66
|
* Snappy transform for libp2p gossipsub
|
|
54
67
|
*/
|
|
55
68
|
export class SnappyTransform implements DataTransform {
|
|
69
|
+
constructor(
|
|
70
|
+
private maxSizesKb: Record<TopicType, number> = DefaultMaxSizesKb,
|
|
71
|
+
private defaultMaxSizeKb: number = 10 * 1024,
|
|
72
|
+
private logger = createLogger('p2p:snappy-transform'),
|
|
73
|
+
) {}
|
|
74
|
+
|
|
56
75
|
// Topic string included to satisfy DataTransform interface
|
|
57
|
-
inboundTransform(
|
|
58
|
-
|
|
76
|
+
inboundTransform(topicStr: string, data: Uint8Array): Uint8Array {
|
|
77
|
+
const topic = getTopicFromString(topicStr);
|
|
78
|
+
return this.inboundTransformData(Buffer.from(data), topic);
|
|
59
79
|
}
|
|
60
80
|
|
|
61
|
-
public
|
|
81
|
+
public inboundTransformData(data: Buffer, topic?: TopicType): Buffer {
|
|
62
82
|
if (data.length === 0) {
|
|
63
83
|
return data;
|
|
64
84
|
}
|
|
85
|
+
const maxSizeKb = this.maxSizesKb[topic!] ?? this.defaultMaxSizeKb;
|
|
86
|
+
const { decompressedSize } = readSnappyPreamble(data);
|
|
87
|
+
if (decompressedSize > maxSizeKb * 1024) {
|
|
88
|
+
this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
|
|
89
|
+
throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
|
|
90
|
+
}
|
|
91
|
+
|
|
65
92
|
return Buffer.from(uncompressSync(data, { asBuffer: true }));
|
|
66
93
|
}
|
|
67
94
|
|
|
68
95
|
// Topic string included to satisfy DataTransform interface
|
|
69
96
|
outboundTransform(_topicStr: string, data: Uint8Array): Uint8Array {
|
|
70
|
-
return this.
|
|
97
|
+
return this.outboundTransformData(Buffer.from(data));
|
|
71
98
|
}
|
|
72
99
|
|
|
73
|
-
public
|
|
100
|
+
public outboundTransformData(data: Buffer): Buffer {
|
|
74
101
|
if (data.length === 0) {
|
|
75
102
|
return data;
|
|
76
103
|
}
|
|
77
104
|
return Buffer.from(compressSync(data));
|
|
78
105
|
}
|
|
79
106
|
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Reads the Snappy preamble from compressed data and returns the expected decompressed size.
|
|
110
|
+
*
|
|
111
|
+
* The Snappy format starts with a little-endian varint encoding the uncompressed length.
|
|
112
|
+
* Varints consist of a series of bytes where:
|
|
113
|
+
* - Lower 7 bits contain data
|
|
114
|
+
* - Upper bit (0x80) is set if more bytes follow
|
|
115
|
+
*
|
|
116
|
+
* @param data - The compressed data starting with the Snappy preamble
|
|
117
|
+
* @returns Object containing the decompressed size and the number of bytes read from the preamble
|
|
118
|
+
* @throws Error if the data is too short or the varint is invalid
|
|
119
|
+
*/
|
|
120
|
+
export function readSnappyPreamble(data: Uint8Array): { decompressedSize: number; bytesRead: number } {
|
|
121
|
+
if (data.length === 0) {
|
|
122
|
+
throw new Error('Cannot read preamble from empty data');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
let result = 0;
|
|
126
|
+
let shift = 0;
|
|
127
|
+
let bytesRead = 0;
|
|
128
|
+
|
|
129
|
+
// Maximum varint length for 32-bit value is 5 bytes
|
|
130
|
+
// (7 bits per byte, so 5 bytes = 35 bits, enough for 2^32 - 1)
|
|
131
|
+
const maxBytes = 5;
|
|
132
|
+
|
|
133
|
+
for (let i = 0; i < Math.min(data.length, maxBytes); i++) {
|
|
134
|
+
const byte = data[i];
|
|
135
|
+
bytesRead++;
|
|
136
|
+
|
|
137
|
+
// Extract lower 7 bits and add to result with appropriate shift
|
|
138
|
+
// Use >>> 0 to convert to unsigned 32-bit integer to avoid sign issues
|
|
139
|
+
result = (result | ((byte & 0x7f) << shift)) >>> 0;
|
|
140
|
+
|
|
141
|
+
// If upper bit is not set, we're done
|
|
142
|
+
if ((byte & 0x80) === 0) {
|
|
143
|
+
return { decompressedSize: result, bytesRead };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
shift += 7;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// If we get here, either we ran out of data or the varint is too long
|
|
150
|
+
if (bytesRead >= maxBytes) {
|
|
151
|
+
throw new Error('Varint is too long (max 5 bytes for 32-bit value)');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
throw new Error('Incomplete varint: data ended before varint termination');
|
|
155
|
+
}
|