@aztec/p2p 0.0.1-commit.993d52e → 0.0.1-commit.9a89641
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 +34 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +120 -73
- package/dest/config.d.ts +160 -110
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +139 -49
- 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 +274 -197
- 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 +12 -5
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +38 -17
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.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/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/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 +17 -8
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
- 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 +12 -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 +23 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
- 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 +234 -120
- 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 +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 +25 -21
- 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 +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.js +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +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 +15 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +15 -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 +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 +46 -47
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +460 -320
- 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 +20 -3
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +83 -26
- 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 +94 -122
- 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 +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.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 +75 -216
- package/dest/services/service.d.ts +29 -12
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +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 +23 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +44 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +15 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +51 -16
- 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 +15 -16
- 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 +140 -106
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +241 -57
- 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 +329 -243
- 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 +27 -17
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +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/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/interfaces.ts +40 -8
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +35 -13
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +36 -7
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +260 -124
- 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 +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/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 +82 -27
- package/src/msg_validators/tx_validator/timestamp_validator.ts +1 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +126 -14
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +20 -39
- 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 +14 -0
- package/src/services/libp2p/libp2p_service.ts +508 -358
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +91 -25
- 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 +91 -137
- 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 +68 -24
- 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 +87 -260
- package/src/services/service.ts +35 -28
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +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 +46 -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 +64 -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,5 +1,4 @@
|
|
|
1
1
|
import type { Gossipable } from '@aztec/stdlib/p2p';
|
|
2
|
-
import type { Tx } from '@aztec/stdlib/tx';
|
|
3
2
|
import {
|
|
4
3
|
Attributes,
|
|
5
4
|
type BatchObservableResult,
|
|
@@ -73,7 +72,7 @@ export class PoolInstrumentation<PoolObject extends Gossipable> {
|
|
|
73
72
|
private defaultAttributes;
|
|
74
73
|
private meter: Meter;
|
|
75
74
|
|
|
76
|
-
private
|
|
75
|
+
private mempoolItemAddedTimestamp: Map<bigint | string, number> = new Map<bigint | string, number>();
|
|
77
76
|
|
|
78
77
|
constructor(
|
|
79
78
|
telemetry: TelemetryClient,
|
|
@@ -100,7 +99,11 @@ export class PoolInstrumentation<PoolObject extends Gossipable> {
|
|
|
100
99
|
|
|
101
100
|
this.addObjectCounter = createUpDownCounterWithDefault(this.meter, metricsLabels.itemsAdded);
|
|
102
101
|
|
|
103
|
-
this.minedDelay = this.meter.createHistogram(metricsLabels.itemMinedDelay
|
|
102
|
+
this.minedDelay = this.meter.createHistogram(metricsLabels.itemMinedDelay, {
|
|
103
|
+
advice: {
|
|
104
|
+
explicitBucketBoundaries: [100, 500, 1000, 5000, 10000, 30000, 60000, 300000, 600000, 1800000, 3600000],
|
|
105
|
+
},
|
|
106
|
+
});
|
|
104
107
|
|
|
105
108
|
this.meter.addBatchObservableCallback(this.observeStats, [this.objectsInMempool]);
|
|
106
109
|
}
|
|
@@ -113,27 +116,34 @@ export class PoolInstrumentation<PoolObject extends Gossipable> {
|
|
|
113
116
|
this.addObjectCounter.add(count);
|
|
114
117
|
}
|
|
115
118
|
|
|
116
|
-
public
|
|
117
|
-
|
|
118
|
-
for (const transaction of transactions) {
|
|
119
|
-
this.txAddedTimestamp.set(transaction.txHash.toBigInt(), timestamp);
|
|
120
|
-
}
|
|
119
|
+
public trackMempoolItemAdded(key: bigint | string): void {
|
|
120
|
+
this.mempoolItemAddedTimestamp.set(key, Date.now());
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
public
|
|
123
|
+
public trackMempoolItemRemoved(key: bigint | string): void {
|
|
124
124
|
const timestamp = Date.now();
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (addedAt
|
|
129
|
-
this.
|
|
130
|
-
if (addedAt < timestamp) {
|
|
131
|
-
this.minedDelay.record(timestamp - addedAt);
|
|
132
|
-
}
|
|
125
|
+
const addedAt = this.mempoolItemAddedTimestamp.get(key);
|
|
126
|
+
if (addedAt !== undefined) {
|
|
127
|
+
this.mempoolItemAddedTimestamp.delete(key);
|
|
128
|
+
if (addedAt < timestamp) {
|
|
129
|
+
this.minedDelay.record(timestamp - addedAt);
|
|
133
130
|
}
|
|
134
131
|
}
|
|
135
132
|
}
|
|
136
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Records a pre-computed pending-to-mined delay directly, bypassing the
|
|
136
|
+
* `mempoolItemAddedTimestamp` map. Used by the tx pool, which derives the
|
|
137
|
+
* delay from the persisted `receivedAt` on tx metadata at the mined
|
|
138
|
+
* transition — more accurate than the add/remove map (which also fires on
|
|
139
|
+
* eviction) and resilient to the caller not having tracked the add.
|
|
140
|
+
*/
|
|
141
|
+
public recordMinedDelay(delayMs: number): void {
|
|
142
|
+
if (delayMs > 0) {
|
|
143
|
+
this.minedDelay.record(delayMs);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
137
147
|
private observeStats = async (observer: BatchObservableResult) => {
|
|
138
148
|
const { itemCount } = await this.poolStats();
|
|
139
149
|
if (typeof itemCount === 'number') {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
|
|
3
|
-
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
4
3
|
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -70,7 +69,7 @@ export class TxArchive {
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
// Archive the transaction with stripped proof
|
|
73
|
-
const archivedTx =
|
|
72
|
+
const archivedTx = tx.withoutProof();
|
|
74
73
|
const txHash = tx.getTxHash().toString();
|
|
75
74
|
await this.#txs.set(txHash, archivedTx.toBuffer());
|
|
76
75
|
await this.#indices.set(headIdx, txHash);
|
|
@@ -101,13 +100,6 @@ export class TxArchive {
|
|
|
101
100
|
return head - tail;
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
/**
|
|
105
|
-
* Strips the proof from a transaction for archival.
|
|
106
|
-
*/
|
|
107
|
-
private stripProof(tx: Tx): Tx {
|
|
108
|
-
return new Tx(tx.txHash, tx.data, ChonkProof.empty(), tx.contractClassLogFields, tx.publicFunctionCalldata);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
103
|
private async getHeadIndex(): Promise<number> {
|
|
112
104
|
const entry = await this.#indices.entriesAsync({ limit: 1, reverse: true }).next();
|
|
113
105
|
return (entry.value?.[0] ?? -1) + 1;
|
|
@@ -52,8 +52,8 @@ export class DeletedPool {
|
|
|
52
52
|
/** Persisted map: txHash -> DeletedTxState (serialized) - for prune-based soft deletions */
|
|
53
53
|
#deletedTxsDB: AztecAsyncMap<string, Buffer>;
|
|
54
54
|
|
|
55
|
-
/**
|
|
56
|
-
#
|
|
55
|
+
/** Hard-deletes a tx's stored data (tx blob and proof) from the pool's stores. */
|
|
56
|
+
#deleteTxData: (txHash: string) => Promise<void>;
|
|
57
57
|
|
|
58
58
|
/** In-memory state for transactions from pruned blocks */
|
|
59
59
|
#state: Map<string, DeletedTxState> = new Map();
|
|
@@ -69,10 +69,10 @@ export class DeletedPool {
|
|
|
69
69
|
|
|
70
70
|
#log: Logger;
|
|
71
71
|
|
|
72
|
-
constructor(store: AztecAsyncKVStore,
|
|
72
|
+
constructor(store: AztecAsyncKVStore, deleteTxData: (txHash: string) => Promise<void>, log: Logger) {
|
|
73
73
|
this.#deletedTxsDB = store.openMap('deleted_txs');
|
|
74
74
|
this.#slotDeletedDB = store.openSet('slot_deleted_txs');
|
|
75
|
-
this.#
|
|
75
|
+
this.#deleteTxData = deleteTxData;
|
|
76
76
|
this.#log = log;
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -100,7 +100,7 @@ export class DeletedPool {
|
|
|
100
100
|
// Slot-deleted txs are stale after restart - hard-delete them all
|
|
101
101
|
let slotDeletedCount = 0;
|
|
102
102
|
for await (const txHash of this.#slotDeletedDB.entriesAsync()) {
|
|
103
|
-
await this.#
|
|
103
|
+
await this.#deleteTxData(txHash);
|
|
104
104
|
await this.#slotDeletedDB.delete(txHash);
|
|
105
105
|
slotDeletedCount++;
|
|
106
106
|
}
|
|
@@ -234,7 +234,7 @@ export class DeletedPool {
|
|
|
234
234
|
for (const txHash of toHardDelete) {
|
|
235
235
|
this.#state.delete(txHash);
|
|
236
236
|
await this.#deletedTxsDB.delete(txHash);
|
|
237
|
-
await this.#
|
|
237
|
+
await this.#deleteTxData(txHash);
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
this.#log.debug(`Finalized ${toHardDelete.length} txs from pruned blocks at block ${finalizedBlockNumber}`, {
|
|
@@ -266,7 +266,7 @@ export class DeletedPool {
|
|
|
266
266
|
for (const txHash of toHardDelete) {
|
|
267
267
|
this.#slotDeletedTxs.delete(txHash);
|
|
268
268
|
await this.#slotDeletedDB.delete(txHash);
|
|
269
|
-
await this.#
|
|
269
|
+
await this.#deleteTxData(txHash);
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
this.#log.debug(
|
|
@@ -29,7 +29,8 @@ export class FeePayerBalanceEvictionRule implements EvictionRule {
|
|
|
29
29
|
|
|
30
30
|
if (context.event === EvictionEvent.BLOCK_MINED) {
|
|
31
31
|
const blockNumber = context.block.getBlockNumber();
|
|
32
|
-
await
|
|
32
|
+
const blockHash = await context.block.hash();
|
|
33
|
+
await this.worldState.syncImmediate(blockNumber, blockHash);
|
|
33
34
|
return await this.evictForFeePayers(context.feePayers, this.worldState.getSnapshot(blockNumber), pool);
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -68,9 +69,7 @@ export class FeePayerBalanceEvictionRule implements EvictionRule {
|
|
|
68
69
|
|
|
69
70
|
if (txsToEvict.length > 0) {
|
|
70
71
|
await pool.deleteTxs(txsToEvict, this.name);
|
|
71
|
-
this.log.
|
|
72
|
-
txHashes: txsToEvict,
|
|
73
|
-
});
|
|
72
|
+
this.log.info(`Evicted ${txsToEvict.length} txs due to insufficient fee payer balance`, { txsToEvict });
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
return {
|
|
@@ -85,7 +84,7 @@ export class FeePayerBalanceEvictionRule implements EvictionRule {
|
|
|
85
84
|
publicStateSource: DatabasePublicStateSource,
|
|
86
85
|
pool: PoolOperations,
|
|
87
86
|
): Promise<string[]> {
|
|
88
|
-
const feePayer = AztecAddress.
|
|
87
|
+
const feePayer = AztecAddress.fromStringUnsafe(feePayerStr);
|
|
89
88
|
const initialBalance = (
|
|
90
89
|
await publicStateSource.storageRead(
|
|
91
90
|
ProtocolContractAddress.FeeJuice,
|
|
@@ -112,8 +112,9 @@ export class FeePayerBalancePreAddRule implements PreAddRule {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
if (txsToEvict.length > 0) {
|
|
115
|
-
this.log.
|
|
116
|
-
`Accepting tx ${incomingMeta.txHash}
|
|
115
|
+
this.log.info(
|
|
116
|
+
`Accepting tx ${incomingMeta.txHash} and evicting ${txsToEvict.length} lower-priority txs due to fee payer balance`,
|
|
117
|
+
{ txsToEvict },
|
|
117
118
|
);
|
|
118
119
|
}
|
|
119
120
|
|
|
@@ -21,6 +21,7 @@ export { FeePayerBalancePreAddRule } from './fee_payer_balance_pre_add_rule.js';
|
|
|
21
21
|
export { LowPriorityPreAddRule } from './low_priority_pre_add_rule.js';
|
|
22
22
|
|
|
23
23
|
// Post-event eviction rules
|
|
24
|
+
export { InsufficientFeePerGasEvictionRule } from './insufficient_fee_per_gas_eviction_rule.js';
|
|
24
25
|
export { InvalidTxsAfterMiningRule } from './invalid_txs_after_mining_rule.js';
|
|
25
26
|
export { InvalidTxsAfterReorgRule } from './invalid_txs_after_reorg_rule.js';
|
|
26
27
|
export { FeePayerBalanceEvictionRule } from './fee_payer_balance_eviction_rule.js';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
|
|
3
|
+
|
|
4
|
+
import type { EvictionContext, EvictionResult, EvictionRule, PoolOperations } from './interfaces.js';
|
|
5
|
+
import { EvictionEvent } from './interfaces.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Eviction rule that removes transactions whose maxFeesPerGas no longer meets
|
|
9
|
+
* the projected minimum gas fees after a new block is mined.
|
|
10
|
+
* Uses the BlockMinFeesProvider (forward-looking) to get the projected minimum fees.
|
|
11
|
+
* Only triggers on BLOCK_MINED events.
|
|
12
|
+
*/
|
|
13
|
+
export class InsufficientFeePerGasEvictionRule implements EvictionRule {
|
|
14
|
+
public readonly name = 'InsufficientFeePerGas';
|
|
15
|
+
|
|
16
|
+
private log = createLogger('p2p:tx_pool_v2:insufficient_fee_per_gas_eviction_rule');
|
|
17
|
+
|
|
18
|
+
constructor(private blockMinFeesProvider: BlockMinFeesProvider) {}
|
|
19
|
+
|
|
20
|
+
async evict(context: EvictionContext, pool: PoolOperations): Promise<EvictionResult> {
|
|
21
|
+
if (context.event !== EvictionEvent.BLOCK_MINED) {
|
|
22
|
+
return {
|
|
23
|
+
reason: 'insufficient_fee_per_gas',
|
|
24
|
+
success: true,
|
|
25
|
+
txsEvicted: [],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const gasFees = await this.blockMinFeesProvider.getCurrentMinFees();
|
|
31
|
+
const txsToEvict: string[] = [];
|
|
32
|
+
const pendingTxs = pool.getPendingTxs();
|
|
33
|
+
|
|
34
|
+
for (const meta of pendingTxs) {
|
|
35
|
+
const maxFeesPerGas = meta.data.constants.txContext.gasSettings.maxFeesPerGas;
|
|
36
|
+
if (maxFeesPerGas.feePerDaGas < gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < gasFees.feePerL2Gas) {
|
|
37
|
+
this.log.verbose(`Evicting tx ${meta.txHash} from pool due to insufficient fee per gas`, {
|
|
38
|
+
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
39
|
+
blockGasFees: gasFees.toInspect(),
|
|
40
|
+
});
|
|
41
|
+
txsToEvict.push(meta.txHash);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (txsToEvict.length > 0) {
|
|
46
|
+
this.log.info(`Evicted ${txsToEvict.length} txs with insufficient fee per gas after block mined`, {
|
|
47
|
+
txsToEvict,
|
|
48
|
+
});
|
|
49
|
+
await pool.deleteTxs(txsToEvict, this.name);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
reason: 'insufficient_fee_per_gas',
|
|
54
|
+
success: true,
|
|
55
|
+
txsEvicted: txsToEvict,
|
|
56
|
+
};
|
|
57
|
+
} catch (err) {
|
|
58
|
+
this.log.error('Failed to evict transactions with insufficient fee per gas', { err });
|
|
59
|
+
return {
|
|
60
|
+
reason: 'insufficient_fee_per_gas',
|
|
61
|
+
success: false,
|
|
62
|
+
txsEvicted: [],
|
|
63
|
+
error: new Error('Failed to evict txs with insufficient fee per gas', { cause: err }),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -50,12 +50,10 @@ export class InvalidTxsAfterMiningRule implements EvictionRule {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
if (txsToEvict.length > 0) {
|
|
53
|
-
this.log.info(`Evicted ${txsToEvict.length} invalid txs after block mined
|
|
53
|
+
this.log.info(`Evicted ${txsToEvict.length} invalid txs after block mined`, { txsToEvict });
|
|
54
54
|
await pool.deleteTxs(txsToEvict, this.name);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
this.log.debug(`Evicted ${txsToEvict.length} invalid txs after block mined`, { txHashes: txsToEvict });
|
|
58
|
-
|
|
59
57
|
return {
|
|
60
58
|
reason: 'block_mined_invalid_txs',
|
|
61
59
|
success: true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
3
3
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
5
5
|
|
|
@@ -33,14 +33,14 @@ export class InvalidTxsAfterReorgRule implements EvictionRule {
|
|
|
33
33
|
const pendingTxs = pool.getPendingTxs();
|
|
34
34
|
|
|
35
35
|
// Deduplicate block hashes to reduce redundant DB lookups
|
|
36
|
-
const uniqueBlockHashes = new Map<string,
|
|
36
|
+
const uniqueBlockHashes = new Map<string, BlockHash>();
|
|
37
37
|
const txsByBlockHash = new Map<string, string[]>();
|
|
38
38
|
|
|
39
39
|
for (const meta of pendingTxs) {
|
|
40
40
|
const blockHashStr = meta.anchorBlockHeaderHash;
|
|
41
41
|
if (!txsByBlockHash.has(blockHashStr)) {
|
|
42
42
|
txsByBlockHash.set(blockHashStr, []);
|
|
43
|
-
uniqueBlockHashes.set(blockHashStr,
|
|
43
|
+
uniqueBlockHashes.set(blockHashStr, BlockHash.fromString(blockHashStr));
|
|
44
44
|
}
|
|
45
45
|
txsByBlockHash.get(blockHashStr)!.push(meta.txHash);
|
|
46
46
|
}
|
|
@@ -72,17 +72,15 @@ export class InvalidTxsAfterReorgRule implements EvictionRule {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
if (txsToEvict.length > 0) {
|
|
75
|
-
this.log.info(`Evicting ${txsToEvict.length} txs from pool
|
|
75
|
+
this.log.info(`Evicting ${txsToEvict.length} txs from pool referencing pruned blocks`, { txsToEvict });
|
|
76
76
|
await pool.deleteTxs(txsToEvict, this.name);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
const keptCount = pendingTxs.length - txsToEvict.length;
|
|
80
80
|
if (keptCount > 0) {
|
|
81
|
-
this.log.
|
|
81
|
+
this.log.debug(`Kept ${keptCount} txs that did not reference pruned blocks`);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
this.log.debug(`Evicted ${txsToEvict.length} invalid txs after reorg`, { txHashes: txsToEvict });
|
|
85
|
-
|
|
86
84
|
return {
|
|
87
85
|
reason: 'reorg_invalid_txs',
|
|
88
86
|
success: true,
|
|
@@ -56,17 +56,16 @@ export class LowPriorityEvictionRule implements EvictionRule {
|
|
|
56
56
|
if (context.event === EvictionEvent.TXS_ADDED) {
|
|
57
57
|
const toEvictSet = new Set(txsToEvict);
|
|
58
58
|
const numNewTxsEvicted = context.newTxHashes.filter(newTxHash => toEvictSet.has(newTxHash)).length;
|
|
59
|
-
this.log.info(
|
|
59
|
+
this.log.info(
|
|
60
|
+
`Evicted ${txsToEvict.length} low priority txs, including ${numNewTxsEvicted} newly added txs`,
|
|
61
|
+
{ txsToEvict },
|
|
62
|
+
);
|
|
60
63
|
} else {
|
|
61
|
-
this.log.info(`Evicted ${txsToEvict.length} low priority txs after chain prune
|
|
64
|
+
this.log.info(`Evicted ${txsToEvict.length} low priority txs after chain prune`, { txsToEvict });
|
|
62
65
|
}
|
|
63
66
|
await pool.deleteTxs(txsToEvict, this.name);
|
|
64
67
|
}
|
|
65
68
|
|
|
66
|
-
this.log.debug(`Evicted ${txsToEvict.length} low priority txs`, {
|
|
67
|
-
txHashes: txsToEvict,
|
|
68
|
-
});
|
|
69
|
-
|
|
70
69
|
return {
|
|
71
70
|
reason: 'low_priority',
|
|
72
71
|
success: true,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
3
3
|
import type { L2Block, L2BlockId, L2BlockSource } from '@aztec/stdlib/block';
|
|
4
|
+
import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
|
|
4
5
|
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
5
6
|
import type { BlockHeader, Tx, TxHash, TxValidator } from '@aztec/stdlib/tx';
|
|
6
7
|
|
|
@@ -44,8 +45,15 @@ export type TxPoolV2Config = {
|
|
|
44
45
|
minTxPoolAgeMs: number;
|
|
45
46
|
/** Maximum number of evicted tx hashes to remember for metrics tracking */
|
|
46
47
|
evictedTxCacheSize: number;
|
|
48
|
+
/** The probability (0-1) that a transaction is discarded. 0 disables dropping. For testing purposes only. */
|
|
49
|
+
dropTransactionsProbability: number;
|
|
47
50
|
/** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
|
|
48
51
|
priceBumpPercentage: bigint;
|
|
52
|
+
/**
|
|
53
|
+
* Number of slots behind the finalized tip to keep finalized txs for before deleting them. 0 deletes
|
|
54
|
+
* at the finalized tip (default).
|
|
55
|
+
*/
|
|
56
|
+
keepFinalizedTxsForSlots: number;
|
|
49
57
|
};
|
|
50
58
|
|
|
51
59
|
/**
|
|
@@ -56,7 +64,9 @@ export const DEFAULT_TX_POOL_V2_CONFIG: TxPoolV2Config = {
|
|
|
56
64
|
archivedTxLimit: 0, // 0 = disabled
|
|
57
65
|
minTxPoolAgeMs: 2_000,
|
|
58
66
|
evictedTxCacheSize: 10_000,
|
|
67
|
+
dropTransactionsProbability: 0,
|
|
59
68
|
priceBumpPercentage: 10n,
|
|
69
|
+
keepFinalizedTxsForSlots: 0,
|
|
60
70
|
};
|
|
61
71
|
|
|
62
72
|
/**
|
|
@@ -69,6 +79,10 @@ export type TxPoolV2Dependencies = {
|
|
|
69
79
|
worldStateSynchronizer: WorldStateSynchronizer;
|
|
70
80
|
/** Factory that creates a validator for re-validating pool transactions using metadata */
|
|
71
81
|
createTxValidator: () => Promise<TxValidator<TxMetaData>>;
|
|
82
|
+
/** Checks whether a tx's setup-phase calls are on the allow list. Precomputed at receipt time. */
|
|
83
|
+
checkAllowedSetupCalls: (tx: Tx) => Promise<boolean>;
|
|
84
|
+
/** Provides projected minimum fees for the next block. Used by eviction rules instead of stale block header fees. */
|
|
85
|
+
blockMinFeesProvider: BlockMinFeesProvider;
|
|
72
86
|
};
|
|
73
87
|
|
|
74
88
|
/**
|
|
@@ -155,13 +169,24 @@ export interface TxPoolV2 extends TypedEventEmitter<TxPoolV2Events> {
|
|
|
155
169
|
handleMinedBlock(block: L2Block): Promise<void>;
|
|
156
170
|
|
|
157
171
|
/**
|
|
158
|
-
* Prepares the pool for a new slot
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
172
|
+
* Prepares the pool for a new slot by unprotecting transactions from earlier
|
|
173
|
+
* slots and re-validating them before returning to pending state.
|
|
174
|
+
* @param slotNumber - The pipeline slot we are building for (i.e. the slot
|
|
175
|
+
* the resulting blocks will target on L1).
|
|
162
176
|
*/
|
|
163
177
|
prepareForSlot(slotNumber: SlotNumber): Promise<void>;
|
|
164
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Releases the protections a failed block proposal created and restores the txs to pending.
|
|
181
|
+
* Only clears protection entries still recorded at exactly the given slot: a tx that another,
|
|
182
|
+
* still-live proposal raised to a higher slot via {@link protectTxs} keeps its protection, and
|
|
183
|
+
* mined txs (which carry no protection entry) are left untouched. Restored txs are re-validated
|
|
184
|
+
* and resolved against nullifier conflicts before re-entering the pending indices.
|
|
185
|
+
* @param txHashes - Hashes of the proposal's txs to release.
|
|
186
|
+
* @param slotNumber - The slot the failed proposal targeted; protection is released only for this slot.
|
|
187
|
+
*/
|
|
188
|
+
unprotectTxs(txHashes: TxHash[], slotNumber: SlotNumber): Promise<void>;
|
|
189
|
+
|
|
165
190
|
/**
|
|
166
191
|
* Handles pruned blocks during a reorg.
|
|
167
192
|
* Un-mines all transactions mined in blocks beyond the given latest block
|
|
@@ -184,11 +209,11 @@ export interface TxPoolV2 extends TypedEventEmitter<TxPoolV2Events> {
|
|
|
184
209
|
*/
|
|
185
210
|
handleFinalizedBlock(block: BlockHeader): Promise<void>;
|
|
186
211
|
|
|
187
|
-
/** Gets a transaction by its hash */
|
|
188
|
-
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
212
|
+
/** Gets a transaction by its hash. Set `includeProof: false` to skip loading the proof from the DB. */
|
|
213
|
+
getTxByHash(txHash: TxHash, opts?: { includeProof?: boolean }): Promise<Tx | undefined>;
|
|
189
214
|
|
|
190
|
-
/** Gets multiple transactions by their hashes */
|
|
191
|
-
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
215
|
+
/** Gets multiple transactions by their hashes. Set `includeProof: false` to skip loading proofs from the DB. */
|
|
216
|
+
getTxsByHash(txHashes: TxHash[], opts?: { includeProof?: boolean }): Promise<(Tx | undefined)[]>;
|
|
192
217
|
|
|
193
218
|
/** Checks if transactions exist in the pool */
|
|
194
219
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
@@ -205,6 +230,13 @@ export interface TxPoolV2 extends TypedEventEmitter<TxPoolV2Events> {
|
|
|
205
230
|
/** Gets the count of pending transactions */
|
|
206
231
|
getPendingTxCount(): Promise<number>;
|
|
207
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Returns whether at least `minCount` pending transactions are old enough per minTxPoolAgeMs to be eligible
|
|
235
|
+
* for block building. Stops scanning once the threshold is reached, so it is cheaper than counting all
|
|
236
|
+
* eligible txs when only a few are needed.
|
|
237
|
+
*/
|
|
238
|
+
hasEligiblePendingTxs(minCount: number): Promise<boolean>;
|
|
239
|
+
|
|
208
240
|
/** Gets mined transaction hashes with their block IDs */
|
|
209
241
|
getMinedTxHashes(): Promise<[TxHash, L2BlockId][]>;
|
|
210
242
|
|
|
@@ -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;
|
|
@@ -277,17 +288,19 @@ export function checkNullifierConflict(
|
|
|
277
288
|
}
|
|
278
289
|
|
|
279
290
|
/** Creates a stub TxMetaValidationData for tests that don't exercise validators. */
|
|
280
|
-
export function stubTxMetaValidationData(
|
|
291
|
+
export function stubTxMetaValidationData(
|
|
292
|
+
overrides: { expirationTimestamp?: bigint; maxFeesPerGas?: GasFees } = {},
|
|
293
|
+
): TxMetaValidationData {
|
|
281
294
|
return {
|
|
282
295
|
getNonEmptyNullifiers: () => [],
|
|
283
296
|
expirationTimestamp: overrides.expirationTimestamp ?? 0n,
|
|
284
297
|
constants: {
|
|
285
298
|
anchorBlockHeader: {
|
|
286
|
-
hash: () => Promise.resolve(
|
|
299
|
+
hash: () => Promise.resolve(BlockHash.ZERO),
|
|
287
300
|
globalVariables: { blockNumber: BlockNumber(0) },
|
|
288
301
|
},
|
|
289
302
|
txContext: {
|
|
290
|
-
gasSettings: { gasLimits: Gas.empty() },
|
|
303
|
+
gasSettings: { gasLimits: Gas.empty(), maxFeesPerGas: overrides.maxFeesPerGas ?? GasFees.empty() },
|
|
291
304
|
},
|
|
292
305
|
},
|
|
293
306
|
};
|
|
@@ -304,6 +317,8 @@ export function stubTxMetaData(
|
|
|
304
317
|
nullifiers?: string[];
|
|
305
318
|
expirationTimestamp?: bigint;
|
|
306
319
|
anchorBlockHeaderHash?: string;
|
|
320
|
+
allowedSetupCalls?: boolean;
|
|
321
|
+
maxFeesPerGas?: GasFees;
|
|
307
322
|
} = {},
|
|
308
323
|
): TxMetaData {
|
|
309
324
|
const txHashBigInt = Fr.fromHexString(txHash).toBigInt();
|
|
@@ -320,8 +335,15 @@ export function stubTxMetaData(
|
|
|
320
335
|
feeLimit: overrides.feeLimit ?? 100n,
|
|
321
336
|
nullifiers: overrides.nullifiers ?? [`0x${normalizedTxHash.slice(2)}null1`],
|
|
322
337
|
expirationTimestamp,
|
|
338
|
+
allowedSetupCalls: overrides.allowedSetupCalls ?? true,
|
|
323
339
|
receivedAt: 0,
|
|
324
340
|
estimatedSizeBytes: 0,
|
|
325
|
-
data: stubTxMetaValidationData({ expirationTimestamp }),
|
|
341
|
+
data: stubTxMetaValidationData({ expirationTimestamp, maxFeesPerGas: overrides.maxFeesPerGas }),
|
|
326
342
|
};
|
|
327
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
|
+
}
|