@aztec/p2p 0.0.0-test.0
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/README.md +7 -0
- package/dest/bootstrap/bootstrap.d.ts +38 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +123 -0
- package/dest/client/factory.d.ts +21 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +37 -0
- package/dest/client/index.d.ts +3 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +2 -0
- package/dest/client/p2p_client.d.ts +314 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +505 -0
- package/dest/config.d.ts +180 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +193 -0
- package/dest/enr/generate-enr.d.ts +9 -0
- package/dest/enr/generate-enr.d.ts.map +1 -0
- package/dest/enr/generate-enr.js +30 -0
- package/dest/enr/index.d.ts +2 -0
- package/dest/enr/index.d.ts.map +1 -0
- package/dest/enr/index.js +1 -0
- package/dest/errors/reqresp.error.d.ts +28 -0
- package/dest/errors/reqresp.error.d.ts.map +1 -0
- package/dest/errors/reqresp.error.js +30 -0
- package/dest/index.d.ts +8 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +7 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +57 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +195 -0
- package/dest/mem_pools/attestation_pool/index.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/index.js +2 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +22 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +112 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +129 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts +19 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +33 -0
- package/dest/mem_pools/index.d.ts +4 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +1 -0
- package/dest/mem_pools/instrumentation.d.ts +30 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +84 -0
- package/dest/mem_pools/interface.d.ts +11 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +3 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +66 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +245 -0
- package/dest/mem_pools/tx_pool/index.d.ts +4 -0
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/index.js +3 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +56 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +141 -0
- package/dest/mem_pools/tx_pool/priority.d.ts +8 -0
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/priority.js +10 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +66 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -0
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +7 -0
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +169 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.js +19 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +21 -0
- package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/block_proposal_validator/index.js +1 -0
- package/dest/msg_validators/index.d.ts +4 -0
- package/dest/msg_validators/index.d.ts.map +1 -0
- package/dest/msg_validators/index.js +3 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +31 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +11 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/block_header_validator.js +26 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +6 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/data_validator.js +107 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.js +41 -0
- package/dest/msg_validators/tx_validator/index.d.ts +7 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/index.js +6 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.js +44 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +25 -0
- package/dest/services/data_store.d.ts +27 -0
- package/dest/services/data_store.d.ts.map +1 -0
- package/dest/services/data_store.js +188 -0
- package/dest/services/discv5/discV5_service.d.ts +42 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +214 -0
- package/dest/services/dummy_service.d.ts +85 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +92 -0
- package/dest/services/encoding.d.ts +31 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +66 -0
- package/dest/services/gossipsub/scoring.d.ts +7 -0
- package/dest/services/gossipsub/scoring.d.ts.map +1 -0
- package/dest/services/gossipsub/scoring.js +10 -0
- package/dest/services/index.d.ts +3 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +2 -0
- package/dest/services/libp2p/libp2p_service.d.ts +186 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +712 -0
- package/dest/services/peer-manager/metrics.d.ts +12 -0
- package/dest/services/peer-manager/metrics.d.ts.map +1 -0
- package/dest/services/peer-manager/metrics.js +33 -0
- package/dest/services/peer-manager/peer_manager.d.ts +94 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +445 -0
- package/dest/services/peer-manager/peer_scoring.d.ts +28 -0
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_scoring.js +86 -0
- package/dest/services/reqresp/config.d.ts +16 -0
- package/dest/services/reqresp/config.d.ts.map +1 -0
- package/dest/services/reqresp/config.js +20 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +45 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +88 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +61 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +181 -0
- package/dest/services/reqresp/index.d.ts +6 -0
- package/dest/services/reqresp/index.d.ts.map +1 -0
- package/dest/services/reqresp/index.js +4 -0
- package/dest/services/reqresp/interface.d.ts +116 -0
- package/dest/services/reqresp/interface.d.ts.map +1 -0
- package/dest/services/reqresp/interface.js +84 -0
- package/dest/services/reqresp/metrics.d.ts +15 -0
- package/dest/services/reqresp/metrics.d.ts.map +1 -0
- package/dest/services/reqresp/metrics.js +55 -0
- package/dest/services/reqresp/protocols/block.d.ts +4 -0
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block.js +8 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +51 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/goodbye.js +87 -0
- package/dest/services/reqresp/protocols/index.d.ts +9 -0
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/index.js +7 -0
- package/dest/services/reqresp/protocols/ping.d.ts +9 -0
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/ping.js +7 -0
- package/dest/services/reqresp/protocols/status.d.ts +9 -0
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/status.js +7 -0
- package/dest/services/reqresp/protocols/tx.d.ts +13 -0
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/tx.js +20 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/index.js +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +102 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +184 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.js +54 -0
- package/dest/services/reqresp/reqresp.d.ts +166 -0
- package/dest/services/reqresp/reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/reqresp.js +516 -0
- package/dest/services/reqresp/status.d.ts +31 -0
- package/dest/services/reqresp/status.d.ts.map +1 -0
- package/dest/services/reqresp/status.js +51 -0
- package/dest/services/service.d.ts +87 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +5 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
- package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
- package/dest/test-helpers/get-ports.d.ts +7 -0
- package/dest/test-helpers/get-ports.d.ts.map +1 -0
- package/dest/test-helpers/get-ports.js +8 -0
- package/dest/test-helpers/index.d.ts +6 -0
- package/dest/test-helpers/index.d.ts.map +1 -0
- package/dest/test-helpers/index.js +5 -0
- package/dest/test-helpers/make-enrs.d.ts +16 -0
- package/dest/test-helpers/make-enrs.d.ts.map +1 -0
- package/dest/test-helpers/make-enrs.js +32 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +36 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +68 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +66 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +207 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
- package/dest/testbench/p2p_client_testbench_worker.js +132 -0
- package/dest/testbench/parse_log_file.d.ts +2 -0
- package/dest/testbench/parse_log_file.d.ts.map +1 -0
- package/dest/testbench/parse_log_file.js +131 -0
- package/dest/testbench/testbench.d.ts +2 -0
- package/dest/testbench/testbench.d.ts.map +1 -0
- package/dest/testbench/testbench.js +61 -0
- package/dest/testbench/worker_client_manager.d.ts +56 -0
- package/dest/testbench/worker_client_manager.d.ts.map +1 -0
- package/dest/testbench/worker_client_manager.js +266 -0
- package/dest/types/index.d.ts +32 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +28 -0
- package/dest/util.d.ts +53 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +140 -0
- package/dest/versioning.d.ts +12 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +33 -0
- package/package.json +127 -0
- package/src/bootstrap/bootstrap.ts +146 -0
- package/src/client/factory.ts +89 -0
- package/src/client/index.ts +2 -0
- package/src/client/p2p_client.ts +754 -0
- package/src/config.ts +371 -0
- package/src/enr/generate-enr.ts +39 -0
- package/src/enr/index.ts +1 -0
- package/src/errors/reqresp.error.ts +35 -0
- package/src/index.ts +7 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +62 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +230 -0
- package/src/mem_pools/attestation_pool/index.ts +2 -0
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +159 -0
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +161 -0
- package/src/mem_pools/attestation_pool/mocks.ts +44 -0
- package/src/mem_pools/index.ts +3 -0
- package/src/mem_pools/instrumentation.ts +126 -0
- package/src/mem_pools/interface.ts +12 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +309 -0
- package/src/mem_pools/tx_pool/index.ts +3 -0
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +174 -0
- package/src/mem_pools/tx_pool/priority.ts +13 -0
- package/src/mem_pools/tx_pool/tx_pool.ts +76 -0
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +130 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +29 -0
- package/src/msg_validators/block_proposal_validator/index.ts +1 -0
- package/src/msg_validators/index.ts +3 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +32 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +25 -0
- package/src/msg_validators/tx_validator/data_validator.ts +106 -0
- package/src/msg_validators/tx_validator/double_spend_validator.ts +38 -0
- package/src/msg_validators/tx_validator/index.ts +6 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +48 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +18 -0
- package/src/services/data_store.ts +235 -0
- package/src/services/discv5/discV5_service.ts +256 -0
- package/src/services/dummy_service.ts +134 -0
- package/src/services/encoding.ts +79 -0
- package/src/services/gossipsub/scoring.ts +13 -0
- package/src/services/index.ts +2 -0
- package/src/services/libp2p/libp2p_service.ts +871 -0
- package/src/services/peer-manager/metrics.ts +41 -0
- package/src/services/peer-manager/peer_manager.ts +530 -0
- package/src/services/peer-manager/peer_scoring.ts +105 -0
- package/src/services/reqresp/config.ts +35 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +94 -0
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +217 -0
- package/src/services/reqresp/index.ts +4 -0
- package/src/services/reqresp/interface.ts +185 -0
- package/src/services/reqresp/metrics.ts +57 -0
- package/src/services/reqresp/protocols/block.ts +15 -0
- package/src/services/reqresp/protocols/goodbye.ts +101 -0
- package/src/services/reqresp/protocols/index.ts +8 -0
- package/src/services/reqresp/protocols/ping.ts +8 -0
- package/src/services/reqresp/protocols/status.ts +8 -0
- package/src/services/reqresp/protocols/tx.ts +29 -0
- package/src/services/reqresp/rate-limiter/index.ts +1 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +228 -0
- package/src/services/reqresp/rate-limiter/rate_limits.ts +55 -0
- package/src/services/reqresp/reqresp.ts +661 -0
- package/src/services/reqresp/status.ts +59 -0
- package/src/services/service.ts +112 -0
- package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
- package/src/test-helpers/get-ports.ts +8 -0
- package/src/test-helpers/index.ts +5 -0
- package/src/test-helpers/make-enrs.ts +44 -0
- package/src/test-helpers/make-test-p2p-clients.ts +122 -0
- package/src/test-helpers/reqresp-nodes.ts +289 -0
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +152 -0
- package/src/testbench/parse_log_file.ts +175 -0
- package/src/testbench/testbench.ts +66 -0
- package/src/testbench/worker_client_manager.ts +318 -0
- package/src/types/index.ts +36 -0
- package/src/util.ts +196 -0
- package/src/versioning.ts +50 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
|
+
*
|
|
4
|
+
* Used when running testbench commands
|
|
5
|
+
*/
|
|
6
|
+
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
10
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
11
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
12
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
13
|
+
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
14
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
15
|
+
import { Tx, TxStatus } from '@aztec/stdlib/tx';
|
|
16
|
+
|
|
17
|
+
import type { Message, PeerId } from '@libp2p/interface';
|
|
18
|
+
|
|
19
|
+
import type { P2PConfig } from '../config.js';
|
|
20
|
+
import { createP2PClient } from '../index.js';
|
|
21
|
+
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
22
|
+
import type { TxPool } from '../mem_pools/tx_pool/index.js';
|
|
23
|
+
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
24
|
+
|
|
25
|
+
// Simple mock implementation
|
|
26
|
+
function mockTxPool(): TxPool {
|
|
27
|
+
// Mock all methods
|
|
28
|
+
return {
|
|
29
|
+
addTxs: () => Promise.resolve(),
|
|
30
|
+
getTxByHash: () => Promise.resolve(undefined),
|
|
31
|
+
getArchivedTxByHash: () => Promise.resolve(undefined),
|
|
32
|
+
markAsMined: () => Promise.resolve(),
|
|
33
|
+
markMinedAsPending: () => Promise.resolve(),
|
|
34
|
+
deleteTxs: () => Promise.resolve(),
|
|
35
|
+
getAllTxs: () => Promise.resolve([]),
|
|
36
|
+
getAllTxHashes: () => Promise.resolve([]),
|
|
37
|
+
getPendingTxHashes: () => Promise.resolve([]),
|
|
38
|
+
getMinedTxHashes: () => Promise.resolve([]),
|
|
39
|
+
getTxStatus: () => Promise.resolve(TxStatus.PENDING),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function mockAttestationPool(): AttestationPool {
|
|
44
|
+
return {
|
|
45
|
+
addAttestations: () => Promise.resolve(),
|
|
46
|
+
deleteAttestations: () => Promise.resolve(),
|
|
47
|
+
deleteAttestationsOlderThan: () => Promise.resolve(),
|
|
48
|
+
deleteAttestationsForSlot: () => Promise.resolve(),
|
|
49
|
+
deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
|
|
50
|
+
getAttestationsForSlot: () => Promise.resolve([]),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function mockEpochCache(): EpochCacheInterface {
|
|
55
|
+
return {
|
|
56
|
+
getCommittee: () => Promise.resolve([] as EthAddress[]),
|
|
57
|
+
getProposerIndexEncoding: () => '0x' as `0x${string}`,
|
|
58
|
+
getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
|
|
59
|
+
computeProposerIndex: () => 0n,
|
|
60
|
+
getProposerInCurrentOrNextSlot: () =>
|
|
61
|
+
Promise.resolve({
|
|
62
|
+
currentProposer: EthAddress.ZERO,
|
|
63
|
+
nextProposer: EthAddress.ZERO,
|
|
64
|
+
currentSlot: 0n,
|
|
65
|
+
nextSlot: 0n,
|
|
66
|
+
}),
|
|
67
|
+
isInCommittee: () => Promise.resolve(false),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
72
|
+
process.on('message', async msg => {
|
|
73
|
+
const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
if (type === 'START') {
|
|
77
|
+
const txPool = mockTxPool();
|
|
78
|
+
const attestationPool = mockAttestationPool();
|
|
79
|
+
const epochCache = mockEpochCache();
|
|
80
|
+
const worldState = {} as WorldStateSynchronizer;
|
|
81
|
+
const l2BlockSource = new MockL2BlockSource();
|
|
82
|
+
await l2BlockSource.createBlocks(100);
|
|
83
|
+
|
|
84
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
85
|
+
const kvStore = await openTmpStore(`test-${clientIndex}`);
|
|
86
|
+
const logger = createLogger(`p2p:${clientIndex}`);
|
|
87
|
+
|
|
88
|
+
const deps = {
|
|
89
|
+
txPool,
|
|
90
|
+
attestationPool,
|
|
91
|
+
store: kvStore,
|
|
92
|
+
logger,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const client = await createP2PClient(
|
|
96
|
+
P2PClientType.Full,
|
|
97
|
+
config as P2PConfig & DataStoreConfig,
|
|
98
|
+
l2BlockSource,
|
|
99
|
+
proofVerifier,
|
|
100
|
+
worldState,
|
|
101
|
+
epochCache,
|
|
102
|
+
undefined,
|
|
103
|
+
deps,
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
// Create spy for gossip messages
|
|
107
|
+
let gossipMessageCount = 0;
|
|
108
|
+
(client as any).p2pService.handleNewGossipMessage = (msg: Message, msgId: string, source: PeerId) => {
|
|
109
|
+
gossipMessageCount++;
|
|
110
|
+
process.send!({
|
|
111
|
+
type: 'GOSSIP_RECEIVED',
|
|
112
|
+
count: gossipMessageCount,
|
|
113
|
+
});
|
|
114
|
+
return (client as any).p2pService.constructor.prototype.handleNewGossipMessage.apply(
|
|
115
|
+
(client as any).p2pService,
|
|
116
|
+
[msg, msgId, source],
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
await client.start();
|
|
121
|
+
// Wait until the client is ready
|
|
122
|
+
for (let i = 0; i < 100; i++) {
|
|
123
|
+
const isReady = client.isReady();
|
|
124
|
+
logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
125
|
+
if (isReady) {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
await sleep(1000);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Listen for commands from parent
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
133
|
+
process.on('message', async (cmd: any) => {
|
|
134
|
+
switch (cmd.type) {
|
|
135
|
+
case 'STOP':
|
|
136
|
+
await client.stop();
|
|
137
|
+
process.exit(0);
|
|
138
|
+
break;
|
|
139
|
+
case 'SEND_TX':
|
|
140
|
+
await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
141
|
+
process.send!({ type: 'TX_SENT' });
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
process.send!({ type: 'READY' });
|
|
147
|
+
}
|
|
148
|
+
} catch (err: any) {
|
|
149
|
+
process.send!({ type: 'ERROR', error: err.message });
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// Parse Log File
|
|
2
|
+
// 1. Determine when a message was sent from the Sent Message log
|
|
3
|
+
// 2. Parse all Received Tx logs, extracting the timestamp and peer ID
|
|
4
|
+
// 3. Compute the delay for each peer relative to the timestamp of the sent message
|
|
5
|
+
// 4. Print the delays
|
|
6
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
|
|
10
|
+
const logger = createLogger('parse_log_file');
|
|
11
|
+
|
|
12
|
+
interface LogEvent {
|
|
13
|
+
timestamp: number; // in milliseconds (from start of log)
|
|
14
|
+
peerId: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface BenchmarkResult {
|
|
18
|
+
delays: {
|
|
19
|
+
peerId: string;
|
|
20
|
+
delay: number;
|
|
21
|
+
}[];
|
|
22
|
+
stats: {
|
|
23
|
+
numberReceived: number;
|
|
24
|
+
minDelay: number;
|
|
25
|
+
maxDelay: number;
|
|
26
|
+
averageDelay: number;
|
|
27
|
+
medianDelay: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function getTimestamp(line: string): number | null {
|
|
32
|
+
const timestampMatch = line.match(/"time":(\d+)/);
|
|
33
|
+
if (!timestampMatch) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return parseInt(timestampMatch[1], 10);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Parses a single log line. If the line contains an "rpc.from" event,
|
|
41
|
+
* it extracts the timestamp and the peer ID.
|
|
42
|
+
*/
|
|
43
|
+
function parseReceivedTx(line: string): LogEvent | null {
|
|
44
|
+
if (!line.includes('Received tx')) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Extract timestamp from the line: e.g. {"time":1740142435845}
|
|
49
|
+
const timestamp = getTimestamp(line);
|
|
50
|
+
if (!timestamp) {
|
|
51
|
+
logger.error('No timestamp found in received tx log');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// TODO: this is not correct - it is just the tx hash for now
|
|
56
|
+
// Extract the peer ID after "Received tx"
|
|
57
|
+
const peerIdMatch = line.match(/p2p:(\d+):/);
|
|
58
|
+
if (!peerIdMatch) {
|
|
59
|
+
logger.error('No peer Number found in received tx log');
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const peerId = peerIdMatch[1];
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
timestamp,
|
|
66
|
+
peerId,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function parseSentMessage(line: string): number | null {
|
|
71
|
+
if (!line.includes('Sent message')) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const timestamp = getTimestamp(line);
|
|
76
|
+
if (!timestamp) {
|
|
77
|
+
logger.error('No timestamp found in sent message log');
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return timestamp;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Processes the given log file, extracts all rpc.from events, computes the
|
|
86
|
+
* propagation delay for each peer relative to the earliest event, and prints
|
|
87
|
+
* some benchmark statistics.
|
|
88
|
+
*/
|
|
89
|
+
function processLogFile(logFilePath: string, outputJsonPath?: string) {
|
|
90
|
+
const content = fs.readFileSync(logFilePath, 'utf-8');
|
|
91
|
+
const lines = content.split('\n');
|
|
92
|
+
const events: LogEvent[] = [];
|
|
93
|
+
let t0 = 0;
|
|
94
|
+
|
|
95
|
+
// We begin our search as soon as we see the Sent message log
|
|
96
|
+
let messageSent = false;
|
|
97
|
+
for (const line of lines) {
|
|
98
|
+
// Look for Sent message log
|
|
99
|
+
if (line.includes('Sent message')) {
|
|
100
|
+
messageSent = true;
|
|
101
|
+
t0 = parseSentMessage(line)!;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!messageSent) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Once we see the sent message log, we begin parsing Received tx logs
|
|
108
|
+
const event = parseReceivedTx(line);
|
|
109
|
+
if (event) {
|
|
110
|
+
events.push(event);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (events.length === 0) {
|
|
115
|
+
logger.error('No message received events found in log file.');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Sort events by timestamp (ascending)
|
|
120
|
+
events.sort((a, b) => a.timestamp - b.timestamp);
|
|
121
|
+
|
|
122
|
+
// Compute delay for each event relative to t0
|
|
123
|
+
const numberReceived = events.length;
|
|
124
|
+
const delays = events.map(e => ({
|
|
125
|
+
peerId: e.peerId,
|
|
126
|
+
delay: e.timestamp - t0,
|
|
127
|
+
}));
|
|
128
|
+
|
|
129
|
+
logger.info('Propagation delays (in ms) per peer:');
|
|
130
|
+
for (const d of delays) {
|
|
131
|
+
logger.info(`${d.peerId}: ${d.delay} ms`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Compute basic statistics
|
|
135
|
+
const delayValues = delays.map(d => d.delay);
|
|
136
|
+
const minDelay = Math.min(...delayValues);
|
|
137
|
+
const maxDelay = Math.max(...delayValues);
|
|
138
|
+
const sumDelay = delayValues.reduce((sum, val) => sum + val, 0);
|
|
139
|
+
const avgDelay = sumDelay / delayValues.length;
|
|
140
|
+
const sortedDelays = delayValues.slice().sort((a, b) => a - b);
|
|
141
|
+
const medianDelay = sortedDelays[Math.floor(sortedDelays.length / 2)];
|
|
142
|
+
|
|
143
|
+
logger.info('\nBenchmark Statistics:');
|
|
144
|
+
logger.info(`Number of messages received: ${numberReceived}`);
|
|
145
|
+
logger.info(`Min delay: ${minDelay} ms`);
|
|
146
|
+
logger.info(`Max delay: ${maxDelay} ms`);
|
|
147
|
+
logger.info(`Average delay: ${avgDelay.toFixed(2)} ms`);
|
|
148
|
+
logger.info(`Median delay: ${medianDelay} ms`);
|
|
149
|
+
|
|
150
|
+
// If output JSON path is provided, write results to file
|
|
151
|
+
if (outputJsonPath) {
|
|
152
|
+
const result: BenchmarkResult = {
|
|
153
|
+
delays,
|
|
154
|
+
stats: {
|
|
155
|
+
numberReceived,
|
|
156
|
+
minDelay,
|
|
157
|
+
maxDelay,
|
|
158
|
+
averageDelay: Number(avgDelay.toFixed(2)),
|
|
159
|
+
medianDelay,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
fs.writeFileSync(outputJsonPath, JSON.stringify(result, null, 2));
|
|
164
|
+
logger.info(`\nResults written to ${outputJsonPath}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Get the log file path and optional output JSON path from command-line arguments
|
|
169
|
+
const [logFilePath, outputJsonPath] = process.argv.slice(2);
|
|
170
|
+
if (!logFilePath) {
|
|
171
|
+
logger.error('Usage: ts-node parse_log_file.ts <logFilePath> [outputJsonPath]');
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
processLogFile(logFilePath, outputJsonPath);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
|
+
import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
4
|
+
import { mockTx } from '@aztec/stdlib/testing';
|
|
5
|
+
|
|
6
|
+
import assert from 'assert';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
|
|
10
|
+
import { WorkerClientManager, testChainConfig } from './worker_client_manager.js';
|
|
11
|
+
|
|
12
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const logger = createLogger('testbench');
|
|
14
|
+
|
|
15
|
+
async function main() {
|
|
16
|
+
try {
|
|
17
|
+
// Read configuration file name from command line args
|
|
18
|
+
const configFile = process.argv[2];
|
|
19
|
+
if (!configFile) {
|
|
20
|
+
throw new Error('Configuration file must be provided as first argument');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
|
|
24
|
+
const config = await import(configPath, { assert: { type: 'json' } });
|
|
25
|
+
const testConfig = { ...testChainConfig, ...config.default };
|
|
26
|
+
const numberOfClients = config.default.numberOfClients;
|
|
27
|
+
|
|
28
|
+
// Setup clients in separate processes
|
|
29
|
+
const workerClientManager = new WorkerClientManager(logger, testConfig);
|
|
30
|
+
await workerClientManager.makeWorkerClients(numberOfClients);
|
|
31
|
+
|
|
32
|
+
// wait a bit longer for all peers to be ready
|
|
33
|
+
await sleep(5000);
|
|
34
|
+
logger.info('Workers Ready');
|
|
35
|
+
|
|
36
|
+
// Send tx from client 0
|
|
37
|
+
const tx = await mockTx(1, {
|
|
38
|
+
clientIvcProof: ClientIvcProof.random(),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
workerClientManager.processes[0].send({ type: 'SEND_TX', tx: tx.toBuffer() });
|
|
42
|
+
logger.info('Transaction sent from client 0');
|
|
43
|
+
|
|
44
|
+
// Give time for message propagation
|
|
45
|
+
await sleep(30000);
|
|
46
|
+
logger.info('Checking message propagation results');
|
|
47
|
+
|
|
48
|
+
// Check message propagation results
|
|
49
|
+
const numberOfClientsThatReceivedMessage = workerClientManager.numberOfClientsThatReceivedMessage();
|
|
50
|
+
logger.info(`Number of clients that received message: ${numberOfClientsThatReceivedMessage}`);
|
|
51
|
+
|
|
52
|
+
assert(numberOfClientsThatReceivedMessage === numberOfClients - 1);
|
|
53
|
+
|
|
54
|
+
logger.info('Test passed, cleaning up');
|
|
55
|
+
|
|
56
|
+
// cleanup
|
|
57
|
+
await workerClientManager.cleanup();
|
|
58
|
+
} catch (error) {
|
|
59
|
+
logger.error('Test failed with error:', error);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
main().catch(error => {
|
|
65
|
+
logger.error('Unhandled error:', error);
|
|
66
|
+
});
|