@aztec/p2p 0.0.1-commit.f295ac2 → 0.0.1-commit.fc805bf
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 +1 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +6 -5
- package/dest/client/p2p_client.d.ts +1 -1
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +9 -2
- 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 +8 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -0
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +8 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
- 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/proposal_validator/proposal_validator.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
- 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 +8 -3
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +21 -11
- 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 +3 -2
- 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 +3 -2
- 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/timestamp_validator.d.ts +3 -2
- 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 +13 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +39 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +2 -3
- 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 +14 -3
- package/dest/services/libp2p/libp2p_service.d.ts +13 -7
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +60 -51
- package/dest/services/peer-manager/metrics.d.ts +2 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +20 -5
- 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 +8 -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/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/interface.d.ts +5 -3
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +2 -2
- 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 -5
- 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 +5 -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 +18 -6
- 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 +43 -13
- 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 +58 -22
- package/dest/services/service.d.ts +4 -1
- 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 +9 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
- 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 +9 -2
- 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 +3 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +8 -8
- 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_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +5 -5
- 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/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 +212 -133
- 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 -44
- package/package.json +14 -14
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +6 -10
- package/src/client/p2p_client.ts +14 -7
- 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 +6 -1
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +10 -7
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
- 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 +6 -2
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +64 -23
- package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
- 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/timestamp_validator.ts +6 -3
- 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 +45 -0
- package/src/services/encoding.ts +2 -3
- package/src/services/libp2p/instrumentation.ts +15 -2
- package/src/services/libp2p/libp2p_service.ts +99 -73
- package/src/services/peer-manager/metrics.ts +21 -4
- package/src/services/peer-manager/peer_scoring.ts +4 -1
- 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 +16 -0
- package/src/services/reqresp/interface.ts +5 -2
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -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 +51 -9
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +4 -0
- package/src/services/tx_collection/config.ts +15 -1
- package/src/services/tx_collection/fast_tx_collection.ts +36 -13
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +2 -2
- package/src/services/tx_collection/tx_collection.ts +8 -8
- package/src/services/tx_provider.ts +2 -2
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- 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 +321 -126
- package/src/testbench/worker_client_manager.ts +304 -47
|
@@ -1,130 +1,97 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
3
|
*
|
|
4
|
-
* Used when running testbench commands
|
|
4
|
+
* Used when running testbench commands.
|
|
5
5
|
*/
|
|
6
6
|
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
7
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
|
-
import {
|
|
8
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
9
9
|
import { SecretValue } from '@aztec/foundation/config';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
11
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
12
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
12
13
|
import { sleep } from '@aztec/foundation/sleep';
|
|
14
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
13
15
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
14
16
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
17
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
18
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
15
19
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
16
20
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
17
21
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
18
|
-
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
19
|
-
import {
|
|
22
|
+
import { type BlockProposal, P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
23
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
24
|
+
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
|
|
25
|
+
import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
20
26
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
21
27
|
|
|
22
28
|
import type { Message, PeerId } from '@libp2p/interface';
|
|
23
29
|
import { TopicValidatorResult } from '@libp2p/interface';
|
|
24
|
-
import
|
|
30
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
25
31
|
|
|
32
|
+
import type { P2PClient } from '../client/p2p_client.js';
|
|
26
33
|
import type { P2PConfig } from '../config.js';
|
|
27
34
|
import { createP2PClient } from '../index.js';
|
|
28
|
-
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
29
35
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
30
|
-
import type { TxPool } from '../mem_pools/tx_pool/index.js';
|
|
31
36
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
32
37
|
import type { PeerManager } from '../services/peer-manager/peer_manager.js';
|
|
38
|
+
import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
|
|
39
|
+
import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
|
|
40
|
+
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
33
41
|
import type { ReqResp } from '../services/reqresp/reqresp.js';
|
|
34
42
|
import type { PeerDiscoveryService } from '../services/service.js';
|
|
43
|
+
import {
|
|
44
|
+
BatchTxRequesterCollector,
|
|
45
|
+
SendBatchRequestCollector,
|
|
46
|
+
} from '../services/tx_collection/proposal_tx_collector.js';
|
|
35
47
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
48
|
+
import {
|
|
49
|
+
BENCHMARK_CONSTANTS,
|
|
50
|
+
type CollectorType,
|
|
51
|
+
type DistributionPattern,
|
|
52
|
+
InMemoryAttestationPool,
|
|
53
|
+
InMemoryTxPool,
|
|
54
|
+
UNLIMITED_RATE_LIMIT_QUOTA,
|
|
55
|
+
createMockEpochCache,
|
|
56
|
+
createMockWorldStateSynchronizer,
|
|
57
|
+
filterTxsByDistribution,
|
|
58
|
+
} from '../test-helpers/testbench-utils.js';
|
|
36
59
|
import type { PubSubLibp2p } from '../util.js';
|
|
37
60
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// Mock all methods
|
|
41
|
-
const pool: Omit<TxPool, keyof EventEmitter> = {
|
|
42
|
-
isEmpty: () => Promise.resolve(false),
|
|
43
|
-
addTxs: () => Promise.resolve(1),
|
|
44
|
-
getTxByHash: () => Promise.resolve(undefined),
|
|
45
|
-
getArchivedTxByHash: () => Promise.resolve(undefined),
|
|
46
|
-
markAsMined: () => Promise.resolve(),
|
|
47
|
-
markMinedAsPending: () => Promise.resolve(),
|
|
48
|
-
deleteTxs: () => Promise.resolve(),
|
|
49
|
-
getAllTxs: () => Promise.resolve([]),
|
|
50
|
-
getAllTxHashes: () => Promise.resolve([]),
|
|
51
|
-
getPendingTxHashes: () => Promise.resolve([]),
|
|
52
|
-
getPendingTxCount: () => Promise.resolve(0),
|
|
53
|
-
getMinedTxHashes: () => Promise.resolve([]),
|
|
54
|
-
getTxStatus: () => Promise.resolve(TxStatus.PENDING),
|
|
55
|
-
getTxsByHash: () => Promise.resolve([]),
|
|
56
|
-
hasTxs: () => Promise.resolve([]),
|
|
57
|
-
hasTx: () => Promise.resolve(false),
|
|
58
|
-
updateConfig: () => {},
|
|
59
|
-
markTxsAsNonEvictable: () => Promise.resolve(),
|
|
60
|
-
clearNonEvictableTxs: () => Promise.resolve(),
|
|
61
|
-
cleanupDeletedMinedTxs: () => Promise.resolve(0),
|
|
62
|
-
};
|
|
63
|
-
return Object.assign(new EventEmitter(), pool);
|
|
64
|
-
}
|
|
61
|
+
export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
|
|
62
|
+
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
getCheckpointAttestationsForSlotAndProposal: () => Promise.resolve([]),
|
|
80
|
-
deleteCheckpointAttestationsOlderThan: () => Promise.resolve(),
|
|
81
|
-
hasReachedCheckpointProposalCap: () => Promise.resolve(false),
|
|
82
|
-
hasReachedCheckpointAttestationCap: () => Promise.resolve(false),
|
|
83
|
-
canAddCheckpointProposal: () => Promise.resolve(true),
|
|
84
|
-
canAddCheckpointAttestation: () => Promise.resolve(true),
|
|
85
|
-
hasCheckpointAttestation: () => Promise.resolve(false),
|
|
86
|
-
};
|
|
64
|
+
export interface BenchReqRespCommand {
|
|
65
|
+
type: 'BENCH_REQRESP';
|
|
66
|
+
txCount: number;
|
|
67
|
+
peerCount: number;
|
|
68
|
+
distribution: DistributionPattern;
|
|
69
|
+
collectorType: CollectorType;
|
|
70
|
+
timeoutMs: number;
|
|
71
|
+
isAggregator: boolean;
|
|
72
|
+
peerIndex: number;
|
|
73
|
+
pinnedPeerIndex?: number;
|
|
74
|
+
pinnedPeerId?: string;
|
|
75
|
+
blockNumber: number;
|
|
76
|
+
seed: number;
|
|
87
77
|
}
|
|
88
78
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
getProposerAttesterAddressInCurrentOrNextSlot: () =>
|
|
96
|
-
Promise.resolve({
|
|
97
|
-
currentProposer: EthAddress.ZERO,
|
|
98
|
-
nextProposer: EthAddress.ZERO,
|
|
99
|
-
currentSlot: SlotNumber.ZERO,
|
|
100
|
-
nextSlot: SlotNumber.ZERO,
|
|
101
|
-
}),
|
|
102
|
-
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
103
|
-
getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
|
|
104
|
-
isInCommittee: () => Promise.resolve(false),
|
|
105
|
-
getRegisteredValidators: () => Promise.resolve([]),
|
|
106
|
-
filterInCommittee: () => Promise.resolve([]),
|
|
107
|
-
};
|
|
79
|
+
export interface BenchResultMessage {
|
|
80
|
+
type: 'BENCH_RESULT';
|
|
81
|
+
durationMs: number;
|
|
82
|
+
fetchedCount: number;
|
|
83
|
+
success: boolean;
|
|
84
|
+
error?: string;
|
|
108
85
|
}
|
|
109
86
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
status: () =>
|
|
113
|
-
Promise.resolve({
|
|
114
|
-
syncSummary: {
|
|
115
|
-
latestBlockNumber: 0,
|
|
116
|
-
latestBlockHash: '',
|
|
117
|
-
finalizedBlockNumber: 0,
|
|
118
|
-
treesAreSynched: false,
|
|
119
|
-
oldestHistoricBlockNumber: 0,
|
|
120
|
-
},
|
|
121
|
-
}),
|
|
122
|
-
} as WorldStateSynchronizer;
|
|
87
|
+
export interface BenchReadyMessage {
|
|
88
|
+
type: 'BENCH_READY';
|
|
123
89
|
}
|
|
90
|
+
const txCache = new Map<number, Tx[]>();
|
|
124
91
|
|
|
125
92
|
class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
|
|
126
93
|
private disableTxValidation: boolean;
|
|
127
|
-
private gossipMessageCount
|
|
94
|
+
private gossipMessageCount = 0;
|
|
128
95
|
|
|
129
96
|
constructor(
|
|
130
97
|
clientType: T,
|
|
@@ -193,10 +160,166 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
193
160
|
}
|
|
194
161
|
}
|
|
195
162
|
|
|
163
|
+
async function generateDeterministicTxs(txCount: number, seed: number, config: P2PConfig): Promise<Tx[]> {
|
|
164
|
+
const cached = txCache.get(seed) ?? [];
|
|
165
|
+
if (cached.length >= txCount) {
|
|
166
|
+
return cached.slice(0, txCount);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const includeByTimestampBase = BigInt(seed);
|
|
170
|
+
for (let i = cached.length; i < txCount; i++) {
|
|
171
|
+
const txSeed = seed * 10000 + i;
|
|
172
|
+
const tx = await mockTx(txSeed, {
|
|
173
|
+
chainId: new Fr(config.l1ChainId),
|
|
174
|
+
version: new Fr(config.rollupVersion),
|
|
175
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
176
|
+
protocolContractsHash,
|
|
177
|
+
feePayer: makeAztecAddress(txSeed + 1),
|
|
178
|
+
chonkProof: ChonkProof.empty(),
|
|
179
|
+
numberOfNonRevertiblePublicCallRequests: 0,
|
|
180
|
+
numberOfRevertiblePublicCallRequests: 0,
|
|
181
|
+
numberOfRevertibleNullifiers: 0,
|
|
182
|
+
hasPublicTeardownCallRequest: false,
|
|
183
|
+
publicCalldataSize: 0,
|
|
184
|
+
});
|
|
185
|
+
tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
|
|
186
|
+
await tx.recomputeHash();
|
|
187
|
+
cached.push(tx);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
txCache.set(seed, cached);
|
|
191
|
+
return cached.slice(0, txCount);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async function createBlockProposal(blockNumber: number, txHashes: TxHash[], seed: number): Promise<BlockProposal> {
|
|
195
|
+
const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
|
|
196
|
+
return await makeBlockProposal({
|
|
197
|
+
signer: Secp256k1Signer.random(),
|
|
198
|
+
blockHeader: makeBlockHeader(1, { blockNumber: BlockNumber(blockNumber) }),
|
|
199
|
+
archiveRoot,
|
|
200
|
+
txHashes,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function installUnlimitedRateLimits(client: P2PClient): void {
|
|
205
|
+
const reqResp = (client as any).p2pService.reqresp as any;
|
|
206
|
+
const rateLimiter = reqResp.rateLimiter as any;
|
|
207
|
+
|
|
208
|
+
rateLimiter.getRateLimits = () => UNLIMITED_RATE_LIMIT_QUOTA;
|
|
209
|
+
rateLimiter.allow = () => RateLimitStatus.Allowed;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
async function runAggregatorBenchmark(
|
|
213
|
+
client: P2PClient,
|
|
214
|
+
blockProposal: BlockProposal,
|
|
215
|
+
collectorType: CollectorType,
|
|
216
|
+
timeoutMs: number,
|
|
217
|
+
pinnedPeerId: string | undefined,
|
|
218
|
+
pinnedPeerIndex: number | undefined,
|
|
219
|
+
logger: Logger,
|
|
220
|
+
expectedPeerCount: number,
|
|
221
|
+
): Promise<BenchResultMessage> {
|
|
222
|
+
let timer = new Timer();
|
|
223
|
+
try {
|
|
224
|
+
installUnlimitedRateLimits(client);
|
|
225
|
+
|
|
226
|
+
const txHashes = blockProposal.txHashes;
|
|
227
|
+
logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
228
|
+
|
|
229
|
+
const p2pService = (client as any).p2pService;
|
|
230
|
+
const batchTxRequesterService: BatchTxRequesterLibP2PService = p2pService.getBatchTxRequesterService();
|
|
231
|
+
|
|
232
|
+
const minPeersRequired = Math.max(1, expectedPeerCount - 1);
|
|
233
|
+
const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
|
|
234
|
+
const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
|
|
235
|
+
let waited = 0;
|
|
236
|
+
|
|
237
|
+
while (waited < maxWaitMs) {
|
|
238
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
239
|
+
if (connectedPeers.length >= minPeersRequired) {
|
|
240
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
|
|
244
|
+
await sleep(waitInterval);
|
|
245
|
+
waited += waitInterval;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
249
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
|
|
250
|
+
logger.info(
|
|
251
|
+
`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes
|
|
252
|
+
.slice(0, 3)
|
|
253
|
+
.map(h => h.toString())
|
|
254
|
+
.join(', ')}...`,
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
let pinnedPeer: PeerId | undefined;
|
|
258
|
+
if (pinnedPeerId) {
|
|
259
|
+
pinnedPeer = peerIdFromString(pinnedPeerId);
|
|
260
|
+
} else if (pinnedPeerIndex !== undefined) {
|
|
261
|
+
if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
|
|
262
|
+
pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const noopTxValidator: IBatchRequestTxValidator = {
|
|
267
|
+
validateRequestedTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
|
|
268
|
+
validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
|
|
269
|
+
Promise.resolve(txs.map(() => ({ result: 'valid' }))),
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
timer = new Timer();
|
|
273
|
+
if (collectorType === 'batch-requester') {
|
|
274
|
+
const collector = new BatchTxRequesterCollector(
|
|
275
|
+
batchTxRequesterService,
|
|
276
|
+
logger,
|
|
277
|
+
new DateProvider(),
|
|
278
|
+
noopTxValidator,
|
|
279
|
+
);
|
|
280
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
281
|
+
const durationMs = timer.ms();
|
|
282
|
+
return {
|
|
283
|
+
type: 'BENCH_RESULT',
|
|
284
|
+
durationMs,
|
|
285
|
+
fetchedCount: fetchedTxs.length,
|
|
286
|
+
success: fetchedTxs.length === txHashes.length,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const collector = new SendBatchRequestCollector(
|
|
291
|
+
batchTxRequesterService,
|
|
292
|
+
BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
|
|
293
|
+
BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
|
|
294
|
+
);
|
|
295
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
296
|
+
const durationMs = timer.ms();
|
|
297
|
+
return {
|
|
298
|
+
type: 'BENCH_RESULT',
|
|
299
|
+
durationMs,
|
|
300
|
+
fetchedCount: fetchedTxs.length,
|
|
301
|
+
success: fetchedTxs.length === txHashes.length,
|
|
302
|
+
};
|
|
303
|
+
} catch (err: any) {
|
|
304
|
+
return {
|
|
305
|
+
type: 'BENCH_RESULT',
|
|
306
|
+
durationMs: timer.ms(),
|
|
307
|
+
fetchedCount: 0,
|
|
308
|
+
success: false,
|
|
309
|
+
error: err?.message ?? String(err),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
let workerClient: P2PClient | null = null;
|
|
315
|
+
let workerTxPool: InMemoryTxPool | null = null;
|
|
316
|
+
let workerAttestationPool: InMemoryAttestationPool | null = null;
|
|
317
|
+
let workerConfig: P2PConfig | null = null;
|
|
318
|
+
let workerLogger: Logger | null = null;
|
|
319
|
+
let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
|
|
320
|
+
|
|
196
321
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
197
322
|
process.on('message', async msg => {
|
|
198
|
-
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
199
|
-
// SecretValue's private fields can't be serialized via IPC
|
|
200
323
|
const {
|
|
201
324
|
type,
|
|
202
325
|
config: rawConfig,
|
|
@@ -206,47 +329,47 @@ process.on('message', async msg => {
|
|
|
206
329
|
config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
|
|
207
330
|
clientIndex: number;
|
|
208
331
|
};
|
|
332
|
+
|
|
209
333
|
try {
|
|
210
334
|
if (type === 'START') {
|
|
211
|
-
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
212
335
|
const config: P2PConfig = {
|
|
213
336
|
...rawConfig,
|
|
214
337
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
215
338
|
} as P2PConfig;
|
|
216
339
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
const
|
|
340
|
+
workerConfig = config;
|
|
341
|
+
workerTxPool = new InMemoryTxPool();
|
|
342
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
343
|
+
const epochCache = createMockEpochCache();
|
|
344
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
221
345
|
const l2BlockSource = new MockL2BlockSource();
|
|
222
346
|
|
|
223
347
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
224
|
-
|
|
225
|
-
|
|
348
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
349
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
350
|
+
workerTxPool.setLogger(workerLogger);
|
|
226
351
|
const telemetry = getTelemetryClient();
|
|
227
352
|
|
|
228
353
|
const deps = {
|
|
229
|
-
txPool,
|
|
230
|
-
attestationPool,
|
|
354
|
+
txPool: workerTxPool,
|
|
355
|
+
attestationPool: workerAttestationPool,
|
|
231
356
|
store: kvStore,
|
|
232
|
-
logger,
|
|
357
|
+
logger: workerLogger,
|
|
233
358
|
};
|
|
234
359
|
|
|
235
360
|
const client = await createP2PClient(
|
|
236
361
|
P2PClientType.Full,
|
|
237
362
|
config as P2PConfig & DataStoreConfig,
|
|
238
363
|
l2BlockSource,
|
|
239
|
-
proofVerifier,
|
|
364
|
+
proofVerifier as ClientProtocolCircuitVerifier,
|
|
240
365
|
worldState,
|
|
241
366
|
epochCache,
|
|
242
367
|
'test-p2p-bench-worker',
|
|
243
368
|
undefined,
|
|
244
|
-
telemetry,
|
|
369
|
+
telemetry as TelemetryClient,
|
|
245
370
|
deps,
|
|
246
371
|
);
|
|
247
372
|
|
|
248
|
-
// Create test service with validation disabled
|
|
249
|
-
// Note: Parameter order must match LibP2PService constructor
|
|
250
373
|
const testService = new TestLibP2PService(
|
|
251
374
|
P2PClientType.Full,
|
|
252
375
|
config,
|
|
@@ -259,41 +382,113 @@ process.on('message', async msg => {
|
|
|
259
382
|
epochCache,
|
|
260
383
|
proofVerifier,
|
|
261
384
|
worldState,
|
|
262
|
-
telemetry,
|
|
263
|
-
|
|
264
|
-
true,
|
|
385
|
+
telemetry as TelemetryClient,
|
|
386
|
+
workerLogger,
|
|
387
|
+
true,
|
|
265
388
|
);
|
|
266
389
|
|
|
267
|
-
// Replace the existing p2pService with our test version
|
|
268
390
|
(client as any).p2pService = testService;
|
|
269
391
|
|
|
270
392
|
await client.start();
|
|
271
|
-
// Wait until the client is ready
|
|
272
393
|
for (let i = 0; i < 100; i++) {
|
|
273
394
|
const isReady = client.isReady();
|
|
274
|
-
|
|
395
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
275
396
|
if (isReady) {
|
|
276
397
|
break;
|
|
277
398
|
}
|
|
278
399
|
await sleep(1000);
|
|
279
400
|
}
|
|
280
401
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
process.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
402
|
+
workerClient = client;
|
|
403
|
+
const peerId = (client as any).p2pService.node.peerId.toString();
|
|
404
|
+
process.send!({ type: 'READY', peerId });
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const cmd = msg as any;
|
|
409
|
+
switch (cmd.type) {
|
|
410
|
+
case 'STOP':
|
|
411
|
+
if (workerClient) {
|
|
412
|
+
await workerClient.stop();
|
|
413
|
+
}
|
|
414
|
+
if (kvStore?.close) {
|
|
415
|
+
await kvStore.close();
|
|
416
|
+
}
|
|
417
|
+
process.exit(0);
|
|
418
|
+
break;
|
|
419
|
+
|
|
420
|
+
case 'SEND_TX':
|
|
421
|
+
if (workerClient) {
|
|
422
|
+
await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
423
|
+
process.send!({ type: 'TX_SENT' });
|
|
424
|
+
}
|
|
425
|
+
break;
|
|
426
|
+
|
|
427
|
+
case 'BENCH_REQRESP': {
|
|
428
|
+
const benchCmd = cmd as BenchReqRespCommand;
|
|
429
|
+
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
430
|
+
process.send!({
|
|
431
|
+
type: 'BENCH_RESULT',
|
|
432
|
+
durationMs: 0,
|
|
433
|
+
fetchedCount: 0,
|
|
434
|
+
success: false,
|
|
435
|
+
error: 'Worker not initialized',
|
|
436
|
+
} as BenchResultMessage);
|
|
437
|
+
break;
|
|
293
438
|
}
|
|
294
|
-
});
|
|
295
439
|
|
|
296
|
-
|
|
440
|
+
// Reset state before each benchmark run to avoid cross-run contamination
|
|
441
|
+
workerTxPool.resetState();
|
|
442
|
+
workerAttestationPool.resetState();
|
|
443
|
+
|
|
444
|
+
installUnlimitedRateLimits(workerClient);
|
|
445
|
+
|
|
446
|
+
const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
|
|
447
|
+
const txHashes = allTxs.map(tx => tx.getTxHash());
|
|
448
|
+
const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
|
|
449
|
+
|
|
450
|
+
await workerAttestationPool.addBlockProposal(blockProposal);
|
|
451
|
+
workerLogger.debug(
|
|
452
|
+
`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`,
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
if (benchCmd.isAggregator) {
|
|
456
|
+
workerTxPool.clearTxs();
|
|
457
|
+
|
|
458
|
+
workerLogger.info(
|
|
459
|
+
`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
|
|
460
|
+
);
|
|
461
|
+
|
|
462
|
+
const result = await runAggregatorBenchmark(
|
|
463
|
+
workerClient,
|
|
464
|
+
blockProposal,
|
|
465
|
+
benchCmd.collectorType,
|
|
466
|
+
benchCmd.timeoutMs,
|
|
467
|
+
benchCmd.pinnedPeerId,
|
|
468
|
+
benchCmd.pinnedPeerIndex,
|
|
469
|
+
workerLogger,
|
|
470
|
+
benchCmd.peerCount,
|
|
471
|
+
);
|
|
472
|
+
|
|
473
|
+
process.send!(result);
|
|
474
|
+
} else {
|
|
475
|
+
const myTxs = filterTxsByDistribution(
|
|
476
|
+
allTxs,
|
|
477
|
+
benchCmd.peerIndex,
|
|
478
|
+
benchCmd.peerCount,
|
|
479
|
+
benchCmd.distribution,
|
|
480
|
+
benchCmd.pinnedPeerIndex,
|
|
481
|
+
);
|
|
482
|
+
workerTxPool.setTxs(myTxs);
|
|
483
|
+
|
|
484
|
+
workerLogger.info(
|
|
485
|
+
`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`,
|
|
486
|
+
);
|
|
487
|
+
|
|
488
|
+
process.send!({ type: 'BENCH_READY' } as BenchReadyMessage);
|
|
489
|
+
}
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
297
492
|
}
|
|
298
493
|
} catch (err: any) {
|
|
299
494
|
process.send!({ type: 'ERROR', error: err.message });
|