@aztec/p2p 0.0.1-commit.d6f2b3f94 → 0.0.1-commit.d939eb5aa
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/README.md +129 -3
- package/dest/client/factory.d.ts +7 -7
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +37 -30
- package/dest/client/interface.d.ts +22 -20
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +11 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +92 -104
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +20 -10
- package/dest/config.d.ts +128 -96
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +97 -38
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +10 -6
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +21 -9
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
- package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +2 -2
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +16 -14
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +30 -13
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +91 -20
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +7 -3
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +7 -5
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +9 -7
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +14 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +28 -10
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +5 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +56 -15
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +113 -20
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +12 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +50 -45
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +17 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +14 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +319 -147
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +54 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- 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 +35 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +247 -60
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +112 -43
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
- 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 +5 -5
- package/dest/services/dummy_service.d.ts +8 -5
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +10 -5
- package/dest/services/encoding.d.ts +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +16 -9
- package/dest/services/gossipsub/topic_score_params.d.ts +30 -7
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +53 -14
- package/dest/services/libp2p/libp2p_service.d.ts +29 -36
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +224 -197
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +39 -11
- 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 +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +12 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +83 -106
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +14 -9
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -11
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- 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 +0 -10
- package/dest/services/reqresp/reqresp.d.ts +4 -2
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +30 -12
- package/dest/services/service.d.ts +9 -4
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +13 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +30 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +65 -75
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +38 -29
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +126 -77
- package/dest/services/tx_collection/file_store_tx_source.d.ts +17 -6
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +53 -10
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +2 -1
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -7
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +5 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +17 -12
- package/dest/services/tx_collection/tx_collection.d.ts +9 -9
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +26 -10
- package/dest/services/tx_collection/tx_collection_sink.d.ts +6 -5
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +13 -22
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +26 -7
- package/dest/services/tx_file_store/tx_file_store.d.ts +3 -2
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +9 -6
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +4 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +1 -2
- package/dest/test-helpers/mock-pubsub.d.ts +14 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +43 -12
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +3 -4
- package/dest/test-helpers/testbench-utils.d.ts +8 -3
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +30 -4
- package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +78 -26
- package/dest/testbench/worker_client_manager.d.ts +10 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +55 -3
- package/dest/util.d.ts +3 -3
- package/dest/util.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +68 -48
- package/src/client/interface.ts +26 -21
- package/src/client/p2p_client.ts +102 -135
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +33 -14
- package/src/config.ts +146 -44
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +25 -12
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
- package/src/mem_pools/attestation_pool/mocks.ts +2 -1
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +17 -13
- package/src/mem_pools/tx_pool_v2/README.md +52 -28
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +109 -22
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +7 -3
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +4 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +5 -5
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +8 -8
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -9
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
- package/src/mem_pools/tx_pool_v2/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +30 -10
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +164 -28
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +58 -45
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +34 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +353 -143
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
- package/src/msg_validators/clock_tolerance.ts +72 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
- package/src/msg_validators/tx_validator/README.md +119 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -3
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +42 -1
- package/src/msg_validators/tx_validator/factory.ts +394 -78
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +145 -33
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/msg_validators/tx_validator/timestamp_validator.ts +7 -7
- package/src/services/data_store.ts +5 -13
- package/src/services/dummy_service.ts +13 -7
- package/src/services/encoding.ts +16 -8
- package/src/services/gossipsub/README.md +29 -14
- package/src/services/gossipsub/topic_score_params.ts +85 -17
- package/src/services/libp2p/libp2p_service.ts +240 -225
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +45 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +229 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +79 -112
- package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -11
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +40 -13
- package/src/services/service.ts +17 -3
- package/src/services/tx_collection/config.ts +42 -0
- package/src/services/tx_collection/fast_tx_collection.ts +71 -76
- package/src/services/tx_collection/file_store_tx_collection.ts +143 -93
- package/src/services/tx_collection/file_store_tx_source.ts +69 -10
- package/src/services/tx_collection/instrumentation.ts +7 -1
- package/src/services/tx_collection/proposal_tx_collector.ts +9 -13
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/slow_tx_collection.ts +17 -13
- package/src/services/tx_collection/tx_collection.ts +46 -17
- package/src/services/tx_collection/tx_collection_sink.ts +15 -29
- package/src/services/tx_collection/tx_source.ts +28 -8
- package/src/services/tx_file_store/tx_file_store.ts +6 -4
- package/src/services/tx_provider.ts +2 -2
- package/src/test-helpers/make-test-p2p-clients.ts +1 -3
- package/src/test-helpers/mock-pubsub.ts +44 -11
- package/src/test-helpers/reqresp-nodes.ts +5 -8
- package/src/test-helpers/testbench-utils.ts +41 -6
- package/src/testbench/p2p_client_testbench_worker.ts +89 -29
- package/src/testbench/worker_client_manager.ts +68 -6
- package/src/util.ts +8 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
- package/src/services/reqresp/protocols/block.ts +0 -37
|
@@ -2,14 +2,15 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { elapsed } from '@aztec/foundation/timer';
|
|
3
3
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
4
4
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
5
|
-
import type { BlockHeader, Tx
|
|
5
|
+
import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
6
6
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
7
7
|
|
|
8
8
|
import EventEmitter from 'node:events';
|
|
9
9
|
|
|
10
|
-
import type { TxPoolV2, TxPoolV2Events } from '../../mem_pools/
|
|
10
|
+
import type { TxPoolV2, TxPoolV2Events } from '../../mem_pools/index.js';
|
|
11
11
|
import { TxCollectionInstrumentation } from './instrumentation.js';
|
|
12
12
|
import type { CollectionMethod } from './tx_collection.js';
|
|
13
|
+
import type { TxSourceCollectionResult } from './tx_source.js';
|
|
13
14
|
|
|
14
15
|
/** Context determining how collected txs should be added to the pool. */
|
|
15
16
|
export type TxAddContext = { type: 'proposal'; blockHeader: BlockHeader } | { type: 'mined'; block: L2Block };
|
|
@@ -31,52 +32,37 @@ export class TxCollectionSink extends (EventEmitter as new () => TypedEventEmitt
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
public async collect(
|
|
34
|
-
collectValidTxsFn: (
|
|
35
|
-
requested:
|
|
35
|
+
collectValidTxsFn: () => Promise<TxSourceCollectionResult>,
|
|
36
|
+
requested: string[],
|
|
36
37
|
info: Record<string, any> & { description: string; method: CollectionMethod },
|
|
37
38
|
context: TxAddContext,
|
|
38
39
|
) {
|
|
39
40
|
this.log.trace(`Requesting ${requested.length} txs via ${info.description}`, {
|
|
40
41
|
...info,
|
|
41
|
-
requestedTxs: requested
|
|
42
|
+
requestedTxs: requested,
|
|
42
43
|
});
|
|
43
44
|
|
|
44
45
|
// Execute collection function and measure the time taken, catching any errors.
|
|
45
|
-
const [duration,
|
|
46
|
+
const [duration, { validTxs, invalidTxHashes }] = await elapsed(async () => {
|
|
46
47
|
try {
|
|
47
|
-
|
|
48
|
-
return response.filter(tx => tx !== undefined);
|
|
48
|
+
return await collectValidTxsFn();
|
|
49
49
|
} catch (err) {
|
|
50
50
|
this.log.error(`Error collecting txs via ${info.description}`, err, {
|
|
51
51
|
...info,
|
|
52
|
-
requestedTxs: requested
|
|
52
|
+
requestedTxs: requested,
|
|
53
53
|
});
|
|
54
|
-
return [] as Tx[];
|
|
54
|
+
return { validTxs: [] as Tx[], invalidTxHashes: [] as string[] };
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
-
if (
|
|
58
|
+
if (validTxs.length === 0 && invalidTxHashes.length === 0) {
|
|
59
59
|
this.log.trace(`No txs found via ${info.description}`, {
|
|
60
60
|
...info,
|
|
61
|
-
requestedTxs: requested
|
|
61
|
+
requestedTxs: requested,
|
|
62
62
|
});
|
|
63
|
-
return { txs, requested, duration };
|
|
63
|
+
return { txs: validTxs, requested, duration };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
// Validate tx hashes for all collected txs from external sources
|
|
67
|
-
const validTxs: Tx[] = [];
|
|
68
|
-
const invalidTxHashes: string[] = [];
|
|
69
|
-
await Promise.all(
|
|
70
|
-
txs.map(async tx => {
|
|
71
|
-
const isValid = await tx.validateTxHash();
|
|
72
|
-
if (isValid) {
|
|
73
|
-
validTxs.push(tx);
|
|
74
|
-
} else {
|
|
75
|
-
invalidTxHashes.push(tx.getTxHash().toString());
|
|
76
|
-
}
|
|
77
|
-
}),
|
|
78
|
-
);
|
|
79
|
-
|
|
80
66
|
if (invalidTxHashes.length > 0) {
|
|
81
67
|
this.log.warn(`Rejecting ${invalidTxHashes.length} txs with invalid hashes from ${info.description}`, {
|
|
82
68
|
...info,
|
|
@@ -87,7 +73,7 @@ export class TxCollectionSink extends (EventEmitter as new () => TypedEventEmitt
|
|
|
87
73
|
if (validTxs.length === 0) {
|
|
88
74
|
this.log.trace(`No valid txs found via ${info.description} after validation`, {
|
|
89
75
|
...info,
|
|
90
|
-
requestedTxs: requested
|
|
76
|
+
requestedTxs: requested,
|
|
91
77
|
invalidTxHashes,
|
|
92
78
|
});
|
|
93
79
|
return { txs: [], requested, duration };
|
|
@@ -99,7 +85,7 @@ export class TxCollectionSink extends (EventEmitter as new () => TypedEventEmitt
|
|
|
99
85
|
...info,
|
|
100
86
|
duration,
|
|
101
87
|
txs: validTxs.map(t => t.getTxHash().toString()),
|
|
102
|
-
requestedTxs: requested
|
|
88
|
+
requestedTxs: requested,
|
|
103
89
|
rejectedCount: invalidTxHashes.length,
|
|
104
90
|
},
|
|
105
91
|
);
|
|
@@ -2,36 +2,56 @@ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
|
2
2
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
3
3
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
4
4
|
import { type AztecNode, createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
|
|
5
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
|
+
import type { Tx, TxHash, TxValidator } from '@aztec/stdlib/tx';
|
|
6
6
|
import { type ComponentsVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
7
7
|
import { makeTracedFetch } from '@aztec/telemetry-client';
|
|
8
8
|
|
|
9
|
+
export type TxSourceCollectionResult = { validTxs: Tx[]; invalidTxHashes: string[] };
|
|
10
|
+
|
|
9
11
|
export interface TxSource {
|
|
10
12
|
getInfo(): string;
|
|
11
|
-
getTxsByHash(txHashes: TxHash[]): Promise<
|
|
13
|
+
getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult>;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
export class NodeRpcTxSource implements TxSource {
|
|
15
17
|
constructor(
|
|
16
18
|
private readonly client: Pick<AztecNode, 'getTxsByHash'>,
|
|
19
|
+
private readonly txValidator: TxValidator,
|
|
17
20
|
private readonly info: string,
|
|
18
21
|
) {}
|
|
19
22
|
|
|
20
|
-
public static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource {
|
|
23
|
+
public static fromUrl(nodeUrl: string, txValidator: TxValidator, versions: ComponentsVersions): NodeRpcTxSource {
|
|
21
24
|
const client = createAztecNodeClient(nodeUrl, versions, makeTracedFetch([1, 2, 3], false));
|
|
22
|
-
return new NodeRpcTxSource(client, nodeUrl);
|
|
25
|
+
return new NodeRpcTxSource(client, txValidator, nodeUrl);
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
public getInfo() {
|
|
26
29
|
return this.info;
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
public getTxsByHash(txHashes: TxHash[]): Promise<
|
|
30
|
-
return this.client.getTxsByHash(txHashes);
|
|
32
|
+
public async getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult> {
|
|
33
|
+
return this.verifyTxs(await this.client.getTxsByHash(txHashes));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private async verifyTxs(txs: Tx[]): Promise<TxSourceCollectionResult> {
|
|
37
|
+
// Validate tx hashes for all collected txs from external sources
|
|
38
|
+
const validTxs: Tx[] = [];
|
|
39
|
+
const invalidTxHashes: string[] = [];
|
|
40
|
+
await Promise.all(
|
|
41
|
+
txs.map(async tx => {
|
|
42
|
+
const validation = await this.txValidator.validateTx(tx);
|
|
43
|
+
if (validation.result === 'valid') {
|
|
44
|
+
validTxs.push(tx);
|
|
45
|
+
} else {
|
|
46
|
+
invalidTxHashes.push(tx.getTxHash().toString());
|
|
47
|
+
}
|
|
48
|
+
}),
|
|
49
|
+
);
|
|
50
|
+
return { validTxs: validTxs, invalidTxHashes: invalidTxHashes };
|
|
31
51
|
}
|
|
32
52
|
}
|
|
33
53
|
|
|
34
|
-
export function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig) {
|
|
54
|
+
export function createNodeRpcTxSources(urls: string[], txValidator: TxValidator, chainConfig: ChainConfig) {
|
|
35
55
|
const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
|
|
36
|
-
return urls.map(url => NodeRpcTxSource.fromUrl(url, versions));
|
|
56
|
+
return urls.map(url => NodeRpcTxSource.fromUrl(url, txValidator, versions));
|
|
37
57
|
}
|
|
@@ -31,6 +31,7 @@ export class TxFileStore {
|
|
|
31
31
|
private readonly config: TxFileStoreConfig,
|
|
32
32
|
private readonly instrumentation: TxFileStoreInstrumentation,
|
|
33
33
|
private readonly log: Logger,
|
|
34
|
+
private readonly basePath: string,
|
|
34
35
|
) {
|
|
35
36
|
this.handleTxsAdded = (args: { txs: Tx[]; source?: string }) => {
|
|
36
37
|
this.enqueueTxs(args.txs);
|
|
@@ -50,6 +51,7 @@ export class TxFileStore {
|
|
|
50
51
|
static async create(
|
|
51
52
|
txPool: TxPoolV2,
|
|
52
53
|
config: TxFileStoreConfig,
|
|
54
|
+
basePath: string,
|
|
53
55
|
log: Logger = createLogger('p2p:tx_file_store'),
|
|
54
56
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
55
57
|
fileStoreOverride?: FileStore,
|
|
@@ -71,8 +73,8 @@ export class TxFileStore {
|
|
|
71
73
|
}
|
|
72
74
|
|
|
73
75
|
const instrumentation = new TxFileStoreInstrumentation(telemetry, 'TxFileStore');
|
|
74
|
-
log.info('Created tx file store', { url: config.txFileStoreUrl });
|
|
75
|
-
return new TxFileStore(fileStore, txPool, config, instrumentation, log);
|
|
76
|
+
log.info('Created tx file store', { url: config.txFileStoreUrl, basePath });
|
|
77
|
+
return new TxFileStore(fileStore, txPool, config, instrumentation, log, basePath);
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
/** Starts listening to TxPool events and uploading txs. */
|
|
@@ -122,7 +124,7 @@ export class TxFileStore {
|
|
|
122
124
|
|
|
123
125
|
private async uploadTx(tx: Tx): Promise<void> {
|
|
124
126
|
const txHash = tx.getTxHash().toString();
|
|
125
|
-
const path =
|
|
127
|
+
const path = `${this.basePath}/txs/${txHash}.bin`;
|
|
126
128
|
const timer = new Timer();
|
|
127
129
|
|
|
128
130
|
if (this.recentUploads.has(txHash)) {
|
|
@@ -144,7 +146,7 @@ export class TxFileStore {
|
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
await retry(
|
|
147
|
-
() => this.fileStore.save(path, tx.toBuffer(), { compress:
|
|
149
|
+
() => this.fileStore.save(path, tx.toBuffer(), { compress: true }),
|
|
148
150
|
`Uploading tx ${txHash}`,
|
|
149
151
|
makeBackoff([0.1, 0.5, 2]),
|
|
150
152
|
this.log,
|
|
@@ -25,7 +25,7 @@ export class TxProvider implements ITxProvider {
|
|
|
25
25
|
constructor(
|
|
26
26
|
private txCollection: TxCollection,
|
|
27
27
|
private txPool: TxPoolV2,
|
|
28
|
-
private
|
|
28
|
+
private blockProposalTransactionValidator: Pick<P2PClient, 'validateTxsReceivedInBlockProposal'>,
|
|
29
29
|
private log: Logger = createLogger('p2p:tx-collector'),
|
|
30
30
|
client: TelemetryClient = getTelemetryClient(),
|
|
31
31
|
) {
|
|
@@ -227,7 +227,7 @@ export class TxProvider implements ITxProvider {
|
|
|
227
227
|
if (txs.length === 0) {
|
|
228
228
|
return;
|
|
229
229
|
}
|
|
230
|
-
await this.
|
|
230
|
+
await this.blockProposalTransactionValidator.validateTxsReceivedInBlockProposal(txs);
|
|
231
231
|
await this.txPool.addProtectedTxs(txs, blockHeader);
|
|
232
232
|
}
|
|
233
233
|
}
|
|
@@ -4,10 +4,9 @@ import { SecretValue } from '@aztec/foundation/config';
|
|
|
4
4
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
6
6
|
import { sleep } from '@aztec/foundation/sleep';
|
|
7
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
8
7
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
9
8
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
10
|
-
import {
|
|
9
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
11
10
|
|
|
12
11
|
import { createP2PClient } from '../client/index.js';
|
|
13
12
|
import type { P2PClient } from '../client/p2p_client.js';
|
|
@@ -98,7 +97,6 @@ export async function makeTestP2PClient(
|
|
|
98
97
|
const kvStore = await openTmpStore('test');
|
|
99
98
|
|
|
100
99
|
const client = await createP2PClient(
|
|
101
|
-
P2PClientType.Full,
|
|
102
100
|
config,
|
|
103
101
|
l2BlockSource,
|
|
104
102
|
proofVerifier,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
4
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
5
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
5
6
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
6
7
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
7
|
-
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
8
8
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
9
9
|
|
|
10
10
|
import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
|
|
@@ -42,11 +42,10 @@ type GossipSubService = PubSubLibp2p['services']['pubsub'];
|
|
|
42
42
|
* Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
|
|
43
43
|
* Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
|
|
44
44
|
*/
|
|
45
|
-
export function getMockPubSubP2PServiceFactory
|
|
45
|
+
export function getMockPubSubP2PServiceFactory(
|
|
46
46
|
network: MockGossipSubNetwork,
|
|
47
|
-
): (...args: Parameters<(typeof LibP2PService
|
|
47
|
+
): (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService> {
|
|
48
48
|
return (
|
|
49
|
-
clientType: P2PClientType,
|
|
50
49
|
config: P2PConfig,
|
|
51
50
|
peerId: PeerId,
|
|
52
51
|
deps: {
|
|
@@ -66,8 +65,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
|
|
|
66
65
|
const peerManager = new DummyPeerManager(peerId, network);
|
|
67
66
|
const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
|
|
68
67
|
const peerDiscoveryService = new DummyPeerDiscoveryService();
|
|
69
|
-
const service = new LibP2PService
|
|
70
|
-
clientType as T,
|
|
68
|
+
const service = new LibP2PService(
|
|
71
69
|
config,
|
|
72
70
|
libp2p,
|
|
73
71
|
peerDiscoveryService,
|
|
@@ -103,6 +101,7 @@ class MockReqResp implements ReqRespInterface {
|
|
|
103
101
|
}
|
|
104
102
|
|
|
105
103
|
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
104
|
+
setShouldRejectPeer(): void {}
|
|
106
105
|
|
|
107
106
|
start(
|
|
108
107
|
subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
|
|
@@ -141,6 +140,11 @@ class MockReqResp implements ReqRespInterface {
|
|
|
141
140
|
const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
|
|
142
141
|
const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
|
|
143
142
|
const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
|
|
143
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
144
|
+
|
|
145
|
+
if (delayMs > 0) {
|
|
146
|
+
await sleep(delayMs);
|
|
147
|
+
}
|
|
144
148
|
|
|
145
149
|
for (const request of requests) {
|
|
146
150
|
const requestBuffer = request.toBuffer();
|
|
@@ -177,7 +181,12 @@ class MockReqResp implements ReqRespInterface {
|
|
|
177
181
|
return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
|
|
178
182
|
}
|
|
179
183
|
try {
|
|
184
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
185
|
+
if (delayMs > 0) {
|
|
186
|
+
await sleep(delayMs);
|
|
187
|
+
}
|
|
180
188
|
const data = await handler(this.peerId, payload);
|
|
189
|
+
|
|
181
190
|
return { status: ReqRespStatus.SUCCESS, data };
|
|
182
191
|
} catch {
|
|
183
192
|
return { status: ReqRespStatus.FAILURE };
|
|
@@ -245,10 +254,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
245
254
|
score: (_peerId: PeerIdStr) => 0,
|
|
246
255
|
};
|
|
247
256
|
|
|
248
|
-
publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
257
|
+
async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
249
258
|
this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
|
|
250
|
-
this.network.publishToPeers(topic, data, this.peerId);
|
|
251
|
-
return
|
|
259
|
+
await this.network.publishToPeers(topic, data, this.peerId);
|
|
260
|
+
return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
|
|
252
261
|
}
|
|
253
262
|
|
|
254
263
|
receive(msg: GossipsubMessage) {
|
|
@@ -270,11 +279,22 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
270
279
|
{ msgId, propagationSource, acceptance },
|
|
271
280
|
);
|
|
272
281
|
}
|
|
282
|
+
|
|
283
|
+
getMeshPeers(topic?: TopicStr): PeerIdStr[] {
|
|
284
|
+
if (topic && !this.subscribedTopics.has(topic)) {
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
return this.network
|
|
288
|
+
.getPeers()
|
|
289
|
+
.filter(peer => !this.peerId.equals(peer))
|
|
290
|
+
.map(peer => peer.toString());
|
|
291
|
+
}
|
|
273
292
|
}
|
|
274
293
|
|
|
275
294
|
/**
|
|
276
295
|
* Mock gossip sub network used for testing.
|
|
277
|
-
* All instances of MockGossipSubService connected to the same network
|
|
296
|
+
* All instances of MockGossipSubService connected to the same network receive the same messages,
|
|
297
|
+
* optionally delayed by a configurable propagation time.
|
|
278
298
|
*/
|
|
279
299
|
export class MockGossipSubNetwork {
|
|
280
300
|
private peers: MockGossipSubService[] = [];
|
|
@@ -283,6 +303,15 @@ export class MockGossipSubNetwork {
|
|
|
283
303
|
|
|
284
304
|
private logger = createLogger('p2p:test:mock-gossipsub-network');
|
|
285
305
|
|
|
306
|
+
constructor(
|
|
307
|
+
/** Artificial propagation delay in milliseconds applied to each message delivery. */
|
|
308
|
+
private propagationDelayMs: number = 0,
|
|
309
|
+
) {}
|
|
310
|
+
|
|
311
|
+
public getPropagationDelayMs(): number {
|
|
312
|
+
return this.propagationDelayMs;
|
|
313
|
+
}
|
|
314
|
+
|
|
286
315
|
public getPeers(): PeerId[] {
|
|
287
316
|
return this.peers.map(peer => peer.peerId);
|
|
288
317
|
}
|
|
@@ -299,7 +328,7 @@ export class MockGossipSubNetwork {
|
|
|
299
328
|
return this.reqRespPeers;
|
|
300
329
|
}
|
|
301
330
|
|
|
302
|
-
public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
|
|
331
|
+
public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
|
|
303
332
|
const msgId = (this.nextMsgId++).toString();
|
|
304
333
|
this.logger.debug(`Network is distributing message on topic ${topic}`, {
|
|
305
334
|
topic,
|
|
@@ -308,6 +337,10 @@ export class MockGossipSubNetwork {
|
|
|
308
337
|
msgId,
|
|
309
338
|
});
|
|
310
339
|
|
|
340
|
+
if (this.propagationDelayMs > 0) {
|
|
341
|
+
await sleep(this.propagationDelayMs);
|
|
342
|
+
}
|
|
343
|
+
|
|
311
344
|
const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
|
|
312
345
|
for (const peer of this.peers) {
|
|
313
346
|
if (peer.subscribedTopics.has(topic)) {
|
|
@@ -2,7 +2,6 @@ import type { EpochCache } from '@aztec/epoch-cache';
|
|
|
2
2
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
3
|
import { SecretValue } from '@aztec/foundation/config';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
5
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
6
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
8
7
|
import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
|
|
@@ -12,7 +11,7 @@ import type {
|
|
|
12
11
|
IVCProofVerificationResult,
|
|
13
12
|
WorldStateSynchronizer,
|
|
14
13
|
} from '@aztec/stdlib/interfaces/server';
|
|
15
|
-
import type {
|
|
14
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
16
15
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
17
16
|
import { compressComponentVersions } from '@aztec/stdlib/versioning';
|
|
18
17
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -107,8 +106,7 @@ export async function createLibp2pNode(
|
|
|
107
106
|
*
|
|
108
107
|
*
|
|
109
108
|
*/
|
|
110
|
-
export async function createTestLibP2PService
|
|
111
|
-
clientType: T,
|
|
109
|
+
export async function createTestLibP2PService(
|
|
112
110
|
boostrapAddrs: string[] = [],
|
|
113
111
|
archiver: L2BlockSource & ContractDataSource,
|
|
114
112
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
@@ -155,12 +153,13 @@ export async function createTestLibP2PService<T extends P2PClientType>(
|
|
|
155
153
|
epochCache,
|
|
156
154
|
);
|
|
157
155
|
|
|
156
|
+
reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
|
|
157
|
+
|
|
158
158
|
p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
|
|
159
159
|
p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
|
|
160
160
|
peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
161
161
|
|
|
162
|
-
return new LibP2PService
|
|
163
|
-
clientType,
|
|
162
|
+
return new LibP2PService(
|
|
164
163
|
config,
|
|
165
164
|
p2pNode as PubSubLibp2p,
|
|
166
165
|
discoveryService,
|
|
@@ -190,7 +189,6 @@ export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
|
|
|
190
189
|
[ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
|
|
191
190
|
[ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
|
|
192
191
|
[ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
|
|
193
|
-
[ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
|
|
194
192
|
[ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
|
|
195
193
|
[ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
|
|
196
194
|
};
|
|
@@ -202,7 +200,6 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
|
|
|
202
200
|
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
203
201
|
[ReqRespSubProtocol.TX]: noopValidator,
|
|
204
202
|
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
205
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator,
|
|
206
203
|
[ReqRespSubProtocol.AUTH]: noopValidator,
|
|
207
204
|
[ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
|
|
208
205
|
};
|
|
@@ -59,7 +59,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
59
59
|
|
|
60
60
|
// === Core Operations (TxPoolV2) ===
|
|
61
61
|
|
|
62
|
-
addPendingTxs(txs: Tx[], opts?: { source?: string }): Promise<AddTxsResult> {
|
|
62
|
+
addPendingTxs(txs: Tx[], opts?: { source?: string; feeComparisonOnly?: boolean }): Promise<AddTxsResult> {
|
|
63
63
|
const accepted: TxHash[] = [];
|
|
64
64
|
const newTxs: Tx[] = [];
|
|
65
65
|
for (const tx of txs) {
|
|
@@ -76,7 +76,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
76
76
|
return Promise.resolve({ accepted, ignored: [], rejected: [] });
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'
|
|
79
|
+
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
|
|
80
80
|
const key = tx.getTxHash().toString();
|
|
81
81
|
if (this.txsByHash.has(key)) {
|
|
82
82
|
return Promise.resolve('ignored');
|
|
@@ -123,7 +123,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
123
123
|
return Promise.resolve();
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
handlePrunedBlocks(_latestBlock: L2BlockId): Promise<void> {
|
|
126
|
+
handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
|
|
127
127
|
return Promise.resolve();
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -163,6 +163,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
|
|
|
163
163
|
return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
+
getEligiblePendingTxHashes(): Promise<TxHash[]> {
|
|
167
|
+
return this.getPendingTxHashes();
|
|
168
|
+
}
|
|
169
|
+
|
|
166
170
|
getPendingTxCount(): Promise<number> {
|
|
167
171
|
return Promise.resolve(this.txsByHash.size);
|
|
168
172
|
}
|
|
@@ -252,6 +256,10 @@ export class InMemoryAttestationPool {
|
|
|
252
256
|
return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
|
|
253
257
|
}
|
|
254
258
|
|
|
259
|
+
hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean> {
|
|
260
|
+
return Promise.resolve(false);
|
|
261
|
+
}
|
|
262
|
+
|
|
255
263
|
isEmpty(): Promise<boolean> {
|
|
256
264
|
return Promise.resolve(this.proposals.size === 0);
|
|
257
265
|
}
|
|
@@ -265,17 +273,42 @@ export class InMemoryAttestationPool {
|
|
|
265
273
|
* Creates a mock EpochCache for testing.
|
|
266
274
|
*/
|
|
267
275
|
export function createMockEpochCache(): EpochCacheInterface {
|
|
268
|
-
|
|
276
|
+
const cache: EpochCacheInterface = {
|
|
269
277
|
getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
|
|
270
278
|
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
271
|
-
|
|
279
|
+
getSlotNow: () => SlotNumber.ZERO,
|
|
280
|
+
getTargetSlot: () => SlotNumber.ZERO,
|
|
281
|
+
getEpochNow: () => EpochNumber.ZERO,
|
|
282
|
+
getTargetEpoch: () => EpochNumber.ZERO,
|
|
283
|
+
getEpochAndSlotNow: () => ({
|
|
284
|
+
epoch: EpochNumber.ZERO,
|
|
285
|
+
slot: SlotNumber.ZERO,
|
|
286
|
+
ts: 0n,
|
|
287
|
+
nowMs: 0n,
|
|
288
|
+
}),
|
|
289
|
+
isProposerPipeliningEnabled: () => false,
|
|
290
|
+
pipeliningOffset: () => 0,
|
|
272
291
|
computeProposerIndex: () => 0n,
|
|
273
292
|
getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
293
|
+
getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
|
|
274
294
|
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
275
|
-
getEpochAndSlotInNextL1Slot: () => ({
|
|
295
|
+
getEpochAndSlotInNextL1Slot: () => ({
|
|
296
|
+
epoch: EpochNumber.ZERO,
|
|
297
|
+
slot: SlotNumber.ZERO,
|
|
298
|
+
ts: 0n,
|
|
299
|
+
nowSeconds: 0n,
|
|
300
|
+
}),
|
|
301
|
+
getTargetEpochAndSlotInNextL1Slot: () => ({
|
|
302
|
+
epoch: EpochNumber.ZERO,
|
|
303
|
+
slot: SlotNumber.ZERO,
|
|
304
|
+
ts: 0n,
|
|
305
|
+
nowSeconds: 0n,
|
|
306
|
+
}),
|
|
276
307
|
isInCommittee: () => Promise.resolve(false),
|
|
277
308
|
getRegisteredValidators: () => Promise.resolve([]),
|
|
278
309
|
filterInCommittee: () => Promise.resolve([]),
|
|
310
|
+
isEscapeHatchOpen: () => Promise.resolve(false),
|
|
311
|
+
isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
|
|
279
312
|
getL1Constants: () => ({
|
|
280
313
|
l1StartBlock: 0n,
|
|
281
314
|
l1GenesisTime: 0n,
|
|
@@ -284,8 +317,10 @@ export function createMockEpochCache(): EpochCacheInterface {
|
|
|
284
317
|
ethereumSlotDuration: 1,
|
|
285
318
|
proofSubmissionEpochs: 1,
|
|
286
319
|
targetCommitteeSize: 48,
|
|
320
|
+
rollupManaLimit: Number.MAX_SAFE_INTEGER,
|
|
287
321
|
}),
|
|
288
322
|
};
|
|
323
|
+
return cache;
|
|
289
324
|
}
|
|
290
325
|
|
|
291
326
|
/**
|