@aztec/p2p 0.0.1-commit.4d3c002 → 0.0.1-commit.4d9804df
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 +7 -6
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +4 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +33 -24
- package/dest/client/interface.d.ts +40 -10
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +32 -18
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +97 -51
- package/dest/config.d.ts +143 -107
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +72 -26
- package/dest/errors/reqresp.error.d.ts +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +270 -198
- 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 +218 -59
- 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/instrumentation.d.ts +9 -4
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +28 -9
- 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/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
- 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 +33 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -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 +8 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
- 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 +31 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
- 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 +19 -8
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
- 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 +208 -118
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
- 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/proposal_validator/block_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
- 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/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 +1 -0
- package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +29 -16
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
- 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 +2 -2
- 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 +13 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +117 -24
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +15 -17
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +13 -18
- package/dest/services/encoding.d.ts +19 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +25 -15
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- 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 +31 -38
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +268 -248
- package/dest/services/peer-manager/peer_manager.d.ts +15 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +59 -17
- package/dest/services/peer-manager/peer_scoring.d.ts +30 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +74 -3
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -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 +35 -44
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- 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 +15 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- 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_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 +3 -13
- 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 +59 -209
- package/dest/services/service.d.ts +21 -13
- 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/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/tx_collection.d.ts +35 -51
- 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 +1 -1
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +4 -1
- 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 +16 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +36 -43
- 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 +11 -17
- 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 +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +28 -13
- 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 +60 -27
- 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 -8
- package/dest/util.d.ts +7 -6
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +39 -10
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +49 -25
- package/src/client/interface.ts +35 -16
- package/src/client/p2p_client.ts +116 -85
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +146 -34
- package/src/errors/reqresp.error.ts +13 -19
- package/src/mem_pools/attestation_pool/attestation_pool.ts +325 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +238 -63
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/instrumentation.ts +18 -12
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
- 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 +31 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +233 -123
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
- package/src/msg_validators/proposal_validator/proposal_validator.ts +94 -12
- package/src/msg_validators/tx_validator/README.md +13 -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/data_validator.ts +2 -0
- package/src/msg_validators/tx_validator/factory.ts +37 -20
- package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
- 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 +124 -15
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +19 -43
- package/src/services/encoding.ts +28 -20
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +311 -271
- package/src/services/peer-manager/peer_manager.ts +63 -16
- package/src/services/peer-manager/peer_scoring.ts +81 -3
- package/src/services/reqresp/README.md +2 -37
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +39 -52
- package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +19 -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_limits.ts +3 -13
- package/src/services/reqresp/reqresp.ts +69 -252
- package/src/services/service.ts +25 -30
- 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/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/tx_collection.ts +330 -173
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +2 -1
- 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 +39 -60
- package/src/test-helpers/reqresp-nodes.ts +8 -22
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +35 -26
- package/src/testbench/p2p_client_testbench_worker.ts +68 -44
- package/src/testbench/worker_client_manager.ts +59 -19
- package/src/util.ts +34 -12
- 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 -315
- 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/msg_validators/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -38
- 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 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -311
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
- 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 -355
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
- package/src/msg_validators/clock_tolerance.ts +0 -52
- 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 -361
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -36,10 +36,11 @@ import { DatabasePublicStateSource, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
36
36
|
import { AggregateTxValidator } from './aggregate_tx_validator.js';
|
|
37
37
|
import { ArchiveCache } from './archive_cache.js';
|
|
38
38
|
import { BlockHeaderTxValidator } from './block_header_validator.js';
|
|
39
|
+
import { CachedTxValidator } from './cached_tx_validator.js';
|
|
39
40
|
import { ContractInstanceTxValidator } from './contract_instance_validator.js';
|
|
40
41
|
import { DataTxValidator } from './data_validator.js';
|
|
41
42
|
import { DoubleSpendTxValidator } from './double_spend_validator.js';
|
|
42
|
-
import { GasLimitsValidator, GasTxValidator } from './gas_validator.js';
|
|
43
|
+
import { GasLimitsValidator, GasTxValidator, MaxFeePerGasValidator } from './gas_validator.js';
|
|
43
44
|
import { MetadataTxValidator } from './metadata_validator.js';
|
|
44
45
|
import { NullifierCache } from './nullifier_cache.js';
|
|
45
46
|
import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
|
|
@@ -133,41 +134,44 @@ import { TxProofValidator } from './tx_proof_validator.js';
|
|
|
133
134
|
* Used for req/resp and block proposal txs. These txs must be accepted for block
|
|
134
135
|
* re-execution even though they may be invalid against current state — that is
|
|
135
136
|
* caught later by the block building validator.
|
|
136
|
-
*/ function createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings) {
|
|
137
|
-
|
|
137
|
+
*/ function createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
|
|
138
|
+
const aggregate = new AggregateTxValidator(new MetadataTxValidator({
|
|
138
139
|
l1ChainId: new Fr(l1ChainId),
|
|
139
140
|
rollupVersion: new Fr(rollupVersion),
|
|
140
141
|
protocolContractsHash,
|
|
141
142
|
vkTreeRoot: getVKTreeRoot()
|
|
142
|
-
}, bindings), new SizeTxValidator(bindings), new DataTxValidator(bindings), new ContractInstanceTxValidator(bindings), new TxProofValidator(verifier, bindings));
|
|
143
|
+
}, bindings), new SizeTxValidator(bindings), CachedTxValidator.new(new DataTxValidator(bindings), cache), new ContractInstanceTxValidator(bindings), CachedTxValidator.new(new TxProofValidator(verifier, bindings), cache));
|
|
144
|
+
// This validator is not state-dependent so we can cache it.
|
|
145
|
+
const identifier = Symbol('TxValidatorForMinimumTxIntegrityChecks');
|
|
146
|
+
return CachedTxValidator.newWithIdentifier(aggregate, identifier, cache);
|
|
143
147
|
}
|
|
144
148
|
/**
|
|
145
149
|
* Validators for txs received via req/resp or filestores.
|
|
146
150
|
* Checks well-formedness only — we must accept these for re-execution even if they
|
|
147
151
|
* are invalid against current state. State-dependent checks happen when the tx
|
|
148
152
|
* enters the pending pool or during block building.
|
|
149
|
-
*/ export function
|
|
153
|
+
*/ export function createTxValidatorForOnDemandReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
|
|
150
154
|
return createTxValidatorForMinimumTxIntegrityChecks(verifier, {
|
|
151
155
|
l1ChainId,
|
|
152
156
|
rollupVersion
|
|
153
|
-
}, bindings);
|
|
157
|
+
}, bindings, cache);
|
|
154
158
|
}
|
|
155
159
|
/**
|
|
156
160
|
* Validators for txs received in block proposals.
|
|
157
161
|
* Same as req/resp — well-formedness only. We must store these for block
|
|
158
162
|
* re-execution; their validity against state is checked during block building.
|
|
159
|
-
*/ export function createTxValidatorForBlockProposalReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings) {
|
|
163
|
+
*/ export function createTxValidatorForBlockProposalReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
|
|
160
164
|
return createTxValidatorForMinimumTxIntegrityChecks(verifier, {
|
|
161
165
|
l1ChainId,
|
|
162
166
|
rollupVersion
|
|
163
|
-
}, bindings);
|
|
167
|
+
}, bindings, cache);
|
|
164
168
|
}
|
|
165
169
|
/**
|
|
166
170
|
* Validators for unsolicited txs received over JSON-RPC (from a local wallet/PXE).
|
|
167
171
|
* Full validation — all state-dependent checks are run. Proof verification is optional
|
|
168
172
|
* (can be skipped for testing purposes). Fee enforcement is also optional (skipped for testing/dev).
|
|
169
173
|
* Called from `AztecNodeService.isValidTx()`.
|
|
170
|
-
*/ export function createTxValidatorForAcceptingTxsOverRPC(db, contractDataSource, verifier, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted,
|
|
174
|
+
*/ export function createTxValidatorForAcceptingTxsOverRPC(db, contractDataSource, verifier, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, isSimulation, timestamp, blockNumber, txsPermitted, maxTxL2Gas, maxTxDAGas }, bindings) {
|
|
171
175
|
const validators = [
|
|
172
176
|
new TxPermittedValidator(txsPermitted, bindings),
|
|
173
177
|
new TimestampTxValidator({
|
|
@@ -187,13 +191,22 @@ import { TxProofValidator } from './tx_proof_validator.js';
|
|
|
187
191
|
new DataTxValidator(bindings),
|
|
188
192
|
new ContractInstanceTxValidator(bindings)
|
|
189
193
|
];
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
// Declared gas-limit admission is not fee enforcement, so it runs even when fees are skipped, but it is
|
|
195
|
+
// skipped during simulation: gas estimation submits intentionally-inflated `forEstimation` limits (above
|
|
196
|
+
// the per-tx max) and the wallet clamps the real tx to the admission limit afterward, so enforcing the
|
|
197
|
+
// limit on the estimation tx would reject a valid estimation. The fee-balance check below stays behind
|
|
198
|
+
// `skipFeeEnforcement`, and GasTxValidator is constructed without the limit opts so it does not re-run
|
|
199
|
+
// this same check.
|
|
200
|
+
if (!isSimulation) {
|
|
201
|
+
validators.push(new GasLimitsValidator({
|
|
202
|
+
maxTxL2Gas,
|
|
203
|
+
maxTxDAGas,
|
|
204
|
+
bindings
|
|
195
205
|
}));
|
|
196
206
|
}
|
|
207
|
+
if (!skipFeeEnforcement) {
|
|
208
|
+
validators.push(new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings));
|
|
209
|
+
}
|
|
197
210
|
if (verifier) {
|
|
198
211
|
validators.push(new TxProofValidator(verifier, bindings));
|
|
199
212
|
}
|
|
@@ -234,7 +247,7 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
|
|
|
234
247
|
*
|
|
235
248
|
* Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
|
|
236
249
|
* Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
|
|
237
|
-
*/ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, gasLimitOpts, bindings) {
|
|
250
|
+
*/ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, gasLimitOpts, gasFees, bindings) {
|
|
238
251
|
await worldStateSynchronizer.syncImmediate();
|
|
239
252
|
const merkleTree = worldStateSynchronizer.getCommitted();
|
|
240
253
|
const nullifierSource = {
|
|
@@ -251,7 +264,7 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
|
|
|
251
264
|
return new AggregateTxValidator(new GasLimitsValidator({
|
|
252
265
|
...gasLimitOpts,
|
|
253
266
|
bindings
|
|
254
|
-
}), new TimestampTxValidator({
|
|
267
|
+
}), new MaxFeePerGasValidator(gasFees, bindings), new TimestampTxValidator({
|
|
255
268
|
timestamp,
|
|
256
269
|
blockNumber
|
|
257
270
|
}, bindings), new DoubleSpendTxValidator(nullifierSource, bindings), new BlockHeaderTxValidator(archiveSource, bindings), new AllowedSetupCallsMetaValidator(bindings));
|
|
@@ -19,6 +19,21 @@ export interface HasGasLimitData {
|
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
+
/** Structural interface for types that carry max fee per gas data, used by {@link MaxFeePerGasValidator}. */
|
|
23
|
+
export interface HasMaxFeePerGasData {
|
|
24
|
+
txHash: {
|
|
25
|
+
toString(): string;
|
|
26
|
+
};
|
|
27
|
+
data: {
|
|
28
|
+
constants: {
|
|
29
|
+
txContext: {
|
|
30
|
+
gasSettings: {
|
|
31
|
+
maxFeesPerGas: GasFees;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
}
|
|
22
37
|
/**
|
|
23
38
|
* Validates that a transaction's gas limits are within acceptable bounds.
|
|
24
39
|
*
|
|
@@ -33,25 +48,48 @@ export interface HasGasLimitData {
|
|
|
33
48
|
*/
|
|
34
49
|
export declare class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
|
|
35
50
|
#private;
|
|
51
|
+
/**
|
|
52
|
+
* @param maxTxL2Gas - The network admission limit on L2 gas a single tx may declare (the per-block mana
|
|
53
|
+
* allocation, see {@link computeNetworkTxGasLimits}). Defaults to the per-tx protocol maximum, so callers
|
|
54
|
+
* that pass nothing (e.g. block building) enforce only the protocol ceiling.
|
|
55
|
+
* @param maxTxDAGas - The network admission limit on DA gas a single tx may declare. Defaults to the
|
|
56
|
+
* per-tx protocol maximum {@link MAX_TX_DA_GAS}.
|
|
57
|
+
*/
|
|
36
58
|
constructor(opts?: {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
maxBlockDAGas?: number;
|
|
59
|
+
maxTxL2Gas?: number;
|
|
60
|
+
maxTxDAGas?: number;
|
|
40
61
|
bindings?: LoggerBindings;
|
|
41
62
|
});
|
|
42
63
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
43
64
|
/** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */
|
|
44
65
|
validateGasLimit(tx: T): TxValidationResult;
|
|
45
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates that a transaction's max fee per gas meets the current block's gas fees.
|
|
69
|
+
*
|
|
70
|
+
* Rejects transactions whose maxFeesPerGas is below the current block's gas fees
|
|
71
|
+
* on either dimension (DA or L2). This is a cheap, stateless check.
|
|
72
|
+
*
|
|
73
|
+
* Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
|
|
74
|
+
* (used during pending pool migration).
|
|
75
|
+
*
|
|
76
|
+
* Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
|
|
77
|
+
*/
|
|
78
|
+
export declare class MaxFeePerGasValidator<T extends HasMaxFeePerGasData> implements TxValidator<T> {
|
|
79
|
+
#private;
|
|
80
|
+
constructor(gasFees: GasFees, bindings?: LoggerBindings);
|
|
81
|
+
validateTx(tx: T): Promise<TxValidationResult>;
|
|
82
|
+
/** Checks maxFeesPerGas >= current block gas fees on both dimensions. */
|
|
83
|
+
validateMaxFeePerGas(tx: T): TxValidationResult;
|
|
84
|
+
}
|
|
46
85
|
/**
|
|
47
86
|
* Validates that a transaction can pay its gas fees.
|
|
48
87
|
*
|
|
49
88
|
* Runs three checks in order:
|
|
50
89
|
* 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
|
|
51
90
|
* out of bounds.
|
|
52
|
-
* 2. **Max fee per gas** —
|
|
53
|
-
* the current block's gas fees.
|
|
54
|
-
* become eligible in a later block with lower fees.
|
|
91
|
+
* 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
|
|
92
|
+
* the current block's gas fees.
|
|
55
93
|
* 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
|
|
56
94
|
* adds any pending claim from a setup-phase `_increase_public_balance` call, and
|
|
57
95
|
* rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
|
|
@@ -62,9 +100,8 @@ export declare class GasTxValidator implements TxValidator<Tx> {
|
|
|
62
100
|
#private;
|
|
63
101
|
private bindings?;
|
|
64
102
|
constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined, opts?: {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
maxBlockDAGas?: number;
|
|
103
|
+
maxTxL2Gas?: number;
|
|
104
|
+
maxTxDAGas?: number;
|
|
68
105
|
});
|
|
69
106
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
70
107
|
/**
|
|
@@ -73,4 +110,4 @@ export declare class GasTxValidator implements TxValidator<Tx> {
|
|
|
73
110
|
*/
|
|
74
111
|
validateTxFee(tx: Tx): Promise<TxValidationResult>;
|
|
75
112
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCw2R0FBNkc7QUFDN0csTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUU7WUFDVCxTQUFTLEVBQUU7Z0JBQ1QsV0FBVyxFQUFFO29CQUFFLGFBQWEsRUFBRSxPQUFPLENBQUE7aUJBQUUsQ0FBQzthQUN6QyxDQUFDO1NBQ0gsQ0FBQztLQUNILENBQUM7Q0FDSDtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gscUJBQWEsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLGVBQWUsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBS2xGOzs7Ozs7T0FNRztJQUNILFlBQVksSUFBSSxDQUFDLEVBQUU7UUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxRQUFRLENBQUMsRUFBRSxjQUFjLENBQUE7S0FBRSxFQU96RjtJQUVELFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUU3QztJQUVELG9GQUFvRjtJQUNwRixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQTJDMUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxxQkFBYSxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsbUJBQW1CLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl6RixZQUFZLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUd0RDtJQUVELFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUU3QztJQUVELHlFQUF5RTtJQUN6RSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQWtCOUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxxQkFBYSxjQUFlLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFXbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUpuQixZQUNFLGdCQUFnQixFQUFFLGlCQUFpQixFQUNuQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixPQUFPLEVBQUUsT0FBTyxFQUNSLFFBQVEsQ0FBQyw0QkFBZ0IsRUFDakMsSUFBSSxDQUFDLEVBQUU7UUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQU9wRDtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWFwRDtJQUVEOzs7T0FHRztJQUNVLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQTRCOUQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAEJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,SAAS,EAAE,GAAG,CAAA;iBAAE,CAAC;aACjC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;
|
|
1
|
+
{"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAEJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,SAAS,EAAE,GAAG,CAAA;iBAAE,CAAC;aACjC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,6GAA6G;AAC7G,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,aAAa,EAAE,OAAO,CAAA;iBAAE,CAAC;aACzC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAKlF;;;;;;OAMG;IACH,YAAY,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,EAOzF;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CA2C1C;CACF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIzF,YAAY,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGtD;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAkB9C;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAWlD,OAAO,CAAC,QAAQ,CAAC;IAJnB,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EACR,QAAQ,CAAC,4BAAgB,EACjC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAOpD;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAapD;IAED;;;OAGG;IACU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4B9D;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MAX_PROCESSABLE_L2_GAS, MAX_TX_DA_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
4
4
|
import { Gas } from '@aztec/stdlib/gas';
|
|
@@ -19,16 +19,19 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
19
19
|
#log;
|
|
20
20
|
#effectiveMaxL2Gas;
|
|
21
21
|
#effectiveMaxDAGas;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/**
|
|
23
|
+
* @param maxTxL2Gas - The network admission limit on L2 gas a single tx may declare (the per-block mana
|
|
24
|
+
* allocation, see {@link computeNetworkTxGasLimits}). Defaults to the per-tx protocol maximum, so callers
|
|
25
|
+
* that pass nothing (e.g. block building) enforce only the protocol ceiling.
|
|
26
|
+
* @param maxTxDAGas - The network admission limit on DA gas a single tx may declare. Defaults to the
|
|
27
|
+
* per-tx protocol maximum {@link MAX_TX_DA_GAS}.
|
|
28
|
+
*/ constructor(opts){
|
|
26
29
|
this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS,
|
|
31
|
-
this.#effectiveMaxDAGas = Math.min(
|
|
30
|
+
// The passed limits are network admission limits; clamp to the per-tx protocol maxima as a hard ceiling.
|
|
31
|
+
// MAX_TX_DA_GAS bounds DA by what a single tx can actually post to a blob; declaring more is meaningless
|
|
32
|
+
// and would let a tx reserve checkpoint/block DA budget during proposal building it can't use.
|
|
33
|
+
this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, opts?.maxTxL2Gas ?? Infinity);
|
|
34
|
+
this.#effectiveMaxDAGas = Math.min(MAX_TX_DA_GAS, opts?.maxTxDAGas ?? Infinity);
|
|
32
35
|
}
|
|
33
36
|
validateTx(tx) {
|
|
34
37
|
return Promise.resolve(this.validateGasLimit(tx));
|
|
@@ -44,34 +47,71 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
44
47
|
return {
|
|
45
48
|
result: 'invalid',
|
|
46
49
|
reason: [
|
|
47
|
-
TX_ERROR_INSUFFICIENT_GAS_LIMIT
|
|
50
|
+
`${TX_ERROR_INSUFFICIENT_GAS_LIMIT} (required=da:${minGasLimits.daGas},l2:${minGasLimits.l2Gas} got=da:${gasLimits.daGas},l2:${gasLimits.l2Gas})`
|
|
48
51
|
]
|
|
49
52
|
};
|
|
50
53
|
}
|
|
51
54
|
if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
|
|
52
55
|
this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
|
|
53
56
|
gasLimits,
|
|
54
|
-
effectiveMaxL2Gas: this.#effectiveMaxL2Gas
|
|
55
|
-
rollupManaLimit: this.#rollupManaLimit,
|
|
56
|
-
maxBlockL2Gas: this.#maxBlockL2Gas
|
|
57
|
+
effectiveMaxL2Gas: this.#effectiveMaxL2Gas
|
|
57
58
|
});
|
|
58
59
|
return {
|
|
59
60
|
result: 'invalid',
|
|
60
61
|
reason: [
|
|
61
|
-
TX_ERROR_GAS_LIMIT_TOO_HIGH
|
|
62
|
+
`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (l2Gas=${gasLimits.l2Gas}, max=${this.#effectiveMaxL2Gas})`
|
|
62
63
|
]
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
66
|
if (gasLimits.daGas > this.#effectiveMaxDAGas) {
|
|
66
67
|
this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
|
|
67
68
|
gasLimits,
|
|
68
|
-
effectiveMaxDAGas: this.#effectiveMaxDAGas
|
|
69
|
-
|
|
69
|
+
effectiveMaxDAGas: this.#effectiveMaxDAGas
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
result: 'invalid',
|
|
73
|
+
reason: [
|
|
74
|
+
`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (daGas=${gasLimits.daGas}, max=${this.#effectiveMaxDAGas})`
|
|
75
|
+
]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
result: 'valid'
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validates that a transaction's max fee per gas meets the current block's gas fees.
|
|
85
|
+
*
|
|
86
|
+
* Rejects transactions whose maxFeesPerGas is below the current block's gas fees
|
|
87
|
+
* on either dimension (DA or L2). This is a cheap, stateless check.
|
|
88
|
+
*
|
|
89
|
+
* Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
|
|
90
|
+
* (used during pending pool migration).
|
|
91
|
+
*
|
|
92
|
+
* Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
|
|
93
|
+
*/ export class MaxFeePerGasValidator {
|
|
94
|
+
#log;
|
|
95
|
+
#gasFees;
|
|
96
|
+
constructor(gasFees, bindings){
|
|
97
|
+
this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
|
|
98
|
+
this.#gasFees = gasFees;
|
|
99
|
+
}
|
|
100
|
+
validateTx(tx) {
|
|
101
|
+
return Promise.resolve(this.validateMaxFeePerGas(tx));
|
|
102
|
+
}
|
|
103
|
+
/** Checks maxFeesPerGas >= current block gas fees on both dimensions. */ validateMaxFeePerGas(tx) {
|
|
104
|
+
const maxFeesPerGas = tx.data.constants.txContext.gasSettings.maxFeesPerGas;
|
|
105
|
+
const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
106
|
+
if (notEnoughMaxFees) {
|
|
107
|
+
this.#log.verbose(`Rejecting transaction ${tx.txHash.toString()} due to insufficient fee per gas`, {
|
|
108
|
+
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
109
|
+
currentGasFees: this.#gasFees.toInspect()
|
|
70
110
|
});
|
|
71
111
|
return {
|
|
72
112
|
result: 'invalid',
|
|
73
113
|
reason: [
|
|
74
|
-
|
|
114
|
+
`${TX_ERROR_INSUFFICIENT_FEE_PER_GAS} (maxFee=da:${maxFeesPerGas.feePerDaGas},l2:${maxFeesPerGas.feePerL2Gas} required=da:${this.#gasFees.feePerDaGas},l2:${this.#gasFees.feePerL2Gas})`
|
|
75
115
|
]
|
|
76
116
|
};
|
|
77
117
|
}
|
|
@@ -86,9 +126,8 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
86
126
|
* Runs three checks in order:
|
|
87
127
|
* 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
|
|
88
128
|
* out of bounds.
|
|
89
|
-
* 2. **Max fee per gas** —
|
|
90
|
-
* the current block's gas fees.
|
|
91
|
-
* become eligible in a later block with lower fees.
|
|
129
|
+
* 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
|
|
130
|
+
* the current block's gas fees.
|
|
92
131
|
* 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
|
|
93
132
|
* adds any pending claim from a setup-phase `_increase_public_balance` call, and
|
|
94
133
|
* rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
|
|
@@ -115,37 +154,15 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
115
154
|
bindings: this.bindings
|
|
116
155
|
}).validateGasLimit(tx);
|
|
117
156
|
if (gasLimitValidation.result === 'invalid') {
|
|
118
|
-
return
|
|
157
|
+
return gasLimitValidation;
|
|
119
158
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
reason: [
|
|
124
|
-
TX_ERROR_INSUFFICIENT_FEE_PER_GAS
|
|
125
|
-
]
|
|
126
|
-
});
|
|
159
|
+
const maxFeeValidation = new MaxFeePerGasValidator(this.#gasFees, this.bindings).validateMaxFeePerGas(tx);
|
|
160
|
+
if (maxFeeValidation.result === 'invalid') {
|
|
161
|
+
return maxFeeValidation;
|
|
127
162
|
}
|
|
128
163
|
return await this.validateTxFee(tx);
|
|
129
164
|
}
|
|
130
165
|
/**
|
|
131
|
-
* Check whether the tx's max fees are valid for the current block, and skip if not.
|
|
132
|
-
* We skip instead of invalidating since the tx may become eligible later.
|
|
133
|
-
* Note that circuits check max fees even if fee payer is unset, so we
|
|
134
|
-
* keep this validation even if the tx does not pay fees.
|
|
135
|
-
*/ #shouldSkip(tx) {
|
|
136
|
-
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
137
|
-
// Skip the tx if its max fees are not enough for the current block's gas fees.
|
|
138
|
-
const maxFeesPerGas = gasSettings.maxFeesPerGas;
|
|
139
|
-
const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
140
|
-
if (notEnoughMaxFees) {
|
|
141
|
-
this.#log.verbose(`Skipping transaction ${tx.getTxHash().toString()} due to insufficient fee per gas`, {
|
|
142
|
-
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
143
|
-
currentGasFees: this.#gasFees.toInspect()
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
return notEnoughMaxFees;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
166
|
* Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
|
|
150
167
|
* Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
|
|
151
168
|
*/ async validateTxFee(tx) {
|
|
@@ -166,7 +183,7 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
166
183
|
return {
|
|
167
184
|
result: 'invalid',
|
|
168
185
|
reason: [
|
|
169
|
-
TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE
|
|
186
|
+
`${TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE} (required=${feeLimit}, available=${balance})`
|
|
170
187
|
]
|
|
171
188
|
};
|
|
172
189
|
}
|
|
@@ -14,4 +14,6 @@ export * from './tx_permitted_validator.js';
|
|
|
14
14
|
export * from './timestamp_validator.js';
|
|
15
15
|
export * from './size_validator.js';
|
|
16
16
|
export * from './factory.js';
|
|
17
|
-
|
|
17
|
+
export * from './tx_validation_cache.js';
|
|
18
|
+
export * from './cached_tx_validator.js';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
|
@@ -74,7 +74,7 @@ export class PhasesTxValidator {
|
|
|
74
74
|
if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
|
|
75
75
|
return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
|
|
76
76
|
}
|
|
77
|
-
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.
|
|
77
|
+
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigIntUnsafe(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
|
|
78
78
|
return TX_ERROR_SETUP_NULL_MSG_SENDER;
|
|
79
79
|
}
|
|
80
80
|
return undefined;
|
|
@@ -103,7 +103,7 @@ export class PhasesTxValidator {
|
|
|
103
103
|
if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
|
|
104
104
|
return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
|
|
105
105
|
}
|
|
106
|
-
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.
|
|
106
|
+
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigIntUnsafe(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
|
|
107
107
|
return TX_ERROR_SETUP_NULL_MSG_SENDER;
|
|
108
108
|
}
|
|
109
109
|
return undefined;
|
|
@@ -4,7 +4,8 @@ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx'
|
|
|
4
4
|
export declare class TxProofValidator implements TxValidator<Tx> {
|
|
5
5
|
#private;
|
|
6
6
|
private verifier;
|
|
7
|
+
readonly identifier: symbol;
|
|
7
8
|
constructor(verifier: ClientProtocolCircuitVerifier, bindings?: LoggerBindings);
|
|
8
9
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
9
10
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL3R4X3Byb29mX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQTBCLEVBQUUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekcscUJBQWEsZ0JBQWlCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNcEQsT0FBTyxDQUFDLFFBQVE7SUFMbEIsU0FBZ0IsVUFBVSxFQUFFLE1BQU0sQ0FBOEI7SUFJaEUsWUFDVSxRQUFRLEVBQUUsNkJBQTZCLEVBQy9DLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRcEQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;
|
|
1
|
+
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMpD,OAAO,CAAC,QAAQ;IALlB,SAAgB,UAAU,EAAE,MAAM,CAA8B;IAIhE,YACU,QAAQ,EAAE,6BAA6B,EAC/C,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQpD;CACF"}
|
|
@@ -2,9 +2,11 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { TX_ERROR_INVALID_PROOF } from '@aztec/stdlib/tx';
|
|
3
3
|
export class TxProofValidator {
|
|
4
4
|
verifier;
|
|
5
|
+
identifier;
|
|
5
6
|
#log;
|
|
6
7
|
constructor(verifier, bindings){
|
|
7
8
|
this.verifier = verifier;
|
|
9
|
+
this.identifier = Symbol('TxProofValidator');
|
|
8
10
|
this.#log = createLogger('p2p:tx_validator:proof', bindings);
|
|
9
11
|
}
|
|
10
12
|
async validateTx(tx) {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal interface consumed by {@link CachedTxValidator}.
|
|
4
|
+
* Keeping the dependency on an interface lets callers (and tests) substitute any cache implementation.
|
|
5
|
+
*/
|
|
6
|
+
export interface ITxValidationCache {
|
|
7
|
+
/** Returns the cached promise if present, otherwise calls `validate`, caches its promise, and returns it. */
|
|
8
|
+
getOrValidate(validatorSymbol: symbol, tx: Tx, validate: () => Promise<TxValidationResult>): Promise<TxValidationResult>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
|
|
12
|
+
*
|
|
13
|
+
* The cache key is composed from the validator symbol and tx hash, ensuring results are
|
|
14
|
+
* scoped to the specific validator that produced them.
|
|
15
|
+
*
|
|
16
|
+
* Promises are stored before they are awaited, so concurrent calls for the same pair share
|
|
17
|
+
* a single in-flight validation rather than launching duplicate work.
|
|
18
|
+
*
|
|
19
|
+
* Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
|
|
20
|
+
*/
|
|
21
|
+
export declare class TxValidationCache implements ITxValidationCache {
|
|
22
|
+
#private;
|
|
23
|
+
private readonly entries;
|
|
24
|
+
private readonly txHashesCache;
|
|
25
|
+
constructor(maxSize: number);
|
|
26
|
+
/**
|
|
27
|
+
* Computes the cache key scoping a validation result to a specific validator and tx.
|
|
28
|
+
*
|
|
29
|
+
* @param validatorSymbol - The symbol of the validator.
|
|
30
|
+
* @param tx - The tx to compute the key for.
|
|
31
|
+
* @returns The cache key.
|
|
32
|
+
*
|
|
33
|
+
* Note: the key should NOT use the tx.hash because it can't be trusted at this point.
|
|
34
|
+
*/
|
|
35
|
+
key(validatorSymbol: symbol, tx: Tx): string;
|
|
36
|
+
/** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */
|
|
37
|
+
get(key: string): Promise<TxValidationResult> | undefined;
|
|
38
|
+
/** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */
|
|
39
|
+
set(key: string, result: Promise<TxValidationResult>): void;
|
|
40
|
+
/** Removes the cached validation promise for the given key. */
|
|
41
|
+
delete(key: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the cached promise if present, otherwise calls `validate`, stores its promise
|
|
44
|
+
* immediately (before awaiting), and returns it.
|
|
45
|
+
*/
|
|
46
|
+
getOrValidate(validatorSymbol: symbol, tx: Tx, validate: () => Promise<TxValidationResult>): Promise<TxValidationResult>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdGlvbl9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci90eF92YWxpZGF0aW9uX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSS9EOzs7R0FHRztBQUNILE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsNkdBQTZHO0lBQzdHLGFBQWEsQ0FDWCxlQUFlLEVBQUUsTUFBTSxFQUN2QixFQUFFLEVBQUUsRUFBRSxFQUNOLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztDQUNoQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxxQkFBYSxpQkFBa0IsWUFBVyxrQkFBa0I7O0lBRzFELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUE4QztJQUd0RSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBc0M7SUFFcEUsWUFBWSxPQUFPLEVBQUUsTUFBTSxFQUcxQjtJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBUWxEO0lBRUQsbUdBQW1HO0lBQzVGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FFL0Q7SUFFRCw4RkFBOEY7SUFDdkYsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FFakU7SUFFRCwrREFBK0Q7SUFDeEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUUvQjtJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FDbEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsRUFBRSxFQUFFLEVBQUUsRUFDTixRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBYzdCO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_validation_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_validation_cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI/D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,6GAA6G;IAC7G,aAAa,CACX,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;;IAG1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;IAGtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;IAEpE,YAAY,OAAO,EAAE,MAAM,EAG1B;IAED;;;;;;;;OAQG;IACI,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAQlD;IAED,mGAAmG;IAC5F,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAE/D;IAED,8FAA8F;IACvF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAEjE;IAED,+DAA+D;IACxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACI,aAAa,CAClB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAc7B;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { LruMap } from '@aztec/foundation/collection';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
/**
|
|
5
|
+
* Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
|
|
6
|
+
*
|
|
7
|
+
* The cache key is composed from the validator symbol and tx hash, ensuring results are
|
|
8
|
+
* scoped to the specific validator that produced them.
|
|
9
|
+
*
|
|
10
|
+
* Promises are stored before they are awaited, so concurrent calls for the same pair share
|
|
11
|
+
* a single in-flight validation rather than launching duplicate work.
|
|
12
|
+
*
|
|
13
|
+
* Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
|
|
14
|
+
*/ export class TxValidationCache {
|
|
15
|
+
#log;
|
|
16
|
+
entries;
|
|
17
|
+
// Remember hashes for known Tx object references to skip rehashing on subsequent lookups.
|
|
18
|
+
// WeakMap holds keys weakly, so an entry doesn't keep the Tx alive once nothing else references it.
|
|
19
|
+
txHashesCache = new WeakMap();
|
|
20
|
+
constructor(maxSize){
|
|
21
|
+
this.entries = new LruMap(maxSize);
|
|
22
|
+
this.#log = createLogger('p2p:tx_validation_cache');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Computes the cache key scoping a validation result to a specific validator and tx.
|
|
26
|
+
*
|
|
27
|
+
* @param validatorSymbol - The symbol of the validator.
|
|
28
|
+
* @param tx - The tx to compute the key for.
|
|
29
|
+
* @returns The cache key.
|
|
30
|
+
*
|
|
31
|
+
* Note: the key should NOT use the tx.hash because it can't be trusted at this point.
|
|
32
|
+
*/ key(validatorSymbol, tx) {
|
|
33
|
+
// Serializing the tx dominates cost (~5 ms). If we have already hashed this object, skip toBuffer + hash.
|
|
34
|
+
let hash = this.txHashesCache.get(tx);
|
|
35
|
+
if (hash === undefined) {
|
|
36
|
+
hash = createHash('sha256').update(tx.toBuffer()).digest('hex');
|
|
37
|
+
this.txHashesCache.set(tx, hash);
|
|
38
|
+
}
|
|
39
|
+
return `${Symbol.keyFor(validatorSymbol) ?? validatorSymbol.toString()}:${hash}`;
|
|
40
|
+
}
|
|
41
|
+
/** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */ get(key) {
|
|
42
|
+
return this.entries.get(key);
|
|
43
|
+
}
|
|
44
|
+
/** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */ set(key, result) {
|
|
45
|
+
this.entries.set(key, result);
|
|
46
|
+
}
|
|
47
|
+
/** Removes the cached validation promise for the given key. */ delete(key) {
|
|
48
|
+
this.entries.delete(key);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns the cached promise if present, otherwise calls `validate`, stores its promise
|
|
52
|
+
* immediately (before awaiting), and returns it.
|
|
53
|
+
*/ getOrValidate(validatorSymbol, tx, validate) {
|
|
54
|
+
const key = this.key(validatorSymbol, tx);
|
|
55
|
+
const cached = this.get(key);
|
|
56
|
+
if (cached !== undefined) {
|
|
57
|
+
this.#log.debug('Returning cached tx validation result', {
|
|
58
|
+
validator: validatorSymbol.toString(),
|
|
59
|
+
txHash: tx.txHash.toString(),
|
|
60
|
+
key: key
|
|
61
|
+
});
|
|
62
|
+
return cached;
|
|
63
|
+
}
|
|
64
|
+
const promise = validate();
|
|
65
|
+
this.set(key, promise);
|
|
66
|
+
return promise;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -24,4 +24,4 @@ export declare class AztecDatastore implements Datastore {
|
|
|
24
24
|
*/
|
|
25
25
|
private pruneMemoryDatastore;
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2RhdGFfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVHLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBcUJyRCxxQkFBYSxjQUFlLFlBQVcsU0FBUzs7SUFLOUMsT0FBTyxDQUFDLGNBQWMsQ0FBUztJQUUvQixZQUFZLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLGNBQWMsRUFBRTs7S0FBeUIsRUFLN0U7SUFFSyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRXBDO0lBRUssR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQWN2QztJQUVELEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUUzQztJQUVNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FLOUQ7SUFFTSxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBTzlEO0lBRU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUtoRTtJQUVLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHcEM7SUFFRCxLQUFLLElBQUksS0FBSyxDQXNCYjtJQUVELEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0EwQm5DO0lBRUQsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQXlCekM7WUFFYSxJQUFJO1lBcUJILEdBQUc7SUFrQmxCOztPQUVHO0lBQ0gsT0FBTyxDQUFDLG9CQUFvQjtDQWlCN0IifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/services/data_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBrD,qBAAa,cAAe,YAAW,SAAS;;
|
|
1
|
+
{"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/services/data_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBrD,qBAAa,cAAe,YAAW,SAAS;;IAK9C,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,EAAE,EAAE,iBAAiB,EAAE,EAAE,cAAc,EAAE;;KAAyB,EAK7E;IAEK,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpC;IAEK,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAcvC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAE3C;IAEM,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAK9D;IAEM,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAO9D;IAEM,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAKhE;IAEK,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpC;IAED,KAAK,IAAI,KAAK,CAsBb;IAED,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CA0BnC;IAED,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAyBzC;YAEa,IAAI;YAqBH,GAAG;IAkBlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAiB7B"}
|