@aztec/p2p 0.0.1-commit.f650c0a5c → 0.0.1-commit.f7ea82942
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/factory.d.ts +3 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +16 -15
- package/dest/client/p2p_client.d.ts +1 -1
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +9 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +4 -1
- package/dest/config.d.ts +103 -99
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -6
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +5 -3
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +4 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +8 -5
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +2 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +17 -9
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
- package/dest/msg_validators/clock_tolerance.d.ts +12 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +50 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +2 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +2 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +16 -8
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/factory.d.ts +2 -2
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +3 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +46 -31
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +5 -5
- 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 -0
- package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +21 -4
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -0
- package/dest/services/libp2p/libp2p_service.d.ts +5 -3
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +33 -20
- 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 +15 -2
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/interface.d.ts +14 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +10 -0
- package/dest/services/reqresp/reqresp.d.ts +4 -2
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +10 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +4 -1
- package/dest/test-helpers/mock-pubsub.d.ts +11 -3
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +36 -11
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +5 -1
- package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +7 -2
- package/package.json +14 -14
- package/src/client/factory.ts +23 -18
- package/src/client/p2p_client.ts +11 -3
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +2 -0
- package/src/config.ts +19 -7
- package/src/mem_pools/attestation_pool/attestation_pool.ts +5 -3
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
- package/src/mem_pools/tx_pool_v2/interfaces.ts +3 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +2 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +18 -7
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
- package/src/msg_validators/clock_tolerance.ts +68 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -1
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +4 -1
- package/src/msg_validators/proposal_validator/proposal_validator.ts +13 -7
- package/src/msg_validators/tx_validator/README.md +11 -3
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/factory.ts +3 -1
- package/src/msg_validators/tx_validator/gas_validator.ts +64 -31
- package/src/services/data_store.ts +5 -13
- package/src/services/dummy_service.ts +1 -0
- package/src/services/gossipsub/topic_score_params.ts +36 -4
- package/src/services/libp2p/instrumentation.ts +14 -0
- package/src/services/libp2p/libp2p_service.ts +31 -15
- package/src/services/peer-manager/peer_manager.ts +17 -2
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/interface.ts +21 -0
- package/src/services/reqresp/reqresp.ts +17 -0
- package/src/test-helpers/make-test-p2p-clients.ts +2 -0
- package/src/test-helpers/mock-pubsub.ts +34 -5
- package/src/test-helpers/reqresp-nodes.ts +4 -0
- package/src/testbench/p2p_client_testbench_worker.ts +3 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
4
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
5
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
5
6
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
7
|
+
import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
|
|
6
8
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
7
9
|
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
8
10
|
|
|
@@ -55,6 +57,7 @@ export function getMockPubSubP2PServiceFactory(
|
|
|
55
57
|
proofVerifier: ClientProtocolCircuitVerifier;
|
|
56
58
|
worldStateSynchronizer: WorldStateSynchronizer;
|
|
57
59
|
peerStore: AztecAsyncKVStore;
|
|
60
|
+
blockMinFeesProvider: BlockMinFeesProvider;
|
|
58
61
|
telemetry: TelemetryClient;
|
|
59
62
|
logger: Logger;
|
|
60
63
|
},
|
|
@@ -75,6 +78,7 @@ export function getMockPubSubP2PServiceFactory(
|
|
|
75
78
|
deps.epochCache,
|
|
76
79
|
deps.proofVerifier,
|
|
77
80
|
deps.worldStateSynchronizer,
|
|
81
|
+
deps.blockMinFeesProvider,
|
|
78
82
|
deps.telemetry,
|
|
79
83
|
deps.logger,
|
|
80
84
|
);
|
|
@@ -100,6 +104,7 @@ class MockReqResp implements ReqRespInterface {
|
|
|
100
104
|
}
|
|
101
105
|
|
|
102
106
|
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
107
|
+
setShouldRejectPeer(): void {}
|
|
103
108
|
|
|
104
109
|
start(
|
|
105
110
|
subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
|
|
@@ -138,6 +143,11 @@ class MockReqResp implements ReqRespInterface {
|
|
|
138
143
|
const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
|
|
139
144
|
const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
|
|
140
145
|
const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
|
|
146
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
147
|
+
|
|
148
|
+
if (delayMs > 0) {
|
|
149
|
+
await sleep(delayMs);
|
|
150
|
+
}
|
|
141
151
|
|
|
142
152
|
for (const request of requests) {
|
|
143
153
|
const requestBuffer = request.toBuffer();
|
|
@@ -174,7 +184,12 @@ class MockReqResp implements ReqRespInterface {
|
|
|
174
184
|
return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
|
|
175
185
|
}
|
|
176
186
|
try {
|
|
187
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
188
|
+
if (delayMs > 0) {
|
|
189
|
+
await sleep(delayMs);
|
|
190
|
+
}
|
|
177
191
|
const data = await handler(this.peerId, payload);
|
|
192
|
+
|
|
178
193
|
return { status: ReqRespStatus.SUCCESS, data };
|
|
179
194
|
} catch {
|
|
180
195
|
return { status: ReqRespStatus.FAILURE };
|
|
@@ -242,10 +257,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
242
257
|
score: (_peerId: PeerIdStr) => 0,
|
|
243
258
|
};
|
|
244
259
|
|
|
245
|
-
publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
260
|
+
async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
246
261
|
this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
|
|
247
|
-
this.network.publishToPeers(topic, data, this.peerId);
|
|
248
|
-
return
|
|
262
|
+
await this.network.publishToPeers(topic, data, this.peerId);
|
|
263
|
+
return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
|
|
249
264
|
}
|
|
250
265
|
|
|
251
266
|
receive(msg: GossipsubMessage) {
|
|
@@ -281,7 +296,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
|
|
|
281
296
|
|
|
282
297
|
/**
|
|
283
298
|
* Mock gossip sub network used for testing.
|
|
284
|
-
* All instances of MockGossipSubService connected to the same network
|
|
299
|
+
* All instances of MockGossipSubService connected to the same network receive the same messages,
|
|
300
|
+
* optionally delayed by a configurable propagation time.
|
|
285
301
|
*/
|
|
286
302
|
export class MockGossipSubNetwork {
|
|
287
303
|
private peers: MockGossipSubService[] = [];
|
|
@@ -290,6 +306,15 @@ export class MockGossipSubNetwork {
|
|
|
290
306
|
|
|
291
307
|
private logger = createLogger('p2p:test:mock-gossipsub-network');
|
|
292
308
|
|
|
309
|
+
constructor(
|
|
310
|
+
/** Artificial propagation delay in milliseconds applied to each message delivery. */
|
|
311
|
+
private propagationDelayMs: number = 0,
|
|
312
|
+
) {}
|
|
313
|
+
|
|
314
|
+
public getPropagationDelayMs(): number {
|
|
315
|
+
return this.propagationDelayMs;
|
|
316
|
+
}
|
|
317
|
+
|
|
293
318
|
public getPeers(): PeerId[] {
|
|
294
319
|
return this.peers.map(peer => peer.peerId);
|
|
295
320
|
}
|
|
@@ -306,7 +331,7 @@ export class MockGossipSubNetwork {
|
|
|
306
331
|
return this.reqRespPeers;
|
|
307
332
|
}
|
|
308
333
|
|
|
309
|
-
public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
|
|
334
|
+
public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
|
|
310
335
|
const msgId = (this.nextMsgId++).toString();
|
|
311
336
|
this.logger.debug(`Network is distributing message on topic ${topic}`, {
|
|
312
337
|
topic,
|
|
@@ -315,6 +340,10 @@ export class MockGossipSubNetwork {
|
|
|
315
340
|
msgId,
|
|
316
341
|
});
|
|
317
342
|
|
|
343
|
+
if (this.propagationDelayMs > 0) {
|
|
344
|
+
await sleep(this.propagationDelayMs);
|
|
345
|
+
}
|
|
346
|
+
|
|
318
347
|
const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
|
|
319
348
|
for (const peer of this.peers) {
|
|
320
349
|
if (peer.subscribedTopics.has(topic)) {
|
|
@@ -6,6 +6,7 @@ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
|
6
6
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
7
7
|
import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
|
|
8
8
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
9
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
9
10
|
import type {
|
|
10
11
|
ClientProtocolCircuitVerifier,
|
|
11
12
|
IVCProofVerificationResult,
|
|
@@ -153,6 +154,8 @@ export async function createTestLibP2PService(
|
|
|
153
154
|
epochCache,
|
|
154
155
|
);
|
|
155
156
|
|
|
157
|
+
reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
|
|
158
|
+
|
|
156
159
|
p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
|
|
157
160
|
p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
|
|
158
161
|
peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
|
|
@@ -168,6 +171,7 @@ export async function createTestLibP2PService(
|
|
|
168
171
|
epochCache,
|
|
169
172
|
proofVerifier,
|
|
170
173
|
worldStateSynchronizer,
|
|
174
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
171
175
|
telemetry,
|
|
172
176
|
);
|
|
173
177
|
}
|
|
@@ -17,6 +17,7 @@ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
|
17
17
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
18
18
|
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
19
19
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
20
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
20
21
|
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
21
22
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
22
23
|
import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
|
|
@@ -116,6 +117,7 @@ class TestLibP2PService extends LibP2PService {
|
|
|
116
117
|
epochCache,
|
|
117
118
|
proofVerifier,
|
|
118
119
|
worldStateSynchronizer,
|
|
120
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
119
121
|
telemetry,
|
|
120
122
|
logger,
|
|
121
123
|
);
|
|
@@ -417,6 +419,7 @@ process.on('message', async msg => {
|
|
|
417
419
|
proofVerifier as ClientProtocolCircuitVerifier,
|
|
418
420
|
worldState,
|
|
419
421
|
epochCache,
|
|
422
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
420
423
|
'test-p2p-bench-worker',
|
|
421
424
|
undefined,
|
|
422
425
|
telemetry as TelemetryClient,
|