@aztec/p2p 0.84.0 → 0.85.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.js +1 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +5 -2
- package/dest/client/p2p_client.d.ts +2 -0
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +4 -1
- package/dest/config.d.ts +15 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +12 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +56 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +229 -16
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +2 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +8 -8
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +32 -5
- package/dest/msg_validators/tx_validator/index.d.ts +1 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +10 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/discv5/discV5_service.d.ts +1 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +6 -8
- package/dest/services/dummy_service.d.ts +2 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +1 -1
- package/dest/services/libp2p/libp2p_service.d.ts +14 -8
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +0 -1
- package/dest/services/service.d.ts +1 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +46 -16
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.js +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +3 -2
- package/dest/util.d.ts +7 -3
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +44 -7
- package/package.json +12 -12
- package/src/bootstrap/bootstrap.ts +1 -1
- package/src/client/factory.ts +7 -2
- package/src/client/p2p_client.ts +6 -1
- package/src/config.ts +26 -2
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +312 -27
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +2 -2
- package/src/msg_validators/tx_validator/data_validator.ts +19 -8
- package/src/msg_validators/tx_validator/double_spend_validator.ts +10 -3
- package/src/msg_validators/tx_validator/gas_validator.ts +36 -6
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
- package/src/msg_validators/tx_validator/phases_validator.ts +6 -1
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -2
- package/src/services/discv5/discV5_service.ts +10 -8
- package/src/services/dummy_service.ts +2 -1
- package/src/services/libp2p/libp2p_service.ts +9 -9
- package/src/services/peer-manager/peer_manager.ts +1 -1
- package/src/services/service.ts +1 -1
- package/src/testbench/p2p_client_testbench_worker.ts +97 -16
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +1 -1
- package/src/testbench/worker_client_manager.ts +4 -2
- package/src/util.ts +57 -8
|
@@ -207,6 +207,8 @@ class WorkerClientManager {
|
|
|
207
207
|
(_, ind) => ind !== clientIndex && ind < Math.min(this.peerEnrs.length, 10),
|
|
208
208
|
);
|
|
209
209
|
|
|
210
|
+
this.logger.info(`Changing port for client ${clientIndex} to ${newPort} with other nodes `, otherNodes);
|
|
211
|
+
|
|
210
212
|
const config = this.createClientConfig(clientIndex, newPort, otherNodes);
|
|
211
213
|
const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
|
|
212
214
|
|
|
@@ -244,7 +246,7 @@ class WorkerClientManager {
|
|
|
244
246
|
} catch (e) {
|
|
245
247
|
this.logger.error(`Error force killing process ${index}:`, e);
|
|
246
248
|
}
|
|
247
|
-
},
|
|
249
|
+
}, 5000); // 5 second timeout for graceful exit
|
|
248
250
|
|
|
249
251
|
// Listen for process exit
|
|
250
252
|
process.once('exit', () => {
|
|
@@ -294,7 +296,7 @@ class WorkerClientManager {
|
|
|
294
296
|
}
|
|
295
297
|
});
|
|
296
298
|
resolve();
|
|
297
|
-
},
|
|
299
|
+
}, 10000); // 10 second timeout for all processes
|
|
298
300
|
}),
|
|
299
301
|
]);
|
|
300
302
|
} catch (error) {
|
package/src/util.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
2
3
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
3
4
|
|
|
4
5
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
@@ -7,10 +8,14 @@ import type { PeerId, PrivateKey } from '@libp2p/interface';
|
|
|
7
8
|
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
8
9
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
9
10
|
import { resolve } from 'dns/promises';
|
|
11
|
+
import { promises as fs } from 'fs';
|
|
10
12
|
import type { Libp2p } from 'libp2p';
|
|
13
|
+
import path from 'path';
|
|
11
14
|
|
|
12
15
|
import type { P2PConfig } from './config.js';
|
|
13
16
|
|
|
17
|
+
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
18
|
+
|
|
14
19
|
export interface PubSubLibp2p extends Libp2p {
|
|
15
20
|
services: {
|
|
16
21
|
pubsub: GossipSub;
|
|
@@ -93,29 +98,73 @@ export async function configureP2PClientAddresses(
|
|
|
93
98
|
* Get the peer id private key
|
|
94
99
|
*
|
|
95
100
|
* 1. Check if we have a peer id private key in the config
|
|
96
|
-
* 2. If not, check we have a peer id private key persisted in
|
|
97
|
-
* 3. If
|
|
101
|
+
* 2. If not, check if we have a peer id private key persisted in a file
|
|
102
|
+
* 3. If no file path or data directory is provided, check if we have a peer id private key in the node's store
|
|
103
|
+
* 4. If not, create a new one, then persist it in a file if a file path or data directory is provided or in the node's store otherwise
|
|
98
104
|
*
|
|
99
105
|
*/
|
|
100
106
|
export async function getPeerIdPrivateKey(
|
|
101
|
-
config: { peerIdPrivateKey?: string },
|
|
107
|
+
config: { peerIdPrivateKey?: string; peerIdPrivateKeyPath?: string; dataDirectory?: string },
|
|
102
108
|
store: AztecAsyncKVStore,
|
|
109
|
+
logger: Logger,
|
|
103
110
|
): Promise<string> {
|
|
104
|
-
const
|
|
111
|
+
const peerIdPrivateKeyFilePath =
|
|
112
|
+
config.peerIdPrivateKeyPath ??
|
|
113
|
+
(config.dataDirectory ? path.join(config.dataDirectory, PEER_ID_DATA_DIR_FILE) : undefined);
|
|
114
|
+
let peerIdPrivateKeySingleton: AztecAsyncSingleton<string> | undefined;
|
|
115
|
+
|
|
116
|
+
const writePrivateKeyToFile = async (filePath: string, privateKey: string) => {
|
|
117
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
118
|
+
await fs.writeFile(filePath, privateKey);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
|
|
105
122
|
if (config.peerIdPrivateKey) {
|
|
106
|
-
|
|
123
|
+
if (peerIdPrivateKeyFilePath) {
|
|
124
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey);
|
|
125
|
+
} else {
|
|
126
|
+
peerIdPrivateKeySingleton = store.openSingleton<string>('peerIdPrivateKey');
|
|
127
|
+
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
|
|
128
|
+
}
|
|
107
129
|
return config.peerIdPrivateKey;
|
|
108
130
|
}
|
|
109
131
|
|
|
110
|
-
|
|
132
|
+
// Check to see if we have a peer id private key stored in a file or the node's store
|
|
133
|
+
let storedPeerIdPrivateKey: string | undefined;
|
|
134
|
+
const privateKeyFileExists =
|
|
135
|
+
peerIdPrivateKeyFilePath &&
|
|
136
|
+
(await fs
|
|
137
|
+
.access(peerIdPrivateKeyFilePath)
|
|
138
|
+
.then(() => true)
|
|
139
|
+
.catch(() => false));
|
|
140
|
+
if (peerIdPrivateKeyFilePath && privateKeyFileExists) {
|
|
141
|
+
await fs.access(peerIdPrivateKeyFilePath);
|
|
142
|
+
storedPeerIdPrivateKey = await fs.readFile(peerIdPrivateKeyFilePath, 'utf8');
|
|
143
|
+
} else {
|
|
144
|
+
peerIdPrivateKeySingleton = store.openSingleton<string>('peerIdPrivateKey');
|
|
145
|
+
storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
|
|
146
|
+
}
|
|
111
147
|
if (storedPeerIdPrivateKey) {
|
|
148
|
+
if (peerIdPrivateKeyFilePath && !privateKeyFileExists) {
|
|
149
|
+
logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
|
|
150
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
|
|
151
|
+
}
|
|
112
152
|
return storedPeerIdPrivateKey;
|
|
113
153
|
}
|
|
114
154
|
|
|
155
|
+
// Generate and persist a new private key
|
|
115
156
|
const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
|
|
116
157
|
const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
|
|
158
|
+
if (peerIdPrivateKeyFilePath) {
|
|
159
|
+
logger.verbose(`Creating new peer ID private key and persisting it to ${peerIdPrivateKeyFilePath}`);
|
|
160
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, privateKeyString);
|
|
161
|
+
} else {
|
|
162
|
+
logger.warn(
|
|
163
|
+
'Creating new peer ID private key and persisting it to the lmdb store. Key will be lost on rollup upgrade, specify the peer id private key path and restart the node to persist the peer id private key to a file',
|
|
164
|
+
);
|
|
165
|
+
await peerIdPrivateKeySingleton!.set(privateKeyString);
|
|
166
|
+
}
|
|
117
167
|
|
|
118
|
-
await peerIdPrivateKeySingleton.set(privateKeyString);
|
|
119
168
|
return privateKeyString;
|
|
120
169
|
}
|
|
121
170
|
|