@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
|
@@ -9,8 +9,8 @@ import type { PeerId } from '@libp2p/interface';
|
|
|
9
9
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
10
10
|
|
|
11
11
|
import type { BootnodeConfig } from '../config.js';
|
|
12
|
-
import { AZTEC_ENR_KEY, AZTEC_NET } from '../services/types.js';
|
|
13
12
|
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
|
|
13
|
+
import { setAztecEnrKey } from '../versioning.js';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
@@ -46,7 +46,8 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
46
46
|
|
|
47
47
|
const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
|
|
48
48
|
enr.setLocationMultiaddr(publicAddr);
|
|
49
|
-
|
|
49
|
+
|
|
50
|
+
const versions = setAztecEnrKey(enr, config);
|
|
50
51
|
|
|
51
52
|
this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
|
|
52
53
|
|
|
@@ -72,7 +73,12 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
72
73
|
|
|
73
74
|
try {
|
|
74
75
|
await this.node.start();
|
|
75
|
-
this.logger.info('Bootstrap node started', {
|
|
76
|
+
this.logger.info('Bootstrap node started', {
|
|
77
|
+
peerId,
|
|
78
|
+
enr: enr.encodeTxt(),
|
|
79
|
+
addr: listenAddrUdp.toString(),
|
|
80
|
+
versions,
|
|
81
|
+
});
|
|
76
82
|
} catch (e) {
|
|
77
83
|
this.logger.error('Error starting Discv5', e);
|
|
78
84
|
}
|
package/src/client/factory.ts
CHANGED
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
P2PClientType,
|
|
5
5
|
type WorldStateSynchronizer,
|
|
6
6
|
} from '@aztec/circuit-types';
|
|
7
|
-
import { type
|
|
8
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
9
9
|
import { type AztecAsyncKVStore } from '@aztec/kv-store';
|
|
10
10
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
11
11
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
@@ -29,6 +29,7 @@ type P2PClientDeps<T extends P2PClientType> = {
|
|
|
29
29
|
store?: AztecAsyncKVStore;
|
|
30
30
|
attestationPool?: T extends P2PClientType.Full ? AttestationPool : undefined;
|
|
31
31
|
epochProofQuotePool?: EpochProofQuotePool;
|
|
32
|
+
logger?: Logger;
|
|
32
33
|
};
|
|
33
34
|
|
|
34
35
|
export const createP2PClient = async <T extends P2PClientType>(
|
|
@@ -37,12 +38,12 @@ export const createP2PClient = async <T extends P2PClientType>(
|
|
|
37
38
|
l2BlockSource: L2BlockSource,
|
|
38
39
|
proofVerifier: ClientProtocolCircuitVerifier,
|
|
39
40
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
40
|
-
epochCache:
|
|
41
|
+
epochCache: EpochCacheInterface,
|
|
41
42
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
42
43
|
deps: P2PClientDeps<T> = {},
|
|
43
44
|
) => {
|
|
44
45
|
let config = { ..._config };
|
|
45
|
-
const logger = createLogger('p2p');
|
|
46
|
+
const logger = deps.logger ?? createLogger('p2p');
|
|
46
47
|
const store = deps.store ?? (await createStore('p2p', config, createLogger('p2p:lmdb-v2')));
|
|
47
48
|
const archive = await createStore('p2p-archive', config, createLogger('p2p-archive:lmdb-v2'));
|
|
48
49
|
|
|
@@ -66,7 +67,12 @@ export const createP2PClient = async <T extends P2PClientType>(
|
|
|
66
67
|
// Create peer discovery service
|
|
67
68
|
const peerIdPrivateKey = await getPeerIdPrivateKey(config, store);
|
|
68
69
|
const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
|
|
69
|
-
const discoveryService = new DiscV5Service(
|
|
70
|
+
const discoveryService = new DiscV5Service(
|
|
71
|
+
peerId,
|
|
72
|
+
config,
|
|
73
|
+
telemetry,
|
|
74
|
+
createLogger(`${logger.module}:discv5_service`),
|
|
75
|
+
);
|
|
70
76
|
|
|
71
77
|
p2pService = await LibP2PService.new<T>(
|
|
72
78
|
clientType,
|
|
@@ -80,6 +86,7 @@ export const createP2PClient = async <T extends P2PClientType>(
|
|
|
80
86
|
worldStateSynchronizer,
|
|
81
87
|
store,
|
|
82
88
|
telemetry,
|
|
89
|
+
createLogger(`${logger.module}:libp2p_service`),
|
|
83
90
|
);
|
|
84
91
|
} else {
|
|
85
92
|
logger.verbose('P2P is disabled. Using dummy P2P service');
|
package/src/config.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ChainConfig, chainConfigMappings } from '@aztec/circuit-types/config';
|
|
1
2
|
import {
|
|
2
3
|
type ConfigMappingsType,
|
|
3
4
|
booleanConfigHelper,
|
|
@@ -13,7 +14,7 @@ import { type P2PReqRespConfig, p2pReqRespConfigMappings } from './services/reqr
|
|
|
13
14
|
/**
|
|
14
15
|
* P2P client configuration values.
|
|
15
16
|
*/
|
|
16
|
-
export interface P2PConfig extends P2PReqRespConfig {
|
|
17
|
+
export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
|
|
17
18
|
/**
|
|
18
19
|
* A flag dictating whether the P2P subsystem should be enabled.
|
|
19
20
|
*/
|
|
@@ -29,6 +30,16 @@ export interface P2PConfig extends P2PReqRespConfig {
|
|
|
29
30
|
*/
|
|
30
31
|
blockRequestBatchSize: number;
|
|
31
32
|
|
|
33
|
+
/**
|
|
34
|
+
* DEBUG: Disable message validation - for testing purposes only
|
|
35
|
+
*/
|
|
36
|
+
debugDisableMessageValidation: boolean;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* DEBUG: Disable colocation penalty - for testing purposes only
|
|
40
|
+
*/
|
|
41
|
+
debugDisableColocationPenalty: boolean;
|
|
42
|
+
|
|
32
43
|
/**
|
|
33
44
|
* The frequency in which to check for new peers.
|
|
34
45
|
*/
|
|
@@ -69,16 +80,14 @@ export interface P2PConfig extends P2PReqRespConfig {
|
|
|
69
80
|
*/
|
|
70
81
|
bootstrapNodes: string[];
|
|
71
82
|
|
|
83
|
+
/** Whether to execute the version check in the bootstrap node ENR. */
|
|
84
|
+
bootstrapNodeEnrVersionCheck: boolean;
|
|
85
|
+
|
|
72
86
|
/**
|
|
73
87
|
* Protocol identifier for transaction gossiping.
|
|
74
88
|
*/
|
|
75
89
|
transactionProtocol: string;
|
|
76
90
|
|
|
77
|
-
/**
|
|
78
|
-
* The minimum number of peers (a peer count below this will cause the node to look for more peers)
|
|
79
|
-
*/
|
|
80
|
-
minPeerCount: number;
|
|
81
|
-
|
|
82
91
|
/**
|
|
83
92
|
* The maximum number of peers (a peer count above this will cause the node to refuse connection attempts)
|
|
84
93
|
*/
|
|
@@ -115,6 +124,16 @@ export interface P2PConfig extends P2PReqRespConfig {
|
|
|
115
124
|
*/
|
|
116
125
|
gossipsubDhi: number;
|
|
117
126
|
|
|
127
|
+
/**
|
|
128
|
+
* The Dlazy parameter for the gossipsub protocol.
|
|
129
|
+
*/
|
|
130
|
+
gossipsubDLazy: number;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Whether to flood publish messages. - For testing purposes only
|
|
134
|
+
*/
|
|
135
|
+
gossipsubFloodPublish: boolean;
|
|
136
|
+
|
|
118
137
|
/**
|
|
119
138
|
* The number of gossipsub interval message cache windows to keep.
|
|
120
139
|
*/
|
|
@@ -150,11 +169,6 @@ export interface P2PConfig extends P2PReqRespConfig {
|
|
|
150
169
|
*/
|
|
151
170
|
peerPenaltyValues: number[];
|
|
152
171
|
|
|
153
|
-
/**
|
|
154
|
-
* The chain id of the L1 chain.
|
|
155
|
-
*/
|
|
156
|
-
l1ChainId: number;
|
|
157
|
-
|
|
158
172
|
/** Limit of transactions to archive in the tx pool. Once the archived tx limit is reached, the oldest archived txs will be purged. */
|
|
159
173
|
archivedTxLimit: number;
|
|
160
174
|
}
|
|
@@ -170,6 +184,16 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
170
184
|
description: 'The frequency in which to check for new L2 blocks.',
|
|
171
185
|
...numberConfigHelper(100),
|
|
172
186
|
},
|
|
187
|
+
debugDisableMessageValidation: {
|
|
188
|
+
env: 'DEBUG_P2P_DISABLE_MESSAGE_VALIDATION',
|
|
189
|
+
description: 'DEBUG: Disable message validation - NEVER set to true in production',
|
|
190
|
+
...booleanConfigHelper(false),
|
|
191
|
+
},
|
|
192
|
+
debugDisableColocationPenalty: {
|
|
193
|
+
env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
|
|
194
|
+
description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
|
|
195
|
+
...booleanConfigHelper(false),
|
|
196
|
+
},
|
|
173
197
|
peerCheckIntervalMS: {
|
|
174
198
|
env: 'P2P_PEER_CHECK_INTERVAL_MS',
|
|
175
199
|
description: 'The frequency in which to check for new peers.',
|
|
@@ -209,16 +233,16 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
209
233
|
parseEnv: (val: string) => val.split(','),
|
|
210
234
|
description: 'A list of bootstrap peer ENRs to connect to. Separated by commas.',
|
|
211
235
|
},
|
|
236
|
+
bootstrapNodeEnrVersionCheck: {
|
|
237
|
+
env: 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK',
|
|
238
|
+
description: 'Whether to check the version of the bootstrap node ENR.',
|
|
239
|
+
...booleanConfigHelper(),
|
|
240
|
+
},
|
|
212
241
|
transactionProtocol: {
|
|
213
242
|
env: 'P2P_TX_PROTOCOL',
|
|
214
243
|
description: 'Protocol identifier for transaction gossiping.',
|
|
215
244
|
defaultValue: '/aztec/0.1.0',
|
|
216
245
|
},
|
|
217
|
-
minPeerCount: {
|
|
218
|
-
env: 'P2P_MIN_PEERS',
|
|
219
|
-
description: 'The minimum number of peers to connect to.',
|
|
220
|
-
...numberConfigHelper(10),
|
|
221
|
-
},
|
|
222
246
|
maxPeerCount: {
|
|
223
247
|
env: 'P2P_MAX_PEERS',
|
|
224
248
|
description: 'The maximum number of peers to connect to.',
|
|
@@ -244,7 +268,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
244
268
|
gossipsubInterval: {
|
|
245
269
|
env: 'P2P_GOSSIPSUB_INTERVAL_MS',
|
|
246
270
|
description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
|
|
247
|
-
...numberConfigHelper(
|
|
271
|
+
...numberConfigHelper(700),
|
|
248
272
|
},
|
|
249
273
|
gossipsubD: {
|
|
250
274
|
env: 'P2P_GOSSIPSUB_D',
|
|
@@ -261,10 +285,20 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
261
285
|
description: 'The Dhi parameter for the gossipsub protocol.',
|
|
262
286
|
...numberConfigHelper(12),
|
|
263
287
|
},
|
|
288
|
+
gossipsubDLazy: {
|
|
289
|
+
env: 'P2P_GOSSIPSUB_DLAZY',
|
|
290
|
+
description: 'The Dlazy parameter for the gossipsub protocol.',
|
|
291
|
+
...numberConfigHelper(6),
|
|
292
|
+
},
|
|
293
|
+
gossipsubFloodPublish: {
|
|
294
|
+
env: 'P2P_GOSSIPSUB_FLOOD_PUBLISH',
|
|
295
|
+
description: 'Whether to flood publish messages. - For testing purposes only',
|
|
296
|
+
...booleanConfigHelper(true),
|
|
297
|
+
},
|
|
264
298
|
gossipsubMcacheLength: {
|
|
265
299
|
env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
|
|
266
300
|
description: 'The number of gossipsub interval message cache windows to keep.',
|
|
267
|
-
...numberConfigHelper(
|
|
301
|
+
...numberConfigHelper(6),
|
|
268
302
|
},
|
|
269
303
|
gossipsubMcacheGossip: {
|
|
270
304
|
env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP',
|
|
@@ -298,11 +332,6 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
298
332
|
description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.',
|
|
299
333
|
...numberConfigHelper(30),
|
|
300
334
|
},
|
|
301
|
-
l1ChainId: {
|
|
302
|
-
env: 'L1_CHAIN_ID',
|
|
303
|
-
description: 'The chain id of the L1 chain.',
|
|
304
|
-
...numberConfigHelper(31337),
|
|
305
|
-
},
|
|
306
335
|
blockRequestBatchSize: {
|
|
307
336
|
env: 'P2P_BLOCK_REQUEST_BATCH_SIZE',
|
|
308
337
|
description: 'The number of blocks to fetch in a single batch.',
|
|
@@ -315,6 +344,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
|
315
344
|
...numberConfigHelper(0),
|
|
316
345
|
},
|
|
317
346
|
...p2pReqRespConfigMappings,
|
|
347
|
+
...chainConfigMappings,
|
|
318
348
|
};
|
|
319
349
|
|
|
320
350
|
/**
|
|
@@ -332,17 +362,14 @@ export function getP2PDefaultConfig(): P2PConfig {
|
|
|
332
362
|
/**
|
|
333
363
|
* Required P2P config values for a bootstrap node.
|
|
334
364
|
*/
|
|
335
|
-
export type BootnodeConfig = Pick<
|
|
336
|
-
P2PConfig,
|
|
337
|
-
'udpAnnounceAddress' | 'peerIdPrivateKey' | 'minPeerCount' | 'maxPeerCount'
|
|
338
|
-
> &
|
|
365
|
+
export type BootnodeConfig = Pick<P2PConfig, 'udpAnnounceAddress' | 'peerIdPrivateKey' | 'maxPeerCount'> &
|
|
339
366
|
Required<Pick<P2PConfig, 'udpListenAddress'>> &
|
|
340
|
-
Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB'
|
|
367
|
+
Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB'> &
|
|
368
|
+
ChainConfig;
|
|
341
369
|
|
|
342
370
|
const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
|
|
343
371
|
'udpAnnounceAddress',
|
|
344
372
|
'peerIdPrivateKey',
|
|
345
|
-
'minPeerCount',
|
|
346
373
|
'maxPeerCount',
|
|
347
374
|
'udpListenAddress',
|
|
348
375
|
'dataDirectory',
|
package/src/mem_pools/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { TxPool } from './tx_pool/tx_pool.js';
|
|
2
|
+
export { AttestationPool } from './attestation_pool/attestation_pool.js';
|
|
3
|
+
export { EpochProofQuotePool } from './epoch_proof_quote_pool/epoch_proof_quote_pool.js';
|
|
4
4
|
export { type MemPools } from './interface.js';
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
LmdbMetrics,
|
|
6
6
|
type LmdbStatsCallback,
|
|
7
7
|
Metrics,
|
|
8
|
-
type MetricsType,
|
|
9
8
|
type TelemetryClient,
|
|
10
9
|
type UpDownCounter,
|
|
11
10
|
} from '@aztec/telemetry-client';
|
|
@@ -17,8 +16,8 @@ export enum PoolName {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
type MetricsLabels = {
|
|
20
|
-
objectInMempool:
|
|
21
|
-
objectSize:
|
|
19
|
+
objectInMempool: Metrics;
|
|
20
|
+
objectSize: Metrics;
|
|
22
21
|
};
|
|
23
22
|
|
|
24
23
|
/**
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type BlockAttestation, type P2PValidator, PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
3
|
|
|
4
4
|
export class AttestationValidator implements P2PValidator<BlockAttestation> {
|
|
5
|
-
private epochCache:
|
|
5
|
+
private epochCache: EpochCacheInterface;
|
|
6
6
|
|
|
7
|
-
constructor(epochCache:
|
|
7
|
+
constructor(epochCache: EpochCacheInterface) {
|
|
8
8
|
this.epochCache = epochCache;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
3
|
|
|
4
4
|
export class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
5
|
-
private epochCache:
|
|
5
|
+
private epochCache: EpochCacheInterface;
|
|
6
6
|
|
|
7
|
-
constructor(epochCache:
|
|
7
|
+
constructor(epochCache: EpochCacheInterface) {
|
|
8
8
|
this.epochCache = epochCache;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type EpochProofQuote, type P2PValidator, PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
3
3
|
|
|
4
4
|
export class EpochProofQuoteValidator implements P2PValidator<EpochProofQuote> {
|
|
5
|
-
private epochCache:
|
|
5
|
+
private epochCache: EpochCacheInterface;
|
|
6
6
|
|
|
7
|
-
constructor(epochCache:
|
|
7
|
+
constructor(epochCache: EpochCacheInterface) {
|
|
8
8
|
this.epochCache = epochCache;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ComponentsVersions, checkCompressedComponentVersion } from '@aztec/circuit-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
4
|
import { OtelMetricsAdapter, type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -10,8 +11,9 @@ import EventEmitter from 'events';
|
|
|
10
11
|
|
|
11
12
|
import type { P2PConfig } from '../../config.js';
|
|
12
13
|
import { convertToMultiaddr } from '../../util.js';
|
|
14
|
+
import { setAztecEnrKey } from '../../versioning.js';
|
|
13
15
|
import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
|
|
14
|
-
import { AZTEC_ENR_KEY,
|
|
16
|
+
import { AZTEC_ENR_KEY, Discv5Event, PeerEvent } from '../types.js';
|
|
15
17
|
|
|
16
18
|
const delayBeforeStart = 2000; // 2sec
|
|
17
19
|
|
|
@@ -25,29 +27,32 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
25
27
|
/** This instance's ENR */
|
|
26
28
|
private enr: SignableENR;
|
|
27
29
|
|
|
30
|
+
/** Version identifiers. */
|
|
31
|
+
private versions: ComponentsVersions;
|
|
32
|
+
|
|
28
33
|
/** UDP listen addr */
|
|
29
34
|
private listenMultiAddrUdp: Multiaddr;
|
|
30
35
|
|
|
31
36
|
private currentState = PeerDiscoveryState.STOPPED;
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
public readonly bootstrapNodes: string[] = [];
|
|
34
39
|
private bootstrapNodePeerIds: PeerId[] = [];
|
|
35
40
|
|
|
36
41
|
private startTime = 0;
|
|
37
42
|
|
|
38
43
|
constructor(
|
|
39
44
|
private peerId: PeerId,
|
|
40
|
-
config: P2PConfig,
|
|
45
|
+
private config: P2PConfig,
|
|
41
46
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
42
47
|
private logger = createLogger('p2p:discv5_service'),
|
|
43
48
|
) {
|
|
44
49
|
super();
|
|
45
50
|
const { tcpAnnounceAddress, udpAnnounceAddress, udpListenAddress, bootstrapNodes } = config;
|
|
46
|
-
this.bootstrapNodes = bootstrapNodes;
|
|
51
|
+
this.bootstrapNodes = bootstrapNodes ?? [];
|
|
47
52
|
// create ENR from PeerId
|
|
48
53
|
this.enr = SignableENR.createFromPeerId(peerId);
|
|
49
54
|
// Add aztec identification to ENR
|
|
50
|
-
this.enr
|
|
55
|
+
this.versions = setAztecEnrKey(this.enr, config);
|
|
51
56
|
|
|
52
57
|
if (!tcpAnnounceAddress) {
|
|
53
58
|
throw new Error('You need to provide at least a TCP announce address.');
|
|
@@ -78,6 +83,20 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
78
83
|
metricsRegistry,
|
|
79
84
|
});
|
|
80
85
|
|
|
86
|
+
// Hook onto the onEstablished method to check the peer's version from the ENR,
|
|
87
|
+
// so we don't add it to our dht if it doesn't have the correct version.
|
|
88
|
+
// In addition, we'll hook onto onDiscovered to to repeat the same check there,
|
|
89
|
+
// just in case. Note that not adding the peer to the dht could lead to it
|
|
90
|
+
// being "readded" constantly, we'll need to keep an eye on whether this
|
|
91
|
+
// turns out to be a problem or not.
|
|
92
|
+
const origOnEstablished = this.discv5.onEstablished.bind(this.discv5);
|
|
93
|
+
this.discv5.onEstablished = (...args: unknown[]) => {
|
|
94
|
+
const enr = args[1] as ENR;
|
|
95
|
+
if (this.validateEnr(enr)) {
|
|
96
|
+
return origOnEstablished(...args);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
81
100
|
this.discv5.on(Discv5Event.DISCOVERED, this.onDiscovered.bind(this));
|
|
82
101
|
this.discv5.on(Discv5Event.ENR_ADDED, this.onEnrAdded.bind(this));
|
|
83
102
|
}
|
|
@@ -95,20 +114,29 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
95
114
|
peerId: this.peerId,
|
|
96
115
|
enrUdp: await this.enr.getFullMultiaddr('udp'),
|
|
97
116
|
enrTcp: await this.enr.getFullMultiaddr('tcp'),
|
|
117
|
+
versions: this.versions,
|
|
98
118
|
});
|
|
99
119
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
100
120
|
|
|
101
121
|
// Add bootnode ENR if provided
|
|
102
122
|
if (this.bootstrapNodes?.length) {
|
|
103
123
|
// Do this conversion once since it involves an async function call
|
|
104
|
-
|
|
105
|
-
this.
|
|
106
|
-
|
|
107
|
-
|
|
124
|
+
const bootstrapNodesEnrs = this.bootstrapNodes.map(enr => ENR.decodeTxt(enr));
|
|
125
|
+
this.bootstrapNodePeerIds = await Promise.all(bootstrapNodesEnrs.map(enr => enr.peerId()));
|
|
126
|
+
this.logger.info(`Adding ${this.bootstrapNodes} bootstrap nodes ENRs: ${this.bootstrapNodes.join(', ')}`);
|
|
127
|
+
for (const enr of bootstrapNodesEnrs) {
|
|
128
|
+
try {
|
|
129
|
+
if (this.config.bootstrapNodeEnrVersionCheck) {
|
|
130
|
+
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
131
|
+
if (!value) {
|
|
132
|
+
throw new Error('ENR does not contain aztec key');
|
|
133
|
+
}
|
|
134
|
+
checkCompressedComponentVersion(Buffer.from(value).toString(), this.versions);
|
|
135
|
+
}
|
|
108
136
|
this.discv5.addEnr(enr);
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
|
|
137
|
+
} catch (e) {
|
|
138
|
+
this.logger.error(`Error adding bootratrap node ${enr.encodeTxt()}`, e);
|
|
139
|
+
}
|
|
112
140
|
}
|
|
113
141
|
}
|
|
114
142
|
}
|
|
@@ -169,14 +197,35 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
169
197
|
}
|
|
170
198
|
|
|
171
199
|
private onDiscovered(enr: ENR) {
|
|
172
|
-
|
|
200
|
+
if (this.validateEnr(enr)) {
|
|
201
|
+
this.emit(PeerEvent.DISCOVERED, enr);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private validateEnr(enr: ENR): boolean {
|
|
206
|
+
// Check the peer is an aztec peer
|
|
173
207
|
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
174
|
-
if (value) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
208
|
+
if (!value) {
|
|
209
|
+
this.logger.warn(`Peer ${enr.nodeId} does not have aztec key in ENR`);
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
let compressedVersion;
|
|
214
|
+
try {
|
|
215
|
+
// And check it has the correct version
|
|
216
|
+
compressedVersion = Buffer.from(value).toString();
|
|
217
|
+
checkCompressedComponentVersion(compressedVersion, this.versions);
|
|
218
|
+
return true;
|
|
219
|
+
} catch (err: any) {
|
|
220
|
+
if (err.name === 'ComponentsVersionsError') {
|
|
221
|
+
this.logger.warn(`Peer ${enr.nodeId} has incorrect version: ${err.message}`, {
|
|
222
|
+
compressedVersion,
|
|
223
|
+
expected: this.versions,
|
|
224
|
+
});
|
|
225
|
+
} else {
|
|
226
|
+
this.logger.error(`Error checking peer version`, err);
|
|
179
227
|
}
|
|
180
228
|
}
|
|
229
|
+
return false;
|
|
181
230
|
}
|
|
182
231
|
}
|
|
@@ -88,6 +88,8 @@ export class DummyP2PService implements P2PService {
|
|
|
88
88
|
*/
|
|
89
89
|
export class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
|
|
90
90
|
private currentState = PeerDiscoveryState.STOPPED;
|
|
91
|
+
public bootstrapNodes: string[] = [];
|
|
92
|
+
|
|
91
93
|
/**
|
|
92
94
|
* Starts the dummy implementation.
|
|
93
95
|
* @returns A resolved promise.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
|
|
3
|
+
import { type ComponentLogger, type Logger } from '@libp2p/interface';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a libp2p compatible logger that wraps our pino logger.
|
|
7
|
+
* This adapter implements the ComponentLogger interface required by libp2p.
|
|
8
|
+
*/
|
|
9
|
+
export function createLibp2pComponentLogger(namespace: string, fixedTerms = {}): ComponentLogger {
|
|
10
|
+
return {
|
|
11
|
+
forComponent: (component: string) => createLibp2pLogger(`${namespace}:${component}`, fixedTerms),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function createLibp2pLogger(component: string, fixedTerms = {}): Logger {
|
|
16
|
+
const logger = createLogger(component, fixedTerms);
|
|
17
|
+
|
|
18
|
+
// Default log level is trace as this is super super noisy
|
|
19
|
+
const logFn = (formatter: any, ...args: any[]) => {
|
|
20
|
+
// Handle %p format specifier by manually replacing with args
|
|
21
|
+
if (typeof formatter === 'string' && args.length > 0) {
|
|
22
|
+
// Handle %p, %a, %s and %d format specifiers
|
|
23
|
+
const parts = formatter.split(/(%p|%a|%s|%d)/);
|
|
24
|
+
let result = parts[0];
|
|
25
|
+
let argIndex = 0;
|
|
26
|
+
|
|
27
|
+
for (let i = 1; i < parts.length; i += 2) {
|
|
28
|
+
if (argIndex < args.length) {
|
|
29
|
+
result += String(args[argIndex]) + (parts[i + 1] || '');
|
|
30
|
+
argIndex++;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
formatter = result;
|
|
35
|
+
// Only keep non-format args as data
|
|
36
|
+
args = args.slice(argIndex);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Handle object args by spreading them, but only if they weren't used in formatting
|
|
40
|
+
if (args.length === 1 && typeof args[0] === 'object') {
|
|
41
|
+
logger.trace(formatter, args[0]);
|
|
42
|
+
} else if (args.length > 0) {
|
|
43
|
+
// If we have remaining args after formatting, pass them as data
|
|
44
|
+
logger.trace(formatter, { _args: args });
|
|
45
|
+
} else {
|
|
46
|
+
logger.trace(formatter);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return Object.assign(logFn, {
|
|
51
|
+
enabled: logger.isLevelEnabled('debug'),
|
|
52
|
+
|
|
53
|
+
error(...args: any[]) {
|
|
54
|
+
const [msg, ...rest] = args;
|
|
55
|
+
logger.error(msg as string, ...rest);
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
debug(...args: any[]) {
|
|
59
|
+
const [msg, ...rest] = args;
|
|
60
|
+
logger.debug(msg as string, ...rest);
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
info(...args: any[]) {
|
|
64
|
+
const [msg, ...rest] = args;
|
|
65
|
+
logger.info(msg as string, ...rest);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
warn(...args: any[]) {
|
|
69
|
+
const [msg, ...rest] = args;
|
|
70
|
+
logger.warn(msg as string, ...rest);
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
trace(...args: any[]) {
|
|
74
|
+
const [msg, ...rest] = args;
|
|
75
|
+
logger.trace(msg as string, ...rest);
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|