@aztec/p2p 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.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/dest/bootstrap/bootstrap.d.ts +38 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +31 -38
- package/dest/client/factory.d.ts +21 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +13 -11
- package/dest/client/index.d.ts +3 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +1 -0
- package/dest/client/p2p_client.d.ts +332 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +535 -513
- package/dest/config.d.ts +187 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +64 -53
- 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 +10 -6
- package/dest/index.d.ts +9 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -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 +2 -6
- 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 +32 -64
- 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 +1 -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 +19 -22
- 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 +26 -22
- package/dest/mem_pools/attestation_pool/mocks.d.ts +18 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +6 -10
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +7 -0
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +2 -1
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +4 -0
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/index.js +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +12 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +4 -5
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +8 -0
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +3 -2
- package/dest/mem_pools/index.d.ts +5 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +2 -1
- package/dest/mem_pools/instrumentation.d.ts +31 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +42 -37
- package/dest/mem_pools/interface.d.ts +13 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +2 -3
- 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 +134 -127
- 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 +1 -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 +43 -45
- 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 +3 -1
- 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 +2 -3
- 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 +37 -107
- 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 +3 -3
- 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 +2 -2
- 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/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +8 -0
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +1 -0
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +2 -0
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/epoch_proof_quote_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 +1 -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 +11 -9
- 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 +12 -17
- 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 +32 -41
- 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 +14 -22
- 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 +1 -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 +26 -29
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +8 -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 +12 -17
- 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 +57 -57
- package/dest/services/discv5/discV5_service.d.ts +40 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +82 -43
- package/dest/services/dummy_service.d.ts +83 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +59 -40
- package/dest/services/encoding.d.ts +31 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +9 -10
- package/dest/services/index.d.ts +3 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/libp2p_logger.d.ts +7 -0
- package/dest/services/libp2p/libp2p_logger.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_logger.js +67 -0
- package/dest/services/libp2p/libp2p_service.d.ts +225 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +727 -709
- 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 +7 -14
- package/dest/services/peer-manager/peer_manager.d.ts +76 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +342 -340
- 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 +18 -20
- 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 +5 -4
- 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 +28 -35
- 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 +59 -60
- 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 +3 -1
- 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 +30 -25
- 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 +10 -23
- 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 +2 -1
- 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 +41 -36
- 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 +3 -1
- 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 +3 -1
- 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 +3 -1
- 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 +8 -5
- 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 +35 -39
- 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 +17 -16
- 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 +463 -460
- 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 +17 -16
- package/dest/services/service.d.ts +86 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +4 -3
- package/dest/services/types.d.ts +32 -0
- package/dest/services/types.d.ts.map +1 -0
- package/dest/services/types.js +19 -20
- 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 +15 -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 +6 -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 +35 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +37 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +71 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +55 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +183 -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 +125 -0
- package/dest/util.d.ts +53 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +34 -23
- package/dest/versioning.d.ts +12 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +38 -0
- package/package.json +11 -9
- package/src/bootstrap/bootstrap.ts +9 -3
- package/src/client/factory.ts +12 -5
- package/src/config.ts +56 -29
- package/src/mem_pools/index.ts +3 -3
- package/src/mem_pools/instrumentation.ts +2 -3
- package/src/msg_validators/attestation_validator/attestation_validator.ts +3 -3
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +3 -3
- package/src/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.ts +3 -3
- package/src/services/discv5/discV5_service.ts +67 -18
- package/src/services/dummy_service.ts +2 -0
- package/src/services/libp2p/libp2p_logger.ts +78 -0
- package/src/services/libp2p/libp2p_service.ts +47 -10
- package/src/services/reqresp/protocols/goodbye.ts +1 -1
- package/src/services/reqresp/reqresp.ts +9 -1
- package/src/services/service.ts +2 -0
- package/src/services/types.ts +2 -10
- 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 +124 -0
- package/src/{mocks/index.ts → test-helpers/reqresp-nodes.ts} +10 -5
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +156 -0
- package/src/testbench/scripts/run_testbench.sh +7 -0
- package/src/versioning.ts +50 -0
- package/dest/mocks/index.js +0 -190
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { emptyChainConfig } from '@aztec/circuit-types/config';
|
|
2
|
+
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
+
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
6
|
+
import { noise } from '@chainsafe/libp2p-noise';
|
|
7
|
+
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
8
|
+
import { bootstrap } from '@libp2p/bootstrap';
|
|
9
|
+
import { identify } from '@libp2p/identify';
|
|
10
|
+
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
11
|
+
import { tcp } from '@libp2p/tcp';
|
|
12
|
+
import getPort from 'get-port';
|
|
13
|
+
import { createLibp2p } from 'libp2p';
|
|
14
|
+
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
15
|
+
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
16
|
+
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
17
|
+
import { ReqRespSubProtocol, noopValidator, } from '../services/reqresp/interface.js';
|
|
18
|
+
import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
|
|
19
|
+
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
20
|
+
/**
|
|
21
|
+
* Creates a libp2p node, pre configured.
|
|
22
|
+
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
23
|
+
* @returns Lip2p node
|
|
24
|
+
*/
|
|
25
|
+
export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
|
|
26
|
+
port = port ?? (await getPort());
|
|
27
|
+
const options = {
|
|
28
|
+
start,
|
|
29
|
+
addresses: {
|
|
30
|
+
listen: [`/ip4/0.0.0.0/tcp/${port}`],
|
|
31
|
+
announce: [`/ip4/0.0.0.0/tcp/${port}`],
|
|
32
|
+
},
|
|
33
|
+
connectionEncryption: [noise()],
|
|
34
|
+
streamMuxers: [yamux()],
|
|
35
|
+
transports: [tcp()],
|
|
36
|
+
services: {
|
|
37
|
+
identify: identify({
|
|
38
|
+
protocolPrefix: 'aztec',
|
|
39
|
+
}),
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
if (boostrapAddrs.length > 0) {
|
|
43
|
+
options.peerDiscovery = [
|
|
44
|
+
bootstrap({
|
|
45
|
+
list: boostrapAddrs,
|
|
46
|
+
}),
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
if (peerId) {
|
|
50
|
+
options.peerId = peerId;
|
|
51
|
+
}
|
|
52
|
+
if (enableGossipSub) {
|
|
53
|
+
options.services.pubsub = gossipsub({
|
|
54
|
+
allowPublishToZeroTopicPeers: true,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return await createLibp2p(options);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Test Libp2p service
|
|
61
|
+
* P2P functionality is operational, however everything else is default
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
*/
|
|
65
|
+
export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId, chainConfig = emptyChainConfig) {
|
|
66
|
+
peerId = peerId ?? (await createSecp256k1PeerId());
|
|
67
|
+
const config = {
|
|
68
|
+
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
69
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
70
|
+
tcpListenAddress: `0.0.0.0:${port}`,
|
|
71
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
72
|
+
bootstrapNodes: boostrapAddrs,
|
|
73
|
+
peerCheckIntervalMS: 1000,
|
|
74
|
+
maxPeerCount: 5,
|
|
75
|
+
p2pEnabled: true,
|
|
76
|
+
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
|
|
77
|
+
bootstrapNodeEnrVersionCheck: false,
|
|
78
|
+
...chainConfig,
|
|
79
|
+
};
|
|
80
|
+
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
81
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
82
|
+
// No bootstrap nodes provided as the libp2p service will register them in the constructor
|
|
83
|
+
const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
|
|
84
|
+
return new LibP2PService(clientType, config, p2pNode, discoveryService, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry);
|
|
85
|
+
}
|
|
86
|
+
// Mock sub protocol handlers
|
|
87
|
+
export const MOCK_SUB_PROTOCOL_HANDLERS = {
|
|
88
|
+
[ReqRespSubProtocol.PING]: pingHandler,
|
|
89
|
+
[ReqRespSubProtocol.STATUS]: statusHandler,
|
|
90
|
+
[ReqRespSubProtocol.TX]: (_msg) => Promise.resolve(Buffer.from('tx')),
|
|
91
|
+
[ReqRespSubProtocol.GOODBYE]: (_msg) => Promise.resolve(Buffer.from('goodbye')),
|
|
92
|
+
[ReqRespSubProtocol.BLOCK]: (_msg) => Promise.resolve(Buffer.from('block')),
|
|
93
|
+
};
|
|
94
|
+
// By default, all requests are valid
|
|
95
|
+
// If you want to test an invalid response, you can override the validator
|
|
96
|
+
export const MOCK_SUB_PROTOCOL_VALIDATORS = {
|
|
97
|
+
[ReqRespSubProtocol.PING]: noopValidator,
|
|
98
|
+
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
99
|
+
[ReqRespSubProtocol.TX]: noopValidator,
|
|
100
|
+
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
101
|
+
[ReqRespSubProtocol.BLOCK]: noopValidator,
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* @param numberOfNodes - the number of nodes to create
|
|
105
|
+
* @returns An array of the created nodes
|
|
106
|
+
*/
|
|
107
|
+
export const createNodes = (peerScoring, numberOfNodes) => {
|
|
108
|
+
return timesParallel(numberOfNodes, () => createReqResp(peerScoring));
|
|
109
|
+
};
|
|
110
|
+
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS) => {
|
|
111
|
+
for (const node of nodes) {
|
|
112
|
+
await node.req.start(subProtocolHandlers, subProtocolValidators);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
export const stopNodes = async (nodes) => {
|
|
116
|
+
const stopPromises = nodes.flatMap(node => [node.req.stop(), node.p2p.stop()]);
|
|
117
|
+
await Promise.all(stopPromises);
|
|
118
|
+
};
|
|
119
|
+
// Create a req resp node, exposing the underlying p2p node
|
|
120
|
+
export const createReqResp = async (peerScoring) => {
|
|
121
|
+
const p2p = await createLibp2pNode();
|
|
122
|
+
const config = {
|
|
123
|
+
overallRequestTimeoutMs: 4000,
|
|
124
|
+
individualRequestTimeoutMs: 2000,
|
|
125
|
+
};
|
|
126
|
+
const req = new ReqResp(config, p2p, peerScoring);
|
|
127
|
+
return {
|
|
128
|
+
p2p,
|
|
129
|
+
req,
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
// 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) {
|
|
136
|
+
if (node === otherNode) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const addr = otherNode.p2p.getMultiaddrs()[0];
|
|
140
|
+
await node.p2p.dial(addr);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
// Mock circuit verifier for testing - reimplementation from bb to avoid dependency
|
|
145
|
+
export class AlwaysTrueCircuitVerifier {
|
|
146
|
+
verifyProof(_tx) {
|
|
147
|
+
return Promise.resolve(true);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export class AlwaysFalseCircuitVerifier {
|
|
151
|
+
verifyProof(_tx) {
|
|
152
|
+
return Promise.resolve(false);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Bootnodes
|
|
156
|
+
export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
|
|
157
|
+
return {
|
|
158
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
159
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
160
|
+
peerIdPrivateKey: privateKey,
|
|
161
|
+
maxPeerCount: 100,
|
|
162
|
+
dataDirectory: undefined,
|
|
163
|
+
dataStoreMapSizeKB: 0,
|
|
164
|
+
...chainConfig,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
168
|
+
const config = createBootstrapNodeConfig(privateKey, port, chainConfig);
|
|
169
|
+
return startBootstrapNode(config, telemetry);
|
|
170
|
+
}
|
|
171
|
+
export async function createBootstrapNode(port, telemetry = getTelemetryClient(), chainConfig = emptyChainConfig) {
|
|
172
|
+
const peerId = await createSecp256k1PeerId();
|
|
173
|
+
const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port, chainConfig);
|
|
174
|
+
return startBootstrapNode(config, telemetry);
|
|
175
|
+
}
|
|
176
|
+
async function startBootstrapNode(config, telemetry) {
|
|
177
|
+
// Open an ephemeral store that will only exist in memory
|
|
178
|
+
const store = await openTmpStore('bootstrap-node', true);
|
|
179
|
+
const bootstrapNode = new BootstrapNode(store, telemetry);
|
|
180
|
+
await bootstrapNode.start(config);
|
|
181
|
+
return bootstrapNode;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC1ub2Rlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LWhlbHBlcnMvcmVxcmVzcC1ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQW9CLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdyRSxPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGFBQWEsR0FDZCxNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxF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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
|
+
*
|
|
4
|
+
* Used when running testbench commands
|
|
5
|
+
*/
|
|
6
|
+
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
|
+
import { P2PClientType, Tx, TxStatus } from '@aztec/circuit-types';
|
|
8
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
10
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
11
|
+
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
12
|
+
import { createP2PClient } from '../index.js';
|
|
13
|
+
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
14
|
+
// Simple mock implementation
|
|
15
|
+
function mockTxPool() {
|
|
16
|
+
// Mock all methods
|
|
17
|
+
return {
|
|
18
|
+
addTxs: () => Promise.resolve(),
|
|
19
|
+
getTxByHash: () => Promise.resolve(undefined),
|
|
20
|
+
getArchivedTxByHash: () => Promise.resolve(undefined),
|
|
21
|
+
markAsMined: () => Promise.resolve(),
|
|
22
|
+
markMinedAsPending: () => Promise.resolve(),
|
|
23
|
+
deleteTxs: () => Promise.resolve(),
|
|
24
|
+
getAllTxs: () => Promise.resolve([]),
|
|
25
|
+
getAllTxHashes: () => Promise.resolve([]),
|
|
26
|
+
getPendingTxHashes: () => Promise.resolve([]),
|
|
27
|
+
getMinedTxHashes: () => Promise.resolve([]),
|
|
28
|
+
getTxStatus: () => Promise.resolve(TxStatus.PENDING),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function mockAttestationPool() {
|
|
32
|
+
return {
|
|
33
|
+
addAttestations: () => Promise.resolve(),
|
|
34
|
+
deleteAttestations: () => Promise.resolve(),
|
|
35
|
+
deleteAttestationsOlderThan: () => Promise.resolve(),
|
|
36
|
+
deleteAttestationsForSlot: () => Promise.resolve(),
|
|
37
|
+
deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
|
|
38
|
+
getAttestationsForSlot: () => Promise.resolve([]),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function mockEpochProofQuotePool() {
|
|
42
|
+
return {
|
|
43
|
+
addQuote: () => { },
|
|
44
|
+
getQuotes: () => [],
|
|
45
|
+
deleteQuotesToEpoch: () => { },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function mockEpochCache() {
|
|
49
|
+
return {
|
|
50
|
+
getCommittee: () => Promise.resolve([]),
|
|
51
|
+
getProposerIndexEncoding: () => '0x',
|
|
52
|
+
getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
|
|
53
|
+
computeProposerIndex: () => 0n,
|
|
54
|
+
getProposerInCurrentOrNextSlot: () => Promise.resolve({
|
|
55
|
+
currentProposer: EthAddress.ZERO,
|
|
56
|
+
nextProposer: EthAddress.ZERO,
|
|
57
|
+
currentSlot: 0n,
|
|
58
|
+
nextSlot: 0n,
|
|
59
|
+
}),
|
|
60
|
+
isInCommittee: () => Promise.resolve(false),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
64
|
+
process.on('message', async (msg) => {
|
|
65
|
+
const { type, config, clientIndex } = msg;
|
|
66
|
+
try {
|
|
67
|
+
if (type === 'START') {
|
|
68
|
+
const txPool = mockTxPool();
|
|
69
|
+
const attestationPool = mockAttestationPool();
|
|
70
|
+
const epochProofQuotePool = mockEpochProofQuotePool();
|
|
71
|
+
const epochCache = mockEpochCache();
|
|
72
|
+
const worldState = {};
|
|
73
|
+
const l2BlockSource = new MockL2BlockSource();
|
|
74
|
+
await l2BlockSource.createBlocks(100);
|
|
75
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
76
|
+
const kvStore = await openTmpStore(`test-${clientIndex}`);
|
|
77
|
+
const logger = createLogger(`p2p:${clientIndex}`);
|
|
78
|
+
const deps = {
|
|
79
|
+
txPool,
|
|
80
|
+
attestationPool,
|
|
81
|
+
epochProofQuotePool,
|
|
82
|
+
store: kvStore,
|
|
83
|
+
logger,
|
|
84
|
+
};
|
|
85
|
+
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, undefined, deps);
|
|
86
|
+
// Create spy for gossip messages
|
|
87
|
+
let gossipMessageCount = 0;
|
|
88
|
+
client.p2pService.handleNewGossipMessage = (...args) => {
|
|
89
|
+
gossipMessageCount++;
|
|
90
|
+
process.send({ type: 'GOSSIP_RECEIVED', count: gossipMessageCount });
|
|
91
|
+
return client.p2pService.constructor.prototype.handleNewGossipMessage.apply(client.p2pService, args);
|
|
92
|
+
};
|
|
93
|
+
await client.start();
|
|
94
|
+
// Wait until the client is ready
|
|
95
|
+
for (let i = 0; i < 100; i++) {
|
|
96
|
+
const isReady = client.isReady();
|
|
97
|
+
logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
98
|
+
if (isReady) {
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
await sleep(1000);
|
|
102
|
+
}
|
|
103
|
+
// Listen for commands from parent
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
105
|
+
process.on('message', async (cmd) => {
|
|
106
|
+
switch (cmd.type) {
|
|
107
|
+
case 'STOP':
|
|
108
|
+
await client.stop();
|
|
109
|
+
process.exit(0);
|
|
110
|
+
break;
|
|
111
|
+
case 'SEND_TX':
|
|
112
|
+
await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
113
|
+
process.send({ type: 'TX_SENT' });
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
process.send({ type: 'READY' });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
process.send({ type: 'ERROR', error: err.message });
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RiZW5jaC9wMnBfY2xpZW50X3Rlc3RiZW5jaF93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RSw2QkFBNkI7QUFDN0IsU0FBUyxVQUFVO0lBQ2pCLG1CQUFtQjtJQUNuQixPQUFPO1FBQ0wsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDL0IsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzdDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ3BDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDM0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9B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
|
package/dest/util.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
+
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
3
|
+
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
4
|
+
import { type PeerId } from '@libp2p/interface';
|
|
5
|
+
import { type ConnectionManager } from '@libp2p/interface-internal';
|
|
6
|
+
import type { Libp2p } from 'libp2p';
|
|
7
|
+
import { type P2PConfig } from './config.js';
|
|
8
|
+
export interface PubSubLibp2p extends Libp2p {
|
|
9
|
+
services: {
|
|
10
|
+
pubsub: GossipSub;
|
|
11
|
+
components: {
|
|
12
|
+
connectionManager: ConnectionManager;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Converts an address string to a multiaddr string.
|
|
18
|
+
* Example usage:
|
|
19
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
20
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
21
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
22
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
23
|
+
* @returns A multiaddr compliant string. */
|
|
24
|
+
export declare function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string;
|
|
25
|
+
/**
|
|
26
|
+
* Splits an <address>:<port> string into its components.
|
|
27
|
+
* @returns The ip6 or ip4 address & port separately
|
|
28
|
+
*/
|
|
29
|
+
export declare function splitAddressPort(address: string, allowEmptyAddress: boolean): [string, string];
|
|
30
|
+
/**
|
|
31
|
+
* Queries the public IP address of the machine.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPublicIp(): Promise<string>;
|
|
34
|
+
export declare function resolveAddressIfNecessary(address: string): Promise<string>;
|
|
35
|
+
export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
|
|
36
|
+
/**
|
|
37
|
+
* Get the peer id private key
|
|
38
|
+
*
|
|
39
|
+
* 1. Check if we have a peer id private key in the config
|
|
40
|
+
* 2. If not, check we have a peer id private key persisted in the node
|
|
41
|
+
* 3. If not, create a new one, then persist it in the node
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
export declare function getPeerIdPrivateKey(config: {
|
|
45
|
+
peerIdPrivateKey?: string;
|
|
46
|
+
}, store: AztecAsyncKVStore): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Create a libp2p peer ID from the private key.
|
|
49
|
+
* @param privateKey - peer ID private key as hex string
|
|
50
|
+
* @returns The peer ID.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
|
|
53
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|
package/dest/util.js
CHANGED
|
@@ -8,7 +8,8 @@ import { resolve } from 'dns/promises';
|
|
|
8
8
|
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
9
9
|
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
10
10
|
* @param protocol - The protocol to use in the multiaddr string.
|
|
11
|
-
* @returns A multiaddr compliant string. */
|
|
11
|
+
* @returns A multiaddr compliant string. */
|
|
12
|
+
export function convertToMultiaddr(address, protocol) {
|
|
12
13
|
const [addr, port] = splitAddressPort(address, false);
|
|
13
14
|
const multiaddrPrefix = addressToMultiAddressType(addr);
|
|
14
15
|
if (multiaddrPrefix === 'dns') {
|
|
@@ -19,7 +20,8 @@ import { resolve } from 'dns/promises';
|
|
|
19
20
|
/**
|
|
20
21
|
* Splits an <address>:<port> string into its components.
|
|
21
22
|
* @returns The ip6 or ip4 address & port separately
|
|
22
|
-
*/
|
|
23
|
+
*/
|
|
24
|
+
export function splitAddressPort(address, allowEmptyAddress) {
|
|
23
25
|
let addr;
|
|
24
26
|
let port;
|
|
25
27
|
if (address.startsWith('[')) {
|
|
@@ -29,21 +31,20 @@ import { resolve } from 'dns/promises';
|
|
|
29
31
|
throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
|
|
30
32
|
}
|
|
31
33
|
[, addr, port] = match;
|
|
32
|
-
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
33
36
|
// IPv4 address
|
|
34
37
|
[addr, port] = address.split(':');
|
|
35
|
-
if (!addr && !allowEmptyAddress || !port) {
|
|
38
|
+
if ((!addr && !allowEmptyAddress) || !port) {
|
|
36
39
|
throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
|
-
return [
|
|
40
|
-
addr,
|
|
41
|
-
port
|
|
42
|
-
];
|
|
42
|
+
return [addr, port];
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Queries the public IP address of the machine.
|
|
46
|
-
*/
|
|
46
|
+
*/
|
|
47
|
+
export async function getPublicIp() {
|
|
47
48
|
const resp = await fetch('http://checkip.amazonaws.com/');
|
|
48
49
|
const text = await resp.text();
|
|
49
50
|
return text.trim();
|
|
@@ -57,7 +58,8 @@ export async function resolveAddressIfNecessary(address) {
|
|
|
57
58
|
throw new Error(`Could not resolve address: ${addr}`);
|
|
58
59
|
}
|
|
59
60
|
return `${resolvedAddresses[0]}:${port}`;
|
|
60
|
-
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
61
63
|
return address;
|
|
62
64
|
}
|
|
63
65
|
}
|
|
@@ -66,19 +68,23 @@ export async function resolveAddressIfNecessary(address) {
|
|
|
66
68
|
function addressToMultiAddressType(address) {
|
|
67
69
|
if (address.includes(':')) {
|
|
68
70
|
return 'ip6';
|
|
69
|
-
}
|
|
71
|
+
}
|
|
72
|
+
else if (address.match(/^[\d.]+$/)) {
|
|
70
73
|
return 'ip4';
|
|
71
|
-
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
72
76
|
return 'dns';
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
export async function configureP2PClientAddresses(_config) {
|
|
76
|
-
const config = {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
config.udpAnnounceAddress = configUdpAnnounceAddress
|
|
80
|
+
const config = { ..._config };
|
|
81
|
+
const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp, } = config;
|
|
82
|
+
config.tcpAnnounceAddress = configTcpAnnounceAddress
|
|
83
|
+
? await resolveAddressIfNecessary(configTcpAnnounceAddress)
|
|
84
|
+
: undefined;
|
|
85
|
+
config.udpAnnounceAddress = configUdpAnnounceAddress
|
|
86
|
+
? await resolveAddressIfNecessary(configUdpAnnounceAddress)
|
|
87
|
+
: undefined;
|
|
82
88
|
// create variable for re-use if needed
|
|
83
89
|
let publicIp;
|
|
84
90
|
// check if no announce IP was provided
|
|
@@ -88,7 +94,8 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
88
94
|
publicIp = await getPublicIp();
|
|
89
95
|
const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
|
|
90
96
|
config.tcpAnnounceAddress = tcpAnnounceAddress;
|
|
91
|
-
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
92
99
|
throw new Error(`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`);
|
|
93
100
|
}
|
|
94
101
|
}
|
|
@@ -97,8 +104,9 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
97
104
|
// If announceUdpAddress is not provided, use announceTcpAddress
|
|
98
105
|
if (!queryForIp && config.tcpAnnounceAddress) {
|
|
99
106
|
config.udpAnnounceAddress = config.tcpAnnounceAddress;
|
|
100
|
-
}
|
|
101
|
-
|
|
107
|
+
}
|
|
108
|
+
else if (queryForIp) {
|
|
109
|
+
const udpPublicIp = publicIp || (await getPublicIp());
|
|
102
110
|
const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
|
|
103
111
|
config.udpAnnounceAddress = udpAnnounceAddress;
|
|
104
112
|
}
|
|
@@ -112,7 +120,8 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
112
120
|
* 2. If not, check we have a peer id private key persisted in the node
|
|
113
121
|
* 3. If not, create a new one, then persist it in the node
|
|
114
122
|
*
|
|
115
|
-
*/
|
|
123
|
+
*/
|
|
124
|
+
export async function getPeerIdPrivateKey(config, store) {
|
|
116
125
|
const peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
|
|
117
126
|
if (config.peerIdPrivateKey) {
|
|
118
127
|
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
|
|
@@ -131,10 +140,12 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
131
140
|
* Create a libp2p peer ID from the private key.
|
|
132
141
|
* @param privateKey - peer ID private key as hex string
|
|
133
142
|
* @returns The peer ID.
|
|
134
|
-
*/
|
|
143
|
+
*/
|
|
144
|
+
export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
|
|
135
145
|
if (!privateKey?.length) {
|
|
136
146
|
throw new Error('No peer private key provided');
|
|
137
147
|
}
|
|
138
148
|
const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
|
|
139
149
|
return await createFromPrivKey(asLibp2pPrivateKey);
|
|
140
150
|
}
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBY3ZDOzs7Ozs7OzZDQU82QztBQUM3QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFlO1FBQ2YsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsT0FBTyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVc7SUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxPQUFlO0lBQzdELE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsMkVBQTJFO0FBQzNFLFNBQVMseUJBQXlCLENBQUMsT0FBZTtJQUNoRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLE9BQW9DO0lBRXBDLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLEVBQ0osa0JBQWtCLEVBQUUsd0JBQXdCLEVBQzVDLGtCQUFrQixFQUFFLHdCQUF3QixFQUM1QyxVQUFVLEdBQ1gsR0FBRyxNQUFNLENBQUM7SUFFWCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsd0JBQXdCO1FBQ2xELENBQUMsQ0FBQyxNQUFNLHlCQUF5QixDQUFDLHdCQUF3QixDQUFDO1FBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDZCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsd0JBQXdCO1FBQ2xELENBQUMsQ0FBQyxNQUFNLHlCQUF5QixDQUFDLHdCQUF3QixDQUFDO1FBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCx1Q0FBdUM7SUFDdkMsSUFBSSxRQUFRLENBQUM7SUFFYix1Q0FBdUM7SUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkYsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzdFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixRQUFRLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQztZQUMvQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsUUFBUSxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYix3Q0FBd0Msd0JBQXdCLGtDQUFrQyxDQUNuRyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RixJQUFJLHVCQUF1QixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDN0UsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUN0QixNQUFNLFdBQVcsR0FBRyxRQUFRLElBQUksQ0FBQyxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFdBQVcsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsTUFBcUMsRUFDckMsS0FBd0I7SUFFeEIsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFTLGtCQUFrQixDQUFDLENBQUM7SUFDbEYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixNQUFNLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFFLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUMzQixPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdGLE1BQU0seUJBQXlCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0NBQWdDLENBQUMsVUFBa0I7SUFDdkUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sa0JBQWtCLEdBQTRCLE1BQU0sbUJBQW1CLENBQzNFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQy9DLENBQUM7SUFDRixPQUFPLE1BQU0saUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNyRCxDQUFDIn0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import { type ComponentsVersions } from '@aztec/circuit-types';
|
|
4
|
+
import { type ChainConfig } from '@aztec/circuit-types/config';
|
|
5
|
+
import { type SignableENR } from '@chainsafe/enr';
|
|
6
|
+
/** Returns the component versions based on config and this build. */
|
|
7
|
+
export declare function getVersions(config: ChainConfig): ComponentsVersions;
|
|
8
|
+
/** Sets the aztec key on the ENR record with versioning info. */
|
|
9
|
+
export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash?: boolean): ComponentsVersions;
|
|
10
|
+
/** Checks the given value from an ENR record against the expected versions. */
|
|
11
|
+
export declare function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions): void;
|
|
12
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,sBAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,UAAc,sBAK5F;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,QAU1F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig, } from '@aztec/circuit-types';
|
|
2
|
+
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
3
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
|
|
4
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
5
|
+
import xxhashFactory from 'xxhash-wasm';
|
|
6
|
+
import { AZTEC_ENR_KEY } from './services/types.js';
|
|
7
|
+
const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
|
|
8
|
+
const XX_HASH_LEN = 8;
|
|
9
|
+
const xxhash = await xxhashFactory();
|
|
10
|
+
/** Returns the component versions based on config and this build. */
|
|
11
|
+
export function getVersions(config) {
|
|
12
|
+
return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
|
|
13
|
+
}
|
|
14
|
+
/** Sets the aztec key on the ENR record with versioning info. */
|
|
15
|
+
export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
|
|
16
|
+
const versions = getVersions(config);
|
|
17
|
+
const value = versionsToEnrValue(versions, useXxHash);
|
|
18
|
+
enr.set(AZTEC_ENR_KEY, value);
|
|
19
|
+
return versions;
|
|
20
|
+
}
|
|
21
|
+
/** Checks the given value from an ENR record against the expected versions. */
|
|
22
|
+
export function checkAztecEnrVersion(enrValue, expectedVersions) {
|
|
23
|
+
if (enrValue.length === XX_HASH_LEN) {
|
|
24
|
+
const expected = versionsToEnrValue(expectedVersions, true);
|
|
25
|
+
if (!Buffer.from(enrValue).equals(expected)) {
|
|
26
|
+
throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const actual = Buffer.from(enrValue).toString();
|
|
31
|
+
checkCompressedComponentVersion(actual, expectedVersions);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function versionsToEnrValue(versions, useXxHash) {
|
|
35
|
+
const compressed = compressComponentVersions(versions);
|
|
36
|
+
return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLCtCQUErQixHQUNoQyxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHckUsT0FBTyxhQUFhLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyw2REFBNkQ7QUFDeEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUM7QUFFckMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBbUI7SUFDN0MsT0FBTywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM1RixDQUFDO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBZ0IsRUFBRSxNQUFtQixFQUFFLFNBQVMsR0FBRyxXQUFXO0lBQzNGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsUUFBZ0IsRUFBRSxnQkFBb0M7SUFDekYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELCtCQUErQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxRQUE0QixFQUFFLFNBQWtCO0lBQzFFLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvRixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.76.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./
|
|
7
|
+
"./test-helpers": "./dest/test-helpers/index.js",
|
|
8
8
|
"./bootstrap": "./dest/bootstrap/bootstrap.js",
|
|
9
9
|
"./config": "./dest/config.js",
|
|
10
10
|
"./msg_validators": "./dest/msg_validators/index.js"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
23
23
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
24
24
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
25
|
-
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
25
|
+
"test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
26
26
|
"start": "node ./dest",
|
|
27
27
|
"start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'"
|
|
28
28
|
},
|
|
@@ -63,12 +63,14 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@aztec/circuit-types": "0.
|
|
67
|
-
"@aztec/circuits.js": "0.
|
|
68
|
-
"@aztec/epoch-cache": "0.
|
|
69
|
-
"@aztec/foundation": "0.
|
|
70
|
-
"@aztec/kv-store": "0.
|
|
71
|
-
"@aztec/
|
|
66
|
+
"@aztec/circuit-types": "0.76.0",
|
|
67
|
+
"@aztec/circuits.js": "0.76.0",
|
|
68
|
+
"@aztec/epoch-cache": "0.76.0",
|
|
69
|
+
"@aztec/foundation": "0.76.0",
|
|
70
|
+
"@aztec/kv-store": "0.76.0",
|
|
71
|
+
"@aztec/noir-protocol-circuits-types": "0.76.0",
|
|
72
|
+
"@aztec/protocol-contracts": "0.76.0",
|
|
73
|
+
"@aztec/telemetry-client": "0.76.0",
|
|
72
74
|
"@chainsafe/discv5": "9.0.0",
|
|
73
75
|
"@chainsafe/enr": "3.0.0",
|
|
74
76
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|