@aztec/p2p 0.0.1-commit.85d7d01 → 0.0.1-commit.8655d4a
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/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -1
- package/dest/client/factory.d.ts +5 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +33 -15
- package/dest/client/interface.d.ts +14 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +13 -9
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +93 -49
- package/dest/config.d.ts +153 -102
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +134 -35
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/index.d.ts +1 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -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 +181 -65
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +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/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 +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +12 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -11
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +46 -16
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -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 +26 -43
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
- 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 +6 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +97 -88
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +61 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -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 +10 -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 +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
- 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 +27 -7
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +47 -17
- 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 +48 -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/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 +69 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +35 -8
- package/dest/services/dummy_service.d.ts +11 -15
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +12 -16
- package/dest/services/encoding.d.ts +5 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -1
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +36 -46
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +296 -244
- 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 +40 -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 +11 -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 +84 -71
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +16 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -20
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +0 -1
- package/dest/services/reqresp/protocols/block_txs/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 +4 -2
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +1 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +7 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +41 -214
- package/dest/services/service.d.ts +9 -12
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +2 -23
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +2 -55
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/index.d.ts +2 -3
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +0 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +0 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +36 -55
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_file_store/tx_file_store.js +4 -14
- package/dest/services/tx_provider.d.ts +3 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +3 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -2
- package/dest/test-helpers/mock-pubsub.d.ts +23 -9
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +44 -44
- package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +16 -18
- package/dest/test-helpers/test_tx_provider.d.ts +3 -1
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.js +3 -0
- package/dest/test-helpers/testbench-utils.d.ts +12 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +42 -15
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +85 -39
- 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 -14
- package/src/bootstrap/bootstrap.ts +9 -1
- package/src/client/factory.ts +57 -8
- package/src/client/interface.ts +15 -11
- package/src/client/p2p_client.ts +106 -70
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +226 -36
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/index.ts +0 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +22 -14
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +12 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +101 -94
- 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 +14 -7
- 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 +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
- package/src/msg_validators/tx_validator/README.md +15 -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 +61 -10
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +121 -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/tx_proof_validator.ts +2 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
- package/src/services/data_store.ts +5 -13
- package/src/services/discv5/discV5_service.ts +38 -5
- package/src/services/dummy_service.ts +14 -39
- package/src/services/encoding.ts +9 -1
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +321 -276
- package/src/services/peer-manager/metrics.ts +7 -0
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +27 -5
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +46 -7
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
- package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -47
- package/src/services/reqresp/metrics.ts +0 -1
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/tx.ts +1 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +45 -260
- package/src/services/service.ts +12 -28
- package/src/services/tx_collection/config.ts +3 -80
- package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/index.ts +1 -6
- package/src/services/tx_collection/instrumentation.ts +1 -7
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +331 -176
- package/src/services/tx_collection/tx_collection_sink.ts +2 -2
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/services/tx_file_store/tx_file_store.ts +5 -17
- package/src/services/tx_provider.ts +5 -0
- package/src/test-helpers/make-test-p2p-clients.ts +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 +53 -28
- package/src/testbench/p2p_client_testbench_worker.ts +89 -55
- 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/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/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/proposal_validator/proposal_validator_test_suite.ts +0 -230
- 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,4 +1,4 @@
|
|
|
1
|
-
import { MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
1
|
+
import { MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
4
4
|
import { Gas } from '@aztec/stdlib/gas';
|
|
@@ -17,13 +17,23 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
17
17
|
* Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
|
|
18
18
|
*/ export class GasLimitsValidator {
|
|
19
19
|
#log;
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
#effectiveMaxL2Gas;
|
|
21
|
+
#effectiveMaxDAGas;
|
|
22
|
+
#rollupManaLimit;
|
|
23
|
+
#maxBlockL2Gas;
|
|
24
|
+
#maxBlockDAGas;
|
|
25
|
+
constructor(opts){
|
|
26
|
+
this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
|
|
27
|
+
this.#rollupManaLimit = opts?.rollupManaLimit ?? Infinity;
|
|
28
|
+
this.#maxBlockL2Gas = opts?.maxBlockL2Gas ?? Infinity;
|
|
29
|
+
this.#maxBlockDAGas = opts?.maxBlockDAGas ?? Infinity;
|
|
30
|
+
this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, this.#rollupManaLimit, this.#maxBlockL2Gas);
|
|
31
|
+
this.#effectiveMaxDAGas = Math.min(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, this.#maxBlockDAGas);
|
|
22
32
|
}
|
|
23
33
|
validateTx(tx) {
|
|
24
34
|
return Promise.resolve(this.validateGasLimit(tx));
|
|
25
35
|
}
|
|
26
|
-
/** Checks gas limits are >= fixed minimums and <=
|
|
36
|
+
/** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */ validateGasLimit(tx) {
|
|
27
37
|
const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
28
38
|
const minGasLimits = new Gas(TX_DA_GAS_OVERHEAD, tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD);
|
|
29
39
|
if (minGasLimits.gtAny(gasLimits)) {
|
|
@@ -34,19 +44,74 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
34
44
|
return {
|
|
35
45
|
result: 'invalid',
|
|
36
46
|
reason: [
|
|
37
|
-
TX_ERROR_INSUFFICIENT_GAS_LIMIT
|
|
47
|
+
`${TX_ERROR_INSUFFICIENT_GAS_LIMIT} (required=da:${minGasLimits.daGas},l2:${minGasLimits.l2Gas} got=da:${gasLimits.daGas},l2:${gasLimits.l2Gas})`
|
|
38
48
|
]
|
|
39
49
|
};
|
|
40
50
|
}
|
|
41
|
-
if (gasLimits.l2Gas >
|
|
42
|
-
this.#log.verbose(`Rejecting transaction due to the gas limit
|
|
51
|
+
if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
|
|
52
|
+
this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
|
|
43
53
|
gasLimits,
|
|
44
|
-
|
|
54
|
+
effectiveMaxL2Gas: this.#effectiveMaxL2Gas,
|
|
55
|
+
rollupManaLimit: this.#rollupManaLimit,
|
|
56
|
+
maxBlockL2Gas: this.#maxBlockL2Gas
|
|
45
57
|
});
|
|
46
58
|
return {
|
|
47
59
|
result: 'invalid',
|
|
48
60
|
reason: [
|
|
49
|
-
TX_ERROR_GAS_LIMIT_TOO_HIGH
|
|
61
|
+
`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (l2Gas=${gasLimits.l2Gas}, max=${this.#effectiveMaxL2Gas})`
|
|
62
|
+
]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (gasLimits.daGas > this.#effectiveMaxDAGas) {
|
|
66
|
+
this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
|
|
67
|
+
gasLimits,
|
|
68
|
+
effectiveMaxDAGas: this.#effectiveMaxDAGas,
|
|
69
|
+
maxBlockDAGas: this.#maxBlockDAGas
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
result: 'invalid',
|
|
73
|
+
reason: [
|
|
74
|
+
`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (daGas=${gasLimits.daGas}, max=${this.#effectiveMaxDAGas})`
|
|
75
|
+
]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
result: 'valid'
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validates that a transaction's max fee per gas meets the current block's gas fees.
|
|
85
|
+
*
|
|
86
|
+
* Rejects transactions whose maxFeesPerGas is below the current block's gas fees
|
|
87
|
+
* on either dimension (DA or L2). This is a cheap, stateless check.
|
|
88
|
+
*
|
|
89
|
+
* Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
|
|
90
|
+
* (used during pending pool migration).
|
|
91
|
+
*
|
|
92
|
+
* Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
|
|
93
|
+
*/ export class MaxFeePerGasValidator {
|
|
94
|
+
#log;
|
|
95
|
+
#gasFees;
|
|
96
|
+
constructor(gasFees, bindings){
|
|
97
|
+
this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
|
|
98
|
+
this.#gasFees = gasFees;
|
|
99
|
+
}
|
|
100
|
+
validateTx(tx) {
|
|
101
|
+
return Promise.resolve(this.validateMaxFeePerGas(tx));
|
|
102
|
+
}
|
|
103
|
+
/** Checks maxFeesPerGas >= current block gas fees on both dimensions. */ validateMaxFeePerGas(tx) {
|
|
104
|
+
const maxFeesPerGas = tx.data.constants.txContext.gasSettings.maxFeesPerGas;
|
|
105
|
+
const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
106
|
+
if (notEnoughMaxFees) {
|
|
107
|
+
this.#log.verbose(`Rejecting transaction ${tx.txHash.toString()} due to insufficient fee per gas`, {
|
|
108
|
+
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
109
|
+
currentGasFees: this.#gasFees.toInspect()
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
result: 'invalid',
|
|
113
|
+
reason: [
|
|
114
|
+
`${TX_ERROR_INSUFFICIENT_FEE_PER_GAS} (maxFee=da:${maxFeesPerGas.feePerDaGas},l2:${maxFeesPerGas.feePerL2Gas} required=da:${this.#gasFees.feePerDaGas},l2:${this.#gasFees.feePerL2Gas})`
|
|
50
115
|
]
|
|
51
116
|
};
|
|
52
117
|
}
|
|
@@ -61,9 +126,8 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
61
126
|
* Runs three checks in order:
|
|
62
127
|
* 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
|
|
63
128
|
* out of bounds.
|
|
64
|
-
* 2. **Max fee per gas** —
|
|
65
|
-
* the current block's gas fees.
|
|
66
|
-
* become eligible in a later block with lower fees.
|
|
129
|
+
* 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
|
|
130
|
+
* the current block's gas fees.
|
|
67
131
|
* 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
|
|
68
132
|
* adds any pending claim from a setup-phase `_increase_public_balance` call, and
|
|
69
133
|
* rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
|
|
@@ -75,47 +139,30 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
75
139
|
#publicDataSource;
|
|
76
140
|
#feeJuiceAddress;
|
|
77
141
|
#gasFees;
|
|
78
|
-
|
|
142
|
+
#gasLimitOpts;
|
|
143
|
+
constructor(publicDataSource, feeJuiceAddress, gasFees, bindings, opts){
|
|
79
144
|
this.bindings = bindings;
|
|
80
145
|
this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
|
|
81
146
|
this.#publicDataSource = publicDataSource;
|
|
82
147
|
this.#feeJuiceAddress = feeJuiceAddress;
|
|
83
148
|
this.#gasFees = gasFees;
|
|
149
|
+
this.#gasLimitOpts = opts;
|
|
84
150
|
}
|
|
85
151
|
async validateTx(tx) {
|
|
86
|
-
const gasLimitValidation = new GasLimitsValidator(
|
|
152
|
+
const gasLimitValidation = new GasLimitsValidator({
|
|
153
|
+
...this.#gasLimitOpts,
|
|
154
|
+
bindings: this.bindings
|
|
155
|
+
}).validateGasLimit(tx);
|
|
87
156
|
if (gasLimitValidation.result === 'invalid') {
|
|
88
|
-
return
|
|
157
|
+
return gasLimitValidation;
|
|
89
158
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
reason: [
|
|
94
|
-
TX_ERROR_INSUFFICIENT_FEE_PER_GAS
|
|
95
|
-
]
|
|
96
|
-
});
|
|
159
|
+
const maxFeeValidation = new MaxFeePerGasValidator(this.#gasFees, this.bindings).validateMaxFeePerGas(tx);
|
|
160
|
+
if (maxFeeValidation.result === 'invalid') {
|
|
161
|
+
return maxFeeValidation;
|
|
97
162
|
}
|
|
98
163
|
return await this.validateTxFee(tx);
|
|
99
164
|
}
|
|
100
165
|
/**
|
|
101
|
-
* Check whether the tx's max fees are valid for the current block, and skip if not.
|
|
102
|
-
* We skip instead of invalidating since the tx may become eligible later.
|
|
103
|
-
* Note that circuits check max fees even if fee payer is unset, so we
|
|
104
|
-
* keep this validation even if the tx does not pay fees.
|
|
105
|
-
*/ #shouldSkip(tx) {
|
|
106
|
-
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
107
|
-
// Skip the tx if its max fees are not enough for the current block's gas fees.
|
|
108
|
-
const maxFeesPerGas = gasSettings.maxFeesPerGas;
|
|
109
|
-
const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
|
|
110
|
-
if (notEnoughMaxFees) {
|
|
111
|
-
this.#log.verbose(`Skipping transaction ${tx.getTxHash().toString()} due to insufficient fee per gas`, {
|
|
112
|
-
txMaxFeesPerGas: maxFeesPerGas.toInspect(),
|
|
113
|
-
currentGasFees: this.#gasFees.toInspect()
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
return notEnoughMaxFees;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
166
|
* Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
|
|
120
167
|
* Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
|
|
121
168
|
*/ async validateTxFee(tx) {
|
|
@@ -136,7 +183,7 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
|
136
183
|
return {
|
|
137
184
|
result: 'invalid',
|
|
138
185
|
reason: [
|
|
139
|
-
TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE
|
|
186
|
+
`${TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE} (required=${feeLimit}, available=${balance})`
|
|
140
187
|
]
|
|
141
188
|
};
|
|
142
189
|
}
|
|
@@ -8,9 +8,12 @@ export * from './gas_validator.js';
|
|
|
8
8
|
export * from './phases_validator.js';
|
|
9
9
|
export * from './test_utils.js';
|
|
10
10
|
export * from './allowed_public_setup.js';
|
|
11
|
+
export * from './allowed_setup_helpers.js';
|
|
11
12
|
export * from './archive_cache.js';
|
|
12
13
|
export * from './tx_permitted_validator.js';
|
|
13
14
|
export * from './timestamp_validator.js';
|
|
14
15
|
export * from './size_validator.js';
|
|
15
16
|
export * from './factory.js';
|
|
16
|
-
|
|
17
|
+
export * from './tx_validation_cache.js';
|
|
18
|
+
export * from './cached_tx_validator.js';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
|
@@ -8,8 +8,11 @@ export * from './gas_validator.js';
|
|
|
8
8
|
export * from './phases_validator.js';
|
|
9
9
|
export * from './test_utils.js';
|
|
10
10
|
export * from './allowed_public_setup.js';
|
|
11
|
+
export * from './allowed_setup_helpers.js';
|
|
11
12
|
export * from './archive_cache.js';
|
|
12
13
|
export * from './tx_permitted_validator.js';
|
|
13
14
|
export * from './timestamp_validator.js';
|
|
14
15
|
export * from './size_validator.js';
|
|
15
16
|
export * from './factory.js';
|
|
17
|
+
export * from './tx_validation_cache.js';
|
|
18
|
+
export * from './cached_tx_validator.js';
|
|
@@ -12,4 +12,4 @@ export declare class MetadataTxValidator<T extends AnyTx> implements TxValidator
|
|
|
12
12
|
}, bindings?: LoggerBindings);
|
|
13
13
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL21ldGFkYXRhX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxFQUNMLEtBQUssS0FBSyxFQUtWLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFCQUFhLG1CQUFtQixDQUFDLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl2RSxPQUFPLENBQUMsTUFBTTtJQURoQixZQUNVLE1BQU0sRUFBRTtRQUNkLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDZixxQkFBcUIsRUFBRSxFQUFFLENBQUM7S0FDM0IsRUFDRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBdUI3QztDQXFERiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/metadata_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIvE,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QACd,SAAS,EAAE,EAAE,CAAC;QACd,aAAa,EAAE,EAAE,CAAC;QAClB,UAAU,EAAE,EAAE,CAAC;QACf,qBAAqB,EAAE,EAAE,CAAC;KAC3B,EACD,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"metadata_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/metadata_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIvE,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QACd,SAAS,EAAE,EAAE,CAAC;QACd,aAAa,EAAE,EAAE,CAAC;QAClB,UAAU,EAAE,EAAE,CAAC;QACf,qBAAqB,EAAE,EAAE,CAAC;KAC3B,EACD,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuB7C;CAqDF"}
|
|
@@ -10,16 +10,16 @@ export class MetadataTxValidator {
|
|
|
10
10
|
validateTx(tx) {
|
|
11
11
|
const errors = [];
|
|
12
12
|
if (!this.#hasCorrectL1ChainId(tx)) {
|
|
13
|
-
errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
|
|
13
|
+
errors.push(`${TX_ERROR_INCORRECT_L1_CHAIN_ID} (tx: ${tx.data.constants.txContext.chainId.toNumber()}, expected: ${this.values.l1ChainId.toNumber()})`);
|
|
14
14
|
}
|
|
15
15
|
if (!this.#hasCorrectRollupVersion(tx)) {
|
|
16
|
-
errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
|
|
16
|
+
errors.push(`${TX_ERROR_INCORRECT_ROLLUP_VERSION} (tx: ${tx.data.constants.txContext.version.toNumber()}, expected: ${this.values.rollupVersion.toNumber()})`);
|
|
17
17
|
}
|
|
18
18
|
if (!this.#hasCorrectVkTreeRoot(tx)) {
|
|
19
|
-
errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
|
|
19
|
+
errors.push(`${TX_ERROR_INCORRECT_VK_TREE_ROOT} (tx: ${tx.data.constants.vkTreeRoot.toString()}, expected: ${this.values.vkTreeRoot.toString()})`);
|
|
20
20
|
}
|
|
21
21
|
if (!this.#hasCorrectprotocolContractsHash(tx)) {
|
|
22
|
-
errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
|
|
22
|
+
errors.push(`${TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH} (tx: ${tx.data.constants.protocolContractsHash.toString()}, expected: ${this.values.protocolContractsHash.toString()})`);
|
|
23
23
|
}
|
|
24
24
|
return Promise.resolve(errors.length > 0 ? {
|
|
25
25
|
result: 'invalid',
|
|
@@ -10,6 +10,26 @@ export declare class PhasesTxValidator implements TxValidator<Tx> {
|
|
|
10
10
|
private contractsDB;
|
|
11
11
|
constructor(contracts: ContractDataSource, setupAllowList: AllowedElement[], timestamp: UInt64, bindings?: LoggerBindings);
|
|
12
12
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
13
|
-
private
|
|
13
|
+
private checkAllowList;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
/** Structural interface for the allowed-setup-calls flag check. */
|
|
16
|
+
export interface HasAllowedSetupCallsData {
|
|
17
|
+
txHash: {
|
|
18
|
+
toString(): string;
|
|
19
|
+
};
|
|
20
|
+
allowedSetupCalls: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validates that a transaction's setup-phase calls were allowed at receipt time.
|
|
24
|
+
*
|
|
25
|
+
* Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
|
|
26
|
+
* computed by running the PhasesTxValidator on the full Tx when it first enters
|
|
27
|
+
* the pool. This lightweight validator is used during pending pool migration to
|
|
28
|
+
* reject txs whose setup calls are not on the allow list.
|
|
29
|
+
*/
|
|
30
|
+
export declare class AllowedSetupCallsMetaValidator<T extends HasAllowedSetupCallsData> implements TxValidator<T> {
|
|
31
|
+
#private;
|
|
32
|
+
constructor(bindings?: LoggerBindings);
|
|
33
|
+
validateTx(tx: T): Promise<TxValidationResult>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFRTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXNDcEQ7WUFHYSxjQUFjO0NBa0U3QjtBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFdBQVcsd0JBQXdCO0lBQ3ZDLE1BQU0sRUFBRTtRQUFFLFFBQVEsSUFBSSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQy9CLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztDQUM1QjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSw4QkFBOEIsQ0FBQyxDQUFDLFNBQVMsd0JBQXdCLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUd2RyxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNN0M7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAQL,EAAE,EAEF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMrD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,WAAW,CAAoB;IAEvC,YACE,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpD;YAGa,cAAc;CAkE7B;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,8BAA8B,CAAC,CAAC,SAAS,wBAAwB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAGvG,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAM7C;CACF"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { NULL_MSG_SENDER_CONTRACT_ADDRESS } from '@aztec/constants';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
|
|
3
|
-
import {
|
|
4
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
+
import { TX_ERROR_DURING_VALIDATION, TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED, TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT, TX_ERROR_SETUP_NULL_MSG_SENDER, TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER, TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH, TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
6
|
export class PhasesTxValidator {
|
|
5
7
|
setupAllowList;
|
|
6
8
|
timestamp;
|
|
@@ -19,7 +21,7 @@ export class PhasesTxValidator {
|
|
|
19
21
|
// which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
|
|
20
22
|
// which is what we're trying to do as part of the current txs.
|
|
21
23
|
// We only need to create/revert checkpoint here because of this addNewContracts call.
|
|
22
|
-
|
|
24
|
+
this.contractsDB.addNewContracts(tx);
|
|
23
25
|
if (!tx.data.forPublic) {
|
|
24
26
|
this.#log.debug(`Tx ${tx.getTxHash().toString()} does not contain enqueued public functions. Skipping phases validation.`);
|
|
25
27
|
return {
|
|
@@ -28,14 +30,15 @@ export class PhasesTxValidator {
|
|
|
28
30
|
}
|
|
29
31
|
const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
|
|
30
32
|
for (const setupFn of setupFns){
|
|
31
|
-
|
|
33
|
+
const rejectionReason = await this.checkAllowList(setupFn, this.setupAllowList);
|
|
34
|
+
if (rejectionReason) {
|
|
32
35
|
this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()} because it calls setup function not on allow list: ${setupFn.request.contractAddress}:${setupFn.functionSelector}`, {
|
|
33
36
|
allowList: this.setupAllowList
|
|
34
37
|
});
|
|
35
38
|
return {
|
|
36
39
|
result: 'invalid',
|
|
37
40
|
reason: [
|
|
38
|
-
|
|
41
|
+
rejectionReason
|
|
39
42
|
]
|
|
40
43
|
};
|
|
41
44
|
}
|
|
@@ -55,39 +58,84 @@ export class PhasesTxValidator {
|
|
|
55
58
|
this.contractsDB.revertCheckpoint();
|
|
56
59
|
}
|
|
57
60
|
}
|
|
58
|
-
async
|
|
61
|
+
/** Returns a rejection reason if the call is not on the allow list, or undefined if it is allowed. */ async checkAllowList(publicCall, allowList) {
|
|
59
62
|
if (publicCall.isEmpty()) {
|
|
60
|
-
return
|
|
63
|
+
return undefined;
|
|
61
64
|
}
|
|
62
65
|
const contractAddress = publicCall.request.contractAddress;
|
|
63
66
|
const functionSelector = publicCall.functionSelector;
|
|
64
|
-
//
|
|
67
|
+
// Check address-based entries first since they don't require the contract class.
|
|
65
68
|
for (const entry of allowList){
|
|
66
|
-
if ('address' in entry
|
|
67
|
-
if (contractAddress.equals(entry.address)) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if ('address' in entry && 'selector' in entry) {
|
|
69
|
+
if ('address' in entry) {
|
|
72
70
|
if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
|
|
73
|
-
|
|
71
|
+
if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
|
|
72
|
+
return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
|
|
73
|
+
}
|
|
74
|
+
if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
|
|
75
|
+
return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
|
|
76
|
+
}
|
|
77
|
+
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
|
|
78
|
+
return TX_ERROR_SETUP_NULL_MSG_SENDER;
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
}
|
|
84
|
+
// Check class-based entries. Fetch the contract instance lazily (only once).
|
|
85
|
+
let contractClassId;
|
|
86
|
+
for (const entry of allowList){
|
|
87
|
+
if (!('classId' in entry)) {
|
|
88
|
+
continue;
|
|
79
89
|
}
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
if (contractClassId === undefined) {
|
|
91
|
+
const instance = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
|
|
92
|
+
contractClassId = {
|
|
93
|
+
value: instance?.currentContractClassId.toString()
|
|
94
|
+
};
|
|
95
|
+
if (!contractClassId.value) {
|
|
96
|
+
return TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT;
|
|
83
97
|
}
|
|
84
98
|
}
|
|
85
|
-
if (
|
|
86
|
-
if (
|
|
87
|
-
return
|
|
99
|
+
if (contractClassId.value === entry.classId.toString() && entry.selector.equals(functionSelector)) {
|
|
100
|
+
if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
|
|
101
|
+
return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
|
|
102
|
+
}
|
|
103
|
+
if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
|
|
104
|
+
return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
|
|
88
105
|
}
|
|
106
|
+
if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
|
|
107
|
+
return TX_ERROR_SETUP_NULL_MSG_SENDER;
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
89
110
|
}
|
|
90
111
|
}
|
|
91
|
-
return
|
|
112
|
+
return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Validates that a transaction's setup-phase calls were allowed at receipt time.
|
|
117
|
+
*
|
|
118
|
+
* Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
|
|
119
|
+
* computed by running the PhasesTxValidator on the full Tx when it first enters
|
|
120
|
+
* the pool. This lightweight validator is used during pending pool migration to
|
|
121
|
+
* reject txs whose setup calls are not on the allow list.
|
|
122
|
+
*/ export class AllowedSetupCallsMetaValidator {
|
|
123
|
+
#log;
|
|
124
|
+
constructor(bindings){
|
|
125
|
+
this.#log = createLogger('sequencer:tx_validator:tx_phases_meta', bindings);
|
|
126
|
+
}
|
|
127
|
+
validateTx(tx) {
|
|
128
|
+
if (!tx.allowedSetupCalls) {
|
|
129
|
+
this.#log.verbose(`Rejecting tx ${tx.txHash} because its setup calls are not on the allow list`);
|
|
130
|
+
return Promise.resolve({
|
|
131
|
+
result: 'invalid',
|
|
132
|
+
reason: [
|
|
133
|
+
TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED
|
|
134
|
+
]
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return Promise.resolve({
|
|
138
|
+
result: 'valid'
|
|
139
|
+
});
|
|
92
140
|
}
|
|
93
141
|
}
|
|
@@ -4,7 +4,8 @@ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx'
|
|
|
4
4
|
export declare class TxProofValidator implements TxValidator<Tx> {
|
|
5
5
|
#private;
|
|
6
6
|
private verifier;
|
|
7
|
+
readonly identifier: symbol;
|
|
7
8
|
constructor(verifier: ClientProtocolCircuitVerifier, bindings?: LoggerBindings);
|
|
8
9
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
9
10
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL3R4X3Byb29mX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQTBCLEVBQUUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekcscUJBQWEsZ0JBQWlCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNcEQsT0FBTyxDQUFDLFFBQVE7SUFMbEIsU0FBZ0IsVUFBVSxFQUFFLE1BQU0sQ0FBOEI7SUFJaEUsWUFDVSxRQUFRLEVBQUUsNkJBQTZCLEVBQy9DLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRcEQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;
|
|
1
|
+
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMpD,OAAO,CAAC,QAAQ;IALlB,SAAgB,UAAU,EAAE,MAAM,CAA8B;IAIhE,YACU,QAAQ,EAAE,6BAA6B,EAC/C,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQpD;CACF"}
|
|
@@ -2,9 +2,11 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { TX_ERROR_INVALID_PROOF } from '@aztec/stdlib/tx';
|
|
3
3
|
export class TxProofValidator {
|
|
4
4
|
verifier;
|
|
5
|
+
identifier;
|
|
5
6
|
#log;
|
|
6
7
|
constructor(verifier, bindings){
|
|
7
8
|
this.verifier = verifier;
|
|
9
|
+
this.identifier = Symbol('TxProofValidator');
|
|
8
10
|
this.#log = createLogger('p2p:tx_validator:proof', bindings);
|
|
9
11
|
}
|
|
10
12
|
async validateTx(tx) {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal interface consumed by {@link CachedTxValidator}.
|
|
4
|
+
* Keeping the dependency on an interface lets callers (and tests) substitute any cache implementation.
|
|
5
|
+
*/
|
|
6
|
+
export interface ITxValidationCache {
|
|
7
|
+
/** Returns the cached promise if present, otherwise calls `validate`, caches its promise, and returns it. */
|
|
8
|
+
getOrValidate(validatorSymbol: symbol, tx: Tx, validate: () => Promise<TxValidationResult>): Promise<TxValidationResult>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
|
|
12
|
+
*
|
|
13
|
+
* The cache key is composed from the validator symbol and tx hash, ensuring results are
|
|
14
|
+
* scoped to the specific validator that produced them.
|
|
15
|
+
*
|
|
16
|
+
* Promises are stored before they are awaited, so concurrent calls for the same pair share
|
|
17
|
+
* a single in-flight validation rather than launching duplicate work.
|
|
18
|
+
*
|
|
19
|
+
* Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
|
|
20
|
+
*/
|
|
21
|
+
export declare class TxValidationCache implements ITxValidationCache {
|
|
22
|
+
#private;
|
|
23
|
+
private readonly entries;
|
|
24
|
+
private readonly txHashesCache;
|
|
25
|
+
constructor(maxSize: number);
|
|
26
|
+
/**
|
|
27
|
+
* Computes the cache key scoping a validation result to a specific validator and tx.
|
|
28
|
+
*
|
|
29
|
+
* @param validatorSymbol - The symbol of the validator.
|
|
30
|
+
* @param tx - The tx to compute the key for.
|
|
31
|
+
* @returns The cache key.
|
|
32
|
+
*
|
|
33
|
+
* Note: the key should NOT use the tx.hash because it can't be trusted at this point.
|
|
34
|
+
*/
|
|
35
|
+
key(validatorSymbol: symbol, tx: Tx): Promise<string>;
|
|
36
|
+
/** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */
|
|
37
|
+
get(key: string): Promise<TxValidationResult> | undefined;
|
|
38
|
+
/** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */
|
|
39
|
+
set(key: string, result: Promise<TxValidationResult>): void;
|
|
40
|
+
/** Removes the cached validation promise for the given key. */
|
|
41
|
+
delete(key: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the cached promise if present, otherwise calls `validate`, stores its promise
|
|
44
|
+
* immediately (before awaiting), and returns it.
|
|
45
|
+
*/
|
|
46
|
+
getOrValidate(validatorSymbol: symbol, tx: Tx, validate: () => Promise<TxValidationResult>): Promise<TxValidationResult>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdGlvbl9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci90eF92YWxpZGF0aW9uX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSS9EOzs7R0FHRztBQUNILE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsNkdBQTZHO0lBQzdHLGFBQWEsQ0FDWCxlQUFlLEVBQUUsTUFBTSxFQUN2QixFQUFFLEVBQUUsRUFBRSxFQUNOLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztDQUNoQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxxQkFBYSxpQkFBa0IsWUFBVyxrQkFBa0I7O0lBRzFELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUE4QztJQUd0RSxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBc0M7SUFFcEUsWUFBWSxPQUFPLEVBQUUsTUFBTSxFQUcxQjtJQUVEOzs7Ozs7OztPQVFHO0lBQ1UsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBU2pFO0lBRUQsbUdBQW1HO0lBQzVGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FFL0Q7SUFFRCw4RkFBOEY7SUFDdkYsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FFakU7SUFFRCwrREFBK0Q7SUFDeEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUUvQjtJQUVEOzs7T0FHRztJQUNVLGFBQWEsQ0FDeEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsRUFBRSxFQUFFLEVBQUUsRUFDTixRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBYzdCO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_validation_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_validation_cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI/D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,6GAA6G;IAC7G,aAAa,CACX,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;;IAG1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;IAGtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;IAEpE,YAAY,OAAO,EAAE,MAAM,EAG1B;IAED;;;;;;;;OAQG;IACU,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CASjE;IAED,mGAAmG;IAC5F,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAE/D;IAED,8FAA8F;IACvF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAEjE;IAED,+DAA+D;IACxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACU,aAAa,CACxB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAc7B;CACF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { LruMap } from '@aztec/foundation/collection';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { webcrypto } from 'node:crypto';
|
|
4
|
+
/**
|
|
5
|
+
* Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
|
|
6
|
+
*
|
|
7
|
+
* The cache key is composed from the validator symbol and tx hash, ensuring results are
|
|
8
|
+
* scoped to the specific validator that produced them.
|
|
9
|
+
*
|
|
10
|
+
* Promises are stored before they are awaited, so concurrent calls for the same pair share
|
|
11
|
+
* a single in-flight validation rather than launching duplicate work.
|
|
12
|
+
*
|
|
13
|
+
* Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
|
|
14
|
+
*/ export class TxValidationCache {
|
|
15
|
+
#log;
|
|
16
|
+
entries;
|
|
17
|
+
// Remember hashes for known Tx object references to skip rehashing on subsequent lookups.
|
|
18
|
+
// WeakMap holds keys weakly, so an entry doesn't keep the Tx alive once nothing else references it.
|
|
19
|
+
txHashesCache = new WeakMap();
|
|
20
|
+
constructor(maxSize){
|
|
21
|
+
this.entries = new LruMap(maxSize);
|
|
22
|
+
this.#log = createLogger('p2p:tx_validation_cache');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Computes the cache key scoping a validation result to a specific validator and tx.
|
|
26
|
+
*
|
|
27
|
+
* @param validatorSymbol - The symbol of the validator.
|
|
28
|
+
* @param tx - The tx to compute the key for.
|
|
29
|
+
* @returns The cache key.
|
|
30
|
+
*
|
|
31
|
+
* Note: the key should NOT use the tx.hash because it can't be trusted at this point.
|
|
32
|
+
*/ async key(validatorSymbol, tx) {
|
|
33
|
+
// Hashing the whole tx takes a few milliseconds. So if we have already hashed
|
|
34
|
+
// this particular object, we avoid rehashing it.
|
|
35
|
+
let hash = this.txHashesCache.get(tx);
|
|
36
|
+
if (hash === undefined) {
|
|
37
|
+
hash = Buffer.from(await webcrypto.subtle.digest('SHA-256', tx.toBuffer())).toString('hex');
|
|
38
|
+
this.txHashesCache.set(tx, hash);
|
|
39
|
+
}
|
|
40
|
+
return `${Symbol.keyFor(validatorSymbol) ?? validatorSymbol.toString()}:${hash}`;
|
|
41
|
+
}
|
|
42
|
+
/** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */ get(key) {
|
|
43
|
+
return this.entries.get(key);
|
|
44
|
+
}
|
|
45
|
+
/** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */ set(key, result) {
|
|
46
|
+
this.entries.set(key, result);
|
|
47
|
+
}
|
|
48
|
+
/** Removes the cached validation promise for the given key. */ delete(key) {
|
|
49
|
+
this.entries.delete(key);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the cached promise if present, otherwise calls `validate`, stores its promise
|
|
53
|
+
* immediately (before awaiting), and returns it.
|
|
54
|
+
*/ async getOrValidate(validatorSymbol, tx, validate) {
|
|
55
|
+
const key = await this.key(validatorSymbol, tx);
|
|
56
|
+
const cached = this.get(key);
|
|
57
|
+
if (cached !== undefined) {
|
|
58
|
+
this.#log.debug('Returning cached tx validation result', {
|
|
59
|
+
validator: validatorSymbol.toString(),
|
|
60
|
+
txHash: tx.txHash.toString(),
|
|
61
|
+
key: key
|
|
62
|
+
});
|
|
63
|
+
return cached;
|
|
64
|
+
}
|
|
65
|
+
const promise = validate();
|
|
66
|
+
this.set(key, promise);
|
|
67
|
+
return promise;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -24,4 +24,4 @@ export declare class AztecDatastore implements Datastore {
|
|
|
24
24
|
*/
|
|
25
25
|
private pruneMemoryDatastore;
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2RhdGFfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVHLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBcUJyRCxxQkFBYSxjQUFlLFlBQVcsU0FBUzs7SUFLOUMsT0FBTyxDQUFDLGNBQWMsQ0FBUztJQUUvQixZQUFZLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLGNBQWMsRUFBRTs7S0FBeUIsRUFLN0U7SUFFSyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRXBDO0lBRUssR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQWN2QztJQUVELEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUUzQztJQUVNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FLOUQ7SUFFTSxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBTzlEO0lBRU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUtoRTtJQUVLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHcEM7SUFFRCxLQUFLLElBQUksS0FBSyxDQXNCYjtJQUVELEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0EwQm5DO0lBRUQsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQXlCekM7WUFFYSxJQUFJO1lBcUJILEdBQUc7SUFrQmxCOztPQUVHO0lBQ0gsT0FBTyxDQUFDLG9CQUFvQjtDQWlCN0IifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/services/data_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBrD,qBAAa,cAAe,YAAW,SAAS;;
|
|
1
|
+
{"version":3,"file":"data_store.d.ts","sourceRoot":"","sources":["../../src/services/data_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqBrD,qBAAa,cAAe,YAAW,SAAS;;IAK9C,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,EAAE,EAAE,iBAAiB,EAAE,EAAE,cAAc,EAAE;;KAAyB,EAK7E;IAEK,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpC;IAEK,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAcvC;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAE3C;IAEM,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAK9D;IAEM,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAO9D;IAEM,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAKhE;IAEK,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpC;IAED,KAAK,IAAI,KAAK,CAsBb;IAED,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CA0BnC;IAED,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAyBzC;YAEa,IAAI;YAqBH,GAAG;IAkBlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAiB7B"}
|