@aztec/p2p 5.0.0-private.20260319 → 5.0.0-rc.2
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 +4 -1
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -6
- package/dest/client/factory.d.ts +4 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +33 -24
- package/dest/client/interface.d.ts +43 -11
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +33 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +100 -44
- package/dest/config.d.ts +137 -107
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +64 -23
- 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 +98 -56
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -196
- 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 +175 -59
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +6 -4
- package/dest/mem_pools/index.d.ts +1 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +17 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +22 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +7 -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 +10 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +8 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +7 -4
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +8 -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 +153 -111
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +77 -14
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/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 +14 -15
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +36 -17
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- 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 +8 -8
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +11 -15
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -14
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +44 -39
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +383 -278
- 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 +79 -23
- 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 +1 -8
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
- package/dest/services/reqresp/config.d.ts +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/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 +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 +26 -207
- package/dest/services/service.d.ts +25 -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/tx_collection.d.ts +35 -51
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +275 -119
- package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +2 -2
- package/dest/services/tx_collection/tx_source.d.ts +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 +14 -14
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +25 -13
- package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +102 -41
- package/dest/testbench/worker_client_manager.d.ts +10 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +51 -9
- package/dest/util.d.ts +11 -6
- 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 +16 -16
- package/src/bootstrap/bootstrap.ts +17 -3
- package/src/client/factory.ts +52 -24
- package/src/client/interface.ts +38 -17
- package/src/client/p2p_client.ts +118 -76
- package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
- package/src/config.ts +130 -31
- 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 +319 -238
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
- package/src/mem_pools/attestation_pool/mocks.ts +13 -8
- package/src/mem_pools/index.ts +0 -3
- package/src/mem_pools/instrumentation.ts +5 -1
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +18 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +12 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +8 -4
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +163 -117
- package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
- package/src/msg_validators/proposal_validator/README.md +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
- package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -11
- package/src/msg_validators/tx_validator/README.md +13 -3
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/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 +44 -20
- package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
- 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 +11 -21
- 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 +436 -311
- package/src/services/peer-manager/peer_manager.ts +86 -22
- package/src/services/peer-manager/peer_scoring.ts +102 -8
- package/src/services/reqresp/README.md +0 -14
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
- package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
- package/src/services/reqresp/config.ts +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/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 +0 -10
- package/src/services/reqresp/reqresp.ts +29 -252
- package/src/services/service.ts +31 -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/tx_collection.ts +330 -173
- 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 +3 -0
- package/src/test-helpers/mock-pubsub.ts +46 -60
- package/src/test-helpers/reqresp-nodes.ts +12 -22
- package/src/test-helpers/test_tx_provider.ts +5 -0
- package/src/test-helpers/testbench-utils.ts +31 -26
- package/src/testbench/p2p_client_testbench_worker.ts +110 -55
- package/src/testbench/worker_client_manager.ts +59 -20
- package/src/util.ts +32 -17
- 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 -305
- 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 -123
- 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 -402
- package/dest/msg_validators/clock_tolerance.d.ts +0 -21
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -38
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -311
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -211
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
- 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 -163
- 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 -321
- package/src/msg_validators/clock_tolerance.ts +0 -52
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -361
- package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
- package/src/services/tx_collection/slow_tx_collection.ts +0 -266
|
@@ -11,8 +11,8 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
|
|
|
11
11
|
*/ export class FishermanAttestationValidator extends CheckpointAttestationValidator {
|
|
12
12
|
attestationPool;
|
|
13
13
|
invalidAttestationCounter;
|
|
14
|
-
constructor(epochCache, attestationPool, telemetryClient){
|
|
15
|
-
super(epochCache), this.attestationPool = attestationPool;
|
|
14
|
+
constructor(epochCache, timetable, attestationPool, telemetryClient, opts){
|
|
15
|
+
super(epochCache, timetable, opts), this.attestationPool = attestationPool;
|
|
16
16
|
this.logger = this.logger.createChild('[FISHERMAN]');
|
|
17
17
|
const meter = telemetryClient.getMeter('FishermanAttestationValidator');
|
|
18
18
|
this.invalidAttestationCounter = createUpDownCounterWithDefault(meter, Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT, {
|
|
@@ -41,8 +41,7 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
|
|
|
41
41
|
result: 'accept'
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
const
|
|
45
|
-
const proposal = await this.attestationPool.getCheckpointProposal(proposalId);
|
|
44
|
+
const proposal = await this.attestationPool.getCheckpointProposal(message.payload.header.slotNumber);
|
|
46
45
|
if (proposal) {
|
|
47
46
|
// Compare the attestation payload with the proposal payload
|
|
48
47
|
if (!message.payload.equals(proposal)) {
|
|
@@ -67,7 +66,7 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
|
|
|
67
66
|
}
|
|
68
67
|
} else {
|
|
69
68
|
// We might receive attestations before proposals in some cases
|
|
70
|
-
this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet
|
|
69
|
+
this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet.`);
|
|
71
70
|
}
|
|
72
71
|
return {
|
|
73
72
|
result: 'accept'
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
-
import type { BlockProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
|
|
2
|
+
import type { BlockProposal, CoordinationSignatureContext, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
|
|
3
|
+
import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
3
4
|
export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
4
5
|
private proposalValidator;
|
|
5
|
-
constructor(epochCache: EpochCacheInterface, opts: {
|
|
6
|
+
constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
|
|
6
7
|
txsPermitted: boolean;
|
|
7
8
|
maxTxsPerBlock?: number;
|
|
9
|
+
maxBlocksPerCheckpoint?: number;
|
|
10
|
+
skipSlotValidation?: boolean;
|
|
11
|
+
signatureContext: CoordinationSignatureContext;
|
|
12
|
+
clockDisparityMs: number;
|
|
8
13
|
});
|
|
9
14
|
validate(proposal: BlockProposal): Promise<ValidationResult>;
|
|
10
15
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNySCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSWxFLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsU0FBUyxFQUFFLGtCQUFrQixFQUM3QixJQUFJLEVBQUU7UUFDSixZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQ3RCLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN4QixzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNoQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUM3QixnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztRQUMvQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7S0FDMUIsRUFHRjtJQUVLLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQU1qRTtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMjE;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
|
|
2
2
|
export class BlockProposalValidator {
|
|
3
3
|
proposalValidator;
|
|
4
|
-
constructor(epochCache, opts){
|
|
5
|
-
this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:block_proposal_validator');
|
|
4
|
+
constructor(epochCache, timetable, opts){
|
|
5
|
+
this.proposalValidator = new ProposalValidator(epochCache, timetable, opts, 'p2p:block_proposal_validator');
|
|
6
6
|
}
|
|
7
7
|
async validate(proposal) {
|
|
8
8
|
const headerResult = await this.proposalValidator.validate(proposal);
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
-
import type { CheckpointProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
|
|
2
|
+
import type { CheckpointProposal, CoordinationSignatureContext, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
|
|
3
|
+
import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
3
4
|
export declare class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
|
|
4
5
|
private proposalValidator;
|
|
5
|
-
constructor(epochCache: EpochCacheInterface, opts: {
|
|
6
|
+
constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
|
|
6
7
|
txsPermitted: boolean;
|
|
7
8
|
maxTxsPerBlock?: number;
|
|
9
|
+
maxBlocksPerCheckpoint?: number;
|
|
10
|
+
skipSlotValidation?: boolean;
|
|
11
|
+
signatureContext: CoordinationSignatureContext;
|
|
12
|
+
clockDisparityMs: number;
|
|
8
13
|
});
|
|
9
14
|
validate(proposal: CheckpointProposal): Promise<ValidationResult>;
|
|
10
15
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFDVixrQkFBa0IsRUFDbEIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSWxFLHFCQUFhLDJCQUE0QixZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUNsRixPQUFPLENBQUMsaUJBQWlCLENBQW9CO0lBRTdDLFlBQ0UsVUFBVSxFQUFFLG1CQUFtQixFQUMvQixTQUFTLEVBQUUsa0JBQWtCLEVBQzdCLElBQUksRUFBRTtRQUNKLFlBQVksRUFBRSxPQUFPLENBQUM7UUFDdEIsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3hCLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2hDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQzdCLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO1FBQy9DLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztLQUMxQixFQUdGO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FrQnRFO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,YAAY,EACZ,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,qBAAa,2BAA4B,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAClF,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBtE;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
|
|
2
2
|
export class CheckpointProposalValidator {
|
|
3
3
|
proposalValidator;
|
|
4
|
-
constructor(epochCache, opts){
|
|
5
|
-
this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:checkpoint_proposal_validator');
|
|
4
|
+
constructor(epochCache, timetable, opts){
|
|
5
|
+
this.proposalValidator = new ProposalValidator(epochCache, timetable, opts, 'p2p:checkpoint_proposal_validator');
|
|
6
6
|
}
|
|
7
7
|
async validate(proposal) {
|
|
8
8
|
const headerResult = await this.proposalValidator.validate(proposal);
|
|
@@ -11,6 +11,12 @@ export class CheckpointProposalValidator {
|
|
|
11
11
|
}
|
|
12
12
|
const blockProposal = proposal.getBlockProposal();
|
|
13
13
|
if (blockProposal) {
|
|
14
|
+
// The terminal block is carried inside the checkpoint proposal rather than gossiped as a
|
|
15
|
+
// standalone block proposal, so apply the per-checkpoint block ceiling to it here too.
|
|
16
|
+
const indexResult = this.proposalValidator.validateBlockIndexWithinCheckpoint(blockProposal);
|
|
17
|
+
if (indexResult.result !== 'accept') {
|
|
18
|
+
return indexResult;
|
|
19
|
+
}
|
|
14
20
|
return this.proposalValidator.validateTxs(blockProposal);
|
|
15
21
|
}
|
|
16
22
|
return {
|
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
-
import { type BlockProposal, type CheckpointProposalCore, type ValidationResult } from '@aztec/stdlib/p2p';
|
|
2
|
+
import { type BlockProposal, type CheckpointProposalCore, type CoordinationSignatureContext, type ValidationResult } from '@aztec/stdlib/p2p';
|
|
3
|
+
import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
3
4
|
/** Validates header-level and tx-level fields of block and checkpoint proposals. */
|
|
4
5
|
export declare class ProposalValidator {
|
|
5
6
|
private epochCache;
|
|
7
|
+
private timetable;
|
|
6
8
|
private logger;
|
|
7
9
|
private txsPermitted;
|
|
8
10
|
private maxTxsPerBlock?;
|
|
9
|
-
|
|
11
|
+
private skipSlotValidation;
|
|
12
|
+
private signatureContext;
|
|
13
|
+
private clockDisparityMs;
|
|
14
|
+
constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
|
|
10
15
|
txsPermitted: boolean;
|
|
11
16
|
maxTxsPerBlock?: number;
|
|
17
|
+
maxBlocksPerCheckpoint?: number;
|
|
18
|
+
skipSlotValidation?: boolean;
|
|
19
|
+
signatureContext: CoordinationSignatureContext;
|
|
20
|
+
clockDisparityMs: number;
|
|
12
21
|
}, loggerName: string);
|
|
13
22
|
/** Validates header-level fields: slot, signature, and proposer. */
|
|
14
23
|
validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Rejects a block proposal whose index within its checkpoint lands at or beyond the hard attestable
|
|
26
|
+
* ceiling `MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT` (a structurally impossible index that can never be
|
|
27
|
+
* part of any checkpoint we could attest to). `indexWithinCheckpoint` is 0-based, so a ceiling of 72
|
|
28
|
+
* rejects the 73rd block.
|
|
29
|
+
*
|
|
30
|
+
* Indices in `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the configured
|
|
31
|
+
* consensus limit but still structurally valid: they are proposer misbehavior, not relaying-peer
|
|
32
|
+
* fault, so they are *not* rejected here. The p2p service retains and re-broadcasts the first such
|
|
33
|
+
* proposal per (slot, proposer) as slashing evidence and skips processing it. Applies to standalone
|
|
34
|
+
* block proposals and to the terminal block embedded in a checkpoint proposal.
|
|
35
|
+
*/
|
|
36
|
+
validateBlockIndexWithinCheckpoint(proposal: BlockProposal): ValidationResult;
|
|
15
37
|
/** Validates transaction-related fields of a block proposal. */
|
|
16
38
|
validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
|
|
17
39
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyw0QkFBNEIsRUFFakMsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxFLG9GQUFvRjtBQUNwRixxQkFBYSxpQkFBaUI7SUFDNUIsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBQzlCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBUztJQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQVU7SUFDcEMsT0FBTyxDQUFDLGdCQUFnQixDQUErQjtJQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQVM7SUFFakMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLFNBQVMsRUFBRSxrQkFBa0IsRUFDN0IsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUN0QixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDaEMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUM7UUFDL0MsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0tBQzFCLEVBQ0QsVUFBVSxFQUFFLE1BQU0sRUFVbkI7SUFFRCxvRUFBb0U7SUFDdkQsUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBOEVqRztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksa0NBQWtDLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FRbkY7SUFFRCxnRUFBZ0U7SUFDbkQsV0FBVyxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBd0MzRTtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EAEjC,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EACD,UAAU,EAAE,MAAM,EAUnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8EjG;IAED;;;;;;;;;;;OAWG;IACI,kCAAkC,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,CAQnF;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
|
|
@@ -1,39 +1,67 @@
|
|
|
1
1
|
import { NoCommitteeError } from '@aztec/ethereum/contracts';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT } from '@aztec/stdlib/deserialization';
|
|
4
|
+
import { PeerErrorSeverity, hasValidSignatureContext } from '@aztec/stdlib/p2p';
|
|
5
5
|
/** Validates header-level and tx-level fields of block and checkpoint proposals. */ export class ProposalValidator {
|
|
6
6
|
epochCache;
|
|
7
|
+
timetable;
|
|
7
8
|
logger;
|
|
8
9
|
txsPermitted;
|
|
9
10
|
maxTxsPerBlock;
|
|
10
|
-
|
|
11
|
+
skipSlotValidation;
|
|
12
|
+
signatureContext;
|
|
13
|
+
clockDisparityMs;
|
|
14
|
+
constructor(epochCache, timetable, opts, loggerName){
|
|
11
15
|
this.epochCache = epochCache;
|
|
16
|
+
this.timetable = timetable;
|
|
12
17
|
this.txsPermitted = opts.txsPermitted;
|
|
13
18
|
this.maxTxsPerBlock = opts.maxTxsPerBlock;
|
|
19
|
+
this.skipSlotValidation = opts.skipSlotValidation ?? false;
|
|
20
|
+
this.signatureContext = opts.signatureContext;
|
|
21
|
+
this.clockDisparityMs = opts.clockDisparityMs;
|
|
14
22
|
this.logger = createLogger(loggerName);
|
|
15
23
|
}
|
|
16
24
|
/** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
|
|
17
25
|
try {
|
|
18
|
-
//
|
|
19
|
-
|
|
26
|
+
// Cross-chain replay check: reject proposals that carry a foreign signing domain.
|
|
27
|
+
if (!hasValidSignatureContext(proposal, this.signatureContext)) {
|
|
28
|
+
this.logger.warn(`Penalizing peer for proposal with foreign signature context`, {
|
|
29
|
+
chainId: proposal.signatureContext.chainId,
|
|
30
|
+
rollupAddress: proposal.signatureContext.rollupAddress.toString(),
|
|
31
|
+
expectedChainId: this.signatureContext.chainId,
|
|
32
|
+
expectedRollupAddress: this.signatureContext.rollupAddress.toString()
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
result: 'reject',
|
|
36
|
+
severity: PeerErrorSeverity.LowToleranceError
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Slot check: the tight checkpoint proposal receive window (`[receiveStart - δ, target_slot_start -
|
|
40
|
+
// E - D + δ]`) is the sole acceptance gate, applied to both block and checkpoint proposals. The
|
|
41
|
+
// window itself bounds which slots are valid, so far/wrong slots fall outside it. Every block
|
|
42
|
+
// proposal for slot N is sent before the checkpoint proposal for slot N, so nothing legitimate can
|
|
43
|
+
// arrive after the checkpoint receive deadline; gating block proposals on the same window rejects
|
|
44
|
+
// late block proposals at p2p ingress. The attestation deadline remains their re-execution/
|
|
45
|
+
// validation deadline downstream, not their arrival gate.
|
|
20
46
|
const slotNumber = proposal.slotNumber;
|
|
21
|
-
if (
|
|
22
|
-
//
|
|
23
|
-
|
|
47
|
+
if (!this.skipSlotValidation) {
|
|
48
|
+
// Proposal receive window: [checkpoint_proposal_receive_start, checkpoint_proposal_receive_deadline],
|
|
49
|
+
// widened by the configured clock-disparity tolerance on both ends.
|
|
50
|
+
const startSeconds = this.timetable.getCheckpointProposalReceiveStart(slotNumber);
|
|
51
|
+
const deadlineSeconds = this.timetable.getCheckpointProposalReceiveDeadline(slotNumber);
|
|
52
|
+
const nowMs = Number(this.epochCache.getEpochAndSlotNow().nowMs);
|
|
53
|
+
if (nowMs < startSeconds * 1000 - this.clockDisparityMs || nowMs > deadlineSeconds * 1000 + this.clockDisparityMs) {
|
|
24
54
|
this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
|
|
25
|
-
|
|
26
|
-
|
|
55
|
+
slotNumber,
|
|
56
|
+
nowMs,
|
|
57
|
+
windowStartSeconds: startSeconds,
|
|
58
|
+
windowDeadlineSeconds: deadlineSeconds
|
|
27
59
|
});
|
|
28
60
|
return {
|
|
29
61
|
result: 'reject',
|
|
30
62
|
severity: PeerErrorSeverity.HighToleranceError
|
|
31
63
|
};
|
|
32
64
|
}
|
|
33
|
-
this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
|
|
34
|
-
return {
|
|
35
|
-
result: 'ignore'
|
|
36
|
-
};
|
|
37
65
|
}
|
|
38
66
|
// Signature validity
|
|
39
67
|
const proposer = proposal.getSender();
|
|
@@ -56,6 +84,18 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
|
|
|
56
84
|
severity: PeerErrorSeverity.MidToleranceError
|
|
57
85
|
};
|
|
58
86
|
}
|
|
87
|
+
// A block proposal whose index lands at or beyond the hard attestable ceiling is structurally
|
|
88
|
+
// impossible garbage, so reject it immediately at ingress. Indices in
|
|
89
|
+
// `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the consensus limit
|
|
90
|
+
// but structurally valid proposer misbehavior; they pass gossip validation here so the offending
|
|
91
|
+
// proposal can be retained and re-broadcast as slashing evidence (handled downstream in the p2p
|
|
92
|
+
// service), rather than penalizing the relaying peer.
|
|
93
|
+
if ('indexWithinCheckpoint' in proposal) {
|
|
94
|
+
const indexResult = this.validateBlockIndexWithinCheckpoint(proposal);
|
|
95
|
+
if (indexResult.result !== 'accept') {
|
|
96
|
+
return indexResult;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
59
99
|
return {
|
|
60
100
|
result: 'accept'
|
|
61
101
|
};
|
|
@@ -69,6 +109,29 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
|
|
|
69
109
|
throw e;
|
|
70
110
|
}
|
|
71
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Rejects a block proposal whose index within its checkpoint lands at or beyond the hard attestable
|
|
114
|
+
* ceiling `MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT` (a structurally impossible index that can never be
|
|
115
|
+
* part of any checkpoint we could attest to). `indexWithinCheckpoint` is 0-based, so a ceiling of 72
|
|
116
|
+
* rejects the 73rd block.
|
|
117
|
+
*
|
|
118
|
+
* Indices in `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the configured
|
|
119
|
+
* consensus limit but still structurally valid: they are proposer misbehavior, not relaying-peer
|
|
120
|
+
* fault, so they are *not* rejected here. The p2p service retains and re-broadcasts the first such
|
|
121
|
+
* proposal per (slot, proposer) as slashing evidence and skips processing it. Applies to standalone
|
|
122
|
+
* block proposals and to the terminal block embedded in a checkpoint proposal.
|
|
123
|
+
*/ validateBlockIndexWithinCheckpoint(proposal) {
|
|
124
|
+
if (proposal.indexWithinCheckpoint >= MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT) {
|
|
125
|
+
this.logger.warn(`Penalizing peer for proposal with indexWithinCheckpoint ${proposal.indexWithinCheckpoint} >= attestable ceiling ${MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT}`);
|
|
126
|
+
return {
|
|
127
|
+
result: 'reject',
|
|
128
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
result: 'accept'
|
|
133
|
+
};
|
|
134
|
+
}
|
|
72
135
|
/** Validates transaction-related fields of a block proposal. */ async validateTxs(proposal) {
|
|
73
136
|
// Transactions permitted check
|
|
74
137
|
const embeddedTxCount = proposal.txs?.length ?? 0;
|
|
@@ -4,4 +4,4 @@ export declare class AggregateTxValidator<T> implements TxValidator<T> {
|
|
|
4
4
|
constructor(...validators: TxValidator<T>[]);
|
|
5
5
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
6
6
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNuRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASnD;CACF"}
|
|
@@ -7,25 +7,18 @@ export class AggregateTxValidator {
|
|
|
7
7
|
this.validators = validators;
|
|
8
8
|
}
|
|
9
9
|
async validateTx(tx) {
|
|
10
|
-
const
|
|
11
|
-
result: 'valid',
|
|
12
|
-
reason: []
|
|
13
|
-
};
|
|
10
|
+
const reasons = [];
|
|
14
11
|
for (const validator of this.validators){
|
|
15
12
|
const result = await validator.validateTx(tx);
|
|
16
13
|
if (result.result === 'invalid') {
|
|
17
|
-
|
|
18
|
-
aggregate.reason.push(...result.reason);
|
|
19
|
-
} else if (result.result === 'skipped') {
|
|
20
|
-
if (aggregate.result === 'valid') {
|
|
21
|
-
aggregate.result = 'skipped';
|
|
22
|
-
}
|
|
23
|
-
aggregate.reason.push(...result.reason);
|
|
14
|
+
reasons.push(...result.reason);
|
|
24
15
|
}
|
|
25
16
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
return reasons.length > 0 ? {
|
|
18
|
+
result: 'invalid',
|
|
19
|
+
reason: reasons
|
|
20
|
+
} : {
|
|
21
|
+
result: 'valid'
|
|
22
|
+
};
|
|
30
23
|
}
|
|
31
24
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
2
|
-
import { AuthRegistryArtifact } from '@aztec/protocol-contracts/auth-registry';
|
|
3
2
|
import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice';
|
|
3
|
+
import { AuthRegistryArtifact, STANDARD_AUTH_REGISTRY_ADDRESS } from '@aztec/standard-contracts/auth-registry';
|
|
4
4
|
import { buildAllowedElement } from './allowed_setup_helpers.js';
|
|
5
5
|
let defaultAllowedSetupFunctions;
|
|
6
6
|
/** Returns the default list of functions allowed to run in the setup phase of a transaction. */ export async function getDefaultAllowedSetupFunctions() {
|
|
@@ -8,14 +8,14 @@ let defaultAllowedSetupFunctions;
|
|
|
8
8
|
defaultAllowedSetupFunctions = await Promise.all([
|
|
9
9
|
// AuthRegistry: needed for authwit support via private path (set_authorized_private enqueues _set_authorized)
|
|
10
10
|
buildAllowedElement(AuthRegistryArtifact, {
|
|
11
|
-
address:
|
|
11
|
+
address: STANDARD_AUTH_REGISTRY_ADDRESS
|
|
12
12
|
}, '_set_authorized', {
|
|
13
13
|
onlySelf: true,
|
|
14
14
|
rejectNullMsgSender: true
|
|
15
15
|
}),
|
|
16
16
|
// AuthRegistry: needed for authwit support via public path (PublicFeePaymentMethod calls set_authorized directly)
|
|
17
17
|
buildAllowedElement(AuthRegistryArtifact, {
|
|
18
|
-
address:
|
|
18
|
+
address: STANDARD_AUTH_REGISTRY_ADDRESS
|
|
19
19
|
}, 'set_authorized', {
|
|
20
20
|
rejectNullMsgSender: true
|
|
21
21
|
}),
|
|
@@ -10,7 +10,7 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
10
10
|
this.archives = new Map();
|
|
11
11
|
}
|
|
12
12
|
async getArchiveIndices(archives) {
|
|
13
|
-
const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString()))
|
|
13
|
+
const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString()));
|
|
14
14
|
const dbHits = await this.db.findLeafIndices(MerkleTreeId.ARCHIVE, toCheckDb);
|
|
15
15
|
dbHits.forEach((x, index)=>{
|
|
16
16
|
if (x !== undefined) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
|
|
2
|
+
import type { ITxValidationCache } from './tx_validation_cache.js';
|
|
3
|
+
/** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */
|
|
4
|
+
export declare class CachedTxValidator<T extends Tx> implements TxValidator<T> {
|
|
5
|
+
private readonly inner;
|
|
6
|
+
private readonly validatorSymbol;
|
|
7
|
+
private readonly cache;
|
|
8
|
+
constructor(inner: TxValidator<T>, validatorSymbol: symbol, cache: ITxValidationCache);
|
|
9
|
+
static new<T extends Tx>(inner: TxValidator<T> & {
|
|
10
|
+
identifier: symbol;
|
|
11
|
+
}, cache?: ITxValidationCache): TxValidator<T>;
|
|
12
|
+
static newWithIdentifier<T extends Tx>(inner: TxValidator<T>, identifier: symbol, cache?: ITxValidationCache): TxValidator<T>;
|
|
13
|
+
validateTx(tx: T): Promise<TxValidationResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9jYWNoZWRfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLCtGQUErRjtBQUMvRixxQkFBYSxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUVsRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlO0lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUh4QixZQUNtQixLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixLQUFLLEVBQUUsa0JBQWtCLEVBQ3hDO0lBRUosT0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDNUIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUM5QyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsR0FDekIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUVoQjtJQUVELE9BQWMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDMUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDckIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEdBQ3pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FFaEI7SUFFTSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFcEQ7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cached_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/cached_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,+FAA+F;AAC/F,qBAAa,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,YACmB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,kBAAkB,EACxC;IAEJ,OAAc,GAAG,CAAC,CAAC,SAAS,EAAE,EAC5B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAC9C,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAED,OAAc,iBAAiB,CAAC,CAAC,SAAS,EAAE,EAC1C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAEM,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEpD;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */ export class CachedTxValidator {
|
|
2
|
+
inner;
|
|
3
|
+
validatorSymbol;
|
|
4
|
+
cache;
|
|
5
|
+
constructor(inner, validatorSymbol, cache){
|
|
6
|
+
this.inner = inner;
|
|
7
|
+
this.validatorSymbol = validatorSymbol;
|
|
8
|
+
this.cache = cache;
|
|
9
|
+
}
|
|
10
|
+
static new(inner, cache) {
|
|
11
|
+
return CachedTxValidator.newWithIdentifier(inner, inner.identifier, cache);
|
|
12
|
+
}
|
|
13
|
+
static newWithIdentifier(inner, identifier, cache) {
|
|
14
|
+
return cache ? new CachedTxValidator(inner, identifier, cache) : inner;
|
|
15
|
+
}
|
|
16
|
+
validateTx(tx) {
|
|
17
|
+
return this.cache.getOrValidate(this.validatorSymbol, tx, ()=>this.inner.validateTx(tx));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
2
|
+
import { type Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
3
|
+
/** Validates that contract instance deployment logs contain correct addresses. */
|
|
4
|
+
export declare class ContractInstanceTxValidator implements TxValidator<Tx> {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(bindings?: LoggerBindings);
|
|
7
|
+
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfaW5zdGFuY2VfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL2NvbnRyYWN0X2luc3RhbmNlX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxFQUdMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLGtGQUFrRjtBQUNsRixxQkFBYSwyQkFBNEIsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdqRSxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FHcEQ7Q0FpQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract_instance_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/contract_instance_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,kFAAkF;AAClF,qBAAa,2BAA4B,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGjE,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGpD;CAiCF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
|
|
3
|
+
import { computeContractAddressFromInstance } from '@aztec/stdlib/contract';
|
|
4
|
+
import { TX_ERROR_INCORRECT_CONTRACT_ADDRESS, TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG } from '@aztec/stdlib/tx';
|
|
5
|
+
/** Validates that contract instance deployment logs contain correct addresses. */ export class ContractInstanceTxValidator {
|
|
6
|
+
#log;
|
|
7
|
+
constructor(bindings){
|
|
8
|
+
this.#log = createLogger('p2p:tx_validator:contract_instance', bindings);
|
|
9
|
+
}
|
|
10
|
+
async validateTx(tx) {
|
|
11
|
+
const reason = await this.#hasCorrectContractInstanceAddresses(tx);
|
|
12
|
+
return reason ? {
|
|
13
|
+
result: 'invalid',
|
|
14
|
+
reason: [
|
|
15
|
+
reason
|
|
16
|
+
]
|
|
17
|
+
} : {
|
|
18
|
+
result: 'valid'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async #hasCorrectContractInstanceAddresses(tx) {
|
|
22
|
+
const privateLogs = tx.data.getNonEmptyPrivateLogs();
|
|
23
|
+
for (const log of privateLogs){
|
|
24
|
+
if (!ContractInstancePublishedEvent.isContractInstancePublishedEvent(log)) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
let event;
|
|
28
|
+
try {
|
|
29
|
+
event = ContractInstancePublishedEvent.fromLog(log);
|
|
30
|
+
} catch (e) {
|
|
31
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to parse contract instance event: ${e}`);
|
|
32
|
+
return TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const instance = event.toContractInstance();
|
|
36
|
+
const computedAddress = await computeContractAddressFromInstance(instance);
|
|
37
|
+
if (!computedAddress.equals(instance.address)) {
|
|
38
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: contract instance address mismatch. Claimed ${instance.address}, computed ${computedAddress}`);
|
|
39
|
+
return TX_ERROR_INCORRECT_CONTRACT_ADDRESS;
|
|
40
|
+
}
|
|
41
|
+
} catch (e) {
|
|
42
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to compute contract instance address: ${e}`);
|
|
43
|
+
return TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -2,7 +2,8 @@ import { type LoggerBindings } from '@aztec/foundation/log';
|
|
|
2
2
|
import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
3
3
|
export declare class DataTxValidator implements TxValidator<Tx> {
|
|
4
4
|
#private;
|
|
5
|
+
readonly identifier: symbol;
|
|
5
6
|
constructor(bindings?: LoggerBindings);
|
|
6
7
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
7
8
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFXTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUNyRCxTQUFnQixVQUFVLEVBQUUsTUFBTSxDQUE2QjtJQUkvRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPcEQ7Q0F1SUYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAWL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IACrD,SAAgB,UAAU,EAAE,MAAM,CAA6B;IAI/D,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOpD;CAuIF"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
4
|
+
import { computeContractClassId } from '@aztec/stdlib/contract';
|
|
3
5
|
import { computeCalldataHash } from '@aztec/stdlib/hash';
|
|
4
|
-
import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_HASH, Tx } from '@aztec/stdlib/tx';
|
|
6
|
+
import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_CONTRACT_CLASS_ID, TX_ERROR_INCORRECT_HASH, TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG, Tx } from '@aztec/stdlib/tx';
|
|
5
7
|
export class DataTxValidator {
|
|
8
|
+
identifier = Symbol('DataTxValidator');
|
|
6
9
|
#log;
|
|
7
10
|
constructor(bindings){
|
|
8
11
|
this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
|
|
9
12
|
}
|
|
10
13
|
async validateTx(tx) {
|
|
11
|
-
const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx);
|
|
14
|
+
const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx) ?? await this.#hasCorrectContractClassIds(tx);
|
|
12
15
|
return reason ? {
|
|
13
16
|
result: 'invalid',
|
|
14
17
|
reason: [
|
|
@@ -77,4 +80,35 @@ export class DataTxValidator {
|
|
|
77
80
|
}
|
|
78
81
|
return undefined;
|
|
79
82
|
}
|
|
83
|
+
async #hasCorrectContractClassIds(tx) {
|
|
84
|
+
const contractClassLogs = tx.getContractClassLogs();
|
|
85
|
+
for (const log of contractClassLogs){
|
|
86
|
+
if (!ContractClassPublishedEvent.isContractClassPublishedEvent(log)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
let event;
|
|
90
|
+
try {
|
|
91
|
+
event = ContractClassPublishedEvent.fromLog(log);
|
|
92
|
+
} catch (e) {
|
|
93
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to parse contract class event: ${e}`);
|
|
94
|
+
return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const { publicBytecodeCommitment } = await event.toContractClassPublicWithBytecodeCommitment();
|
|
98
|
+
const computedClassId = await computeContractClassId({
|
|
99
|
+
artifactHash: event.artifactHash,
|
|
100
|
+
privateFunctionsRoot: event.privateFunctionsRoot,
|
|
101
|
+
publicBytecodeCommitment
|
|
102
|
+
});
|
|
103
|
+
if (!computedClassId.equals(event.contractClassId)) {
|
|
104
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: contract class id mismatch. Claimed ${event.contractClassId}, computed ${computedClassId}`);
|
|
105
|
+
return TX_ERROR_INCORRECT_CONTRACT_CLASS_ID;
|
|
106
|
+
}
|
|
107
|
+
} catch (e) {
|
|
108
|
+
this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to compute contract class id: ${e}`);
|
|
109
|
+
return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
80
114
|
}
|