@aztec/p2p 0.86.0 → 0.87.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.map +1 -1
- package/dest/client/factory.d.ts +4 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +16 -14
- package/dest/client/index.d.ts +1 -0
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +155 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +26 -164
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +185 -114
- package/dest/config.d.ts +5 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +6 -11
- package/dest/enr/generate-enr.d.ts +9 -1
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +24 -2
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +4 -4
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +1 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +8 -2
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +1 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +5 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +4 -0
- 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 +50 -14
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +3 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +9 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +9 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +13 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.js +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +15 -14
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +2 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +14 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +62 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +3 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +8 -4
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +35 -17
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +1 -1
- package/dest/services/discv5/discV5_service.d.ts +2 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +9 -13
- package/dest/services/dummy_service.d.ts +3 -3
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +6 -1
- package/dest/services/encoding.d.ts +1 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.d.ts +4 -2
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +94 -88
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.d.ts +1 -1
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +11 -2
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -2
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +41 -21
- package/dest/services/reqresp/interface.d.ts +1 -3
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +0 -2
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +1 -1
- package/dest/services/reqresp/protocols/ping.d.ts +0 -2
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +0 -2
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.d.ts +1 -3
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +13 -10
- package/dest/services/service.d.ts +4 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +11 -6
- package/dest/testbench/testbench.js +1 -1
- package/dest/testbench/worker_client_manager.d.ts +0 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +2 -2
- package/dest/types/index.d.ts +1 -0
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +1 -0
- package/dest/versioning.d.ts +2 -2
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +6 -1
- package/package.json +15 -15
- package/src/bootstrap/bootstrap.ts +1 -1
- package/src/client/factory.ts +38 -33
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +186 -0
- package/src/client/p2p_client.ts +226 -287
- package/src/config.ts +11 -18
- package/src/enr/generate-enr.ts +35 -3
- package/src/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +3 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +4 -4
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +11 -4
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +10 -3
- package/src/mem_pools/attestation_pool/mocks.ts +2 -2
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +79 -34
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +16 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +12 -0
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +9 -3
- package/src/msg_validators/attestation_validator/attestation_validator.ts +1 -1
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
- package/src/msg_validators/tx_validator/data_validator.ts +24 -18
- package/src/msg_validators/tx_validator/double_spend_validator.ts +2 -2
- package/src/msg_validators/tx_validator/factory.ts +94 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +3 -3
- package/src/msg_validators/tx_validator/metadata_validator.ts +50 -14
- package/src/msg_validators/tx_validator/phases_validator.ts +6 -2
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +1 -1
- package/src/services/discv5/discV5_service.ts +14 -12
- package/src/services/dummy_service.ts +8 -2
- package/src/services/libp2p/libp2p_service.ts +102 -111
- package/src/services/peer-manager/metrics.ts +4 -1
- package/src/services/peer-manager/peer_manager.ts +18 -1
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +5 -1
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +42 -19
- package/src/services/reqresp/metrics.ts +4 -1
- package/src/services/reqresp/protocols/goodbye.ts +1 -1
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +4 -1
- package/src/services/reqresp/reqresp.ts +12 -12
- package/src/services/service.ts +7 -1
- package/src/test-helpers/make-test-p2p-clients.ts +2 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/testbench/p2p_client_testbench_worker.ts +10 -4
- package/src/testbench/testbench.ts +1 -1
- package/src/testbench/worker_client_manager.ts +2 -2
- package/src/types/index.ts +1 -0
- package/src/versioning.ts +8 -1
package/src/services/service.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
2
2
|
import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
|
|
3
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
3
4
|
|
|
4
5
|
import type { ENR } from '@chainsafe/enr';
|
|
5
6
|
import type { PeerId } from '@libp2p/interface';
|
|
@@ -32,7 +33,7 @@ export interface P2PService {
|
|
|
32
33
|
* Called to have the given transaction propagated through the P2P network.
|
|
33
34
|
* @param message - The message to be propagated.
|
|
34
35
|
*/
|
|
35
|
-
propagate<T extends Gossipable>(message: T): void
|
|
36
|
+
propagate<T extends Gossipable>(message: T): Promise<void>;
|
|
36
37
|
|
|
37
38
|
/**
|
|
38
39
|
* Request information from peers via the request response protocol.
|
|
@@ -56,6 +57,9 @@ export interface P2PService {
|
|
|
56
57
|
sendBatchRequest<Protocol extends ReqRespSubProtocol>(
|
|
57
58
|
protocol: Protocol,
|
|
58
59
|
requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
|
|
60
|
+
timeoutMs?: number,
|
|
61
|
+
maxPeers?: number,
|
|
62
|
+
maxRetryAttempts?: number,
|
|
59
63
|
): Promise<(InstanceType<SubProtocolMap[Protocol]['response']> | undefined)[]>;
|
|
60
64
|
|
|
61
65
|
// Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
@@ -64,6 +68,8 @@ export interface P2PService {
|
|
|
64
68
|
getEnr(): ENR | undefined;
|
|
65
69
|
|
|
66
70
|
getPeers(includePending?: boolean): PeerInfo[];
|
|
71
|
+
|
|
72
|
+
validate(txs: Tx[]): Promise<void>;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
/**
|
|
@@ -85,6 +85,7 @@ export async function makeTestP2PClient(
|
|
|
85
85
|
proofVerifier,
|
|
86
86
|
mockWorldState,
|
|
87
87
|
mockEpochCache,
|
|
88
|
+
'test-p2p-client',
|
|
88
89
|
undefined,
|
|
89
90
|
deps,
|
|
90
91
|
);
|
|
@@ -108,7 +109,7 @@ export async function makeTestP2PClients(numberOfPeers: number, testConfig: Make
|
|
|
108
109
|
try {
|
|
109
110
|
ports = await getPorts(numberOfPeers);
|
|
110
111
|
break;
|
|
111
|
-
} catch
|
|
112
|
+
} catch {
|
|
112
113
|
await sleep(1000);
|
|
113
114
|
}
|
|
114
115
|
}
|
|
@@ -120,7 +120,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
|
|
|
120
120
|
bootstrapNodeEnrVersionCheck: false,
|
|
121
121
|
...chainConfig,
|
|
122
122
|
} as P2PConfig & DataStoreConfig;
|
|
123
|
-
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
123
|
+
const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
|
|
124
124
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
125
125
|
|
|
126
126
|
// No bootstrap nodes provided as the libp2p service will register them in the constructor
|
|
@@ -13,7 +13,7 @@ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
|
13
13
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
14
14
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
15
15
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
16
|
-
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
16
|
+
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
17
17
|
import { Tx, TxStatus } from '@aztec/stdlib/tx';
|
|
18
18
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
19
19
|
|
|
@@ -34,6 +34,7 @@ import type { PubSubLibp2p } from '../util.js';
|
|
|
34
34
|
function mockTxPool(): TxPool {
|
|
35
35
|
// Mock all methods
|
|
36
36
|
return {
|
|
37
|
+
isEmpty: () => Promise.resolve(false),
|
|
37
38
|
addTxs: () => Promise.resolve(),
|
|
38
39
|
getTxByHash: () => Promise.resolve(undefined),
|
|
39
40
|
getArchivedTxByHash: () => Promise.resolve(undefined),
|
|
@@ -43,16 +44,19 @@ function mockTxPool(): TxPool {
|
|
|
43
44
|
getAllTxs: () => Promise.resolve([]),
|
|
44
45
|
getAllTxHashes: () => Promise.resolve([]),
|
|
45
46
|
getPendingTxHashes: () => Promise.resolve([]),
|
|
47
|
+
getPendingTxCount: () => Promise.resolve(0),
|
|
46
48
|
getMinedTxHashes: () => Promise.resolve([]),
|
|
47
49
|
getTxStatus: () => Promise.resolve(TxStatus.PENDING),
|
|
48
50
|
getTxsByHash: () => Promise.resolve([]),
|
|
49
51
|
hasTxs: () => Promise.resolve([]),
|
|
50
52
|
setMaxTxPoolSize: () => Promise.resolve(),
|
|
53
|
+
markTxsAsNonEvictable: () => Promise.resolve(),
|
|
51
54
|
};
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
function mockAttestationPool(): AttestationPool {
|
|
55
58
|
return {
|
|
59
|
+
isEmpty: () => Promise.resolve(false),
|
|
56
60
|
addAttestations: () => Promise.resolve(),
|
|
57
61
|
deleteAttestations: () => Promise.resolve(),
|
|
58
62
|
deleteAttestationsOlderThan: () => Promise.resolve(),
|
|
@@ -122,9 +126,10 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
122
126
|
this.disableTxValidation = disable;
|
|
123
127
|
}
|
|
124
128
|
|
|
125
|
-
protected override async handleGossipedTx(
|
|
129
|
+
protected override async handleGossipedTx(payload: Buffer, msgId: string, source: PeerId) {
|
|
126
130
|
if (this.disableTxValidation) {
|
|
127
|
-
const
|
|
131
|
+
const p2pMessage = P2PMessage.fromMessageData(payload);
|
|
132
|
+
const tx = Tx.fromBuffer(p2pMessage.payload);
|
|
128
133
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
|
|
129
134
|
|
|
130
135
|
const txHash = await tx.getTxHash();
|
|
@@ -132,7 +137,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
132
137
|
this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
|
|
133
138
|
await this.mempools.txPool.addTxs([tx]);
|
|
134
139
|
} else {
|
|
135
|
-
await super.handleGossipedTx(
|
|
140
|
+
await super.handleGossipedTx(payload, msgId, source);
|
|
136
141
|
}
|
|
137
142
|
}
|
|
138
143
|
|
|
@@ -177,6 +182,7 @@ process.on('message', async msg => {
|
|
|
177
182
|
proofVerifier,
|
|
178
183
|
worldState,
|
|
179
184
|
epochCache,
|
|
185
|
+
'test-p2p-bench-worker',
|
|
180
186
|
telemetry,
|
|
181
187
|
deps,
|
|
182
188
|
);
|
|
@@ -21,7 +21,7 @@ async function main() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
|
|
24
|
-
const config = await import(configPath, {
|
|
24
|
+
const config = await import(configPath, { with: { type: 'json' } });
|
|
25
25
|
const testConfig = { ...testChainConfig, ...config.default };
|
|
26
26
|
const numberOfClients = config.default.numberOfClients;
|
|
27
27
|
|
|
@@ -257,7 +257,7 @@ class WorkerClientManager {
|
|
|
257
257
|
// Try to gracefully stop the process
|
|
258
258
|
try {
|
|
259
259
|
process.send({ type: 'STOP' });
|
|
260
|
-
} catch
|
|
260
|
+
} catch {
|
|
261
261
|
// If sending the message fails, force kill immediately
|
|
262
262
|
clearTimeout(forceKillTimeout);
|
|
263
263
|
try {
|
|
@@ -291,7 +291,7 @@ class WorkerClientManager {
|
|
|
291
291
|
if (!p.killed) {
|
|
292
292
|
p.kill('SIGKILL');
|
|
293
293
|
}
|
|
294
|
-
} catch
|
|
294
|
+
} catch {
|
|
295
295
|
// Ignore errors when force killing
|
|
296
296
|
}
|
|
297
297
|
});
|
package/src/types/index.ts
CHANGED
package/src/versioning.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import type { SignableENR } from '@chainsafe/enr';
|
|
13
13
|
import xxhashFactory from 'xxhash-wasm';
|
|
14
14
|
|
|
15
|
-
import { AZTEC_ENR_KEY } from './types/index.js';
|
|
15
|
+
import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
|
|
16
16
|
|
|
17
17
|
const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
|
|
18
18
|
const XX_HASH_LEN = 8;
|
|
@@ -31,6 +31,13 @@ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash
|
|
|
31
31
|
return versions;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/** Sets the Aztec client version on ENR record **/
|
|
35
|
+
export function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string) {
|
|
36
|
+
if (clientVersion) {
|
|
37
|
+
enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
34
41
|
/** Checks the given value from an ENR record against the expected versions. */
|
|
35
42
|
export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
|
|
36
43
|
if (enrValue.length === XX_HASH_LEN) {
|