@aztec/p2p 0.0.1-commit.e6bd8901 → 0.0.1-commit.f146247c

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.
Files changed (217) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +1 -1
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +6 -5
  7. package/dest/client/p2p_client.d.ts +1 -1
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +9 -2
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  11. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  16. package/dest/config.d.ts +8 -2
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +2 -0
  19. package/dest/mem_pools/instrumentation.d.ts +1 -1
  20. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  21. package/dest/mem_pools/instrumentation.js +2 -2
  22. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +1 -1
  23. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  24. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
  25. package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
  26. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  27. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  28. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  29. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  30. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  31. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  32. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  33. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  34. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  35. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  36. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  37. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  38. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  39. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  40. package/dest/msg_validators/tx_validator/factory.js +21 -11
  41. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  42. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  43. package/dest/msg_validators/tx_validator/gas_validator.js +3 -2
  44. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  45. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  46. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  47. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  48. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  49. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  50. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  51. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  52. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  53. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  54. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  55. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  56. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  57. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  58. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  59. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  60. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  61. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  62. package/dest/services/data_store.d.ts +1 -1
  63. package/dest/services/data_store.d.ts.map +1 -1
  64. package/dest/services/data_store.js +10 -6
  65. package/dest/services/discv5/discV5_service.js +1 -1
  66. package/dest/services/dummy_service.d.ts +13 -1
  67. package/dest/services/dummy_service.d.ts.map +1 -1
  68. package/dest/services/dummy_service.js +39 -0
  69. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  70. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  71. package/dest/services/libp2p/instrumentation.js +14 -3
  72. package/dest/services/libp2p/libp2p_service.d.ts +9 -3
  73. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  74. package/dest/services/libp2p/libp2p_service.js +37 -28
  75. package/dest/services/peer-manager/metrics.d.ts +2 -2
  76. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  77. package/dest/services/peer-manager/metrics.js +20 -5
  78. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  79. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  80. package/dest/services/peer-manager/peer_scoring.js +8 -2
  81. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  82. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  83. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  84. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  85. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  86. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  87. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  88. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  89. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  90. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  91. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  92. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  93. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  94. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  95. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  96. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  97. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  98. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  99. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  100. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  101. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  102. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  103. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  104. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  105. package/dest/services/reqresp/interface.d.ts +3 -1
  106. package/dest/services/reqresp/interface.d.ts.map +1 -1
  107. package/dest/services/reqresp/metrics.d.ts +6 -5
  108. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  109. package/dest/services/reqresp/metrics.js +17 -5
  110. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  111. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  112. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  113. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  114. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  115. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  116. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -6
  117. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  118. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +43 -13
  119. package/dest/services/reqresp/reqresp.d.ts +6 -1
  120. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  121. package/dest/services/reqresp/reqresp.js +58 -22
  122. package/dest/services/service.d.ts +4 -1
  123. package/dest/services/service.d.ts.map +1 -1
  124. package/dest/services/tx_collection/config.d.ts +4 -1
  125. package/dest/services/tx_collection/config.d.ts.map +1 -1
  126. package/dest/services/tx_collection/config.js +9 -1
  127. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
  128. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  129. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  130. package/dest/services/tx_collection/index.d.ts +2 -1
  131. package/dest/services/tx_collection/index.d.ts.map +1 -1
  132. package/dest/services/tx_collection/index.js +1 -0
  133. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  134. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  135. package/dest/services/tx_collection/instrumentation.js +9 -2
  136. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  137. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  138. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  139. package/dest/services/tx_collection/tx_collection.d.ts +4 -4
  140. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  141. package/dest/services/tx_collection/tx_collection.js +5 -5
  142. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  143. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  144. package/dest/services/tx_provider_instrumentation.js +5 -5
  145. package/dest/test-helpers/index.d.ts +3 -1
  146. package/dest/test-helpers/index.d.ts.map +1 -1
  147. package/dest/test-helpers/index.js +2 -0
  148. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  149. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  150. package/dest/test-helpers/test_tx_provider.js +41 -0
  151. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  152. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  153. package/dest/test-helpers/testbench-utils.js +297 -0
  154. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  155. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  156. package/dest/testbench/p2p_client_testbench_worker.js +212 -131
  157. package/dest/testbench/worker_client_manager.d.ts +51 -6
  158. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  159. package/dest/testbench/worker_client_manager.js +226 -44
  160. package/package.json +14 -14
  161. package/src/bootstrap/bootstrap.ts +7 -4
  162. package/src/client/factory.ts +6 -10
  163. package/src/client/p2p_client.ts +9 -2
  164. package/src/client/test/tx_proposal_collector/README.md +227 -0
  165. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  166. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  167. package/src/config.ts +6 -1
  168. package/src/mem_pools/instrumentation.ts +2 -1
  169. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +8 -2
  170. package/src/msg_validators/proposal_validator/proposal_validator.ts +5 -5
  171. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  172. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  173. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  174. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  175. package/src/msg_validators/tx_validator/factory.ts +64 -23
  176. package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
  177. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  178. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  179. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  180. package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
  181. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  182. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  183. package/src/services/data_store.ts +10 -7
  184. package/src/services/discv5/discV5_service.ts +1 -1
  185. package/src/services/dummy_service.ts +45 -0
  186. package/src/services/libp2p/instrumentation.ts +15 -2
  187. package/src/services/libp2p/libp2p_service.ts +60 -46
  188. package/src/services/peer-manager/metrics.ts +21 -4
  189. package/src/services/peer-manager/peer_scoring.ts +4 -1
  190. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  191. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  192. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  193. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  194. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  195. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  196. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  197. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  198. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  199. package/src/services/reqresp/interface.ts +3 -0
  200. package/src/services/reqresp/metrics.ts +34 -9
  201. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  202. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  203. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +51 -9
  204. package/src/services/reqresp/reqresp.ts +66 -19
  205. package/src/services/service.ts +4 -0
  206. package/src/services/tx_collection/config.ts +15 -1
  207. package/src/services/tx_collection/fast_tx_collection.ts +36 -13
  208. package/src/services/tx_collection/index.ts +5 -0
  209. package/src/services/tx_collection/instrumentation.ts +11 -2
  210. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  211. package/src/services/tx_collection/tx_collection.ts +4 -4
  212. package/src/services/tx_provider_instrumentation.ts +11 -5
  213. package/src/test-helpers/index.ts +2 -0
  214. package/src/test-helpers/test_tx_provider.ts +64 -0
  215. package/src/test-helpers/testbench-utils.ts +374 -0
  216. package/src/testbench/p2p_client_testbench_worker.ts +321 -122
  217. package/src/testbench/worker_client_manager.ts +304 -47
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Test transaction provider that can be seeded with transactions.
3
+ * Returns seeded txs when requested by hash, useful for testing block
4
+ * proposal handling without requiring a full P2P network.
5
+ */ export class TestTxProvider {
6
+ txs = new Map();
7
+ /** Seed transactions that will be returned when requested. */ seed(txs) {
8
+ for (const tx of txs){
9
+ this.txs.set(tx.getTxHash().toString(), tx);
10
+ }
11
+ }
12
+ /** Clear all seeded transactions. */ clear() {
13
+ this.txs.clear();
14
+ }
15
+ /** Returns txs from the seeded collection given their hashes. */ getAvailableTxs(txHashes) {
16
+ return this.getTxsByHashes(txHashes);
17
+ }
18
+ /** Get txs for a block proposal, returning any seeded txs that match the requested hashes. */ getTxsForBlockProposal(blockProposal, _blockNumber, _opts) {
19
+ return this.getTxsByHashes(blockProposal.txHashes);
20
+ }
21
+ /** Get txs for a block, returning any seeded txs that match the tx effects in the block. */ getTxsForBlock(block, _opts) {
22
+ const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
23
+ return this.getTxsByHashes(txHashes);
24
+ }
25
+ getTxsByHashes(txHashes) {
26
+ const txs = [];
27
+ const missingTxs = [];
28
+ for (const txHash of txHashes){
29
+ const tx = this.txs.get(txHash.toString());
30
+ if (tx) {
31
+ txs.push(tx);
32
+ } else {
33
+ missingTxs.push(txHash);
34
+ }
35
+ }
36
+ return Promise.resolve({
37
+ txs,
38
+ missingTxs
39
+ });
40
+ }
41
+ }
@@ -0,0 +1,158 @@
1
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import { type BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
+ import type { Logger } from '@aztec/foundation/log';
4
+ import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
5
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposal, CheckpointProposalCore } from '@aztec/stdlib/p2p';
6
+ import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
7
+ import EventEmitter from 'events';
8
+ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
9
+ import type { TxPool } from '../mem_pools/tx_pool/index.js';
10
+ /**
11
+ * In-memory TxPool implementation for testing.
12
+ * Provides basic tx storage without persistence.
13
+ */
14
+ export declare class InMemoryTxPool extends EventEmitter implements TxPool {
15
+ private txsByHash;
16
+ private logger;
17
+ setLogger(logger: Logger): void;
18
+ setTxs(txs: Tx[]): number;
19
+ appendTxs(txs: Tx[]): number;
20
+ clearTxs(): void;
21
+ resetState(): void;
22
+ addTxs(txs: Tx[], opts?: {
23
+ source?: string;
24
+ }): Promise<number>;
25
+ getTxByHash(hash: TxHash): Promise<Tx | undefined>;
26
+ getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]>;
27
+ hasTxs(hashes: TxHash[]): Promise<boolean[]>;
28
+ hasTx(hash: TxHash): Promise<boolean>;
29
+ getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined>;
30
+ markAsMined(_txHashes: TxHash[], _blockHeader: BlockHeader): Promise<void>;
31
+ markMinedAsPending(_txHashes: TxHash[], _latestBlock: BlockNumber): Promise<void>;
32
+ deleteTxs(txHashes: TxHash[], _opts?: {
33
+ permanently?: boolean;
34
+ }): Promise<void>;
35
+ getAllTxs(): Promise<Tx[]>;
36
+ getAllTxHashes(): Promise<TxHash[]>;
37
+ getPendingTxHashes(): Promise<TxHash[]>;
38
+ getPendingTxCount(): Promise<number>;
39
+ getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: BlockNumber][]>;
40
+ getTxStatus(hash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
41
+ updateConfig(_config: {
42
+ maxPendingTxCount?: number;
43
+ archivedTxLimit?: number;
44
+ }): void;
45
+ isEmpty(): Promise<boolean>;
46
+ markTxsAsNonEvictable(_txHashes: TxHash[]): Promise<void>;
47
+ clearNonEvictableTxs(): Promise<void>;
48
+ cleanupDeletedMinedTxs(_blockNumber: BlockNumber): Promise<number>;
49
+ }
50
+ /**
51
+ * In-memory AttestationPool implementation for testing.
52
+ */
53
+ export declare class InMemoryAttestationPool implements AttestationPool {
54
+ private proposals;
55
+ addBlockProposal(blockProposal: BlockProposal): Promise<void>;
56
+ getBlockProposal(id: string): Promise<BlockProposal | undefined>;
57
+ hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
58
+ canAddProposal(_block: BlockProposal): Promise<boolean>;
59
+ addCheckpointProposal(_proposal: CheckpointProposal): Promise<void>;
60
+ getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined>;
61
+ hasCheckpointProposal(_idOrProposal: string | CheckpointProposal): Promise<boolean>;
62
+ addCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
63
+ deleteCheckpointAttestationsOlderThan(_slot: SlotNumber): Promise<void>;
64
+ getCheckpointAttestationsForSlot(_slot: SlotNumber): Promise<CheckpointAttestation[]>;
65
+ getCheckpointAttestationsForSlotAndProposal(_slot: SlotNumber, _proposalId: string): Promise<CheckpointAttestation[]>;
66
+ hasCheckpointAttestation(_attestation: CheckpointAttestation): Promise<boolean>;
67
+ canAddCheckpointProposal(_proposal: CheckpointProposal): Promise<boolean>;
68
+ canAddCheckpointAttestation(_attestation: CheckpointAttestation, _committeeSize: number): Promise<boolean>;
69
+ hasReachedCheckpointProposalCap(_slot: SlotNumber): Promise<boolean>;
70
+ hasReachedCheckpointAttestationCap(_slot: SlotNumber, _proposalId: string, _committeeSize: number): Promise<boolean>;
71
+ isEmpty(): Promise<boolean>;
72
+ resetState(): void;
73
+ }
74
+ /**
75
+ * Creates a mock EpochCache for testing.
76
+ */
77
+ export declare function createMockEpochCache(): EpochCacheInterface;
78
+ /**
79
+ * Creates a mock WorldStateSynchronizer for testing.
80
+ */
81
+ export declare function createMockWorldStateSynchronizer(): WorldStateSynchronizer;
82
+ /**
83
+ * Unlimited rate limit configuration for benchmarks.
84
+ */
85
+ export declare const UNLIMITED_RATE_LIMIT_QUOTA: {
86
+ peerLimit: {
87
+ quotaTimeMs: number;
88
+ quotaCount: number;
89
+ };
90
+ globalLimit: {
91
+ quotaTimeMs: number;
92
+ quotaCount: number;
93
+ };
94
+ };
95
+ /**
96
+ * Installs unlimited rate limits on a ReqResp instance.
97
+ * Used in benchmarks to avoid rate limiting affecting results.
98
+ *
99
+ * Note: Uses `as any` because rateLimiter is private. This is acceptable
100
+ * in test code where we need to override internal behavior.
101
+ */
102
+ export declare function installUnlimitedRateLimitsOnReqResp(reqResp: any): void;
103
+ /**
104
+ * Distribution patterns for benchmark transaction distribution.
105
+ */
106
+ export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
107
+ /**
108
+ * Collector implementation types for benchmarking.
109
+ */
110
+ export type CollectorType = 'batch-requester' | 'send-batch-request';
111
+ /**
112
+ * Display names for collector types (for output/logging only).
113
+ */
114
+ export declare const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string>;
115
+ /**
116
+ * Benchmark timing constants.
117
+ */
118
+ export declare const BENCHMARK_CONSTANTS: {
119
+ /** Time to wait for peers to connect before starting benchmark */
120
+ readonly PEER_DISCOVERY_WAIT_MS: 10000;
121
+ /** Maximum time to wait for peer connections */
122
+ readonly MAX_PEER_WAIT_MS: 60000;
123
+ /** Interval between peer connection checks */
124
+ readonly PEER_CHECK_INTERVAL_MS: 500;
125
+ /** Default worker ready timeout */
126
+ readonly WORKER_READY_TIMEOUT_MS: 30000;
127
+ /** Graceful shutdown timeout before force kill */
128
+ readonly GRACEFUL_SHUTDOWN_TIMEOUT_MS: 5000;
129
+ /** Overall cleanup timeout */
130
+ readonly CLEANUP_TIMEOUT_MS: 10000;
131
+ /** Buffer time for internal timeout to ensure we return before outer timeout */
132
+ readonly TIMEOUT_BUFFER_MS: 5000;
133
+ /** Minimum internal timeout regardless of buffer */
134
+ readonly MIN_INTERNAL_TIMEOUT_MS: 1000;
135
+ /** Fixed max peers for fair benchmarking */
136
+ readonly FIXED_MAX_PEERS: 10;
137
+ /** Fixed max retry attempts for fair benchmarking */
138
+ readonly FIXED_MAX_RETRY_ATTEMPTS: 3;
139
+ /** LMDB map size for temp stores used in benchmarks (in KB). */
140
+ readonly KV_STORE_MAP_SIZE_KB: number;
141
+ };
142
+ /**
143
+ * Filters transactions based on distribution pattern for benchmark responders.
144
+ *
145
+ * @param allTxs - All transactions to filter
146
+ * @param peerIndex - Index of the current peer (0 = aggregator)
147
+ * @param peerCount - Total number of peers
148
+ * @param distribution - Distribution pattern to apply
149
+ * @param pinnedPeerIndex - Index of the pinned peer (for pinned-only distribution)
150
+ * @returns Filtered transactions for this peer
151
+ */
152
+ export declare function filterTxsByDistribution(allTxs: Tx[], peerIndex: number, peerCount: number, distribution: DistributionPattern, pinnedPeerIndex?: number): Tx[];
153
+ /**
154
+ * Calculates the internal timeout for collector operations.
155
+ * Ensures we return before the outer timeout while maintaining a minimum.
156
+ */
157
+ export declare function calculateInternalTimeout(timeoutMs: number): number;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGJlbmNoLXV0aWxzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL3Rlc3RiZW5jaC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUNWLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEUsT0FBTyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzVEOzs7R0FHRztBQUNILHFCQUFhLGNBQWUsU0FBUSxZQUFhLFlBQVcsTUFBTTtJQUNoRSxPQUFPLENBQUMsU0FBUyxDQUF5QjtJQUMxQyxPQUFPLENBQUMsTUFBTSxDQUF1QjtJQUVyQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBRTlCO0lBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBR3hCO0lBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBVTNCO0lBRUQsUUFBUSxJQUFJLElBQUksQ0FF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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testbench-utils.d.ts","sourceRoot":"","sources":["../../src/test-helpers/testbench-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { TxHash } from '@aztec/stdlib/tx';
3
+ import EventEmitter from 'events';
4
+ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
5
+ /**
6
+ * In-memory TxPool implementation for testing.
7
+ * Provides basic tx storage without persistence.
8
+ */ export class InMemoryTxPool extends EventEmitter {
9
+ txsByHash = new Map();
10
+ logger = null;
11
+ setLogger(logger) {
12
+ this.logger = logger;
13
+ }
14
+ setTxs(txs) {
15
+ this.txsByHash.clear();
16
+ return this.appendTxs(txs);
17
+ }
18
+ appendTxs(txs) {
19
+ let added = 0;
20
+ for (const tx of txs){
21
+ const key = tx.getTxHash().toString();
22
+ if (!this.txsByHash.has(key)) {
23
+ added += 1;
24
+ }
25
+ this.txsByHash.set(key, tx);
26
+ }
27
+ return added;
28
+ }
29
+ clearTxs() {
30
+ this.txsByHash.clear();
31
+ }
32
+ resetState() {
33
+ this.txsByHash.clear();
34
+ this.removeAllListeners();
35
+ }
36
+ addTxs(txs, opts) {
37
+ const newTxs = [];
38
+ let added = 0;
39
+ for (const tx of txs){
40
+ const key = tx.getTxHash().toString();
41
+ if (!this.txsByHash.has(key)) {
42
+ newTxs.push(tx);
43
+ added += 1;
44
+ }
45
+ this.txsByHash.set(key, tx);
46
+ }
47
+ if (newTxs.length > 0) {
48
+ this.emit('txs-added', {
49
+ txs: newTxs,
50
+ source: opts?.source
51
+ });
52
+ }
53
+ return Promise.resolve(added);
54
+ }
55
+ getTxByHash(hash) {
56
+ return Promise.resolve(this.txsByHash.get(hash.toString()));
57
+ }
58
+ getTxsByHash(hashes) {
59
+ const result = hashes.map((h)=>this.txsByHash.get(h.toString()));
60
+ const found = result.filter((tx)=>tx !== undefined).length;
61
+ this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
62
+ return Promise.resolve(result);
63
+ }
64
+ hasTxs(hashes) {
65
+ return Promise.resolve(hashes.map((h)=>this.txsByHash.has(h.toString())));
66
+ }
67
+ hasTx(hash) {
68
+ return Promise.resolve(this.txsByHash.has(hash.toString()));
69
+ }
70
+ getArchivedTxByHash(_hash) {
71
+ return Promise.resolve(undefined);
72
+ }
73
+ async markAsMined(_txHashes, _blockHeader) {}
74
+ async markMinedAsPending(_txHashes, _latestBlock) {}
75
+ deleteTxs(txHashes, _opts) {
76
+ for (const txHash of txHashes){
77
+ this.txsByHash.delete(txHash.toString());
78
+ }
79
+ return Promise.resolve();
80
+ }
81
+ getAllTxs() {
82
+ return Promise.resolve([
83
+ ...this.txsByHash.values()
84
+ ]);
85
+ }
86
+ getAllTxHashes() {
87
+ return Promise.resolve([
88
+ ...this.txsByHash.keys()
89
+ ].map((key)=>TxHash.fromString(key)));
90
+ }
91
+ getPendingTxHashes() {
92
+ return Promise.resolve([
93
+ ...this.txsByHash.keys()
94
+ ].map((key)=>TxHash.fromString(key)));
95
+ }
96
+ getPendingTxCount() {
97
+ return Promise.resolve(this.txsByHash.size);
98
+ }
99
+ getMinedTxHashes() {
100
+ return Promise.resolve([]);
101
+ }
102
+ getTxStatus(hash) {
103
+ return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
104
+ }
105
+ updateConfig(_config) {}
106
+ isEmpty() {
107
+ return Promise.resolve(this.txsByHash.size === 0);
108
+ }
109
+ async markTxsAsNonEvictable(_txHashes) {}
110
+ async clearNonEvictableTxs() {}
111
+ cleanupDeletedMinedTxs(_blockNumber) {
112
+ return Promise.resolve(0);
113
+ }
114
+ }
115
+ /**
116
+ * In-memory AttestationPool implementation for testing.
117
+ */ export class InMemoryAttestationPool {
118
+ proposals = new Map();
119
+ addBlockProposal(blockProposal) {
120
+ this.proposals.set(blockProposal.archive.toString(), blockProposal);
121
+ return Promise.resolve();
122
+ }
123
+ getBlockProposal(id) {
124
+ return Promise.resolve(this.proposals.get(id));
125
+ }
126
+ hasBlockProposal(idOrProposal) {
127
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
128
+ return Promise.resolve(this.proposals.has(id));
129
+ }
130
+ canAddProposal(_block) {
131
+ return Promise.resolve(true);
132
+ }
133
+ async addCheckpointProposal(_proposal) {}
134
+ getCheckpointProposal(_id) {
135
+ return Promise.resolve(undefined);
136
+ }
137
+ hasCheckpointProposal(_idOrProposal) {
138
+ return Promise.resolve(false);
139
+ }
140
+ async addCheckpointAttestations(_attestations) {}
141
+ async deleteCheckpointAttestationsOlderThan(_slot) {}
142
+ getCheckpointAttestationsForSlot(_slot) {
143
+ return Promise.resolve([]);
144
+ }
145
+ getCheckpointAttestationsForSlotAndProposal(_slot, _proposalId) {
146
+ return Promise.resolve([]);
147
+ }
148
+ hasCheckpointAttestation(_attestation) {
149
+ return Promise.resolve(false);
150
+ }
151
+ canAddCheckpointProposal(_proposal) {
152
+ return Promise.resolve(true);
153
+ }
154
+ canAddCheckpointAttestation(_attestation, _committeeSize) {
155
+ return Promise.resolve(true);
156
+ }
157
+ hasReachedCheckpointProposalCap(_slot) {
158
+ return Promise.resolve(false);
159
+ }
160
+ hasReachedCheckpointAttestationCap(_slot, _proposalId, _committeeSize) {
161
+ return Promise.resolve(false);
162
+ }
163
+ isEmpty() {
164
+ return Promise.resolve(this.proposals.size === 0);
165
+ }
166
+ resetState() {
167
+ this.proposals.clear();
168
+ }
169
+ }
170
+ /**
171
+ * Creates a mock EpochCache for testing.
172
+ */ export function createMockEpochCache() {
173
+ return {
174
+ getCommittee: ()=>Promise.resolve({
175
+ committee: [],
176
+ seed: 1n,
177
+ epoch: EpochNumber.ZERO,
178
+ isEscapeHatchOpen: false
179
+ }),
180
+ getProposerIndexEncoding: ()=>'0x',
181
+ getEpochAndSlotNow: ()=>({
182
+ epoch: EpochNumber.ZERO,
183
+ slot: SlotNumber.ZERO,
184
+ ts: 0n,
185
+ nowMs: 0n
186
+ }),
187
+ computeProposerIndex: ()=>0n,
188
+ getCurrentAndNextSlot: ()=>({
189
+ currentSlot: SlotNumber.ZERO,
190
+ nextSlot: SlotNumber.ZERO
191
+ }),
192
+ getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
193
+ getEpochAndSlotInNextL1Slot: ()=>({
194
+ epoch: EpochNumber.ZERO,
195
+ slot: SlotNumber.ZERO,
196
+ ts: 0n,
197
+ now: 0n
198
+ }),
199
+ isInCommittee: ()=>Promise.resolve(false),
200
+ getRegisteredValidators: ()=>Promise.resolve([]),
201
+ filterInCommittee: ()=>Promise.resolve([])
202
+ };
203
+ }
204
+ /**
205
+ * Creates a mock WorldStateSynchronizer for testing.
206
+ */ export function createMockWorldStateSynchronizer() {
207
+ return {
208
+ status: ()=>Promise.resolve({
209
+ syncSummary: {
210
+ latestBlockNumber: 0,
211
+ latestBlockHash: '',
212
+ finalizedBlockNumber: 0,
213
+ treesAreSynched: false,
214
+ oldestHistoricBlockNumber: 0
215
+ }
216
+ })
217
+ };
218
+ }
219
+ /**
220
+ * Unlimited rate limit configuration for benchmarks.
221
+ */ export const UNLIMITED_RATE_LIMIT_QUOTA = {
222
+ peerLimit: {
223
+ quotaTimeMs: 1000,
224
+ quotaCount: 10_000
225
+ },
226
+ globalLimit: {
227
+ quotaTimeMs: 1000,
228
+ quotaCount: 100_000
229
+ }
230
+ };
231
+ /**
232
+ * Installs unlimited rate limits on a ReqResp instance.
233
+ * Used in benchmarks to avoid rate limiting affecting results.
234
+ *
235
+ * Note: Uses `as any` because rateLimiter is private. This is acceptable
236
+ * in test code where we need to override internal behavior.
237
+ */ export function installUnlimitedRateLimitsOnReqResp(reqResp) {
238
+ const rateLimiter = reqResp.rateLimiter;
239
+ rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
240
+ rateLimiter.allow = ()=>RateLimitStatus.Allowed;
241
+ }
242
+ /**
243
+ * Display names for collector types (for output/logging only).
244
+ */ export const COLLECTOR_DISPLAY_NAMES = {
245
+ 'batch-requester': 'batch-requester (new)',
246
+ 'send-batch-request': 'send-batch-request (old)'
247
+ };
248
+ /**
249
+ * Benchmark timing constants.
250
+ */ export const BENCHMARK_CONSTANTS = {
251
+ /** Time to wait for peers to connect before starting benchmark */ PEER_DISCOVERY_WAIT_MS: 10_000,
252
+ /** Maximum time to wait for peer connections */ MAX_PEER_WAIT_MS: 60_000,
253
+ /** Interval between peer connection checks */ PEER_CHECK_INTERVAL_MS: 500,
254
+ /** Default worker ready timeout */ WORKER_READY_TIMEOUT_MS: 30_000,
255
+ /** Graceful shutdown timeout before force kill */ GRACEFUL_SHUTDOWN_TIMEOUT_MS: 5_000,
256
+ /** Overall cleanup timeout */ CLEANUP_TIMEOUT_MS: 10_000,
257
+ /** Buffer time for internal timeout to ensure we return before outer timeout */ TIMEOUT_BUFFER_MS: 5_000,
258
+ /** Minimum internal timeout regardless of buffer */ MIN_INTERNAL_TIMEOUT_MS: 1_000,
259
+ /** Fixed max peers for fair benchmarking */ FIXED_MAX_PEERS: 10,
260
+ /** Fixed max retry attempts for fair benchmarking */ FIXED_MAX_RETRY_ATTEMPTS: 3,
261
+ /** LMDB map size for temp stores used in benchmarks (in KB). */ KV_STORE_MAP_SIZE_KB: 256 * 1024
262
+ };
263
+ /**
264
+ * Filters transactions based on distribution pattern for benchmark responders.
265
+ *
266
+ * @param allTxs - All transactions to filter
267
+ * @param peerIndex - Index of the current peer (0 = aggregator)
268
+ * @param peerCount - Total number of peers
269
+ * @param distribution - Distribution pattern to apply
270
+ * @param pinnedPeerIndex - Index of the pinned peer (for pinned-only distribution)
271
+ * @returns Filtered transactions for this peer
272
+ */ export function filterTxsByDistribution(allTxs, peerIndex, peerCount, distribution, pinnedPeerIndex = 1) {
273
+ if (peerIndex === 0) {
274
+ return [];
275
+ }
276
+ const responderCount = peerCount - 1;
277
+ switch(distribution){
278
+ case 'uniform':
279
+ return allTxs;
280
+ case 'sparse':
281
+ {
282
+ const responderIndex = peerIndex - 1;
283
+ return allTxs.filter((_, txIndex)=>{
284
+ const bucket = txIndex % responderCount;
285
+ return bucket === responderIndex || bucket === (responderIndex + 1) % responderCount;
286
+ });
287
+ }
288
+ case 'pinned-only':
289
+ return peerIndex === pinnedPeerIndex ? allTxs : [];
290
+ }
291
+ }
292
+ /**
293
+ * Calculates the internal timeout for collector operations.
294
+ * Ensures we return before the outer timeout while maintaining a minimum.
295
+ */ export function calculateInternalTimeout(timeoutMs) {
296
+ return Math.max(timeoutMs - BENCHMARK_CONSTANTS.TIMEOUT_BUFFER_MS, BENCHMARK_CONSTANTS.MIN_INTERNAL_TIMEOUT_MS);
297
+ }
@@ -1,2 +1,28 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
1
+ import { type CollectorType, type DistributionPattern } from '../test-helpers/testbench-utils.js';
2
+ export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
3
+ export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
4
+ export interface BenchReqRespCommand {
5
+ type: 'BENCH_REQRESP';
6
+ txCount: number;
7
+ peerCount: number;
8
+ distribution: DistributionPattern;
9
+ collectorType: CollectorType;
10
+ timeoutMs: number;
11
+ isAggregator: boolean;
12
+ peerIndex: number;
13
+ pinnedPeerIndex?: number;
14
+ pinnedPeerId?: string;
15
+ blockNumber: number;
16
+ seed: number;
17
+ }
18
+ export interface BenchResultMessage {
19
+ type: 'BENCH_RESULT';
20
+ durationMs: number;
21
+ fetchedCount: number;
22
+ success: boolean;
23
+ error?: string;
24
+ }
25
+ export interface BenchReadyMessage {
26
+ type: 'BENCH_READY';
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQ0EsT0FBTyxFQUVMLEtBQUssYUFBYSxFQUNsQixLQUFLLG1CQUFtQixFQU96QixNQUFNLG9DQUFvQyxDQUFDO0FBRzVDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU3RSxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLElBQUksRUFBRSxlQUFlLENBQUM7SUFDdEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztJQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsWUFBWSxFQUFFLE9BQU8sQ0FBQztJQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN6QixZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEIsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQ2Q7QUFFRCxNQUFNLFdBQVcsa0JBQWtCO0lBQ2pDLElBQUksRUFBRSxjQUFjLENBQUM7SUFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDakIsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2hCO0FBRUQsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyxJQUFJLEVBQUUsYUFBYSxDQUFDO0NBQ3JCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":"AA+CA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAOzB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB"}