@aztec/p2p 0.0.1-commit.e6bd8901 → 0.0.1-commit.ee80a48
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/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
- 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/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 +3 -1
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/size_validator.js +4 -1
- 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/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 +9 -3
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +37 -28
- 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 +3 -1
- package/dest/services/reqresp/interface.d.ts.map +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 -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/tx_collection.d.ts +4 -4
- 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_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 -131
- 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 +9 -2
- 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/msg_validators/attestation_validator/fisherman_attestation_validator.ts +8 -2
- package/src/msg_validators/proposal_validator/proposal_validator.ts +5 -5
- 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/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 +6 -2
- 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/libp2p/instrumentation.ts +15 -2
- package/src/services/libp2p/libp2p_service.ts +60 -46
- 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 +3 -0
- 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/tx_collection.ts +4 -4
- 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 -122
- package/src/testbench/worker_client_manager.ts +304 -47
|
@@ -1,115 +1,33 @@
|
|
|
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
|
*/ import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
6
|
-
import {
|
|
6
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
7
7
|
import { SecretValue } from '@aztec/foundation/config';
|
|
8
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
9
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
10
|
import { createLogger } from '@aztec/foundation/log';
|
|
9
11
|
import { sleep } from '@aztec/foundation/sleep';
|
|
12
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
10
13
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
14
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
15
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
11
16
|
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
12
|
-
import {
|
|
17
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
18
|
+
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
|
|
19
|
+
import { Tx } from '@aztec/stdlib/tx';
|
|
13
20
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
14
21
|
import { TopicValidatorResult } from '@libp2p/interface';
|
|
15
|
-
import
|
|
22
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
16
23
|
import { createP2PClient } from '../index.js';
|
|
17
24
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
25
|
+
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
26
|
+
import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../services/tx_collection/proposal_tx_collector.js';
|
|
18
27
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const pool = {
|
|
23
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
24
|
-
addTxs: ()=>Promise.resolve(1),
|
|
25
|
-
getTxByHash: ()=>Promise.resolve(undefined),
|
|
26
|
-
getArchivedTxByHash: ()=>Promise.resolve(undefined),
|
|
27
|
-
markAsMined: ()=>Promise.resolve(),
|
|
28
|
-
markMinedAsPending: ()=>Promise.resolve(),
|
|
29
|
-
deleteTxs: ()=>Promise.resolve(),
|
|
30
|
-
getAllTxs: ()=>Promise.resolve([]),
|
|
31
|
-
getAllTxHashes: ()=>Promise.resolve([]),
|
|
32
|
-
getPendingTxHashes: ()=>Promise.resolve([]),
|
|
33
|
-
getPendingTxCount: ()=>Promise.resolve(0),
|
|
34
|
-
getMinedTxHashes: ()=>Promise.resolve([]),
|
|
35
|
-
getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
|
|
36
|
-
getTxsByHash: ()=>Promise.resolve([]),
|
|
37
|
-
hasTxs: ()=>Promise.resolve([]),
|
|
38
|
-
hasTx: ()=>Promise.resolve(false),
|
|
39
|
-
updateConfig: ()=>{},
|
|
40
|
-
markTxsAsNonEvictable: ()=>Promise.resolve(),
|
|
41
|
-
clearNonEvictableTxs: ()=>Promise.resolve(),
|
|
42
|
-
cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
|
|
43
|
-
};
|
|
44
|
-
return Object.assign(new EventEmitter(), pool);
|
|
45
|
-
}
|
|
46
|
-
function mockAttestationPool() {
|
|
47
|
-
return {
|
|
48
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
49
|
-
addBlockProposal: ()=>Promise.resolve(),
|
|
50
|
-
getBlockProposal: ()=>Promise.resolve(undefined),
|
|
51
|
-
hasBlockProposal: ()=>Promise.resolve(false),
|
|
52
|
-
canAddProposal: ()=>Promise.resolve(true),
|
|
53
|
-
// Checkpoint attestation methods
|
|
54
|
-
addCheckpointProposal: ()=>Promise.resolve(),
|
|
55
|
-
getCheckpointProposal: ()=>Promise.resolve(undefined),
|
|
56
|
-
hasCheckpointProposal: ()=>Promise.resolve(false),
|
|
57
|
-
addCheckpointAttestations: ()=>Promise.resolve(),
|
|
58
|
-
getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
|
|
59
|
-
getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
|
|
60
|
-
deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
|
|
61
|
-
hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
|
|
62
|
-
hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
|
|
63
|
-
canAddCheckpointProposal: ()=>Promise.resolve(true),
|
|
64
|
-
canAddCheckpointAttestation: ()=>Promise.resolve(true),
|
|
65
|
-
hasCheckpointAttestation: ()=>Promise.resolve(false)
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function mockEpochCache() {
|
|
69
|
-
return {
|
|
70
|
-
getCommittee: ()=>Promise.resolve({
|
|
71
|
-
committee: [],
|
|
72
|
-
seed: 1n,
|
|
73
|
-
epoch: EpochNumber.ZERO,
|
|
74
|
-
isEscapeHatchOpen: false
|
|
75
|
-
}),
|
|
76
|
-
getProposerIndexEncoding: ()=>'0x',
|
|
77
|
-
getEpochAndSlotNow: ()=>({
|
|
78
|
-
epoch: EpochNumber.ZERO,
|
|
79
|
-
slot: SlotNumber.ZERO,
|
|
80
|
-
ts: 0n,
|
|
81
|
-
nowMs: 0n
|
|
82
|
-
}),
|
|
83
|
-
computeProposerIndex: ()=>0n,
|
|
84
|
-
getCurrentAndNextSlot: ()=>({
|
|
85
|
-
currentSlot: SlotNumber.ZERO,
|
|
86
|
-
nextSlot: SlotNumber.ZERO
|
|
87
|
-
}),
|
|
88
|
-
getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
|
|
89
|
-
getEpochAndSlotInNextL1Slot: ()=>({
|
|
90
|
-
epoch: EpochNumber.ZERO,
|
|
91
|
-
slot: SlotNumber.ZERO,
|
|
92
|
-
ts: 0n,
|
|
93
|
-
now: 0n
|
|
94
|
-
}),
|
|
95
|
-
isInCommittee: ()=>Promise.resolve(false),
|
|
96
|
-
getRegisteredValidators: ()=>Promise.resolve([]),
|
|
97
|
-
filterInCommittee: ()=>Promise.resolve([])
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
function mockWorldStateSynchronizer() {
|
|
101
|
-
return {
|
|
102
|
-
status: ()=>Promise.resolve({
|
|
103
|
-
syncSummary: {
|
|
104
|
-
latestBlockNumber: 0,
|
|
105
|
-
latestBlockHash: '',
|
|
106
|
-
finalizedBlockNumber: 0,
|
|
107
|
-
treesAreSynched: false,
|
|
108
|
-
oldestHistoricBlockNumber: 0
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
};
|
|
112
|
-
}
|
|
28
|
+
import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/testbench-utils.js';
|
|
29
|
+
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
30
|
+
const txCache = new Map();
|
|
113
31
|
class TestLibP2PService extends LibP2PService {
|
|
114
32
|
disableTxValidation;
|
|
115
33
|
gossipMessageCount = 0;
|
|
@@ -147,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
|
|
|
147
65
|
await super.handleNewGossipMessage(msg, msgId, source);
|
|
148
66
|
}
|
|
149
67
|
}
|
|
68
|
+
async function generateDeterministicTxs(txCount, seed, config) {
|
|
69
|
+
const cached = txCache.get(seed) ?? [];
|
|
70
|
+
if (cached.length >= txCount) {
|
|
71
|
+
return cached.slice(0, txCount);
|
|
72
|
+
}
|
|
73
|
+
const includeByTimestampBase = BigInt(seed);
|
|
74
|
+
for(let i = cached.length; i < txCount; i++){
|
|
75
|
+
const txSeed = seed * 10000 + i;
|
|
76
|
+
const tx = await mockTx(txSeed, {
|
|
77
|
+
chainId: new Fr(config.l1ChainId),
|
|
78
|
+
version: new Fr(config.rollupVersion),
|
|
79
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
80
|
+
protocolContractsHash,
|
|
81
|
+
feePayer: makeAztecAddress(txSeed + 1),
|
|
82
|
+
chonkProof: ChonkProof.empty(),
|
|
83
|
+
numberOfNonRevertiblePublicCallRequests: 0,
|
|
84
|
+
numberOfRevertiblePublicCallRequests: 0,
|
|
85
|
+
numberOfRevertibleNullifiers: 0,
|
|
86
|
+
hasPublicTeardownCallRequest: false,
|
|
87
|
+
publicCalldataSize: 0
|
|
88
|
+
});
|
|
89
|
+
tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
|
|
90
|
+
await tx.recomputeHash();
|
|
91
|
+
cached.push(tx);
|
|
92
|
+
}
|
|
93
|
+
txCache.set(seed, cached);
|
|
94
|
+
return cached.slice(0, txCount);
|
|
95
|
+
}
|
|
96
|
+
async function createBlockProposal(blockNumber, txHashes, seed) {
|
|
97
|
+
const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
|
|
98
|
+
return await makeBlockProposal({
|
|
99
|
+
signer: Secp256k1Signer.random(),
|
|
100
|
+
blockHeader: makeBlockHeader(1, {
|
|
101
|
+
blockNumber: BlockNumber(blockNumber)
|
|
102
|
+
}),
|
|
103
|
+
archiveRoot,
|
|
104
|
+
txHashes
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function installUnlimitedRateLimits(client) {
|
|
108
|
+
const reqResp = client.p2pService.reqresp;
|
|
109
|
+
const rateLimiter = reqResp.rateLimiter;
|
|
110
|
+
rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
|
|
111
|
+
rateLimiter.allow = ()=>RateLimitStatus.Allowed;
|
|
112
|
+
}
|
|
113
|
+
async function runAggregatorBenchmark(client, blockProposal, collectorType, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
|
|
114
|
+
let timer = new Timer();
|
|
115
|
+
try {
|
|
116
|
+
installUnlimitedRateLimits(client);
|
|
117
|
+
const txHashes = blockProposal.txHashes;
|
|
118
|
+
logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
119
|
+
const p2pService = client.p2pService;
|
|
120
|
+
const batchTxRequesterService = p2pService.getBatchTxRequesterService();
|
|
121
|
+
const minPeersRequired = Math.max(1, expectedPeerCount - 1);
|
|
122
|
+
const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
|
|
123
|
+
const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
|
|
124
|
+
let waited = 0;
|
|
125
|
+
while(waited < maxWaitMs){
|
|
126
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
127
|
+
if (connectedPeers.length >= minPeersRequired) {
|
|
128
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
|
|
132
|
+
await sleep(waitInterval);
|
|
133
|
+
waited += waitInterval;
|
|
134
|
+
}
|
|
135
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
136
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
|
|
137
|
+
logger.info(`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes.slice(0, 3).map((h)=>h.toString()).join(', ')}...`);
|
|
138
|
+
let pinnedPeer;
|
|
139
|
+
if (pinnedPeerId) {
|
|
140
|
+
pinnedPeer = peerIdFromString(pinnedPeerId);
|
|
141
|
+
} else if (pinnedPeerIndex !== undefined) {
|
|
142
|
+
if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
|
|
143
|
+
pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const noopTxValidator = {
|
|
147
|
+
validateRequestedTx: (_tx)=>Promise.resolve({
|
|
148
|
+
result: 'valid'
|
|
149
|
+
}),
|
|
150
|
+
validateRequestedTxs: (txs)=>Promise.resolve(txs.map(()=>({
|
|
151
|
+
result: 'valid'
|
|
152
|
+
})))
|
|
153
|
+
};
|
|
154
|
+
timer = new Timer();
|
|
155
|
+
if (collectorType === 'batch-requester') {
|
|
156
|
+
const collector = new BatchTxRequesterCollector(batchTxRequesterService, logger, new DateProvider(), noopTxValidator);
|
|
157
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
158
|
+
const durationMs = timer.ms();
|
|
159
|
+
return {
|
|
160
|
+
type: 'BENCH_RESULT',
|
|
161
|
+
durationMs,
|
|
162
|
+
fetchedCount: fetchedTxs.length,
|
|
163
|
+
success: fetchedTxs.length === txHashes.length
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const collector = new SendBatchRequestCollector(batchTxRequesterService, BENCHMARK_CONSTANTS.FIXED_MAX_PEERS, BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS);
|
|
167
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
168
|
+
const durationMs = timer.ms();
|
|
169
|
+
return {
|
|
170
|
+
type: 'BENCH_RESULT',
|
|
171
|
+
durationMs,
|
|
172
|
+
fetchedCount: fetchedTxs.length,
|
|
173
|
+
success: fetchedTxs.length === txHashes.length
|
|
174
|
+
};
|
|
175
|
+
} catch (err) {
|
|
176
|
+
return {
|
|
177
|
+
type: 'BENCH_RESULT',
|
|
178
|
+
durationMs: timer.ms(),
|
|
179
|
+
fetchedCount: 0,
|
|
180
|
+
success: false,
|
|
181
|
+
error: err?.message ?? String(err)
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
let workerClient = null;
|
|
186
|
+
let workerTxPool = null;
|
|
187
|
+
let workerAttestationPool = null;
|
|
188
|
+
let workerConfig = null;
|
|
189
|
+
let workerLogger = null;
|
|
190
|
+
let kvStore = null;
|
|
150
191
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
151
192
|
process.on('message', async (msg)=>{
|
|
152
|
-
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
153
|
-
// SecretValue's private fields can't be serialized via IPC
|
|
154
193
|
const { type, config: rawConfig, clientIndex } = msg;
|
|
155
194
|
try {
|
|
156
195
|
if (type === 'START') {
|
|
157
|
-
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
158
196
|
const config = {
|
|
159
197
|
...rawConfig,
|
|
160
198
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
|
|
161
199
|
};
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const
|
|
200
|
+
workerConfig = config;
|
|
201
|
+
workerTxPool = new InMemoryTxPool();
|
|
202
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
203
|
+
const epochCache = createMockEpochCache();
|
|
204
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
166
205
|
const l2BlockSource = new MockL2BlockSource();
|
|
167
206
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
168
|
-
|
|
169
|
-
|
|
207
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
208
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
209
|
+
workerTxPool.setLogger(workerLogger);
|
|
170
210
|
const telemetry = getTelemetryClient();
|
|
171
211
|
const deps = {
|
|
172
|
-
txPool,
|
|
173
|
-
attestationPool,
|
|
212
|
+
txPool: workerTxPool,
|
|
213
|
+
attestationPool: workerAttestationPool,
|
|
174
214
|
store: kvStore,
|
|
175
|
-
logger
|
|
215
|
+
logger: workerLogger
|
|
176
216
|
};
|
|
177
217
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
|
|
178
|
-
|
|
179
|
-
// Note: Parameter order must match LibP2PService constructor
|
|
180
|
-
const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, logger, true);
|
|
181
|
-
// Replace the existing p2pService with our test version
|
|
218
|
+
const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
|
|
182
219
|
client.p2pService = testService;
|
|
183
220
|
await client.start();
|
|
184
|
-
// Wait until the client is ready
|
|
185
221
|
for(let i = 0; i < 100; i++){
|
|
186
222
|
const isReady = client.isReady();
|
|
187
|
-
|
|
223
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
188
224
|
if (isReady) {
|
|
189
225
|
break;
|
|
190
226
|
}
|
|
191
227
|
await sleep(1000);
|
|
192
228
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
process.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
229
|
+
workerClient = client;
|
|
230
|
+
const peerId = client.p2pService.node.peerId.toString();
|
|
231
|
+
process.send({
|
|
232
|
+
type: 'READY',
|
|
233
|
+
peerId
|
|
234
|
+
});
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const cmd = msg;
|
|
238
|
+
switch(cmd.type){
|
|
239
|
+
case 'STOP':
|
|
240
|
+
if (workerClient) {
|
|
241
|
+
await workerClient.stop();
|
|
242
|
+
}
|
|
243
|
+
if (kvStore?.close) {
|
|
244
|
+
await kvStore.close();
|
|
245
|
+
}
|
|
246
|
+
process.exit(0);
|
|
247
|
+
break;
|
|
248
|
+
case 'SEND_TX':
|
|
249
|
+
if (workerClient) {
|
|
250
|
+
await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
251
|
+
process.send({
|
|
252
|
+
type: 'TX_SENT'
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
break;
|
|
256
|
+
case 'BENCH_REQRESP':
|
|
257
|
+
{
|
|
258
|
+
const benchCmd = cmd;
|
|
259
|
+
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
203
260
|
process.send({
|
|
204
|
-
type: '
|
|
261
|
+
type: 'BENCH_RESULT',
|
|
262
|
+
durationMs: 0,
|
|
263
|
+
fetchedCount: 0,
|
|
264
|
+
success: false,
|
|
265
|
+
error: 'Worker not initialized'
|
|
205
266
|
});
|
|
206
267
|
break;
|
|
268
|
+
}
|
|
269
|
+
// Reset state before each benchmark run to avoid cross-run contamination
|
|
270
|
+
workerTxPool.resetState();
|
|
271
|
+
workerAttestationPool.resetState();
|
|
272
|
+
installUnlimitedRateLimits(workerClient);
|
|
273
|
+
const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
|
|
274
|
+
const txHashes = allTxs.map((tx)=>tx.getTxHash());
|
|
275
|
+
const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
|
|
276
|
+
await workerAttestationPool.addBlockProposal(blockProposal);
|
|
277
|
+
workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
278
|
+
if (benchCmd.isAggregator) {
|
|
279
|
+
workerTxPool.clearTxs();
|
|
280
|
+
workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`);
|
|
281
|
+
const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.collectorType, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
|
|
282
|
+
process.send(result);
|
|
283
|
+
} else {
|
|
284
|
+
const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
|
|
285
|
+
workerTxPool.setTxs(myTxs);
|
|
286
|
+
workerLogger.info(`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`);
|
|
287
|
+
process.send({
|
|
288
|
+
type: 'BENCH_READY'
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
break;
|
|
207
292
|
}
|
|
208
|
-
});
|
|
209
|
-
process.send({
|
|
210
|
-
type: 'READY'
|
|
211
|
-
});
|
|
212
293
|
}
|
|
213
294
|
} catch (err) {
|
|
214
295
|
process.send({
|
|
@@ -2,33 +2,63 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
2
2
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
3
3
|
import { type ChildProcess } from 'child_process';
|
|
4
4
|
import { type P2PConfig } from '../config.js';
|
|
5
|
+
import type { CollectorType, DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
5
6
|
declare const testChainConfig: ChainConfig;
|
|
7
|
+
export interface ReqRespBenchmarkConfig {
|
|
8
|
+
txCount: number;
|
|
9
|
+
distribution: DistributionPattern;
|
|
10
|
+
collectorType: CollectorType;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
pinnedPeerIndex?: number;
|
|
13
|
+
blockNumber?: number;
|
|
14
|
+
seed?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ReqRespBenchmarkResult {
|
|
17
|
+
txCount: number;
|
|
18
|
+
distribution: DistributionPattern;
|
|
19
|
+
collector: CollectorType;
|
|
20
|
+
durationMs: number;
|
|
21
|
+
fetchedCount: number;
|
|
22
|
+
success: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
6
25
|
declare class WorkerClientManager {
|
|
7
26
|
processes: ChildProcess[];
|
|
8
27
|
peerIdPrivateKeys: string[];
|
|
9
28
|
peerEnrs: string[];
|
|
10
29
|
ports: number[];
|
|
30
|
+
peerIds: string[];
|
|
11
31
|
private p2pConfig;
|
|
12
32
|
private logger;
|
|
13
33
|
private messageReceivedByClient;
|
|
14
34
|
constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
|
|
15
35
|
destroy(): void;
|
|
16
36
|
/**
|
|
17
|
-
* Creates a client configuration object
|
|
37
|
+
* Creates a client configuration object for IPC.
|
|
38
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
39
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
40
|
+
* The worker must re-wrap it in SecretValue.
|
|
18
41
|
*/
|
|
19
42
|
private createClientConfig;
|
|
20
43
|
/**
|
|
21
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
44
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
45
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
22
46
|
*/
|
|
23
47
|
private spawnWorkerProcess;
|
|
24
48
|
/**
|
|
25
|
-
* Creates a number of worker clients in separate processes
|
|
26
|
-
* All are configured to connect to each other and
|
|
49
|
+
* Creates a number of worker clients in separate processes.
|
|
50
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
27
51
|
*
|
|
28
52
|
* @param numberOfClients - The number of clients to create
|
|
53
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
29
54
|
* @returns The ENRs of the created clients
|
|
30
55
|
*/
|
|
31
|
-
makeWorkerClients(numberOfClients: number
|
|
56
|
+
makeWorkerClients(numberOfClients: number, options?: {
|
|
57
|
+
bootstrapMode?: 'subset' | 'all';
|
|
58
|
+
seedPeerLimit?: number;
|
|
59
|
+
batchSize?: number;
|
|
60
|
+
batchDelayMs?: number;
|
|
61
|
+
}): Promise<string[]>;
|
|
32
62
|
purgeMessageReceivedByClient(): void;
|
|
33
63
|
numberOfClientsThatReceivedMessage(): number;
|
|
34
64
|
/**
|
|
@@ -46,6 +76,21 @@ declare class WorkerClientManager {
|
|
|
46
76
|
* Cleans up all worker processes with timeout and force kill if needed
|
|
47
77
|
*/
|
|
48
78
|
cleanup(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Run a req/resp benchmark across all worker clients.
|
|
81
|
+
*
|
|
82
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
83
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
84
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
85
|
+
*
|
|
86
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
87
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
88
|
+
*/
|
|
89
|
+
runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult>;
|
|
90
|
+
private waitForBenchReady;
|
|
91
|
+
private waitForBenchResult;
|
|
49
92
|
}
|
|
50
93
|
export { WorkerClientManager, testChainConfig };
|
|
51
|
-
|
|
94
|
+
export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
|
|
95
|
+
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUtuRSxPQUFPLEtBQUssRUFHVixhQUFhLEVBQ2IsbUJBQW1CLEVBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsUUFBQSxNQUFNLGVBQWUsRUFBRSxXQU10QixDQUFDO0FBRUYsTUFBTSxXQUFXLHNCQUFzQjtJQUNyQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztJQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDZjtBQUVELE1BQU0sV0FBVyxzQkFBc0I7SUFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLGFBQWEsQ0FBQztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxjQUFNLG1CQUFtQjtJQUNoQixTQUFTLEVBQUUsWUFBWSxFQUFFLENBQU07SUFDL0IsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDakMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUNyQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsdUJBQXVCLENBQWdCO0lBRS9DLFlBQVksTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUd4RDtJQUVELE9BQU8sU0FLTjtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWlCMUI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWdHMUI7Ozs7Ozs7T0FPRztJQUNHLGlCQUFpQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixPQUFPLEdBQUU7UUFDUCxhQUFhLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixTQUFTLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDbkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2xCLHFCQStEUDtJQUVELDRCQUE0QixTQUUzQjtJQUVELGtDQUFrQyxXQUVqQztJQUVEOzs7OztPQUtHO0lBQ0csVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBOENwRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLGdCQUFnQjtJQXFDeEI7O09BRUc7SUFDRyxPQUFPLGtCQWdDWjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FzRXpGO0lBRUQsT0FBTyxDQUFDLGlCQUFpQjtJQWtDekIsT0FBTyxDQUFDLGtCQUFrQjtDQWlDM0I7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAKnE,OAAO,KAAK,EAGV,aAAa,EACb,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAQ1C,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,EAAE,MAAM,EAAE,CAAM;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAKN;IAED;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgG1B;;;;;;;OAOG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,qBA+DP;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA8CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;OAEG;IACG,OAAO,kBAgCZ;IAED;;;;;;;;;OASG;IACG,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsEzF;IAED,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,kBAAkB;CAiC3B;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}
|