@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.24de95ac
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/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -9
- package/dest/client/factory.d.ts +13 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +60 -24
- package/dest/client/index.d.ts +1 -0
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +155 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +72 -169
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +365 -174
- package/dest/config.d.ts +123 -103
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +173 -34
- package/dest/enr/generate-enr.d.ts +10 -2
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +27 -5
- package/dest/index.d.ts +3 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +42 -4
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +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 +204 -54
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +10 -2
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +93 -15
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +10 -2
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +86 -18
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +9 -15
- package/dest/mem_pools/instrumentation.d.ts +7 -11
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +25 -37
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +93 -9
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +469 -97
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +33 -9
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +133 -36
- package/dest/mem_pools/tx_pool/priority.js +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +64 -8
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +264 -39
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +45 -9
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +5 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +61 -12
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +56 -86
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
- package/dest/msg_validators/tx_validator/factory.d.ts +15 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +74 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
- package/dest/msg_validators/tx_validator/index.d.ts +7 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +7 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +7 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +91 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/test_utils.js +22 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +6 -5
- package/dest/services/discv5/discV5_service.d.ts +9 -8
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +63 -36
- package/dest/services/dummy_service.d.ts +49 -10
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +88 -5
- package/dest/services/encoding.d.ts +25 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +73 -5
- package/dest/services/index.d.ts +4 -0
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +4 -0
- package/dest/services/libp2p/instrumentation.d.ts +18 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +157 -0
- package/dest/services/libp2p/libp2p_service.d.ts +87 -42
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +500 -218
- package/dest/services/peer-manager/interface.d.ts +23 -0
- package/dest/services/peer-manager/interface.d.ts.map +1 -0
- package/dest/services/peer-manager/interface.js +1 -0
- 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 +11 -2
- package/dest/services/peer-manager/peer_manager.d.ts +126 -15
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +547 -72
- package/dest/services/reqresp/config.d.ts +10 -8
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +18 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +30 -13
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
- package/dest/services/reqresp/index.d.ts +2 -1
- package/dest/services/reqresp/index.d.ts.map +1 -1
- package/dest/services/reqresp/index.js +2 -1
- package/dest/services/reqresp/interface.d.ts +72 -23
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +45 -26
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.d.ts +43 -0
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/auth.js +71 -0
- package/dest/services/reqresp/protocols/block.d.ts +5 -0
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +28 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +49 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +2 -4
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +7 -7
- package/dest/services/reqresp/protocols/index.d.ts +2 -0
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +2 -0
- package/dest/services/reqresp/protocols/ping.d.ts +0 -2
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +38 -6
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +72 -5
- package/dest/services/reqresp/protocols/tx.d.ts +12 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +34 -6
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +4 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
- package/dest/services/reqresp/reqresp.d.ts +45 -47
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +298 -207
- package/dest/services/reqresp/status.d.ts +9 -3
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/reqresp/status.js +9 -2
- package/dest/services/service.d.ts +22 -18
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +25 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +58 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +56 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/fast_tx_collection.js +300 -0
- package/dest/services/tx_collection/index.d.ts +3 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +2 -0
- package/dest/services/tx_collection/instrumentation.d.ts +10 -0
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_collection/instrumentation.js +34 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +54 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/slow_tx_collection.js +176 -0
- package/dest/services/tx_collection/tx_collection.d.ts +110 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +128 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +111 -0
- package/dest/services/tx_collection/tx_source.d.ts +18 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +31 -0
- package/dest/services/tx_provider.d.ts +49 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +210 -0
- package/dest/services/tx_provider_instrumentation.d.ts +13 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +34 -0
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +1 -0
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +1 -0
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +4 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts +32 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +86 -16
- package/dest/test-helpers/mock-pubsub.d.ts +59 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +130 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
- package/dest/test-helpers/mock-tx-helpers.js +19 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +14 -10
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +62 -28
- package/dest/testbench/p2p_client_testbench_worker.js +96 -25
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.js +4 -4
- package/dest/testbench/worker_client_manager.d.ts +0 -5
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +11 -19
- package/dest/types/index.d.ts +3 -1
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +2 -0
- package/dest/util.d.ts +22 -15
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +64 -67
- package/dest/versioning.d.ts +3 -3
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +8 -3
- package/package.json +28 -24
- package/src/bootstrap/bootstrap.ts +27 -11
- package/src/client/factory.ts +136 -45
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +195 -0
- package/src/client/p2p_client.ts +460 -327
- package/src/config.ts +288 -134
- package/src/enr/generate-enr.ts +39 -6
- package/src/index.ts +4 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +48 -4
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -55
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +117 -20
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +114 -22
- package/src/mem_pools/attestation_pool/mocks.ts +11 -10
- package/src/mem_pools/instrumentation.ts +32 -46
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +549 -108
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +153 -44
- package/src/mem_pools/tx_pool/priority.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +67 -8
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +217 -34
- package/src/msg_validators/attestation_validator/attestation_validator.ts +55 -10
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +66 -14
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +4 -4
- package/src/msg_validators/tx_validator/data_validator.ts +81 -69
- package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
- package/src/msg_validators/tx_validator/factory.ts +109 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
- package/src/msg_validators/tx_validator/index.ts +7 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +58 -21
- package/src/msg_validators/tx_validator/phases_validator.ts +114 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +46 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
- package/src/services/discv5/discV5_service.ts +84 -38
- package/src/services/dummy_service.ts +147 -9
- package/src/services/encoding.ts +80 -5
- package/src/services/index.ts +4 -0
- package/src/services/libp2p/instrumentation.ts +158 -0
- package/src/services/libp2p/libp2p_service.ts +646 -263
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +16 -1
- package/src/services/peer-manager/peer_manager.ts +652 -78
- package/src/services/reqresp/config.ts +26 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +148 -95
- package/src/services/reqresp/index.ts +2 -0
- package/src/services/reqresp/interface.ts +91 -36
- package/src/services/reqresp/metrics.ts +4 -1
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block.ts +24 -3
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +9 -7
- package/src/services/reqresp/protocols/index.ts +2 -0
- package/src/services/reqresp/protocols/status.ts +117 -5
- package/src/services/reqresp/protocols/tx.ts +35 -6
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
- package/src/services/reqresp/reqresp.ts +387 -256
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +45 -21
- package/src/services/tx_collection/config.ts +84 -0
- package/src/services/tx_collection/fast_tx_collection.ts +340 -0
- package/src/services/tx_collection/index.ts +2 -0
- package/src/services/tx_collection/instrumentation.ts +43 -0
- package/src/services/tx_collection/slow_tx_collection.ts +232 -0
- package/src/services/tx_collection/tx_collection.ts +215 -0
- package/src/services/tx_collection/tx_collection_sink.ts +129 -0
- package/src/services/tx_collection/tx_source.ts +37 -0
- package/src/services/tx_provider.ts +216 -0
- package/src/services/tx_provider_instrumentation.ts +44 -0
- package/src/test-helpers/index.ts +1 -0
- package/src/test-helpers/make-enrs.ts +4 -5
- package/src/test-helpers/make-test-p2p-clients.ts +111 -21
- package/src/test-helpers/mock-pubsub.ts +188 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +86 -35
- package/src/testbench/p2p_client_testbench_worker.ts +145 -22
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +17 -23
- package/src/types/index.ts +2 -0
- package/src/util.ts +93 -89
- package/src/versioning.ts +11 -4
|
@@ -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,0BAA0B,CAAC;AAEnD,OAAO,
|
|
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,0BAA0B,CAAC;AAEnD,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;gBAAN,MAAM,EAAE;QACd,SAAS,EAAE,EAAE,CAAC;QACd,aAAa,EAAE,EAAE,CAAC;QAClB,UAAU,EAAE,EAAE,CAAC;QACf,qBAAqB,EAAE,EAAE,CAAC;KAC3B;IAGH,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA4D/C"}
|
|
@@ -1,41 +1,60 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import {
|
|
2
|
+
import { TX_ERROR_INCORRECT_L1_CHAIN_ID, TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH, TX_ERROR_INCORRECT_ROLLUP_VERSION, TX_ERROR_INCORRECT_VK_TREE_ROOT } from '@aztec/stdlib/tx';
|
|
3
3
|
export class MetadataTxValidator {
|
|
4
|
-
|
|
5
|
-
blockNumber;
|
|
4
|
+
values;
|
|
6
5
|
#log;
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
9
|
-
this.blockNumber = blockNumber;
|
|
6
|
+
constructor(values){
|
|
7
|
+
this.values = values;
|
|
10
8
|
this.#log = createLogger('p2p:tx_validator:tx_metadata');
|
|
11
9
|
}
|
|
12
|
-
|
|
10
|
+
validateTx(tx) {
|
|
13
11
|
const errors = [];
|
|
14
|
-
if (!
|
|
15
|
-
errors.push(
|
|
12
|
+
if (!this.#hasCorrectL1ChainId(tx)) {
|
|
13
|
+
errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
|
|
16
14
|
}
|
|
17
|
-
if (!
|
|
18
|
-
errors.push(
|
|
15
|
+
if (!this.#hasCorrectRollupVersion(tx)) {
|
|
16
|
+
errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
|
|
19
17
|
}
|
|
20
|
-
|
|
18
|
+
if (!this.#hasCorrectVkTreeRoot(tx)) {
|
|
19
|
+
errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
|
|
20
|
+
}
|
|
21
|
+
if (!this.#hasCorrectprotocolContractsHash(tx)) {
|
|
22
|
+
errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
|
|
23
|
+
}
|
|
24
|
+
return Promise.resolve(errors.length > 0 ? {
|
|
21
25
|
result: 'invalid',
|
|
22
26
|
reason: errors
|
|
23
27
|
} : {
|
|
24
28
|
result: 'valid'
|
|
25
|
-
};
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
#hasCorrectVkTreeRoot(tx) {
|
|
32
|
+
// This gets implicitly tested in the proof validator, but we can get a much cheaper check here by looking early at the vk.
|
|
33
|
+
if (!tx.data.constants.vkTreeRoot.equals(this.values.vkTreeRoot)) {
|
|
34
|
+
this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`);
|
|
35
|
+
return false;
|
|
36
|
+
} else {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
#hasCorrectprotocolContractsHash(tx) {
|
|
41
|
+
if (!tx.data.constants.protocolContractsHash.equals(this.values.protocolContractsHash)) {
|
|
42
|
+
this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`);
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
26
46
|
}
|
|
27
|
-
|
|
28
|
-
if (!tx.data.constants.txContext.chainId.equals(this.
|
|
29
|
-
this.#log.
|
|
47
|
+
#hasCorrectL1ChainId(tx) {
|
|
48
|
+
if (!tx.data.constants.txContext.chainId.equals(this.values.l1ChainId)) {
|
|
49
|
+
this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`);
|
|
30
50
|
return false;
|
|
31
51
|
} else {
|
|
32
52
|
return true;
|
|
33
53
|
}
|
|
34
54
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} for low max block number. Tx max block number: ${maxBlockNumber.value}, current block number: ${this.blockNumber}.`);
|
|
55
|
+
#hasCorrectRollupVersion(tx) {
|
|
56
|
+
if (!tx.data.constants.txContext.version.equals(this.values.rollupVersion)) {
|
|
57
|
+
this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`);
|
|
39
58
|
return false;
|
|
40
59
|
} else {
|
|
41
60
|
return true;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
2
|
+
import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
5
|
+
export declare class PhasesTxValidator implements TxValidator<Tx> {
|
|
6
|
+
#private;
|
|
7
|
+
private setupAllowList;
|
|
8
|
+
private timestamp;
|
|
9
|
+
private contractsDB;
|
|
10
|
+
constructor(contracts: ContractDataSource, setupAllowList: AllowedElement[], timestamp: UInt64);
|
|
11
|
+
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
12
|
+
private isOnAllowList;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=phases_validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAIL,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;gBAGrC,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM;IAKrB,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAqCvC,aAAa;CAiD5B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
|
|
3
|
+
import { TX_ERROR_DURING_VALIDATION, TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED, TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
|
+
export class PhasesTxValidator {
|
|
5
|
+
setupAllowList;
|
|
6
|
+
timestamp;
|
|
7
|
+
#log;
|
|
8
|
+
contractsDB;
|
|
9
|
+
constructor(contracts, setupAllowList, timestamp){
|
|
10
|
+
this.setupAllowList = setupAllowList;
|
|
11
|
+
this.timestamp = timestamp;
|
|
12
|
+
this.#log = createLogger('sequencer:tx_validator:tx_phases');
|
|
13
|
+
this.contractsDB = new PublicContractsDB(contracts);
|
|
14
|
+
}
|
|
15
|
+
async validateTx(tx) {
|
|
16
|
+
try {
|
|
17
|
+
// TODO(@spalladino): We add this just to handle public authwit-check calls during setup
|
|
18
|
+
// which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
|
|
19
|
+
// which is what we're trying to do as part of the current txs.
|
|
20
|
+
await this.contractsDB.addNewContracts(tx);
|
|
21
|
+
if (!tx.data.forPublic) {
|
|
22
|
+
this.#log.debug(`Tx ${tx.getTxHash().toString()} does not contain enqueued public functions. Skipping phases validation.`);
|
|
23
|
+
return {
|
|
24
|
+
result: 'valid'
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
|
|
28
|
+
for (const setupFn of setupFns){
|
|
29
|
+
if (!await this.isOnAllowList(setupFn, this.setupAllowList)) {
|
|
30
|
+
this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()} because it calls setup function not on allow list: ${setupFn.request.contractAddress}:${setupFn.functionSelector}`, {
|
|
31
|
+
allowList: this.setupAllowList
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
result: 'invalid',
|
|
35
|
+
reason: [
|
|
36
|
+
TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
result: 'valid'
|
|
43
|
+
};
|
|
44
|
+
} catch (err) {
|
|
45
|
+
this.#log.error(`Error validating phases for tx`, err);
|
|
46
|
+
return {
|
|
47
|
+
result: 'invalid',
|
|
48
|
+
reason: [
|
|
49
|
+
TX_ERROR_DURING_VALIDATION
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
} finally{
|
|
53
|
+
this.contractsDB.clearContractsForTx();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async isOnAllowList(publicCall, allowList) {
|
|
57
|
+
if (publicCall.isEmpty()) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const contractAddress = publicCall.request.contractAddress;
|
|
61
|
+
const functionSelector = publicCall.functionSelector;
|
|
62
|
+
// do these checks first since they don't require the contract class
|
|
63
|
+
for (const entry of allowList){
|
|
64
|
+
if ('address' in entry && !('selector' in entry)) {
|
|
65
|
+
if (contractAddress.equals(entry.address)) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if ('address' in entry && 'selector' in entry) {
|
|
70
|
+
if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const contractClass = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
|
|
75
|
+
if (!contractClass) {
|
|
76
|
+
throw new Error(`Contract not found: ${contractAddress}`);
|
|
77
|
+
}
|
|
78
|
+
if ('classId' in entry && !('selector' in entry)) {
|
|
79
|
+
if (contractClass.currentContractClassId.equals(entry.classId)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if ('classId' in entry && 'selector' in entry) {
|
|
84
|
+
if (contractClass.currentContractClassId.equals(entry.classId) && (entry.selector === undefined || entry.selector.equals(functionSelector))) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import { type Tx } from '@aztec/stdlib/tx';
|
|
5
|
+
export declare function patchNonRevertibleFn(tx: Tx, index: number, overrides: {
|
|
6
|
+
address?: AztecAddress;
|
|
7
|
+
selector: FunctionSelector;
|
|
8
|
+
args?: Fr[];
|
|
9
|
+
msgSender?: AztecAddress;
|
|
10
|
+
}): Promise<AztecAddress>;
|
|
11
|
+
export declare function patchRevertibleFn(tx: Tx, index: number, overrides: {
|
|
12
|
+
address?: AztecAddress;
|
|
13
|
+
selector: FunctionSelector;
|
|
14
|
+
args?: Fr[];
|
|
15
|
+
msgSender?: AztecAddress;
|
|
16
|
+
}): Promise<AztecAddress>;
|
|
17
|
+
//# sourceMappingURL=test_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_utils.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/test_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAgB,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,YAAY,CAAA;CAAE,GACvG,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,YAAY,CAAA;CAAE,GACvG,OAAO,CAAC,YAAY,CAAC,CAEvB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HashedValues } from '@aztec/stdlib/tx';
|
|
2
|
+
export function patchNonRevertibleFn(tx, index, overrides) {
|
|
3
|
+
return patchFn('nonRevertibleAccumulatedData', tx, index, overrides);
|
|
4
|
+
}
|
|
5
|
+
export function patchRevertibleFn(tx, index, overrides) {
|
|
6
|
+
return patchFn('revertibleAccumulatedData', tx, index, overrides);
|
|
7
|
+
}
|
|
8
|
+
async function patchFn(where, tx, index, overrides) {
|
|
9
|
+
const calldataIndex = where === 'nonRevertibleAccumulatedData' ? index : index + tx.data.forPublic.nonRevertibleAccumulatedData.publicCallRequests.length;
|
|
10
|
+
const calldata = [
|
|
11
|
+
overrides.selector.toField(),
|
|
12
|
+
...overrides.args ?? []
|
|
13
|
+
];
|
|
14
|
+
const hashedCalldata = await HashedValues.fromCalldata(calldata);
|
|
15
|
+
tx.publicFunctionCalldata[calldataIndex] = hashedCalldata;
|
|
16
|
+
const request = tx.data.forPublic[where].publicCallRequests[index];
|
|
17
|
+
request.contractAddress = overrides.address ?? request.contractAddress;
|
|
18
|
+
request.msgSender = overrides.msgSender ?? request.msgSender;
|
|
19
|
+
request.calldataHash = hashedCalldata.hash;
|
|
20
|
+
tx.data.forPublic[where].publicCallRequests[index] = request;
|
|
21
|
+
return request.contractAddress;
|
|
22
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
2
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
3
|
+
export declare class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
|
|
4
|
+
#private;
|
|
5
|
+
private values;
|
|
6
|
+
constructor(values: {
|
|
7
|
+
timestamp: UInt64;
|
|
8
|
+
blockNumber: number;
|
|
9
|
+
});
|
|
10
|
+
validateTx(tx: T): Promise<TxValidationResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=timestamp_validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/timestamp_validator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EAEV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,oBAAoB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIxE,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE;QAGd,SAAS,EAAE,MAAM,CAAC;QAElB,WAAW,EAAE,MAAM,CAAC;KACrB;IAGH,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsB/C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP, getTxHash } from '@aztec/stdlib/tx';
|
|
3
|
+
export class TimestampTxValidator {
|
|
4
|
+
values;
|
|
5
|
+
#log;
|
|
6
|
+
constructor(values){
|
|
7
|
+
this.values = values;
|
|
8
|
+
this.#log = createLogger('p2p:tx_validator:timestamp');
|
|
9
|
+
}
|
|
10
|
+
validateTx(tx) {
|
|
11
|
+
const includeByTimestamp = tx.data.includeByTimestamp;
|
|
12
|
+
// If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
|
|
13
|
+
// function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
|
|
14
|
+
const buildingBlock1 = this.values.blockNumber === 1;
|
|
15
|
+
if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
|
|
16
|
+
if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
|
|
17
|
+
this.#log.warn(`A tx built against a genesis block failed to be included in block 1 which is the only block in which txs built against a genesis block are allowed to be included.`);
|
|
18
|
+
}
|
|
19
|
+
this.#log.verbose(`Rejecting tx ${getTxHash(tx)} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${this.values.timestamp}.`);
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
result: 'invalid',
|
|
22
|
+
reason: [
|
|
23
|
+
TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
return Promise.resolve({
|
|
28
|
+
result: 'valid'
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
|
|
2
|
+
export declare class TxPermittedValidator implements TxValidator<Tx> {
|
|
3
|
+
#private;
|
|
4
|
+
private permitted;
|
|
5
|
+
constructor(permitted: boolean);
|
|
6
|
+
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=tx_permitted_validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_permitted_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_permitted_validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5E,qBAAa,oBAAqB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAG9C,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,OAAO;IAEtC,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQhD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
export class TxPermittedValidator {
|
|
3
|
+
permitted;
|
|
4
|
+
#log;
|
|
5
|
+
constructor(permitted){
|
|
6
|
+
this.permitted = permitted;
|
|
7
|
+
this.#log = createLogger('p2p:tx_validator:tx_permitted');
|
|
8
|
+
}
|
|
9
|
+
validateTx(tx) {
|
|
10
|
+
if (!this.permitted) {
|
|
11
|
+
const txHash = tx.getTxHash();
|
|
12
|
+
this.#log.verbose(`Rejecting tx ${txHash.toString()}. Reason: Transactions are not permitted`);
|
|
13
|
+
return Promise.resolve({
|
|
14
|
+
result: 'invalid',
|
|
15
|
+
reason: [
|
|
16
|
+
'Transactions are not permitted'
|
|
17
|
+
]
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
result: 'valid'
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AACA,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;;IAG1C,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,6BAA6B;IAErD,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAStD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import {
|
|
2
|
+
import { TX_ERROR_INVALID_PROOF } from '@aztec/stdlib/tx';
|
|
3
3
|
export class TxProofValidator {
|
|
4
4
|
verifier;
|
|
5
5
|
#log;
|
|
@@ -8,16 +8,17 @@ export class TxProofValidator {
|
|
|
8
8
|
this.#log = createLogger('p2p:tx_validator:private_proof');
|
|
9
9
|
}
|
|
10
10
|
async validateTx(tx) {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const result = await this.verifier.verifyProof(tx);
|
|
12
|
+
if (!result.valid) {
|
|
13
|
+
this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()} for invalid proof`);
|
|
13
14
|
return {
|
|
14
15
|
result: 'invalid',
|
|
15
16
|
reason: [
|
|
16
|
-
|
|
17
|
+
TX_ERROR_INVALID_PROOF
|
|
17
18
|
]
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
this.#log.trace(`Accepted ${
|
|
21
|
+
this.#log.trace(`Accepted ${tx.getTxHash().toString()} with valid proof`);
|
|
21
22
|
return {
|
|
22
23
|
result: 'valid'
|
|
23
24
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
1
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
-
import { ENR } from '@chainsafe/enr';
|
|
4
2
|
import type { PeerId } from '@libp2p/interface';
|
|
3
|
+
import { type IDiscv5CreateOptions } from '@nethermindeth/discv5';
|
|
4
|
+
import { ENR } from '@nethermindeth/enr';
|
|
5
5
|
import EventEmitter from 'events';
|
|
6
6
|
import type { P2PConfig } from '../../config.js';
|
|
7
7
|
import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
|
|
@@ -11,6 +11,7 @@ import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
|
|
|
11
11
|
export declare class DiscV5Service extends EventEmitter implements PeerDiscoveryService {
|
|
12
12
|
private peerId;
|
|
13
13
|
private config;
|
|
14
|
+
private readonly packageVersion;
|
|
14
15
|
private logger;
|
|
15
16
|
/** The Discv5 instance */
|
|
16
17
|
private discv5;
|
|
@@ -18,17 +19,17 @@ export declare class DiscV5Service extends EventEmitter implements PeerDiscovery
|
|
|
18
19
|
private enr;
|
|
19
20
|
/** Version identifiers. */
|
|
20
21
|
private versions;
|
|
21
|
-
/** UDP listen addr */
|
|
22
|
-
private listenMultiAddrUdp;
|
|
23
22
|
private currentState;
|
|
24
|
-
readonly bootstrapNodes: string[];
|
|
25
23
|
private bootstrapNodePeerIds;
|
|
26
|
-
|
|
24
|
+
bootstrapNodeEnrs: ENR[];
|
|
25
|
+
private trustedPeerEnrs;
|
|
27
26
|
private startTime;
|
|
28
|
-
|
|
27
|
+
private handlers;
|
|
28
|
+
constructor(peerId: PeerId, config: P2PConfig, packageVersion: string, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger, configOverrides?: Partial<IDiscv5CreateOptions>);
|
|
29
|
+
private onMultiaddrUpdated;
|
|
29
30
|
start(): Promise<void>;
|
|
30
31
|
runRandomNodesQuery(): Promise<void>;
|
|
31
|
-
|
|
32
|
+
getKadValues(): ENR[];
|
|
32
33
|
getEnr(): ENR;
|
|
33
34
|
getPeerId(): PeerId;
|
|
34
35
|
getStatus(): PeerDiscoveryState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discV5_service.d.ts","sourceRoot":"","sources":["../../../src/services/discv5/discV5_service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discV5_service.d.ts","sourceRoot":"","sources":["../../../src/services/discv5/discV5_service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEvG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAmC,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,GAAG,EAAe,MAAM,oBAAoB,CAAC;AACtD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,OAAO,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAI9E;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAa,YAAW,oBAAoB;IAyB3E,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,MAAM;IA5BhB,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAqB;IAEnC,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAc;IAEzB,2BAA2B;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IAErC,OAAO,CAAC,YAAY,CAA8B;IAElD,OAAO,CAAC,oBAAoB,CAAgB;IACrC,iBAAiB,EAAE,GAAG,EAAE,CAAM;IACrC,OAAO,CAAC,eAAe,CAAa;IAEpC,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,QAAQ,CAId;gBAGQ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACR,cAAc,EAAE,MAAM,EACvC,SAAS,GAAE,eAAsC,EACzC,MAAM,yCAAqC,EACnD,eAAe,GAAE,OAAO,CAAC,oBAAoB,CAAM;IA4ErD,OAAO,CAAC,kBAAkB;IAQb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuDtB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB1C,YAAY,IAAI,GAAG,EAAE;IAIrB,MAAM,IAAI,GAAG;IAIb,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,kBAAkB;IAI/B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAapB,UAAU;IAOxB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,WAAW;CA0BpB"}
|
|
@@ -2,13 +2,13 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
3
|
import { checkCompressedComponentVersion } from '@aztec/stdlib/versioning';
|
|
4
4
|
import { OtelMetricsAdapter, getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
-
import { Discv5 } from '@chainsafe/discv5';
|
|
6
|
-
import { ENR, SignableENR } from '@chainsafe/enr';
|
|
7
5
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
6
|
+
import { Discv5 } from '@nethermindeth/discv5';
|
|
7
|
+
import { ENR } from '@nethermindeth/enr';
|
|
8
8
|
import EventEmitter from 'events';
|
|
9
|
+
import { createNodeENR } from '../../enr/generate-enr.js';
|
|
9
10
|
import { AZTEC_ENR_KEY, Discv5Event, PeerEvent } from '../../types/index.js';
|
|
10
11
|
import { convertToMultiaddr } from '../../util.js';
|
|
11
|
-
import { setAztecEnrKey } from '../../versioning.js';
|
|
12
12
|
import { PeerDiscoveryState } from '../service.js';
|
|
13
13
|
const delayBeforeStart = 2000; // 2sec
|
|
14
14
|
/**
|
|
@@ -16,46 +16,52 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
16
16
|
*/ export class DiscV5Service extends EventEmitter {
|
|
17
17
|
peerId;
|
|
18
18
|
config;
|
|
19
|
+
packageVersion;
|
|
19
20
|
logger;
|
|
20
21
|
/** The Discv5 instance */ discv5;
|
|
21
22
|
/** This instance's ENR */ enr;
|
|
22
23
|
/** Version identifiers. */ versions;
|
|
23
|
-
/** UDP listen addr */ listenMultiAddrUdp;
|
|
24
24
|
currentState;
|
|
25
|
-
bootstrapNodes;
|
|
26
25
|
bootstrapNodePeerIds;
|
|
27
26
|
bootstrapNodeEnrs;
|
|
27
|
+
trustedPeerEnrs;
|
|
28
28
|
startTime;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
|
|
29
|
+
handlers;
|
|
30
|
+
constructor(peerId, config, packageVersion, telemetry = getTelemetryClient(), logger = createLogger('p2p:discv5_service'), configOverrides = {}){
|
|
31
|
+
super(), this.peerId = peerId, this.config = config, this.packageVersion = packageVersion, this.logger = logger, this.currentState = PeerDiscoveryState.STOPPED, this.bootstrapNodePeerIds = [], this.bootstrapNodeEnrs = [], this.trustedPeerEnrs = [], this.startTime = 0, this.handlers = {
|
|
32
|
+
onMultiaddrUpdated: this.onMultiaddrUpdated.bind(this),
|
|
33
|
+
onDiscovered: this.onDiscovered.bind(this),
|
|
34
|
+
onEnrAdded: this.onEnrAdded.bind(this)
|
|
35
|
+
};
|
|
36
|
+
const { p2pIp, p2pPort, p2pBroadcastPort, bootstrapNodes, trustedPeers, privatePeers } = config;
|
|
37
|
+
this.bootstrapNodeEnrs = bootstrapNodes.map((x)=>ENR.decodeTxt(x));
|
|
38
|
+
const privatePeerEnrs = new Set(privatePeers);
|
|
39
|
+
this.trustedPeerEnrs = trustedPeers.filter((x)=>!privatePeerEnrs.has(x)).map((x)=>ENR.decodeTxt(x));
|
|
40
|
+
// If no overridden broadcast port is provided, use the p2p port as the broadcast port
|
|
41
|
+
if (!p2pBroadcastPort) {
|
|
42
|
+
this.logger.warn('No p2pBroadcastPort provided, using p2pPort as broadcast port');
|
|
43
|
+
config.p2pBroadcastPort = p2pPort;
|
|
40
44
|
}
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const bindAddrs = {
|
|
46
|
+
ip4: multiaddr(convertToMultiaddr(config.listenAddress, p2pPort, 'udp'))
|
|
47
|
+
};
|
|
48
|
+
let multiAddrUdp, multiAddrTcp;
|
|
49
|
+
if (p2pIp) {
|
|
50
|
+
multiAddrTcp = multiaddr(`${convertToMultiaddr(p2pIp, config.p2pBroadcastPort, 'tcp')}/p2p/${peerId.toString()}`);
|
|
51
|
+
multiAddrUdp = multiaddr(`${convertToMultiaddr(p2pIp, config.p2pBroadcastPort, 'udp')}/p2p/${peerId.toString()}`);
|
|
52
|
+
}
|
|
53
|
+
({ enr: this.enr, versions: this.versions } = createNodeENR(peerId, multiAddrUdp, multiAddrTcp, config, this.packageVersion));
|
|
48
54
|
const metricsRegistry = new OtelMetricsAdapter(telemetry);
|
|
49
55
|
this.discv5 = Discv5.create({
|
|
50
56
|
enr: this.enr,
|
|
51
57
|
peerId,
|
|
52
|
-
bindAddrs
|
|
53
|
-
ip4: this.listenMultiAddrUdp
|
|
54
|
-
},
|
|
58
|
+
bindAddrs,
|
|
55
59
|
config: {
|
|
56
60
|
lookupTimeout: 2000,
|
|
57
61
|
requestTimeout: 2000,
|
|
58
|
-
allowUnverifiedSessions: true
|
|
62
|
+
allowUnverifiedSessions: true,
|
|
63
|
+
enrUpdate: !p2pIp ? true : false,
|
|
64
|
+
...configOverrides.config
|
|
59
65
|
},
|
|
60
66
|
metricsRegistry
|
|
61
67
|
});
|
|
@@ -77,8 +83,18 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
77
83
|
return origOnEstablished(...args);
|
|
78
84
|
}
|
|
79
85
|
};
|
|
80
|
-
this.discv5.on(Discv5Event.DISCOVERED, this.onDiscovered
|
|
81
|
-
this.discv5.on(Discv5Event.ENR_ADDED, this.onEnrAdded
|
|
86
|
+
this.discv5.on(Discv5Event.DISCOVERED, this.handlers.onDiscovered);
|
|
87
|
+
this.discv5.on(Discv5Event.ENR_ADDED, this.handlers.onEnrAdded);
|
|
88
|
+
this.discv5.on(Discv5Event.MULTIADDR_UPDATED, this.handlers.onMultiaddrUpdated);
|
|
89
|
+
}
|
|
90
|
+
onMultiaddrUpdated(m) {
|
|
91
|
+
// We want to update our tcp port to match the udp port
|
|
92
|
+
// p2pBroadcastPort is optional on config, however it is set to default within the p2p client factory
|
|
93
|
+
const multiAddrTcp = multiaddr(convertToMultiaddr(m.nodeAddress().address, this.config.p2pBroadcastPort, 'tcp'));
|
|
94
|
+
this.enr.setLocationMultiaddr(multiAddrTcp);
|
|
95
|
+
this.logger.info('Multiaddr updated', {
|
|
96
|
+
multiaddr: multiAddrTcp.toString()
|
|
97
|
+
});
|
|
82
98
|
}
|
|
83
99
|
async start() {
|
|
84
100
|
if (this.currentState === PeerDiscoveryState.RUNNING) {
|
|
@@ -96,10 +112,10 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
96
112
|
});
|
|
97
113
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
98
114
|
// Add bootnode ENR if provided
|
|
99
|
-
if (this.
|
|
115
|
+
if (this.bootstrapNodeEnrs?.length) {
|
|
100
116
|
// Do this conversion once since it involves an async function call
|
|
101
117
|
this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodeEnrs.map((enr)=>enr.peerId()));
|
|
102
|
-
this.logger.info(`Adding ${this.
|
|
118
|
+
this.logger.info(`Adding ${this.bootstrapNodeEnrs.length} bootstrap nodes ENRs: ${this.bootstrapNodeEnrs.map((enr)=>enr.encodeTxt()).join(', ')}`);
|
|
103
119
|
for (const enr of this.bootstrapNodeEnrs){
|
|
104
120
|
try {
|
|
105
121
|
if (this.config.bootstrapNodeEnrVersionCheck) {
|
|
@@ -115,10 +131,17 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
115
131
|
}
|
|
116
132
|
}
|
|
117
133
|
}
|
|
134
|
+
// Add trusted peer ENRs if provided
|
|
135
|
+
if (this.trustedPeerEnrs?.length) {
|
|
136
|
+
this.logger.info(`Adding ${this.trustedPeerEnrs.length} trusted peer ENRs: ${this.trustedPeerEnrs.map((enr)=>enr.encodeTxt()).join(', ')}`);
|
|
137
|
+
for (const enr of this.trustedPeerEnrs){
|
|
138
|
+
this.discv5.addEnr(enr);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
118
141
|
}
|
|
119
142
|
async runRandomNodesQuery() {
|
|
120
143
|
if (this.currentState !== PeerDiscoveryState.RUNNING) {
|
|
121
|
-
|
|
144
|
+
return;
|
|
122
145
|
}
|
|
123
146
|
// First, wait some time before starting the peer discovery
|
|
124
147
|
// reference: https://github.com/ChainSafe/lodestar/issues/3423
|
|
@@ -132,7 +155,7 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
132
155
|
this.logger.error(`Error running discV5 random node query: ${err}`);
|
|
133
156
|
}
|
|
134
157
|
}
|
|
135
|
-
|
|
158
|
+
getKadValues() {
|
|
136
159
|
return this.discv5.kadValues();
|
|
137
160
|
}
|
|
138
161
|
getEnr() {
|
|
@@ -148,8 +171,12 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
148
171
|
return this.bootstrapNodePeerIds.some((node)=>node.equals(peerId));
|
|
149
172
|
}
|
|
150
173
|
async stop() {
|
|
151
|
-
|
|
152
|
-
|
|
174
|
+
if (this.currentState !== PeerDiscoveryState.RUNNING) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
await this.discv5.off(Discv5Event.DISCOVERED, this.handlers.onDiscovered);
|
|
178
|
+
await this.discv5.off(Discv5Event.ENR_ADDED, this.handlers.onEnrAdded);
|
|
179
|
+
await this.discv5.off(Discv5Event.MULTIADDR_UPDATED, this.handlers.onMultiaddrUpdated);
|
|
153
180
|
await this.discv5.stop();
|
|
154
181
|
this.currentState = PeerDiscoveryState.STOPPED;
|
|
155
182
|
}
|
|
@@ -190,7 +217,7 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
190
217
|
// Check the peer is an aztec peer
|
|
191
218
|
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
192
219
|
if (!value) {
|
|
193
|
-
this.logger.
|
|
220
|
+
this.logger.debug(`Peer node ${enr.nodeId} does not have aztec key in ENR`);
|
|
194
221
|
return false;
|
|
195
222
|
}
|
|
196
223
|
// And check it has the correct version
|