@aztec/p2p 0.7.9 → 0.8.6
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.map +1 -1
- package/dest/bootstrap/bootstrap.js +7 -9
- package/dest/client/mocks.d.ts +5 -0
- package/dest/client/mocks.d.ts.map +1 -1
- package/dest/client/mocks.js +8 -1
- package/dest/service/libp2p_service.d.ts +3 -2
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +15 -9
- package/package.json +54 -5
- package/src/bootstrap/bootstrap.ts +6 -8
- package/src/client/mocks.ts +8 -0
- package/src/service/libp2p_service.ts +14 -7
- package/.eslintrc.cjs +0 -1
- package/.tsbuildinfo +0 -1
- package/dest/client/p2p_client.test.d.ts +0 -2
- package/dest/client/p2p_client.test.d.ts.map +0 -1
- package/dest/client/p2p_client.test.js +0 -58
- package/dest/service/known_txs.test.d.ts +0 -2
- package/dest/service/known_txs.test.d.ts.map +0 -1
- package/dest/service/known_txs.test.js +0 -34
- package/dest/service/tx_messages.test.d.ts +0 -2
- package/dest/service/tx_messages.test.d.ts.map +0 -1
- package/dest/service/tx_messages.test.js +0 -48
- package/dest/tx_pool/tx_pool.test.d.ts +0 -2
- package/dest/tx_pool/tx_pool.test.d.ts.map +0 -1
- package/dest/tx_pool/tx_pool.test.js +0 -20
- package/src/client/p2p_client.test.ts +0 -79
- package/src/service/known_txs.test.ts +0 -47
- package/src/service/tx_messages.test.ts +0 -67
- package/src/tx_pool/tx_pool.test.ts +0 -25
- package/tsconfig.json +0 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,IAAI,CAAC,CAAqB;gBAEd,MAAM,8CAA2C;IAErE;;;;OAIG;IACU,KAAK,CAAC,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,IAAI,CAAC,CAAqB;gBAEd,MAAM,8CAA2C;IAErE;;;;OAIG;IACU,KAAK,CAAC,MAAM,EAAE,SAAS;IA6DpC;;;OAGG;IACU,IAAI;IAMjB;;;OAGG;IACI,SAAS;CAGjB"}
|
|
@@ -3,10 +3,10 @@ import { noise } from '@chainsafe/libp2p-noise';
|
|
|
3
3
|
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
4
4
|
import { kadDHT } from '@libp2p/kad-dht';
|
|
5
5
|
import { mplex } from '@libp2p/mplex';
|
|
6
|
-
import { createFromProtobuf } from '@libp2p/peer-id-factory';
|
|
7
6
|
import { tcp } from '@libp2p/tcp';
|
|
8
7
|
import { createLibp2p } from 'libp2p';
|
|
9
8
|
import { identifyService } from 'libp2p/identify';
|
|
9
|
+
import { format } from 'util';
|
|
10
10
|
import { createLibP2PPeerId } from '../index.js';
|
|
11
11
|
/**
|
|
12
12
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
@@ -23,16 +23,14 @@ export class BootstrapNode {
|
|
|
23
23
|
*/
|
|
24
24
|
async start(config) {
|
|
25
25
|
const { peerIdPrivateKey, tcpListenIp, tcpListenPort, announceHostname, announcePort, minPeerCount, maxPeerCount } = config;
|
|
26
|
-
const peerId = peerIdPrivateKey
|
|
27
|
-
? await createFromProtobuf(Buffer.from(peerIdPrivateKey, 'hex'))
|
|
28
|
-
: await createLibP2PPeerId();
|
|
26
|
+
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
29
27
|
this.logger(`Starting bootstrap node ${peerId} on ${tcpListenIp}:${tcpListenPort} announced at ${announceHostname}:${announcePort}`);
|
|
30
28
|
const opts = {
|
|
31
29
|
start: false,
|
|
32
30
|
peerId,
|
|
33
31
|
addresses: {
|
|
34
32
|
listen: [`/ip4/${tcpListenIp}/tcp/${tcpListenPort}`],
|
|
35
|
-
announce: [`/ip4/${announceHostname}/tcp/${announcePort ?? tcpListenPort}`],
|
|
33
|
+
announce: announceHostname ? [`/ip4/${announceHostname}/tcp/${announcePort ?? tcpListenPort}`] : [],
|
|
36
34
|
},
|
|
37
35
|
transports: [tcp()],
|
|
38
36
|
streamMuxers: [yamux(), mplex()],
|
|
@@ -63,13 +61,13 @@ export class BootstrapNode {
|
|
|
63
61
|
this.logger(addr.toString());
|
|
64
62
|
});
|
|
65
63
|
this.node.addEventListener('peer:discovery', evt => {
|
|
66
|
-
this.logger('Discovered %s', evt.detail.id.toString()); // Log discovered peer
|
|
64
|
+
this.logger(format('Discovered %s', evt.detail.id.toString())); // Log discovered peer
|
|
67
65
|
});
|
|
68
66
|
this.node.addEventListener('peer:connect', evt => {
|
|
69
|
-
this.logger('Connected to %s', evt.detail.toString()); // Log connected peer
|
|
67
|
+
this.logger(format('Connected to %s', evt.detail.toString())); // Log connected peer
|
|
70
68
|
});
|
|
71
69
|
this.node.addEventListener('peer:disconnect', evt => {
|
|
72
|
-
this.logger('Disconnected from %s', evt.detail.toString()); // Log connected peer
|
|
70
|
+
this.logger(format('Disconnected from %s', evt.detail.toString())); // Log connected peer
|
|
73
71
|
});
|
|
74
72
|
}
|
|
75
73
|
/**
|
|
@@ -89,4 +87,4 @@ export class BootstrapNode {
|
|
|
89
87
|
return this.node?.peerId;
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jvb3RzdHJhcC9ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBNEMsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzlCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBR3hCLFlBQW9CLFNBQVMsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFBakQsV0FBTSxHQUFOLE1BQU0sQ0FBMkM7UUFGN0QsU0FBSSxHQUFZLFNBQVMsQ0FBQztJQUVzQyxDQUFDO0lBRXpFOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQWlCO1FBQ2xDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQ2hILE1BQU0sQ0FBQztRQUNULE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENB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
|
package/dest/client/mocks.d.ts
CHANGED
|
@@ -13,6 +13,11 @@ export declare class MockBlockSource implements L2BlockSource {
|
|
|
13
13
|
* @returns The rollup address.
|
|
14
14
|
*/
|
|
15
15
|
getRollupAddress(): Promise<EthAddress>;
|
|
16
|
+
/**
|
|
17
|
+
* Method to fetch the registry contract address at the base-layer.
|
|
18
|
+
* @returns The registry address.
|
|
19
|
+
*/
|
|
20
|
+
getRegistryAddress(): Promise<EthAddress>;
|
|
16
21
|
/**
|
|
17
22
|
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
18
23
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/client/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEpE;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAIvC,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAc;gBAEP,SAAS,SAAM;IAQnC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACI,cAAc;IAIrB;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM;IAIhC;;;;;OAKG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI9C;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM;IAKtB;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/client/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEpE;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAIvC,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAc;gBAEP,SAAS,SAAM;IAQnC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAIrB;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM;IAIhC;;;;;OAKG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI9C;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM;IAKtB;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dest/client/mocks.js
CHANGED
|
@@ -21,6 +21,13 @@ export class MockBlockSource {
|
|
|
21
21
|
getRollupAddress() {
|
|
22
22
|
return Promise.resolve(EthAddress.random());
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Method to fetch the registry contract address at the base-layer.
|
|
26
|
+
* @returns The registry address.
|
|
27
|
+
*/
|
|
28
|
+
getRegistryAddress() {
|
|
29
|
+
return Promise.resolve(EthAddress.random());
|
|
30
|
+
}
|
|
24
31
|
/**
|
|
25
32
|
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
26
33
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
@@ -69,4 +76,4 @@ export class MockBlockSource {
|
|
|
69
76
|
return Promise.resolve();
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L21vY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUErQixNQUFNLGNBQWMsQ0FBQztBQUVwRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQW9CLFlBQVksR0FBRztRQUFmLGNBQVMsR0FBVCxTQUFTLENBQU07UUFIM0IsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUN6QixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBR3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLE1BQWM7UUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDNUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxNQUFjO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUs7UUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksSUFBSTtRQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
|
|
@@ -5,10 +5,11 @@ import { P2PConfig } from '../config.js';
|
|
|
5
5
|
import { TxPool } from '../index.js';
|
|
6
6
|
import { P2PService } from './service.js';
|
|
7
7
|
/**
|
|
8
|
-
* Create a libp2p peer ID.
|
|
8
|
+
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
9
|
+
* @param privateKey - Optional peer ID private key as hex string
|
|
9
10
|
* @returns The peer ID.
|
|
10
11
|
*/
|
|
11
|
-
export declare function createLibP2PPeerId(): Promise<import("@libp2p/interface/peer-id").
|
|
12
|
+
export declare function createLibP2PPeerId(privateKey?: string): Promise<import("@libp2p/interface/peer-id").PeerId>;
|
|
12
13
|
/**
|
|
13
14
|
* Exports a given peer id to a string representation.
|
|
14
15
|
* @param peerId - The peerId instance to be converted.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../src/service/libp2p_service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM1C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAOnD,OAAO,EAAE,MAAM,EAAkD,MAAM,QAAQ,CAAC;AAIhF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C
|
|
1
|
+
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../src/service/libp2p_service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM1C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAOnD,OAAO,EAAE,MAAM,EAAkD,MAAM,QAAQ,CAAC;AAIhF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,uDAS3D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,UAExD;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,UAAU;IAK5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,aAAa,CAAsC;gBAEjD,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,8CAA4C;IAG5D;;;OAGG;IACU,KAAK;IA2ClB;;;OAGG;IACU,IAAI;IAQjB;;;;;OAKG;WACiB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;IA2DzD;;;OAGG;IACI,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAIhC;;;OAGG;IACI,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;YAI7B,kBAAkB;YAelB,oBAAoB;IAYlC,OAAO,CAAC,mBAAmB;YAYb,cAAc;YAiBd,uBAAuB;YAevB,qCAAqC;YAgBrC,kBAAkB;YAalB,iBAAiB;YASjB,aAAa;YAsBb,yBAAyB;YAazB,gCAAgC;YAShC,6BAA6B;YAW7B,oBAAoB;IAMlC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -5,7 +5,7 @@ import { yamux } from '@chainsafe/libp2p-yamux';
|
|
|
5
5
|
import { bootstrap } from '@libp2p/bootstrap';
|
|
6
6
|
import { kadDHT } from '@libp2p/kad-dht';
|
|
7
7
|
import { mplex } from '@libp2p/mplex';
|
|
8
|
-
import {
|
|
8
|
+
import { createFromJSON, createSecp256k1PeerId, exportToProtobuf } from '@libp2p/peer-id-factory';
|
|
9
9
|
import { tcp } from '@libp2p/tcp';
|
|
10
10
|
import { pipe } from 'it-pipe';
|
|
11
11
|
import { createLibp2p } from 'libp2p';
|
|
@@ -15,11 +15,19 @@ import { KnownTxLookup } from './known_txs.js';
|
|
|
15
15
|
import { Messages, createGetTransactionsRequestMessage, createTransactionHashesMessage, createTransactionsMessage, decodeGetTransactionsRequestMessage, decodeTransactionHashesMessage, decodeTransactionsMessage, getEncodedMessage, } from './tx_messages.js';
|
|
16
16
|
const INITIAL_PEER_REFRESH_INTERVAL = 20000;
|
|
17
17
|
/**
|
|
18
|
-
* Create a libp2p peer ID.
|
|
18
|
+
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
19
|
+
* @param privateKey - Optional peer ID private key as hex string
|
|
19
20
|
* @returns The peer ID.
|
|
20
21
|
*/
|
|
21
|
-
export async function createLibP2PPeerId() {
|
|
22
|
-
|
|
22
|
+
export async function createLibP2PPeerId(privateKey) {
|
|
23
|
+
if (!privateKey) {
|
|
24
|
+
return await createSecp256k1PeerId();
|
|
25
|
+
}
|
|
26
|
+
const base64 = Buffer.from(privateKey, 'hex').toString('base64');
|
|
27
|
+
return await createFromJSON({
|
|
28
|
+
id: '',
|
|
29
|
+
privKey: base64,
|
|
30
|
+
});
|
|
23
31
|
}
|
|
24
32
|
/**
|
|
25
33
|
* Exports a given peer id to a string representation.
|
|
@@ -104,10 +112,8 @@ export class LibP2PService {
|
|
|
104
112
|
* @returns The new service.
|
|
105
113
|
*/
|
|
106
114
|
static async new(config, txPool) {
|
|
107
|
-
const { enableNat, tcpListenIp, tcpListenPort, announceHostname, announcePort, serverMode, minPeerCount, maxPeerCount, } = config;
|
|
108
|
-
const peerId =
|
|
109
|
-
? await createFromProtobuf(Buffer.from(config.peerIdPrivateKey, 'hex'))
|
|
110
|
-
: await createLibP2PPeerId();
|
|
115
|
+
const { enableNat, tcpListenIp, tcpListenPort, announceHostname, announcePort, serverMode, minPeerCount, maxPeerCount, peerIdPrivateKey, } = config;
|
|
116
|
+
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
111
117
|
const opts = {
|
|
112
118
|
start: false,
|
|
113
119
|
peerId,
|
|
@@ -332,4 +338,4 @@ export class LibP2PService {
|
|
|
332
338
|
return this.config.bootstrapNodes.findIndex(bootstrap => bootstrap.includes(peer.toString())) != -1;
|
|
333
339
|
}
|
|
334
340
|
}
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9saWJwMnBfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJOUMsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBNEMsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxRQUFRLEVBQ1IsbUNBQW1DLEVBQ25DLDhCQUE4QixFQUM5Qix5QkFBeUIsRUFDekIsbUNBQW1DLEVBQ25DLDhCQUE4QixFQUM5Qix5QkFBeUIsRUFDekIsaUJBQWlCLEdBQ2xCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSw2QkFB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
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9saWJwMnBfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJOUMsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQTRDLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLGlCQUFpQixHQUNsQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE1BQU0sNkJBQTZC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
|
package/package.json
CHANGED
|
@@ -1,12 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"exports": "./dest/index.js",
|
|
3
|
+
"version": "0.8.6",
|
|
5
4
|
"type": "module",
|
|
5
|
+
"exports": "./dest/index.js",
|
|
6
|
+
"typedocOptions": {
|
|
7
|
+
"entryPoints": [
|
|
8
|
+
"./src/index.ts"
|
|
9
|
+
],
|
|
10
|
+
"name": "P2P",
|
|
11
|
+
"tsconfig": "./tsconfig.json"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "yarn clean && tsc -b",
|
|
15
|
+
"build:dev": "tsc -b --watch",
|
|
16
|
+
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
17
|
+
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
18
|
+
"formatting:fix": "run -T prettier -w ./src",
|
|
19
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --passWithNoTests",
|
|
20
|
+
"start": "node ./dest",
|
|
21
|
+
"start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'"
|
|
22
|
+
},
|
|
23
|
+
"inherits": [
|
|
24
|
+
"../package.common.json"
|
|
25
|
+
],
|
|
26
|
+
"jest": {
|
|
27
|
+
"preset": "ts-jest/presets/default-esm",
|
|
28
|
+
"moduleNameMapper": {
|
|
29
|
+
"^(\\.{1,2}/.*)\\.m?js$": "$1"
|
|
30
|
+
},
|
|
31
|
+
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
32
|
+
"rootDir": "./src"
|
|
33
|
+
},
|
|
6
34
|
"dependencies": {
|
|
7
|
-
"@aztec/circuits.js": "0.
|
|
8
|
-
"@aztec/foundation": "0.
|
|
9
|
-
"@aztec/types": "0.
|
|
35
|
+
"@aztec/circuits.js": "0.8.6",
|
|
36
|
+
"@aztec/foundation": "0.8.6",
|
|
37
|
+
"@aztec/types": "0.8.6",
|
|
10
38
|
"@chainsafe/libp2p-noise": "^13.0.0",
|
|
11
39
|
"@chainsafe/libp2p-yamux": "^5.0.0",
|
|
12
40
|
"@libp2p/bootstrap": "^9.0.4",
|
|
@@ -23,5 +51,26 @@
|
|
|
23
51
|
"lodash.times": "^4.3.2",
|
|
24
52
|
"sha3": "^2.1.4",
|
|
25
53
|
"tslib": "^2.4.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@jest/globals": "^29.5.0",
|
|
57
|
+
"@rushstack/eslint-patch": "^1.1.4",
|
|
58
|
+
"@types/jest": "^29.5.0",
|
|
59
|
+
"@types/lodash.times": "^4.3.7",
|
|
60
|
+
"@types/node": "^18.14.6",
|
|
61
|
+
"jest": "^29.5.0",
|
|
62
|
+
"jest-mock-extended": "^3.0.4",
|
|
63
|
+
"ts-jest": "^29.1.0",
|
|
64
|
+
"ts-node": "^10.9.1",
|
|
65
|
+
"typescript": "^5.0.4"
|
|
66
|
+
},
|
|
67
|
+
"files": [
|
|
68
|
+
"dest",
|
|
69
|
+
"src",
|
|
70
|
+
"!*.test.*"
|
|
71
|
+
],
|
|
72
|
+
"types": "./dest/index.d.ts",
|
|
73
|
+
"engines": {
|
|
74
|
+
"node": ">=18"
|
|
26
75
|
}
|
|
27
76
|
}
|
|
@@ -5,10 +5,10 @@ import { yamux } from '@chainsafe/libp2p-yamux';
|
|
|
5
5
|
import type { ServiceMap } from '@libp2p/interface-libp2p';
|
|
6
6
|
import { kadDHT } from '@libp2p/kad-dht';
|
|
7
7
|
import { mplex } from '@libp2p/mplex';
|
|
8
|
-
import { createFromProtobuf } from '@libp2p/peer-id-factory';
|
|
9
8
|
import { tcp } from '@libp2p/tcp';
|
|
10
9
|
import { Libp2p, Libp2pOptions, ServiceFactoryMap, createLibp2p } from 'libp2p';
|
|
11
10
|
import { identifyService } from 'libp2p/identify';
|
|
11
|
+
import { format } from 'util';
|
|
12
12
|
|
|
13
13
|
import { P2PConfig } from '../config.js';
|
|
14
14
|
import { createLibP2PPeerId } from '../index.js';
|
|
@@ -29,9 +29,7 @@ export class BootstrapNode {
|
|
|
29
29
|
public async start(config: P2PConfig) {
|
|
30
30
|
const { peerIdPrivateKey, tcpListenIp, tcpListenPort, announceHostname, announcePort, minPeerCount, maxPeerCount } =
|
|
31
31
|
config;
|
|
32
|
-
const peerId = peerIdPrivateKey
|
|
33
|
-
? await createFromProtobuf(Buffer.from(peerIdPrivateKey, 'hex'))
|
|
34
|
-
: await createLibP2PPeerId();
|
|
32
|
+
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
35
33
|
this.logger(
|
|
36
34
|
`Starting bootstrap node ${peerId} on ${tcpListenIp}:${tcpListenPort} announced at ${announceHostname}:${announcePort}`,
|
|
37
35
|
);
|
|
@@ -41,7 +39,7 @@ export class BootstrapNode {
|
|
|
41
39
|
peerId,
|
|
42
40
|
addresses: {
|
|
43
41
|
listen: [`/ip4/${tcpListenIp}/tcp/${tcpListenPort}`],
|
|
44
|
-
announce: [`/ip4/${announceHostname}/tcp/${announcePort ?? tcpListenPort}`],
|
|
42
|
+
announce: announceHostname ? [`/ip4/${announceHostname}/tcp/${announcePort ?? tcpListenPort}`] : [],
|
|
45
43
|
},
|
|
46
44
|
transports: [tcp()],
|
|
47
45
|
streamMuxers: [yamux(), mplex()],
|
|
@@ -77,15 +75,15 @@ export class BootstrapNode {
|
|
|
77
75
|
});
|
|
78
76
|
|
|
79
77
|
this.node.addEventListener('peer:discovery', evt => {
|
|
80
|
-
this.logger('Discovered %s', evt.detail.id.toString()); // Log discovered peer
|
|
78
|
+
this.logger(format('Discovered %s', evt.detail.id.toString())); // Log discovered peer
|
|
81
79
|
});
|
|
82
80
|
|
|
83
81
|
this.node.addEventListener('peer:connect', evt => {
|
|
84
|
-
this.logger('Connected to %s', evt.detail.toString()); // Log connected peer
|
|
82
|
+
this.logger(format('Connected to %s', evt.detail.toString())); // Log connected peer
|
|
85
83
|
});
|
|
86
84
|
|
|
87
85
|
this.node.addEventListener('peer:disconnect', evt => {
|
|
88
|
-
this.logger('Disconnected from %s', evt.detail.toString()); // Log connected peer
|
|
86
|
+
this.logger(format('Disconnected from %s', evt.detail.toString())); // Log connected peer
|
|
89
87
|
});
|
|
90
88
|
}
|
|
91
89
|
|
package/src/client/mocks.ts
CHANGED
|
@@ -24,6 +24,14 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
24
24
|
return Promise.resolve(EthAddress.random());
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Method to fetch the registry contract address at the base-layer.
|
|
29
|
+
* @returns The registry address.
|
|
30
|
+
*/
|
|
31
|
+
getRegistryAddress(): Promise<EthAddress> {
|
|
32
|
+
return Promise.resolve(EthAddress.random());
|
|
33
|
+
}
|
|
34
|
+
|
|
27
35
|
/**
|
|
28
36
|
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
29
37
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
@@ -10,7 +10,7 @@ import { PeerId } from '@libp2p/interface-peer-id';
|
|
|
10
10
|
import { IncomingStreamData } from '@libp2p/interface/stream-handler';
|
|
11
11
|
import { DualKadDHT, kadDHT } from '@libp2p/kad-dht';
|
|
12
12
|
import { mplex } from '@libp2p/mplex';
|
|
13
|
-
import {
|
|
13
|
+
import { createFromJSON, createSecp256k1PeerId, exportToProtobuf } from '@libp2p/peer-id-factory';
|
|
14
14
|
import { tcp } from '@libp2p/tcp';
|
|
15
15
|
import { pipe } from 'it-pipe';
|
|
16
16
|
import { Libp2p, Libp2pOptions, ServiceFactoryMap, createLibp2p } from 'libp2p';
|
|
@@ -35,11 +35,19 @@ import {
|
|
|
35
35
|
const INITIAL_PEER_REFRESH_INTERVAL = 20000;
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* Create a libp2p peer ID.
|
|
38
|
+
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
39
|
+
* @param privateKey - Optional peer ID private key as hex string
|
|
39
40
|
* @returns The peer ID.
|
|
40
41
|
*/
|
|
41
|
-
export async function createLibP2PPeerId() {
|
|
42
|
-
|
|
42
|
+
export async function createLibP2PPeerId(privateKey?: string) {
|
|
43
|
+
if (!privateKey) {
|
|
44
|
+
return await createSecp256k1PeerId();
|
|
45
|
+
}
|
|
46
|
+
const base64 = Buffer.from(privateKey, 'hex').toString('base64');
|
|
47
|
+
return await createFromJSON({
|
|
48
|
+
id: '',
|
|
49
|
+
privKey: base64,
|
|
50
|
+
});
|
|
43
51
|
}
|
|
44
52
|
|
|
45
53
|
/**
|
|
@@ -141,10 +149,9 @@ export class LibP2PService implements P2PService {
|
|
|
141
149
|
serverMode,
|
|
142
150
|
minPeerCount,
|
|
143
151
|
maxPeerCount,
|
|
152
|
+
peerIdPrivateKey,
|
|
144
153
|
} = config;
|
|
145
|
-
const peerId =
|
|
146
|
-
? await createFromProtobuf(Buffer.from(config.peerIdPrivateKey, 'hex'))
|
|
147
|
-
: await createLibP2PPeerId();
|
|
154
|
+
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
148
155
|
|
|
149
156
|
const opts: Libp2pOptions<ServiceMap> = {
|
|
150
157
|
start: false,
|
package/.eslintrc.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('@aztec/foundation/eslint');
|