@aztec/p2p 0.41.0 → 0.43.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 +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +9 -4
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +32 -3
- package/dest/client/mocks.js +2 -2
- package/dest/config.d.ts +12 -16
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +10 -9
- package/dest/service/discV5_service.d.ts.map +1 -1
- package/dest/service/discV5_service.js +15 -5
- package/dest/service/libp2p_service.d.ts +2 -7
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +20 -53
- package/dest/service/tx_messages.d.ts.map +1 -1
- package/dest/service/tx_messages.js +4 -4
- package/dest/util.d.ts +21 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +59 -0
- package/package.json +5 -5
- package/src/bootstrap/bootstrap.ts +12 -5
- package/src/client/index.ts +40 -2
- package/src/client/mocks.ts +1 -1
- package/src/config.ts +27 -31
- package/src/service/discV5_service.ts +19 -4
- package/src/service/libp2p_service.ts +21 -69
- package/src/service/tx_messages.ts +3 -3
- package/src/util.ts +62 -0
- package/dest/service/peer_store.d.ts +0 -18
- package/dest/service/peer_store.d.ts.map +0 -1
- package/dest/service/peer_store.js +0 -25
- package/src/service/peer_store.ts +0 -36
|
@@ -11,12 +11,11 @@ import { mplex } from '@libp2p/mplex';
|
|
|
11
11
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
12
12
|
import { createFromJSON, createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
13
13
|
import { tcp } from '@libp2p/tcp';
|
|
14
|
-
import { pipe } from 'it-pipe';
|
|
15
14
|
import { createLibp2p } from 'libp2p';
|
|
15
|
+
import { convertToMultiaddr } from '../util.js';
|
|
16
16
|
import { AztecDatastore } from './data_store.js';
|
|
17
17
|
import { KnownTxLookup } from './known_txs.js';
|
|
18
18
|
import { PeerManager } from './peer_manager.js';
|
|
19
|
-
import { AztecPeerDb } from './peer_store.js';
|
|
20
19
|
import { AztecTxMessageCreator, fromTxMessage } from './tx_messages.js';
|
|
21
20
|
/**
|
|
22
21
|
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
@@ -37,11 +36,10 @@ export async function createLibP2PPeerId(privateKey) {
|
|
|
37
36
|
* Lib P2P implementation of the P2PService interface.
|
|
38
37
|
*/
|
|
39
38
|
export class LibP2PService {
|
|
40
|
-
constructor(config, node, peerDiscoveryService,
|
|
39
|
+
constructor(config, node, peerDiscoveryService, protocolId, txPool, bootstrapPeerIds = [], logger = createDebugLogger('aztec:libp2p_service')) {
|
|
41
40
|
this.config = config;
|
|
42
41
|
this.node = node;
|
|
43
42
|
this.peerDiscoveryService = peerDiscoveryService;
|
|
44
|
-
this.peerStore = peerStore;
|
|
45
43
|
this.protocolId = protocolId;
|
|
46
44
|
this.txPool = txPool;
|
|
47
45
|
this.bootstrapPeerIds = bootstrapPeerIds;
|
|
@@ -59,14 +57,13 @@ export class LibP2PService {
|
|
|
59
57
|
if (this.node.status === 'started') {
|
|
60
58
|
throw new Error('P2P service already started');
|
|
61
59
|
}
|
|
62
|
-
const {
|
|
63
|
-
this.logger.info(`Starting P2P node on ${
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
if (enableNat) {
|
|
68
|
-
this.logger.info(`Enabling NAT in libp2p module`);
|
|
60
|
+
const { tcpListenAddress, tcpAnnounceAddress } = this.config;
|
|
61
|
+
this.logger.info(`Starting P2P node on ${tcpListenAddress}`);
|
|
62
|
+
if (!tcpAnnounceAddress) {
|
|
63
|
+
throw new Error('Announce address not provided.');
|
|
69
64
|
}
|
|
65
|
+
const announceTcpMultiaddr = convertToMultiaddr(tcpAnnounceAddress, 'tcp');
|
|
66
|
+
this.logger.info(`Announcing at ${announceTcpMultiaddr}`);
|
|
70
67
|
// handle discovered peers from external discovery service
|
|
71
68
|
this.peerDiscoveryService.on('peer:discovered', async (enr) => {
|
|
72
69
|
await this.addPeer(enr);
|
|
@@ -78,17 +75,16 @@ export class LibP2PService {
|
|
|
78
75
|
this.node.addEventListener('peer:disconnect', async (evt) => {
|
|
79
76
|
const peerId = evt.detail;
|
|
80
77
|
if (this.isBootstrapPeer(peerId)) {
|
|
81
|
-
this.logger.
|
|
78
|
+
this.logger.info(`Disconnect from bootstrap peer ${peerId.toString()}`);
|
|
82
79
|
}
|
|
83
80
|
else {
|
|
84
|
-
this.logger.
|
|
81
|
+
this.logger.info(`Disconnected from transaction peer ${peerId.toString()}`);
|
|
85
82
|
await this.peerManager.updateDiscoveryService();
|
|
86
83
|
}
|
|
87
84
|
});
|
|
88
85
|
this.jobQueue.start();
|
|
89
86
|
await this.peerDiscoveryService.start();
|
|
90
87
|
await this.node.start();
|
|
91
|
-
await this.node.handle(this.protocolId, (incoming) => this.jobQueue.put(() => Promise.resolve(this.handleProtocolDial(incoming))));
|
|
92
88
|
this.logger.info(`Started P2P client with Peer ID ${this.node.peerId.toString()}`);
|
|
93
89
|
// Subscribe to standard topics by default
|
|
94
90
|
this.subscribeToTopic(this.messageCreator.getTopic());
|
|
@@ -96,7 +92,7 @@ export class LibP2PService {
|
|
|
96
92
|
this.node.services.pubsub.addEventListener('gossipsub:message', async (e) => {
|
|
97
93
|
const { msg } = e.detail;
|
|
98
94
|
this.logger.debug(`Received PUBSUB message.`);
|
|
99
|
-
await this.handleNewGossipMessage(msg.topic, msg.data);
|
|
95
|
+
await this.jobQueue.put(() => this.handleNewGossipMessage(msg.topic, msg.data));
|
|
100
96
|
});
|
|
101
97
|
}
|
|
102
98
|
/**
|
|
@@ -116,9 +112,10 @@ export class LibP2PService {
|
|
|
116
112
|
* @param txPool - The transaction pool to be accessed by the service.
|
|
117
113
|
* @returns The new service.
|
|
118
114
|
*/
|
|
119
|
-
static async new(config, peerDiscoveryService, peerId, txPool
|
|
120
|
-
const {
|
|
121
|
-
const bindAddrTcp =
|
|
115
|
+
static async new(config, peerDiscoveryService, peerId, txPool) {
|
|
116
|
+
const { tcpListenAddress, minPeerCount, maxPeerCount, transactionProtocol: protocolId } = config;
|
|
117
|
+
const bindAddrTcp = convertToMultiaddr(tcpListenAddress, 'tcp');
|
|
118
|
+
const datastore = new AztecDatastore(AztecLmdbStore.open());
|
|
122
119
|
// The autonat service seems quite problematic in that using it seems to cause a lot of attempts
|
|
123
120
|
// to dial ephemeral ports. I suspect that it works better if you can get the uPNPnat service to
|
|
124
121
|
// work as then you would have a permanent port to be dialled.
|
|
@@ -132,7 +129,6 @@ export class LibP2PService {
|
|
|
132
129
|
// });
|
|
133
130
|
// services.uPnPNAT = uPnPNATService();
|
|
134
131
|
// }
|
|
135
|
-
const datastore = new AztecDatastore(AztecLmdbStore.open(dataDirectory));
|
|
136
132
|
const node = await createLibp2p({
|
|
137
133
|
start: false,
|
|
138
134
|
peerId,
|
|
@@ -166,14 +162,12 @@ export class LibP2PService {
|
|
|
166
162
|
}),
|
|
167
163
|
},
|
|
168
164
|
});
|
|
169
|
-
// Create an LMDB peer store
|
|
170
|
-
const peerDb = new AztecPeerDb(store);
|
|
171
165
|
// extract bootstrap node peer IDs
|
|
172
166
|
let bootstrapPeerIds = [];
|
|
173
167
|
if (config.bootstrapNodes.length) {
|
|
174
168
|
bootstrapPeerIds = await Promise.all(config.bootstrapNodes.map(bootnodeEnr => ENR.decodeTxt(bootnodeEnr).peerId()));
|
|
175
169
|
}
|
|
176
|
-
return new LibP2PService(config, node, peerDiscoveryService,
|
|
170
|
+
return new LibP2PService(config, node, peerDiscoveryService, protocolId, txPool, bootstrapPeerIds);
|
|
177
171
|
}
|
|
178
172
|
/**
|
|
179
173
|
* Subscribes to a topic.
|
|
@@ -245,13 +239,9 @@ export class LibP2PService {
|
|
|
245
239
|
let stream;
|
|
246
240
|
try {
|
|
247
241
|
stream = await this.node.dialProtocol(peerMultiAddr, this.protocolId);
|
|
248
|
-
// dial successful, add to DB as well
|
|
249
|
-
if (!this.peerStore.getPeer(peerIdStr)) {
|
|
250
|
-
await this.peerStore.addPeer(peerIdStr, enr);
|
|
251
|
-
}
|
|
252
242
|
}
|
|
253
243
|
catch (err) {
|
|
254
|
-
this.logger.
|
|
244
|
+
this.logger.debug(`Failed to dial peer ${peerIdStr}: ${err}`);
|
|
255
245
|
}
|
|
256
246
|
finally {
|
|
257
247
|
if (stream) {
|
|
@@ -260,35 +250,12 @@ export class LibP2PService {
|
|
|
260
250
|
}
|
|
261
251
|
}
|
|
262
252
|
}
|
|
263
|
-
async handleProtocolDial(incomingStreamData) {
|
|
264
|
-
try {
|
|
265
|
-
const { message, peer } = await this.consumeInboundStream(incomingStreamData);
|
|
266
|
-
if (!message.length) {
|
|
267
|
-
this.logger.verbose(`Ignoring 0 byte message from peer${peer.toString()}`);
|
|
268
|
-
}
|
|
269
|
-
// await this.processTransactionMessage(message, peer);
|
|
270
|
-
}
|
|
271
|
-
catch (err) {
|
|
272
|
-
this.logger.error(`Failed to handle received message from peer ${incomingStreamData.connection.remotePeer.toString()}`, err);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
async consumeInboundStream(incomingStreamData) {
|
|
276
|
-
let buffer = Buffer.alloc(0);
|
|
277
|
-
await pipe(incomingStreamData.stream, async (source) => {
|
|
278
|
-
for await (const msg of source) {
|
|
279
|
-
const payload = msg.subarray();
|
|
280
|
-
buffer = Buffer.concat([buffer, Buffer.from(payload)]);
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
await incomingStreamData.stream.close();
|
|
284
|
-
return { message: buffer, peer: incomingStreamData.connection.remotePeer };
|
|
285
|
-
}
|
|
286
253
|
async handleNewConnection(peerId) {
|
|
287
254
|
if (this.isBootstrapPeer(peerId)) {
|
|
288
|
-
this.logger.
|
|
255
|
+
this.logger.info(`Connected to bootstrap peer ${peerId.toString()}`);
|
|
289
256
|
}
|
|
290
257
|
else {
|
|
291
|
-
this.logger.
|
|
258
|
+
this.logger.info(`Connected to transaction peer ${peerId.toString()}`);
|
|
292
259
|
await this.peerManager.updateDiscoveryService();
|
|
293
260
|
}
|
|
294
261
|
}
|
|
@@ -308,4 +275,4 @@ export class LibP2PService {
|
|
|
308
275
|
return this.bootstrapPeerIds.some(bootstrapPeer => bootstrapPeer.equals(peer));
|
|
309
276
|
}
|
|
310
277
|
}
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9saWJwMnBfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFReEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsVUFBbUI7SUFDMUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QixPQUFPLE1BQU0scUJBQXFCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sTUFBTSxjQUFjLENBQUM7UUFDMUIsRUFBRSxFQUFFLEVBQUU7UUFDTixPQUFPLEVBQUUsTUFBTTtLQUNoQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUt4QixZQUNVLE1BQWlCLEVBQ2pCLElBQWtCLEVBQ2xCLG9CQUEwQyxFQUMxQyxTQUF5QixFQUN6QixVQUFrQixFQUNsQixNQUFjLEVBQ2QsbUJBQTZCLEVBQUUsRUFDL0IsU0FBUyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQztRQVBsRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWU7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBNEM7UUFacEQsYUFBUSxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzFDLGtCQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFhekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsV0FBVyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixnQkFBZ0IsUUFBUSxZQUFZLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTtZQUNqRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUU7WUFDckQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFnQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUN4RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9FLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQzVFLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRW5GLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO1lBQ3hFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFOUMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUFpQixFQUNqQixvQkFBMEMsRUFDMUMsTUFBYyxFQUNkLE1BQWMsRUFDZCxLQUFtQjtRQUVuQixNQUFNLEVBQ0osV0FBVyxFQUNYLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixtQkFBbUIsRUFBRSxVQUFVLEdBQ2hDLEdBQUcsTUFBTSxDQUFDO1FBQ1gsTUFBTSxXQUFXLEdBQUcsUUFBUSxXQUFXLFFBQVEsYUFBYSxFQUFFLENBQUM7UUFFL0QsZ0dBQWdHO1FBQ2hHLGdHQUFnRztRQUNoRyw4REFBOEQ7UUFDOUQsNEZBQTRGO1FBQzVGLGtFQUFrRTtRQUNsRSx1RkFBdUY7UUFDdkYsK0JBQStCO1FBQy9CLG1CQUFtQjtRQUNuQix3Q0FBd0M7UUFDeEMsK0JBQStCO1FBQy9CLFFBQVE7UUFDUix5Q0FBeUM7UUFDekMsSUFBSTtRQUVKLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUV6RSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQztZQUM5QixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU07WUFDTixTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3RCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEdBQUcsQ0FBQztvQkFDRixjQUFjLEVBQUUsTUFBTSxDQUFDLFlBQVk7aUJBQ3BDLENBQUM7YUFDSDtZQUNELFNBQVM7WUFDVCxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNoQyxvQkFBb0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLGlCQUFpQixFQUFFO2dCQUNqQixjQUFjLEVBQUUsWUFBWTtnQkFDNUIsY0FBYyxFQUFFLFlBQVk7YUFDN0I7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsUUFBUSxFQUFFLFFBQVEsQ0FBQztvQkFDakIsY0FBYyxFQUFFLE9BQU87aUJBQ3hCLENBQUM7Z0JBQ0YsTUFBTSxFQUFFLFNBQVMsQ0FBQztvQkFDaEIsNEJBQTRCLEVBQUUsSUFBSTtvQkFDbEMsQ0FBQyxFQUFFLENBQUM7b0JBQ0osR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxFQUFFLEVBQUU7b0JBQ1AsaUJBQWlCLEVBQUUsSUFBSztvQkFDeEIsWUFBWSxFQUFFLENBQUM7b0JBQ2YsWUFBWSxFQUFFLENBQUM7aUJBQ2hCLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxrQ0FBa0M7UUFDbEMsSUFBSSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFDcEMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDbEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQzlFLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYSxFQUFFLElBQWdCO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsSUFBZ0I7UUFDbEUsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzdDLDJCQUEyQjtZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxFQUFNO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLFFBQWtCO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBUTtRQUM1QixNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsZ0NBQWdDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE9BQU87UUFDVCxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRELHlDQUF5QztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsU0FBUyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzdFLElBQUksTUFBMEIsQ0FBQztZQUMvQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFdEUscUNBQXFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsa0JBQXNDO1FBQ3JFLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsdURBQXVEO1FBQ3pELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsK0NBQStDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFDcEcsR0FBRyxDQUNKLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBc0M7UUFDdkUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUFjO1FBQzlDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUNBQWlDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBTTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsWUFBWSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQU07UUFDaEMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sYUFBYSxRQUFRLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9saWJwMnBfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_messages.d.ts","sourceRoot":"","sources":["../../src/service/tx_messages.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tx_messages.d.ts","sourceRoot":"","sources":["../../src/service/tx_messages.ts"],"names":[],"mappings":";AAAA,OAAO,EAA4C,EAAE,EAAuB,MAAM,sBAAsB,CAAC;AAIzG,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBACnB,OAAO,EAAE,MAAM;IAI3B,eAAe,CAAC,EAAE,EAAE,EAAE;;;;IAMtB,QAAQ;CAGT;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,QAWxD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CA8B1C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAyDhD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EncryptedTxL2Logs, Tx, UnencryptedTxL2Logs } from '@aztec/circuit-types';
|
|
1
|
+
import { EncryptedNoteTxL2Logs, EncryptedTxL2Logs, Tx, UnencryptedTxL2Logs } from '@aztec/circuit-types';
|
|
2
2
|
import { PrivateKernelTailCircuitPublicInputs, Proof, PublicCallRequest } from '@aztec/circuits.js';
|
|
3
3
|
import { numToUInt32BE } from '@aztec/foundation/serialize';
|
|
4
4
|
export const TX_MESSAGE_TOPIC = '';
|
|
@@ -102,9 +102,9 @@ export function fromTxMessage(buffer) {
|
|
|
102
102
|
// so the first 4 bytes is the complete length, skip it
|
|
103
103
|
const publicInputs = toObject(buffer.subarray(4), PrivateKernelTailCircuitPublicInputs);
|
|
104
104
|
const proof = toObject(publicInputs.remainingData, Proof);
|
|
105
|
-
const noteEncryptedLogs = toObject(proof.remainingData,
|
|
105
|
+
const noteEncryptedLogs = toObject(proof.remainingData, EncryptedNoteTxL2Logs);
|
|
106
106
|
if (!noteEncryptedLogs.obj) {
|
|
107
|
-
noteEncryptedLogs.obj = new
|
|
107
|
+
noteEncryptedLogs.obj = new EncryptedNoteTxL2Logs([]);
|
|
108
108
|
}
|
|
109
109
|
const encryptedLogs = toObject(noteEncryptedLogs.remainingData, EncryptedTxL2Logs);
|
|
110
110
|
if (!encryptedLogs.obj) {
|
|
@@ -118,4 +118,4 @@ export function fromTxMessage(buffer) {
|
|
|
118
118
|
const publicTeardownCall = toObject(publicCalls.remainingData, PublicCallRequest);
|
|
119
119
|
return new Tx(publicInputs.obj, proof.obj, noteEncryptedLogs.obj, encryptedLogs.obj, unencryptedLogs.obj, publicCalls.objects, publicTeardownCall.obj);
|
|
120
120
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS90eF9tZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekcsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk1RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUFZLE9BQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFlLENBQUMsRUFBTTtRQUNwQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQWU7SUFDdkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sR0FBRyxHQUFTLEVBQUUsQ0FBQztJQUNyQixPQUFPLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENB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
|
package/dest/util.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts an address string to a multiaddr string.
|
|
3
|
+
* Example usage:
|
|
4
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
5
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
6
|
+
* const dnsAddr = 'example.com:443' -> /dns4/example.com/tcp/443
|
|
7
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
8
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
9
|
+
* @returns A multiaddr compliant string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string;
|
|
12
|
+
/**
|
|
13
|
+
* Splits an <address>:<port> string into its components.
|
|
14
|
+
* @returns The ip6 or ip4 address & port separately
|
|
15
|
+
*/
|
|
16
|
+
export declare function splitAddressPort(address: string, allowEmptyAddress: boolean): [string, string];
|
|
17
|
+
/**
|
|
18
|
+
* Queries the public IP address of the machine.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getPublicIp(): Promise<string>;
|
|
21
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAgBnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD"}
|
package/dest/util.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts an address string to a multiaddr string.
|
|
3
|
+
* Example usage:
|
|
4
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
5
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
6
|
+
* const dnsAddr = 'example.com:443' -> /dns4/example.com/tcp/443
|
|
7
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
8
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
9
|
+
* @returns A multiaddr compliant string.
|
|
10
|
+
*/
|
|
11
|
+
export function convertToMultiaddr(address, protocol) {
|
|
12
|
+
const [addr, port] = splitAddressPort(address, false);
|
|
13
|
+
let multiaddrPrefix;
|
|
14
|
+
if (addr.includes(':')) {
|
|
15
|
+
// IPv6 address
|
|
16
|
+
multiaddrPrefix = 'ip6';
|
|
17
|
+
}
|
|
18
|
+
else if (addr.match(/^[\d.]+$/)) {
|
|
19
|
+
// IPv4 address
|
|
20
|
+
multiaddrPrefix = 'ip4';
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new Error('Invalid address format. Expected an IPv4 or IPv6 address.');
|
|
24
|
+
}
|
|
25
|
+
return `/${multiaddrPrefix}/${addr}/${protocol}/${port}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Splits an <address>:<port> string into its components.
|
|
29
|
+
* @returns The ip6 or ip4 address & port separately
|
|
30
|
+
*/
|
|
31
|
+
export function splitAddressPort(address, allowEmptyAddress) {
|
|
32
|
+
let addr;
|
|
33
|
+
let port;
|
|
34
|
+
if (address.startsWith('[')) {
|
|
35
|
+
// IPv6 address enclosed in square brackets
|
|
36
|
+
const match = address.match(/^\[([^\]]+)\]:(\d+)$/);
|
|
37
|
+
if (!match) {
|
|
38
|
+
throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
|
|
39
|
+
}
|
|
40
|
+
[, addr, port] = match;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// IPv4 address
|
|
44
|
+
[addr, port] = address.split(':');
|
|
45
|
+
if ((!addr && !allowEmptyAddress) || !port) {
|
|
46
|
+
throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return [addr, port];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Queries the public IP address of the machine.
|
|
53
|
+
*/
|
|
54
|
+
export async function getPublicIp() {
|
|
55
|
+
const resp = await fetch('http://checkip.amazonaws.com/');
|
|
56
|
+
const text = await resp.text();
|
|
57
|
+
return text.trim();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsUUFBdUI7SUFDekUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdEQsSUFBSSxlQUF1QixDQUFDO0lBRTVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLGVBQWU7UUFDZixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7U0FBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxlQUFlO1FBQ2YsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFlO1FBQ2YsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsT0FBTyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVc7SUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
"testTimeout": 15000
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@aztec/circuit-types": "0.
|
|
52
|
-
"@aztec/circuits.js": "0.
|
|
53
|
-
"@aztec/foundation": "0.
|
|
54
|
-
"@aztec/kv-store": "0.
|
|
51
|
+
"@aztec/circuit-types": "0.43.0",
|
|
52
|
+
"@aztec/circuits.js": "0.43.0",
|
|
53
|
+
"@aztec/foundation": "0.43.0",
|
|
54
|
+
"@aztec/kv-store": "0.43.0",
|
|
55
55
|
"@chainsafe/discv5": "9.0.0",
|
|
56
56
|
"@chainsafe/enr": "3.0.0",
|
|
57
57
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
@@ -8,13 +8,14 @@ import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
|
8
8
|
import { type P2PConfig } from '../config.js';
|
|
9
9
|
import { AZTEC_ENR_KEY, AZTEC_NET } from '../service/discV5_service.js';
|
|
10
10
|
import { createLibP2PPeerId } from '../service/index.js';
|
|
11
|
+
import { convertToMultiaddr } from '../util.js';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Required P2P config values for a bootstrap node.
|
|
14
15
|
*/
|
|
15
16
|
export type BootNodeConfig = Partial<P2PConfig> &
|
|
16
|
-
Pick<P2PConfig, '
|
|
17
|
-
Required<Pick<P2PConfig, '
|
|
17
|
+
Pick<P2PConfig, 'udpAnnounceAddress'> &
|
|
18
|
+
Required<Pick<P2PConfig, 'udpListenAddress'>>;
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
@@ -31,13 +32,18 @@ export class BootstrapNode {
|
|
|
31
32
|
* @returns An empty promise.
|
|
32
33
|
*/
|
|
33
34
|
public async start(config: BootNodeConfig) {
|
|
34
|
-
const { peerIdPrivateKey,
|
|
35
|
+
const { peerIdPrivateKey, udpListenAddress, udpAnnounceAddress } = config;
|
|
35
36
|
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
36
37
|
this.peerId = peerId;
|
|
37
38
|
const enr = SignableENR.createFromPeerId(peerId);
|
|
38
39
|
|
|
39
|
-
const listenAddrUdp = multiaddr(
|
|
40
|
-
|
|
40
|
+
const listenAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
|
|
41
|
+
|
|
42
|
+
if (!udpAnnounceAddress) {
|
|
43
|
+
throw new Error('You need to provide a UDP announce address.');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
|
|
41
47
|
enr.setLocationMultiaddr(publicAddr);
|
|
42
48
|
enr.set(AZTEC_ENR_KEY, Uint8Array.from([AZTEC_NET]));
|
|
43
49
|
|
|
@@ -49,6 +55,7 @@ export class BootstrapNode {
|
|
|
49
55
|
bindAddrs: { ip4: listenAddrUdp },
|
|
50
56
|
config: {
|
|
51
57
|
lookupTimeout: 2000,
|
|
58
|
+
allowUnverifiedSessions: true,
|
|
52
59
|
},
|
|
53
60
|
});
|
|
54
61
|
|
package/src/client/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { DiscV5Service } from '../service/discV5_service.js';
|
|
|
7
7
|
import { DummyP2PService, DummyPeerDiscoveryService } from '../service/dummy_service.js';
|
|
8
8
|
import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
|
|
9
9
|
import { type TxPool } from '../tx_pool/index.js';
|
|
10
|
+
import { getPublicIp, splitAddressPort } from '../util.js';
|
|
10
11
|
|
|
11
12
|
export * from './p2p_client.js';
|
|
12
13
|
|
|
@@ -18,11 +19,48 @@ export const createP2PClient = async (
|
|
|
18
19
|
) => {
|
|
19
20
|
let discv5Service;
|
|
20
21
|
let p2pService;
|
|
22
|
+
|
|
21
23
|
if (config.p2pEnabled) {
|
|
22
|
-
//
|
|
24
|
+
// If announceTcpAddress or announceUdpAddress are not provided, query for public IP if config allows
|
|
25
|
+
const {
|
|
26
|
+
tcpAnnounceAddress: configTcpAnnounceAddress,
|
|
27
|
+
udpAnnounceAddress: configUdpAnnounceAddress,
|
|
28
|
+
queryForIp,
|
|
29
|
+
} = config;
|
|
30
|
+
|
|
31
|
+
// create variable for re-use if needed
|
|
32
|
+
let publicIp;
|
|
33
|
+
|
|
34
|
+
// check if no announce IP was provided
|
|
35
|
+
const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true);
|
|
36
|
+
if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') {
|
|
37
|
+
if (queryForIp) {
|
|
38
|
+
publicIp = await getPublicIp();
|
|
39
|
+
const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
|
|
40
|
+
config.tcpAnnounceAddress = tcpAnnounceAddress;
|
|
41
|
+
} else {
|
|
42
|
+
throw new Error(
|
|
43
|
+
`Invalid announceTcpAddress provided: ${splitTcpAnnounceAddress}. Expected format: <addr>:<port>`,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true);
|
|
49
|
+
if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') {
|
|
50
|
+
// If announceUdpAddress is not provided, use announceTcpAddress
|
|
51
|
+
if (!queryForIp && config.tcpAnnounceAddress) {
|
|
52
|
+
config.udpAnnounceAddress = config.tcpAnnounceAddress;
|
|
53
|
+
} else if (queryForIp) {
|
|
54
|
+
const udpPublicIp = publicIp || (await getPublicIp());
|
|
55
|
+
const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
|
|
56
|
+
config.udpAnnounceAddress = udpAnnounceAddress;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Create peer discovery service
|
|
23
61
|
const peerId = await createLibP2PPeerId(config.peerIdPrivateKey);
|
|
24
62
|
discv5Service = new DiscV5Service(peerId, config);
|
|
25
|
-
p2pService = await LibP2PService.new(config, discv5Service, peerId, txPool
|
|
63
|
+
p2pService = await LibP2PService.new(config, discv5Service, peerId, txPool);
|
|
26
64
|
} else {
|
|
27
65
|
p2pService = new DummyP2PService();
|
|
28
66
|
discv5Service = new DummyPeerDiscoveryService();
|
package/src/client/mocks.ts
CHANGED
package/src/config.ts
CHANGED
|
@@ -25,24 +25,24 @@ export interface P2PConfig {
|
|
|
25
25
|
p2pL2QueueSize: number;
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
* The
|
|
28
|
+
* The announce address for TCP.
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
tcpAnnounceAddress?: string;
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* The
|
|
33
|
+
* The announce address for UDP.
|
|
34
34
|
*/
|
|
35
|
-
|
|
35
|
+
udpAnnounceAddress?: string;
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* The
|
|
38
|
+
* The listen address for TCP.
|
|
39
39
|
*/
|
|
40
|
-
|
|
40
|
+
tcpListenAddress: string;
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
* The
|
|
43
|
+
* The listen address for UDP.
|
|
44
44
|
*/
|
|
45
|
-
|
|
45
|
+
udpListenAddress: string;
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* An optional peer id private key. If blank, will generate a random key.
|
|
@@ -59,16 +59,6 @@ export interface P2PConfig {
|
|
|
59
59
|
*/
|
|
60
60
|
transactionProtocol: string;
|
|
61
61
|
|
|
62
|
-
/**
|
|
63
|
-
* Hostname to announce.
|
|
64
|
-
*/
|
|
65
|
-
announceHostname?: string;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Port to announce.
|
|
69
|
-
*/
|
|
70
|
-
announcePort?: number;
|
|
71
|
-
|
|
72
62
|
/**
|
|
73
63
|
* Whether to enable NAT from libp2p (ignored for bootstrap node).
|
|
74
64
|
*/
|
|
@@ -93,6 +83,11 @@ export interface P2PConfig {
|
|
|
93
83
|
* The transaction gossiping message version.
|
|
94
84
|
*/
|
|
95
85
|
txGossipVersion: SemVer;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.
|
|
89
|
+
*/
|
|
90
|
+
queryForIp: boolean;
|
|
96
91
|
}
|
|
97
92
|
|
|
98
93
|
/**
|
|
@@ -105,39 +100,40 @@ export function getP2PConfigEnvVars(): P2PConfig {
|
|
|
105
100
|
P2P_BLOCK_CHECK_INTERVAL_MS,
|
|
106
101
|
P2P_PEER_CHECK_INTERVAL_MS,
|
|
107
102
|
P2P_L2_BLOCK_QUEUE_SIZE,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
P2P_TCP_LISTEN_ADDR,
|
|
104
|
+
P2P_UDP_LISTEN_ADDR,
|
|
105
|
+
P2P_TCP_ANNOUNCE_ADDR,
|
|
106
|
+
P2P_UDP_ANNOUNCE_ADDR,
|
|
112
107
|
PEER_ID_PRIVATE_KEY,
|
|
113
108
|
BOOTSTRAP_NODES,
|
|
114
|
-
P2P_ANNOUNCE_HOSTNAME,
|
|
115
|
-
P2P_ANNOUNCE_PORT,
|
|
116
109
|
P2P_NAT_ENABLED,
|
|
117
110
|
P2P_MIN_PEERS,
|
|
118
111
|
P2P_MAX_PEERS,
|
|
119
112
|
DATA_DIRECTORY,
|
|
120
113
|
TX_GOSSIP_VERSION,
|
|
114
|
+
P2P_TX_PROTOCOL,
|
|
115
|
+
P2P_QUERY_FOR_IP,
|
|
121
116
|
} = process.env;
|
|
117
|
+
// P2P listen & announce addresses passed in format: <IP_ADDRESS>:<PORT>
|
|
118
|
+
// P2P announce multiaddrs passed in format: /ip4/<IP_ADDRESS>/<protocol>/<PORT>
|
|
122
119
|
const envVars: P2PConfig = {
|
|
120
|
+
tcpAnnounceAddress: P2P_TCP_ANNOUNCE_ADDR,
|
|
121
|
+
udpAnnounceAddress: P2P_UDP_ANNOUNCE_ADDR,
|
|
122
|
+
tcpListenAddress: P2P_TCP_LISTEN_ADDR || '0.0.0.0:40400',
|
|
123
|
+
udpListenAddress: P2P_UDP_LISTEN_ADDR || '0.0.0.0:40400',
|
|
123
124
|
p2pEnabled: P2P_ENABLED === 'true',
|
|
124
125
|
p2pBlockCheckIntervalMS: P2P_BLOCK_CHECK_INTERVAL_MS ? +P2P_BLOCK_CHECK_INTERVAL_MS : 100,
|
|
125
126
|
p2pPeerCheckIntervalMS: P2P_PEER_CHECK_INTERVAL_MS ? +P2P_PEER_CHECK_INTERVAL_MS : 1000,
|
|
126
127
|
p2pL2QueueSize: P2P_L2_BLOCK_QUEUE_SIZE ? +P2P_L2_BLOCK_QUEUE_SIZE : 1000,
|
|
127
|
-
tcpListenPort: P2P_TCP_LISTEN_PORT ? +P2P_TCP_LISTEN_PORT : 40400,
|
|
128
|
-
tcpListenIp: P2P_TCP_LISTEN_IP ? P2P_TCP_LISTEN_IP : '0.0.0.0',
|
|
129
|
-
udpListenPort: P2P_UDP_LISTEN_PORT ? +P2P_UDP_LISTEN_PORT : 40400,
|
|
130
|
-
udpListenIp: P2P_UDP_LISTEN_IP ? P2P_UDP_LISTEN_IP : '0.0.0.0',
|
|
131
128
|
peerIdPrivateKey: PEER_ID_PRIVATE_KEY,
|
|
132
129
|
bootstrapNodes: BOOTSTRAP_NODES ? BOOTSTRAP_NODES.split(',') : [],
|
|
133
|
-
transactionProtocol: '',
|
|
134
|
-
announceHostname: P2P_ANNOUNCE_HOSTNAME,
|
|
135
|
-
announcePort: P2P_ANNOUNCE_PORT ? +P2P_ANNOUNCE_PORT : undefined,
|
|
130
|
+
transactionProtocol: P2P_TX_PROTOCOL ? P2P_TX_PROTOCOL : '/aztec/0.1.0',
|
|
136
131
|
enableNat: P2P_NAT_ENABLED === 'true',
|
|
137
132
|
minPeerCount: P2P_MIN_PEERS ? +P2P_MIN_PEERS : 10,
|
|
138
133
|
maxPeerCount: P2P_MAX_PEERS ? +P2P_MAX_PEERS : 100,
|
|
139
134
|
dataDirectory: DATA_DIRECTORY,
|
|
140
135
|
txGossipVersion: TX_GOSSIP_VERSION ? new SemVer(TX_GOSSIP_VERSION) : new SemVer('0.1.0'),
|
|
136
|
+
queryForIp: P2P_QUERY_FOR_IP === 'true',
|
|
141
137
|
};
|
|
142
138
|
return envVars;
|
|
143
139
|
}
|