@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.c2595eba
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 +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +8 -8
- package/dest/client/index.d.ts +1 -1
- package/dest/client/interface.d.ts +18 -3
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +16 -37
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +464 -126
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +69 -60
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +23 -14
- package/dest/enr/generate-enr.d.ts +1 -1
- 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 +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
- 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 +241 -266
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
- package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +17 -13
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +9 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +37 -10
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
- 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 +314 -335
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
- 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 +30 -24
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
- 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 +76 -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/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -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 +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -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 +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +22 -12
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +6 -4
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- 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 +1 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +18 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +42 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -6
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +36 -71
- package/dest/services/libp2p/libp2p_service.d.ts +48 -81
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +926 -193
- package/dest/services/peer-manager/interface.d.ts +1 -1
- package/dest/services/peer-manager/metrics.d.ts +9 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +39 -16
- package/dest/services/peer-manager/peer_manager.d.ts +2 -33
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +6 -12
- 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 +43 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/config.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/index.d.ts +1 -1
- package/dest/services/reqresp/interface.d.ts +4 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +1 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -21
- package/dest/services/reqresp/protocols/auth.d.ts +2 -2
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.js +2 -2
- package/dest/services/reqresp/protocols/block.d.ts +1 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +3 -2
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +17 -7
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +34 -4
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/ping.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +6 -5
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +7 -3
- package/dest/services/reqresp/protocols/tx.d.ts +2 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts +6 -41
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +460 -46
- package/dest/services/reqresp/status.d.ts +2 -2
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/service.d.ts +19 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +10 -2
- package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +10 -13
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +2 -1
- package/dest/services/tx_collection/tx_collection.d.ts +10 -10
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.d.ts +1 -1
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_provider.d.ts +4 -2
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +11 -2
- package/dest/services/tx_provider_instrumentation.d.ts +5 -2
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +14 -14
- 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 +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +4 -4
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
- package/dest/test-helpers/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +218 -120
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -39
- package/dest/types/index.d.ts +1 -1
- package/dest/util.d.ts +2 -1
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +11 -2
- package/dest/versioning.d.ts +1 -1
- package/package.json +19 -18
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +11 -20
- package/src/client/interface.ts +20 -2
- package/src/client/p2p_client.ts +108 -155
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +36 -20
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +48 -10
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
- package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +18 -6
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +67 -25
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
- package/src/msg_validators/tx_validator/phases_validator.ts +8 -4
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +1 -1
- package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +51 -0
- package/src/services/encoding.ts +6 -5
- package/src/services/libp2p/instrumentation.ts +39 -71
- package/src/services/libp2p/libp2p_service.ts +628 -194
- package/src/services/peer-manager/metrics.ts +44 -16
- package/src/services/peer-manager/peer_manager.ts +7 -4
- package/src/services/peer-manager/peer_scoring.ts +45 -3
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +4 -1
- package/src/services/reqresp/metrics.ts +36 -27
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block.ts +3 -2
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -5
- package/src/services/reqresp/protocols/status.ts +16 -12
- package/src/services/reqresp/protocols/tx.ts +1 -2
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +23 -4
- package/src/services/tx_collection/config.ts +16 -2
- package/src/services/tx_collection/fast_tx_collection.ts +39 -15
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +5 -13
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +5 -4
- package/src/services/tx_collection/tx_collection.ts +10 -9
- package/src/services/tx_provider.ts +19 -3
- package/src/services/tx_provider_instrumentation.ts +24 -14
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/mock-pubsub.ts +1 -1
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +338 -116
- package/src/testbench/worker_client_manager.ts +304 -42
- package/src/util.ts +12 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
4
6
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} from '@aztec/stdlib/
|
|
10
|
-
|
|
11
|
-
import { TxHash } from '@aztec/stdlib/tx';
|
|
12
|
-
|
|
13
|
-
import { jest } from '@jest/globals';
|
|
14
|
-
import { type MockProxy, mock } from 'jest-mock-extended';
|
|
15
|
-
|
|
16
|
-
import type { PoolInstrumentation } from '../instrumentation.js';
|
|
7
|
+
makeBlockHeader,
|
|
8
|
+
makeBlockProposal,
|
|
9
|
+
makeCheckpointHeader,
|
|
10
|
+
makeCheckpointProposal,
|
|
11
|
+
} from '@aztec/stdlib/testing';
|
|
12
|
+
|
|
17
13
|
import type { AttestationPool } from './attestation_pool.js';
|
|
18
|
-
import {
|
|
14
|
+
import { MAX_PROPOSALS_PER_SLOT } from './kv_attestation_pool.js';
|
|
15
|
+
import { mockCheckpointAttestation } from './mocks.js';
|
|
19
16
|
|
|
20
17
|
const NUMBER_OF_SIGNERS_PER_TEST = 4;
|
|
21
18
|
|
|
@@ -23,261 +20,183 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
23
20
|
let ap: AttestationPool;
|
|
24
21
|
let signers: Secp256k1Signer[];
|
|
25
22
|
|
|
26
|
-
// Check that metrics are recorded correctly
|
|
27
|
-
let metricsMock: MockProxy<PoolInstrumentation<BlockAttestation>>;
|
|
28
|
-
|
|
29
23
|
beforeEach(() => {
|
|
30
24
|
ap = getAttestationPool();
|
|
31
25
|
signers = Array.from({ length: NUMBER_OF_SIGNERS_PER_TEST }, () => Secp256k1Signer.random());
|
|
32
|
-
|
|
33
|
-
metricsMock = mock<PoolInstrumentation<BlockAttestation>>();
|
|
34
|
-
// Can i overwrite this like this??
|
|
35
|
-
(ap as any).metrics = metricsMock;
|
|
36
26
|
});
|
|
37
27
|
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
return signers.map(signer =>
|
|
28
|
+
const createCheckpointAttestationsForSlot = (slotNumber: number, archive?: Fr) => {
|
|
29
|
+
const archiveToUse = archive ?? Fr.random();
|
|
30
|
+
return signers.map(signer => mockCheckpointAttestation(signer, slotNumber, archiveToUse));
|
|
41
31
|
};
|
|
42
32
|
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
33
|
+
const mockBlockProposalForPool = (
|
|
34
|
+
signer: Secp256k1Signer,
|
|
35
|
+
slotNumber: number,
|
|
36
|
+
archive: Fr = Fr.random(),
|
|
37
|
+
): Promise<BlockProposal> => {
|
|
38
|
+
const header = makeBlockHeader(1, { slotNumber: SlotNumber(slotNumber) });
|
|
39
|
+
return makeBlockProposal({
|
|
40
|
+
signer,
|
|
41
|
+
blockHeader: header,
|
|
42
|
+
archiveRoot: archive,
|
|
43
|
+
});
|
|
53
44
|
};
|
|
54
45
|
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
const
|
|
46
|
+
// Compare checkpoint attestations buffers
|
|
47
|
+
// Using array containing as the kv store does not respect insertion order
|
|
48
|
+
const compareCheckpointAttestations = (a1: CheckpointAttestation[], a2: CheckpointAttestation[]) => {
|
|
58
49
|
const a1Buffer = a1.map(attestation => attestation.toBuffer());
|
|
59
50
|
const a2Buffer = a2.map(attestation => attestation.toBuffer());
|
|
60
51
|
expect(a1Buffer.length).toBe(a2Buffer.length);
|
|
61
52
|
expect(a1Buffer).toEqual(expect.arrayContaining(a2Buffer));
|
|
62
53
|
};
|
|
63
54
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
await ap.addAttestations(attestations);
|
|
70
|
-
|
|
71
|
-
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
|
|
72
|
-
expect(retrievedAttestations.length).toBe(attestations.length);
|
|
73
|
-
compareAttestations(retrievedAttestations, attestations);
|
|
74
|
-
|
|
75
|
-
// Check hasAttestation for added attestations
|
|
76
|
-
for (const attestation of attestations) {
|
|
77
|
-
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const retrievedAttestationsForSlot = await ap.getAttestationsForSlot(BigInt(slotNumber));
|
|
81
|
-
expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
|
|
82
|
-
compareAttestations(retrievedAttestationsForSlot, attestations);
|
|
83
|
-
|
|
84
|
-
// Add another one
|
|
85
|
-
const newAttestation = mockAttestation(signers[NUMBER_OF_SIGNERS_PER_TEST - 1], slotNumber, archive);
|
|
86
|
-
await ap.addAttestations([newAttestation]);
|
|
87
|
-
const retrievedAttestationsAfterAdd = await ap.getAttestationsForSlotAndProposal(
|
|
88
|
-
BigInt(slotNumber),
|
|
89
|
-
archive.toString(),
|
|
90
|
-
);
|
|
91
|
-
expect(retrievedAttestationsAfterAdd.length).toBe(attestations.length + 1);
|
|
92
|
-
compareAttestations(retrievedAttestationsAfterAdd, [...attestations, newAttestation]);
|
|
93
|
-
expect(await ap.hasAttestation(newAttestation)).toBe(true);
|
|
94
|
-
const retrievedAttestationsForSlotAfterAdd = await ap.getAttestationsForSlot(BigInt(slotNumber));
|
|
95
|
-
expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
|
|
96
|
-
compareAttestations(retrievedAttestationsForSlotAfterAdd, [...attestations, newAttestation]);
|
|
97
|
-
|
|
98
|
-
// Delete by slot
|
|
99
|
-
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
100
|
-
|
|
101
|
-
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(
|
|
102
|
-
BigInt(slotNumber),
|
|
103
|
-
archive.toString(),
|
|
104
|
-
);
|
|
105
|
-
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
106
|
-
// Check hasAttestation after deletion
|
|
107
|
-
for (const attestation of attestations) {
|
|
108
|
-
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
109
|
-
}
|
|
110
|
-
expect(await ap.hasAttestation(newAttestation)).toBe(false);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should handle duplicate proposals in a slot', async () => {
|
|
114
|
-
const slotNumber = 420;
|
|
115
|
-
const archive = Fr.random();
|
|
116
|
-
|
|
117
|
-
// Use the same signer for all attestations
|
|
118
|
-
const attestations: BlockAttestation[] = [];
|
|
119
|
-
const signer = signers[0];
|
|
120
|
-
for (let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++) {
|
|
121
|
-
attestations.push(mockAttestation(signer, slotNumber, archive));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Add them to store and check we end up with only one
|
|
125
|
-
await ap.addAttestations(attestations);
|
|
126
|
-
|
|
127
|
-
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
|
|
128
|
-
expect(retreivedAttestations.length).toBe(1);
|
|
129
|
-
expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
|
|
130
|
-
expect(retreivedAttestations[0].getSender()?.toString()).toEqual(signer.address.toString());
|
|
131
|
-
|
|
132
|
-
// Try adding them on another operation and check they are still not duplicated
|
|
133
|
-
await ap.addAttestations([attestations[0]]);
|
|
134
|
-
expect(await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString())).toHaveLength(1);
|
|
135
|
-
});
|
|
55
|
+
describe('CheckpointAttestation', () => {
|
|
56
|
+
it('should add attestations to pool', async () => {
|
|
57
|
+
const slotNumber = 420;
|
|
58
|
+
const archive = Fr.random();
|
|
59
|
+
const attestations = signers.slice(0, -1).map(signer => mockCheckpointAttestation(signer, slotNumber, archive));
|
|
136
60
|
|
|
137
|
-
|
|
138
|
-
const slotNumbers = [1, 2, 3, 4];
|
|
139
|
-
const attestations = signers.map((signer, i) => mockAttestation(signer, slotNumbers[i]));
|
|
61
|
+
await ap.addCheckpointAttestations(attestations);
|
|
140
62
|
|
|
141
|
-
|
|
63
|
+
const retrievedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(
|
|
64
|
+
SlotNumber(slotNumber),
|
|
65
|
+
archive.toString(),
|
|
66
|
+
);
|
|
67
|
+
expect(retrievedAttestations.length).toBe(attestations.length);
|
|
68
|
+
compareCheckpointAttestations(retrievedAttestations, attestations);
|
|
142
69
|
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
70
|
+
// Check hasCheckpointAttestation for added attestations
|
|
71
|
+
for (const attestation of attestations) {
|
|
72
|
+
expect(await ap.hasCheckpointAttestation(attestation)).toBe(true);
|
|
73
|
+
}
|
|
146
74
|
|
|
147
|
-
const
|
|
148
|
-
expect(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
75
|
+
const retrievedAttestationsForSlot = await ap.getCheckpointAttestationsForSlot(SlotNumber(slotNumber));
|
|
76
|
+
expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
|
|
77
|
+
compareCheckpointAttestations(retrievedAttestationsForSlot, attestations);
|
|
78
|
+
|
|
79
|
+
// Add another one
|
|
80
|
+
const newAttestation = mockCheckpointAttestation(signers[NUMBER_OF_SIGNERS_PER_TEST - 1], slotNumber, archive);
|
|
81
|
+
await ap.addCheckpointAttestations([newAttestation]);
|
|
82
|
+
const retrievedAttestationsAfterAdd = await ap.getCheckpointAttestationsForSlotAndProposal(
|
|
83
|
+
SlotNumber(slotNumber),
|
|
84
|
+
archive.toString(),
|
|
85
|
+
);
|
|
86
|
+
expect(retrievedAttestationsAfterAdd.length).toBe(attestations.length + 1);
|
|
87
|
+
compareCheckpointAttestations(retrievedAttestationsAfterAdd, [...attestations, newAttestation]);
|
|
88
|
+
expect(await ap.hasCheckpointAttestation(newAttestation)).toBe(true);
|
|
89
|
+
const retrievedAttestationsForSlotAfterAdd = await ap.getCheckpointAttestationsForSlot(SlotNumber(slotNumber));
|
|
90
|
+
expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
|
|
91
|
+
compareCheckpointAttestations(retrievedAttestationsForSlotAfterAdd, [...attestations, newAttestation]);
|
|
92
|
+
|
|
93
|
+
// Delete by slot
|
|
94
|
+
await ap.deleteCheckpointAttestationsOlderThan(SlotNumber(slotNumber + 1));
|
|
95
|
+
|
|
96
|
+
const retreivedAttestationsAfterDelete = await ap.getCheckpointAttestationsForSlotAndProposal(
|
|
97
|
+
SlotNumber(slotNumber),
|
|
98
|
+
archive.toString(),
|
|
99
|
+
);
|
|
100
|
+
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
101
|
+
// Check hasCheckpointAttestation after deletion
|
|
102
|
+
for (const attestation of attestations) {
|
|
103
|
+
expect(await ap.hasCheckpointAttestation(attestation)).toBe(false);
|
|
104
|
+
}
|
|
105
|
+
expect(await ap.hasCheckpointAttestation(newAttestation)).toBe(false);
|
|
106
|
+
});
|
|
153
107
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
108
|
+
it('should handle duplicate proposals in a slot', async () => {
|
|
109
|
+
const slotNumber = 420;
|
|
110
|
+
const archive = Fr.random();
|
|
111
|
+
const header = CheckpointHeader.random({ slotNumber: SlotNumber(slotNumber) });
|
|
158
112
|
|
|
159
|
-
|
|
113
|
+
// Use the same signer and header for all attestations
|
|
114
|
+
const attestations: CheckpointAttestation[] = [];
|
|
115
|
+
const signer = signers[0];
|
|
116
|
+
for (let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++) {
|
|
117
|
+
attestations.push(mockCheckpointAttestation(signer, slotNumber, archive, header));
|
|
118
|
+
}
|
|
160
119
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const proposalId = attestation.archive.toString();
|
|
120
|
+
// Add them to store and check we end up with only one
|
|
121
|
+
await ap.addCheckpointAttestations(attestations);
|
|
164
122
|
|
|
165
|
-
const retreivedAttestations = await ap.
|
|
123
|
+
const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(
|
|
124
|
+
SlotNumber(slotNumber),
|
|
125
|
+
archive.toString(),
|
|
126
|
+
);
|
|
166
127
|
expect(retreivedAttestations.length).toBe(1);
|
|
167
|
-
expect(retreivedAttestations[0].toBuffer()).toEqual(
|
|
168
|
-
expect(retreivedAttestations[0].
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const proposalId = attestations[0].archive.toString();
|
|
177
|
-
|
|
178
|
-
await ap.addAttestations(attestations);
|
|
179
|
-
|
|
180
|
-
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
181
|
-
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
182
|
-
compareAttestations(retreivedAttestations, attestations);
|
|
183
|
-
|
|
184
|
-
// Check hasAttestation before deletion
|
|
185
|
-
for (const attestation of attestations) {
|
|
186
|
-
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
await ap.deleteAttestations(attestations);
|
|
190
|
-
|
|
191
|
-
const gottenAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
192
|
-
expect(gottenAfterDelete.length).toBe(0);
|
|
193
|
-
|
|
194
|
-
// Check hasAttestation after deletion
|
|
195
|
-
for (const attestation of attestations) {
|
|
196
|
-
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it('should blanket delete attestations per slot', async () => {
|
|
201
|
-
const slotNumber = 420;
|
|
202
|
-
const archive = Fr.random();
|
|
203
|
-
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
204
|
-
const proposalId = attestations[0].archive.toString();
|
|
205
|
-
|
|
206
|
-
await ap.addAttestations(attestations);
|
|
207
|
-
|
|
208
|
-
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
209
|
-
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
210
|
-
compareAttestations(retreivedAttestations, attestations);
|
|
211
|
-
|
|
212
|
-
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
213
|
-
|
|
214
|
-
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
215
|
-
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it('should blanket delete attestations per slot and proposal', async () => {
|
|
219
|
-
const slotNumber = 420;
|
|
220
|
-
const archive = Fr.random();
|
|
221
|
-
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
222
|
-
const proposalId = attestations[0].archive.toString();
|
|
128
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
|
|
129
|
+
expect(retreivedAttestations[0].getSender()?.toString()).toEqual(signer.address.toString());
|
|
130
|
+
|
|
131
|
+
// Try adding them on another operation and check they are still not duplicated
|
|
132
|
+
await ap.addCheckpointAttestations([attestations[0]]);
|
|
133
|
+
expect(
|
|
134
|
+
await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(slotNumber), archive.toString()),
|
|
135
|
+
).toHaveLength(1);
|
|
136
|
+
});
|
|
223
137
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const proposalId2 = attestations2[0].archive.toString();
|
|
138
|
+
it('should store attestations by differing slot', async () => {
|
|
139
|
+
const slotNumbers = [1, 2, 3, 4];
|
|
140
|
+
const attestations = signers.map((signer, i) => mockCheckpointAttestation(signer, slotNumbers[i]));
|
|
228
141
|
|
|
229
|
-
|
|
230
|
-
await ap.addAttestations(attestations2);
|
|
142
|
+
await ap.addCheckpointAttestations(attestations);
|
|
231
143
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
144
|
+
for (const attestation of attestations) {
|
|
145
|
+
const slot = attestation.payload.header.slotNumber;
|
|
146
|
+
const archive = attestation.archive.toString();
|
|
235
147
|
|
|
236
|
-
|
|
148
|
+
const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(slot, archive);
|
|
149
|
+
expect(retreivedAttestations.length).toBe(1);
|
|
150
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
151
|
+
expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
237
154
|
|
|
238
|
-
|
|
239
|
-
|
|
155
|
+
it('should store attestations by differing slot and archive', async () => {
|
|
156
|
+
const slotNumbers = [1, 1, 2, 3];
|
|
157
|
+
const archives = [Fr.random(), Fr.random(), Fr.random(), Fr.random()];
|
|
158
|
+
const attestations = signers.map((signer, i) => mockCheckpointAttestation(signer, slotNumbers[i], archives[i]));
|
|
240
159
|
|
|
241
|
-
|
|
242
|
-
BigInt(slotNumber),
|
|
243
|
-
proposalId2,
|
|
244
|
-
);
|
|
245
|
-
expect(retreivedAttestationsAfterDeleteForOtherProposal.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
246
|
-
compareAttestations(retreivedAttestationsAfterDeleteForOtherProposal, attestations2);
|
|
247
|
-
});
|
|
160
|
+
await ap.addCheckpointAttestations(attestations);
|
|
248
161
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
await Promise.all(slotNumbers.map(slotNumber => createAttestationsForSlot(slotNumber)))
|
|
253
|
-
).flat();
|
|
254
|
-
const proposalId = attestations[0].archive.toString();
|
|
162
|
+
for (const attestation of attestations) {
|
|
163
|
+
const slot = attestation.payload.header.slotNumber;
|
|
164
|
+
const proposalId = attestation.archive.toString();
|
|
255
165
|
|
|
256
|
-
|
|
166
|
+
const retreivedAttestations = await ap.getCheckpointAttestationsForSlotAndProposal(slot, proposalId);
|
|
167
|
+
expect(retreivedAttestations.length).toBe(1);
|
|
168
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
169
|
+
expect(retreivedAttestations[0].payload.header.slotNumber).toEqual(slot);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
257
172
|
|
|
258
|
-
|
|
259
|
-
|
|
173
|
+
it('should delete attestations older than a given slot', async () => {
|
|
174
|
+
const slotNumbers = [1, 2, 3, 69, 72, 74, 88, 420];
|
|
175
|
+
const attestations = (
|
|
176
|
+
await Promise.all(slotNumbers.map(slotNumber => createCheckpointAttestationsForSlot(slotNumber)))
|
|
177
|
+
).flat();
|
|
178
|
+
const proposalId = attestations[0].archive.toString();
|
|
260
179
|
|
|
261
|
-
|
|
180
|
+
await ap.addCheckpointAttestations(attestations);
|
|
262
181
|
|
|
263
|
-
|
|
182
|
+
const attestationsForSlot1 = await ap.getCheckpointAttestationsForSlotAndProposal(SlotNumber(1), proposalId);
|
|
183
|
+
expect(attestationsForSlot1.length).toBe(signers.length);
|
|
264
184
|
|
|
265
|
-
|
|
266
|
-
expect(attestationsForSlot1AfterDelete.length).toBe(0);
|
|
185
|
+
await ap.deleteCheckpointAttestationsOlderThan(SlotNumber(73));
|
|
267
186
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
187
|
+
const attestationsForSlot1AfterDelete = await ap.getCheckpointAttestationsForSlotAndProposal(
|
|
188
|
+
SlotNumber(1),
|
|
189
|
+
proposalId,
|
|
190
|
+
);
|
|
191
|
+
expect(attestationsForSlot1AfterDelete.length).toBe(0);
|
|
192
|
+
});
|
|
274
193
|
});
|
|
275
194
|
|
|
276
195
|
describe('BlockProposal in attestation pool', () => {
|
|
277
196
|
it('should add and retrieve block proposal', async () => {
|
|
278
197
|
const slotNumber = 420;
|
|
279
198
|
const archive = Fr.random();
|
|
280
|
-
const proposal =
|
|
199
|
+
const proposal = await mockBlockProposalForPool(signers[0], slotNumber, archive);
|
|
281
200
|
const proposalId = proposal.archive.toString();
|
|
282
201
|
|
|
283
202
|
await ap.addBlockProposal(proposal);
|
|
@@ -304,13 +223,13 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
304
223
|
it('should update block proposal if added twice with same id', async () => {
|
|
305
224
|
const slotNumber = 420;
|
|
306
225
|
const archive = Fr.random();
|
|
307
|
-
const proposal1 =
|
|
226
|
+
const proposal1 = await mockBlockProposalForPool(signers[0], slotNumber, archive);
|
|
308
227
|
const proposalId = proposal1.archive.toString();
|
|
309
228
|
|
|
310
229
|
await ap.addBlockProposal(proposal1);
|
|
311
230
|
|
|
312
231
|
// Create a new proposal with same archive but different signer
|
|
313
|
-
const proposal2 =
|
|
232
|
+
const proposal2 = await mockBlockProposalForPool(signers[1], slotNumber, archive);
|
|
314
233
|
|
|
315
234
|
await ap.addBlockProposal(proposal2);
|
|
316
235
|
|
|
@@ -323,8 +242,8 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
323
242
|
|
|
324
243
|
it('should handle block proposals with different slots and same archive', async () => {
|
|
325
244
|
const archive = Fr.random();
|
|
326
|
-
const proposal1 =
|
|
327
|
-
const proposal2 =
|
|
245
|
+
const proposal1 = await mockBlockProposalForPool(signers[0], 100, archive);
|
|
246
|
+
const proposal2 = await mockBlockProposalForPool(signers[1], 200, archive);
|
|
328
247
|
const proposalId = archive.toString();
|
|
329
248
|
|
|
330
249
|
await ap.addBlockProposal(proposal1);
|
|
@@ -334,83 +253,129 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
334
253
|
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
335
254
|
expect(retrievedProposal).toBeDefined();
|
|
336
255
|
expect(retrievedProposal!.toBuffer()).toEqual(proposal2.toBuffer());
|
|
337
|
-
expect(retrievedProposal!.slotNumber
|
|
256
|
+
expect(retrievedProposal!.slotNumber).toBe(SlotNumber(200));
|
|
338
257
|
});
|
|
258
|
+
});
|
|
339
259
|
|
|
340
|
-
|
|
260
|
+
describe('CheckpointProposal in attestation pool', () => {
|
|
261
|
+
const mockCheckpointProposalForPool = (
|
|
262
|
+
signer: Secp256k1Signer,
|
|
263
|
+
slotNumber: number,
|
|
264
|
+
archive: Fr = Fr.random(),
|
|
265
|
+
): Promise<CheckpointProposal> => {
|
|
266
|
+
const checkpointHeader = makeCheckpointHeader(1, { slotNumber: SlotNumber(slotNumber) });
|
|
267
|
+
const blockHeader = makeBlockHeader(1);
|
|
268
|
+
return makeCheckpointProposal({
|
|
269
|
+
signer,
|
|
270
|
+
checkpointHeader,
|
|
271
|
+
archiveRoot: archive,
|
|
272
|
+
lastBlock: { blockHeader },
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
it('should add and retrieve checkpoint proposal as core (without lastBlock)', async () => {
|
|
341
277
|
const slotNumber = 420;
|
|
342
278
|
const archive = Fr.random();
|
|
343
|
-
const proposal =
|
|
279
|
+
const proposal = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
|
|
344
280
|
const proposalId = proposal.archive.toString();
|
|
345
281
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
const
|
|
349
|
-
await ap.addAttestations(attestations);
|
|
282
|
+
await ap.addCheckpointProposal(proposal);
|
|
283
|
+
|
|
284
|
+
const retrievedProposal = await ap.getCheckpointProposal(proposalId);
|
|
350
285
|
|
|
351
|
-
// Verify proposal exists
|
|
352
|
-
let retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
353
286
|
expect(retrievedProposal).toBeDefined();
|
|
354
|
-
|
|
287
|
+
// Should return core version (without lastBlock)
|
|
288
|
+
expect(retrievedProposal!.toBuffer()).toEqual(proposal.toCore().toBuffer());
|
|
289
|
+
|
|
290
|
+
// Check hasCheckpointProposal with both id and object
|
|
291
|
+
expect(await ap.hasCheckpointProposal(proposalId)).toBe(true);
|
|
292
|
+
expect(await ap.hasCheckpointProposal(proposal)).toBe(true);
|
|
293
|
+
});
|
|
355
294
|
|
|
356
|
-
|
|
357
|
-
|
|
295
|
+
it('should extract and store block proposal when adding checkpoint proposal with lastBlock', async () => {
|
|
296
|
+
const slotNumber = 420;
|
|
297
|
+
const archive = Fr.random();
|
|
298
|
+
const proposal = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
|
|
299
|
+
const proposalId = proposal.archive.toString();
|
|
358
300
|
|
|
359
|
-
//
|
|
360
|
-
|
|
361
|
-
expect(
|
|
362
|
-
|
|
301
|
+
// Verify the proposal has a lastBlock
|
|
302
|
+
const expectedBlockProposal = proposal.getBlockProposal();
|
|
303
|
+
expect(expectedBlockProposal).toBeDefined();
|
|
304
|
+
|
|
305
|
+
await ap.addCheckpointProposal(proposal);
|
|
306
|
+
|
|
307
|
+
// The block proposal should be stored separately and retrievable
|
|
308
|
+
const retrievedBlockProposal = await ap.getBlockProposal(proposalId);
|
|
309
|
+
expect(retrievedBlockProposal).toBeDefined();
|
|
310
|
+
expect(retrievedBlockProposal!.archive.toString()).toBe(archive.toString());
|
|
311
|
+
expect(retrievedBlockProposal!.blockHeader.toBuffer()).toEqual(expectedBlockProposal!.blockHeader.toBuffer());
|
|
363
312
|
});
|
|
364
313
|
|
|
365
|
-
it('should
|
|
314
|
+
it('should not store block proposal when checkpoint proposal has no lastBlock', async () => {
|
|
366
315
|
const slotNumber = 420;
|
|
367
316
|
const archive = Fr.random();
|
|
368
|
-
const
|
|
317
|
+
const checkpointHeader = makeCheckpointHeader(1, { slotNumber: SlotNumber(slotNumber) });
|
|
318
|
+
// Create a checkpoint proposal WITHOUT lastBlock
|
|
319
|
+
const proposal = await makeCheckpointProposal({
|
|
320
|
+
signer: signers[0],
|
|
321
|
+
checkpointHeader,
|
|
322
|
+
archiveRoot: archive,
|
|
323
|
+
// No lastBlock
|
|
324
|
+
});
|
|
369
325
|
const proposalId = proposal.archive.toString();
|
|
370
326
|
|
|
371
|
-
|
|
372
|
-
await ap.addBlockProposal(proposal);
|
|
327
|
+
await ap.addCheckpointProposal(proposal);
|
|
373
328
|
|
|
374
|
-
//
|
|
375
|
-
|
|
376
|
-
expect(
|
|
377
|
-
expect(await ap.hasBlockProposal(proposal)).toBe(true);
|
|
329
|
+
// The checkpoint proposal should be stored
|
|
330
|
+
const retrievedCheckpointProposal = await ap.getCheckpointProposal(proposalId);
|
|
331
|
+
expect(retrievedCheckpointProposal).toBeDefined();
|
|
378
332
|
|
|
379
|
-
//
|
|
380
|
-
await ap.
|
|
333
|
+
// But no block proposal should be stored (archive key won't have a block proposal)
|
|
334
|
+
const retrievedBlockProposal = await ap.getBlockProposal(proposalId);
|
|
335
|
+
expect(retrievedBlockProposal).toBeUndefined();
|
|
336
|
+
});
|
|
381
337
|
|
|
382
|
-
|
|
383
|
-
|
|
338
|
+
it('should return undefined for non-existent checkpoint proposal', async () => {
|
|
339
|
+
const nonExistentId = Fr.random().toString();
|
|
340
|
+
const retrievedProposal = await ap.getCheckpointProposal(nonExistentId);
|
|
384
341
|
expect(retrievedProposal).toBeUndefined();
|
|
385
|
-
|
|
342
|
+
|
|
343
|
+
// Check hasCheckpointProposal returns false for non-existent proposal
|
|
344
|
+
expect(await ap.hasCheckpointProposal(nonExistentId)).toBe(false);
|
|
386
345
|
});
|
|
387
346
|
|
|
388
|
-
it('should
|
|
347
|
+
it('should update checkpoint proposal if added twice with same id', async () => {
|
|
389
348
|
const slotNumber = 420;
|
|
390
349
|
const archive = Fr.random();
|
|
391
|
-
const
|
|
392
|
-
const proposalId =
|
|
350
|
+
const proposal1 = await mockCheckpointProposalForPool(signers[0], slotNumber, archive);
|
|
351
|
+
const proposalId = proposal1.archive.toString();
|
|
393
352
|
|
|
394
|
-
|
|
395
|
-
await ap.addBlockProposal(proposal);
|
|
353
|
+
await ap.addCheckpointProposal(proposal1);
|
|
396
354
|
|
|
397
|
-
//
|
|
398
|
-
const
|
|
399
|
-
await ap.addAttestations(attestations);
|
|
355
|
+
// Create a new proposal with same archive but different signer
|
|
356
|
+
const proposal2 = await mockCheckpointProposalForPool(signers[1], slotNumber, archive);
|
|
400
357
|
|
|
401
|
-
|
|
402
|
-
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
403
|
-
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
358
|
+
await ap.addCheckpointProposal(proposal2);
|
|
404
359
|
|
|
360
|
+
const retrievedProposal = await ap.getCheckpointProposal(proposalId);
|
|
405
361
|
expect(retrievedProposal).toBeDefined();
|
|
406
|
-
|
|
407
|
-
expect(
|
|
362
|
+
// Should have the second proposal (as core)
|
|
363
|
+
expect(retrievedProposal!.toBuffer()).toEqual(proposal2.toCore().toBuffer());
|
|
364
|
+
expect(retrievedProposal!.getSender()?.toString()).toBe(signers[1].address.toString());
|
|
365
|
+
});
|
|
408
366
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
367
|
+
it('should throw ProposalSlotCapExceededError when exceeding capacity', async () => {
|
|
368
|
+
const slotNumber = 420;
|
|
369
|
+
|
|
370
|
+
// Add MAX_PROPOSALS_PER_SLOT proposals
|
|
371
|
+
for (let i = 0; i < MAX_PROPOSALS_PER_SLOT; i++) {
|
|
372
|
+
const proposal = await mockCheckpointProposalForPool(signers[i % NUMBER_OF_SIGNERS_PER_TEST], slotNumber);
|
|
373
|
+
await ap.addCheckpointProposal(proposal);
|
|
413
374
|
}
|
|
375
|
+
|
|
376
|
+
// The next proposal should throw
|
|
377
|
+
const extraProposal = await mockCheckpointProposalForPool(signers[0], slotNumber);
|
|
378
|
+
await expect(ap.addCheckpointProposal(extraProposal)).rejects.toThrow('Maximum checkpoint proposals per slot');
|
|
414
379
|
});
|
|
415
380
|
});
|
|
416
381
|
}
|