@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
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The error codes for the ReqResp protocol
|
|
3
|
-
*/
|
|
4
|
-
export var ReqRespStatus;
|
|
5
|
-
(function (ReqRespStatus) {
|
|
3
|
+
*/ export var ReqRespStatus = /*#__PURE__*/ function(ReqRespStatus) {
|
|
6
4
|
ReqRespStatus[ReqRespStatus["SUCCESS"] = 0] = "SUCCESS";
|
|
7
5
|
ReqRespStatus[ReqRespStatus["RATE_LIMIT_EXCEEDED"] = 1] = "RATE_LIMIT_EXCEEDED";
|
|
8
6
|
ReqRespStatus[ReqRespStatus["BADLY_FORMED_REQUEST"] = 2] = "BADLY_FORMED_REQUEST";
|
|
9
7
|
ReqRespStatus[ReqRespStatus["UNKNOWN"] = 127] = "UNKNOWN";
|
|
10
|
-
|
|
8
|
+
return ReqRespStatus;
|
|
9
|
+
}({});
|
|
11
10
|
export class ReqRespStatusError extends Error {
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The status code
|
|
13
|
+
*/ status;
|
|
14
|
+
constructor(status){
|
|
13
15
|
super(`ReqResp Error: ${prettyPrintReqRespStatus(status)}`);
|
|
14
16
|
this.status = status;
|
|
15
17
|
}
|
|
@@ -20,15 +22,14 @@ export class ReqRespStatusError extends Error {
|
|
|
20
22
|
* @returns
|
|
21
23
|
*
|
|
22
24
|
* @throws ReqRespStatusError if the chunk is not valid
|
|
23
|
-
*/
|
|
24
|
-
export function parseStatusChunk(chunk) {
|
|
25
|
+
*/ export function parseStatusChunk(chunk) {
|
|
25
26
|
if (chunk.length !== 1) {
|
|
26
|
-
throw new ReqRespStatusError(
|
|
27
|
+
throw new ReqRespStatusError(127);
|
|
27
28
|
}
|
|
28
29
|
const status = chunk[0];
|
|
29
30
|
// Check if status is a valid ReqRespStatus value
|
|
30
31
|
if (!(status in ReqRespStatus)) {
|
|
31
|
-
throw new ReqRespStatusError(
|
|
32
|
+
throw new ReqRespStatusError(127);
|
|
32
33
|
}
|
|
33
34
|
return status;
|
|
34
35
|
}
|
|
@@ -36,17 +37,15 @@ export function parseStatusChunk(chunk) {
|
|
|
36
37
|
* Pretty print the ReqResp status
|
|
37
38
|
* @param status
|
|
38
39
|
* @returns
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
case ReqRespStatus.SUCCESS:
|
|
40
|
+
*/ export function prettyPrintReqRespStatus(status) {
|
|
41
|
+
switch(status){
|
|
42
|
+
case 0:
|
|
43
43
|
return 'SUCCESS';
|
|
44
|
-
case
|
|
44
|
+
case 1:
|
|
45
45
|
return 'RATE_LIMIT_EXCEEDED';
|
|
46
|
-
case
|
|
46
|
+
case 2:
|
|
47
47
|
return 'BADLY_FORMED_REQUEST';
|
|
48
|
-
case
|
|
48
|
+
case 127:
|
|
49
49
|
return 'UNKNOWN';
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3Avc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksYUFLWDtBQUxELFdBQVksYUFBYTtJQUN2Qix1REFBVyxDQUFBO0lBQ1gsK0VBQXVCLENBQUE7SUFDdkIsaUZBQXdCLENBQUE7SUFDeEIseURBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxhQUFhLEtBQWIsYUFBYSxRQUt4QjtBQUVELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBTTNDLFlBQVksTUFBcUI7UUFDL0IsS0FBSyxDQUFDLGtCQUFrQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWlCO0lBQ2hELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsaURBQWlEO0lBQ2pELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sTUFBdUIsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUFxQjtJQUM1RCxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxhQUFhLENBQUMsT0FBTztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLGFBQWEsQ0FBQyxtQkFBbUI7WUFDcEMsT0FBTyxxQkFBcUIsQ0FBQztRQUMvQixLQUFLLGFBQWEsQ0FBQyxvQkFBb0I7WUFDckMsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxLQUFLLGFBQWEsQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import type {
|
|
2
|
+
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
|
|
3
4
|
import type { ENR } from '@chainsafe/enr';
|
|
4
5
|
import type { PeerId } from '@libp2p/interface';
|
|
5
6
|
import type EventEmitter from 'events';
|
|
6
|
-
import {
|
|
7
|
+
import type { ReqRespSubProtocol, SubProtocolMap } from './reqresp/interface.js';
|
|
7
8
|
export declare enum PeerDiscoveryState {
|
|
8
9
|
RUNNING = "running",
|
|
9
10
|
STOPPED = "stopped"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,
|
|
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"}
|
package/dest/services/service.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export var PeerDiscoveryState
|
|
2
|
-
(function (PeerDiscoveryState) {
|
|
1
|
+
export var PeerDiscoveryState = /*#__PURE__*/ function(PeerDiscoveryState) {
|
|
3
2
|
PeerDiscoveryState["RUNNING"] = "running";
|
|
4
3
|
PeerDiscoveryState["STOPPED"] = "stopped";
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
return PeerDiscoveryState;
|
|
5
|
+
}({});
|
|
@@ -3,13 +3,11 @@ import { generatePrivateKey } from 'viem/accounts';
|
|
|
3
3
|
* Generate a list of peer id private keys
|
|
4
4
|
* @param numberOfPeers - The number of peer id private keys to generate
|
|
5
5
|
* @returns A list of peer id private keys
|
|
6
|
-
*/
|
|
7
|
-
export function generatePeerIdPrivateKeys(numberOfPeers) {
|
|
6
|
+
*/ export function generatePeerIdPrivateKeys(numberOfPeers) {
|
|
8
7
|
const peerIdPrivateKeys = [];
|
|
9
|
-
for
|
|
8
|
+
for(let i = 0; i < numberOfPeers; i++){
|
|
10
9
|
// magic number is multiaddr prefix: https://multiformats.io/multiaddr/
|
|
11
10
|
peerIdPrivateKeys.push('08021220' + generatePrivateKey().slice(2, 68));
|
|
12
11
|
}
|
|
13
12
|
return peerIdPrivateKeys;
|
|
14
13
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcGVlci1pZC1wcml2YXRlLWtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL2dlbmVyYXRlLXBlZXItaWQtcHJpdmF0ZS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLGFBQXFCO0lBQzdELE1BQU0saUJBQWlCLEdBQWEsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2Qyx1RUFBdUU7UUFDdkUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDIn0=
|
|
@@ -3,6 +3,6 @@ import getPort from 'get-port';
|
|
|
3
3
|
* Get a list of ports for a given number of peers
|
|
4
4
|
* @param numberOfPeers - The number of peers to get ports for
|
|
5
5
|
* @returns A list of ports
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
*/ export const getPorts = (numberOfPeers)=>Promise.all(Array.from({
|
|
7
|
+
length: numberOfPeers
|
|
8
|
+
}, ()=>getPort()));
|
|
@@ -3,4 +3,3 @@ export * from './get-ports.js';
|
|
|
3
3
|
export * from './make-enrs.js';
|
|
4
4
|
export * from './make-test-p2p-clients.js';
|
|
5
5
|
export * from './reqresp-nodes.js';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1oZWxwZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvQkFBb0IsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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"}
|
|
@@ -7,9 +7,8 @@ import { setAztecEnrKey } from '../versioning.js';
|
|
|
7
7
|
* @param p2pPrivateKeys - The private keys of the p2p nodes
|
|
8
8
|
* @param ports - The ports of the p2p nodes
|
|
9
9
|
* @returns A list of ENRs
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
return await Promise.all(p2pPrivateKeys.map((pk, i) => {
|
|
10
|
+
*/ export async function makeEnrs(p2pPrivateKeys, ports, config) {
|
|
11
|
+
return await Promise.all(p2pPrivateKeys.map((pk, i)=>{
|
|
13
12
|
return makeEnr(pk, ports[i], config);
|
|
14
13
|
}));
|
|
15
14
|
}
|
|
@@ -18,8 +17,7 @@ export async function makeEnrs(p2pPrivateKeys, ports, config) {
|
|
|
18
17
|
* @param p2pPrivateKey - The private key of the p2p node
|
|
19
18
|
* @param port - The port of the p2p node
|
|
20
19
|
* @returns The ENR of the p2p node
|
|
21
|
-
*/
|
|
22
|
-
export async function makeEnr(p2pPrivateKey, port, config) {
|
|
20
|
+
*/ export async function makeEnr(p2pPrivateKey, port, config) {
|
|
23
21
|
const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
|
|
24
22
|
const enr = SignableENR.createFromPeerId(peerId);
|
|
25
23
|
const udpAnnounceAddress = `127.0.0.1:${port}`;
|
|
@@ -32,4 +30,3 @@ export async function makeEnr(p2pPrivateKey, port, config) {
|
|
|
32
30
|
enr.setLocationMultiaddr(tcpPublicAddr);
|
|
33
31
|
return enr.encodeTxt();
|
|
34
32
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1lbnJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtaGVscGVycy9tYWtlLWVucnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQUMsY0FBd0IsRUFBRSxLQUFlLEVBQUUsTUFBbUI7SUFDM0YsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RCLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQUMsYUFBcUIsRUFBRSxJQUFZLEVBQUUsTUFBbUI7SUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQ0FBZ0MsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFakQsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDO0lBQy9DLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUUvRSw0RUFBNEU7SUFDNUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLENBQUMifQ==
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type EpochCache } from '@aztec/epoch-cache';
|
|
1
|
+
import type { EpochCache } from '@aztec/epoch-cache';
|
|
3
2
|
import { type Logger } from '@aztec/foundation/log';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
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';
|
|
8
9
|
interface MakeTestP2PClientOptions {
|
|
9
10
|
mockAttestationPool: AttestationPool;
|
|
10
11
|
mockTxPool: TxPool;
|
|
@@ -1 +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,EAAE,
|
|
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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
2
|
-
import { P2PClientType } from '@aztec/circuit-types';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
5
5
|
import { createP2PClient } from '../client/index.js';
|
|
6
6
|
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
7
7
|
import { getPorts } from './get-ports.js';
|
|
@@ -14,8 +14,7 @@ import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp
|
|
|
14
14
|
* @param peers - The peers to connect to.
|
|
15
15
|
* @param options - The options for the client.
|
|
16
16
|
* @returns The created client.
|
|
17
|
-
*/
|
|
18
|
-
export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysTrueVerifier = true, p2pBaseConfig, p2pConfigOverrides = {}, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger = createLogger('p2p-test-client'), }) {
|
|
17
|
+
*/ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysTrueVerifier = true, p2pBaseConfig, p2pConfigOverrides = {}, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger = createLogger('p2p-test-client') }) {
|
|
19
18
|
const addr = `127.0.0.1:${port}`;
|
|
20
19
|
const listenAddr = `0.0.0.0:${port}`;
|
|
21
20
|
// Filter nodes so that we only dial active peers
|
|
@@ -23,14 +22,15 @@ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysT
|
|
|
23
22
|
...p2pBaseConfig,
|
|
24
23
|
p2pEnabled: true,
|
|
25
24
|
peerIdPrivateKey,
|
|
26
|
-
tcpListenAddress: listenAddr,
|
|
25
|
+
tcpListenAddress: listenAddr,
|
|
27
26
|
udpListenAddress: listenAddr,
|
|
28
27
|
tcpAnnounceAddress: addr,
|
|
29
28
|
udpAnnounceAddress: addr,
|
|
30
29
|
bootstrapNodes: peers,
|
|
31
30
|
peerCheckIntervalMS: 1000,
|
|
32
31
|
maxPeerCount: 10,
|
|
33
|
-
|
|
32
|
+
bootstrapNodesAsFullPeers: true,
|
|
33
|
+
...p2pConfigOverrides
|
|
34
34
|
};
|
|
35
35
|
const l2BlockSource = new MockL2BlockSource();
|
|
36
36
|
await l2BlockSource.createBlocks(100);
|
|
@@ -40,7 +40,7 @@ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysT
|
|
|
40
40
|
txPool: mockTxPool,
|
|
41
41
|
attestationPool: mockAttestationPool,
|
|
42
42
|
store: kvStore,
|
|
43
|
-
logger
|
|
43
|
+
logger
|
|
44
44
|
};
|
|
45
45
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, mockWorldState, mockEpochCache, undefined, deps);
|
|
46
46
|
await client.start();
|
|
@@ -51,20 +51,18 @@ export async function makeTestP2PClient(peerIdPrivateKey, port, peers, { alwaysT
|
|
|
51
51
|
* @param numberOfPeers - The number of clients to create.
|
|
52
52
|
* @param options - The options for the clients.
|
|
53
53
|
* @returns The created clients.
|
|
54
|
-
*/
|
|
55
|
-
export async function makeTestP2PClients(numberOfPeers, testConfig) {
|
|
54
|
+
*/ export async function makeTestP2PClients(numberOfPeers, testConfig) {
|
|
56
55
|
const clients = [];
|
|
57
56
|
const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers);
|
|
58
57
|
const ports = await getPorts(numberOfPeers);
|
|
59
58
|
const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testConfig.p2pBaseConfig);
|
|
60
|
-
for
|
|
59
|
+
for(let i = 0; i < numberOfPeers; i++){
|
|
61
60
|
const client = await makeTestP2PClient(peerIdPrivateKeys[i], ports[i], peerEnrs, {
|
|
62
61
|
...testConfig,
|
|
63
|
-
logger: createLogger(`p2p:${i}`)
|
|
62
|
+
logger: createLogger(`p2p:${i}`)
|
|
64
63
|
});
|
|
65
64
|
clients.push(client);
|
|
66
65
|
}
|
|
67
|
-
await Promise.all(clients.map(client
|
|
66
|
+
await Promise.all(clients.map((client)=>client.isReady()));
|
|
68
67
|
return clients;
|
|
69
68
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS10ZXN0LXAycC1jbGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtaGVscGVycy9tYWtlLXRlc3QtcDJwLWNsaWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBYTNGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxnQkFBd0IsRUFDeEIsSUFBWSxFQUNaLEtBQWUsRUFDZixFQUNFLGtCQUFrQixHQUFHLElBQUksRUFDekIsYUFBYSxFQUNiLGtCQUFrQixHQUFHLEVBQUUsRUFDdkIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxFQUNkLE1BQU0sR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsR0FDZjtJQUUzQixNQUFNLElBQUksR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFFckMsaURBQWlEO0lBRWpELE1BQU0sTUFBTSxHQUFnQztRQUMxQyxHQUFHLGFBQWE7UUFDaEIsVUFBVSxFQUFFLElBQUk7UUFDaEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0I7UUFDOUMsZ0JBQWdCLEVBQUUsVUFBVTtRQUM1QixrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsY0FBYyxFQUFFLEtBQUs7UUFDckIsbUJBQW1CLEVBQUUsSUFBSTtRQUN6QixZQUFZLEVBQUUsRUFBRTtRQUNoQixHQUFHLGtCQUFrQjtLQUNTLENBQUM7SUFFakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQzlDLE1BQU0sYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLDBCQUEwQixFQUFFLENBQUM7SUFDOUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUc7UUFDWCxNQUFNLEVBQUUsVUFBK0I7UUFDdkMsZUFBZSxFQUFFLG1CQUFpRDtRQUNsRSxLQUFLLEVBQUUsT0FBTztRQUNkLE1BQU07S0FDUCxDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQ2xDLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULElBQUksQ0FDTCxDQUFDO0lBQ0YsTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFckIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxhQUFxQixFQUFFLFVBQW9DO0lBQ2xHLE1BQU0sT0FBTyxHQUFnQixFQUFFLENBQUM7SUFDaEMsTUFBTSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVuRSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXBGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUU7WUFDL0UsR0FBRyxVQUFVO1lBQ2IsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIn0=
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { type
|
|
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';
|
|
4
7
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
-
import {
|
|
8
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
9
|
+
import type { PeerId } from '@libp2p/interface';
|
|
6
10
|
import { type Libp2p } from 'libp2p';
|
|
7
11
|
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
12
|
+
import type { BootnodeConfig } from '../config.js';
|
|
13
|
+
import type { MemPools } from '../mem_pools/interface.js';
|
|
10
14
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
11
|
-
import {
|
|
15
|
+
import type { PeerScoring } from '../services/peer-manager/peer_scoring.js';
|
|
12
16
|
import { type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
|
|
13
17
|
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
14
18
|
/**
|
|
@@ -51,5 +55,12 @@ export declare class AlwaysFalseCircuitVerifier implements ClientProtocolCircuit
|
|
|
51
55
|
}
|
|
52
56
|
export declare function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig;
|
|
53
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>;
|
|
54
65
|
export declare function createBootstrapNode(port: number, telemetry?: TelemetryClient, chainConfig?: ChainConfig): Promise<BootstrapNode>;
|
|
55
66
|
//# sourceMappingURL=reqresp-nodes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { emptyChainConfig } from '@aztec/circuit-types/config';
|
|
2
1
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
2
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
3
|
+
import { emptyChainConfig } from '@aztec/stdlib/config';
|
|
4
4
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
5
6
|
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
6
7
|
import { noise } from '@chainsafe/libp2p-noise';
|
|
7
8
|
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
@@ -9,41 +10,52 @@ import { bootstrap } from '@libp2p/bootstrap';
|
|
|
9
10
|
import { identify } from '@libp2p/identify';
|
|
10
11
|
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
11
12
|
import { tcp } from '@libp2p/tcp';
|
|
13
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
12
14
|
import getPort from 'get-port';
|
|
13
15
|
import { createLibp2p } from 'libp2p';
|
|
14
16
|
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
15
17
|
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
16
18
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
17
|
-
import { ReqRespSubProtocol, noopValidator
|
|
19
|
+
import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
|
|
18
20
|
import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
|
|
19
21
|
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
22
|
+
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
20
23
|
/**
|
|
21
24
|
* Creates a libp2p node, pre configured.
|
|
22
25
|
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
23
26
|
* @returns Lip2p node
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
port = port ?? (await getPort());
|
|
27
|
+
*/ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
|
|
28
|
+
port = port ?? await getPort();
|
|
27
29
|
const options = {
|
|
28
30
|
start,
|
|
29
31
|
addresses: {
|
|
30
|
-
listen: [
|
|
31
|
-
|
|
32
|
+
listen: [
|
|
33
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
34
|
+
],
|
|
35
|
+
announce: [
|
|
36
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
37
|
+
]
|
|
32
38
|
},
|
|
33
|
-
connectionEncryption: [
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
connectionEncryption: [
|
|
40
|
+
noise()
|
|
41
|
+
],
|
|
42
|
+
streamMuxers: [
|
|
43
|
+
yamux()
|
|
44
|
+
],
|
|
45
|
+
transports: [
|
|
46
|
+
tcp()
|
|
47
|
+
],
|
|
36
48
|
services: {
|
|
37
49
|
identify: identify({
|
|
38
|
-
protocolPrefix: 'aztec'
|
|
39
|
-
})
|
|
40
|
-
}
|
|
50
|
+
protocolPrefix: 'aztec'
|
|
51
|
+
})
|
|
52
|
+
}
|
|
41
53
|
};
|
|
42
54
|
if (boostrapAddrs.length > 0) {
|
|
43
55
|
options.peerDiscovery = [
|
|
44
56
|
bootstrap({
|
|
45
|
-
list: boostrapAddrs
|
|
46
|
-
})
|
|
57
|
+
list: boostrapAddrs
|
|
58
|
+
})
|
|
47
59
|
];
|
|
48
60
|
}
|
|
49
61
|
if (peerId) {
|
|
@@ -51,7 +63,7 @@ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableG
|
|
|
51
63
|
}
|
|
52
64
|
if (enableGossipSub) {
|
|
53
65
|
options.services.pubsub = gossipsub({
|
|
54
|
-
allowPublishToZeroTopicPeers: true
|
|
66
|
+
allowPublishToZeroTopicPeers: true
|
|
55
67
|
});
|
|
56
68
|
}
|
|
57
69
|
return await createLibp2p(options);
|
|
@@ -61,9 +73,8 @@ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableG
|
|
|
61
73
|
* P2P functionality is operational, however everything else is default
|
|
62
74
|
*
|
|
63
75
|
*
|
|
64
|
-
*/
|
|
65
|
-
|
|
66
|
-
peerId = peerId ?? (await createSecp256k1PeerId());
|
|
76
|
+
*/ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
|
|
77
|
+
peerId = peerId ?? await createSecp256k1PeerId();
|
|
67
78
|
const config = {
|
|
68
79
|
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
69
80
|
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
@@ -75,7 +86,7 @@ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2
|
|
|
75
86
|
p2pEnabled: true,
|
|
76
87
|
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
|
|
77
88
|
bootstrapNodeEnrVersionCheck: false,
|
|
78
|
-
...chainConfig
|
|
89
|
+
...chainConfig
|
|
79
90
|
};
|
|
80
91
|
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
81
92
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
@@ -87,9 +98,9 @@ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2
|
|
|
87
98
|
export const MOCK_SUB_PROTOCOL_HANDLERS = {
|
|
88
99
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
89
100
|
[ReqRespSubProtocol.STATUS]: statusHandler,
|
|
90
|
-
[ReqRespSubProtocol.TX]: (_msg)
|
|
91
|
-
[ReqRespSubProtocol.GOODBYE]: (_msg)
|
|
92
|
-
[ReqRespSubProtocol.BLOCK]: (_msg)
|
|
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'))
|
|
93
104
|
};
|
|
94
105
|
// By default, all requests are valid
|
|
95
106
|
// If you want to test an invalid response, you can override the validator
|
|
@@ -98,41 +109,43 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS = {
|
|
|
98
109
|
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
99
110
|
[ReqRespSubProtocol.TX]: noopValidator,
|
|
100
111
|
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
101
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
112
|
+
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
102
113
|
};
|
|
103
114
|
/**
|
|
104
115
|
* @param numberOfNodes - the number of nodes to create
|
|
105
116
|
* @returns An array of the created nodes
|
|
106
|
-
*/
|
|
107
|
-
|
|
108
|
-
return timesParallel(numberOfNodes, () => createReqResp(peerScoring));
|
|
117
|
+
*/ export const createNodes = (peerScoring, numberOfNodes)=>{
|
|
118
|
+
return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
|
|
109
119
|
};
|
|
110
|
-
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)
|
|
111
|
-
for (const node of nodes)
|
|
120
|
+
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
|
|
121
|
+
for (const node of nodes){
|
|
112
122
|
await node.req.start(subProtocolHandlers, subProtocolValidators);
|
|
113
123
|
}
|
|
114
124
|
};
|
|
115
|
-
export const stopNodes = async (nodes)
|
|
116
|
-
const stopPromises = nodes.flatMap(node
|
|
125
|
+
export const stopNodes = async (nodes)=>{
|
|
126
|
+
const stopPromises = nodes.flatMap((node)=>[
|
|
127
|
+
node.req.stop(),
|
|
128
|
+
node.p2p.stop()
|
|
129
|
+
]);
|
|
117
130
|
await Promise.all(stopPromises);
|
|
118
131
|
};
|
|
119
132
|
// Create a req resp node, exposing the underlying p2p node
|
|
120
|
-
export const createReqResp = async (peerScoring)
|
|
133
|
+
export const createReqResp = async (peerScoring)=>{
|
|
121
134
|
const p2p = await createLibp2pNode();
|
|
122
135
|
const config = {
|
|
123
136
|
overallRequestTimeoutMs: 4000,
|
|
124
|
-
individualRequestTimeoutMs: 2000
|
|
137
|
+
individualRequestTimeoutMs: 2000
|
|
125
138
|
};
|
|
126
139
|
const req = new ReqResp(config, p2p, peerScoring);
|
|
127
140
|
return {
|
|
128
141
|
p2p,
|
|
129
|
-
req
|
|
142
|
+
req
|
|
130
143
|
};
|
|
131
144
|
};
|
|
132
145
|
// Given a node list; hand shake all of the nodes with each other
|
|
133
|
-
export const connectToPeers = async (nodes)
|
|
134
|
-
for (const node of nodes)
|
|
135
|
-
for (const otherNode of nodes)
|
|
146
|
+
export const connectToPeers = async (nodes)=>{
|
|
147
|
+
for (const node of nodes){
|
|
148
|
+
for (const otherNode of nodes){
|
|
136
149
|
if (node === otherNode) {
|
|
137
150
|
continue;
|
|
138
151
|
}
|
|
@@ -155,19 +168,31 @@ export class AlwaysFalseCircuitVerifier {
|
|
|
155
168
|
// Bootnodes
|
|
156
169
|
export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
|
|
157
170
|
return {
|
|
171
|
+
l1ChainId: chainConfig.l1ChainId,
|
|
158
172
|
udpListenAddress: `0.0.0.0:${port}`,
|
|
159
173
|
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
160
174
|
peerIdPrivateKey: privateKey,
|
|
161
|
-
maxPeerCount: 100,
|
|
162
175
|
dataDirectory: undefined,
|
|
163
176
|
dataStoreMapSizeKB: 0,
|
|
164
|
-
|
|
177
|
+
bootstrapNodes: []
|
|
165
178
|
};
|
|
166
179
|
}
|
|
167
180
|
export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
168
181
|
const config = createBootstrapNodeConfig(privateKey, port, chainConfig);
|
|
169
182
|
return startBootstrapNode(config, telemetry);
|
|
170
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
|
+
}
|
|
171
196
|
export async function createBootstrapNode(port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
172
197
|
const peerId = await createSecp256k1PeerId();
|
|
173
198
|
const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port, chainConfig);
|
|
@@ -180,4 +205,3 @@ async function startBootstrapNode(config, telemetry) {
|
|
|
180
205
|
await bootstrapNode.start(config);
|
|
181
206
|
return bootstrapNode;
|
|
182
207
|
}
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC1ub2Rlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LWhlbHBlcnMvcmVxcmVzcC1ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQW9CLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdyRSxPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGFBQWEsR0FDZCxNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxF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
|