@aztec/p2p 0.0.1-commit.001888fc → 0.0.1-commit.017a351
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +4 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +28 -23
- package/dest/client/interface.d.ts +14 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +13 -9
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +78 -20
- package/dest/config.d.ts +135 -99
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +62 -7
- 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/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- 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 +99 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -199
- 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 +181 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- 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 +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +17 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- 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 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +8 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
- 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 +75 -84
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- 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 +56 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
- 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/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- 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 +2 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +36 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +6 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +21 -11
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
- 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/phases_validator.js +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- 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/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +11 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +12 -16
- package/dest/services/encoding.d.ts +5 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -1
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +36 -46
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +272 -262
- 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 +38 -10
- 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 +4 -14
- 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 +78 -100
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +4 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +7 -7
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- 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 +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- 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/block_txs/bitvector.d.ts +4 -3
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
- 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 +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +41 -214
- package/dest/services/service.d.ts +9 -12
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- 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 +0 -2
- 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/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +23 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +44 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +12 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +38 -14
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +83 -38
- package/dest/testbench/worker_client_manager.d.ts +10 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +51 -9
- package/dest/util.d.ts +11 -6
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +15 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +48 -23
- package/src/client/interface.ts +15 -11
- package/src/client/p2p_client.ts +91 -41
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +123 -6
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +316 -241
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +5 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +7 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +75 -90
- package/src/msg_validators/attestation_validator/README.md +1 -1
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
- package/src/msg_validators/clock_tolerance.ts +73 -3
- package/src/msg_validators/proposal_validator/README.md +4 -4
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
- package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
- package/src/msg_validators/tx_validator/README.md +11 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +44 -1
- package/src/msg_validators/tx_validator/factory.ts +25 -7
- package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +1 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +14 -39
- package/src/services/encoding.ts +9 -1
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +302 -300
- package/src/services/peer-manager/peer_manager.ts +44 -10
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +0 -14
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +74 -112
- package/src/services/reqresp/batch-tx-requester/interface.ts +11 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +6 -6
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
- 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 +45 -260
- package/src/services/service.ts +12 -28
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +3 -0
- package/src/test-helpers/mock-pubsub.ts +46 -60
- package/src/test-helpers/reqresp-nodes.ts +12 -22
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +50 -28
- package/src/testbench/p2p_client_testbench_worker.ts +87 -54
- package/src/testbench/worker_client_manager.ts +59 -20
- package/src/util.ts +32 -17
- package/src/versioning.ts +3 -33
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
- 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 -123
- 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 -402
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- 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/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -327
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- 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 -163
- 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 -321
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -387
- package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -53,9 +53,11 @@ import type { TxMetaData } from '../../mem_pools/tx_pool_v2/tx_metadata.js';
|
|
|
53
53
|
import { AggregateTxValidator } from './aggregate_tx_validator.js';
|
|
54
54
|
import { ArchiveCache } from './archive_cache.js';
|
|
55
55
|
import { type ArchiveSource, BlockHeaderTxValidator } from './block_header_validator.js';
|
|
56
|
+
import { CachedTxValidator } from './cached_tx_validator.js';
|
|
57
|
+
import { ContractInstanceTxValidator } from './contract_instance_validator.js';
|
|
56
58
|
import { DataTxValidator } from './data_validator.js';
|
|
57
59
|
import { DoubleSpendTxValidator, type NullifierSource } from './double_spend_validator.js';
|
|
58
|
-
import { GasLimitsValidator, GasTxValidator } from './gas_validator.js';
|
|
60
|
+
import { GasLimitsValidator, GasTxValidator, MaxFeePerGasValidator } from './gas_validator.js';
|
|
59
61
|
import { MetadataTxValidator } from './metadata_validator.js';
|
|
60
62
|
import { NullifierCache } from './nullifier_cache.js';
|
|
61
63
|
import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
|
|
@@ -63,6 +65,7 @@ import { SizeTxValidator } from './size_validator.js';
|
|
|
63
65
|
import { TimestampTxValidator } from './timestamp_validator.js';
|
|
64
66
|
import { TxPermittedValidator } from './tx_permitted_validator.js';
|
|
65
67
|
import { TxProofValidator } from './tx_proof_validator.js';
|
|
68
|
+
import { TxValidationCache } from './tx_validation_cache.js';
|
|
66
69
|
|
|
67
70
|
/**
|
|
68
71
|
* A validator paired with a peer penalty severity.
|
|
@@ -167,6 +170,10 @@ export function createFirstStageTxValidationsForGossipedTransactions(
|
|
|
167
170
|
validator: new DataTxValidator(bindings),
|
|
168
171
|
severity: PeerErrorSeverity.MidToleranceError,
|
|
169
172
|
},
|
|
173
|
+
contractInstanceValidator: {
|
|
174
|
+
validator: new ContractInstanceTxValidator(bindings),
|
|
175
|
+
severity: PeerErrorSeverity.MidToleranceError,
|
|
176
|
+
},
|
|
170
177
|
};
|
|
171
178
|
}
|
|
172
179
|
|
|
@@ -205,8 +212,9 @@ function createTxValidatorForMinimumTxIntegrityChecks(
|
|
|
205
212
|
rollupVersion: number;
|
|
206
213
|
},
|
|
207
214
|
bindings?: LoggerBindings,
|
|
215
|
+
cache?: TxValidationCache,
|
|
208
216
|
): TxValidator {
|
|
209
|
-
|
|
217
|
+
const aggregate = new AggregateTxValidator(
|
|
210
218
|
new MetadataTxValidator(
|
|
211
219
|
{
|
|
212
220
|
l1ChainId: new Fr(l1ChainId),
|
|
@@ -217,9 +225,14 @@ function createTxValidatorForMinimumTxIntegrityChecks(
|
|
|
217
225
|
bindings,
|
|
218
226
|
),
|
|
219
227
|
new SizeTxValidator(bindings),
|
|
220
|
-
new DataTxValidator(bindings),
|
|
221
|
-
new
|
|
228
|
+
CachedTxValidator.new(new DataTxValidator(bindings), cache),
|
|
229
|
+
new ContractInstanceTxValidator(bindings),
|
|
230
|
+
CachedTxValidator.new(new TxProofValidator(verifier, bindings), cache),
|
|
222
231
|
);
|
|
232
|
+
|
|
233
|
+
// This validator is not state-dependent so we can cache it.
|
|
234
|
+
const identifier = Symbol('TxValidatorForMinimumTxIntegrityChecks');
|
|
235
|
+
return CachedTxValidator.newWithIdentifier(aggregate, identifier, cache);
|
|
223
236
|
}
|
|
224
237
|
|
|
225
238
|
/**
|
|
@@ -228,7 +241,7 @@ function createTxValidatorForMinimumTxIntegrityChecks(
|
|
|
228
241
|
* are invalid against current state. State-dependent checks happen when the tx
|
|
229
242
|
* enters the pending pool or during block building.
|
|
230
243
|
*/
|
|
231
|
-
export function
|
|
244
|
+
export function createTxValidatorForOnDemandReceivedTxs(
|
|
232
245
|
verifier: ClientProtocolCircuitVerifier,
|
|
233
246
|
{
|
|
234
247
|
l1ChainId,
|
|
@@ -238,8 +251,9 @@ export function createTxValidatorForReqResponseReceivedTxs(
|
|
|
238
251
|
rollupVersion: number;
|
|
239
252
|
},
|
|
240
253
|
bindings?: LoggerBindings,
|
|
254
|
+
cache?: TxValidationCache,
|
|
241
255
|
): TxValidator {
|
|
242
|
-
return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings);
|
|
256
|
+
return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache);
|
|
243
257
|
}
|
|
244
258
|
|
|
245
259
|
/**
|
|
@@ -257,8 +271,9 @@ export function createTxValidatorForBlockProposalReceivedTxs(
|
|
|
257
271
|
rollupVersion: number;
|
|
258
272
|
},
|
|
259
273
|
bindings?: LoggerBindings,
|
|
274
|
+
cache?: TxValidationCache,
|
|
260
275
|
): TxValidator {
|
|
261
|
-
return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings);
|
|
276
|
+
return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache);
|
|
262
277
|
}
|
|
263
278
|
|
|
264
279
|
/**
|
|
@@ -321,6 +336,7 @@ export function createTxValidatorForAcceptingTxsOverRPC(
|
|
|
321
336
|
new BlockHeaderTxValidator(new ArchiveCache(db), bindings),
|
|
322
337
|
new DoubleSpendTxValidator(new NullifierCache(db), bindings),
|
|
323
338
|
new DataTxValidator(bindings),
|
|
339
|
+
new ContractInstanceTxValidator(bindings),
|
|
324
340
|
];
|
|
325
341
|
|
|
326
342
|
if (!skipFeeEnforcement) {
|
|
@@ -416,6 +432,7 @@ export async function createTxValidatorForTransactionsEnteringPendingTxPool(
|
|
|
416
432
|
timestamp: bigint,
|
|
417
433
|
blockNumber: BlockNumber,
|
|
418
434
|
gasLimitOpts: { rollupManaLimit?: number; maxBlockL2Gas?: number; maxBlockDAGas?: number },
|
|
435
|
+
gasFees: GasFees,
|
|
419
436
|
bindings?: LoggerBindings,
|
|
420
437
|
): Promise<TxValidator<TxMetaData>> {
|
|
421
438
|
await worldStateSynchronizer.syncImmediate();
|
|
@@ -433,6 +450,7 @@ export async function createTxValidatorForTransactionsEnteringPendingTxPool(
|
|
|
433
450
|
};
|
|
434
451
|
return new AggregateTxValidator<TxMetaData>(
|
|
435
452
|
new GasLimitsValidator<TxMetaData>({ ...gasLimitOpts, bindings }),
|
|
453
|
+
new MaxFeePerGasValidator<TxMetaData>(gasFees, bindings),
|
|
436
454
|
new TimestampTxValidator<TxMetaData>({ timestamp, blockNumber }, bindings),
|
|
437
455
|
new DoubleSpendTxValidator<TxMetaData>(nullifierSource, bindings),
|
|
438
456
|
new BlockHeaderTxValidator<TxMetaData>(archiveSource, bindings),
|
|
@@ -36,6 +36,18 @@ export interface HasGasLimitData {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/** Structural interface for types that carry max fee per gas data, used by {@link MaxFeePerGasValidator}. */
|
|
40
|
+
export interface HasMaxFeePerGasData {
|
|
41
|
+
txHash: { toString(): string };
|
|
42
|
+
data: {
|
|
43
|
+
constants: {
|
|
44
|
+
txContext: {
|
|
45
|
+
gasSettings: { maxFeesPerGas: GasFees };
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
39
51
|
/**
|
|
40
52
|
* Validates that a transaction's gas limits are within acceptable bounds.
|
|
41
53
|
*
|
|
@@ -87,7 +99,12 @@ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidato
|
|
|
87
99
|
gasLimits,
|
|
88
100
|
minGasLimits,
|
|
89
101
|
});
|
|
90
|
-
return {
|
|
102
|
+
return {
|
|
103
|
+
result: 'invalid',
|
|
104
|
+
reason: [
|
|
105
|
+
`${TX_ERROR_INSUFFICIENT_GAS_LIMIT} (required=da:${minGasLimits.daGas},l2:${minGasLimits.l2Gas} got=da:${gasLimits.daGas},l2:${gasLimits.l2Gas})`,
|
|
106
|
+
],
|
|
107
|
+
};
|
|
91
108
|
}
|
|
92
109
|
|
|
93
110
|
if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
|
|
@@ -97,7 +114,10 @@ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidato
|
|
|
97
114
|
rollupManaLimit: this.#rollupManaLimit,
|
|
98
115
|
maxBlockL2Gas: this.#maxBlockL2Gas,
|
|
99
116
|
});
|
|
100
|
-
return {
|
|
117
|
+
return {
|
|
118
|
+
result: 'invalid',
|
|
119
|
+
reason: [`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (l2Gas=${gasLimits.l2Gas}, max=${this.#effectiveMaxL2Gas})`],
|
|
120
|
+
};
|
|
101
121
|
}
|
|
102
122
|
|
|
103
123
|
if (gasLimits.daGas > this.#effectiveMaxDAGas) {
|
|
@@ -106,22 +126,70 @@ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidato
|
|
|
106
126
|
effectiveMaxDAGas: this.#effectiveMaxDAGas,
|
|
107
127
|
maxBlockDAGas: this.#maxBlockDAGas,
|
|
108
128
|
});
|
|
109
|
-
return {
|
|
129
|
+
return {
|
|
130
|
+
result: 'invalid',
|
|
131
|
+
reason: [`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (daGas=${gasLimits.daGas}, max=${this.#effectiveMaxDAGas})`],
|
|
132
|
+
};
|
|
110
133
|
}
|
|
111
134
|
|
|
112
135
|
return { result: 'valid' };
|
|
113
136
|
}
|
|
114
137
|
}
|
|
115
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Validates that a transaction's max fee per gas meets the current block's gas fees.
|
|
141
|
+
*
|
|
142
|
+
* Rejects transactions whose maxFeesPerGas is below the current block's gas fees
|
|
143
|
+
* on either dimension (DA or L2). This is a cheap, stateless check.
|
|
144
|
+
*
|
|
145
|
+
* Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
|
|
146
|
+
* (used during pending pool migration).
|
|
147
|
+
*
|
|
148
|
+
* Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
|
|
149
|
+
*/
|
|
150
|
+
export class MaxFeePerGasValidator<T extends HasMaxFeePerGasData> implements TxValidator<T> {
|
|
151
|
+
#log: Logger;
|
|
152
|
+
#gasFees: GasFees;
|
|
153
|
+
|
|
154
|
+
constructor(gasFees: GasFees, bindings?: LoggerBindings) {
|
|
155
|
+
this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
|
|
156
|
+
this.#gasFees = gasFees;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
validateTx(tx: T): Promise<TxValidationResult> {
|
|
160
|
+
return Promise.resolve(this.validateMaxFeePerGas(tx));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** Checks maxFeesPerGas >= current block gas fees on both dimensions. */
|
|
164
|
+
validateMaxFeePerGas(tx: T): TxValidationResult {
|
|
165
|
+
const maxFeesPerGas = tx.data.constants.txContext.gasSettings.maxFeesPerGas;
|
|
166
|
+
const notEnoughMaxFees =
|
|
167
|
+
maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
168
|
+
|
|
169
|
+
if (notEnoughMaxFees) {
|
|
170
|
+
this.#log.verbose(`Rejecting transaction ${tx.txHash.toString()} due to insufficient fee per gas`, {
|
|
171
|
+
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
172
|
+
currentGasFees: this.#gasFees.toInspect(),
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
result: 'invalid',
|
|
176
|
+
reason: [
|
|
177
|
+
`${TX_ERROR_INSUFFICIENT_FEE_PER_GAS} (maxFee=da:${maxFeesPerGas.feePerDaGas},l2:${maxFeesPerGas.feePerL2Gas} required=da:${this.#gasFees.feePerDaGas},l2:${this.#gasFees.feePerL2Gas})`,
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
return { result: 'valid' };
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
116
185
|
/**
|
|
117
186
|
* Validates that a transaction can pay its gas fees.
|
|
118
187
|
*
|
|
119
188
|
* Runs three checks in order:
|
|
120
189
|
* 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
|
|
121
190
|
* out of bounds.
|
|
122
|
-
* 2. **Max fee per gas** —
|
|
123
|
-
* the current block's gas fees.
|
|
124
|
-
* become eligible in a later block with lower fees.
|
|
191
|
+
* 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
|
|
192
|
+
* the current block's gas fees.
|
|
125
193
|
* 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
|
|
126
194
|
* adds any pending claim from a setup-phase `_increase_public_balance` call, and
|
|
127
195
|
* rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
|
|
@@ -155,37 +223,15 @@ export class GasTxValidator implements TxValidator<Tx> {
|
|
|
155
223
|
bindings: this.bindings,
|
|
156
224
|
}).validateGasLimit(tx);
|
|
157
225
|
if (gasLimitValidation.result === 'invalid') {
|
|
158
|
-
return
|
|
226
|
+
return gasLimitValidation;
|
|
159
227
|
}
|
|
160
|
-
|
|
161
|
-
|
|
228
|
+
const maxFeeValidation = new MaxFeePerGasValidator(this.#gasFees, this.bindings).validateMaxFeePerGas(tx);
|
|
229
|
+
if (maxFeeValidation.result === 'invalid') {
|
|
230
|
+
return maxFeeValidation;
|
|
162
231
|
}
|
|
163
232
|
return await this.validateTxFee(tx);
|
|
164
233
|
}
|
|
165
234
|
|
|
166
|
-
/**
|
|
167
|
-
* Check whether the tx's max fees are valid for the current block, and skip if not.
|
|
168
|
-
* We skip instead of invalidating since the tx may become eligible later.
|
|
169
|
-
* Note that circuits check max fees even if fee payer is unset, so we
|
|
170
|
-
* keep this validation even if the tx does not pay fees.
|
|
171
|
-
*/
|
|
172
|
-
#shouldSkip(tx: Tx): boolean {
|
|
173
|
-
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
174
|
-
|
|
175
|
-
// Skip the tx if its max fees are not enough for the current block's gas fees.
|
|
176
|
-
const maxFeesPerGas = gasSettings.maxFeesPerGas;
|
|
177
|
-
const notEnoughMaxFees =
|
|
178
|
-
maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
179
|
-
|
|
180
|
-
if (notEnoughMaxFees) {
|
|
181
|
-
this.#log.verbose(`Skipping transaction ${tx.getTxHash().toString()} due to insufficient fee per gas`, {
|
|
182
|
-
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
183
|
-
currentGasFees: this.#gasFees.toInspect(),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return notEnoughMaxFees;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
235
|
/**
|
|
190
236
|
* Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
|
|
191
237
|
* Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
|
|
@@ -212,7 +258,10 @@ export class GasTxValidator implements TxValidator<Tx> {
|
|
|
212
258
|
balance,
|
|
213
259
|
feeLimit,
|
|
214
260
|
});
|
|
215
|
-
return {
|
|
261
|
+
return {
|
|
262
|
+
result: 'invalid',
|
|
263
|
+
reason: [`${TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE} (required=${feeLimit}, available=${balance})`],
|
|
264
|
+
};
|
|
216
265
|
}
|
|
217
266
|
return { result: 'valid' };
|
|
218
267
|
}
|
|
@@ -40,7 +40,7 @@ export class PhasesTxValidator implements TxValidator<Tx> {
|
|
|
40
40
|
// which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
|
|
41
41
|
// which is what we're trying to do as part of the current txs.
|
|
42
42
|
// We only need to create/revert checkpoint here because of this addNewContracts call.
|
|
43
|
-
|
|
43
|
+
this.contractsDB.addNewContracts(tx);
|
|
44
44
|
|
|
45
45
|
if (!tx.data.forPublic) {
|
|
46
46
|
this.#log.debug(
|
|
@@ -3,6 +3,8 @@ import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/ser
|
|
|
3
3
|
import { TX_ERROR_INVALID_PROOF, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
5
|
export class TxProofValidator implements TxValidator<Tx> {
|
|
6
|
+
public readonly identifier: symbol = Symbol('TxProofValidator');
|
|
7
|
+
|
|
6
8
|
#log: Logger;
|
|
7
9
|
|
|
8
10
|
constructor(
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { LruMap } from '@aztec/foundation/collection';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
|
|
4
|
+
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Minimal interface consumed by {@link CachedTxValidator}.
|
|
9
|
+
* Keeping the dependency on an interface lets callers (and tests) substitute any cache implementation.
|
|
10
|
+
*/
|
|
11
|
+
export interface ITxValidationCache {
|
|
12
|
+
/** Returns the cached promise if present, otherwise calls `validate`, caches its promise, and returns it. */
|
|
13
|
+
getOrValidate(
|
|
14
|
+
validatorSymbol: symbol,
|
|
15
|
+
tx: Tx,
|
|
16
|
+
validate: () => Promise<TxValidationResult>,
|
|
17
|
+
): Promise<TxValidationResult>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
|
|
22
|
+
*
|
|
23
|
+
* The cache key is composed from the validator symbol and tx hash, ensuring results are
|
|
24
|
+
* scoped to the specific validator that produced them.
|
|
25
|
+
*
|
|
26
|
+
* Promises are stored before they are awaited, so concurrent calls for the same pair share
|
|
27
|
+
* a single in-flight validation rather than launching duplicate work.
|
|
28
|
+
*
|
|
29
|
+
* Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
|
|
30
|
+
*/
|
|
31
|
+
export class TxValidationCache implements ITxValidationCache {
|
|
32
|
+
#log: Logger;
|
|
33
|
+
|
|
34
|
+
private readonly entries: LruMap<string, Promise<TxValidationResult>>;
|
|
35
|
+
// Remember hashes for known Tx object references to skip rehashing on subsequent lookups.
|
|
36
|
+
// WeakMap holds keys weakly, so an entry doesn't keep the Tx alive once nothing else references it.
|
|
37
|
+
private readonly txHashesCache: WeakMap<Tx, string> = new WeakMap();
|
|
38
|
+
|
|
39
|
+
constructor(maxSize: number) {
|
|
40
|
+
this.entries = new LruMap(maxSize);
|
|
41
|
+
this.#log = createLogger('p2p:tx_validation_cache');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Computes the cache key scoping a validation result to a specific validator and tx.
|
|
46
|
+
*
|
|
47
|
+
* @param validatorSymbol - The symbol of the validator.
|
|
48
|
+
* @param tx - The tx to compute the key for.
|
|
49
|
+
* @returns The cache key.
|
|
50
|
+
*
|
|
51
|
+
* Note: the key should NOT use the tx.hash because it can't be trusted at this point.
|
|
52
|
+
*/
|
|
53
|
+
public key(validatorSymbol: symbol, tx: Tx): string {
|
|
54
|
+
// Serializing the tx dominates cost (~5 ms). If we have already hashed this object, skip toBuffer + hash.
|
|
55
|
+
let hash = this.txHashesCache.get(tx);
|
|
56
|
+
if (hash === undefined) {
|
|
57
|
+
hash = createHash('sha256').update(tx.toBuffer()).digest('hex');
|
|
58
|
+
this.txHashesCache.set(tx, hash);
|
|
59
|
+
}
|
|
60
|
+
return `${Symbol.keyFor(validatorSymbol) ?? validatorSymbol.toString()}:${hash}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */
|
|
64
|
+
public get(key: string): Promise<TxValidationResult> | undefined {
|
|
65
|
+
return this.entries.get(key);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */
|
|
69
|
+
public set(key: string, result: Promise<TxValidationResult>): void {
|
|
70
|
+
this.entries.set(key, result);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Removes the cached validation promise for the given key. */
|
|
74
|
+
public delete(key: string): void {
|
|
75
|
+
this.entries.delete(key);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Returns the cached promise if present, otherwise calls `validate`, stores its promise
|
|
80
|
+
* immediately (before awaiting), and returns it.
|
|
81
|
+
*/
|
|
82
|
+
public getOrValidate(
|
|
83
|
+
validatorSymbol: symbol,
|
|
84
|
+
tx: Tx,
|
|
85
|
+
validate: () => Promise<TxValidationResult>,
|
|
86
|
+
): Promise<TxValidationResult> {
|
|
87
|
+
const key = this.key(validatorSymbol, tx);
|
|
88
|
+
const cached = this.get(key);
|
|
89
|
+
if (cached !== undefined) {
|
|
90
|
+
this.#log.debug('Returning cached tx validation result', {
|
|
91
|
+
validator: validatorSymbol.toString(),
|
|
92
|
+
txHash: tx.txHash.toString(),
|
|
93
|
+
key: key,
|
|
94
|
+
});
|
|
95
|
+
return cached;
|
|
96
|
+
}
|
|
97
|
+
const promise = validate();
|
|
98
|
+
this.set(key, promise);
|
|
99
|
+
return promise;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -28,8 +28,6 @@ export class AztecDatastore implements Datastore {
|
|
|
28
28
|
#memoryDatastore: Map<string, MemoryItem>;
|
|
29
29
|
#dbDatastore: AztecAsyncMap<string, Uint8Array>;
|
|
30
30
|
|
|
31
|
-
#batchOps: BatchOp[] = [];
|
|
32
|
-
|
|
33
31
|
private maxMemoryItems: number;
|
|
34
32
|
|
|
35
33
|
constructor(db: AztecAsyncKVStore, { maxMemoryItems } = { maxMemoryItems: 50 }) {
|
|
@@ -92,23 +90,17 @@ export class AztecDatastore implements Datastore {
|
|
|
92
90
|
}
|
|
93
91
|
|
|
94
92
|
batch(): Batch {
|
|
93
|
+
const ops: BatchOp[] = [];
|
|
95
94
|
return {
|
|
96
95
|
put: (key, value) => {
|
|
97
|
-
|
|
98
|
-
type: 'put',
|
|
99
|
-
key,
|
|
100
|
-
value,
|
|
101
|
-
});
|
|
96
|
+
ops.push({ type: 'put', key, value });
|
|
102
97
|
},
|
|
103
98
|
delete: key => {
|
|
104
|
-
|
|
105
|
-
type: 'del',
|
|
106
|
-
key,
|
|
107
|
-
});
|
|
99
|
+
ops.push({ type: 'del', key });
|
|
108
100
|
},
|
|
109
101
|
commit: async () => {
|
|
110
102
|
await this.#db.transactionAsync(async () => {
|
|
111
|
-
for (const op of
|
|
103
|
+
for (const op of ops) {
|
|
112
104
|
if (op.type === 'put' && op.value) {
|
|
113
105
|
await this.put(op.key, op.value);
|
|
114
106
|
} else if (op.type === 'del') {
|
|
@@ -116,7 +108,7 @@ export class AztecDatastore implements Datastore {
|
|
|
116
108
|
}
|
|
117
109
|
}
|
|
118
110
|
});
|
|
119
|
-
|
|
111
|
+
ops.length = 0;
|
|
120
112
|
},
|
|
121
113
|
};
|
|
122
114
|
}
|
|
@@ -38,6 +38,8 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
38
38
|
|
|
39
39
|
private startTime = 0;
|
|
40
40
|
|
|
41
|
+
private currentIp: string | undefined;
|
|
42
|
+
|
|
41
43
|
private handlers = {
|
|
42
44
|
onMultiaddrUpdated: this.onMultiaddrUpdated.bind(this),
|
|
43
45
|
onDiscovered: this.onDiscovered.bind(this),
|
|
@@ -53,8 +55,10 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
53
55
|
configOverrides: Partial<IDiscv5CreateOptions> = {},
|
|
54
56
|
) {
|
|
55
57
|
super();
|
|
58
|
+
|
|
56
59
|
const { p2pIp, p2pPort, p2pBroadcastPort, bootstrapNodes, trustedPeers, privatePeers } = config;
|
|
57
60
|
|
|
61
|
+
this.currentIp = p2pIp;
|
|
58
62
|
this.bootstrapNodeEnrs = bootstrapNodes.map(x => ENR.decodeTxt(x));
|
|
59
63
|
const privatePeerEnrs = new Set(privatePeers);
|
|
60
64
|
this.trustedPeerEnrs = trustedPeers.filter(x => !privatePeerEnrs.has(x)).map(x => ENR.decodeTxt(x));
|
|
@@ -96,7 +100,8 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
96
100
|
lookupTimeout: 2000,
|
|
97
101
|
requestTimeout: 2000,
|
|
98
102
|
allowUnverifiedSessions: true,
|
|
99
|
-
enrUpdate: !p2pIp
|
|
103
|
+
enrUpdate: config.queryForIp || !p2pIp,
|
|
104
|
+
pingInterval: config.queryForIp ? 10_000 : 300_000,
|
|
100
105
|
...configOverrides.config,
|
|
101
106
|
},
|
|
102
107
|
metricsRegistry,
|
|
@@ -127,11 +132,34 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
private onMultiaddrUpdated(m: Multiaddr) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
const newIp = m.nodeAddress().address;
|
|
136
|
+
const previousIp = this.currentIp;
|
|
137
|
+
|
|
138
|
+
if (newIp === previousIp) {
|
|
139
|
+
this.logger.debug('Discv5 confirmed current IP (no change)', { ip: newIp });
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const multiAddrTcp = multiaddr(convertToMultiaddr(newIp, this.config.p2pBroadcastPort!, 'tcp'));
|
|
133
144
|
this.enr.setLocationMultiaddr(multiAddrTcp);
|
|
134
|
-
this.
|
|
145
|
+
this.currentIp = newIp;
|
|
146
|
+
|
|
147
|
+
if (previousIp) {
|
|
148
|
+
this.logger.info('IP address changed, ENR updated', {
|
|
149
|
+
previousIp,
|
|
150
|
+
newIp,
|
|
151
|
+
multiaddr: multiAddrTcp.toString(),
|
|
152
|
+
enr: this.enr.encodeTxt(),
|
|
153
|
+
});
|
|
154
|
+
} else {
|
|
155
|
+
this.logger.info('Initial IP discovered via discv5, ENR updated', {
|
|
156
|
+
ip: newIp,
|
|
157
|
+
multiaddr: multiAddrTcp.toString(),
|
|
158
|
+
enr: this.enr.encodeTxt(),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
this.emit('ip:changed', newIp);
|
|
135
163
|
}
|
|
136
164
|
|
|
137
165
|
public async start(): Promise<void> {
|
|
@@ -142,12 +170,17 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
142
170
|
await this.discv5.start();
|
|
143
171
|
this.startTime = Date.now();
|
|
144
172
|
|
|
173
|
+
const enrUpdateEnabled = this.config.queryForIp || !this.config.p2pIp;
|
|
145
174
|
this.logger.info(`DiscV5 service started`, {
|
|
146
175
|
nodeId: this.enr.nodeId,
|
|
147
176
|
peerId: this.peerId,
|
|
148
177
|
enrUdp: await this.enr.getFullMultiaddr('udp'),
|
|
149
178
|
enrTcp: await this.enr.getFullMultiaddr('tcp'),
|
|
150
179
|
versions: this.versions,
|
|
180
|
+
enrUpdateEnabled,
|
|
181
|
+
queryForIp: this.config.queryForIp,
|
|
182
|
+
configuredIp: this.config.p2pIp ?? 'none',
|
|
183
|
+
pingIntervalMs: this.config.queryForIp ? 10_000 : 300_000,
|
|
151
184
|
});
|
|
152
185
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
153
186
|
|
|
@@ -18,13 +18,13 @@ import type {
|
|
|
18
18
|
ReqRespSubProtocol,
|
|
19
19
|
ReqRespSubProtocolHandler,
|
|
20
20
|
ReqRespSubProtocolHandlers,
|
|
21
|
-
ReqRespSubProtocolValidators,
|
|
22
21
|
SubProtocolMap,
|
|
23
22
|
} from './reqresp/interface.js';
|
|
24
23
|
import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
|
|
25
24
|
import { ReqRespStatus } from './reqresp/status.js';
|
|
26
25
|
import {
|
|
27
26
|
type P2PBlockReceivedCallback,
|
|
27
|
+
type P2PCheckpointAttestationCallback,
|
|
28
28
|
type P2PCheckpointReceivedCallback,
|
|
29
29
|
type P2PDuplicateAttestationCallback,
|
|
30
30
|
type P2PDuplicateProposalCallback,
|
|
@@ -37,6 +37,8 @@ import {
|
|
|
37
37
|
* A dummy implementation of the P2P Service.
|
|
38
38
|
*/
|
|
39
39
|
export class DummyP2PService implements P2PService {
|
|
40
|
+
private allNodesCheckpointReceivedCallback?: P2PCheckpointReceivedCallback;
|
|
41
|
+
|
|
40
42
|
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
41
43
|
|
|
42
44
|
/** Returns an empty array for peers. */
|
|
@@ -86,7 +88,10 @@ export class DummyP2PService implements P2PService {
|
|
|
86
88
|
/**
|
|
87
89
|
* Register a callback into the validator client for when a checkpoint proposal is received
|
|
88
90
|
*/
|
|
89
|
-
public
|
|
91
|
+
public registerValidatorCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
|
|
92
|
+
public registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback) {
|
|
93
|
+
this.allNodesCheckpointReceivedCallback = callback;
|
|
94
|
+
}
|
|
90
95
|
|
|
91
96
|
/**
|
|
92
97
|
* Register a callback for when a duplicate proposal is detected
|
|
@@ -98,6 +103,8 @@ export class DummyP2PService implements P2PService {
|
|
|
98
103
|
*/
|
|
99
104
|
public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {}
|
|
100
105
|
|
|
106
|
+
public registerCheckpointAttestationCallback(_callback: P2PCheckpointAttestationCallback): void {}
|
|
107
|
+
|
|
101
108
|
/**
|
|
102
109
|
* Sends a request to a peer.
|
|
103
110
|
* @param _protocol - The protocol to send the request on.
|
|
@@ -111,19 +118,6 @@ export class DummyP2PService implements P2PService {
|
|
|
111
118
|
return Promise.resolve(undefined);
|
|
112
119
|
}
|
|
113
120
|
|
|
114
|
-
/**
|
|
115
|
-
* Sends a batch request to a peer.
|
|
116
|
-
* @param _protocol - The protocol to send the request on.
|
|
117
|
-
* @param _requests - The requests to send.
|
|
118
|
-
* @returns The responses from the peer, otherwise undefined.
|
|
119
|
-
*/
|
|
120
|
-
public sendBatchRequest<Protocol extends ReqRespSubProtocol>(
|
|
121
|
-
_protocol: Protocol,
|
|
122
|
-
_requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
|
|
123
|
-
): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]> {
|
|
124
|
-
return Promise.resolve([]);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
121
|
public sendRequestToPeer(
|
|
128
122
|
_peerId: PeerId,
|
|
129
123
|
_subProtocol: ReqRespSubProtocol,
|
|
@@ -145,11 +139,7 @@ export class DummyP2PService implements P2PService {
|
|
|
145
139
|
return Promise.resolve();
|
|
146
140
|
}
|
|
147
141
|
|
|
148
|
-
addReqRespSubProtocol(
|
|
149
|
-
_subProtocol: ReqRespSubProtocol,
|
|
150
|
-
_handler: ReqRespSubProtocolHandler,
|
|
151
|
-
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
152
|
-
): Promise<void> {
|
|
142
|
+
addReqRespSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
153
143
|
return Promise.resolve();
|
|
154
144
|
}
|
|
155
145
|
|
|
@@ -178,6 +168,7 @@ export class DummyP2PService implements P2PService {
|
|
|
178
168
|
peerScoring: {
|
|
179
169
|
penalizePeer: (_peerId, _penalty) => {},
|
|
180
170
|
},
|
|
171
|
+
validateRequestedBlockTxsConsistency: () => Promise.resolve(true),
|
|
181
172
|
};
|
|
182
173
|
}
|
|
183
174
|
}
|
|
@@ -282,10 +273,8 @@ export class DummyPeerManager implements PeerManagerInterface {
|
|
|
282
273
|
|
|
283
274
|
export class DummyReqResp implements ReqRespInterface {
|
|
284
275
|
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
_subProtocolValidators: ReqRespSubProtocolValidators,
|
|
288
|
-
): Promise<void> {
|
|
276
|
+
setShouldRejectPeer(): void {}
|
|
277
|
+
start(_subProtocolHandlers: ReqRespSubProtocolHandlers): Promise<void> {
|
|
289
278
|
return Promise.resolve();
|
|
290
279
|
}
|
|
291
280
|
stop(): Promise<void> {
|
|
@@ -297,16 +286,6 @@ export class DummyReqResp implements ReqRespInterface {
|
|
|
297
286
|
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined> {
|
|
298
287
|
return Promise.resolve(undefined);
|
|
299
288
|
}
|
|
300
|
-
sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
301
|
-
_subProtocol: SubProtocol,
|
|
302
|
-
_requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
|
|
303
|
-
_pinnedPeer: PeerId | undefined,
|
|
304
|
-
_timeoutMs?: number,
|
|
305
|
-
_maxPeers?: number,
|
|
306
|
-
_maxRetryAttempts?: number,
|
|
307
|
-
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
|
|
308
|
-
return Promise.resolve([]);
|
|
309
|
-
}
|
|
310
289
|
public sendRequestToPeer(
|
|
311
290
|
_peerId: PeerId,
|
|
312
291
|
_subProtocol: ReqRespSubProtocol,
|
|
@@ -325,11 +304,7 @@ export class DummyReqResp implements ReqRespInterface {
|
|
|
325
304
|
};
|
|
326
305
|
}
|
|
327
306
|
|
|
328
|
-
addSubProtocol(
|
|
329
|
-
_subProtocol: ReqRespSubProtocol,
|
|
330
|
-
_handler: ReqRespSubProtocolHandler,
|
|
331
|
-
_validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
332
|
-
): Promise<void> {
|
|
307
|
+
addSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
333
308
|
return Promise.resolve();
|
|
334
309
|
}
|
|
335
310
|
}
|