@aztec/p2p 0.76.4 → 0.77.0-testnet-ignition.21
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 +2 -2
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +55 -41
- package/dest/client/factory.d.ts +8 -6
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +8 -10
- package/dest/client/index.js +0 -1
- package/dest/client/p2p_client.d.ts +7 -4
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +492 -514
- package/dest/config.d.ts +8 -10
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +54 -47
- 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.js +6 -10
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +65 -33
- package/dest/mem_pools/attestation_pool/index.js +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +3 -3
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +23 -20
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
- package/dest/mem_pools/attestation_pool/mocks.d.ts +3 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +12 -7
- package/dest/mem_pools/index.d.ts +2 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -2
- 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 +35 -39
- package/dest/mem_pools/interface.d.ts +3 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/interface.js +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +129 -136
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +46 -44
- package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +109 -39
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +2 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +4 -4
- package/dest/msg_validators/attestation_validator/index.js +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +2 -2
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +3 -3
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/dest/msg_validators/index.js +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +18 -13
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +102 -33
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +34 -20
- package/dest/msg_validators/tx_validator/index.js +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +30 -27
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +17 -12
- package/dest/services/data_store.js +57 -57
- package/dest/services/discv5/discV5_service.d.ts +2 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +64 -36
- package/dest/services/dummy_service.d.ts +4 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +41 -59
- package/dest/services/encoding.d.ts +3 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +10 -9
- 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.js +0 -1
- package/dest/services/libp2p/libp2p_service.d.ts +10 -33
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +682 -673
- package/dest/services/peer-manager/metrics.js +14 -7
- package/dest/services/peer-manager/peer_manager.d.ts +24 -6
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +390 -340
- package/dest/services/peer-manager/peer_scoring.d.ts +3 -3
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +21 -19
- package/dest/services/reqresp/config.js +4 -5
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +67 -61
- package/dest/services/reqresp/index.js +1 -3
- package/dest/services/reqresp/interface.d.ts +2 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +27 -31
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +23 -10
- package/dest/services/reqresp/protocols/block.d.ts +2 -2
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +1 -2
- package/dest/services/reqresp/protocols/goodbye.d.ts +5 -5
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +36 -41
- package/dest/services/reqresp/protocols/index.js +1 -3
- package/dest/services/reqresp/protocols/ping.js +1 -3
- package/dest/services/reqresp/protocols/status.js +1 -3
- package/dest/services/reqresp/protocols/tx.d.ts +3 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +6 -9
- package/dest/services/reqresp/rate-limiter/index.js +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +9 -9
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +53 -46
- package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
- package/dest/services/reqresp/reqresp.d.ts +4 -4
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +467 -464
- package/dest/services/reqresp/status.js +16 -17
- package/dest/services/service.d.ts +3 -2
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/service.js +3 -4
- package/dest/test-helpers/generate-peer-id-private-keys.js +2 -4
- package/dest/test-helpers/get-ports.js +3 -3
- package/dest/test-helpers/index.js +0 -1
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +3 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +10 -12
- package/dest/test-helpers/reqresp-nodes.d.ts +18 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +64 -40
- package/dest/testbench/p2p_client_testbench_worker.js +61 -45
- 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 +141 -0
- package/dest/{services/types.d.ts → types/index.d.ts} +1 -1
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +28 -0
- package/dest/util.d.ts +5 -5
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +23 -34
- package/dest/versioning.d.ts +3 -3
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +7 -12
- package/package.json +15 -13
- package/src/bootstrap/bootstrap.ts +30 -17
- package/src/client/factory.ts +9 -12
- package/src/client/p2p_client.ts +13 -24
- package/src/config.ts +14 -15
- package/src/enr/generate-enr.ts +39 -0
- package/src/enr/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +4 -3
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +3 -3
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +2 -2
- package/src/mem_pools/attestation_pool/mocks.ts +5 -5
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +4 -3
- package/src/mem_pools/interface.ts +3 -3
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +4 -4
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
- package/src/mem_pools/tx_pool/priority.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +4 -3
- package/src/msg_validators/attestation_validator/attestation_validator.ts +2 -2
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +2 -2
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +2 -2
- package/src/msg_validators/tx_validator/data_validator.ts +57 -4
- package/src/msg_validators/tx_validator/double_spend_validator.ts +17 -12
- package/src/msg_validators/tx_validator/metadata_validator.ts +2 -2
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -6
- package/src/services/discv5/discV5_service.ts +33 -8
- package/src/services/dummy_service.ts +4 -2
- package/src/services/encoding.ts +3 -3
- package/src/services/gossipsub/scoring.ts +13 -0
- package/src/services/libp2p/libp2p_service.ts +124 -146
- package/src/services/peer-manager/peer_manager.ts +71 -13
- package/src/services/peer-manager/peer_scoring.ts +3 -3
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +2 -2
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +9 -3
- package/src/services/reqresp/interface.ts +4 -3
- package/src/services/reqresp/metrics.ts +1 -1
- package/src/services/reqresp/protocols/block.ts +3 -3
- package/src/services/reqresp/protocols/goodbye.ts +7 -7
- package/src/services/reqresp/protocols/tx.ts +5 -5
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +22 -18
- package/src/services/reqresp/reqresp.ts +18 -11
- package/src/services/service.ts +3 -2
- package/src/test-helpers/make-enrs.ts +1 -1
- package/src/test-helpers/make-test-p2p-clients.ts +9 -7
- package/src/test-helpers/reqresp-nodes.ts +32 -18
- package/src/testbench/p2p_client_testbench_worker.ts +16 -9
- package/src/testbench/parse_log_file.ts +175 -0
- package/src/testbench/testbench.ts +157 -0
- package/src/util.ts +5 -5
- package/src/versioning.ts +7 -7
- package/dest/services/libp2p/libp2p_logger.d.ts +0 -7
- package/dest/services/libp2p/libp2p_logger.d.ts.map +0 -1
- package/dest/services/libp2p/libp2p_logger.js +0 -67
- package/dest/services/types.d.ts.map +0 -1
- package/dest/services/types.js +0 -35
- package/src/services/libp2p/libp2p_logger.ts +0 -78
- package/src/testbench/scripts/run_testbench.sh +0 -7
- /package/src/{services/types.ts → types/index.ts} +0 -0
|
@@ -2,59 +2,63 @@
|
|
|
2
2
|
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
3
|
*
|
|
4
4
|
* Used when running testbench commands
|
|
5
|
-
*/
|
|
6
|
-
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
|
-
import { P2PClientType, Tx, TxStatus } from '@aztec/circuit-types';
|
|
5
|
+
*/ import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
8
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
10
8
|
import { sleep } from '@aztec/foundation/sleep';
|
|
11
9
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
10
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
11
|
+
import { Tx, TxStatus } from '@aztec/stdlib/tx';
|
|
12
12
|
import { createP2PClient } from '../index.js';
|
|
13
13
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
14
14
|
// Simple mock implementation
|
|
15
15
|
function mockTxPool() {
|
|
16
16
|
// Mock all methods
|
|
17
17
|
return {
|
|
18
|
-
addTxs: ()
|
|
19
|
-
getTxByHash: ()
|
|
20
|
-
getArchivedTxByHash: ()
|
|
21
|
-
markAsMined: ()
|
|
22
|
-
markMinedAsPending: ()
|
|
23
|
-
deleteTxs: ()
|
|
24
|
-
getAllTxs: ()
|
|
25
|
-
getAllTxHashes: ()
|
|
26
|
-
getPendingTxHashes: ()
|
|
27
|
-
getMinedTxHashes: ()
|
|
28
|
-
getTxStatus: ()
|
|
18
|
+
addTxs: ()=>Promise.resolve(),
|
|
19
|
+
getTxByHash: ()=>Promise.resolve(undefined),
|
|
20
|
+
getArchivedTxByHash: ()=>Promise.resolve(undefined),
|
|
21
|
+
markAsMined: ()=>Promise.resolve(),
|
|
22
|
+
markMinedAsPending: ()=>Promise.resolve(),
|
|
23
|
+
deleteTxs: ()=>Promise.resolve(),
|
|
24
|
+
getAllTxs: ()=>Promise.resolve([]),
|
|
25
|
+
getAllTxHashes: ()=>Promise.resolve([]),
|
|
26
|
+
getPendingTxHashes: ()=>Promise.resolve([]),
|
|
27
|
+
getMinedTxHashes: ()=>Promise.resolve([]),
|
|
28
|
+
getTxStatus: ()=>Promise.resolve(TxStatus.PENDING)
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
function mockAttestationPool() {
|
|
32
32
|
return {
|
|
33
|
-
addAttestations: ()
|
|
34
|
-
deleteAttestations: ()
|
|
35
|
-
deleteAttestationsOlderThan: ()
|
|
36
|
-
deleteAttestationsForSlot: ()
|
|
37
|
-
deleteAttestationsForSlotAndProposal: ()
|
|
38
|
-
getAttestationsForSlot: ()
|
|
33
|
+
addAttestations: ()=>Promise.resolve(),
|
|
34
|
+
deleteAttestations: ()=>Promise.resolve(),
|
|
35
|
+
deleteAttestationsOlderThan: ()=>Promise.resolve(),
|
|
36
|
+
deleteAttestationsForSlot: ()=>Promise.resolve(),
|
|
37
|
+
deleteAttestationsForSlotAndProposal: ()=>Promise.resolve(),
|
|
38
|
+
getAttestationsForSlot: ()=>Promise.resolve([])
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
function mockEpochCache() {
|
|
42
42
|
return {
|
|
43
|
-
getCommittee: ()
|
|
44
|
-
getProposerIndexEncoding: ()
|
|
45
|
-
getEpochAndSlotNow: ()
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
getCommittee: ()=>Promise.resolve([]),
|
|
44
|
+
getProposerIndexEncoding: ()=>'0x',
|
|
45
|
+
getEpochAndSlotNow: ()=>({
|
|
46
|
+
epoch: 0n,
|
|
47
|
+
slot: 0n,
|
|
48
|
+
ts: 0n
|
|
49
|
+
}),
|
|
50
|
+
computeProposerIndex: ()=>0n,
|
|
51
|
+
getProposerInCurrentOrNextSlot: ()=>Promise.resolve({
|
|
52
|
+
currentProposer: EthAddress.ZERO,
|
|
53
|
+
nextProposer: EthAddress.ZERO,
|
|
54
|
+
currentSlot: 0n,
|
|
55
|
+
nextSlot: 0n
|
|
56
|
+
}),
|
|
57
|
+
isInCommittee: ()=>Promise.resolve(false)
|
|
54
58
|
};
|
|
55
59
|
}
|
|
56
60
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
57
|
-
process.on('message', async (msg)
|
|
61
|
+
process.on('message', async (msg)=>{
|
|
58
62
|
const { type, config, clientIndex } = msg;
|
|
59
63
|
try {
|
|
60
64
|
if (type === 'START') {
|
|
@@ -71,19 +75,26 @@ process.on('message', async (msg) => {
|
|
|
71
75
|
txPool,
|
|
72
76
|
attestationPool,
|
|
73
77
|
store: kvStore,
|
|
74
|
-
logger
|
|
78
|
+
logger
|
|
75
79
|
};
|
|
76
80
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, undefined, deps);
|
|
77
81
|
// Create spy for gossip messages
|
|
78
82
|
let gossipMessageCount = 0;
|
|
79
|
-
client.p2pService.handleNewGossipMessage = (
|
|
83
|
+
client.p2pService.handleNewGossipMessage = (msg, msgId, source)=>{
|
|
80
84
|
gossipMessageCount++;
|
|
81
|
-
process.send({
|
|
82
|
-
|
|
85
|
+
process.send({
|
|
86
|
+
type: 'GOSSIP_RECEIVED',
|
|
87
|
+
count: gossipMessageCount
|
|
88
|
+
});
|
|
89
|
+
return client.p2pService.constructor.prototype.handleNewGossipMessage.apply(client.p2pService, [
|
|
90
|
+
msg,
|
|
91
|
+
msgId,
|
|
92
|
+
source
|
|
93
|
+
]);
|
|
83
94
|
};
|
|
84
95
|
await client.start();
|
|
85
96
|
// Wait until the client is ready
|
|
86
|
-
for
|
|
97
|
+
for(let i = 0; i < 100; i++){
|
|
87
98
|
const isReady = client.isReady();
|
|
88
99
|
logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
89
100
|
if (isReady) {
|
|
@@ -93,24 +104,29 @@ process.on('message', async (msg) => {
|
|
|
93
104
|
}
|
|
94
105
|
// Listen for commands from parent
|
|
95
106
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
96
|
-
process.on('message', async (cmd)
|
|
97
|
-
switch
|
|
107
|
+
process.on('message', async (cmd)=>{
|
|
108
|
+
switch(cmd.type){
|
|
98
109
|
case 'STOP':
|
|
99
110
|
await client.stop();
|
|
100
111
|
process.exit(0);
|
|
101
112
|
break;
|
|
102
113
|
case 'SEND_TX':
|
|
103
114
|
await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
104
|
-
process.send({
|
|
115
|
+
process.send({
|
|
116
|
+
type: 'TX_SENT'
|
|
117
|
+
});
|
|
105
118
|
break;
|
|
106
119
|
}
|
|
107
120
|
});
|
|
108
|
-
process.send({
|
|
121
|
+
process.send({
|
|
122
|
+
type: 'READY'
|
|
123
|
+
});
|
|
109
124
|
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
125
|
+
} catch (err) {
|
|
126
|
+
process.send({
|
|
127
|
+
type: 'ERROR',
|
|
128
|
+
error: err.message
|
|
129
|
+
});
|
|
113
130
|
process.exit(1);
|
|
114
131
|
}
|
|
115
132
|
});
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RiZW5jaC9wMnBfY2xpZW50X3Rlc3RiZW5jaF93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RSw2QkFBNkI7QUFDN0IsU0FBUyxVQUFVO0lBQ2pCLG1CQUFtQjtJQUNuQixPQUFPO1FBQ0wsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDL0IsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzdDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ3BDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDM0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDbEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxtQkFBbUI7SUFDMUIsT0FBTztRQUNMLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ3hDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDM0MsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUNwRCx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ2xELG9DQUFvQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDN0Qsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7S0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDckIsT0FBTztRQUNMLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQWtCLENBQUM7UUFDdkQsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBcUI7UUFDckQsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDM0Qsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUM5Qiw4QkFBOEIsRUFBRSxHQUFHLEVBQUUsQ0FDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNkLGVBQWUsRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNoQyxZQUFZLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDN0IsV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFDSixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQStELENBQUM7SUFFdEcsSUFBSSxDQUFDO1FBQ0gsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxFQUE0QixDQUFDO1lBQ2hELE1BQU0sYUFBYSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRWxELE1BQU0sSUFBSSxHQUFHO2dCQUNYLE1BQU07Z0JBQ04sZUFBZTtnQkFDZixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNO2FBQ1AsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUNsQyxhQUFhLENBQUMsSUFBSSxFQUNsQixNQUFxQyxFQUNyQyxhQUFhLEVBQ2IsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULElBQUksQ0FDTCxDQUFDO1lBRUYsaUNBQWlDO1lBQ2pDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQWMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO2dCQUNyRSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsSUFBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE9BQVEsTUFBYyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FDakYsTUFBYyxDQUFDLFVBQVUsRUFDMUIsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDLENBQUM7WUFFRixNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixpQ0FBaUM7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxXQUFXLGFBQWEsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUVELGtDQUFrQztZQUNsQyxrRUFBa0U7WUFDbEUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQVEsRUFBRSxFQUFFO2dCQUN2QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxNQUFNO3dCQUNULE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixNQUFNO29CQUNSLEtBQUssU0FBUzt3QkFDWixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELE9BQU8sQ0FBQyxJQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzt3QkFDbkMsTUFBTTtnQkFDVixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsSUFBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxJQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse_log_file.d.ts","sourceRoot":"","sources":["../../src/testbench/parse_log_file.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,131 @@
|
|
|
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
|
+
import * as fs from 'fs';
|
|
8
|
+
const logger = createLogger('parse_log_file');
|
|
9
|
+
function getTimestamp(line) {
|
|
10
|
+
const timestampMatch = line.match(/"time":(\d+)/);
|
|
11
|
+
if (!timestampMatch) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return parseInt(timestampMatch[1], 10);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parses a single log line. If the line contains an "rpc.from" event,
|
|
18
|
+
* it extracts the timestamp and the peer ID.
|
|
19
|
+
*/ function parseReceivedTx(line) {
|
|
20
|
+
if (!line.includes('Received tx')) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
// Extract timestamp from the line: e.g. {"time":1740142435845}
|
|
24
|
+
const timestamp = getTimestamp(line);
|
|
25
|
+
if (!timestamp) {
|
|
26
|
+
logger.error('No timestamp found in received tx log');
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// TODO: this is not correct - it is just the tx hash for now
|
|
30
|
+
// Extract the peer ID after "Received tx"
|
|
31
|
+
const peerIdMatch = line.match(/p2p:(\d+):/);
|
|
32
|
+
if (!peerIdMatch) {
|
|
33
|
+
logger.error('No peer Number found in received tx log');
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const peerId = peerIdMatch[1];
|
|
37
|
+
return {
|
|
38
|
+
timestamp,
|
|
39
|
+
peerId
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function parseSentMessage(line) {
|
|
43
|
+
if (!line.includes('Sent message')) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const timestamp = getTimestamp(line);
|
|
47
|
+
if (!timestamp) {
|
|
48
|
+
logger.error('No timestamp found in sent message log');
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return timestamp;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Processes the given log file, extracts all rpc.from events, computes the
|
|
55
|
+
* propagation delay for each peer relative to the earliest event, and prints
|
|
56
|
+
* some benchmark statistics.
|
|
57
|
+
*/ function processLogFile(logFilePath, outputJsonPath) {
|
|
58
|
+
const content = fs.readFileSync(logFilePath, 'utf-8');
|
|
59
|
+
const lines = content.split('\n');
|
|
60
|
+
const events = [];
|
|
61
|
+
let t0 = 0;
|
|
62
|
+
// We begin our search as soon as we see the Sent message log
|
|
63
|
+
let messageSent = false;
|
|
64
|
+
for (const line of lines){
|
|
65
|
+
// Look for Sent message log
|
|
66
|
+
if (line.includes('Sent message')) {
|
|
67
|
+
messageSent = true;
|
|
68
|
+
t0 = parseSentMessage(line);
|
|
69
|
+
}
|
|
70
|
+
if (!messageSent) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Once we see the sent message log, we begin parsing Received tx logs
|
|
74
|
+
const event = parseReceivedTx(line);
|
|
75
|
+
if (event) {
|
|
76
|
+
events.push(event);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (events.length === 0) {
|
|
80
|
+
logger.error('No message received events found in log file.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Sort events by timestamp (ascending)
|
|
84
|
+
events.sort((a, b)=>a.timestamp - b.timestamp);
|
|
85
|
+
// Compute delay for each event relative to t0
|
|
86
|
+
const numberReceived = events.length;
|
|
87
|
+
const delays = events.map((e)=>({
|
|
88
|
+
peerId: e.peerId,
|
|
89
|
+
delay: e.timestamp - t0
|
|
90
|
+
}));
|
|
91
|
+
logger.info('Propagation delays (in ms) per peer:');
|
|
92
|
+
for (const d of delays){
|
|
93
|
+
logger.info(`${d.peerId}: ${d.delay} ms`);
|
|
94
|
+
}
|
|
95
|
+
// Compute basic statistics
|
|
96
|
+
const delayValues = delays.map((d)=>d.delay);
|
|
97
|
+
const minDelay = Math.min(...delayValues);
|
|
98
|
+
const maxDelay = Math.max(...delayValues);
|
|
99
|
+
const sumDelay = delayValues.reduce((sum, val)=>sum + val, 0);
|
|
100
|
+
const avgDelay = sumDelay / delayValues.length;
|
|
101
|
+
const sortedDelays = delayValues.slice().sort((a, b)=>a - b);
|
|
102
|
+
const medianDelay = sortedDelays[Math.floor(sortedDelays.length / 2)];
|
|
103
|
+
logger.info('\nBenchmark Statistics:');
|
|
104
|
+
logger.info(`Number of messages received: ${numberReceived}`);
|
|
105
|
+
logger.info(`Min delay: ${minDelay} ms`);
|
|
106
|
+
logger.info(`Max delay: ${maxDelay} ms`);
|
|
107
|
+
logger.info(`Average delay: ${avgDelay.toFixed(2)} ms`);
|
|
108
|
+
logger.info(`Median delay: ${medianDelay} ms`);
|
|
109
|
+
// If output JSON path is provided, write results to file
|
|
110
|
+
if (outputJsonPath) {
|
|
111
|
+
const result = {
|
|
112
|
+
delays,
|
|
113
|
+
stats: {
|
|
114
|
+
numberReceived,
|
|
115
|
+
minDelay,
|
|
116
|
+
maxDelay,
|
|
117
|
+
averageDelay: Number(avgDelay.toFixed(2)),
|
|
118
|
+
medianDelay
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
fs.writeFileSync(outputJsonPath, JSON.stringify(result, null, 2));
|
|
122
|
+
logger.info(`\nResults written to ${outputJsonPath}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Get the log file path and optional output JSON path from command-line arguments
|
|
126
|
+
const [logFilePath, outputJsonPath] = process.argv.slice(2);
|
|
127
|
+
if (!logFilePath) {
|
|
128
|
+
logger.error('Usage: ts-node parse_log_file.ts <logFilePath> [outputJsonPath]');
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
processLogFile(logFilePath, outputJsonPath);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testbench.d.ts","sourceRoot":"","sources":["../../src/testbench/testbench.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
4
|
+
import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
5
|
+
import { mockTx } from '@aztec/stdlib/testing';
|
|
6
|
+
import { fork } from 'child_process';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
import { getP2PDefaultConfig } from '../config.js';
|
|
10
|
+
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
11
|
+
import { getPorts } from '../test-helpers/get-ports.js';
|
|
12
|
+
import { makeEnrs } from '../test-helpers/make-enrs.js';
|
|
13
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testbench_worker.js');
|
|
15
|
+
const logger = createLogger('testbench');
|
|
16
|
+
let processes = [];
|
|
17
|
+
const testChainConfig = {
|
|
18
|
+
l1ChainId: 31337,
|
|
19
|
+
version: 1,
|
|
20
|
+
l1Contracts: {
|
|
21
|
+
rollupAddress: EthAddress.random()
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Cleanup function to kill all child processes
|
|
26
|
+
*/ async function cleanup() {
|
|
27
|
+
logger.info('Cleaning up processes...');
|
|
28
|
+
await Promise.all(processes.map((proc)=>new Promise((resolve)=>{
|
|
29
|
+
proc.once('exit', ()=>resolve());
|
|
30
|
+
proc.send({
|
|
31
|
+
type: 'STOP'
|
|
32
|
+
});
|
|
33
|
+
})));
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
// Handle cleanup on process termination
|
|
37
|
+
process.on('SIGINT', ()=>void cleanup());
|
|
38
|
+
process.on('SIGTERM', ()=>void cleanup());
|
|
39
|
+
/**
|
|
40
|
+
* Creates a number of worker clients in separate processes
|
|
41
|
+
* All are configured to connect to each other and overrided with the test specific config
|
|
42
|
+
*
|
|
43
|
+
* @param numberOfClients - The number of clients to create
|
|
44
|
+
* @param p2pConfig - The P2P config to use for the clients
|
|
45
|
+
* @returns The ENRs of the created clients
|
|
46
|
+
*/ async function makeWorkerClients(numberOfClients, p2pConfig) {
|
|
47
|
+
const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
|
|
48
|
+
const ports = await getPorts(numberOfClients);
|
|
49
|
+
const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testChainConfig);
|
|
50
|
+
processes = [];
|
|
51
|
+
const readySignals = [];
|
|
52
|
+
for(let i = 0; i < numberOfClients; i++){
|
|
53
|
+
logger.info(`Creating client ${i}`);
|
|
54
|
+
const addr = `127.0.0.1:${ports[i]}`;
|
|
55
|
+
const listenAddr = `0.0.0.0:${ports[i]}`;
|
|
56
|
+
// Maximum seed with 10 other peers to allow peer discovery to connect them at a smoother rate
|
|
57
|
+
const otherNodes = peerEnrs.filter((_, ind)=>ind < Math.min(i, 10));
|
|
58
|
+
const config = {
|
|
59
|
+
...getP2PDefaultConfig(),
|
|
60
|
+
p2pEnabled: true,
|
|
61
|
+
peerIdPrivateKey: peerIdPrivateKeys[i],
|
|
62
|
+
tcpListenAddress: listenAddr,
|
|
63
|
+
udpListenAddress: listenAddr,
|
|
64
|
+
tcpAnnounceAddress: addr,
|
|
65
|
+
udpAnnounceAddress: addr,
|
|
66
|
+
bootstrapNodes: [
|
|
67
|
+
...otherNodes
|
|
68
|
+
],
|
|
69
|
+
...p2pConfig
|
|
70
|
+
};
|
|
71
|
+
const childProcess = fork(workerPath);
|
|
72
|
+
childProcess.send({
|
|
73
|
+
type: 'START',
|
|
74
|
+
config,
|
|
75
|
+
clientIndex: i
|
|
76
|
+
});
|
|
77
|
+
// Wait for ready signal
|
|
78
|
+
readySignals.push(new Promise((resolve, reject)=>{
|
|
79
|
+
childProcess.once('message', (msg)=>{
|
|
80
|
+
if (msg.type === 'READY') {
|
|
81
|
+
resolve(undefined);
|
|
82
|
+
}
|
|
83
|
+
if (msg.type === 'ERROR') {
|
|
84
|
+
reject(new Error(msg.error));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}));
|
|
88
|
+
processes.push(childProcess);
|
|
89
|
+
}
|
|
90
|
+
// Wait for peers to all connect with each other
|
|
91
|
+
await sleep(4000);
|
|
92
|
+
// Wait for all peers to be booted up
|
|
93
|
+
await Promise.all(readySignals);
|
|
94
|
+
return peerEnrs;
|
|
95
|
+
}
|
|
96
|
+
async function main() {
|
|
97
|
+
try {
|
|
98
|
+
// Read configuration file name from command line args
|
|
99
|
+
const configFile = process.argv[2];
|
|
100
|
+
if (!configFile) {
|
|
101
|
+
throw new Error('Configuration file must be provided as first argument');
|
|
102
|
+
}
|
|
103
|
+
const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
|
|
104
|
+
const config = await import(configPath, {
|
|
105
|
+
assert: {
|
|
106
|
+
type: 'json'
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const testConfig = {
|
|
110
|
+
...testChainConfig,
|
|
111
|
+
...config.default
|
|
112
|
+
};
|
|
113
|
+
const numberOfClients = config.default.numberOfClients;
|
|
114
|
+
// Setup clients in separate processes
|
|
115
|
+
await makeWorkerClients(numberOfClients, testConfig);
|
|
116
|
+
// wait a bit longer for all peers to be ready
|
|
117
|
+
await sleep(5000);
|
|
118
|
+
logger.info('Workers Ready');
|
|
119
|
+
// Send tx from client 0
|
|
120
|
+
const tx = await mockTx(1, {
|
|
121
|
+
clientIvcProof: ClientIvcProof.random()
|
|
122
|
+
});
|
|
123
|
+
processes[0].send({
|
|
124
|
+
type: 'SEND_TX',
|
|
125
|
+
tx: tx.toBuffer()
|
|
126
|
+
});
|
|
127
|
+
logger.info('Transaction sent from client 0');
|
|
128
|
+
// Give time for message propagation
|
|
129
|
+
await sleep(30000);
|
|
130
|
+
logger.info('Checking message propagation results');
|
|
131
|
+
await cleanup();
|
|
132
|
+
} catch (error) {
|
|
133
|
+
logger.error('Test failed with error:', error);
|
|
134
|
+
await cleanup();
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
main().catch((error)=>{
|
|
139
|
+
logger.error('Unhandled error:', error);
|
|
140
|
+
cleanup().catch(()=>process.exit(1));
|
|
141
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AAErD;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,oBAAoB;IAC9B,SAAS,iBAAiB;IAC1B,YAAY,oBAAoB;CACjC;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB,SAAS,aAAa;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,sBAAsB;CAC9B;AAED;;qDAEqD;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/***************************************************
|
|
2
|
+
* Events
|
|
3
|
+
***************************************************/ /**
|
|
4
|
+
* Events emitted from the libp2p node.
|
|
5
|
+
*/ export var PeerEvent = /*#__PURE__*/ function(PeerEvent) {
|
|
6
|
+
PeerEvent["DISCOVERED"] = "peer:discovered";
|
|
7
|
+
PeerEvent["CONNECTED"] = "peer:connect";
|
|
8
|
+
PeerEvent["DISCONNECTED"] = "peer:disconnect";
|
|
9
|
+
return PeerEvent;
|
|
10
|
+
}({});
|
|
11
|
+
/**
|
|
12
|
+
* Events emitted from the Discv5 service.
|
|
13
|
+
*/ export var Discv5Event = /*#__PURE__*/ function(Discv5Event) {
|
|
14
|
+
Discv5Event["DISCOVERED"] = "discovered";
|
|
15
|
+
Discv5Event["ENR_ADDED"] = "enrAdded";
|
|
16
|
+
return Discv5Event;
|
|
17
|
+
}({});
|
|
18
|
+
/**
|
|
19
|
+
* Events emitted from the GossipSub protocol.
|
|
20
|
+
*/ export var GossipSubEvent = /*#__PURE__*/ function(GossipSubEvent) {
|
|
21
|
+
GossipSubEvent["MESSAGE"] = "gossipsub:message";
|
|
22
|
+
return GossipSubEvent;
|
|
23
|
+
}({});
|
|
24
|
+
/***************************************************
|
|
25
|
+
* Types
|
|
26
|
+
***************************************************/ /**
|
|
27
|
+
* Aztec network specific types
|
|
28
|
+
*/ export const AZTEC_ENR_KEY = 'aztec';
|
package/dest/util.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
3
3
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import type { PeerId } from '@libp2p/interface';
|
|
5
|
+
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
6
6
|
import type { Libp2p } from 'libp2p';
|
|
7
|
-
import {
|
|
7
|
+
import type { P2PConfig } from './config.js';
|
|
8
8
|
export interface PubSubLibp2p extends Libp2p {
|
|
9
9
|
services: {
|
|
10
10
|
pubsub: GossipSub;
|
package/dest/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|