@aztec/p2p 0.35.1 → 0.37.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 +10 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +40 -59
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +16 -4
- package/dest/client/p2p_client.d.ts +1 -1
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/config.d.ts +17 -5
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +6 -3
- package/dest/service/discV5_service.d.ts +34 -0
- package/dest/service/discV5_service.d.ts.map +1 -0
- package/dest/service/discV5_service.js +95 -0
- package/dest/service/dummy_service.d.ts +23 -1
- package/dest/service/dummy_service.d.ts.map +1 -1
- package/dest/service/dummy_service.js +28 -1
- package/dest/service/known_txs.d.ts +1 -1
- package/dest/service/known_txs.d.ts.map +1 -1
- package/dest/service/libp2p_service.d.ts +12 -5
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +64 -24
- package/dest/service/peer_store.d.ts +18 -0
- package/dest/service/peer_store.d.ts.map +1 -0
- package/dest/service/peer_store.js +25 -0
- package/dest/service/service.d.ts +27 -1
- package/dest/service/service.d.ts.map +1 -1
- package/package.json +26 -14
- package/src/bootstrap/bootstrap.ts +52 -70
- package/src/client/index.ts +14 -3
- package/src/client/p2p_client.ts +1 -1
- package/src/config.ts +29 -8
- package/src/service/discV5_service.ts +122 -0
- package/src/service/dummy_service.ts +30 -1
- package/src/service/known_txs.ts +1 -1
- package/src/service/libp2p_service.ts +80 -35
- package/src/service/peer_store.ts +36 -0
- package/src/service/service.ts +31 -1
|
@@ -1,17 +1,23 @@
|
|
|
1
|
+
import type { PeerId } from '@libp2p/interface';
|
|
1
2
|
import { type P2PConfig } from '../config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Required P2P config values for a bootstrap node.
|
|
5
|
+
*/
|
|
6
|
+
export type BootNodeConfig = Partial<P2PConfig> & Pick<P2PConfig, 'announceHostname' | 'announcePort'> & Required<Pick<P2PConfig, 'udpListenIp' | 'udpListenPort'>>;
|
|
2
7
|
/**
|
|
3
8
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
4
9
|
*/
|
|
5
10
|
export declare class BootstrapNode {
|
|
6
11
|
private logger;
|
|
7
12
|
private node?;
|
|
13
|
+
private peerId?;
|
|
8
14
|
constructor(logger?: import("@aztec/foundation/log").Logger);
|
|
9
15
|
/**
|
|
10
16
|
* Starts the bootstrap node.
|
|
11
|
-
* @param config -
|
|
17
|
+
* @param config - A partial P2P configuration. No need for TCP values as well as aztec node specific values.
|
|
12
18
|
* @returns An empty promise.
|
|
13
19
|
*/
|
|
14
|
-
start(config:
|
|
20
|
+
start(config: BootNodeConfig): Promise<void>;
|
|
15
21
|
/**
|
|
16
22
|
* Stops the bootstrap node.
|
|
17
23
|
* @returns And empty promise.
|
|
@@ -21,6 +27,7 @@ export declare class BootstrapNode {
|
|
|
21
27
|
* Returns the peerId of this node.
|
|
22
28
|
* @returns The node's peer Id
|
|
23
29
|
*/
|
|
24
|
-
getPeerId():
|
|
30
|
+
getPeerId(): PeerId;
|
|
31
|
+
getENR(): import("@chainsafe/enr").ENR;
|
|
25
32
|
}
|
|
26
33
|
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,GAC7C,IAAI,CAAC,SAAS,EAAE,kBAAkB,GAAG,cAAc,CAAC,GACpD,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;AAE7D;;GAEG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,IAAI,CAAC,CAAqB;IAClC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEJ,MAAM,yCAA2C;IAErE;;;;OAIG;IACU,KAAK,CAAC,MAAM,EAAE,cAAc;IAuCzC;;;OAGG;IACU,IAAI;IAMjB;;;OAGG;IACI,SAAS;IAOT,MAAM;CAMd"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { mplex } from '@libp2p/mplex';
|
|
6
|
-
import { tcp } from '@libp2p/tcp';
|
|
7
|
-
import { createLibp2p } from 'libp2p';
|
|
8
|
-
import { identifyService } from 'libp2p/identify';
|
|
9
|
-
import { format } from 'util';
|
|
2
|
+
import { Discv5 } from '@chainsafe/discv5';
|
|
3
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
4
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
10
5
|
import { createLibP2PPeerId } from '../service/index.js';
|
|
11
6
|
/**
|
|
12
7
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
@@ -18,64 +13,41 @@ export class BootstrapNode {
|
|
|
18
13
|
}
|
|
19
14
|
/**
|
|
20
15
|
* Starts the bootstrap node.
|
|
21
|
-
* @param config -
|
|
16
|
+
* @param config - A partial P2P configuration. No need for TCP values as well as aztec node specific values.
|
|
22
17
|
* @returns An empty promise.
|
|
23
18
|
*/
|
|
24
19
|
async start(config) {
|
|
25
|
-
const { peerIdPrivateKey,
|
|
20
|
+
const { peerIdPrivateKey, udpListenIp, udpListenPort, announceHostname, announcePort } = config;
|
|
26
21
|
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
27
|
-
this.
|
|
28
|
-
const
|
|
29
|
-
|
|
22
|
+
this.peerId = peerId;
|
|
23
|
+
const enr = SignableENR.createFromPeerId(peerId);
|
|
24
|
+
const listenAddrUdp = multiaddr(`/ip4/${udpListenIp}/udp/${udpListenPort}`);
|
|
25
|
+
const publicAddr = multiaddr(`${announceHostname}/udp/${announcePort}`);
|
|
26
|
+
enr.setLocationMultiaddr(publicAddr);
|
|
27
|
+
this.logger.info(`Starting bootstrap node ${peerId}, listening on ${listenAddrUdp.toString()}`);
|
|
28
|
+
this.node = Discv5.create({
|
|
29
|
+
enr,
|
|
30
30
|
peerId,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
bindAddrs: { ip4: listenAddrUdp },
|
|
32
|
+
config: {
|
|
33
|
+
lookupTimeout: 2000,
|
|
34
34
|
},
|
|
35
|
-
transports: [tcp()],
|
|
36
|
-
streamMuxers: [yamux(), mplex()],
|
|
37
|
-
connectionEncryption: [noise()],
|
|
38
|
-
connectionManager: {
|
|
39
|
-
minConnections: minPeerCount,
|
|
40
|
-
maxConnections: maxPeerCount,
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
const services = {
|
|
44
|
-
identify: identifyService({
|
|
45
|
-
protocolPrefix: 'aztec',
|
|
46
|
-
}),
|
|
47
|
-
kadDHT: kadDHT({
|
|
48
|
-
protocolPrefix: 'aztec',
|
|
49
|
-
clientMode: false,
|
|
50
|
-
}),
|
|
51
|
-
// The autonat service seems quite problematic in that using it seems to cause a lot of attempts
|
|
52
|
-
// to dial ephemeral ports. I suspect that it works better if you can get the uPNPnat service to
|
|
53
|
-
// work as then you would have a permanent port to be dialled.
|
|
54
|
-
// Alas, I struggled to get this to work reliably either.
|
|
55
|
-
// autoNAT: autoNATService({
|
|
56
|
-
// protocolPrefix: 'aztec',
|
|
57
|
-
// }),
|
|
58
|
-
};
|
|
59
|
-
this.node = await createLibp2p({
|
|
60
|
-
...opts,
|
|
61
|
-
services,
|
|
62
|
-
});
|
|
63
|
-
await this.node.start();
|
|
64
|
-
this.logger.debug(`lib p2p has started`);
|
|
65
|
-
// print out listening addresses
|
|
66
|
-
this.logger.info('Listening on addresses:');
|
|
67
|
-
this.node.getMultiaddrs().forEach(addr => {
|
|
68
|
-
this.logger.info(addr.toString());
|
|
69
35
|
});
|
|
70
|
-
this.node.
|
|
71
|
-
this.logger.
|
|
36
|
+
this.node.on('multiaddrUpdated', (addr) => {
|
|
37
|
+
this.logger.info('Advertised socket address updated', { addr: addr.toString() });
|
|
72
38
|
});
|
|
73
|
-
this.node.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.node.addEventListener('peer:disconnect', evt => {
|
|
77
|
-
this.logger.verbose(format('Disconnected from %s', evt.detail.toString())); // Log connected peer
|
|
39
|
+
this.node.on('discovered', async (enr) => {
|
|
40
|
+
const addr = await enr.getFullMultiaddr('udp');
|
|
41
|
+
this.logger.verbose(`Discovered new peer, enr: ${enr.encodeTxt()}, addr: ${addr?.toString()}`);
|
|
78
42
|
});
|
|
43
|
+
try {
|
|
44
|
+
await this.node.start();
|
|
45
|
+
this.logger.info('Discv5 started');
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
this.logger.error('Error starting Discv5', e);
|
|
49
|
+
}
|
|
50
|
+
this.logger.info(`ENR: ${this.node?.enr.encodeTxt()}`);
|
|
79
51
|
}
|
|
80
52
|
/**
|
|
81
53
|
* Stops the bootstrap node.
|
|
@@ -91,7 +63,16 @@ export class BootstrapNode {
|
|
|
91
63
|
* @returns The node's peer Id
|
|
92
64
|
*/
|
|
93
65
|
getPeerId() {
|
|
94
|
-
|
|
66
|
+
if (!this.peerId) {
|
|
67
|
+
throw new Error('Node not started');
|
|
68
|
+
}
|
|
69
|
+
return this.peerId;
|
|
70
|
+
}
|
|
71
|
+
getENR() {
|
|
72
|
+
if (!this.node) {
|
|
73
|
+
throw new Error('Node not started');
|
|
74
|
+
}
|
|
75
|
+
return this.node?.enr.toENR();
|
|
95
76
|
}
|
|
96
77
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jvb3RzdHJhcC9ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE1BQU0sRUFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVN6RDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBSXhCLFlBQW9CLFNBQVMsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFBakQsV0FBTSxHQUFOLE1BQU0sQ0FBMkM7UUFIN0QsU0FBSSxHQUFZLFNBQVMsQ0FBQztJQUdzQyxDQUFDO0lBRXpFOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQXNCO1FBQ3ZDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNoRyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLFdBQVcsUUFBUSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixRQUFRLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDeEUsR0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,cAAc,iBAAiB,CAAC;AAEhC,eAAO,MAAM,eAAe,UACnB,YAAY,UACX,SAAS,UACT,MAAM,iBACC,aAAa,uBAc7B,CAAC"}
|
package/dest/client/index.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { P2PClient } from '../client/p2p_client.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { DiscV5Service } from '../service/discV5_service.js';
|
|
3
|
+
import { DummyP2PService, DummyPeerDiscoveryService } from '../service/dummy_service.js';
|
|
4
|
+
import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
|
|
4
5
|
export * from './p2p_client.js';
|
|
5
6
|
export const createP2PClient = async (store, config, txPool, l2BlockSource) => {
|
|
6
|
-
|
|
7
|
+
let discv5Service;
|
|
8
|
+
let p2pService;
|
|
9
|
+
if (config.p2pEnabled) {
|
|
10
|
+
// Create peer discovery service]
|
|
11
|
+
const peerId = await createLibP2PPeerId(config.peerIdPrivateKey);
|
|
12
|
+
discv5Service = new DiscV5Service(peerId, config);
|
|
13
|
+
p2pService = await LibP2PService.new(config, discv5Service, peerId, txPool, store);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
p2pService = new DummyP2PService();
|
|
17
|
+
discv5Service = new DummyPeerDiscoveryService();
|
|
18
|
+
}
|
|
7
19
|
return new P2PClient(store, l2BlockSource, txPool, p2pService);
|
|
8
20
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd4RSxjQUFjLGlCQUFpQixDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQ2xDLEtBQW1CLEVBQ25CLE1BQWlCLEVBQ2pCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixFQUFFO0lBQ0YsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7U0FBTSxDQUFDO1FBQ04sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDbkMsYUFBYSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type L2BlockSource, type Tx, type TxHash } from '@aztec/circuit-types';
|
|
2
2
|
import { type AztecKVStore } from '@aztec/kv-store';
|
|
3
|
-
import {
|
|
3
|
+
import type { P2PService } from '../service/service.js';
|
|
4
4
|
import { type TxPool } from '../tx_pool/index.js';
|
|
5
5
|
/**
|
|
6
6
|
* Enum defining the possible states of the p2p client.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGjH,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AAGzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGjH,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AAGzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,oBAAY,cAAc;IACxB,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;IAEI;AACJ,MAAM,WAAW,GAAG;IAClB;;;QAGI;IACJ,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;;QAII;IACJ,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAErD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,GAAG;IAgCjC,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAlCb;;OAEG;IACH,OAAO,CAAC,eAAe,CAAoB;IAE3C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACH,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,WAAW,CAAC,CAAyB;IAC7C,OAAO,CAAC,kBAAkB,CAAyB;IAEnD;;;;;;;OAOG;gBAED,KAAK,EAAE,YAAY,EACX,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,GAAG,yCAAiC;IAO9C;;;OAGG;IACU,KAAK;IA+ClB;;;OAGG;IACU,IAAI;IAYjB;;;OAGG;IACI,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAI9B;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAIpD;;;;QAII;IACS,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1C;;;;;QAKI;IACS,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD;;;OAGG;IACI,OAAO;IAId;;;OAGG;IACI,iBAAiB;IAIxB;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAOzC;;;;OAIG;YACW,eAAe;IAQ7B;;;;OAIG;YACW,cAAc;IAkB5B;;;OAGG;IACH,OAAO,CAAC,eAAe;YAKT,gBAAgB;CAW/B"}
|
package/dest/config.d.ts
CHANGED
|
@@ -7,9 +7,13 @@ export interface P2PConfig {
|
|
|
7
7
|
*/
|
|
8
8
|
p2pEnabled: boolean;
|
|
9
9
|
/**
|
|
10
|
-
* The frequency in which to check.
|
|
10
|
+
* The frequency in which to check for new L2 blocks.
|
|
11
11
|
*/
|
|
12
12
|
p2pBlockCheckIntervalMS: number;
|
|
13
|
+
/**
|
|
14
|
+
* The frequency in which to check for new peers.
|
|
15
|
+
*/
|
|
16
|
+
p2pPeerCheckIntervalMS: number;
|
|
13
17
|
/**
|
|
14
18
|
* Size of queue of L2 blocks to store.
|
|
15
19
|
*/
|
|
@@ -22,6 +26,14 @@ export interface P2PConfig {
|
|
|
22
26
|
* The tcp IP on which the P2P service should listen for connections.
|
|
23
27
|
*/
|
|
24
28
|
tcpListenIp: string;
|
|
29
|
+
/**
|
|
30
|
+
* The udp port on which the P2P service should listen for connections. Used for Discv5 peer discovery.
|
|
31
|
+
*/
|
|
32
|
+
udpListenPort: number;
|
|
33
|
+
/**
|
|
34
|
+
* The udp IP on which the P2P service should listen for connections. Used for Discv5 peer discovery.
|
|
35
|
+
*/
|
|
36
|
+
udpListenIp: string;
|
|
25
37
|
/**
|
|
26
38
|
* An optional peer id private key. If blank, will generate a random key.
|
|
27
39
|
*/
|
|
@@ -42,10 +54,6 @@ export interface P2PConfig {
|
|
|
42
54
|
* Port to announce.
|
|
43
55
|
*/
|
|
44
56
|
announcePort?: number;
|
|
45
|
-
/**
|
|
46
|
-
* Optional specification to run as a client in the Kademlia routing protocol.
|
|
47
|
-
*/
|
|
48
|
-
clientKADRouting: boolean;
|
|
49
57
|
/**
|
|
50
58
|
* Whether to enable NAT from libp2p (ignored for bootstrap node).
|
|
51
59
|
*/
|
|
@@ -58,6 +66,10 @@ export interface P2PConfig {
|
|
|
58
66
|
* The maximum number of peers (a peer count above this will cause the node to refuse connection attempts)
|
|
59
67
|
*/
|
|
60
68
|
maxPeerCount: number;
|
|
69
|
+
/**
|
|
70
|
+
* Data directory for peer & tx databases.
|
|
71
|
+
*/
|
|
72
|
+
dataDirectory?: string;
|
|
61
73
|
}
|
|
62
74
|
/**
|
|
63
75
|
* Gets the config values for p2p client from environment variables.
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,CAuC/C"}
|
package/dest/config.js
CHANGED
|
@@ -3,23 +3,26 @@
|
|
|
3
3
|
* @returns The config values for p2p client.
|
|
4
4
|
*/
|
|
5
5
|
export function getP2PConfigEnvVars() {
|
|
6
|
-
const { P2P_ENABLED, P2P_BLOCK_CHECK_INTERVAL_MS, P2P_L2_BLOCK_QUEUE_SIZE, P2P_TCP_LISTEN_PORT, P2P_TCP_LISTEN_IP, PEER_ID_PRIVATE_KEY, BOOTSTRAP_NODES, P2P_ANNOUNCE_HOSTNAME, P2P_ANNOUNCE_PORT,
|
|
6
|
+
const { P2P_ENABLED, P2P_BLOCK_CHECK_INTERVAL_MS, P2P_PEER_CHECK_INTERVAL_MS, P2P_L2_BLOCK_QUEUE_SIZE, P2P_TCP_LISTEN_PORT, P2P_TCP_LISTEN_IP, P2P_UDP_LISTEN_PORT, P2P_UDP_LISTEN_IP, PEER_ID_PRIVATE_KEY, BOOTSTRAP_NODES, P2P_ANNOUNCE_HOSTNAME, P2P_ANNOUNCE_PORT, P2P_NAT_ENABLED, P2P_MIN_PEERS, P2P_MAX_PEERS, DATA_DIRECTORY, } = process.env;
|
|
7
7
|
const envVars = {
|
|
8
8
|
p2pEnabled: P2P_ENABLED === 'true',
|
|
9
9
|
p2pBlockCheckIntervalMS: P2P_BLOCK_CHECK_INTERVAL_MS ? +P2P_BLOCK_CHECK_INTERVAL_MS : 100,
|
|
10
|
+
p2pPeerCheckIntervalMS: P2P_PEER_CHECK_INTERVAL_MS ? +P2P_PEER_CHECK_INTERVAL_MS : 1000,
|
|
10
11
|
p2pL2QueueSize: P2P_L2_BLOCK_QUEUE_SIZE ? +P2P_L2_BLOCK_QUEUE_SIZE : 1000,
|
|
11
12
|
tcpListenPort: P2P_TCP_LISTEN_PORT ? +P2P_TCP_LISTEN_PORT : 40400,
|
|
12
13
|
tcpListenIp: P2P_TCP_LISTEN_IP ? P2P_TCP_LISTEN_IP : '0.0.0.0',
|
|
14
|
+
udpListenPort: P2P_UDP_LISTEN_PORT ? +P2P_UDP_LISTEN_PORT : 40400,
|
|
15
|
+
udpListenIp: P2P_UDP_LISTEN_IP ? P2P_UDP_LISTEN_IP : '0.0.0.0',
|
|
13
16
|
peerIdPrivateKey: PEER_ID_PRIVATE_KEY,
|
|
14
17
|
bootstrapNodes: BOOTSTRAP_NODES ? BOOTSTRAP_NODES.split(',') : [],
|
|
15
18
|
transactionProtocol: '',
|
|
16
19
|
announceHostname: P2P_ANNOUNCE_HOSTNAME,
|
|
17
20
|
announcePort: P2P_ANNOUNCE_PORT ? +P2P_ANNOUNCE_PORT : undefined,
|
|
18
|
-
clientKADRouting: P2P_KAD_CLIENT === 'true',
|
|
19
21
|
enableNat: P2P_NAT_ENABLED === 'true',
|
|
20
22
|
minPeerCount: P2P_MIN_PEERS ? +P2P_MIN_PEERS : 10,
|
|
21
23
|
maxPeerCount: P2P_MAX_PEERS ? +P2P_MAX_PEERS : 100,
|
|
24
|
+
dataDirectory: DATA_DIRECTORY,
|
|
22
25
|
};
|
|
23
26
|
return envVars;
|
|
24
27
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwRkE7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxNQUFNLEVBQ0osV0FBVyxFQUNYLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxHQUNmLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNoQixNQUFNLE9BQU8sR0FBYztRQUN6QixVQUFVLEVBQUUsV0FBVyxLQUFLLE1BQU07UUFDbEMsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFDekYsc0JBQXNCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDdkYsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQ3pFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUNqRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzlELGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUNqRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzlELGdCQUFnQixFQUFFLG1CQUFtQjtRQUNyQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pFLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNoRSxTQUFTLEVBQUUsZUFBZSxLQUFLLE1BQU07UUFDckMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFDbEQsYUFBYSxFQUFFLGNBQWM7S0FDOUIsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { type ENR } from '@chainsafe/enr';
|
|
3
|
+
import type { PeerId } from '@libp2p/interface';
|
|
4
|
+
import EventEmitter from 'events';
|
|
5
|
+
import type { P2PConfig } from '../config.js';
|
|
6
|
+
import type { PeerDiscoveryService } from './service.js';
|
|
7
|
+
export declare enum PeerDiscoveryState {
|
|
8
|
+
RUNNING = "running",
|
|
9
|
+
STOPPED = "stopped"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Peer discovery service using Discv5.
|
|
13
|
+
*/
|
|
14
|
+
export declare class DiscV5Service extends EventEmitter implements PeerDiscoveryService {
|
|
15
|
+
private peerId;
|
|
16
|
+
private logger;
|
|
17
|
+
/** The Discv5 instance */
|
|
18
|
+
private discv5;
|
|
19
|
+
/** This instance's ENR */
|
|
20
|
+
private enr;
|
|
21
|
+
/** The interval for checking for new peers */
|
|
22
|
+
private discoveryInterval;
|
|
23
|
+
private runningPromise;
|
|
24
|
+
private currentState;
|
|
25
|
+
constructor(peerId: PeerId, config: P2PConfig, logger?: import("@aztec/foundation/log").Logger);
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
getAllPeers(): ENR[];
|
|
28
|
+
getEnr(): ENR;
|
|
29
|
+
getPeerId(): PeerId;
|
|
30
|
+
getStatus(): PeerDiscoveryState;
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
private onDiscovered;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=discV5_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discV5_service.d.ts","sourceRoot":"","sources":["../../src/service/discV5_service.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAa,YAAW,oBAAoB;IAcjE,OAAO,CAAC,MAAM;IAA6B,OAAO,CAAC,MAAM;IAbrE,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAc;IAEzB,8CAA8C;IAC9C,OAAO,CAAC,iBAAiB,CAA+B;IAExD,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,YAAY,CAA8B;gBAE9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAU,MAAM,yCAA4C;IAmDpG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,WAAW,IAAI,GAAG,EAAE;IAIpB,MAAM,IAAI,GAAG;IAIb,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,kBAAkB;IAIzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
|
+
import { Discv5 } from '@chainsafe/discv5';
|
|
4
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
5
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
6
|
+
import EventEmitter from 'events';
|
|
7
|
+
export var PeerDiscoveryState;
|
|
8
|
+
(function (PeerDiscoveryState) {
|
|
9
|
+
PeerDiscoveryState["RUNNING"] = "running";
|
|
10
|
+
PeerDiscoveryState["STOPPED"] = "stopped";
|
|
11
|
+
})(PeerDiscoveryState || (PeerDiscoveryState = {}));
|
|
12
|
+
/**
|
|
13
|
+
* Peer discovery service using Discv5.
|
|
14
|
+
*/
|
|
15
|
+
export class DiscV5Service extends EventEmitter {
|
|
16
|
+
constructor(peerId, config, logger = createDebugLogger('aztec:discv5_service')) {
|
|
17
|
+
super();
|
|
18
|
+
this.peerId = peerId;
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
/** The interval for checking for new peers */
|
|
21
|
+
this.discoveryInterval = null;
|
|
22
|
+
this.currentState = PeerDiscoveryState.STOPPED;
|
|
23
|
+
const { announceHostname, tcpListenPort, udpListenIp, udpListenPort, bootstrapNodes } = config;
|
|
24
|
+
// create ENR from PeerId
|
|
25
|
+
this.enr = SignableENR.createFromPeerId(peerId);
|
|
26
|
+
const multiAddrUdp = multiaddr(`${announceHostname}/udp/${udpListenPort}/p2p/${peerId.toString()}`);
|
|
27
|
+
const multiAddrTcp = multiaddr(`${announceHostname}/tcp/${tcpListenPort}/p2p/${peerId.toString()}`);
|
|
28
|
+
const listenMultiAddrUdp = multiaddr(`/ip4/${udpListenIp}/udp/${udpListenPort}`);
|
|
29
|
+
// set location multiaddr in ENR record
|
|
30
|
+
this.enr.setLocationMultiaddr(multiAddrUdp);
|
|
31
|
+
this.enr.setLocationMultiaddr(multiAddrTcp);
|
|
32
|
+
this.discv5 = Discv5.create({
|
|
33
|
+
enr: this.enr,
|
|
34
|
+
peerId,
|
|
35
|
+
bindAddrs: { ip4: listenMultiAddrUdp },
|
|
36
|
+
config: {
|
|
37
|
+
lookupTimeout: 2000,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
this.logger.info(`ENR NodeId: ${this.enr.nodeId}`);
|
|
41
|
+
this.logger.info(`ENR UDP: ${multiAddrUdp.toString()}`);
|
|
42
|
+
this.discv5.on('discovered', (enr) => this.onDiscovered(enr));
|
|
43
|
+
this.discv5.on('enrAdded', async (enr) => {
|
|
44
|
+
const multiAddrTcp = await enr.getFullMultiaddr('tcp');
|
|
45
|
+
const multiAddrUdp = await enr.getFullMultiaddr('udp');
|
|
46
|
+
this.logger.debug(`ENR multiaddr: ${multiAddrTcp?.toString()}, ${multiAddrUdp?.toString()}`);
|
|
47
|
+
});
|
|
48
|
+
// Add bootnode ENR if provided
|
|
49
|
+
if (bootstrapNodes?.length) {
|
|
50
|
+
this.logger.info(`Adding bootstrap ENRs: ${bootstrapNodes.join(', ')}`);
|
|
51
|
+
try {
|
|
52
|
+
bootstrapNodes.forEach(enr => {
|
|
53
|
+
this.discv5.addEnr(enr);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
this.logger.error(`Error adding bootnode ENRs: ${e}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
this.runningPromise = new RunningPromise(async () => {
|
|
61
|
+
await this.discv5.findRandomNode();
|
|
62
|
+
}, config.p2pPeerCheckIntervalMS);
|
|
63
|
+
}
|
|
64
|
+
async start() {
|
|
65
|
+
if (this.currentState === PeerDiscoveryState.RUNNING) {
|
|
66
|
+
throw new Error('DiscV5Service already started');
|
|
67
|
+
}
|
|
68
|
+
this.logger.info('Starting DiscV5');
|
|
69
|
+
await this.discv5.start();
|
|
70
|
+
this.logger.info('DiscV5 started');
|
|
71
|
+
this.currentState = PeerDiscoveryState.RUNNING;
|
|
72
|
+
this.runningPromise.start();
|
|
73
|
+
}
|
|
74
|
+
getAllPeers() {
|
|
75
|
+
return this.discv5.kadValues();
|
|
76
|
+
}
|
|
77
|
+
getEnr() {
|
|
78
|
+
return this.enr.toENR();
|
|
79
|
+
}
|
|
80
|
+
getPeerId() {
|
|
81
|
+
return this.peerId;
|
|
82
|
+
}
|
|
83
|
+
getStatus() {
|
|
84
|
+
return this.currentState;
|
|
85
|
+
}
|
|
86
|
+
async stop() {
|
|
87
|
+
await this.runningPromise.stop();
|
|
88
|
+
await this.discv5.stop();
|
|
89
|
+
this.currentState = PeerDiscoveryState.STOPPED;
|
|
90
|
+
}
|
|
91
|
+
onDiscovered(enr) {
|
|
92
|
+
this.emit('peer:discovered', enr);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY1Y1X3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9kaXNjVjVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRSxPQUFPLEVBQVksV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUtsQyxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0lBQ25CLHlDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFlBQVk7SUFjN0MsWUFBb0IsTUFBYyxFQUFFLE1BQWlCLEVBQVUsU0FBUyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQztRQUMvRyxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBNkIsV0FBTSxHQUFOLE1BQU0sQ0FBNEM7UUFQakgsOENBQThDO1FBQ3RDLHNCQUFpQixHQUEwQixJQUFJLENBQUM7UUFJaEQsaUJBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFJaEQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvRix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMs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
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { type Tx, type TxHash } from '@aztec/circuit-types';
|
|
2
|
-
import
|
|
3
|
+
import EventEmitter from 'events';
|
|
4
|
+
import type { P2PService, PeerDiscoveryService } from './service.js';
|
|
3
5
|
/**
|
|
4
6
|
* A dummy implementation of the P2P Service.
|
|
5
7
|
*/
|
|
@@ -25,4 +27,24 @@ export declare class DummyP2PService implements P2PService {
|
|
|
25
27
|
*/
|
|
26
28
|
settledTxs(_: TxHash[]): void;
|
|
27
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* A dummy implementation of the Peer Discovery Service.
|
|
32
|
+
*/
|
|
33
|
+
export declare class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
|
|
34
|
+
/**
|
|
35
|
+
* Starts the dummy implementation.
|
|
36
|
+
* @returns A resolved promise.
|
|
37
|
+
*/
|
|
38
|
+
start(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Stops the dummy implementation.
|
|
41
|
+
* @returns A resolved promise.
|
|
42
|
+
*/
|
|
43
|
+
stop(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Called to discover peers in the network.
|
|
46
|
+
* @returns An array of discovered peer addresses.
|
|
47
|
+
*/
|
|
48
|
+
getAllPeers(): never[];
|
|
49
|
+
}
|
|
28
50
|
//# sourceMappingURL=dummy_service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/service/dummy_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,
|
|
1
|
+
{"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/service/dummy_service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAErE;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,WAAW,CAAC,CAAC,EAAE,EAAE;IAExB;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;CAC9B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF;;;OAGG;IACI,KAAK;IAGZ;;;OAGG;IACI,IAAI;IAGX;;;OAGG;IACI,WAAW;CAGnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import EventEmitter from 'events';
|
|
1
2
|
/**
|
|
2
3
|
* A dummy implementation of the P2P Service.
|
|
3
4
|
*/
|
|
@@ -27,4 +28,30 @@ export class DummyP2PService {
|
|
|
27
28
|
*/
|
|
28
29
|
settledTxs(_) { }
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
+
/**
|
|
32
|
+
* A dummy implementation of the Peer Discovery Service.
|
|
33
|
+
*/
|
|
34
|
+
export class DummyPeerDiscoveryService extends EventEmitter {
|
|
35
|
+
/**
|
|
36
|
+
* Starts the dummy implementation.
|
|
37
|
+
* @returns A resolved promise.
|
|
38
|
+
*/
|
|
39
|
+
start() {
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stops the dummy implementation.
|
|
44
|
+
* @returns A resolved promise.
|
|
45
|
+
*/
|
|
46
|
+
stop() {
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Called to discover peers in the network.
|
|
51
|
+
* @returns An array of discovered peer addresses.
|
|
52
|
+
*/
|
|
53
|
+
getAllPeers() {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlL2R1bW15X3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBSWxDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7OztPQUdHO0lBQ0ksS0FBSztRQUNWLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJO1FBQ1QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxDQUFLLElBQUcsQ0FBQztJQUU1Qjs7O09BR0c7SUFDSSxVQUFVLENBQUMsQ0FBVyxJQUFHLENBQUM7Q0FDbEM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxZQUFZO0lBQ3pEOzs7T0FHRztJQUNJLEtBQUs7UUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksSUFBSTtRQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"known_txs.d.ts","sourceRoot":"","sources":["../../src/service/known_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"known_txs.d.ts","sourceRoot":"","sources":["../../src/service/known_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAqD;;IAInE;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAYlD;;;;;OAKG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IASnD;;;;;;;OAOG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE;CAK3C"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { type Tx, type TxHash } from '@aztec/circuit-types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type AztecKVStore } from '@aztec/kv-store';
|
|
3
|
+
import type { PeerId } from '@libp2p/interface';
|
|
4
|
+
import '@libp2p/kad-dht';
|
|
3
5
|
import { type Libp2p } from 'libp2p';
|
|
4
6
|
import { type P2PConfig } from '../config.js';
|
|
5
7
|
import { type TxPool } from '../tx_pool/index.js';
|
|
6
|
-
import { type
|
|
8
|
+
import { type AztecPeerStore } from './peer_store.js';
|
|
9
|
+
import type { P2PService, PeerDiscoveryService } from './service.js';
|
|
7
10
|
/**
|
|
8
11
|
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
9
12
|
* @param privateKey - Optional peer ID private key as hex string
|
|
10
13
|
* @returns The peer ID.
|
|
11
14
|
*/
|
|
12
|
-
export declare function createLibP2PPeerId(privateKey?: string): Promise<
|
|
15
|
+
export declare function createLibP2PPeerId(privateKey?: string): Promise<PeerId>;
|
|
13
16
|
/**
|
|
14
17
|
* Exports a given peer id to a string representation.
|
|
15
18
|
* @param peerId - The peerId instance to be converted.
|
|
@@ -22,12 +25,15 @@ export declare function exportLibP2PPeerIdToString(peerId: PeerId): string;
|
|
|
22
25
|
export declare class LibP2PService implements P2PService {
|
|
23
26
|
private config;
|
|
24
27
|
private node;
|
|
28
|
+
private peerDiscoveryService;
|
|
29
|
+
private peerStore;
|
|
25
30
|
private protocolId;
|
|
26
31
|
private txPool;
|
|
32
|
+
private bootstrapPeerIds;
|
|
27
33
|
private logger;
|
|
28
34
|
private jobQueue;
|
|
29
35
|
private knownTxLookup;
|
|
30
|
-
constructor(config: P2PConfig, node: Libp2p, protocolId: string, txPool: TxPool, logger?: import("@aztec/foundation/log").Logger);
|
|
36
|
+
constructor(config: P2PConfig, node: Libp2p, peerDiscoveryService: PeerDiscoveryService, peerStore: AztecPeerStore, protocolId: string, txPool: TxPool, bootstrapPeerIds?: PeerId[], logger?: import("@aztec/foundation/log").Logger);
|
|
31
37
|
/**
|
|
32
38
|
* Starts the LibP2P service.
|
|
33
39
|
* @returns An empty promise.
|
|
@@ -44,7 +50,7 @@ export declare class LibP2PService implements P2PService {
|
|
|
44
50
|
* @param txPool - The transaction pool to be accessed by the service.
|
|
45
51
|
* @returns The new service.
|
|
46
52
|
*/
|
|
47
|
-
static new(config: P2PConfig, txPool: TxPool): Promise<LibP2PService>;
|
|
53
|
+
static new(config: P2PConfig, peerDiscoveryService: PeerDiscoveryService, peerId: PeerId, txPool: TxPool, store: AztecKVStore): Promise<LibP2PService>;
|
|
48
54
|
/**
|
|
49
55
|
* Propagates the provided transaction to peers.
|
|
50
56
|
* @param tx - The transaction to propagate.
|
|
@@ -55,6 +61,7 @@ export declare class LibP2PService implements P2PService {
|
|
|
55
61
|
* @param txHashes - The hashes of the newly settled transactions.
|
|
56
62
|
*/
|
|
57
63
|
settledTxs(txHashes: TxHash[]): void;
|
|
64
|
+
private addPeer;
|
|
58
65
|
private handleProtocolDial;
|
|
59
66
|
private consumeInboundStream;
|
|
60
67
|
private handleNewConnection;
|