@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928
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 +130 -3
- 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 +5 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +39 -16
- package/dest/client/interface.d.ts +52 -12
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +36 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +142 -81
- package/dest/config.d.ts +163 -98
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +130 -20
- 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 +9 -16
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +10 -17
- 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 +101 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +272 -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 +224 -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 +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 +10 -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 +29 -20
- 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.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -4
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -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 +64 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +11 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +24 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -9
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -11
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +46 -16
- 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 +55 -41
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +19 -4
- 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 +86 -32
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +50 -6
- 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 +262 -131
- 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 -15
- 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 +11 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
- 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.d.ts +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/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 +25 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +55 -16
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +53 -7
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
- package/dest/msg_validators/tx_validator/index.d.ts +4 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +3 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +49 -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 +119 -23
- 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 +18 -16
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +21 -16
- package/dest/services/encoding.d.ts +23 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +32 -16
- 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 +6 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +21 -0
- package/dest/services/libp2p/libp2p_service.d.ts +51 -51
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +499 -333
- package/dest/services/peer-manager/peer_manager.d.ts +31 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +125 -25
- package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +102 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -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 +81 -86
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -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 +5 -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 +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
- 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_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 +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 +73 -215
- package/dest/services/service.d.ts +43 -18
- 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 +13 -8
- 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 +33 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +57 -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 +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +49 -15
- 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 +104 -41
- package/dest/testbench/worker_client_manager.d.ts +12 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +57 -11
- package/dest/util.d.ts +12 -7
- 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 +17 -17
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +62 -9
- package/src/client/interface.ts +48 -18
- package/src/client/p2p_client.ts +159 -113
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +233 -20
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +13 -19
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +327 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +18 -12
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
- 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 +4 -5
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
- 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 +67 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +27 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +107 -32
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +291 -137
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
- package/src/msg_validators/tx_validator/README.md +17 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/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 +66 -9
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
- package/src/msg_validators/tx_validator/index.ts +3 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +60 -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 +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +26 -40
- package/src/services/encoding.ts +35 -19
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -18
- package/src/services/libp2p/instrumentation.ts +22 -0
- package/src/services/libp2p/libp2p_service.ts +560 -369
- package/src/services/peer-manager/peer_manager.ts +138 -24
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
- 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_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
- package/src/services/reqresp/reqresp.ts +84 -259
- package/src/services/service.ts +51 -35
- 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 +10 -8
- 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 +4 -1
- package/src/test-helpers/mock-pubsub.ts +61 -60
- package/src/test-helpers/reqresp-nodes.ts +13 -23
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +63 -28
- package/src/testbench/p2p_client_testbench_worker.ts +111 -57
- package/src/testbench/worker_client_manager.ts +72 -25
- package/src/util.ts +33 -18
- 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 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/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 -37
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
- 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 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/clock_tolerance.ts +0 -51
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
- 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
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { minBigint } from '@aztec/foundation/bigint';
|
|
1
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
5
|
import { BlockHash, type L2BlockId } from '@aztec/stdlib/block';
|
|
5
|
-
import { Gas } from '@aztec/stdlib/gas';
|
|
6
|
+
import { Gas, GasFees } from '@aztec/stdlib/gas';
|
|
6
7
|
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
8
|
|
|
8
9
|
import { getFeePayerBalanceDelta } from '../../msg_validators/tx_validator/fee_payer_balance.js';
|
|
9
|
-
import { getTxPriorityFee } from '../tx_pool/priority.js';
|
|
10
10
|
import { type PreAddResult, TxPoolRejectionCode } from './eviction/interfaces.js';
|
|
11
11
|
|
|
12
12
|
/** Validator-compatible data interface, mirroring the subset of PrivateKernelTailCircuitPublicInputs used by validators. */
|
|
@@ -23,7 +23,7 @@ export type TxMetaValidationData = {
|
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
txContext: {
|
|
26
|
-
gasSettings: { gasLimits: Gas };
|
|
26
|
+
gasSettings: { gasLimits: Gas; maxFeesPerGas: GasFees };
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
};
|
|
@@ -67,6 +67,9 @@ export type TxMetaData = {
|
|
|
67
67
|
/** Timestamp by which the transaction must be included (for expiration checks) */
|
|
68
68
|
readonly expirationTimestamp: bigint;
|
|
69
69
|
|
|
70
|
+
/** Whether the tx's setup-phase calls pass the allow list check. Computed at receipt time. */
|
|
71
|
+
readonly allowedSetupCalls: boolean;
|
|
72
|
+
|
|
70
73
|
/** Validator-compatible data, providing the same access patterns as Tx.data */
|
|
71
74
|
readonly data: TxMetaValidationData;
|
|
72
75
|
|
|
@@ -84,8 +87,12 @@ export type TxState = 'pending' | 'protected' | 'mined' | 'deleted';
|
|
|
84
87
|
* Builds TxMetaData from a full Tx object.
|
|
85
88
|
* Extracts all relevant fields for efficient in-memory storage and querying.
|
|
86
89
|
* Fr values are captured in closures for zero-cost re-validation.
|
|
90
|
+
*
|
|
91
|
+
* @param allowedSetupCalls - Whether the tx's setup-phase calls pass the allow list.
|
|
92
|
+
* For gossip/RPC txs this is always `true` (already validated by PhasesTxValidator).
|
|
93
|
+
* For req/resp txs this should be computed by the caller using the phases validator.
|
|
87
94
|
*/
|
|
88
|
-
export async function buildTxMetaData(tx: Tx): Promise<TxMetaData> {
|
|
95
|
+
export async function buildTxMetaData(tx: Tx, allowedSetupCalls: boolean = true): Promise<TxMetaData> {
|
|
89
96
|
const txHashObj = tx.getTxHash();
|
|
90
97
|
const txHash = txHashObj.toString();
|
|
91
98
|
const txHashBigInt = txHashObj.toBigInt();
|
|
@@ -112,6 +119,7 @@ export async function buildTxMetaData(tx: Tx): Promise<TxMetaData> {
|
|
|
112
119
|
feeLimit,
|
|
113
120
|
nullifiers,
|
|
114
121
|
expirationTimestamp,
|
|
122
|
+
allowedSetupCalls,
|
|
115
123
|
receivedAt: 0,
|
|
116
124
|
estimatedSizeBytes,
|
|
117
125
|
data: {
|
|
@@ -124,7 +132,10 @@ export async function buildTxMetaData(tx: Tx): Promise<TxMetaData> {
|
|
|
124
132
|
globalVariables: { blockNumber: anchorBlockNumber },
|
|
125
133
|
},
|
|
126
134
|
txContext: {
|
|
127
|
-
gasSettings: {
|
|
135
|
+
gasSettings: {
|
|
136
|
+
gasLimits: tx.data.constants.txContext.gasSettings.gasLimits,
|
|
137
|
+
maxFeesPerGas: tx.data.constants.txContext.gasSettings.maxFeesPerGas,
|
|
138
|
+
},
|
|
128
139
|
},
|
|
129
140
|
},
|
|
130
141
|
},
|
|
@@ -158,13 +169,13 @@ export function txHashFromBigInt(value: bigint): string {
|
|
|
158
169
|
}
|
|
159
170
|
|
|
160
171
|
/** Minimal fields required for priority comparison. */
|
|
161
|
-
type PriorityComparable = Pick<TxMetaData, 'txHashBigInt' | 'priorityFee'>;
|
|
172
|
+
export type PriorityComparable = Pick<TxMetaData, 'txHash' | 'txHashBigInt' | 'priorityFee'>;
|
|
162
173
|
|
|
163
174
|
/**
|
|
164
175
|
* Compares two priority fees in ascending order.
|
|
165
176
|
* Returns negative if a < b, positive if a > b, 0 if equal.
|
|
166
177
|
*/
|
|
167
|
-
export function compareFee(a: bigint, b: bigint):
|
|
178
|
+
export function compareFee(a: bigint, b: bigint): -1 | 0 | 1 {
|
|
168
179
|
return a < b ? -1 : a > b ? 1 : 0;
|
|
169
180
|
}
|
|
170
181
|
|
|
@@ -173,7 +184,7 @@ export function compareFee(a: bigint, b: bigint): number {
|
|
|
173
184
|
* Uses field element comparison for deterministic ordering.
|
|
174
185
|
* Returns negative if a < b, positive if a > b, 0 if equal.
|
|
175
186
|
*/
|
|
176
|
-
export function compareTxHash(a: bigint, b: bigint):
|
|
187
|
+
export function compareTxHash(a: bigint, b: bigint): -1 | 0 | 1 {
|
|
177
188
|
return Fr.cmpAsBigInt(a, b);
|
|
178
189
|
}
|
|
179
190
|
|
|
@@ -182,7 +193,7 @@ export function compareTxHash(a: bigint, b: bigint): number {
|
|
|
182
193
|
* Returns negative if a < b, positive if a > b, 0 if equal.
|
|
183
194
|
* Use with sort() for ascending order, or negate/reverse for descending.
|
|
184
195
|
*/
|
|
185
|
-
export function comparePriority(a: PriorityComparable, b: PriorityComparable):
|
|
196
|
+
export function comparePriority(a: PriorityComparable, b: PriorityComparable): -1 | 0 | 1 {
|
|
186
197
|
const feeComparison = compareFee(a.priorityFee, b.priorityFee);
|
|
187
198
|
if (feeComparison !== 0) {
|
|
188
199
|
return feeComparison;
|
|
@@ -190,21 +201,38 @@ export function comparePriority(a: PriorityComparable, b: PriorityComparable): n
|
|
|
190
201
|
return compareTxHash(a.txHashBigInt, b.txHashBigInt);
|
|
191
202
|
}
|
|
192
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Returns the minimum fee required to replace an existing tx with the given price bump percentage.
|
|
206
|
+
* Uses integer arithmetic: `existingFee + existingFee * priceBumpPercentage / 100`.
|
|
207
|
+
*/
|
|
208
|
+
export function getMinimumPriceBumpFee(existingFee: bigint, priceBumpPercentage: bigint): bigint {
|
|
209
|
+
const bump = (existingFee * priceBumpPercentage) / 100n;
|
|
210
|
+
// Ensure the minimum bump is at least 1, so that replacement always requires
|
|
211
|
+
// paying strictly more — even with 0% bump or zero existing fee.
|
|
212
|
+
const effectiveBump = bump > 0n ? bump : 1n;
|
|
213
|
+
return existingFee + effectiveBump;
|
|
214
|
+
}
|
|
215
|
+
|
|
193
216
|
/**
|
|
194
217
|
* Checks for nullifier conflicts between an incoming transaction and existing pool state.
|
|
195
218
|
*
|
|
196
219
|
* When the incoming tx shares nullifiers with existing pending txs:
|
|
197
|
-
* - If the incoming tx
|
|
198
|
-
* -
|
|
220
|
+
* - If the incoming tx meets or exceeds the required priority, mark conflicting txs for eviction
|
|
221
|
+
* - Otherwise, ignore the incoming tx
|
|
222
|
+
*
|
|
223
|
+
* When `priceBumpPercentage` is provided (RPC path), uses fee-only comparison with the
|
|
224
|
+
* percentage bump instead of `comparePriority`.
|
|
199
225
|
*
|
|
200
226
|
* @param incomingMeta - Metadata for the incoming transaction
|
|
201
227
|
* @param getTxHashByNullifier - Accessor to find which tx uses a nullifier
|
|
202
228
|
* @param getMetadata - Accessor to get metadata for a tx hash
|
|
229
|
+
* @param priceBumpPercentage - Optional percentage bump required for fee-based replacement
|
|
203
230
|
*/
|
|
204
231
|
export function checkNullifierConflict(
|
|
205
232
|
incomingMeta: TxMetaData,
|
|
206
233
|
getTxHashByNullifier: (nullifier: string) => string | undefined,
|
|
207
234
|
getMetadata: (txHash: string) => TxMetaData | undefined,
|
|
235
|
+
priceBumpPercentage?: bigint,
|
|
208
236
|
): PreAddResult {
|
|
209
237
|
const txHashesToEvict: string[] = [];
|
|
210
238
|
|
|
@@ -225,19 +253,32 @@ export function checkNullifierConflict(
|
|
|
225
253
|
continue;
|
|
226
254
|
}
|
|
227
255
|
|
|
228
|
-
//
|
|
229
|
-
// Otherwise,
|
|
230
|
-
|
|
231
|
-
|
|
256
|
+
// When price bump is set (RPC path), require the incoming fee to meet the bumped threshold.
|
|
257
|
+
// Otherwise (P2P path), use full comparePriority with tx hash tiebreaker.
|
|
258
|
+
const isHigherPriority =
|
|
259
|
+
priceBumpPercentage !== undefined
|
|
260
|
+
? incomingMeta.priorityFee >= getMinimumPriceBumpFee(conflictingMeta.priorityFee, priceBumpPercentage)
|
|
261
|
+
: comparePriority(incomingMeta, conflictingMeta) > 0;
|
|
262
|
+
|
|
263
|
+
if (isHigherPriority) {
|
|
232
264
|
txHashesToEvict.push(conflictingHashStr);
|
|
233
265
|
} else {
|
|
266
|
+
const minimumFee =
|
|
267
|
+
priceBumpPercentage !== undefined
|
|
268
|
+
? getMinimumPriceBumpFee(conflictingMeta.priorityFee, priceBumpPercentage)
|
|
269
|
+
: undefined;
|
|
234
270
|
return {
|
|
235
271
|
shouldIgnore: true,
|
|
236
272
|
txHashesToEvict: [],
|
|
237
273
|
reason: {
|
|
238
274
|
code: TxPoolRejectionCode.NULLIFIER_CONFLICT,
|
|
239
|
-
message:
|
|
275
|
+
message:
|
|
276
|
+
minimumFee !== undefined
|
|
277
|
+
? `Nullifier conflict with existing tx ${conflictingHashStr}. Minimum required fee: ${minimumFee}, got: ${incomingMeta.priorityFee}`
|
|
278
|
+
: `Nullifier conflict with existing tx ${conflictingHashStr}`,
|
|
240
279
|
conflictingTxHash: conflictingHashStr,
|
|
280
|
+
minimumPriceBumpFee: minimumFee,
|
|
281
|
+
txPriorityFee: minimumFee !== undefined ? incomingMeta.priorityFee : undefined,
|
|
241
282
|
},
|
|
242
283
|
};
|
|
243
284
|
}
|
|
@@ -247,17 +288,19 @@ export function checkNullifierConflict(
|
|
|
247
288
|
}
|
|
248
289
|
|
|
249
290
|
/** Creates a stub TxMetaValidationData for tests that don't exercise validators. */
|
|
250
|
-
export function stubTxMetaValidationData(
|
|
291
|
+
export function stubTxMetaValidationData(
|
|
292
|
+
overrides: { expirationTimestamp?: bigint; maxFeesPerGas?: GasFees } = {},
|
|
293
|
+
): TxMetaValidationData {
|
|
251
294
|
return {
|
|
252
295
|
getNonEmptyNullifiers: () => [],
|
|
253
296
|
expirationTimestamp: overrides.expirationTimestamp ?? 0n,
|
|
254
297
|
constants: {
|
|
255
298
|
anchorBlockHeader: {
|
|
256
|
-
hash: () => Promise.resolve(
|
|
299
|
+
hash: () => Promise.resolve(BlockHash.ZERO),
|
|
257
300
|
globalVariables: { blockNumber: BlockNumber(0) },
|
|
258
301
|
},
|
|
259
302
|
txContext: {
|
|
260
|
-
gasSettings: { gasLimits: Gas.empty() },
|
|
303
|
+
gasSettings: { gasLimits: Gas.empty(), maxFeesPerGas: overrides.maxFeesPerGas ?? GasFees.empty() },
|
|
261
304
|
},
|
|
262
305
|
},
|
|
263
306
|
};
|
|
@@ -274,6 +317,8 @@ export function stubTxMetaData(
|
|
|
274
317
|
nullifiers?: string[];
|
|
275
318
|
expirationTimestamp?: bigint;
|
|
276
319
|
anchorBlockHeaderHash?: string;
|
|
320
|
+
allowedSetupCalls?: boolean;
|
|
321
|
+
maxFeesPerGas?: GasFees;
|
|
277
322
|
} = {},
|
|
278
323
|
): TxMetaData {
|
|
279
324
|
const txHashBigInt = Fr.fromHexString(txHash).toBigInt();
|
|
@@ -290,8 +335,15 @@ export function stubTxMetaData(
|
|
|
290
335
|
feeLimit: overrides.feeLimit ?? 100n,
|
|
291
336
|
nullifiers: overrides.nullifiers ?? [`0x${normalizedTxHash.slice(2)}null1`],
|
|
292
337
|
expirationTimestamp,
|
|
338
|
+
allowedSetupCalls: overrides.allowedSetupCalls ?? true,
|
|
293
339
|
receivedAt: 0,
|
|
294
340
|
estimatedSizeBytes: 0,
|
|
295
|
-
data: stubTxMetaValidationData({ expirationTimestamp }),
|
|
341
|
+
data: stubTxMetaValidationData({ expirationTimestamp, maxFeesPerGas: overrides.maxFeesPerGas }),
|
|
296
342
|
};
|
|
297
343
|
}
|
|
344
|
+
|
|
345
|
+
/** Returns the priority fee for a tx, based on the L2 priority fee capped by the max fee per gas. */
|
|
346
|
+
function getTxPriorityFee(tx: Tx): bigint {
|
|
347
|
+
const { maxPriorityFeesPerGas: priorityFees, maxFeesPerGas } = tx.getGasSettings();
|
|
348
|
+
return minBigint(maxFeesPerGas.feePerL2Gas, priorityFees.feePerL2Gas);
|
|
349
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { insertIntoSortedArray, removeFromSortedArray } from '@aztec/foundation/array';
|
|
1
2
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import type { L2BlockId } from '@aztec/stdlib/block';
|
|
3
4
|
|
|
4
|
-
import { type
|
|
5
|
+
import { type PriorityComparable, type TxMetaData, type TxState, comparePriority } from './tx_metadata.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Manages in-memory indices for the transaction pool.
|
|
@@ -22,8 +23,8 @@ export class TxPoolIndices {
|
|
|
22
23
|
#nullifierToTxHash: Map<string, string> = new Map();
|
|
23
24
|
/** Fee payer to txHashes index (pending txs only) */
|
|
24
25
|
#feePayerToTxHashes: Map<string, Set<string>> = new Map();
|
|
25
|
-
/** Pending
|
|
26
|
-
#pendingByPriority:
|
|
26
|
+
/** Pending transactions sorted ascending by priority fee, ties broken by txHash */
|
|
27
|
+
#pendingByPriority: PriorityComparable[] = [];
|
|
27
28
|
/** Protected transactions: txHash -> slotNumber */
|
|
28
29
|
#protectedTransactions: Map<string, SlotNumber> = new Map();
|
|
29
30
|
|
|
@@ -73,20 +74,14 @@ export class TxPoolIndices {
|
|
|
73
74
|
* @param order - 'desc' for highest priority first, 'asc' for lowest priority first
|
|
74
75
|
*/
|
|
75
76
|
*iteratePendingByPriority(order: 'asc' | 'desc', filter?: (hash: string) => boolean): Generator<string> {
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const sortedHashes = [...hashesAtFee].sort(hashCompareFn);
|
|
85
|
-
for (const hashBigInt of sortedHashes) {
|
|
86
|
-
const hash = txHashFromBigInt(hashBigInt);
|
|
87
|
-
if (filter === undefined || filter(hash)) {
|
|
88
|
-
yield hash;
|
|
89
|
-
}
|
|
77
|
+
const arr = this.#pendingByPriority;
|
|
78
|
+
const start = order === 'asc' ? 0 : arr.length - 1;
|
|
79
|
+
const step = order === 'asc' ? 1 : -1;
|
|
80
|
+
const inBounds = order === 'asc' ? (i: number) => i < arr.length : (i: number) => i >= 0;
|
|
81
|
+
|
|
82
|
+
for (let i = start; inBounds(i); i += step) {
|
|
83
|
+
if (filter === undefined || filter(arr[i].txHash)) {
|
|
84
|
+
yield arr[i].txHash;
|
|
90
85
|
}
|
|
91
86
|
}
|
|
92
87
|
}
|
|
@@ -136,6 +131,9 @@ export class TxPoolIndices {
|
|
|
136
131
|
meta.minedL2BlockId = blockId;
|
|
137
132
|
// Safe to call unconditionally - removeFromPendingIndices is idempotent
|
|
138
133
|
this.#removeFromPendingIndices(meta);
|
|
134
|
+
// A mined tx supersedes any protection: drop the stale entry so it can't linger in the map and
|
|
135
|
+
// be matched by later protection scans.
|
|
136
|
+
this.#protectedTransactions.delete(meta.txHash);
|
|
139
137
|
}
|
|
140
138
|
|
|
141
139
|
/** Clears the mined status from a transaction */
|
|
@@ -227,11 +225,30 @@ export class TxPoolIndices {
|
|
|
227
225
|
|
|
228
226
|
/** Gets the count of pending transactions */
|
|
229
227
|
getPendingTxCount(): number {
|
|
228
|
+
return this.#pendingByPriority.length;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Returns whether at least `minCount` pending transactions were received at or before maxReceivedAt,
|
|
233
|
+
* i.e. are old enough to be eligible for block building. Stops as soon as the threshold is met, so it
|
|
234
|
+
* does not scan the whole pool when only a handful of eligible txs are needed. The total pending count
|
|
235
|
+
* is an upper bound on the eligible count, so a pool with fewer than `minCount` pending can never
|
|
236
|
+
* satisfy the threshold and short-circuits without scanning.
|
|
237
|
+
*/
|
|
238
|
+
hasEligiblePendingTxs(maxReceivedAt: number, minCount: number): boolean {
|
|
239
|
+
if (minCount <= 0) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
if (this.#pendingByPriority.length < minCount) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
230
245
|
let count = 0;
|
|
231
|
-
for (const
|
|
232
|
-
count
|
|
246
|
+
for (const _ of this.iterateEligiblePendingByPriority('desc', maxReceivedAt)) {
|
|
247
|
+
if (++count >= minCount) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
233
250
|
}
|
|
234
|
-
return
|
|
251
|
+
return false;
|
|
235
252
|
}
|
|
236
253
|
|
|
237
254
|
/** Gets the lowest priority pending transaction hashes (up to limit) */
|
|
@@ -264,12 +281,10 @@ export class TxPoolIndices {
|
|
|
264
281
|
/** Gets all pending transactions */
|
|
265
282
|
getPendingTxs(): TxMetaData[] {
|
|
266
283
|
const result: TxMetaData[] = [];
|
|
267
|
-
for (const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
result.push(meta);
|
|
272
|
-
}
|
|
284
|
+
for (const entry of this.#pendingByPriority) {
|
|
285
|
+
const meta = this.#metadata.get(entry.txHash);
|
|
286
|
+
if (meta) {
|
|
287
|
+
result.push(meta);
|
|
273
288
|
}
|
|
274
289
|
}
|
|
275
290
|
return result;
|
|
@@ -327,6 +342,15 @@ export class TxPoolIndices {
|
|
|
327
342
|
return result;
|
|
328
343
|
}
|
|
329
344
|
|
|
345
|
+
/**
|
|
346
|
+
* From the given hashes, returns those whose protection is recorded at exactly the given slot.
|
|
347
|
+
* Used to release the protections a single block proposal created without disturbing entries a
|
|
348
|
+
* later proposal raised to a higher slot via updateProtection.
|
|
349
|
+
*/
|
|
350
|
+
findProtectedTxsAtSlot(txHashes: string[], slotNumber: SlotNumber): string[] {
|
|
351
|
+
return txHashes.filter(txHash => this.#protectedTransactions.get(txHash) === slotNumber);
|
|
352
|
+
}
|
|
353
|
+
|
|
330
354
|
/** Filters out transactions that are currently protected */
|
|
331
355
|
filterUnprotected(txs: TxMetaData[]): TxMetaData[] {
|
|
332
356
|
return txs.filter(meta => !this.#protectedTransactions.has(meta.txHash));
|
|
@@ -408,13 +432,12 @@ export class TxPoolIndices {
|
|
|
408
432
|
}
|
|
409
433
|
feePayerSet.add(meta.txHash);
|
|
410
434
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
prioritySet.add(meta.txHashBigInt);
|
|
435
|
+
insertIntoSortedArray(
|
|
436
|
+
this.#pendingByPriority,
|
|
437
|
+
{ txHash: meta.txHash, priorityFee: meta.priorityFee, txHashBigInt: meta.txHashBigInt },
|
|
438
|
+
comparePriority,
|
|
439
|
+
false,
|
|
440
|
+
);
|
|
418
441
|
}
|
|
419
442
|
|
|
420
443
|
#removeFromPendingIndices(meta: TxMetaData): void {
|
|
@@ -432,13 +455,11 @@ export class TxPoolIndices {
|
|
|
432
455
|
}
|
|
433
456
|
}
|
|
434
457
|
|
|
435
|
-
// Remove from priority
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
}
|
|
458
|
+
// Remove from priority array
|
|
459
|
+
removeFromSortedArray(
|
|
460
|
+
this.#pendingByPriority,
|
|
461
|
+
{ txHash: meta.txHash, priorityFee: meta.priorityFee, txHashBigInt: meta.txHashBigInt },
|
|
462
|
+
comparePriority,
|
|
463
|
+
);
|
|
443
464
|
}
|
|
444
465
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { chunk } from '@aztec/foundation/collection';
|
|
2
3
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
4
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
4
|
-
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
5
6
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
6
7
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
7
8
|
import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
|
|
@@ -11,9 +12,18 @@ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-clien
|
|
|
11
12
|
import EventEmitter from 'node:events';
|
|
12
13
|
|
|
13
14
|
import { PoolInstrumentation, PoolName } from '../instrumentation.js';
|
|
14
|
-
import
|
|
15
|
+
import { TxPoolQueueInstrumentation } from './instrumentation.js';
|
|
16
|
+
import type {
|
|
17
|
+
AddTxsResult,
|
|
18
|
+
PoolReadAccess,
|
|
19
|
+
TxPoolV2,
|
|
20
|
+
TxPoolV2Config,
|
|
21
|
+
TxPoolV2Dependencies,
|
|
22
|
+
TxPoolV2Events,
|
|
23
|
+
} from './interfaces.js';
|
|
15
24
|
import type { TxState } from './tx_metadata.js';
|
|
16
|
-
import {
|
|
25
|
+
import type { MinedTxInfo } from './tx_pool_v2_impl.js';
|
|
26
|
+
import { FINALIZE_BLOCK_CHUNK_SIZE, TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
17
27
|
|
|
18
28
|
/**
|
|
19
29
|
* Implementation of TxPoolV2 with explicit state management.
|
|
@@ -23,6 +33,9 @@ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
|
|
|
23
33
|
*/
|
|
24
34
|
export class AztecKVTxPoolV2 extends (EventEmitter as new () => TypedEventEmitter<TxPoolV2Events>) implements TxPoolV2 {
|
|
25
35
|
#queue: SerialQueue;
|
|
36
|
+
#queueMetrics: TxPoolQueueInstrumentation;
|
|
37
|
+
/** Serializes finalizations so their chunked #queue items never interleave with each other. */
|
|
38
|
+
#finalizationQueue = new SerialQueue();
|
|
26
39
|
#impl: TxPoolV2Impl;
|
|
27
40
|
#metrics?: PoolInstrumentation<Tx>;
|
|
28
41
|
#store: AztecAsyncKVStore;
|
|
@@ -45,21 +58,27 @@ export class AztecKVTxPoolV2 extends (EventEmitter as new () => TypedEventEmitte
|
|
|
45
58
|
this.#telemetry = telemetry;
|
|
46
59
|
this.#log = log;
|
|
47
60
|
this.#queue = new SerialQueue();
|
|
61
|
+
this.#queueMetrics = new TxPoolQueueInstrumentation(telemetry, () => this.#queue.length());
|
|
48
62
|
|
|
49
63
|
// Create callbacks that the impl uses to notify us about events and metrics
|
|
50
64
|
const callbacks = {
|
|
51
65
|
onTxsAdded: (txs: Tx[], opts: { source?: string }) => {
|
|
52
|
-
this.#metrics?.transactionsAdded(txs);
|
|
53
66
|
this.emit('txs-added', { txs, ...opts });
|
|
54
67
|
},
|
|
55
68
|
onTxsRemoved: (txHashes: string[] | bigint[]) => {
|
|
56
|
-
this.#metrics?.transactionsRemoved(txHashes);
|
|
57
69
|
// Convert to TxHash objects for the event
|
|
58
70
|
const hashes = txHashes.map(h => (typeof h === 'string' ? TxHash.fromString(h) : TxHash.fromBigInt(h)));
|
|
59
71
|
this.emit('txs-removed', { txHashes: hashes });
|
|
60
72
|
},
|
|
61
|
-
onTxsMined: (
|
|
62
|
-
|
|
73
|
+
onTxsMined: (minedTxs: MinedTxInfo[]) => {
|
|
74
|
+
// Pending-to-mined delay is derived from the tx's persisted receivedAt at the mined
|
|
75
|
+
// transition (see TxPoolV2Impl.handleMinedBlock), not the add/remove timestamp map —
|
|
76
|
+
// so eviction no longer pollutes MEMPOOL_TX_MINED_DELAY.
|
|
77
|
+
for (const { minedDelayMs } of minedTxs) {
|
|
78
|
+
if (minedDelayMs !== undefined) {
|
|
79
|
+
this.#metrics?.recordMinedDelay(minedDelayMs);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
63
82
|
},
|
|
64
83
|
};
|
|
65
84
|
|
|
@@ -71,98 +90,151 @@ export class AztecKVTxPoolV2 extends (EventEmitter as new () => TypedEventEmitte
|
|
|
71
90
|
// PUBLIC API - All methods queue to the implementation
|
|
72
91
|
// ============================================================================
|
|
73
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Enqueues an operation on the serial queue, recording how long it waited behind other queued
|
|
95
|
+
* work and how long it took to execute once running.
|
|
96
|
+
*/
|
|
97
|
+
#run<T>(operation: string, fn: () => T | Promise<T>): Promise<Awaited<T>> {
|
|
98
|
+
const waitTimer = new Timer();
|
|
99
|
+
return this.#queue.put(async () => {
|
|
100
|
+
const waitMs = waitTimer.ms();
|
|
101
|
+
const executionTimer = new Timer();
|
|
102
|
+
try {
|
|
103
|
+
return await fn();
|
|
104
|
+
} finally {
|
|
105
|
+
this.#queueMetrics.record(operation, waitMs, executionTimer.ms());
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
74
110
|
// === Core Operations ===
|
|
75
111
|
|
|
76
112
|
addPendingTxs(txs: Tx[], opts: { source?: string; feeComparisonOnly?: boolean } = {}): Promise<AddTxsResult> {
|
|
77
|
-
return this.#
|
|
113
|
+
return this.#run('addPendingTxs', () => this.#impl.addPendingTxs(txs, opts));
|
|
78
114
|
}
|
|
79
115
|
|
|
80
116
|
canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
|
|
81
|
-
return this.#
|
|
117
|
+
return this.#run('canAddPendingTx', () => this.#impl.canAddPendingTx(tx));
|
|
82
118
|
}
|
|
83
119
|
|
|
84
120
|
addProtectedTxs(txs: Tx[], block: BlockHeader, opts: { source?: string } = {}): Promise<void> {
|
|
85
|
-
return this.#
|
|
121
|
+
return this.#run('addProtectedTxs', () => this.#impl.addProtectedTxs(txs, block, opts));
|
|
86
122
|
}
|
|
87
123
|
|
|
88
124
|
protectTxs(txHashes: TxHash[], block: BlockHeader): Promise<TxHash[]> {
|
|
89
|
-
return this.#
|
|
125
|
+
return this.#run('protectTxs', () => this.#impl.protectTxs(txHashes, block));
|
|
90
126
|
}
|
|
91
127
|
|
|
92
128
|
addMinedTxs(txs: Tx[], block: BlockHeader, opts: { source?: string } = {}): Promise<void> {
|
|
93
|
-
return this.#
|
|
129
|
+
return this.#run('addMinedTxs', () => this.#impl.addMinedTxs(txs, block, opts));
|
|
94
130
|
}
|
|
95
131
|
|
|
96
132
|
// === State Transition Handlers ===
|
|
97
133
|
|
|
98
134
|
handleMinedBlock(block: L2Block): Promise<void> {
|
|
99
|
-
return this.#
|
|
135
|
+
return this.#run('handleMinedBlock', () => this.#impl.handleMinedBlock(block));
|
|
100
136
|
}
|
|
101
137
|
|
|
102
138
|
prepareForSlot(slotNumber: SlotNumber): Promise<void> {
|
|
103
|
-
return this.#
|
|
139
|
+
return this.#run('prepareForSlot', () => this.#impl.prepareForSlot(slotNumber));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
unprotectTxs(txHashes: TxHash[], slotNumber: SlotNumber): Promise<void> {
|
|
143
|
+
return this.#run('unprotectTxs', () => this.#impl.unprotectTxs(txHashes, slotNumber));
|
|
104
144
|
}
|
|
105
145
|
|
|
106
146
|
handlePrunedBlocks(latestBlock: L2BlockId, options?: { deleteAllTxs?: boolean }): Promise<void> {
|
|
107
|
-
return this.#
|
|
147
|
+
return this.#run('handlePrunedBlocks', () => this.#impl.handlePrunedBlocks(latestBlock, options));
|
|
108
148
|
}
|
|
109
149
|
|
|
110
150
|
handleFailedExecution(txHashes: TxHash[]): Promise<void> {
|
|
111
|
-
return this.#
|
|
151
|
+
return this.#run('handleFailedExecution', () => this.#impl.handleFailedExecution(txHashes));
|
|
112
152
|
}
|
|
113
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Handles a finalized block by archiving and deleting the mined txs it finalizes. The work is
|
|
156
|
+
* split into chunk-sized serial-queue items rather than one long-running item, so gossip-driven
|
|
157
|
+
* pool operations (canAddPendingTx / addPendingTxs) interleave with finalization instead of
|
|
158
|
+
* stalling behind an entire epoch's worth of tx processing. Finalizations run on their own serial
|
|
159
|
+
* queue so two concurrent calls never interleave their chunks with each other.
|
|
160
|
+
*/
|
|
114
161
|
handleFinalizedBlock(block: BlockHeader): Promise<void> {
|
|
115
|
-
return this.#
|
|
162
|
+
return this.#finalizationQueue.put(() => this.#handleFinalizedBlock(block));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async #handleFinalizedBlock(block: BlockHeader): Promise<void> {
|
|
166
|
+
const { cutoffBlock, txHashes } = await this.#run('prepareFinalization', () =>
|
|
167
|
+
this.#impl.prepareFinalization(block),
|
|
168
|
+
);
|
|
169
|
+
const batches = chunk(txHashes, FINALIZE_BLOCK_CHUNK_SIZE);
|
|
170
|
+
for (const batch of batches) {
|
|
171
|
+
await this.#run('archiveFinalizedTxs', () => this.#impl.archiveFinalizedTxs(batch));
|
|
172
|
+
}
|
|
173
|
+
for (const batch of batches) {
|
|
174
|
+
await this.#run('deleteFinalizedTxs', () => this.#impl.deleteFinalizedTxs(batch, cutoffBlock));
|
|
175
|
+
}
|
|
176
|
+
await this.#run('completeFinalization', () =>
|
|
177
|
+
this.#impl.completeFinalization(txHashes, cutoffBlock, block.globalVariables.blockNumber),
|
|
178
|
+
);
|
|
116
179
|
}
|
|
117
180
|
|
|
118
181
|
// === Queries ===
|
|
119
182
|
|
|
120
|
-
getTxByHash(txHash: TxHash): Promise<Tx | undefined> {
|
|
121
|
-
return this.#
|
|
183
|
+
getTxByHash(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined> {
|
|
184
|
+
return this.#run('getTxByHash', () => this.#impl.getTxByHash(txHash, opts));
|
|
122
185
|
}
|
|
123
186
|
|
|
124
|
-
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
|
|
125
|
-
return this.#
|
|
187
|
+
getTxsByHash(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]> {
|
|
188
|
+
return this.#run('getTxsByHash', () => this.#impl.getTxsByHash(txHashes, opts));
|
|
126
189
|
}
|
|
127
190
|
|
|
128
191
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
|
|
129
|
-
return this.#
|
|
192
|
+
return this.#run('hasTxs', () => this.#impl.hasTxs(txHashes));
|
|
130
193
|
}
|
|
131
194
|
|
|
132
195
|
getTxStatus(txHash: TxHash): Promise<TxState | 'deleted' | undefined> {
|
|
133
|
-
return this.#
|
|
196
|
+
return this.#run('getTxStatus', () => this.#impl.getTxStatus(txHash));
|
|
134
197
|
}
|
|
135
198
|
|
|
136
199
|
getPendingTxHashes(): Promise<TxHash[]> {
|
|
137
|
-
return this.#
|
|
200
|
+
return this.#run('getPendingTxHashes', () => this.#impl.getPendingTxHashes());
|
|
138
201
|
}
|
|
139
202
|
|
|
140
203
|
getEligiblePendingTxHashes(): Promise<TxHash[]> {
|
|
141
|
-
return this.#
|
|
204
|
+
return this.#run('getEligiblePendingTxHashes', () => this.#impl.getEligiblePendingTxHashes());
|
|
142
205
|
}
|
|
143
206
|
|
|
144
207
|
getPendingTxCount(): Promise<number> {
|
|
145
|
-
return this.#
|
|
208
|
+
return this.#run('getPendingTxCount', () => this.#impl.getPendingTxCount());
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
hasEligiblePendingTxs(minCount: number): Promise<boolean> {
|
|
212
|
+
return this.#run('hasEligiblePendingTxs', () => this.#impl.hasEligiblePendingTxs(minCount));
|
|
146
213
|
}
|
|
147
214
|
|
|
148
215
|
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
|
|
149
|
-
return this.#
|
|
216
|
+
return this.#run('getMinedTxHashes', () => this.#impl.getMinedTxHashes());
|
|
150
217
|
}
|
|
151
218
|
|
|
152
219
|
getMinedTxCount(): Promise<number> {
|
|
153
|
-
return this.#
|
|
220
|
+
return this.#run('getMinedTxCount', () => this.#impl.getMinedTxCount());
|
|
154
221
|
}
|
|
155
222
|
|
|
156
223
|
isEmpty(): Promise<boolean> {
|
|
157
|
-
return this.#
|
|
224
|
+
return this.#run('isEmpty', () => this.#impl.isEmpty());
|
|
158
225
|
}
|
|
159
226
|
|
|
160
227
|
getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined> {
|
|
161
|
-
return this.#
|
|
228
|
+
return this.#run('getArchivedTxByHash', () => this.#impl.getArchivedTxByHash(txHash));
|
|
162
229
|
}
|
|
163
230
|
|
|
164
231
|
getLowestPriorityPending(limit: number): Promise<TxHash[]> {
|
|
165
|
-
return this.#
|
|
232
|
+
return this.#run('getLowestPriorityPending', () => this.#impl.getLowestPriorityPending(limit));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** Returns read-only access to the pool. Used for testing. */
|
|
236
|
+
getPoolReadAccess(): PoolReadAccess {
|
|
237
|
+
return this.#impl.getPoolReadAccess();
|
|
166
238
|
}
|
|
167
239
|
|
|
168
240
|
// === Configuration ===
|
|
@@ -186,8 +258,9 @@ export class AztecKVTxPoolV2 extends (EventEmitter as new () => TypedEventEmitte
|
|
|
186
258
|
|
|
187
259
|
this.#log.info('Starting transaction pool...');
|
|
188
260
|
|
|
189
|
-
// Start the serial
|
|
261
|
+
// Start the serial queues
|
|
190
262
|
this.#queue.start();
|
|
263
|
+
this.#finalizationQueue.start();
|
|
191
264
|
this.#started = true;
|
|
192
265
|
|
|
193
266
|
// Setup metrics - created after queue is started so callbacks can safely queue
|
|
@@ -219,6 +292,8 @@ export class AztecKVTxPoolV2 extends (EventEmitter as new () => TypedEventEmitte
|
|
|
219
292
|
|
|
220
293
|
async stop(): Promise<void> {
|
|
221
294
|
if (this.#started) {
|
|
295
|
+
// End the finalization queue first: an in-flight finalization still needs #queue to run its chunks.
|
|
296
|
+
await this.#finalizationQueue.end();
|
|
222
297
|
await this.#queue.end();
|
|
223
298
|
this.#started = false;
|
|
224
299
|
}
|