@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,87 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
|
|
4
|
+
import type { ENR } from '@chainsafe/enr';
|
|
5
|
+
import type { PeerId } from '@libp2p/interface';
|
|
6
|
+
import type EventEmitter from 'events';
|
|
7
|
+
import type { ReqRespSubProtocol, SubProtocolMap } from './reqresp/interface.js';
|
|
8
|
+
export declare enum PeerDiscoveryState {
|
|
9
|
+
RUNNING = "running",
|
|
10
|
+
STOPPED = "stopped"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The interface for a P2P service implementation.
|
|
14
|
+
*/
|
|
15
|
+
export interface P2PService {
|
|
16
|
+
/**
|
|
17
|
+
* Starts the service.
|
|
18
|
+
* @returns An empty promise.
|
|
19
|
+
*/
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Stops the service.
|
|
23
|
+
* @returns An empty promise.
|
|
24
|
+
*/
|
|
25
|
+
stop(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Called to have the given transaction propagated through the P2P network.
|
|
28
|
+
* @param message - The message to be propagated.
|
|
29
|
+
*/
|
|
30
|
+
propagate<T extends Gossipable>(message: T): void;
|
|
31
|
+
/**
|
|
32
|
+
* Request information from peers via the request response protocol.
|
|
33
|
+
*
|
|
34
|
+
* @param protocol - The request response protocol to use
|
|
35
|
+
* @param request - The request type, corresponding to the protocol
|
|
36
|
+
* @returns The response type, corresponding to the protocol
|
|
37
|
+
*/
|
|
38
|
+
sendRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Send a batch of requests to peers, and return the responses
|
|
41
|
+
*
|
|
42
|
+
* @param protocol - The request response protocol to use
|
|
43
|
+
* @param requests - The requests to send to the peers
|
|
44
|
+
* @returns The responses to the requests
|
|
45
|
+
*/
|
|
46
|
+
sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[]): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[] | undefined>;
|
|
47
|
+
registerBlockReceivedCallback(callback: (block: BlockProposal) => Promise<BlockAttestation | undefined>): void;
|
|
48
|
+
getEnr(): ENR | undefined;
|
|
49
|
+
getPeers(includePending?: boolean): PeerInfo[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The interface for a peer discovery service implementation.
|
|
53
|
+
*/
|
|
54
|
+
export interface PeerDiscoveryService extends EventEmitter {
|
|
55
|
+
/**
|
|
56
|
+
* Starts the service.
|
|
57
|
+
* */
|
|
58
|
+
start(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Stops the service.
|
|
61
|
+
* */
|
|
62
|
+
stop(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Gets all peers.
|
|
65
|
+
* @returns An array of peer ENRs.
|
|
66
|
+
*/
|
|
67
|
+
getAllPeers(): ENR[];
|
|
68
|
+
/**
|
|
69
|
+
* Runs findRandomNode query.
|
|
70
|
+
*/
|
|
71
|
+
runRandomNodesQuery(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Checks if the given peer is a bootstrap peer.
|
|
74
|
+
* @param peerId - The peer ID to check.
|
|
75
|
+
* @returns True if the peer is a bootstrap peer.
|
|
76
|
+
*/
|
|
77
|
+
isBootstrapPeer(peerId: PeerId): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Event emitted when a new peer is discovered.
|
|
80
|
+
*/
|
|
81
|
+
on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
|
|
82
|
+
emit(event: 'peer:discovered', enr: ENR): boolean;
|
|
83
|
+
getStatus(): PeerDiscoveryState;
|
|
84
|
+
getEnr(): ENR | undefined;
|
|
85
|
+
bootstrapNodes: string[];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEjF,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAElD;;;;;;OAMG;IACH,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EAC7C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EAClD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC5D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAG7E,6BAA6B,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAE/G,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD;;SAEK;IACL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;SAEK;IACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,WAAW,IAAI,GAAG,EAAE,CAAC;IAErB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD,SAAS,IAAI,kBAAkB,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a list of peer id private keys
|
|
3
|
+
* @param numberOfPeers - The number of peer id private keys to generate
|
|
4
|
+
* @returns A list of peer id private keys
|
|
5
|
+
*/
|
|
6
|
+
export declare function generatePeerIdPrivateKeys(numberOfPeers: number): string[];
|
|
7
|
+
//# sourceMappingURL=generate-peer-id-private-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-peer-id-private-keys.d.ts","sourceRoot":"","sources":["../../src/test-helpers/generate-peer-id-private-keys.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAOzE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { generatePrivateKey } from 'viem/accounts';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a list of peer id private keys
|
|
4
|
+
* @param numberOfPeers - The number of peer id private keys to generate
|
|
5
|
+
* @returns A list of peer id private keys
|
|
6
|
+
*/ export function generatePeerIdPrivateKeys(numberOfPeers) {
|
|
7
|
+
const peerIdPrivateKeys = [];
|
|
8
|
+
for(let i = 0; i < numberOfPeers; i++){
|
|
9
|
+
// magic number is multiaddr prefix: https://multiformats.io/multiaddr/
|
|
10
|
+
peerIdPrivateKeys.push('08021220' + generatePrivateKey().slice(2, 68));
|
|
11
|
+
}
|
|
12
|
+
return peerIdPrivateKeys;
|
|
13
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a list of ports for a given number of peers
|
|
3
|
+
* @param numberOfPeers - The number of peers to get ports for
|
|
4
|
+
* @returns A list of ports
|
|
5
|
+
*/
|
|
6
|
+
export declare const getPorts: (numberOfPeers: number) => Promise<number[]>;
|
|
7
|
+
//# sourceMappingURL=get-ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,kBAAmB,MAAM,sBAAwE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import getPort from 'get-port';
|
|
2
|
+
/**
|
|
3
|
+
* Get a list of ports for a given number of peers
|
|
4
|
+
* @param numberOfPeers - The number of peers to get ports for
|
|
5
|
+
* @returns A list of ports
|
|
6
|
+
*/ export const getPorts = (numberOfPeers)=>Promise.all(Array.from({
|
|
7
|
+
length: numberOfPeers
|
|
8
|
+
}, ()=>getPort()));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
2
|
+
/**
|
|
3
|
+
* Make a list of ENRs for a given list of p2p private keys and ports
|
|
4
|
+
* @param p2pPrivateKeys - The private keys of the p2p nodes
|
|
5
|
+
* @param ports - The ports of the p2p nodes
|
|
6
|
+
* @returns A list of ENRs
|
|
7
|
+
*/
|
|
8
|
+
export declare function makeEnrs(p2pPrivateKeys: string[], ports: number[], config: ChainConfig): Promise<string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Make an ENR for a given p2p private key and port
|
|
11
|
+
* @param p2pPrivateKey - The private key of the p2p node
|
|
12
|
+
* @param port - The port of the p2p node
|
|
13
|
+
* @returns The ENR of the p2p node
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeEnr(p2pPrivateKey: string, port: number, config: ChainConfig): Promise<string>;
|
|
16
|
+
//# sourceMappingURL=make-enrs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,mBAerF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
|
+
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
4
|
+
import { setAztecEnrKey } from '../versioning.js';
|
|
5
|
+
/**
|
|
6
|
+
* Make a list of ENRs for a given list of p2p private keys and ports
|
|
7
|
+
* @param p2pPrivateKeys - The private keys of the p2p nodes
|
|
8
|
+
* @param ports - The ports of the p2p nodes
|
|
9
|
+
* @returns A list of ENRs
|
|
10
|
+
*/ export async function makeEnrs(p2pPrivateKeys, ports, config) {
|
|
11
|
+
return await Promise.all(p2pPrivateKeys.map((pk, i)=>{
|
|
12
|
+
return makeEnr(pk, ports[i], config);
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Make an ENR for a given p2p private key and port
|
|
17
|
+
* @param p2pPrivateKey - The private key of the p2p node
|
|
18
|
+
* @param port - The port of the p2p node
|
|
19
|
+
* @returns The ENR of the p2p node
|
|
20
|
+
*/ export async function makeEnr(p2pPrivateKey, port, config) {
|
|
21
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
|
|
22
|
+
const enr = SignableENR.createFromPeerId(peerId);
|
|
23
|
+
const udpAnnounceAddress = `127.0.0.1:${port}`;
|
|
24
|
+
const tcpAnnounceAddress = `127.0.0.1:${port}`;
|
|
25
|
+
const udpPublicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
|
|
26
|
+
const tcpPublicAddr = multiaddr(convertToMultiaddr(tcpAnnounceAddress, 'tcp'));
|
|
27
|
+
// ENRS must include the network and a discoverable address (udp for discv5)
|
|
28
|
+
setAztecEnrKey(enr, config);
|
|
29
|
+
enr.setLocationMultiaddr(udpPublicAddr);
|
|
30
|
+
enr.setLocationMultiaddr(tcpPublicAddr);
|
|
31
|
+
return enr.encodeTxt();
|
|
32
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
4
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
5
|
+
import type { P2PClient } from '../client/p2p_client.js';
|
|
6
|
+
import type { P2PConfig } from '../config.js';
|
|
7
|
+
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
8
|
+
import type { TxPool } from '../mem_pools/tx_pool/index.js';
|
|
9
|
+
interface MakeTestP2PClientOptions {
|
|
10
|
+
mockAttestationPool: AttestationPool;
|
|
11
|
+
mockTxPool: TxPool;
|
|
12
|
+
mockEpochCache: EpochCache;
|
|
13
|
+
mockWorldState: WorldStateSynchronizer;
|
|
14
|
+
alwaysTrueVerifier?: boolean;
|
|
15
|
+
p2pBaseConfig: P2PConfig;
|
|
16
|
+
p2pConfigOverrides?: Partial<P2PConfig>;
|
|
17
|
+
logger?: Logger;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a single P2P client for testing purposes.
|
|
21
|
+
* @param peerIdPrivateKey - The private key of the peer.
|
|
22
|
+
* @param port - The port to run the client on.
|
|
23
|
+
* @param peers - The peers to connect to.
|
|
24
|
+
* @param options - The options for the client.
|
|
25
|
+
* @returns The created client.
|
|
26
|
+
*/
|
|
27
|
+
export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger, }: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a number of P2P clients for testing purposes.
|
|
30
|
+
* @param numberOfPeers - The number of clients to create.
|
|
31
|
+
* @param options - The options for the clients.
|
|
32
|
+
* @returns The created clients.
|
|
33
|
+
*/
|
|
34
|
+
export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>[]>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=make-test-p2p-clients.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAM5D,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAwC,GACzC,EAAE,wBAAwB,0CA8C5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,4CAiBnG"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
5
|
+
import { createP2PClient } from '../client/index.js';
|
|
6
|
+
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
7
|
+
import { getPorts } from './get-ports.js';
|
|
8
|
+
import { makeEnrs } from './make-enrs.js';
|
|
9
|
+
import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp-nodes.js';
|
|
10
|
+
/**
|
|
11
|
+
* Creates a single P2P client for testing purposes.
|
|
12
|
+
* @param peerIdPrivateKey - The private key of the peer.
|
|
13
|
+
* @param port - The port to run the client on.
|
|
14
|
+
* @param peers - The peers to connect to.
|
|
15
|
+
* @param options - The options for the client.
|
|
16
|
+
* @returns The created client.
|
|
17
|
+
*/ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysTrueVerifier = true, p2pBaseConfig, p2pConfigOverrides = {}, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger = createLogger('p2p-test-client') }) {
|
|
18
|
+
const addr = `127.0.0.1:${port}`;
|
|
19
|
+
const listenAddr = `0.0.0.0:${port}`;
|
|
20
|
+
// Filter nodes so that we only dial active peers
|
|
21
|
+
const config = {
|
|
22
|
+
...p2pBaseConfig,
|
|
23
|
+
p2pEnabled: true,
|
|
24
|
+
peerIdPrivateKey,
|
|
25
|
+
tcpListenAddress: listenAddr,
|
|
26
|
+
udpListenAddress: listenAddr,
|
|
27
|
+
tcpAnnounceAddress: addr,
|
|
28
|
+
udpAnnounceAddress: addr,
|
|
29
|
+
bootstrapNodes: peers,
|
|
30
|
+
peerCheckIntervalMS: 1000,
|
|
31
|
+
maxPeerCount: 10,
|
|
32
|
+
bootstrapNodesAsFullPeers: true,
|
|
33
|
+
...p2pConfigOverrides
|
|
34
|
+
};
|
|
35
|
+
const l2BlockSource = new MockL2BlockSource();
|
|
36
|
+
await l2BlockSource.createBlocks(100);
|
|
37
|
+
const proofVerifier = alwaysTrueVerifier ? new AlwaysTrueCircuitVerifier() : new AlwaysFalseCircuitVerifier();
|
|
38
|
+
const kvStore = await openTmpStore('test');
|
|
39
|
+
const deps = {
|
|
40
|
+
txPool: mockTxPool,
|
|
41
|
+
attestationPool: mockAttestationPool,
|
|
42
|
+
store: kvStore,
|
|
43
|
+
logger
|
|
44
|
+
};
|
|
45
|
+
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, mockWorldState, mockEpochCache, undefined, deps);
|
|
46
|
+
await client.start();
|
|
47
|
+
return client;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a number of P2P clients for testing purposes.
|
|
51
|
+
* @param numberOfPeers - The number of clients to create.
|
|
52
|
+
* @param options - The options for the clients.
|
|
53
|
+
* @returns The created clients.
|
|
54
|
+
*/ export async function makeTestP2PClients(numberOfPeers, testConfig) {
|
|
55
|
+
const clients = [];
|
|
56
|
+
const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers);
|
|
57
|
+
const ports = await getPorts(numberOfPeers);
|
|
58
|
+
const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testConfig.p2pBaseConfig);
|
|
59
|
+
for(let i = 0; i < numberOfPeers; i++){
|
|
60
|
+
const client = await makeTestP2PClient(peerIdPrivateKeys[i], ports[i], peerEnrs, {
|
|
61
|
+
...testConfig,
|
|
62
|
+
logger: createLogger(`p2p:${i}`)
|
|
63
|
+
});
|
|
64
|
+
clients.push(client);
|
|
65
|
+
}
|
|
66
|
+
await Promise.all(clients.map((client)=>client.isReady()));
|
|
67
|
+
return clients;
|
|
68
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
3
|
+
import { type ChainConfig } from '@aztec/stdlib/config';
|
|
4
|
+
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import type { P2PClientType } from '@aztec/stdlib/p2p';
|
|
6
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
7
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
8
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
9
|
+
import type { PeerId } from '@libp2p/interface';
|
|
10
|
+
import { type Libp2p } from 'libp2p';
|
|
11
|
+
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
12
|
+
import type { BootnodeConfig } from '../config.js';
|
|
13
|
+
import type { MemPools } from '../mem_pools/interface.js';
|
|
14
|
+
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
15
|
+
import type { PeerScoring } from '../services/peer-manager/peer_scoring.js';
|
|
16
|
+
import { type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
|
|
17
|
+
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
18
|
+
/**
|
|
19
|
+
* Creates a libp2p node, pre configured.
|
|
20
|
+
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
21
|
+
* @returns Lip2p node
|
|
22
|
+
*/
|
|
23
|
+
export declare function createLibp2pNode(boostrapAddrs?: string[], peerId?: PeerId, port?: number, enableGossipSub?: boolean, start?: boolean): Promise<Libp2p>;
|
|
24
|
+
/**
|
|
25
|
+
* Test Libp2p service
|
|
26
|
+
* P2P functionality is operational, however everything else is default
|
|
27
|
+
*
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
export declare function createTestLibP2PService<T extends P2PClientType>(clientType: T, boostrapAddrs: string[] | undefined, l2BlockSource: L2BlockSource, worldStateSynchronizer: WorldStateSynchronizer, epochCache: EpochCache, mempools: MemPools<T>, telemetry: TelemetryClient, port?: number, peerId?: PeerId, chainConfig?: ChainConfig): Promise<LibP2PService<T>>;
|
|
31
|
+
/**
|
|
32
|
+
* A p2p / req resp node pairing the req node will always contain the p2p node.
|
|
33
|
+
* they are provided as a pair to allow access the p2p node directly
|
|
34
|
+
*/
|
|
35
|
+
export type ReqRespNode = {
|
|
36
|
+
p2p: Libp2p;
|
|
37
|
+
req: ReqResp;
|
|
38
|
+
};
|
|
39
|
+
export declare const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers;
|
|
40
|
+
export declare const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators;
|
|
41
|
+
/**
|
|
42
|
+
* @param numberOfNodes - the number of nodes to create
|
|
43
|
+
* @returns An array of the created nodes
|
|
44
|
+
*/
|
|
45
|
+
export declare const createNodes: (peerScoring: PeerScoring, numberOfNodes: number) => Promise<ReqRespNode[]>;
|
|
46
|
+
export declare const startNodes: (nodes: ReqRespNode[], subProtocolHandlers?: ReqRespSubProtocolHandlers, subProtocolValidators?: ReqRespSubProtocolValidators) => Promise<void>;
|
|
47
|
+
export declare const stopNodes: (nodes: ReqRespNode[]) => Promise<void>;
|
|
48
|
+
export declare const createReqResp: (peerScoring: PeerScoring) => Promise<ReqRespNode>;
|
|
49
|
+
export declare const connectToPeers: (nodes: ReqRespNode[]) => Promise<void>;
|
|
50
|
+
export declare class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
51
|
+
verifyProof(_tx: Tx): Promise<boolean>;
|
|
52
|
+
}
|
|
53
|
+
export declare class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
54
|
+
verifyProof(_tx: Tx): Promise<boolean>;
|
|
55
|
+
}
|
|
56
|
+
export declare function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig;
|
|
57
|
+
export declare function createBootstrapNodeFromPrivateKey(privateKey: string, port: number, telemetry?: TelemetryClient, chainConfig?: ChainConfig): Promise<BootstrapNode>;
|
|
58
|
+
/**
|
|
59
|
+
* Create a bootstrap node ENR
|
|
60
|
+
* @param privateKey - the private key of the bootstrap node
|
|
61
|
+
* @param port - the port of the bootstrap node
|
|
62
|
+
* @returns the bootstrap node ENR
|
|
63
|
+
*/
|
|
64
|
+
export declare function getBootstrapNodeEnr(privateKey: string, port: number): Promise<SignableENR>;
|
|
65
|
+
export declare function createBootstrapNode(port: number, telemetry?: TelemetryClient, chainConfig?: ChainConfig): Promise<BootstrapNode>;
|
|
66
|
+
//# sourceMappingURL=reqresp-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { timesParallel } from '@aztec/foundation/collection';
|
|
2
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
3
|
+
import { emptyChainConfig } from '@aztec/stdlib/config';
|
|
4
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
6
|
+
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
7
|
+
import { noise } from '@chainsafe/libp2p-noise';
|
|
8
|
+
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
9
|
+
import { bootstrap } from '@libp2p/bootstrap';
|
|
10
|
+
import { identify } from '@libp2p/identify';
|
|
11
|
+
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
12
|
+
import { tcp } from '@libp2p/tcp';
|
|
13
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
14
|
+
import getPort from 'get-port';
|
|
15
|
+
import { createLibp2p } from 'libp2p';
|
|
16
|
+
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
17
|
+
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
18
|
+
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
19
|
+
import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
|
|
20
|
+
import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
|
|
21
|
+
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
22
|
+
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
23
|
+
/**
|
|
24
|
+
* Creates a libp2p node, pre configured.
|
|
25
|
+
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
26
|
+
* @returns Lip2p node
|
|
27
|
+
*/ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
|
|
28
|
+
port = port ?? await getPort();
|
|
29
|
+
const options = {
|
|
30
|
+
start,
|
|
31
|
+
addresses: {
|
|
32
|
+
listen: [
|
|
33
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
34
|
+
],
|
|
35
|
+
announce: [
|
|
36
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
connectionEncryption: [
|
|
40
|
+
noise()
|
|
41
|
+
],
|
|
42
|
+
streamMuxers: [
|
|
43
|
+
yamux()
|
|
44
|
+
],
|
|
45
|
+
transports: [
|
|
46
|
+
tcp()
|
|
47
|
+
],
|
|
48
|
+
services: {
|
|
49
|
+
identify: identify({
|
|
50
|
+
protocolPrefix: 'aztec'
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
if (boostrapAddrs.length > 0) {
|
|
55
|
+
options.peerDiscovery = [
|
|
56
|
+
bootstrap({
|
|
57
|
+
list: boostrapAddrs
|
|
58
|
+
})
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
if (peerId) {
|
|
62
|
+
options.peerId = peerId;
|
|
63
|
+
}
|
|
64
|
+
if (enableGossipSub) {
|
|
65
|
+
options.services.pubsub = gossipsub({
|
|
66
|
+
allowPublishToZeroTopicPeers: true
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return await createLibp2p(options);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Test Libp2p service
|
|
73
|
+
* P2P functionality is operational, however everything else is default
|
|
74
|
+
*
|
|
75
|
+
*
|
|
76
|
+
*/ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
|
|
77
|
+
peerId = peerId ?? await createSecp256k1PeerId();
|
|
78
|
+
const config = {
|
|
79
|
+
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
80
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
81
|
+
tcpListenAddress: `0.0.0.0:${port}`,
|
|
82
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
83
|
+
bootstrapNodes: boostrapAddrs,
|
|
84
|
+
peerCheckIntervalMS: 1000,
|
|
85
|
+
maxPeerCount: 5,
|
|
86
|
+
p2pEnabled: true,
|
|
87
|
+
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
|
|
88
|
+
bootstrapNodeEnrVersionCheck: false,
|
|
89
|
+
...chainConfig
|
|
90
|
+
};
|
|
91
|
+
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
92
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
93
|
+
// No bootstrap nodes provided as the libp2p service will register them in the constructor
|
|
94
|
+
const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
|
|
95
|
+
return new LibP2PService(clientType, config, p2pNode, discoveryService, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry);
|
|
96
|
+
}
|
|
97
|
+
// Mock sub protocol handlers
|
|
98
|
+
export const MOCK_SUB_PROTOCOL_HANDLERS = {
|
|
99
|
+
[ReqRespSubProtocol.PING]: pingHandler,
|
|
100
|
+
[ReqRespSubProtocol.STATUS]: statusHandler,
|
|
101
|
+
[ReqRespSubProtocol.TX]: (_msg)=>Promise.resolve(Buffer.from('tx')),
|
|
102
|
+
[ReqRespSubProtocol.GOODBYE]: (_msg)=>Promise.resolve(Buffer.from('goodbye')),
|
|
103
|
+
[ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block'))
|
|
104
|
+
};
|
|
105
|
+
// By default, all requests are valid
|
|
106
|
+
// If you want to test an invalid response, you can override the validator
|
|
107
|
+
export const MOCK_SUB_PROTOCOL_VALIDATORS = {
|
|
108
|
+
[ReqRespSubProtocol.PING]: noopValidator,
|
|
109
|
+
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
110
|
+
[ReqRespSubProtocol.TX]: noopValidator,
|
|
111
|
+
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
112
|
+
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* @param numberOfNodes - the number of nodes to create
|
|
116
|
+
* @returns An array of the created nodes
|
|
117
|
+
*/ export const createNodes = (peerScoring, numberOfNodes)=>{
|
|
118
|
+
return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
|
|
119
|
+
};
|
|
120
|
+
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
|
|
121
|
+
for (const node of nodes){
|
|
122
|
+
await node.req.start(subProtocolHandlers, subProtocolValidators);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
export const stopNodes = async (nodes)=>{
|
|
126
|
+
const stopPromises = nodes.flatMap((node)=>[
|
|
127
|
+
node.req.stop(),
|
|
128
|
+
node.p2p.stop()
|
|
129
|
+
]);
|
|
130
|
+
await Promise.all(stopPromises);
|
|
131
|
+
};
|
|
132
|
+
// Create a req resp node, exposing the underlying p2p node
|
|
133
|
+
export const createReqResp = async (peerScoring)=>{
|
|
134
|
+
const p2p = await createLibp2pNode();
|
|
135
|
+
const config = {
|
|
136
|
+
overallRequestTimeoutMs: 4000,
|
|
137
|
+
individualRequestTimeoutMs: 2000
|
|
138
|
+
};
|
|
139
|
+
const req = new ReqResp(config, p2p, peerScoring);
|
|
140
|
+
return {
|
|
141
|
+
p2p,
|
|
142
|
+
req
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
// Given a node list; hand shake all of the nodes with each other
|
|
146
|
+
export const connectToPeers = async (nodes)=>{
|
|
147
|
+
for (const node of nodes){
|
|
148
|
+
for (const otherNode of nodes){
|
|
149
|
+
if (node === otherNode) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const addr = otherNode.p2p.getMultiaddrs()[0];
|
|
153
|
+
await node.p2p.dial(addr);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
// Mock circuit verifier for testing - reimplementation from bb to avoid dependency
|
|
158
|
+
export class AlwaysTrueCircuitVerifier {
|
|
159
|
+
verifyProof(_tx) {
|
|
160
|
+
return Promise.resolve(true);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class AlwaysFalseCircuitVerifier {
|
|
164
|
+
verifyProof(_tx) {
|
|
165
|
+
return Promise.resolve(false);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Bootnodes
|
|
169
|
+
export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
|
|
170
|
+
return {
|
|
171
|
+
l1ChainId: chainConfig.l1ChainId,
|
|
172
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
173
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
174
|
+
peerIdPrivateKey: privateKey,
|
|
175
|
+
dataDirectory: undefined,
|
|
176
|
+
dataStoreMapSizeKB: 0,
|
|
177
|
+
bootstrapNodes: []
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
181
|
+
const config = createBootstrapNodeConfig(privateKey, port, chainConfig);
|
|
182
|
+
return startBootstrapNode(config, telemetry);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create a bootstrap node ENR
|
|
186
|
+
* @param privateKey - the private key of the bootstrap node
|
|
187
|
+
* @param port - the port of the bootstrap node
|
|
188
|
+
* @returns the bootstrap node ENR
|
|
189
|
+
*/ export async function getBootstrapNodeEnr(privateKey, port) {
|
|
190
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
|
|
191
|
+
const enr = SignableENR.createFromPeerId(peerId);
|
|
192
|
+
const listenAddrUdp = multiaddr(convertToMultiaddr(`127.0.0.1:${port}`, 'udp'));
|
|
193
|
+
enr.setLocationMultiaddr(listenAddrUdp);
|
|
194
|
+
return enr;
|
|
195
|
+
}
|
|
196
|
+
export async function createBootstrapNode(port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
197
|
+
const peerId = await createSecp256k1PeerId();
|
|
198
|
+
const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port, chainConfig);
|
|
199
|
+
return startBootstrapNode(config, telemetry);
|
|
200
|
+
}
|
|
201
|
+
async function startBootstrapNode(config, telemetry) {
|
|
202
|
+
// Open an ephemeral store that will only exist in memory
|
|
203
|
+
const store = await openTmpStore('bootstrap-node', true);
|
|
204
|
+
const bootstrapNode = new BootstrapNode(store, telemetry);
|
|
205
|
+
await bootstrapNode.start(config);
|
|
206
|
+
return bootstrapNode;
|
|
207
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":""}
|