@aztec/p2p 0.0.1-commit.0c875d939 → 0.0.1-commit.0ec55a70b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/client/factory.d.ts +8 -7
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +35 -30
- package/dest/client/interface.d.ts +18 -20
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +9 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +81 -104
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +23 -10
- package/dest/config.d.ts +130 -103
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +97 -39
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -9
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
- 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 +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +33 -15
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +9 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -4
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +2 -1
- 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/interfaces.d.ts +54 -5
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +7 -7
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +12 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +27 -10
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +4 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +57 -15
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +115 -20
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +5 -2
- 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 +38 -46
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -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 +12 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +12 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +297 -153
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +61 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +19 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +88 -44
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +35 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +247 -60
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/dummy_service.d.ts +8 -5
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +10 -5
- package/dest/services/encoding.d.ts +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +16 -9
- package/dest/services/gossipsub/topic_score_params.d.ts +30 -7
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +53 -14
- package/dest/services/libp2p/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 +33 -38
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +256 -213
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +6 -0
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +39 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +32 -10
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +12 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +83 -106
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +14 -9
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -11
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +4 -2
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +30 -12
- package/dest/services/service.d.ts +9 -4
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +65 -75
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +4 -2
- package/dest/services/tx_collection/file_store_tx_source.d.ts +16 -6
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +50 -9
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +2 -1
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -7
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +2 -2
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +10 -8
- package/dest/services/tx_collection/tx_collection.d.ts +5 -7
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.d.ts +6 -5
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +13 -22
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +26 -7
- package/dest/services/tx_file_store/tx_file_store.js +1 -1
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +4 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +4 -2
- package/dest/test-helpers/mock-pubsub.d.ts +14 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +43 -12
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +6 -4
- package/dest/test-helpers/testbench-utils.d.ts +6 -3
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +24 -4
- package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +83 -26
- package/dest/testbench/worker_client_manager.d.ts +10 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +55 -3
- package/dest/util.d.ts +3 -3
- package/dest/util.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +63 -50
- package/src/client/interface.ts +20 -21
- package/src/client/p2p_client.ts +89 -135
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +35 -14
- package/src/config.ts +148 -45
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +22 -14
- package/src/mem_pools/tx_pool_v2/README.md +10 -2
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +11 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +5 -4
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +5 -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/interfaces.ts +59 -4
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +4 -4
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +8 -8
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +12 -9
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
- package/src/mem_pools/tx_pool_v2/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +27 -10
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +166 -28
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +43 -46
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +28 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +332 -149
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +12 -2
- package/src/msg_validators/clock_tolerance.ts +79 -3
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +23 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +34 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +111 -47
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -3
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +42 -1
- package/src/msg_validators/tx_validator/factory.ts +396 -78
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/msg_validators/tx_validator/timestamp_validator.ts +7 -7
- package/src/services/data_store.ts +5 -13
- package/src/services/dummy_service.ts +13 -7
- package/src/services/encoding.ts +16 -8
- package/src/services/gossipsub/README.md +29 -14
- package/src/services/gossipsub/topic_score_params.ts +85 -17
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +278 -239
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +45 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +229 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +79 -112
- package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -11
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +40 -13
- package/src/services/service.ts +17 -3
- package/src/services/tx_collection/fast_tx_collection.ts +71 -76
- package/src/services/tx_collection/file_store_tx_collection.ts +7 -3
- package/src/services/tx_collection/file_store_tx_source.ts +65 -9
- package/src/services/tx_collection/instrumentation.ts +7 -1
- package/src/services/tx_collection/proposal_tx_collector.ts +9 -13
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/slow_tx_collection.ts +8 -9
- package/src/services/tx_collection/tx_collection.ts +5 -6
- package/src/services/tx_collection/tx_collection_sink.ts +15 -29
- package/src/services/tx_collection/tx_source.ts +28 -8
- package/src/services/tx_file_store/tx_file_store.ts +1 -1
- package/src/services/tx_provider.ts +2 -2
- package/src/test-helpers/make-test-p2p-clients.ts +3 -3
- package/src/test-helpers/mock-pubsub.ts +47 -11
- package/src/test-helpers/reqresp-nodes.ts +7 -8
- package/src/test-helpers/testbench-utils.ts +33 -6
- package/src/testbench/p2p_client_testbench_worker.ts +92 -29
- package/src/testbench/worker_client_manager.ts +68 -6
- package/src/util.ts +8 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/src/mem_pools/tx_pool/README.md +0 -270
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
- package/src/services/reqresp/protocols/block.ts +0 -37
|
@@ -6,7 +6,8 @@ import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
|
|
|
6
6
|
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
7
|
import { TxArchive } from './archive/index.js';
|
|
8
8
|
import { DeletedPool } from './deleted_pool.js';
|
|
9
|
-
import { EvictionManager, FeePayerBalanceEvictionRule, FeePayerBalancePreAddRule, InvalidTxsAfterMiningRule, InvalidTxsAfterReorgRule, LowPriorityEvictionRule, LowPriorityPreAddRule, NullifierConflictRule } from './eviction/index.js';
|
|
9
|
+
import { EvictionManager, FeePayerBalanceEvictionRule, FeePayerBalancePreAddRule, InsufficientFeePerGasEvictionRule, InvalidTxsAfterMiningRule, InvalidTxsAfterReorgRule, LowPriorityEvictionRule, LowPriorityPreAddRule, NullifierConflictRule, TxPoolRejectionCode } from './eviction/index.js';
|
|
10
|
+
import { TxPoolV2Instrumentation } from './instrumentation.js';
|
|
10
11
|
import { DEFAULT_TX_POOL_V2_CONFIG } from './interfaces.js';
|
|
11
12
|
import { buildTxMetaData, checkNullifierConflict } from './tx_metadata.js';
|
|
12
13
|
import { TxPoolIndices } from './tx_pool_indices.js';
|
|
@@ -22,6 +23,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
22
23
|
#l2BlockSource;
|
|
23
24
|
#worldStateSynchronizer;
|
|
24
25
|
#createTxValidator;
|
|
26
|
+
#checkAllowedSetupCalls;
|
|
25
27
|
// === In-Memory Indices ===
|
|
26
28
|
#indices = new TxPoolIndices();
|
|
27
29
|
// === Config & Services ===
|
|
@@ -30,14 +32,17 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
30
32
|
#deletedPool;
|
|
31
33
|
#evictionManager;
|
|
32
34
|
#dateProvider;
|
|
35
|
+
#instrumentation;
|
|
36
|
+
#evictedTxHashes = new Set();
|
|
33
37
|
#log;
|
|
34
38
|
#callbacks;
|
|
35
|
-
constructor(store, archiveStore, deps, callbacks, config = {}, dateProvider, log){
|
|
39
|
+
constructor(store, archiveStore, deps, callbacks, telemetry, config = {}, dateProvider, log){
|
|
36
40
|
this.#store = store;
|
|
37
41
|
this.#txsDB = store.openMap('txs');
|
|
38
42
|
this.#l2BlockSource = deps.l2BlockSource;
|
|
39
43
|
this.#worldStateSynchronizer = deps.worldStateSynchronizer;
|
|
40
44
|
this.#createTxValidator = deps.createTxValidator;
|
|
45
|
+
this.#checkAllowedSetupCalls = deps.checkAllowedSetupCalls;
|
|
41
46
|
this.#config = {
|
|
42
47
|
...DEFAULT_TX_POOL_V2_CONFIG,
|
|
43
48
|
...config
|
|
@@ -45,6 +50,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
45
50
|
this.#archive = new TxArchive(archiveStore, this.#config.archivedTxLimit, log);
|
|
46
51
|
this.#deletedPool = new DeletedPool(store, this.#txsDB, log);
|
|
47
52
|
this.#dateProvider = dateProvider;
|
|
53
|
+
this.#instrumentation = new TxPoolV2Instrumentation(telemetry, ()=>this.#indices.getTotalMetadataBytes());
|
|
48
54
|
this.#log = log;
|
|
49
55
|
this.#callbacks = callbacks;
|
|
50
56
|
// Setup eviction manager with rules
|
|
@@ -57,6 +63,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
57
63
|
}));
|
|
58
64
|
// Post-event eviction rules (run after events to check ALL pending txs)
|
|
59
65
|
this.#evictionManager.registerRule(new InvalidTxsAfterMiningRule());
|
|
66
|
+
this.#evictionManager.registerRule(new InsufficientFeePerGasEvictionRule(deps.blockMinFeesProvider));
|
|
60
67
|
this.#evictionManager.registerRule(new InvalidTxsAfterReorgRule(deps.worldStateSynchronizer));
|
|
61
68
|
this.#evictionManager.registerRule(new FeePayerBalanceEvictionRule(deps.worldStateSynchronizer));
|
|
62
69
|
// LowPriorityEvictionRule handles cases where txs become pending via prepareForSlot (unprotect)
|
|
@@ -122,8 +129,35 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
122
129
|
const accepted = [];
|
|
123
130
|
const ignored = [];
|
|
124
131
|
const rejected = [];
|
|
132
|
+
const errors = new Map();
|
|
125
133
|
const acceptedPending = new Set();
|
|
134
|
+
// Phase 1: Pre-compute all throwable I/O outside the transaction.
|
|
135
|
+
// If any pre-computation throws, the entire call fails before mutations happen.
|
|
136
|
+
const precomputed = new Map();
|
|
137
|
+
const validator = await this.#createTxValidator();
|
|
138
|
+
for (const tx of txs){
|
|
139
|
+
const txHash = tx.getTxHash();
|
|
140
|
+
const txHashStr = txHash.toString();
|
|
141
|
+
const meta = await buildTxMetaData(tx);
|
|
142
|
+
const minedBlockId = await this.#getMinedBlockId(txHash);
|
|
143
|
+
// Validate non-mined txs (mined and pre-protected txs bypass validation inside the transaction)
|
|
144
|
+
let isValid = true;
|
|
145
|
+
if (!minedBlockId) {
|
|
146
|
+
isValid = await this.#validateMeta(meta, validator);
|
|
147
|
+
}
|
|
148
|
+
precomputed.set(txHashStr, {
|
|
149
|
+
meta,
|
|
150
|
+
minedBlockId,
|
|
151
|
+
isValid
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Phase 2: Apply mutations inside the transaction using only pre-computed results,
|
|
155
|
+
// in-memory reads, and buffered DB writes. Nothing here can throw an unhandled exception.
|
|
126
156
|
const poolAccess = this.#createPreAddPoolAccess();
|
|
157
|
+
const preAddContext = opts.feeComparisonOnly !== undefined ? {
|
|
158
|
+
feeComparisonOnly: opts.feeComparisonOnly,
|
|
159
|
+
priceBumpPercentage: this.#config.priceBumpPercentage
|
|
160
|
+
} : undefined;
|
|
127
161
|
await this.#store.transactionAsync(async ()=>{
|
|
128
162
|
for (const tx of txs){
|
|
129
163
|
const txHash = tx.getTxHash();
|
|
@@ -133,85 +167,112 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
133
167
|
ignored.push(txHash);
|
|
134
168
|
continue;
|
|
135
169
|
}
|
|
136
|
-
|
|
137
|
-
const minedBlockId = await this.#getMinedBlockId(txHash);
|
|
170
|
+
const { meta, minedBlockId, isValid } = precomputed.get(txHashStr);
|
|
138
171
|
const preProtectedSlot = this.#indices.getProtectionSlot(txHashStr);
|
|
139
172
|
if (minedBlockId) {
|
|
140
173
|
// Already mined - add directly (protection already set if pre-protected)
|
|
141
174
|
await this.#addTx(tx, {
|
|
142
175
|
mined: minedBlockId
|
|
143
|
-
}, opts);
|
|
176
|
+
}, opts, meta);
|
|
144
177
|
accepted.push(txHash);
|
|
145
178
|
} else if (preProtectedSlot !== undefined) {
|
|
146
179
|
// Pre-protected and not mined - add as protected (bypass validation)
|
|
147
180
|
await this.#addTx(tx, {
|
|
148
181
|
protected: preProtectedSlot
|
|
149
|
-
}, opts);
|
|
182
|
+
}, opts, meta);
|
|
150
183
|
accepted.push(txHash);
|
|
184
|
+
} else if (!isValid) {
|
|
185
|
+
// Failed pre-computed validation
|
|
186
|
+
rejected.push(txHash);
|
|
151
187
|
} else {
|
|
152
|
-
// Regular pending tx -
|
|
153
|
-
const result = await this.#tryAddRegularPendingTx(tx, opts, poolAccess, acceptedPending, ignored);
|
|
188
|
+
// Regular pending tx - run pre-add rules using pre-computed metadata
|
|
189
|
+
const result = await this.#tryAddRegularPendingTx(tx, meta, opts, poolAccess, acceptedPending, ignored, errors, preAddContext);
|
|
154
190
|
if (result.status === 'accepted') {
|
|
155
191
|
acceptedPending.add(txHashStr);
|
|
156
|
-
} else if (result.status === 'rejected') {
|
|
157
|
-
rejected.push(txHash);
|
|
158
192
|
} else {
|
|
159
193
|
ignored.push(txHash);
|
|
160
194
|
}
|
|
161
195
|
}
|
|
162
196
|
}
|
|
197
|
+
// Run post-add eviction rules for pending txs (inside transaction for atomicity)
|
|
198
|
+
if (acceptedPending.size > 0) {
|
|
199
|
+
const feePayers = Array.from(acceptedPending).map((txHash)=>this.#indices.getMetadata(txHash).feePayer);
|
|
200
|
+
const uniqueFeePayers = new Set(feePayers);
|
|
201
|
+
await this.#evictionManager.evictAfterNewTxs(Array.from(acceptedPending), [
|
|
202
|
+
...uniqueFeePayers
|
|
203
|
+
]);
|
|
204
|
+
}
|
|
163
205
|
});
|
|
164
206
|
// Build final accepted list for pending txs (excludes intra-batch evictions)
|
|
165
207
|
for (const txHashStr of acceptedPending){
|
|
166
208
|
accepted.push(TxHash.fromString(txHashStr));
|
|
167
209
|
}
|
|
168
|
-
//
|
|
169
|
-
if (
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
]);
|
|
210
|
+
// Record metrics
|
|
211
|
+
if (ignored.length > 0) {
|
|
212
|
+
this.#instrumentation.recordIgnored(ignored.length);
|
|
213
|
+
}
|
|
214
|
+
if (rejected.length > 0) {
|
|
215
|
+
this.#instrumentation.recordRejected(rejected.length);
|
|
175
216
|
}
|
|
176
217
|
return {
|
|
177
218
|
accepted,
|
|
178
219
|
ignored,
|
|
179
|
-
rejected
|
|
220
|
+
rejected,
|
|
221
|
+
...errors.size > 0 ? {
|
|
222
|
+
errors
|
|
223
|
+
} : {}
|
|
180
224
|
};
|
|
181
225
|
}
|
|
182
|
-
/**
|
|
183
|
-
const
|
|
184
|
-
const txHashStr = txHash.toString();
|
|
185
|
-
// Build metadata and validate using metadata
|
|
186
|
-
const meta = await buildTxMetaData(tx);
|
|
187
|
-
if (!await this.#validateMeta(meta)) {
|
|
188
|
-
return {
|
|
189
|
-
status: 'rejected'
|
|
190
|
-
};
|
|
191
|
-
}
|
|
226
|
+
/** Adds a validated pending tx, running pre-add rules and evicting conflicts. */ async #tryAddRegularPendingTx(tx, precomputedMeta, opts, poolAccess, acceptedPending, ignored, errors, preAddContext) {
|
|
227
|
+
const txHashStr = tx.getTxHash().toString();
|
|
192
228
|
// Run pre-add rules
|
|
193
|
-
const preAddResult = await this.#evictionManager.runPreAddRules(
|
|
229
|
+
const preAddResult = await this.#evictionManager.runPreAddRules(precomputedMeta, poolAccess, preAddContext);
|
|
194
230
|
if (preAddResult.shouldIgnore) {
|
|
195
|
-
this.#log.debug(`Ignoring tx ${txHashStr}: ${preAddResult.reason}`);
|
|
231
|
+
this.#log.debug(`Ignoring tx ${txHashStr}: ${preAddResult.reason?.message ?? 'unknown reason'}`);
|
|
232
|
+
if (preAddResult.reason && preAddResult.reason.code !== TxPoolRejectionCode.INTERNAL_ERROR) {
|
|
233
|
+
errors.set(txHashStr, preAddResult.reason);
|
|
234
|
+
}
|
|
196
235
|
return {
|
|
197
236
|
status: 'ignored'
|
|
198
237
|
};
|
|
199
238
|
}
|
|
200
|
-
// Evict conflicts
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
239
|
+
// Evict conflicts, grouped by rule name for metrics
|
|
240
|
+
if (preAddResult.evictions && preAddResult.evictions.length > 0) {
|
|
241
|
+
const byReason = new Map();
|
|
242
|
+
for (const { txHash: evictHash, reason } of preAddResult.evictions){
|
|
243
|
+
const group = byReason.get(reason);
|
|
244
|
+
if (group) {
|
|
245
|
+
group.push(evictHash);
|
|
246
|
+
} else {
|
|
247
|
+
byReason.set(reason, [
|
|
248
|
+
evictHash
|
|
249
|
+
]);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
for (const [reason, hashes] of byReason){
|
|
253
|
+
await this.#evictTxs(hashes, reason);
|
|
211
254
|
}
|
|
255
|
+
for (const evictHashStr of preAddResult.txHashesToEvict){
|
|
256
|
+
this.#log.debug(`Evicted tx ${evictHashStr} due to higher-fee tx ${txHashStr}`, {
|
|
257
|
+
evictedTxHash: evictHashStr,
|
|
258
|
+
replacementTxHash: txHashStr
|
|
259
|
+
});
|
|
260
|
+
if (acceptedPending.has(evictHashStr)) {
|
|
261
|
+
// Evicted tx was from this batch - mark as ignored in result
|
|
262
|
+
acceptedPending.delete(evictHashStr);
|
|
263
|
+
ignored.push(TxHash.fromString(evictHashStr));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Randomly drop the transaction for testing purposes (report as accepted so it propagates)
|
|
268
|
+
if (this.#config.dropTransactionsProbability > 0 && Math.random() < this.#config.dropTransactionsProbability) {
|
|
269
|
+
this.#log.debug(`Dropping tx ${txHashStr} (simulated drop for testing)`);
|
|
270
|
+
return {
|
|
271
|
+
status: 'accepted'
|
|
272
|
+
};
|
|
212
273
|
}
|
|
213
274
|
// Add the transaction
|
|
214
|
-
await this.#addTx(tx, 'pending', opts);
|
|
275
|
+
await this.#addTx(tx, 'pending', opts, precomputedMeta);
|
|
215
276
|
return {
|
|
216
277
|
status: 'accepted'
|
|
217
278
|
};
|
|
@@ -220,38 +281,44 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
220
281
|
const txHashStr = tx.getTxHash().toString();
|
|
221
282
|
// Check if already in pool
|
|
222
283
|
if (this.#indices.has(txHashStr)) {
|
|
284
|
+
this.#log.verbose(`canAddPendingTx: tx ${txHashStr} already in pool`);
|
|
223
285
|
return 'ignored';
|
|
224
286
|
}
|
|
225
|
-
// Build metadata and
|
|
287
|
+
// Build metadata and check pre-add rules
|
|
226
288
|
const meta = await buildTxMetaData(tx);
|
|
227
|
-
const validationResult = await this.#validateMeta(meta, undefined, 'can add pending');
|
|
228
|
-
if (validationResult !== true) {
|
|
229
|
-
return 'rejected';
|
|
230
|
-
}
|
|
231
|
-
// Use pre-add rules
|
|
232
289
|
const poolAccess = this.#createPreAddPoolAccess();
|
|
233
290
|
const preAddResult = await this.#evictionManager.runPreAddRules(meta, poolAccess);
|
|
234
|
-
|
|
291
|
+
if (preAddResult.shouldIgnore) {
|
|
292
|
+
this.#log.verbose(`canAddPendingTx: tx ${txHashStr} ignored by pre-add rule`, {
|
|
293
|
+
reason: preAddResult.reason?.message ?? 'no reason provided'
|
|
294
|
+
});
|
|
295
|
+
return 'ignored';
|
|
296
|
+
}
|
|
297
|
+
return 'accepted';
|
|
235
298
|
}
|
|
236
299
|
async addProtectedTxs(txs, block, opts) {
|
|
237
300
|
const slotNumber = block.globalVariables.slotNumber;
|
|
301
|
+
// Precompute setup-call allow-list flags outside the store transaction
|
|
302
|
+
const allowedFlags = await Promise.all(txs.map((tx)=>this.#checkAllowedSetupCalls(tx)));
|
|
238
303
|
await this.#store.transactionAsync(async ()=>{
|
|
239
|
-
for
|
|
304
|
+
for(let i = 0; i < txs.length; i++){
|
|
305
|
+
const tx = txs[i];
|
|
240
306
|
const txHash = tx.getTxHash();
|
|
241
307
|
const txHashStr = txHash.toString();
|
|
242
308
|
const isNew = !this.#indices.has(txHashStr);
|
|
243
309
|
const minedBlockId = await this.#getMinedBlockId(txHash);
|
|
244
310
|
if (isNew) {
|
|
311
|
+
const meta = await buildTxMetaData(tx, allowedFlags[i]);
|
|
245
312
|
// New tx - add as mined or protected (callback emitted by #addTx)
|
|
246
313
|
if (minedBlockId) {
|
|
247
314
|
await this.#addTx(tx, {
|
|
248
315
|
mined: minedBlockId
|
|
249
|
-
}, opts);
|
|
316
|
+
}, opts, meta);
|
|
250
317
|
this.#indices.setProtection(txHashStr, slotNumber);
|
|
251
318
|
} else {
|
|
252
319
|
await this.#addTx(tx, {
|
|
253
320
|
protected: slotNumber
|
|
254
|
-
}, opts);
|
|
321
|
+
}, opts, meta);
|
|
255
322
|
}
|
|
256
323
|
} else {
|
|
257
324
|
// Existing tx - update protection and mined status
|
|
@@ -264,20 +331,53 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
264
331
|
}
|
|
265
332
|
});
|
|
266
333
|
}
|
|
267
|
-
protectTxs(txHashes, block) {
|
|
334
|
+
async protectTxs(txHashes, block) {
|
|
268
335
|
const slotNumber = block.globalVariables.slotNumber;
|
|
269
336
|
const missing = [];
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
337
|
+
let softDeletedHits = 0;
|
|
338
|
+
let missingPreviouslyEvicted = 0;
|
|
339
|
+
await this.#store.transactionAsync(async ()=>{
|
|
340
|
+
for (const txHash of txHashes){
|
|
341
|
+
const txHashStr = txHash.toString();
|
|
342
|
+
if (this.#indices.has(txHashStr)) {
|
|
343
|
+
// Update protection for existing tx
|
|
344
|
+
this.#indices.updateProtection(txHashStr, slotNumber);
|
|
345
|
+
} else if (this.#deletedPool.isSoftDeleted(txHashStr)) {
|
|
346
|
+
// Resurrect soft-deleted tx as protected
|
|
347
|
+
const buffer = await this.#txsDB.getAsync(txHashStr);
|
|
348
|
+
if (buffer) {
|
|
349
|
+
const tx = Tx.fromBuffer(buffer);
|
|
350
|
+
await this.#addTx(tx, {
|
|
351
|
+
protected: slotNumber
|
|
352
|
+
});
|
|
353
|
+
softDeletedHits++;
|
|
354
|
+
} else {
|
|
355
|
+
// Data missing despite soft-delete flag — treat as truly missing
|
|
356
|
+
this.#indices.setProtection(txHashStr, slotNumber);
|
|
357
|
+
missing.push(txHash);
|
|
358
|
+
}
|
|
359
|
+
} else {
|
|
360
|
+
// Truly missing — pre-record protection for tx we don't have yet
|
|
361
|
+
this.#indices.setProtection(txHashStr, slotNumber);
|
|
362
|
+
missing.push(txHash);
|
|
363
|
+
if (this.#evictedTxHashes.has(txHashStr)) {
|
|
364
|
+
missingPreviouslyEvicted++;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
279
367
|
}
|
|
368
|
+
});
|
|
369
|
+
// Record metrics
|
|
370
|
+
if (softDeletedHits > 0) {
|
|
371
|
+
this.#instrumentation.recordSoftDeletedHits(softDeletedHits);
|
|
280
372
|
}
|
|
373
|
+
if (missing.length > 0) {
|
|
374
|
+
this.#log.debug(`protectTxs missing tx hashes: ${missing.map((h)=>h.toString()).join(', ')}`);
|
|
375
|
+
this.#instrumentation.recordMissingOnProtect(missing.length);
|
|
376
|
+
}
|
|
377
|
+
if (missingPreviouslyEvicted > 0) {
|
|
378
|
+
this.#instrumentation.recordMissingPreviouslyEvicted(missingPreviouslyEvicted);
|
|
379
|
+
}
|
|
380
|
+
this.#log.info(`Protected ${txHashes.length} txs, missing: ${missing.length}, soft-deleted hits: ${softDeletedHits}`);
|
|
281
381
|
return missing;
|
|
282
382
|
}
|
|
283
383
|
async addMinedTxs(txs, block, opts) {
|
|
@@ -316,47 +416,53 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
316
416
|
found.push(meta);
|
|
317
417
|
}
|
|
318
418
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
419
|
+
await this.#store.transactionAsync(async ()=>{
|
|
420
|
+
// Step 4: Mark txs as mined (only those we have in the pool)
|
|
421
|
+
for (const meta of found){
|
|
422
|
+
this.#indices.markAsMined(meta, blockId);
|
|
423
|
+
await this.#deletedPool.clearIfMinedHigher(meta.txHash, blockId.number);
|
|
424
|
+
}
|
|
425
|
+
// Step 5: Run post-event eviction rules (inside transaction for atomicity)
|
|
426
|
+
await this.#evictionManager.evictAfterNewBlock(block.header, nullifiers, feePayers);
|
|
427
|
+
});
|
|
428
|
+
if (found.length > 0) {
|
|
429
|
+
this.#callbacks.onTxsMined(found.map((m)=>m.txHash));
|
|
323
430
|
}
|
|
324
|
-
// Step 5: Run eviction rules (remove pending txs with conflicting nullifiers/expired timestamps)
|
|
325
|
-
await this.#evictionManager.evictAfterNewBlock(block.header, nullifiers, feePayers);
|
|
326
431
|
this.#log.info(`Marked ${found.length} txs as mined in block ${blockId.number}`);
|
|
327
432
|
}
|
|
328
433
|
async prepareForSlot(slotNumber) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
434
|
+
await this.#store.transactionAsync(async ()=>{
|
|
435
|
+
// Step 0: Clean up slot-deleted txs from previous slots
|
|
436
|
+
await this.#deletedPool.cleanupSlotDeleted(slotNumber);
|
|
437
|
+
// Step 1: Find expired protected txs
|
|
438
|
+
const expiredProtected = this.#indices.findExpiredProtectedTxs(slotNumber);
|
|
439
|
+
// Step 2: Clear protection for all expired entries (including those without metadata)
|
|
440
|
+
this.#indices.clearProtection(expiredProtected);
|
|
441
|
+
// Step 3: Filter to only txs that have metadata and are not mined
|
|
442
|
+
const txsToRestore = this.#indices.filterRestorable(expiredProtected);
|
|
443
|
+
if (txsToRestore.length === 0) {
|
|
444
|
+
this.#log.debug(`Preparing for slot ${slotNumber}, no txs to unprotect`);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
this.#log.info(`Preparing for slot ${slotNumber}: unprotecting ${txsToRestore.length} txs`);
|
|
448
|
+
// Step 4: Validate for pending pool
|
|
449
|
+
const { valid, invalid } = await this.#revalidateMetadata(txsToRestore, 'during prepareForSlot');
|
|
450
|
+
// Step 5: Resolve nullifier conflicts and add winners to pending indices
|
|
451
|
+
const { added, toEvict } = this.#applyNullifierConflictResolution(valid);
|
|
452
|
+
// Step 6: Delete invalid txs and evict conflict losers
|
|
453
|
+
await this.#deleteTxsBatch(invalid);
|
|
454
|
+
await this.#evictTxs(toEvict, 'NullifierConflict');
|
|
455
|
+
// Step 7: Run eviction rules (enforce pool size limit)
|
|
456
|
+
if (added.length > 0) {
|
|
457
|
+
const feePayers = added.map((meta)=>meta.feePayer);
|
|
458
|
+
const uniqueFeePayers = new Set(feePayers);
|
|
459
|
+
await this.#evictionManager.evictAfterNewTxs(added.map((m)=>m.txHash), [
|
|
460
|
+
...uniqueFeePayers
|
|
461
|
+
]);
|
|
462
|
+
}
|
|
463
|
+
});
|
|
358
464
|
}
|
|
359
|
-
async handlePrunedBlocks(latestBlock) {
|
|
465
|
+
async handlePrunedBlocks(latestBlock, options) {
|
|
360
466
|
// Step 1: Find transactions mined after the prune point
|
|
361
467
|
const txsToUnmine = this.#indices.findTxsMinedAfter(latestBlock.number);
|
|
362
468
|
if (txsToUnmine.length === 0) {
|
|
@@ -364,40 +470,48 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
364
470
|
return;
|
|
365
471
|
}
|
|
366
472
|
this.#log.info(`Handling prune to block ${latestBlock.number}: un-mining ${txsToUnmine.length} txs`);
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
473
|
+
await this.#store.transactionAsync(async ()=>{
|
|
474
|
+
// Step 2: Mark ALL un-mined txs with their original mined block number
|
|
475
|
+
// This ensures they get soft-deleted if removed later, and only hard-deleted
|
|
476
|
+
// when their original mined block is finalized
|
|
477
|
+
await this.#deletedPool.markFromPrunedBlock(txsToUnmine.map((m)=>({
|
|
478
|
+
txHash: m.txHash,
|
|
479
|
+
minedAtBlock: BlockNumber(m.minedL2BlockId.number)
|
|
480
|
+
})));
|
|
481
|
+
// Step 3: Unmine - clear mined status from metadata
|
|
482
|
+
for (const meta of txsToUnmine){
|
|
483
|
+
this.#indices.markAsUnmined(meta);
|
|
484
|
+
}
|
|
485
|
+
// If deleteAllTxs is set (epoch prune), delete all un-mined txs and return early
|
|
486
|
+
if (options?.deleteAllTxs) {
|
|
487
|
+
const allTxHashes = txsToUnmine.map((m)=>m.txHash);
|
|
488
|
+
await this.#deleteTxsBatch(allTxHashes);
|
|
489
|
+
this.#log.info(`Handled prune to block ${latestBlock.number} with deleteAllTxs: deleted ${allTxHashes.length} txs`);
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
// Step 4: Filter out protected txs (they'll be handled by prepareForSlot)
|
|
493
|
+
const unprotectedTxs = this.#indices.filterUnprotected(txsToUnmine);
|
|
494
|
+
// Step 5: Validate for pending pool
|
|
495
|
+
const { valid, invalid } = await this.#revalidateMetadata(unprotectedTxs, 'during handlePrunedBlocks');
|
|
496
|
+
// Step 6: Resolve nullifier conflicts and add winners to pending indices
|
|
497
|
+
const { toEvict } = this.#applyNullifierConflictResolution(valid);
|
|
498
|
+
// Step 7: Delete invalid txs and evict conflict losers
|
|
499
|
+
await this.#deleteTxsBatch(invalid);
|
|
500
|
+
await this.#evictTxs(toEvict, 'NullifierConflict');
|
|
501
|
+
this.#log.info(`Handled prune to block ${latestBlock.number}: ${valid.length} txs restored to pending, ${invalid.length} invalid, ${toEvict.length} evicted due to nullifier conflicts`, {
|
|
502
|
+
txHashesRestored: valid.map((m)=>m.txHash),
|
|
503
|
+
txHashesInvalid: invalid,
|
|
504
|
+
txHashesEvicted: toEvict
|
|
505
|
+
});
|
|
506
|
+
// Step 8: Run eviction rules for ALL pending txs (not just restored ones)
|
|
507
|
+
// This handles cases like existing pending txs with invalid fee payer balances
|
|
508
|
+
await this.#evictionManager.evictAfterChainPrune(latestBlock.number);
|
|
393
509
|
});
|
|
394
|
-
// Step 8: Run eviction rules for ALL pending txs (not just restored ones)
|
|
395
|
-
// This handles cases like existing pending txs with invalid fee payer balances
|
|
396
|
-
await this.#evictionManager.evictAfterChainPrune(latestBlock.number);
|
|
397
510
|
}
|
|
398
511
|
async handleFailedExecution(txHashes) {
|
|
399
|
-
|
|
400
|
-
|
|
512
|
+
await this.#store.transactionAsync(async ()=>{
|
|
513
|
+
await this.#deleteTxsBatch(txHashes.map((h)=>h.toString()));
|
|
514
|
+
});
|
|
401
515
|
this.#log.info(`Deleted ${txHashes.length} failed txs`, {
|
|
402
516
|
txHashes: txHashes.map((h)=>h.toString())
|
|
403
517
|
});
|
|
@@ -406,24 +520,26 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
406
520
|
const blockNumber = block.globalVariables.blockNumber;
|
|
407
521
|
// Step 1: Find mined txs at or before finalized block
|
|
408
522
|
const minedTxsToFinalize = this.#indices.findTxsMinedAtOrBefore(blockNumber);
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
const
|
|
414
|
-
|
|
415
|
-
|
|
523
|
+
await this.#store.transactionAsync(async ()=>{
|
|
524
|
+
// Step 2: Collect mined txs for archiving (before deletion)
|
|
525
|
+
const txsToArchive = [];
|
|
526
|
+
if (this.#archive.isEnabled()) {
|
|
527
|
+
for (const txHashStr of minedTxsToFinalize){
|
|
528
|
+
const buffer = await this.#txsDB.getAsync(txHashStr);
|
|
529
|
+
if (buffer) {
|
|
530
|
+
txsToArchive.push(Tx.fromBuffer(buffer));
|
|
531
|
+
}
|
|
416
532
|
}
|
|
417
533
|
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
}
|
|
534
|
+
// Step 3: Delete mined txs from active pool
|
|
535
|
+
await this.#deleteTxsBatch(minedTxsToFinalize);
|
|
536
|
+
// Step 4: Finalize soft-deleted txs
|
|
537
|
+
await this.#deletedPool.finalizeBlock(blockNumber);
|
|
538
|
+
// Step 5: Archive mined txs
|
|
539
|
+
if (txsToArchive.length > 0) {
|
|
540
|
+
await this.#archive.archiveTxs(txsToArchive);
|
|
541
|
+
}
|
|
542
|
+
});
|
|
427
543
|
if (minedTxsToFinalize.length > 0) {
|
|
428
544
|
this.#log.info(`Finalized ${minedTxsToFinalize.length} mined txs from blocks up to ${blockNumber}`, {
|
|
429
545
|
txHashes: minedTxsToFinalize
|
|
@@ -528,7 +644,10 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
528
644
|
}
|
|
529
645
|
// === Metrics ===
|
|
530
646
|
countTxs() {
|
|
531
|
-
return
|
|
647
|
+
return {
|
|
648
|
+
...this.#indices.countTxs(),
|
|
649
|
+
softDeleted: this.#deletedPool.getSoftDeletedCount()
|
|
650
|
+
};
|
|
532
651
|
}
|
|
533
652
|
// ============================================================================
|
|
534
653
|
// PRIVATE HELPERS - Transaction Management
|
|
@@ -536,9 +655,9 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
536
655
|
/**
|
|
537
656
|
* Adds a new transaction to the pool with the specified state.
|
|
538
657
|
* Emits onTxsAdded callback immediately after DB write.
|
|
539
|
-
*/ async #addTx(tx, state, opts = {}) {
|
|
658
|
+
*/ async #addTx(tx, state, opts = {}, precomputedMeta) {
|
|
540
659
|
const txHashStr = tx.getTxHash().toString();
|
|
541
|
-
const meta = await buildTxMetaData(tx);
|
|
660
|
+
const meta = precomputedMeta ?? await buildTxMetaData(tx);
|
|
542
661
|
meta.receivedAt = this.#dateProvider.now();
|
|
543
662
|
await this.#txsDB.set(txHashStr, tx.toBuffer());
|
|
544
663
|
await this.#deletedPool.clearSoftDeleted(txHashStr);
|
|
@@ -554,9 +673,11 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
554
673
|
this.#indices.addMined(meta);
|
|
555
674
|
}
|
|
556
675
|
const stateStr = typeof state === 'string' ? state : Object.keys(state)[0];
|
|
557
|
-
this.#log.
|
|
676
|
+
this.#log.debug(`Added tx ${txHashStr} as ${stateStr}`, {
|
|
558
677
|
eventName: 'tx-added-to-pool',
|
|
559
|
-
|
|
678
|
+
txHash: txHashStr,
|
|
679
|
+
state: stateStr,
|
|
680
|
+
source: opts.source
|
|
560
681
|
});
|
|
561
682
|
return meta;
|
|
562
683
|
}
|
|
@@ -579,6 +700,28 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
579
700
|
await this.#deleteTx(txHashStr);
|
|
580
701
|
}
|
|
581
702
|
}
|
|
703
|
+
/** Evicts transactions: records eviction metric with reason, caches hashes, then deletes. */ async #evictTxs(txHashes, reason) {
|
|
704
|
+
if (txHashes.length === 0) {
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
this.#instrumentation.recordEvictions(txHashes.length, reason);
|
|
708
|
+
for (const txHashStr of txHashes){
|
|
709
|
+
this.#log.debug(`Evicting tx ${txHashStr}`, {
|
|
710
|
+
txHash: txHashStr,
|
|
711
|
+
reason
|
|
712
|
+
});
|
|
713
|
+
this.#addToEvictedCache(txHashStr);
|
|
714
|
+
}
|
|
715
|
+
await this.#deleteTxsBatch(txHashes);
|
|
716
|
+
}
|
|
717
|
+
/** Adds a tx hash to the bounded evicted cache, evicting the oldest entry if at capacity. */ #addToEvictedCache(txHashStr) {
|
|
718
|
+
if (this.#evictedTxHashes.size >= this.#config.evictedTxCacheSize) {
|
|
719
|
+
// FIFO eviction: remove the first (oldest) entry
|
|
720
|
+
const oldest = this.#evictedTxHashes.values().next().value;
|
|
721
|
+
this.#evictedTxHashes.delete(oldest);
|
|
722
|
+
}
|
|
723
|
+
this.#evictedTxHashes.add(txHashStr);
|
|
724
|
+
}
|
|
582
725
|
// ============================================================================
|
|
583
726
|
// PRIVATE HELPERS - Validation & Conflict Resolution
|
|
584
727
|
// ============================================================================
|
|
@@ -669,7 +812,8 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
669
812
|
}
|
|
670
813
|
try {
|
|
671
814
|
const tx = Tx.fromBuffer(buffer);
|
|
672
|
-
const
|
|
815
|
+
const allowedSetupCalls = await this.#checkAllowedSetupCalls(tx);
|
|
816
|
+
const meta = await buildTxMetaData(tx, allowedSetupCalls);
|
|
673
817
|
loaded.push({
|
|
674
818
|
tx,
|
|
675
819
|
meta
|
|
@@ -717,7 +861,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
717
861
|
if (preAddResult.shouldIgnore) {
|
|
718
862
|
// Transaction rejected - mark for deletion from DB
|
|
719
863
|
rejected.push(meta.txHash);
|
|
720
|
-
this.#log.debug(`Rejected tx ${meta.txHash} during rebuild: ${preAddResult.reason}`);
|
|
864
|
+
this.#log.debug(`Rejected tx ${meta.txHash} during rebuild: ${preAddResult.reason?.message ?? 'unknown reason'}`);
|
|
721
865
|
continue;
|
|
722
866
|
}
|
|
723
867
|
// Evict any conflicting txs identified by pre-add rules
|
|
@@ -753,7 +897,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
|
|
|
753
897
|
getFeePayerPendingTxs: (feePayer)=>this.#indices.getFeePayerPendingTxs(feePayer),
|
|
754
898
|
getPendingTxCount: ()=>this.#indices.getPendingTxCount(),
|
|
755
899
|
getLowestPriorityPending: (limit)=>this.#indices.getLowestPriorityPending(limit),
|
|
756
|
-
deleteTxs: (txHashes)=>this.#
|
|
900
|
+
deleteTxs: (txHashes, reason)=>this.#evictTxs(txHashes, reason ?? 'unknown')
|
|
757
901
|
};
|
|
758
902
|
}
|
|
759
903
|
#createPreAddPoolAccess() {
|