@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.5476d83
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 +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +22 -9
- package/dest/client/factory.d.ts +14 -4
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +60 -24
- package/dest/client/index.d.ts +2 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +157 -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 -187
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +373 -177
- package/dest/config.d.ts +151 -125
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +183 -34
- package/dest/enr/generate-enr.d.ts +11 -3
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +27 -5
- package/dest/enr/index.d.ts +1 -1
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +4 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +68 -8
- 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 +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 +214 -63
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -6
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +126 -25
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +19 -6
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +111 -21
- package/dest/mem_pools/attestation_pool/mocks.d.ts +225 -5
- 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/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +10 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +35 -38
- package/dest/mem_pools/interface.d.ts +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +62 -13
- 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/index.d.ts +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +34 -10
- 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.d.ts +1 -1
- package/dest/mem_pools/tx_pool/priority.js +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +65 -9
- 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 +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 +4 -2
- 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/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +6 -2
- 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 +73 -12
- package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
- package/dest/msg_validators/index.d.ts +1 -1
- 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/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/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 +1 -1
- 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 +1 -1
- 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 +1 -3
- 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 +8 -1
- 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 +8 -4
- 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 +93 -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 +1 -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 +6 -5
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.d.ts +10 -9
- 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 +50 -11
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +88 -5
- package/dest/services/encoding.d.ts +26 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +73 -5
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +5 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +4 -0
- package/dest/services/libp2p/instrumentation.d.ts +20 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +164 -0
- package/dest/services/libp2p/libp2p_service.d.ts +78 -89
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +698 -246
- 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 +6 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +22 -2
- package/dest/services/peer-manager/peer_manager.d.ts +102 -22
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +549 -72
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +40 -2
- package/dest/services/reqresp/config.d.ts +11 -9
- 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 +2 -2
- 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 +31 -17
- 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 +3 -2
- 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 +73 -24
- 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 +1 -1
- 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 +6 -1
- 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 +47 -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 +3 -5
- 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 +3 -1
- 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 +1 -3
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +39 -7
- 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 +13 -2
- 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/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
- 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 +1 -1
- 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 +24 -66
- 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 +10 -4
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/reqresp/status.js +9 -2
- package/dest/services/service.d.ts +23 -19
- 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 +50 -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 +52 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/slow_tx_collection.js +177 -0
- package/dest/services/tx_collection/tx_collection.d.ts +109 -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/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +2 -1
- 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 +1 -1
- 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 +33 -5
- 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 +15 -11
- 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.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +103 -29
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/testbench.js +4 -4
- package/dest/testbench/worker_client_manager.d.ts +1 -6
- 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 +4 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +2 -0
- package/dest/util.d.ts +24 -16
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +75 -69
- package/dest/versioning.d.ts +4 -4
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +8 -3
- package/package.json +32 -27
- 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 +198 -0
- package/src/client/p2p_client.ts +469 -330
- package/src/config.ts +305 -134
- package/src/enr/generate-enr.ts +39 -6
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/index.ts +4 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +75 -7
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +264 -65
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +173 -34
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +156 -30
- package/src/mem_pools/attestation_pool/mocks.ts +11 -10
- package/src/mem_pools/instrumentation.ts +43 -44
- 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 +54 -11
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +82 -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 +116 -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 +167 -0
- package/src/services/libp2p/libp2p_service.ts +866 -294
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +26 -1
- package/src/services/peer-manager/peer_manager.ts +654 -78
- package/src/services/peer-manager/peer_scoring.ts +46 -3
- 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 +233 -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 +151 -25
- 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 +105 -91
- package/src/versioning.ts +11 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* An Attestation Pool contains attestations collected by a validator
|
|
@@ -8,7 +9,30 @@ import type { BlockAttestation } from '@aztec/stdlib/p2p';
|
|
|
8
9
|
*/
|
|
9
10
|
export interface AttestationPool {
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* Adds new block proposal to the pool
|
|
13
|
+
*/
|
|
14
|
+
addBlockProposal(blockProposal: BlockProposal): Promise<void>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Get block proposal by it's ID
|
|
18
|
+
*
|
|
19
|
+
* @param id - The ID of the block proposal to retrieve. The ID is proposal.payload.archive
|
|
20
|
+
*
|
|
21
|
+
* @return The block proposal if it exists, otherwise undefined.
|
|
22
|
+
*/
|
|
23
|
+
getBlockProposal(id: string): Promise<BlockProposal | undefined>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Check if a block proposal exists in the pool
|
|
27
|
+
*
|
|
28
|
+
* @param idOrProposal - The ID of the block proposal or the block proposal itself to check. The ID is proposal.payload.archive
|
|
29
|
+
*
|
|
30
|
+
* @return True if the block proposal exists, false otherwise.
|
|
31
|
+
*/
|
|
32
|
+
hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* AddAttestations
|
|
12
36
|
*
|
|
13
37
|
* @param attestations - Attestations to add into the pool
|
|
14
38
|
*/
|
|
@@ -28,7 +52,7 @@ export interface AttestationPool {
|
|
|
28
52
|
*
|
|
29
53
|
* @param slot - The oldest slot to keep.
|
|
30
54
|
*/
|
|
31
|
-
deleteAttestationsOlderThan(slot:
|
|
55
|
+
deleteAttestationsOlderThan(slot: SlotNumber): Promise<void>;
|
|
32
56
|
|
|
33
57
|
/**
|
|
34
58
|
* Delete Attestations for slot
|
|
@@ -37,7 +61,7 @@ export interface AttestationPool {
|
|
|
37
61
|
*
|
|
38
62
|
* @param slot - The slot to delete.
|
|
39
63
|
*/
|
|
40
|
-
deleteAttestationsForSlot(slot:
|
|
64
|
+
deleteAttestationsForSlot(slot: SlotNumber): Promise<void>;
|
|
41
65
|
|
|
42
66
|
/**
|
|
43
67
|
* Delete Attestations for slot and proposal
|
|
@@ -47,10 +71,20 @@ export interface AttestationPool {
|
|
|
47
71
|
* @param slot - The slot to delete.
|
|
48
72
|
* @param proposalId - The proposal to delete.
|
|
49
73
|
*/
|
|
50
|
-
deleteAttestationsForSlotAndProposal(slot:
|
|
74
|
+
deleteAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<void>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get all Attestations for all proposals for a given slot
|
|
78
|
+
*
|
|
79
|
+
* Retrieve all of the attestations observed pertaining to a given slot
|
|
80
|
+
*
|
|
81
|
+
* @param slot - The slot to query
|
|
82
|
+
* @return BlockAttestations
|
|
83
|
+
*/
|
|
84
|
+
getAttestationsForSlot(slot: SlotNumber): Promise<BlockAttestation[]>;
|
|
51
85
|
|
|
52
86
|
/**
|
|
53
|
-
* Get Attestations for slot
|
|
87
|
+
* Get Attestations for slot and given proposal
|
|
54
88
|
*
|
|
55
89
|
* Retrieve all of the attestations observed pertaining to a given slot
|
|
56
90
|
*
|
|
@@ -58,5 +92,39 @@ export interface AttestationPool {
|
|
|
58
92
|
* @param proposalId - The proposal to query
|
|
59
93
|
* @return BlockAttestations
|
|
60
94
|
*/
|
|
61
|
-
|
|
95
|
+
getAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<BlockAttestation[]>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check if a specific attestation exists in the pool
|
|
99
|
+
*
|
|
100
|
+
* @param attestation - The attestation to check
|
|
101
|
+
* @return True if the attestation exists, false otherwise
|
|
102
|
+
*/
|
|
103
|
+
hasAttestation(attestation: BlockAttestation): Promise<boolean>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Returns whether adding this proposal is permitted at current capacity:
|
|
107
|
+
* - True if the proposal already exists, allow overwrite to keep parity with tests.
|
|
108
|
+
* - True if the slot is below the proposal cap.
|
|
109
|
+
* - False if the slot is at/above cap and this would be a new unique proposal.
|
|
110
|
+
*
|
|
111
|
+
* @param block - The block proposal to check
|
|
112
|
+
* @returns True if the proposal can be added (or already exists), false otherwise.
|
|
113
|
+
*/
|
|
114
|
+
canAddProposal(block: BlockProposal): Promise<boolean>;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Returns whether an attestation would be accepted for (slot, proposalId):
|
|
118
|
+
* - True if the attestation already exists for this sender.
|
|
119
|
+
* - True if the attestation cap for (slot, proposalId) has not been reached.
|
|
120
|
+
* - False if the cap is reached and this attestation would be a new unique entry.
|
|
121
|
+
*
|
|
122
|
+
* @param attestation - The attestation to check
|
|
123
|
+
* @param committeeSize - Committee size for the attestation's slot, implementation may add a small buffer
|
|
124
|
+
* @returns True if the attestation can be added, false otherwise.
|
|
125
|
+
*/
|
|
126
|
+
canAddAttestation(attestation: BlockAttestation, committeeSize: number): Promise<boolean>;
|
|
127
|
+
|
|
128
|
+
/** Returns whether the pool is empty. */
|
|
129
|
+
isEmpty(): Promise<boolean>;
|
|
62
130
|
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Secp256k1Signer } from '@aztec/foundation/crypto';
|
|
2
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
-
import type { BlockAttestation } from '@aztec/stdlib/p2p';
|
|
4
|
+
import type { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
|
|
5
|
+
import {
|
|
6
|
+
BlockProposal as BlockProposalClass,
|
|
7
|
+
ConsensusPayload,
|
|
8
|
+
SignatureDomainSeparator,
|
|
9
|
+
getHashedSignaturePayloadEthSignedMessage,
|
|
10
|
+
} from '@aztec/stdlib/p2p';
|
|
11
|
+
import { makeL2BlockHeader } from '@aztec/stdlib/testing';
|
|
4
12
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
5
13
|
|
|
6
14
|
import { jest } from '@jest/globals';
|
|
@@ -30,7 +38,19 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
30
38
|
|
|
31
39
|
const createAttestationsForSlot = (slotNumber: number) => {
|
|
32
40
|
const archive = Fr.random();
|
|
33
|
-
return
|
|
41
|
+
return signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const mockBlockProposal = (signer: Secp256k1Signer, slotNumber: number, archive: Fr = Fr.random()): BlockProposal => {
|
|
45
|
+
const header = makeL2BlockHeader(1, 2, slotNumber);
|
|
46
|
+
const payload = new ConsensusPayload(header.toCheckpointHeader(), archive);
|
|
47
|
+
|
|
48
|
+
const hash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.blockProposal);
|
|
49
|
+
const signature = signer.sign(hash);
|
|
50
|
+
|
|
51
|
+
const txHashes = [TxHash.random(), TxHash.random()]; // Mock tx hashes
|
|
52
|
+
|
|
53
|
+
return new BlockProposalClass(payload, signature, txHashes);
|
|
34
54
|
};
|
|
35
55
|
|
|
36
56
|
// We compare buffers as the objects can have cached values attached to them which are not serialised
|
|
@@ -45,163 +65,201 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
45
65
|
it('should add attestations to pool', async () => {
|
|
46
66
|
const slotNumber = 420;
|
|
47
67
|
const archive = Fr.random();
|
|
48
|
-
const attestations =
|
|
68
|
+
const attestations = signers.slice(0, -1).map(signer => mockAttestation(signer, slotNumber, archive));
|
|
49
69
|
|
|
50
70
|
await ap.addAttestations(attestations);
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
|
|
72
|
+
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(
|
|
73
|
+
SlotNumber(slotNumber),
|
|
74
|
+
archive.toString(),
|
|
75
|
+
);
|
|
76
|
+
expect(retrievedAttestations.length).toBe(attestations.length);
|
|
77
|
+
compareAttestations(retrievedAttestations, attestations);
|
|
54
78
|
|
|
55
|
-
|
|
79
|
+
// Check hasAttestation for added attestations
|
|
80
|
+
for (const attestation of attestations) {
|
|
81
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
82
|
+
}
|
|
56
83
|
|
|
57
|
-
|
|
84
|
+
const retrievedAttestationsForSlot = await ap.getAttestationsForSlot(SlotNumber(slotNumber));
|
|
85
|
+
expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
|
|
86
|
+
compareAttestations(retrievedAttestationsForSlot, attestations);
|
|
58
87
|
|
|
59
|
-
|
|
88
|
+
// Add another one
|
|
89
|
+
const newAttestation = mockAttestation(signers[NUMBER_OF_SIGNERS_PER_TEST - 1], slotNumber, archive);
|
|
90
|
+
await ap.addAttestations([newAttestation]);
|
|
91
|
+
const retrievedAttestationsAfterAdd = await ap.getAttestationsForSlotAndProposal(
|
|
92
|
+
SlotNumber(slotNumber),
|
|
93
|
+
archive.toString(),
|
|
94
|
+
);
|
|
95
|
+
expect(retrievedAttestationsAfterAdd.length).toBe(attestations.length + 1);
|
|
96
|
+
compareAttestations(retrievedAttestationsAfterAdd, [...attestations, newAttestation]);
|
|
97
|
+
expect(await ap.hasAttestation(newAttestation)).toBe(true);
|
|
98
|
+
const retrievedAttestationsForSlotAfterAdd = await ap.getAttestationsForSlot(SlotNumber(slotNumber));
|
|
99
|
+
expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
|
|
100
|
+
compareAttestations(retrievedAttestationsForSlotAfterAdd, [...attestations, newAttestation]);
|
|
60
101
|
|
|
61
102
|
// Delete by slot
|
|
62
|
-
await ap.deleteAttestationsForSlot(
|
|
63
|
-
|
|
64
|
-
expect(metricsMock.recordRemovedObjects).toHaveBeenCalledWith(attestations.length);
|
|
103
|
+
await ap.deleteAttestationsForSlot(SlotNumber(slotNumber));
|
|
65
104
|
|
|
66
|
-
const retreivedAttestationsAfterDelete = await ap.
|
|
105
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(
|
|
106
|
+
SlotNumber(slotNumber),
|
|
107
|
+
archive.toString(),
|
|
108
|
+
);
|
|
67
109
|
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
110
|
+
// Check hasAttestation after deletion
|
|
111
|
+
for (const attestation of attestations) {
|
|
112
|
+
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
113
|
+
}
|
|
114
|
+
expect(await ap.hasAttestation(newAttestation)).toBe(false);
|
|
68
115
|
});
|
|
69
116
|
|
|
70
|
-
it('
|
|
117
|
+
it('should handle duplicate proposals in a slot', async () => {
|
|
71
118
|
const slotNumber = 420;
|
|
72
119
|
const archive = Fr.random();
|
|
73
|
-
const txs = [0, 1, 2, 3, 4, 5].map(() => TxHash.random());
|
|
74
120
|
|
|
75
121
|
// Use the same signer for all attestations
|
|
76
122
|
const attestations: BlockAttestation[] = [];
|
|
77
123
|
const signer = signers[0];
|
|
78
124
|
for (let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++) {
|
|
79
|
-
attestations.push(
|
|
125
|
+
attestations.push(mockAttestation(signer, slotNumber, archive));
|
|
80
126
|
}
|
|
81
127
|
|
|
128
|
+
// Add them to store and check we end up with only one
|
|
82
129
|
await ap.addAttestations(attestations);
|
|
83
130
|
|
|
84
|
-
const retreivedAttestations = await ap.
|
|
131
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(
|
|
132
|
+
SlotNumber(slotNumber),
|
|
133
|
+
archive.toString(),
|
|
134
|
+
);
|
|
85
135
|
expect(retreivedAttestations.length).toBe(1);
|
|
86
136
|
expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
|
|
87
|
-
expect(retreivedAttestations[0].
|
|
88
|
-
|
|
137
|
+
expect(retreivedAttestations[0].getSender()?.toString()).toEqual(signer.address.toString());
|
|
138
|
+
|
|
139
|
+
// Try adding them on another operation and check they are still not duplicated
|
|
140
|
+
await ap.addAttestations([attestations[0]]);
|
|
141
|
+
expect(await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString())).toHaveLength(1);
|
|
89
142
|
});
|
|
90
143
|
|
|
91
|
-
it('
|
|
144
|
+
it('should store attestations by differing slot', async () => {
|
|
92
145
|
const slotNumbers = [1, 2, 3, 4];
|
|
93
|
-
const attestations =
|
|
146
|
+
const attestations = signers.map((signer, i) => mockAttestation(signer, slotNumbers[i]));
|
|
94
147
|
|
|
95
148
|
await ap.addAttestations(attestations);
|
|
96
149
|
|
|
97
150
|
for (const attestation of attestations) {
|
|
98
|
-
const slot = attestation.payload.header.
|
|
151
|
+
const slot = attestation.payload.header.slotNumber;
|
|
99
152
|
const archive = attestation.archive.toString();
|
|
100
153
|
|
|
101
|
-
const retreivedAttestations = await ap.
|
|
154
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(slot, archive);
|
|
102
155
|
expect(retreivedAttestations.length).toBe(1);
|
|
103
156
|
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
104
|
-
expect(retreivedAttestations[0].payload.header.
|
|
157
|
+
expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
|
|
105
158
|
}
|
|
106
159
|
});
|
|
107
160
|
|
|
108
|
-
it('
|
|
161
|
+
it('should store attestations by differing slot and archive', async () => {
|
|
109
162
|
const slotNumbers = [1, 1, 2, 3];
|
|
110
163
|
const archives = [Fr.random(), Fr.random(), Fr.random(), Fr.random()];
|
|
111
|
-
const attestations =
|
|
112
|
-
signers.map((signer, i) => mockAttestation(signer, slotNumbers[i], archives[i])),
|
|
113
|
-
);
|
|
164
|
+
const attestations = signers.map((signer, i) => mockAttestation(signer, slotNumbers[i], archives[i]));
|
|
114
165
|
|
|
115
166
|
await ap.addAttestations(attestations);
|
|
116
167
|
|
|
117
168
|
for (const attestation of attestations) {
|
|
118
|
-
const slot = attestation.payload.header.
|
|
169
|
+
const slot = attestation.payload.header.slotNumber;
|
|
119
170
|
const proposalId = attestation.archive.toString();
|
|
120
171
|
|
|
121
|
-
const retreivedAttestations = await ap.
|
|
172
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(slot, proposalId);
|
|
122
173
|
expect(retreivedAttestations.length).toBe(1);
|
|
123
174
|
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
124
|
-
expect(retreivedAttestations[0].payload.header.
|
|
175
|
+
expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
|
|
125
176
|
}
|
|
126
177
|
});
|
|
127
178
|
|
|
128
|
-
it('
|
|
179
|
+
it('should delete attestations', async () => {
|
|
129
180
|
const slotNumber = 420;
|
|
130
181
|
const archive = Fr.random();
|
|
131
|
-
const attestations =
|
|
182
|
+
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
132
183
|
const proposalId = attestations[0].archive.toString();
|
|
133
184
|
|
|
134
185
|
await ap.addAttestations(attestations);
|
|
135
186
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
187
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
139
188
|
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
140
189
|
compareAttestations(retreivedAttestations, attestations);
|
|
141
190
|
|
|
142
|
-
|
|
191
|
+
// Check hasAttestation before deletion
|
|
192
|
+
for (const attestation of attestations) {
|
|
193
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
194
|
+
}
|
|
143
195
|
|
|
144
|
-
|
|
196
|
+
await ap.deleteAttestations(attestations);
|
|
145
197
|
|
|
146
|
-
const gottenAfterDelete = await ap.
|
|
198
|
+
const gottenAfterDelete = await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
147
199
|
expect(gottenAfterDelete.length).toBe(0);
|
|
200
|
+
|
|
201
|
+
// Check hasAttestation after deletion
|
|
202
|
+
for (const attestation of attestations) {
|
|
203
|
+
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
204
|
+
}
|
|
148
205
|
});
|
|
149
206
|
|
|
150
|
-
it('
|
|
207
|
+
it('should blanket delete attestations per slot', async () => {
|
|
151
208
|
const slotNumber = 420;
|
|
152
209
|
const archive = Fr.random();
|
|
153
|
-
const attestations =
|
|
210
|
+
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
154
211
|
const proposalId = attestations[0].archive.toString();
|
|
155
212
|
|
|
156
213
|
await ap.addAttestations(attestations);
|
|
157
214
|
|
|
158
|
-
const retreivedAttestations = await ap.
|
|
215
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
159
216
|
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
160
217
|
compareAttestations(retreivedAttestations, attestations);
|
|
161
218
|
|
|
162
|
-
await ap.deleteAttestationsForSlot(
|
|
219
|
+
await ap.deleteAttestationsForSlot(SlotNumber(slotNumber));
|
|
163
220
|
|
|
164
|
-
const retreivedAttestationsAfterDelete = await ap.
|
|
221
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(
|
|
222
|
+
SlotNumber(slotNumber),
|
|
223
|
+
proposalId,
|
|
224
|
+
);
|
|
165
225
|
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
166
226
|
});
|
|
167
227
|
|
|
168
|
-
it('
|
|
228
|
+
it('should blanket delete attestations per slot and proposal', async () => {
|
|
169
229
|
const slotNumber = 420;
|
|
170
230
|
const archive = Fr.random();
|
|
171
|
-
const attestations =
|
|
231
|
+
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
172
232
|
const proposalId = attestations[0].archive.toString();
|
|
173
233
|
|
|
174
234
|
// Add another set of attestations with a different proposalId, yet the same slot
|
|
175
235
|
const archive2 = Fr.random();
|
|
176
|
-
const attestations2 =
|
|
236
|
+
const attestations2 = signers.map(signer => mockAttestation(signer, slotNumber, archive2));
|
|
177
237
|
const proposalId2 = attestations2[0].archive.toString();
|
|
178
238
|
|
|
179
239
|
await ap.addAttestations(attestations);
|
|
180
240
|
await ap.addAttestations(attestations2);
|
|
181
241
|
|
|
182
|
-
|
|
183
|
-
expect(metricsMock.recordAddedObjects).toHaveBeenCalledWith(attestations2.length);
|
|
184
|
-
|
|
185
|
-
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
242
|
+
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
186
243
|
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
187
244
|
compareAttestations(retreivedAttestations, attestations);
|
|
188
245
|
|
|
189
|
-
await ap.deleteAttestationsForSlotAndProposal(
|
|
246
|
+
await ap.deleteAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
190
247
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
248
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(
|
|
249
|
+
SlotNumber(slotNumber),
|
|
250
|
+
proposalId,
|
|
251
|
+
);
|
|
194
252
|
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
195
253
|
|
|
196
|
-
const retreivedAttestationsAfterDeleteForOtherProposal = await ap.
|
|
197
|
-
|
|
254
|
+
const retreivedAttestationsAfterDeleteForOtherProposal = await ap.getAttestationsForSlotAndProposal(
|
|
255
|
+
SlotNumber(slotNumber),
|
|
198
256
|
proposalId2,
|
|
199
257
|
);
|
|
200
258
|
expect(retreivedAttestationsAfterDeleteForOtherProposal.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
201
259
|
compareAttestations(retreivedAttestationsAfterDeleteForOtherProposal, attestations2);
|
|
202
260
|
});
|
|
203
261
|
|
|
204
|
-
it('
|
|
262
|
+
it('should delete attestations older than a given slot', async () => {
|
|
205
263
|
const slotNumbers = [1, 2, 3, 69, 72, 74, 88, 420];
|
|
206
264
|
const attestations = (
|
|
207
265
|
await Promise.all(slotNumbers.map(slotNumber => createAttestationsForSlot(slotNumber)))
|
|
@@ -210,21 +268,162 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
210
268
|
|
|
211
269
|
await ap.addAttestations(attestations);
|
|
212
270
|
|
|
213
|
-
const attestationsForSlot1 = await ap.
|
|
271
|
+
const attestationsForSlot1 = await ap.getAttestationsForSlotAndProposal(SlotNumber(1), proposalId);
|
|
214
272
|
expect(attestationsForSlot1.length).toBe(signers.length);
|
|
215
273
|
|
|
216
274
|
const deleteAttestationsSpy = jest.spyOn(ap, 'deleteAttestationsForSlot');
|
|
217
275
|
|
|
218
|
-
await ap.deleteAttestationsOlderThan(
|
|
276
|
+
await ap.deleteAttestationsOlderThan(SlotNumber(73));
|
|
219
277
|
|
|
220
|
-
const attestationsForSlot1AfterDelete = await ap.
|
|
278
|
+
const attestationsForSlot1AfterDelete = await ap.getAttestationsForSlotAndProposal(SlotNumber(1), proposalId);
|
|
221
279
|
expect(attestationsForSlot1AfterDelete.length).toBe(0);
|
|
222
280
|
|
|
223
281
|
expect(deleteAttestationsSpy).toHaveBeenCalledTimes(5);
|
|
224
|
-
expect(deleteAttestationsSpy).toHaveBeenCalledWith(
|
|
225
|
-
expect(deleteAttestationsSpy).toHaveBeenCalledWith(
|
|
226
|
-
expect(deleteAttestationsSpy).toHaveBeenCalledWith(
|
|
227
|
-
expect(deleteAttestationsSpy).toHaveBeenCalledWith(
|
|
228
|
-
expect(deleteAttestationsSpy).toHaveBeenCalledWith(
|
|
282
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(SlotNumber(1));
|
|
283
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(SlotNumber(2));
|
|
284
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(SlotNumber(3));
|
|
285
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(SlotNumber(69));
|
|
286
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(SlotNumber(72));
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
describe('BlockProposal in attestation pool', () => {
|
|
290
|
+
it('should add and retrieve block proposal', async () => {
|
|
291
|
+
const slotNumber = 420;
|
|
292
|
+
const archive = Fr.random();
|
|
293
|
+
const proposal = mockBlockProposal(signers[0], slotNumber, archive);
|
|
294
|
+
const proposalId = proposal.archive.toString();
|
|
295
|
+
|
|
296
|
+
await ap.addBlockProposal(proposal);
|
|
297
|
+
|
|
298
|
+
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
299
|
+
|
|
300
|
+
expect(retrievedProposal).toBeDefined();
|
|
301
|
+
expect(retrievedProposal!).toEqual(proposal);
|
|
302
|
+
|
|
303
|
+
// Check hasBlockProposal with both id and object
|
|
304
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
305
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(true);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
it('should return undefined for non-existent block proposal', async () => {
|
|
309
|
+
const nonExistentId = Fr.random().toString();
|
|
310
|
+
const retrievedProposal = await ap.getBlockProposal(nonExistentId);
|
|
311
|
+
expect(retrievedProposal).toBeUndefined();
|
|
312
|
+
|
|
313
|
+
// Check hasBlockProposal returns false for non-existent proposal
|
|
314
|
+
expect(await ap.hasBlockProposal(nonExistentId)).toBe(false);
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
it('should update block proposal if added twice with same id', async () => {
|
|
318
|
+
const slotNumber = 420;
|
|
319
|
+
const archive = Fr.random();
|
|
320
|
+
const proposal1 = mockBlockProposal(signers[0], slotNumber, archive);
|
|
321
|
+
const proposalId = proposal1.archive.toString();
|
|
322
|
+
|
|
323
|
+
await ap.addBlockProposal(proposal1);
|
|
324
|
+
|
|
325
|
+
// Create a new proposal with same archive but different signer
|
|
326
|
+
const proposal2 = mockBlockProposal(signers[1], slotNumber, archive);
|
|
327
|
+
|
|
328
|
+
await ap.addBlockProposal(proposal2);
|
|
329
|
+
|
|
330
|
+
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
331
|
+
expect(retrievedProposal).toBeDefined();
|
|
332
|
+
// Should have the second proposal
|
|
333
|
+
expect(retrievedProposal!.toBuffer()).toEqual(proposal2.toBuffer());
|
|
334
|
+
expect(retrievedProposal!.getSender()?.toString()).toBe(signers[1].address.toString());
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
it('should handle block proposals with different slots and same archive', async () => {
|
|
338
|
+
const archive = Fr.random();
|
|
339
|
+
const proposal1 = mockBlockProposal(signers[0], 100, archive);
|
|
340
|
+
const proposal2 = mockBlockProposal(signers[1], 200, archive);
|
|
341
|
+
const proposalId = archive.toString();
|
|
342
|
+
|
|
343
|
+
await ap.addBlockProposal(proposal1);
|
|
344
|
+
await ap.addBlockProposal(proposal2);
|
|
345
|
+
|
|
346
|
+
// Should get the latest one added
|
|
347
|
+
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
348
|
+
expect(retrievedProposal).toBeDefined();
|
|
349
|
+
expect(retrievedProposal!.toBuffer()).toEqual(proposal2.toBuffer());
|
|
350
|
+
expect(retrievedProposal!.slotNumber).toBe(SlotNumber(200));
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
it('should delete block proposal when deleting attestations for slot and proposal', async () => {
|
|
354
|
+
const slotNumber = 420;
|
|
355
|
+
const archive = Fr.random();
|
|
356
|
+
const proposal = mockBlockProposal(signers[0], slotNumber, archive);
|
|
357
|
+
const proposalId = proposal.archive.toString();
|
|
358
|
+
|
|
359
|
+
// Add proposal and some attestations
|
|
360
|
+
await ap.addBlockProposal(proposal);
|
|
361
|
+
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
362
|
+
await ap.addAttestations(attestations);
|
|
363
|
+
|
|
364
|
+
// Verify proposal exists
|
|
365
|
+
let retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
366
|
+
expect(retrievedProposal).toBeDefined();
|
|
367
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
368
|
+
|
|
369
|
+
// Delete attestations for slot and proposal
|
|
370
|
+
await ap.deleteAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
371
|
+
|
|
372
|
+
// Proposal should be deleted
|
|
373
|
+
retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
374
|
+
expect(retrievedProposal).toBeUndefined();
|
|
375
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(false);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
it('should delete block proposal when deleting attestations for slot', async () => {
|
|
379
|
+
const slotNumber = 420;
|
|
380
|
+
const archive = Fr.random();
|
|
381
|
+
const proposal = mockBlockProposal(signers[0], slotNumber, archive);
|
|
382
|
+
const proposalId = proposal.archive.toString();
|
|
383
|
+
|
|
384
|
+
// Add proposal
|
|
385
|
+
await ap.addBlockProposal(proposal);
|
|
386
|
+
|
|
387
|
+
// Verify proposal exists
|
|
388
|
+
let retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
389
|
+
expect(retrievedProposal).toBeDefined();
|
|
390
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(true);
|
|
391
|
+
|
|
392
|
+
// Delete attestations for slot
|
|
393
|
+
await ap.deleteAttestationsForSlot(SlotNumber(slotNumber));
|
|
394
|
+
|
|
395
|
+
// Proposal should be deleted
|
|
396
|
+
retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
397
|
+
expect(retrievedProposal).toBeUndefined();
|
|
398
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(false);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
it('should be able to fetch both block proposal and attestations', async () => {
|
|
402
|
+
const slotNumber = 420;
|
|
403
|
+
const archive = Fr.random();
|
|
404
|
+
const proposal = mockBlockProposal(signers[0], slotNumber, archive);
|
|
405
|
+
const proposalId = proposal.archive.toString();
|
|
406
|
+
|
|
407
|
+
// Add proposal first
|
|
408
|
+
await ap.addBlockProposal(proposal);
|
|
409
|
+
|
|
410
|
+
// Add attestations for the same proposal
|
|
411
|
+
const attestations = signers.slice(1).map(signer => mockAttestation(signer, slotNumber, archive));
|
|
412
|
+
await ap.addAttestations(attestations);
|
|
413
|
+
|
|
414
|
+
// Retrieve both proposal and attestations
|
|
415
|
+
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
416
|
+
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(SlotNumber(slotNumber), proposalId);
|
|
417
|
+
|
|
418
|
+
expect(retrievedProposal).toBeDefined();
|
|
419
|
+
expect(retrievedProposal).toEqual(proposal);
|
|
420
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
421
|
+
|
|
422
|
+
compareAttestations(retrievedAttestations, attestations);
|
|
423
|
+
// Check hasAttestation for all attestations
|
|
424
|
+
for (const attestation of attestations) {
|
|
425
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
229
428
|
});
|
|
230
429
|
}
|