@aztec/p2p 0.0.1-commit.9b94fc1 → 0.0.1-commit.9d2bcf6d
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 +11 -9
- package/dest/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +18 -19
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +473 -129
- 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 +17 -8
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +15 -14
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- 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 +239 -265
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
- 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/instrumentation.d.ts +7 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +31 -13
- 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 +37 -27
- 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 +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
- 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/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/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 +3 -3
- 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/data_store.js +10 -6
- 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/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +30 -72
- package/dest/services/libp2p/libp2p_service.d.ts +39 -16
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +754 -191
- package/dest/services/peer-manager/metrics.d.ts +7 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +33 -21
- package/dest/services/peer-manager/peer_manager.d.ts +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +4 -12
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +7 -4
- 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/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 -1
- 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/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 +16 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -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 +44 -14
- package/dest/services/reqresp/protocols/status.d.ts +5 -4
- 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/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +460 -46
- 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 -6
- 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 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +10 -9
- 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_file_store/config.d.ts +18 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +26 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +149 -0
- 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/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/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 -123
- 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/package.json +18 -18
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +15 -20
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +114 -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 +25 -19
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +39 -14
- 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 +37 -22
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
- 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 +5 -3
- 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/data_store.ts +10 -7
- 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/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +32 -73
- package/src/services/libp2p/libp2p_service.ts +425 -180
- package/src/services/peer-manager/metrics.ts +39 -21
- package/src/services/peer-manager/peer_manager.ts +5 -4
- package/src/services/peer-manager/peer_scoring.ts +3 -4
- 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 +18 -4
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
- 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 +3 -3
- package/src/services/tx_collection/tx_collection.ts +10 -9
- package/src/services/tx_file_store/config.ts +43 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +173 -0
- 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 -119
- package/src/testbench/worker_client_manager.ts +304 -42
- 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 -82
- 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 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -1,21 +1,399 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
function applyDecs2203RFactory() {
|
|
2
|
+
function createAddInitializerMethod(initializers, decoratorFinishedRef) {
|
|
3
|
+
return function addInitializer(initializer) {
|
|
4
|
+
assertNotFinished(decoratorFinishedRef, "addInitializer");
|
|
5
|
+
assertCallable(initializer, "An initializer");
|
|
6
|
+
initializers.push(initializer);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
|
|
10
|
+
var kindStr;
|
|
11
|
+
switch(kind){
|
|
12
|
+
case 1:
|
|
13
|
+
kindStr = "accessor";
|
|
14
|
+
break;
|
|
15
|
+
case 2:
|
|
16
|
+
kindStr = "method";
|
|
17
|
+
break;
|
|
18
|
+
case 3:
|
|
19
|
+
kindStr = "getter";
|
|
20
|
+
break;
|
|
21
|
+
case 4:
|
|
22
|
+
kindStr = "setter";
|
|
23
|
+
break;
|
|
24
|
+
default:
|
|
25
|
+
kindStr = "field";
|
|
26
|
+
}
|
|
27
|
+
var ctx = {
|
|
28
|
+
kind: kindStr,
|
|
29
|
+
name: isPrivate ? "#" + name : name,
|
|
30
|
+
static: isStatic,
|
|
31
|
+
private: isPrivate,
|
|
32
|
+
metadata: metadata
|
|
33
|
+
};
|
|
34
|
+
var decoratorFinishedRef = {
|
|
35
|
+
v: false
|
|
36
|
+
};
|
|
37
|
+
ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
|
|
38
|
+
var get, set;
|
|
39
|
+
if (kind === 0) {
|
|
40
|
+
if (isPrivate) {
|
|
41
|
+
get = desc.get;
|
|
42
|
+
set = desc.set;
|
|
43
|
+
} else {
|
|
44
|
+
get = function() {
|
|
45
|
+
return this[name];
|
|
46
|
+
};
|
|
47
|
+
set = function(v) {
|
|
48
|
+
this[name] = v;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
} else if (kind === 2) {
|
|
52
|
+
get = function() {
|
|
53
|
+
return desc.value;
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
if (kind === 1 || kind === 3) {
|
|
57
|
+
get = function() {
|
|
58
|
+
return desc.get.call(this);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (kind === 1 || kind === 4) {
|
|
62
|
+
set = function(v) {
|
|
63
|
+
desc.set.call(this, v);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
ctx.access = get && set ? {
|
|
68
|
+
get: get,
|
|
69
|
+
set: set
|
|
70
|
+
} : get ? {
|
|
71
|
+
get: get
|
|
72
|
+
} : {
|
|
73
|
+
set: set
|
|
74
|
+
};
|
|
75
|
+
try {
|
|
76
|
+
return dec(value, ctx);
|
|
77
|
+
} finally{
|
|
78
|
+
decoratorFinishedRef.v = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function assertNotFinished(decoratorFinishedRef, fnName) {
|
|
82
|
+
if (decoratorFinishedRef.v) {
|
|
83
|
+
throw new Error("attempted to call " + fnName + " after decoration was finished");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function assertCallable(fn, hint) {
|
|
87
|
+
if (typeof fn !== "function") {
|
|
88
|
+
throw new TypeError(hint + " must be a function");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function assertValidReturnValue(kind, value) {
|
|
92
|
+
var type = typeof value;
|
|
93
|
+
if (kind === 1) {
|
|
94
|
+
if (type !== "object" || value === null) {
|
|
95
|
+
throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
|
|
96
|
+
}
|
|
97
|
+
if (value.get !== undefined) {
|
|
98
|
+
assertCallable(value.get, "accessor.get");
|
|
99
|
+
}
|
|
100
|
+
if (value.set !== undefined) {
|
|
101
|
+
assertCallable(value.set, "accessor.set");
|
|
102
|
+
}
|
|
103
|
+
if (value.init !== undefined) {
|
|
104
|
+
assertCallable(value.init, "accessor.init");
|
|
105
|
+
}
|
|
106
|
+
} else if (type !== "function") {
|
|
107
|
+
var hint;
|
|
108
|
+
if (kind === 0) {
|
|
109
|
+
hint = "field";
|
|
110
|
+
} else if (kind === 10) {
|
|
111
|
+
hint = "class";
|
|
112
|
+
} else {
|
|
113
|
+
hint = "method";
|
|
114
|
+
}
|
|
115
|
+
throw new TypeError(hint + " decorators must return a function or void 0");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
|
|
119
|
+
var decs = decInfo[0];
|
|
120
|
+
var desc, init, value;
|
|
121
|
+
if (isPrivate) {
|
|
122
|
+
if (kind === 0 || kind === 1) {
|
|
123
|
+
desc = {
|
|
124
|
+
get: decInfo[3],
|
|
125
|
+
set: decInfo[4]
|
|
126
|
+
};
|
|
127
|
+
} else if (kind === 3) {
|
|
128
|
+
desc = {
|
|
129
|
+
get: decInfo[3]
|
|
130
|
+
};
|
|
131
|
+
} else if (kind === 4) {
|
|
132
|
+
desc = {
|
|
133
|
+
set: decInfo[3]
|
|
134
|
+
};
|
|
135
|
+
} else {
|
|
136
|
+
desc = {
|
|
137
|
+
value: decInfo[3]
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
} else if (kind !== 0) {
|
|
141
|
+
desc = Object.getOwnPropertyDescriptor(base, name);
|
|
142
|
+
}
|
|
143
|
+
if (kind === 1) {
|
|
144
|
+
value = {
|
|
145
|
+
get: desc.get,
|
|
146
|
+
set: desc.set
|
|
147
|
+
};
|
|
148
|
+
} else if (kind === 2) {
|
|
149
|
+
value = desc.value;
|
|
150
|
+
} else if (kind === 3) {
|
|
151
|
+
value = desc.get;
|
|
152
|
+
} else if (kind === 4) {
|
|
153
|
+
value = desc.set;
|
|
154
|
+
}
|
|
155
|
+
var newValue, get, set;
|
|
156
|
+
if (typeof decs === "function") {
|
|
157
|
+
newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
|
|
158
|
+
if (newValue !== void 0) {
|
|
159
|
+
assertValidReturnValue(kind, newValue);
|
|
160
|
+
if (kind === 0) {
|
|
161
|
+
init = newValue;
|
|
162
|
+
} else if (kind === 1) {
|
|
163
|
+
init = newValue.init;
|
|
164
|
+
get = newValue.get || value.get;
|
|
165
|
+
set = newValue.set || value.set;
|
|
166
|
+
value = {
|
|
167
|
+
get: get,
|
|
168
|
+
set: set
|
|
169
|
+
};
|
|
170
|
+
} else {
|
|
171
|
+
value = newValue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
for(var i = decs.length - 1; i >= 0; i--){
|
|
176
|
+
var dec = decs[i];
|
|
177
|
+
newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
|
|
178
|
+
if (newValue !== void 0) {
|
|
179
|
+
assertValidReturnValue(kind, newValue);
|
|
180
|
+
var newInit;
|
|
181
|
+
if (kind === 0) {
|
|
182
|
+
newInit = newValue;
|
|
183
|
+
} else if (kind === 1) {
|
|
184
|
+
newInit = newValue.init;
|
|
185
|
+
get = newValue.get || value.get;
|
|
186
|
+
set = newValue.set || value.set;
|
|
187
|
+
value = {
|
|
188
|
+
get: get,
|
|
189
|
+
set: set
|
|
190
|
+
};
|
|
191
|
+
} else {
|
|
192
|
+
value = newValue;
|
|
193
|
+
}
|
|
194
|
+
if (newInit !== void 0) {
|
|
195
|
+
if (init === void 0) {
|
|
196
|
+
init = newInit;
|
|
197
|
+
} else if (typeof init === "function") {
|
|
198
|
+
init = [
|
|
199
|
+
init,
|
|
200
|
+
newInit
|
|
201
|
+
];
|
|
202
|
+
} else {
|
|
203
|
+
init.push(newInit);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (kind === 0 || kind === 1) {
|
|
210
|
+
if (init === void 0) {
|
|
211
|
+
init = function(instance, init) {
|
|
212
|
+
return init;
|
|
213
|
+
};
|
|
214
|
+
} else if (typeof init !== "function") {
|
|
215
|
+
var ownInitializers = init;
|
|
216
|
+
init = function(instance, init) {
|
|
217
|
+
var value = init;
|
|
218
|
+
for(var i = 0; i < ownInitializers.length; i++){
|
|
219
|
+
value = ownInitializers[i].call(instance, value);
|
|
220
|
+
}
|
|
221
|
+
return value;
|
|
222
|
+
};
|
|
223
|
+
} else {
|
|
224
|
+
var originalInitializer = init;
|
|
225
|
+
init = function(instance, init) {
|
|
226
|
+
return originalInitializer.call(instance, init);
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
ret.push(init);
|
|
230
|
+
}
|
|
231
|
+
if (kind !== 0) {
|
|
232
|
+
if (kind === 1) {
|
|
233
|
+
desc.get = value.get;
|
|
234
|
+
desc.set = value.set;
|
|
235
|
+
} else if (kind === 2) {
|
|
236
|
+
desc.value = value;
|
|
237
|
+
} else if (kind === 3) {
|
|
238
|
+
desc.get = value;
|
|
239
|
+
} else if (kind === 4) {
|
|
240
|
+
desc.set = value;
|
|
241
|
+
}
|
|
242
|
+
if (isPrivate) {
|
|
243
|
+
if (kind === 1) {
|
|
244
|
+
ret.push(function(instance, args) {
|
|
245
|
+
return value.get.call(instance, args);
|
|
246
|
+
});
|
|
247
|
+
ret.push(function(instance, args) {
|
|
248
|
+
return value.set.call(instance, args);
|
|
249
|
+
});
|
|
250
|
+
} else if (kind === 2) {
|
|
251
|
+
ret.push(value);
|
|
252
|
+
} else {
|
|
253
|
+
ret.push(function(instance, args) {
|
|
254
|
+
return value.call(instance, args);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
Object.defineProperty(base, name, desc);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function applyMemberDecs(Class, decInfos, metadata) {
|
|
263
|
+
var ret = [];
|
|
264
|
+
var protoInitializers;
|
|
265
|
+
var staticInitializers;
|
|
266
|
+
var existingProtoNonFields = new Map();
|
|
267
|
+
var existingStaticNonFields = new Map();
|
|
268
|
+
for(var i = 0; i < decInfos.length; i++){
|
|
269
|
+
var decInfo = decInfos[i];
|
|
270
|
+
if (!Array.isArray(decInfo)) continue;
|
|
271
|
+
var kind = decInfo[1];
|
|
272
|
+
var name = decInfo[2];
|
|
273
|
+
var isPrivate = decInfo.length > 3;
|
|
274
|
+
var isStatic = kind >= 5;
|
|
275
|
+
var base;
|
|
276
|
+
var initializers;
|
|
277
|
+
if (isStatic) {
|
|
278
|
+
base = Class;
|
|
279
|
+
kind = kind - 5;
|
|
280
|
+
staticInitializers = staticInitializers || [];
|
|
281
|
+
initializers = staticInitializers;
|
|
282
|
+
} else {
|
|
283
|
+
base = Class.prototype;
|
|
284
|
+
protoInitializers = protoInitializers || [];
|
|
285
|
+
initializers = protoInitializers;
|
|
286
|
+
}
|
|
287
|
+
if (kind !== 0 && !isPrivate) {
|
|
288
|
+
var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
|
|
289
|
+
var existingKind = existingNonFields.get(name) || 0;
|
|
290
|
+
if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) {
|
|
291
|
+
throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + name);
|
|
292
|
+
} else if (!existingKind && kind > 2) {
|
|
293
|
+
existingNonFields.set(name, kind);
|
|
294
|
+
} else {
|
|
295
|
+
existingNonFields.set(name, true);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
|
|
299
|
+
}
|
|
300
|
+
pushInitializers(ret, protoInitializers);
|
|
301
|
+
pushInitializers(ret, staticInitializers);
|
|
302
|
+
return ret;
|
|
303
|
+
}
|
|
304
|
+
function pushInitializers(ret, initializers) {
|
|
305
|
+
if (initializers) {
|
|
306
|
+
ret.push(function(instance) {
|
|
307
|
+
for(var i = 0; i < initializers.length; i++){
|
|
308
|
+
initializers[i].call(instance);
|
|
309
|
+
}
|
|
310
|
+
return instance;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
function applyClassDecs(targetClass, classDecs, metadata) {
|
|
315
|
+
if (classDecs.length > 0) {
|
|
316
|
+
var initializers = [];
|
|
317
|
+
var newClass = targetClass;
|
|
318
|
+
var name = targetClass.name;
|
|
319
|
+
for(var i = classDecs.length - 1; i >= 0; i--){
|
|
320
|
+
var decoratorFinishedRef = {
|
|
321
|
+
v: false
|
|
322
|
+
};
|
|
323
|
+
try {
|
|
324
|
+
var nextNewClass = classDecs[i](newClass, {
|
|
325
|
+
kind: "class",
|
|
326
|
+
name: name,
|
|
327
|
+
addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef),
|
|
328
|
+
metadata
|
|
329
|
+
});
|
|
330
|
+
} finally{
|
|
331
|
+
decoratorFinishedRef.v = true;
|
|
332
|
+
}
|
|
333
|
+
if (nextNewClass !== undefined) {
|
|
334
|
+
assertValidReturnValue(10, nextNewClass);
|
|
335
|
+
newClass = nextNewClass;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return [
|
|
339
|
+
defineMetadata(newClass, metadata),
|
|
340
|
+
function() {
|
|
341
|
+
for(var i = 0; i < initializers.length; i++){
|
|
342
|
+
initializers[i].call(newClass);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
];
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function defineMetadata(Class, metadata) {
|
|
349
|
+
return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), {
|
|
350
|
+
configurable: true,
|
|
351
|
+
enumerable: true,
|
|
352
|
+
value: metadata
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return function applyDecs2203R(targetClass, memberDecs, classDecs, parentClass) {
|
|
356
|
+
if (parentClass !== void 0) {
|
|
357
|
+
var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
|
|
358
|
+
}
|
|
359
|
+
var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
|
|
360
|
+
var e = applyMemberDecs(targetClass, memberDecs, metadata);
|
|
361
|
+
if (!classDecs.length) defineMetadata(targetClass, metadata);
|
|
362
|
+
return {
|
|
363
|
+
e: e,
|
|
364
|
+
get c () {
|
|
365
|
+
return applyClassDecs(targetClass, classDecs, metadata);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
371
|
+
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
6
372
|
}
|
|
7
|
-
|
|
8
|
-
import {
|
|
373
|
+
var _dec, _dec1, _initProto;
|
|
374
|
+
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
375
|
+
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
9
376
|
import { createLogger } from '@aztec/foundation/log';
|
|
10
377
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
|
+
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
379
|
+
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
11
380
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
12
381
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
13
|
-
import { Attributes,
|
|
382
|
+
import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
14
383
|
import { getP2PDefaultConfig } from '../config.js';
|
|
15
384
|
import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
|
|
16
385
|
import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
|
|
17
386
|
import { TxProvider } from '../services/tx_provider.js';
|
|
18
387
|
import { P2PClientState } from './interface.js';
|
|
388
|
+
_dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
389
|
+
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
390
|
+
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
391
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
|
|
392
|
+
})), _dec1 = trackSpan('p2pClient.broadcastCheckpointProposal', async (proposal)=>({
|
|
393
|
+
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
394
|
+
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
395
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
|
|
396
|
+
}));
|
|
19
397
|
/**
|
|
20
398
|
* The P2P client implementation.
|
|
21
399
|
*/ export class P2PClient extends WithTracer {
|
|
@@ -23,9 +401,24 @@ import { P2PClientState } from './interface.js';
|
|
|
23
401
|
l2BlockSource;
|
|
24
402
|
p2pService;
|
|
25
403
|
txCollection;
|
|
404
|
+
txFileStore;
|
|
26
405
|
_dateProvider;
|
|
27
406
|
telemetry;
|
|
28
407
|
log;
|
|
408
|
+
static{
|
|
409
|
+
({ e: [_initProto] } = _apply_decs_2203_r(this, [
|
|
410
|
+
[
|
|
411
|
+
_dec,
|
|
412
|
+
2,
|
|
413
|
+
"broadcastProposal"
|
|
414
|
+
],
|
|
415
|
+
[
|
|
416
|
+
_dec1,
|
|
417
|
+
2,
|
|
418
|
+
"broadcastCheckpointProposal"
|
|
419
|
+
]
|
|
420
|
+
], []));
|
|
421
|
+
}
|
|
29
422
|
/** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */ runningPromise;
|
|
30
423
|
currentState;
|
|
31
424
|
syncPromise;
|
|
@@ -33,10 +426,7 @@ import { P2PClientState } from './interface.js';
|
|
|
33
426
|
latestBlockNumberAtStart;
|
|
34
427
|
provenBlockNumberAtStart;
|
|
35
428
|
finalizedBlockNumberAtStart;
|
|
36
|
-
|
|
37
|
-
synchedLatestBlockNumber;
|
|
38
|
-
synchedProvenBlockNumber;
|
|
39
|
-
synchedFinalizedBlockNumber;
|
|
429
|
+
l2Tips;
|
|
40
430
|
synchedLatestSlot;
|
|
41
431
|
txPool;
|
|
42
432
|
attestationPool;
|
|
@@ -51,8 +441,8 @@ import { P2PClientState } from './interface.js';
|
|
|
51
441
|
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
52
442
|
* @param p2pService - The concrete instance of p2p networking to use.
|
|
53
443
|
* @param log - A logger.
|
|
54
|
-
*/ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
55
|
-
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = P2PClientState.IDLE, this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
|
|
444
|
+
*/ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
445
|
+
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
|
|
56
446
|
this.config = {
|
|
57
447
|
...getP2PDefaultConfig(),
|
|
58
448
|
...config
|
|
@@ -61,7 +451,8 @@ import { P2PClientState } from './interface.js';
|
|
|
61
451
|
this.attestationPool = mempools.attestationPool;
|
|
62
452
|
this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
|
|
63
453
|
// Default to collecting all txs when we see a valid proposal
|
|
64
|
-
// This can be overridden by the validator client to
|
|
454
|
+
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
455
|
+
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
65
456
|
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
66
457
|
// validator-client code into here so we can validate a proposal is reasonable.
|
|
67
458
|
this.registerBlockProposalHandler(async (block, sender)=>{
|
|
@@ -70,23 +461,19 @@ import { P2PClientState } from './interface.js';
|
|
|
70
461
|
const constants = this.txCollection.getConstants();
|
|
71
462
|
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
72
463
|
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
73
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.
|
|
464
|
+
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
74
465
|
if (!parentBlock) {
|
|
75
466
|
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
76
|
-
return;
|
|
467
|
+
return false;
|
|
77
468
|
}
|
|
78
|
-
const blockNumber = parentBlock.getBlockNumber() + 1;
|
|
469
|
+
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
79
470
|
await this.txProvider.getTxsForBlockProposal(block, blockNumber, {
|
|
80
471
|
pinnedPeer: sender,
|
|
81
472
|
deadline
|
|
82
473
|
});
|
|
83
|
-
return
|
|
474
|
+
return true;
|
|
84
475
|
});
|
|
85
|
-
|
|
86
|
-
this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
|
|
87
|
-
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
88
|
-
this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
|
|
89
|
-
this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
|
|
476
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
90
477
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
91
478
|
}
|
|
92
479
|
registerThisValidatorAddresses(addresses) {
|
|
@@ -108,52 +495,15 @@ import { P2PClientState } from './interface.js';
|
|
|
108
495
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
109
496
|
}
|
|
110
497
|
getL2BlockHash(number) {
|
|
111
|
-
return this.
|
|
498
|
+
return this.l2Tips.getL2BlockHash(number);
|
|
112
499
|
}
|
|
113
500
|
updateP2PConfig(config) {
|
|
114
501
|
this.txPool.updateConfig(config);
|
|
115
502
|
this.p2pService.updateConfig(config);
|
|
116
503
|
return Promise.resolve();
|
|
117
504
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
let latestBlockHash;
|
|
121
|
-
const provenBlockNumber = await this.getSyncedProvenBlockNum();
|
|
122
|
-
let provenBlockHash;
|
|
123
|
-
const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
|
|
124
|
-
let finalizedBlockHash;
|
|
125
|
-
if (latestBlockNumber > 0) {
|
|
126
|
-
latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
|
|
127
|
-
if (typeof latestBlockHash === 'undefined') {
|
|
128
|
-
throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (provenBlockNumber > 0) {
|
|
132
|
-
provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
|
|
133
|
-
if (typeof provenBlockHash === 'undefined') {
|
|
134
|
-
throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (finalizedBlockNumber > 0) {
|
|
138
|
-
finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
|
|
139
|
-
if (typeof finalizedBlockHash === 'undefined') {
|
|
140
|
-
throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
latest: {
|
|
145
|
-
hash: latestBlockHash,
|
|
146
|
-
number: latestBlockNumber
|
|
147
|
-
},
|
|
148
|
-
proven: {
|
|
149
|
-
hash: provenBlockHash,
|
|
150
|
-
number: provenBlockNumber
|
|
151
|
-
},
|
|
152
|
-
finalized: {
|
|
153
|
-
hash: finalizedBlockHash,
|
|
154
|
-
number: finalizedBlockNumber
|
|
155
|
-
}
|
|
156
|
-
};
|
|
505
|
+
getL2Tips() {
|
|
506
|
+
return this.l2Tips.getL2Tips();
|
|
157
507
|
}
|
|
158
508
|
async handleBlockStreamEvent(event) {
|
|
159
509
|
this.log.debug(`Handling block stream event ${event.type}`);
|
|
@@ -163,38 +513,33 @@ import { P2PClientState } from './interface.js';
|
|
|
163
513
|
break;
|
|
164
514
|
case 'chain-finalized':
|
|
165
515
|
{
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const from = await this.getSyncedFinalizedBlockNum() + 1;
|
|
516
|
+
const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
|
|
517
|
+
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
169
518
|
const limit = event.block.number - from + 1;
|
|
170
519
|
if (limit > 0) {
|
|
171
|
-
|
|
520
|
+
const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
|
|
521
|
+
await this.handleFinalizedL2Blocks(oldBlocks);
|
|
172
522
|
}
|
|
173
523
|
break;
|
|
174
524
|
}
|
|
175
525
|
case 'chain-proven':
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
179
|
-
await this.synchedProvenBlockNumber.set(event.block.number);
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
526
|
+
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
527
|
+
break;
|
|
182
528
|
case 'chain-pruned':
|
|
183
|
-
await this.setBlockHash(event.block);
|
|
184
529
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
185
530
|
await this.handlePruneL2Blocks(event.block.number);
|
|
186
531
|
break;
|
|
532
|
+
case 'chain-checkpointed':
|
|
533
|
+
break;
|
|
187
534
|
default:
|
|
188
535
|
{
|
|
189
536
|
const _ = event;
|
|
190
537
|
break;
|
|
191
538
|
}
|
|
192
539
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
await this.synchedBlockHashes.set(block.number, block.hash.toString());
|
|
197
|
-
}
|
|
540
|
+
// Pass the event through to our l2 tips store
|
|
541
|
+
await this.l2Tips.handleBlockStreamEvent(event);
|
|
542
|
+
await this.startServiceIfSynched();
|
|
198
543
|
}
|
|
199
544
|
#assertIsReady() {
|
|
200
545
|
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
@@ -214,15 +559,15 @@ import { P2PClientState } from './interface.js';
|
|
|
214
559
|
}
|
|
215
560
|
// get the current latest block numbers
|
|
216
561
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
217
|
-
this.latestBlockNumberAtStart = latestBlockNumbers.
|
|
218
|
-
this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
|
|
219
|
-
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
|
|
562
|
+
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
563
|
+
this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
|
|
564
|
+
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
|
|
220
565
|
const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
|
|
221
566
|
const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
|
|
222
567
|
const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum() + 1;
|
|
223
|
-
if (await this.txPool.isEmpty() &&
|
|
568
|
+
if (await this.txPool.isEmpty() && await this.attestationPool.isEmpty()) {
|
|
224
569
|
// if mempools are empty, we don't care about syncing prior blocks
|
|
225
|
-
this.initBlockStream(this.latestBlockNumberAtStart);
|
|
570
|
+
this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
|
|
226
571
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
227
572
|
this.syncPromise = Promise.resolve();
|
|
228
573
|
await this.p2pService.start();
|
|
@@ -254,6 +599,7 @@ import { P2PClientState } from './interface.js';
|
|
|
254
599
|
}
|
|
255
600
|
this.blockStream.start();
|
|
256
601
|
await this.txCollection.start();
|
|
602
|
+
this.txFileStore?.start();
|
|
257
603
|
return this.syncPromise;
|
|
258
604
|
}
|
|
259
605
|
addReqRespSubProtocol(subProtocol, handler, validator) {
|
|
@@ -262,7 +608,7 @@ import { P2PClientState } from './interface.js';
|
|
|
262
608
|
initBlockStream(startingBlock) {
|
|
263
609
|
if (!this.blockStream) {
|
|
264
610
|
const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
|
|
265
|
-
this.blockStream = new
|
|
611
|
+
this.blockStream = new L2BlockStream(this.l2BlockSource, this, this, createLogger(`${this.log.module}:l2-block-stream`), {
|
|
266
612
|
batchSize,
|
|
267
613
|
pollIntervalMS,
|
|
268
614
|
startingBlock
|
|
@@ -276,6 +622,8 @@ import { P2PClientState } from './interface.js';
|
|
|
276
622
|
this.log.debug('Stopping p2p client...');
|
|
277
623
|
await tryStop(this.txCollection);
|
|
278
624
|
this.log.debug('Stopped tx collection service');
|
|
625
|
+
await this.txFileStore?.stop();
|
|
626
|
+
this.log.debug('Stopped tx file store');
|
|
279
627
|
await this.p2pService.stop();
|
|
280
628
|
this.log.debug('Stopped p2p service');
|
|
281
629
|
await this.blockStream?.stop();
|
|
@@ -288,30 +636,39 @@ import { P2PClientState } from './interface.js';
|
|
|
288
636
|
this.initBlockStream();
|
|
289
637
|
await this.blockStream.sync();
|
|
290
638
|
}
|
|
291
|
-
broadcastProposal(proposal) {
|
|
639
|
+
async broadcastProposal(proposal) {
|
|
292
640
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
641
|
+
// Store our own proposal so we can respond to req/resp requests for it
|
|
642
|
+
await this.attestationPool.addBlockProposal(proposal);
|
|
293
643
|
return this.p2pService.propagate(proposal);
|
|
294
644
|
}
|
|
295
|
-
async
|
|
296
|
-
this.log.verbose(`Broadcasting ${
|
|
297
|
-
|
|
645
|
+
async broadcastCheckpointProposal(proposal) {
|
|
646
|
+
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
647
|
+
const blockProposal = proposal.getBlockProposal();
|
|
648
|
+
if (blockProposal) {
|
|
649
|
+
// Store our own last-block proposal so we can respond to req/resp requests for it.
|
|
650
|
+
await this.attestationPool.addBlockProposal(blockProposal);
|
|
651
|
+
}
|
|
652
|
+
return this.p2pService.propagate(proposal);
|
|
298
653
|
}
|
|
299
|
-
async
|
|
300
|
-
|
|
654
|
+
async broadcastCheckpointAttestations(attestations) {
|
|
655
|
+
this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
|
|
656
|
+
await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
|
|
301
657
|
}
|
|
302
|
-
|
|
303
|
-
return this.attestationPool
|
|
658
|
+
async getCheckpointAttestationsForSlot(slot, proposalId) {
|
|
659
|
+
return await (proposalId ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
304
660
|
}
|
|
305
|
-
|
|
306
|
-
return this.attestationPool
|
|
307
|
-
attestation
|
|
308
|
-
]) ?? Promise.resolve();
|
|
661
|
+
addCheckpointAttestations(attestations) {
|
|
662
|
+
return this.attestationPool.addCheckpointAttestations(attestations);
|
|
309
663
|
}
|
|
310
664
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
311
665
|
// ^ This pattern is not my favorite (md)
|
|
312
666
|
registerBlockProposalHandler(handler) {
|
|
313
667
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
314
668
|
}
|
|
669
|
+
registerCheckpointProposalHandler(handler) {
|
|
670
|
+
this.p2pService.registerCheckpointReceivedCallback(handler);
|
|
671
|
+
}
|
|
315
672
|
/**
|
|
316
673
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
317
674
|
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
@@ -502,16 +859,19 @@ import { P2PClientState } from './interface.js';
|
|
|
502
859
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
503
860
|
* @returns Block number of latest L2 Block we've synced with.
|
|
504
861
|
*/ async getSyncedLatestBlockNum() {
|
|
505
|
-
|
|
862
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
863
|
+
return tips.proposed.number;
|
|
506
864
|
}
|
|
507
865
|
/**
|
|
508
866
|
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
509
867
|
* @returns Block number of latest proven L2 Block we've synced with.
|
|
510
868
|
*/ async getSyncedProvenBlockNum() {
|
|
511
|
-
|
|
869
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
870
|
+
return tips.proven.block.number;
|
|
512
871
|
}
|
|
513
872
|
async getSyncedFinalizedBlockNum() {
|
|
514
|
-
|
|
873
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
874
|
+
return tips.finalized.block.number;
|
|
515
875
|
}
|
|
516
876
|
/** Returns latest L2 slot for which we have seen an L2 block. */ async getSyncedLatestSlot() {
|
|
517
877
|
return await this.synchedLatestSlot.getAsync() ?? BigInt(0);
|
|
@@ -521,7 +881,7 @@ import { P2PClientState } from './interface.js';
|
|
|
521
881
|
* @returns Information about p2p client status: state & syncedToBlockNum.
|
|
522
882
|
*/ async getStatus() {
|
|
523
883
|
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
524
|
-
const blockHash = blockNumber === 0 ?
|
|
884
|
+
const blockHash = blockNumber === 0 ? GENESIS_BLOCK_HEADER_HASH.toString() : await this.l2BlockSource.getBlockHeader(blockNumber).then((header)=>header?.hash()).then((hash)=>hash?.toString());
|
|
525
885
|
return {
|
|
526
886
|
state: this.currentState,
|
|
527
887
|
syncedToL2Block: {
|
|
@@ -537,7 +897,7 @@ import { P2PClientState } from './interface.js';
|
|
|
537
897
|
*/ async markTxsAsMinedFromBlocks(blocks) {
|
|
538
898
|
for (const block of blocks){
|
|
539
899
|
const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
|
|
540
|
-
await this.txPool.markAsMined(txHashes, block.
|
|
900
|
+
await this.txPool.markAsMined(txHashes, block.header);
|
|
541
901
|
}
|
|
542
902
|
}
|
|
543
903
|
/**
|
|
@@ -548,17 +908,12 @@ import { P2PClientState } from './interface.js';
|
|
|
548
908
|
if (!blocks.length) {
|
|
549
909
|
return Promise.resolve();
|
|
550
910
|
}
|
|
551
|
-
await this.markTxsAsMinedFromBlocks(blocks
|
|
552
|
-
await this.
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
number: block.block.number,
|
|
556
|
-
hash: await block.block.hash().then((h)=>h.toString())
|
|
557
|
-
})));
|
|
558
|
-
await this.synchedLatestBlockNumber.set(lastBlock.number);
|
|
911
|
+
await this.markTxsAsMinedFromBlocks(blocks);
|
|
912
|
+
await this.txPool.clearNonEvictableTxs();
|
|
913
|
+
await this.startCollectingMissingTxs(blocks);
|
|
914
|
+
const lastBlock = blocks.at(-1);
|
|
559
915
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
560
916
|
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
561
|
-
await this.startServiceIfSynched();
|
|
562
917
|
}
|
|
563
918
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
|
|
564
919
|
try {
|
|
@@ -603,10 +958,8 @@ import { P2PClientState } from './interface.js';
|
|
|
603
958
|
permanently: true
|
|
604
959
|
});
|
|
605
960
|
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
606
|
-
await this.attestationPool
|
|
607
|
-
await this.synchedFinalizedBlockNumber.set(lastBlockNum);
|
|
961
|
+
await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
|
|
608
962
|
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
609
|
-
await this.startServiceIfSynched();
|
|
610
963
|
}
|
|
611
964
|
/**
|
|
612
965
|
* Updates the tx pool after a chain prune.
|
|
@@ -645,19 +998,17 @@ import { P2PClientState } from './interface.js';
|
|
|
645
998
|
this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
|
|
646
999
|
await this.txPool.deleteTxs(minedTxsFromReorg);
|
|
647
1000
|
} else {
|
|
648
|
-
this.
|
|
649
|
-
await this.txPool.markMinedAsPending(minedTxsFromReorg);
|
|
1001
|
+
await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
|
|
650
1002
|
}
|
|
651
|
-
await this.synchedLatestBlockNumber.set(latestBlock);
|
|
652
|
-
// no need to update block hashes, as they will be updated as new blocks are added
|
|
653
1003
|
}
|
|
654
1004
|
async startServiceIfSynched() {
|
|
655
1005
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
656
1006
|
return;
|
|
657
1007
|
}
|
|
658
|
-
const
|
|
659
|
-
const
|
|
660
|
-
const
|
|
1008
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
1009
|
+
const syncedFinalizedBlock = tips.finalized.block.number;
|
|
1010
|
+
const syncedProvenBlock = tips.proven.block.number;
|
|
1011
|
+
const syncedLatestBlock = tips.proposed.number;
|
|
661
1012
|
if (syncedLatestBlock >= this.latestBlockNumberAtStart && syncedProvenBlock >= this.provenBlockNumberAtStart && syncedFinalizedBlock >= this.finalizedBlockNumberAtStart) {
|
|
662
1013
|
this.log.info(`Completed P2P client sync to block ${syncedLatestBlock}. Starting service.`, {
|
|
663
1014
|
syncedLatestBlock,
|
|
@@ -692,10 +1043,3 @@ import { P2PClientState } from './interface.js';
|
|
|
692
1043
|
return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
|
|
693
1044
|
}
|
|
694
1045
|
}
|
|
695
|
-
_ts_decorate([
|
|
696
|
-
trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
697
|
-
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
698
|
-
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
699
|
-
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
|
|
700
|
-
}))
|
|
701
|
-
], P2PClient.prototype, "broadcastProposal", null);
|