@aztec/p2p 4.0.0-nightly.20260112 → 4.0.0-nightly.20260114
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/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +9 -12
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +59 -103
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +225 -262
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +113 -108
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +7 -6
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +9 -8
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +12 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +5 -5
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/{block_proposal_validator/block_proposal_validator.js → proposal_validator/proposal_validator.js} +19 -21
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +183 -0
- package/dest/services/dummy_service.d.ts +6 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +3 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +4 -2
- package/dest/services/libp2p/libp2p_service.d.ts +26 -10
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +218 -88
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +2 -1
- package/dest/services/service.d.ts +16 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +25 -11
- package/dest/testbench/worker_client_manager.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +6 -1
- package/package.json +14 -14
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +69 -110
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +231 -287
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +162 -140
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +13 -9
- package/src/msg_validators/attestation_validator/attestation_validator.ts +16 -13
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +7 -7
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/{block_proposal_validator/block_proposal_validator.ts → proposal_validator/proposal_validator.ts} +23 -28
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +206 -0
- package/src/services/dummy_service.ts +6 -0
- package/src/services/encoding.ts +3 -1
- package/src/services/libp2p/libp2p_service.ts +258 -94
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
- package/src/services/reqresp/protocols/status.ts +5 -3
- package/src/services/service.ts +19 -4
- package/src/testbench/p2p_client_testbench_worker.ts +34 -11
- package/src/testbench/worker_client_manager.ts +6 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
package/src/services/service.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
3
|
-
import type {
|
|
3
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
|
|
4
4
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
5
5
|
|
|
6
6
|
import type { PeerId } from '@libp2p/interface';
|
|
@@ -22,10 +22,23 @@ export enum PeerDiscoveryState {
|
|
|
22
22
|
STOPPED = 'stopped',
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Callback for when a block proposal is received.
|
|
27
|
+
* Validators validate but DO NOT attest to individual blocks - attestations are only for checkpoints.
|
|
28
|
+
* @returns true if the proposal is valid, false otherwise
|
|
29
|
+
*/
|
|
30
|
+
export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<boolean>;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Callback for when a checkpoint proposal is received.
|
|
34
|
+
* The checkpoint proposal is passed as CheckpointProposalCore (without lastBlock) since
|
|
35
|
+
* the lastBlock is extracted and stored separately as a BlockProposal, and the block
|
|
36
|
+
* callback is invoked and awaited before this checkpoint callback.
|
|
37
|
+
*/
|
|
38
|
+
export type P2PCheckpointReceivedCallback = (
|
|
39
|
+
checkpoint: CheckpointProposalCore,
|
|
27
40
|
sender: PeerId,
|
|
28
|
-
) => Promise<
|
|
41
|
+
) => Promise<CheckpointAttestation[] | undefined>;
|
|
29
42
|
|
|
30
43
|
export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
|
|
31
44
|
|
|
@@ -70,6 +83,8 @@ export interface P2PService {
|
|
|
70
83
|
// Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
71
84
|
registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
|
|
72
85
|
|
|
86
|
+
registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
|
|
87
|
+
|
|
73
88
|
getEnr(): ENR | undefined;
|
|
74
89
|
|
|
75
90
|
getPeers(includePending?: boolean): PeerInfo[];
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
7
7
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
8
|
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
9
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
9
10
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
11
|
import { createLogger } from '@aztec/foundation/log';
|
|
11
12
|
import { sleep } from '@aztec/foundation/sleep';
|
|
@@ -65,19 +66,23 @@ function mockTxPool(): TxPool {
|
|
|
65
66
|
function mockAttestationPool(): AttestationPool {
|
|
66
67
|
return {
|
|
67
68
|
isEmpty: () => Promise.resolve(false),
|
|
68
|
-
addAttestations: () => Promise.resolve(),
|
|
69
|
-
deleteAttestations: () => Promise.resolve(),
|
|
70
|
-
deleteAttestationsOlderThan: () => Promise.resolve(),
|
|
71
|
-
deleteAttestationsForSlot: () => Promise.resolve(),
|
|
72
|
-
deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
|
|
73
|
-
getAttestationsForSlot: () => Promise.resolve([]),
|
|
74
|
-
getAttestationsForSlotAndProposal: () => Promise.resolve([]),
|
|
75
69
|
addBlockProposal: () => Promise.resolve(),
|
|
76
70
|
getBlockProposal: () => Promise.resolve(undefined),
|
|
77
71
|
hasBlockProposal: () => Promise.resolve(false),
|
|
78
|
-
hasAttestation: () => Promise.resolve(false),
|
|
79
72
|
canAddProposal: () => Promise.resolve(true),
|
|
80
|
-
|
|
73
|
+
// Checkpoint attestation methods
|
|
74
|
+
addCheckpointProposal: () => Promise.resolve(),
|
|
75
|
+
getCheckpointProposal: () => Promise.resolve(undefined),
|
|
76
|
+
hasCheckpointProposal: () => Promise.resolve(false),
|
|
77
|
+
addCheckpointAttestations: () => Promise.resolve(),
|
|
78
|
+
getCheckpointAttestationsForSlot: () => Promise.resolve([]),
|
|
79
|
+
getCheckpointAttestationsForSlotAndProposal: () => Promise.resolve([]),
|
|
80
|
+
deleteCheckpointAttestationsOlderThan: () => Promise.resolve(),
|
|
81
|
+
hasReachedCheckpointProposalCap: () => Promise.resolve(false),
|
|
82
|
+
hasReachedCheckpointAttestationCap: () => Promise.resolve(false),
|
|
83
|
+
canAddCheckpointProposal: () => Promise.resolve(true),
|
|
84
|
+
canAddCheckpointAttestation: () => Promise.resolve(true),
|
|
85
|
+
hasCheckpointAttestation: () => Promise.resolve(false),
|
|
81
86
|
};
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -94,6 +99,7 @@ function mockEpochCache(): EpochCacheInterface {
|
|
|
94
99
|
currentSlot: SlotNumber.ZERO,
|
|
95
100
|
nextSlot: SlotNumber.ZERO,
|
|
96
101
|
}),
|
|
102
|
+
getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
|
|
97
103
|
getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
|
|
98
104
|
isInCommittee: () => Promise.resolve(false),
|
|
99
105
|
getRegisteredValidators: () => Promise.resolve([]),
|
|
@@ -189,9 +195,25 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
|
|
|
189
195
|
|
|
190
196
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
191
197
|
process.on('message', async msg => {
|
|
192
|
-
|
|
198
|
+
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
199
|
+
// SecretValue's private fields can't be serialized via IPC
|
|
200
|
+
const {
|
|
201
|
+
type,
|
|
202
|
+
config: rawConfig,
|
|
203
|
+
clientIndex,
|
|
204
|
+
} = msg as {
|
|
205
|
+
type: string;
|
|
206
|
+
config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
|
|
207
|
+
clientIndex: number;
|
|
208
|
+
};
|
|
193
209
|
try {
|
|
194
210
|
if (type === 'START') {
|
|
211
|
+
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
212
|
+
const config: P2PConfig = {
|
|
213
|
+
...rawConfig,
|
|
214
|
+
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
|
|
215
|
+
} as P2PConfig;
|
|
216
|
+
|
|
195
217
|
const txPool = mockTxPool();
|
|
196
218
|
const attestationPool = mockAttestationPool();
|
|
197
219
|
const epochCache = mockEpochCache();
|
|
@@ -224,14 +246,15 @@ process.on('message', async msg => {
|
|
|
224
246
|
);
|
|
225
247
|
|
|
226
248
|
// Create test service with validation disabled
|
|
249
|
+
// Note: Parameter order must match LibP2PService constructor
|
|
227
250
|
const testService = new TestLibP2PService(
|
|
228
251
|
P2PClientType.Full,
|
|
229
252
|
config,
|
|
230
253
|
(client as any).p2pService.node,
|
|
231
254
|
(client as any).p2pService.peerDiscoveryService,
|
|
232
|
-
(client as any).p2pService.mempools,
|
|
233
255
|
(client as any).p2pService.reqresp,
|
|
234
256
|
(client as any).p2pService.peerManager,
|
|
257
|
+
(client as any).p2pService.mempools,
|
|
235
258
|
(client as any).p2pService.archiver,
|
|
236
259
|
epochCache,
|
|
237
260
|
proofVerifier,
|
|
@@ -73,7 +73,12 @@ class WorkerClientManager {
|
|
|
73
73
|
clientIndex: number,
|
|
74
74
|
): [ChildProcess, Promise<void>] {
|
|
75
75
|
const childProcess = fork(workerPath);
|
|
76
|
-
|
|
76
|
+
// Extract the raw peerIdPrivateKey value since SecretValue can't be serialized via IPC
|
|
77
|
+
const serializedConfig = {
|
|
78
|
+
...config,
|
|
79
|
+
peerIdPrivateKey: config.peerIdPrivateKey?.getValue(),
|
|
80
|
+
};
|
|
81
|
+
childProcess.send({ type: 'START', config: serializedConfig, clientIndex });
|
|
77
82
|
|
|
78
83
|
// Handle unexpected child process exit
|
|
79
84
|
childProcess.on('exit', (code, signal) => {
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
-
import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
3
|
-
export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
4
|
-
private epochCache;
|
|
5
|
-
private logger;
|
|
6
|
-
private txsPermitted;
|
|
7
|
-
constructor(epochCache: EpochCacheInterface, opts: {
|
|
8
|
-
txsPermitted: boolean;
|
|
9
|
-
});
|
|
10
|
-
validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined>;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdGLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBRTlCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUkzRTtJQUVLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0ErRTNFO0NBQ0YifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAE9B,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAI3E;IAEK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA+E3E;CACF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './block_proposal_validator.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9ibG9ja19wcm9wb3NhbF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyJ9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './block_proposal_validator.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './block_proposal_validator.js';
|