From 8a756fd1c960c09a89a03a3f351a0b4ec5e61661 Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Wed, 8 Apr 2026 10:01:07 -0300 Subject: [PATCH 1/4] fix --- .../p2p/src/services/dummy_service.ts | 1 + .../p2p/src/services/libp2p/libp2p_service.ts | 3 + .../p2p/src/services/reqresp/interface.ts | 21 +++++++ .../p2p/src/services/reqresp/reqresp.test.ts | 57 +++++++++++++++++++ .../p2p/src/services/reqresp/reqresp.ts | 17 ++++++ .../p2p/src/test-helpers/mock-pubsub.ts | 1 + .../p2p/src/test-helpers/reqresp-nodes.ts | 2 + 7 files changed, 102 insertions(+) diff --git a/yarn-project/p2p/src/services/dummy_service.ts b/yarn-project/p2p/src/services/dummy_service.ts index 5158ade97362..6c08cc8f558d 100644 --- a/yarn-project/p2p/src/services/dummy_service.ts +++ b/yarn-project/p2p/src/services/dummy_service.ts @@ -287,6 +287,7 @@ export class DummyPeerManager implements PeerManagerInterface { export class DummyReqResp implements ReqRespInterface { updateConfig(_config: Partial): void {} + setPeerAuthChecker(): void {} start( _subProtocolHandlers: ReqRespSubProtocolHandlers, _subProtocolValidators: ReqRespSubProtocolValidators, diff --git a/yarn-project/p2p/src/services/libp2p/libp2p_service.ts b/yarn-project/p2p/src/services/libp2p/libp2p_service.ts index 23a76ef69f47..6db9035116d8 100644 --- a/yarn-project/p2p/src/services/libp2p/libp2p_service.ts +++ b/yarn-project/p2p/src/services/libp2p/libp2p_service.ts @@ -475,6 +475,9 @@ export class LibP2PService extends WithTracer implements P2PService { epochCache, ); + // Gate req/resp data protocols for unauthenticated peers when p2pAllowOnlyValidators is enabled + reqresp.setPeerAuthChecker(peerId => peerManager.shouldDisableP2PGossip(peerId)); + // Configure application-specific scoring for gossipsub. // The weight scales app score to align with gossipsub thresholds: // - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip) diff --git a/yarn-project/p2p/src/services/reqresp/interface.ts b/yarn-project/p2p/src/services/reqresp/interface.ts index e1eb6c6a6fd3..e52884d8ae55 100644 --- a/yarn-project/p2p/src/services/reqresp/interface.ts +++ b/yarn-project/p2p/src/services/reqresp/interface.ts @@ -100,6 +100,24 @@ export type ReqRespSubProtocolValidators = { [S in ReqRespSubProtocol]: ResponseValidator; }; +/** + * Protocols that are always allowed without authentication, even when p2pAllowOnlyValidators is enabled. + * These are needed for the handshake and connection management flow. + * All other protocols require the remote peer to be authenticated. + */ +export const UNAUTHENTICATED_ALLOWED_PROTOCOLS: ReadonlySet = new Set([ + ReqRespSubProtocol.PING, + ReqRespSubProtocol.STATUS, + ReqRespSubProtocol.AUTH, + ReqRespSubProtocol.GOODBYE, +]); + +/** + * Callback that checks whether a peer should be rejected from req/resp data protocols. + * Returns true if the peer should be rejected (i.e. p2pAllowOnlyValidators is on and peer is unauthenticated). + */ +export type PeerAuthChecker = (peerId: string) => boolean; + export const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = { [ReqRespSubProtocol.PING]: noopValidator, [ReqRespSubProtocol.STATUS]: noopValidator, @@ -264,5 +282,8 @@ export interface ReqRespInterface { updateConfig(config: Partial): void; + /** Sets the callback used to reject unauthenticated peers on gated req/resp protocols. */ + setPeerAuthChecker(checker: PeerAuthChecker): void; + getConnectionSampler(): Pick; } diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts index 3142fa5eaaa1..722d652d4c7d 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts @@ -403,6 +403,63 @@ describe('ReqResp', () => { }); }); + describe('Authentication gating', () => { + it('should reject unauthenticated peers on gated protocols', async () => { + nodes = await createNodes(peerScoring, 2); + + await startNodes(nodes); + await sleep(500); + await connectToPeers(nodes); + await sleep(500); + + // Set up auth checker that rejects all peers (simulates p2pAllowOnlyValidators=true with no authenticated peers) + nodes[1].req.setPeerAuthChecker(() => true); + + // TX is a gated protocol — should be rejected + const txResp = await nodes[0].req.sendRequestToPeer( + nodes[1].p2p.peerId, + ReqRespSubProtocol.TX, + Buffer.from('request'), + ); + expect(txResp.status).toEqual(ReqRespStatus.FAILURE); + + // PING is an allowed protocol — should succeed + const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); + expectSuccess(pingResp); + expect(pingResp.data.toString('utf-8')).toEqual('pong'); + }); + + it('should allow authenticated peers on gated protocols', async () => { + nodes = await createNodes(peerScoring, 2); + + await startNodes(nodes); + await sleep(500); + await connectToPeers(nodes); + await sleep(500); + + // Set up auth checker that allows all peers (simulates authenticated validator) + nodes[1].req.setPeerAuthChecker(() => false); + + const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); + expectSuccess(pingResp); + expect(pingResp.data.toString('utf-8')).toEqual('pong'); + }); + + it('should allow all protocols when no auth checker is set', async () => { + nodes = await createNodes(peerScoring, 2); + + await startNodes(nodes); + await sleep(500); + await connectToPeers(nodes); + await sleep(500); + + // No setPeerAuthChecker called — all protocols should work + const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); + expectSuccess(pingResp); + expect(pingResp.data.toString('utf-8')).toEqual('pong'); + }); + }); + describe('Batch requests', () => { it('should send a batch request between many peers', async () => { const batchSize = 9; diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.ts b/yarn-project/p2p/src/services/reqresp/reqresp.ts index 38354e1dd67f..7cc13260f075 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.ts @@ -27,6 +27,7 @@ import { BatchConnectionSampler } from './connection-sampler/batch_connection_sa import { ConnectionSampler, RandomSampler } from './connection-sampler/connection_sampler.js'; import { DEFAULT_SUB_PROTOCOL_VALIDATORS, + type PeerAuthChecker, type ReqRespInterface, type ReqRespResponse, ReqRespSubProtocol, @@ -35,6 +36,7 @@ import { type ReqRespSubProtocolRateLimits, type ReqRespSubProtocolValidators, type SubProtocolMap, + UNAUTHENTICATED_ALLOWED_PROTOCOLS, responseFromBuffer, subProtocolSizeCalculators, } from './interface.js'; @@ -72,6 +74,8 @@ export class ReqResp implements ReqRespInterface { private snappyTransform: SnappyTransform; + private peerAuthChecker: PeerAuthChecker | undefined; + private metrics: ReqRespMetrics; constructor( @@ -108,6 +112,10 @@ export class ReqResp implements ReqRespInterface { } } + public setPeerAuthChecker(checker: PeerAuthChecker): void { + this.peerAuthChecker = checker; + } + get tracer() { return this.metrics.tracer; } @@ -596,6 +604,15 @@ export class ReqResp implements ReqRespInterface { throw new ReqRespStatusError(ReqRespStatus.RATE_LIMIT_EXCEEDED); } + // When p2pAllowOnlyValidators is enabled, reject unauthenticated peers on data protocols + if ( + !UNAUTHENTICATED_ALLOWED_PROTOCOLS.has(protocol) && + this.peerAuthChecker?.(connection.remotePeer.toString()) + ) { + this.logger.debug(`Rejecting unauthenticated peer ${connection.remotePeer} on gated protocol ${protocol}`); + throw new ReqRespStatusError(ReqRespStatus.FAILURE); + } + await this.processStream(protocol, incomingStream); } catch (err: any) { this.metrics.recordResponseError(protocol); diff --git a/yarn-project/p2p/src/test-helpers/mock-pubsub.ts b/yarn-project/p2p/src/test-helpers/mock-pubsub.ts index cf48654e0aff..3ab7839de294 100644 --- a/yarn-project/p2p/src/test-helpers/mock-pubsub.ts +++ b/yarn-project/p2p/src/test-helpers/mock-pubsub.ts @@ -100,6 +100,7 @@ class MockReqResp implements ReqRespInterface { } updateConfig(_config: Partial): void {} + setPeerAuthChecker(): void {} start( subProtocolHandlers: Partial, diff --git a/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts b/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts index 72f9145ab1fb..386d3fe7df6f 100644 --- a/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts +++ b/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts @@ -153,6 +153,8 @@ export async function createTestLibP2PService( epochCache, ); + reqresp.setPeerAuthChecker(peerId => peerManager.shouldDisableP2PGossip(peerId)); + p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT; p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) => peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId); From b7d899d57910889901b83a92e73386ea4f5fdbaf Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Wed, 8 Apr 2026 10:10:28 -0300 Subject: [PATCH 2/4] more tests --- .../p2p/src/services/reqresp/reqresp.test.ts | 63 ++++++++++++++++--- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts index 722d652d4c7d..cf72293b7b71 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts @@ -404,7 +404,7 @@ describe('ReqResp', () => { }); describe('Authentication gating', () => { - it('should reject unauthenticated peers on gated protocols', async () => { + it('should reject unauthenticated peers on all data protocols', async () => { nodes = await createNodes(peerScoring, 2); await startNodes(nodes); @@ -415,13 +415,11 @@ describe('ReqResp', () => { // Set up auth checker that rejects all peers (simulates p2pAllowOnlyValidators=true with no authenticated peers) nodes[1].req.setPeerAuthChecker(() => true); - // TX is a gated protocol — should be rejected - const txResp = await nodes[0].req.sendRequestToPeer( - nodes[1].p2p.peerId, - ReqRespSubProtocol.TX, - Buffer.from('request'), - ); - expect(txResp.status).toEqual(ReqRespStatus.FAILURE); + // All data protocols should be rejected + for (const protocol of [ReqRespSubProtocol.TX, ReqRespSubProtocol.BLOCK, ReqRespSubProtocol.BLOCK_TXS]) { + const resp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, protocol, Buffer.from('request')); + expect(resp.status).toEqual(ReqRespStatus.FAILURE); + } // PING is an allowed protocol — should succeed const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); @@ -429,7 +427,37 @@ describe('ReqResp', () => { expect(pingResp.data.toString('utf-8')).toEqual('pong'); }); - it('should allow authenticated peers on gated protocols', async () => { + it('should allow handshake protocols for unauthenticated peers', async () => { + nodes = await createNodes(peerScoring, 2); + + await startNodes(nodes); + await sleep(500); + await connectToPeers(nodes); + await sleep(500); + + // Reject all peers on gated protocols + nodes[1].req.setPeerAuthChecker(() => true); + + // PING, STATUS, AUTH, GOODBYE should still work + const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); + expectSuccess(pingResp); + + const statusResp = await nodes[0].req.sendRequestToPeer( + nodes[1].p2p.peerId, + ReqRespSubProtocol.STATUS, + Buffer.from('status'), + ); + expectSuccess(statusResp); + + const authResp = await nodes[0].req.sendRequestToPeer( + nodes[1].p2p.peerId, + ReqRespSubProtocol.AUTH, + Buffer.from('auth'), + ); + expectSuccess(authResp); + }); + + it('should allow authenticated peers on all protocols', async () => { nodes = await createNodes(peerScoring, 2); await startNodes(nodes); @@ -440,9 +468,17 @@ describe('ReqResp', () => { // Set up auth checker that allows all peers (simulates authenticated validator) nodes[1].req.setPeerAuthChecker(() => false); + // Data protocols should succeed for authenticated peers const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); expectSuccess(pingResp); expect(pingResp.data.toString('utf-8')).toEqual('pong'); + + const txResp = await nodes[0].req.sendRequestToPeer( + nodes[1].p2p.peerId, + ReqRespSubProtocol.TX, + Buffer.from('request'), + ); + expectSuccess(txResp); }); it('should allow all protocols when no auth checker is set', async () => { @@ -453,10 +489,17 @@ describe('ReqResp', () => { await connectToPeers(nodes); await sleep(500); - // No setPeerAuthChecker called — all protocols should work + // No setPeerAuthChecker called — all protocols should work (backwards compatible) const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); expectSuccess(pingResp); expect(pingResp.data.toString('utf-8')).toEqual('pong'); + + const txResp = await nodes[0].req.sendRequestToPeer( + nodes[1].p2p.peerId, + ReqRespSubProtocol.TX, + Buffer.from('request'), + ); + expectSuccess(txResp); }); }); From 5015126a7a9c8737900261b3ca04a3d3c9b41784 Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Wed, 8 Apr 2026 10:29:55 -0300 Subject: [PATCH 3/4] rename function --- yarn-project/p2p/src/services/dummy_service.ts | 2 +- yarn-project/p2p/src/services/libp2p/libp2p_service.ts | 2 +- yarn-project/p2p/src/services/reqresp/interface.ts | 4 ++-- yarn-project/p2p/src/services/reqresp/reqresp.test.ts | 8 ++++---- yarn-project/p2p/src/services/reqresp/reqresp.ts | 10 +++++----- yarn-project/p2p/src/test-helpers/mock-pubsub.ts | 2 +- yarn-project/p2p/src/test-helpers/reqresp-nodes.ts | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn-project/p2p/src/services/dummy_service.ts b/yarn-project/p2p/src/services/dummy_service.ts index 6c08cc8f558d..0e7beea22441 100644 --- a/yarn-project/p2p/src/services/dummy_service.ts +++ b/yarn-project/p2p/src/services/dummy_service.ts @@ -287,7 +287,7 @@ export class DummyPeerManager implements PeerManagerInterface { export class DummyReqResp implements ReqRespInterface { updateConfig(_config: Partial): void {} - setPeerAuthChecker(): void {} + setShouldRejectPeer(): void {} start( _subProtocolHandlers: ReqRespSubProtocolHandlers, _subProtocolValidators: ReqRespSubProtocolValidators, diff --git a/yarn-project/p2p/src/services/libp2p/libp2p_service.ts b/yarn-project/p2p/src/services/libp2p/libp2p_service.ts index 6db9035116d8..8fd5846bb6f5 100644 --- a/yarn-project/p2p/src/services/libp2p/libp2p_service.ts +++ b/yarn-project/p2p/src/services/libp2p/libp2p_service.ts @@ -476,7 +476,7 @@ export class LibP2PService extends WithTracer implements P2PService { ); // Gate req/resp data protocols for unauthenticated peers when p2pAllowOnlyValidators is enabled - reqresp.setPeerAuthChecker(peerId => peerManager.shouldDisableP2PGossip(peerId)); + reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId)); // Configure application-specific scoring for gossipsub. // The weight scales app score to align with gossipsub thresholds: diff --git a/yarn-project/p2p/src/services/reqresp/interface.ts b/yarn-project/p2p/src/services/reqresp/interface.ts index e52884d8ae55..ca1cb19b4274 100644 --- a/yarn-project/p2p/src/services/reqresp/interface.ts +++ b/yarn-project/p2p/src/services/reqresp/interface.ts @@ -116,7 +116,7 @@ export const UNAUTHENTICATED_ALLOWED_PROTOCOLS: ReadonlySet * Callback that checks whether a peer should be rejected from req/resp data protocols. * Returns true if the peer should be rejected (i.e. p2pAllowOnlyValidators is on and peer is unauthenticated). */ -export type PeerAuthChecker = (peerId: string) => boolean; +export type ShouldRejectPeer = (peerId: string) => boolean; export const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = { [ReqRespSubProtocol.PING]: noopValidator, @@ -283,7 +283,7 @@ export interface ReqRespInterface { updateConfig(config: Partial): void; /** Sets the callback used to reject unauthenticated peers on gated req/resp protocols. */ - setPeerAuthChecker(checker: PeerAuthChecker): void; + setShouldRejectPeer(checker: ShouldRejectPeer): void; getConnectionSampler(): Pick; } diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts index cf72293b7b71..e32621471927 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts @@ -413,7 +413,7 @@ describe('ReqResp', () => { await sleep(500); // Set up auth checker that rejects all peers (simulates p2pAllowOnlyValidators=true with no authenticated peers) - nodes[1].req.setPeerAuthChecker(() => true); + nodes[1].req.setShouldRejectPeer(() => true); // All data protocols should be rejected for (const protocol of [ReqRespSubProtocol.TX, ReqRespSubProtocol.BLOCK, ReqRespSubProtocol.BLOCK_TXS]) { @@ -436,7 +436,7 @@ describe('ReqResp', () => { await sleep(500); // Reject all peers on gated protocols - nodes[1].req.setPeerAuthChecker(() => true); + nodes[1].req.setShouldRejectPeer(() => true); // PING, STATUS, AUTH, GOODBYE should still work const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); @@ -466,7 +466,7 @@ describe('ReqResp', () => { await sleep(500); // Set up auth checker that allows all peers (simulates authenticated validator) - nodes[1].req.setPeerAuthChecker(() => false); + nodes[1].req.setShouldRejectPeer(() => false); // Data protocols should succeed for authenticated peers const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); @@ -489,7 +489,7 @@ describe('ReqResp', () => { await connectToPeers(nodes); await sleep(500); - // No setPeerAuthChecker called — all protocols should work (backwards compatible) + // No setShouldRejectPeer called — all protocols should work (backwards compatible) const pingResp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, ReqRespSubProtocol.PING, PING_REQUEST); expectSuccess(pingResp); expect(pingResp.data.toString('utf-8')).toEqual('pong'); diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.ts b/yarn-project/p2p/src/services/reqresp/reqresp.ts index 7cc13260f075..019474e2941d 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.ts @@ -27,7 +27,6 @@ import { BatchConnectionSampler } from './connection-sampler/batch_connection_sa import { ConnectionSampler, RandomSampler } from './connection-sampler/connection_sampler.js'; import { DEFAULT_SUB_PROTOCOL_VALIDATORS, - type PeerAuthChecker, type ReqRespInterface, type ReqRespResponse, ReqRespSubProtocol, @@ -35,6 +34,7 @@ import { type ReqRespSubProtocolHandlers, type ReqRespSubProtocolRateLimits, type ReqRespSubProtocolValidators, + type ShouldRejectPeer, type SubProtocolMap, UNAUTHENTICATED_ALLOWED_PROTOCOLS, responseFromBuffer, @@ -74,7 +74,7 @@ export class ReqResp implements ReqRespInterface { private snappyTransform: SnappyTransform; - private peerAuthChecker: PeerAuthChecker | undefined; + private shouldRejectPeer: ShouldRejectPeer | undefined; private metrics: ReqRespMetrics; @@ -112,8 +112,8 @@ export class ReqResp implements ReqRespInterface { } } - public setPeerAuthChecker(checker: PeerAuthChecker): void { - this.peerAuthChecker = checker; + public setShouldRejectPeer(checker: ShouldRejectPeer): void { + this.shouldRejectPeer = checker; } get tracer() { @@ -607,7 +607,7 @@ export class ReqResp implements ReqRespInterface { // When p2pAllowOnlyValidators is enabled, reject unauthenticated peers on data protocols if ( !UNAUTHENTICATED_ALLOWED_PROTOCOLS.has(protocol) && - this.peerAuthChecker?.(connection.remotePeer.toString()) + (this.shouldRejectPeer?.(connection.remotePeer.toString()) ?? false) ) { this.logger.debug(`Rejecting unauthenticated peer ${connection.remotePeer} on gated protocol ${protocol}`); throw new ReqRespStatusError(ReqRespStatus.FAILURE); diff --git a/yarn-project/p2p/src/test-helpers/mock-pubsub.ts b/yarn-project/p2p/src/test-helpers/mock-pubsub.ts index 3ab7839de294..fa11a03415a2 100644 --- a/yarn-project/p2p/src/test-helpers/mock-pubsub.ts +++ b/yarn-project/p2p/src/test-helpers/mock-pubsub.ts @@ -100,7 +100,7 @@ class MockReqResp implements ReqRespInterface { } updateConfig(_config: Partial): void {} - setPeerAuthChecker(): void {} + setShouldRejectPeer(): void {} start( subProtocolHandlers: Partial, diff --git a/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts b/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts index 386d3fe7df6f..e796472d4c42 100644 --- a/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts +++ b/yarn-project/p2p/src/test-helpers/reqresp-nodes.ts @@ -153,7 +153,7 @@ export async function createTestLibP2PService( epochCache, ); - reqresp.setPeerAuthChecker(peerId => peerManager.shouldDisableP2PGossip(peerId)); + reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId)); p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT; p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) => From 9ae924fb244d0df7bbb7da36448e997d2311b526 Mon Sep 17 00:00:00 2001 From: Nikita Meshcheriakov Date: Wed, 8 Apr 2026 13:11:59 -0300 Subject: [PATCH 4/4] fix build --- .../p2p/src/services/reqresp/reqresp.test.ts | 35 +------------------ 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts index 0c0dc3941181..2ddf4d9a2cbe 100644 --- a/yarn-project/p2p/src/services/reqresp/reqresp.test.ts +++ b/yarn-project/p2p/src/services/reqresp/reqresp.test.ts @@ -366,39 +366,6 @@ describe('ReqResp', () => { }); }); - describe('Block protocol', () => { - it('should handle block requests', async () => { - const blockNumber = 1; - const blockNumberFr = Fr.ONE; - const block = await L2Block.random(BlockNumber(blockNumber)); - - const l2BlockSource: MockProxy = mock(); - l2BlockSource.getBlock.mockImplementation((_blockNumber: number) => { - return Promise.resolve(block); - }); - - const protocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS; - protocolHandlers[ReqRespSubProtocol.BLOCK] = reqRespBlockHandler(l2BlockSource); - - nodes = await createNodes(peerScoring, 2); - - await startNodes(nodes, protocolHandlers); - await sleep(500); - await connectToPeers(nodes); - await sleep(500); - - const resp = await nodes[0].req.sendRequestToPeer( - nodes[1].p2p.peerId, - ReqRespSubProtocol.BLOCK, - blockNumberFr.toBuffer(), - ); - expectSuccess(resp); - - const res = L2Block.fromBuffer(resp.data); - expect(res).toEqual(block); - }); - }); - describe('Authentication gating', () => { it('should reject unauthenticated peers on all data protocols', async () => { nodes = await createNodes(peerScoring, 2); @@ -412,7 +379,7 @@ describe('ReqResp', () => { nodes[1].req.setShouldRejectPeer(() => true); // All data protocols should be rejected - for (const protocol of [ReqRespSubProtocol.TX, ReqRespSubProtocol.BLOCK, ReqRespSubProtocol.BLOCK_TXS]) { + for (const protocol of [ReqRespSubProtocol.TX, ReqRespSubProtocol.BLOCK_TXS]) { const resp = await nodes[0].req.sendRequestToPeer(nodes[1].p2p.peerId, protocol, Buffer.from('request')); expect(resp.status).toEqual(ReqRespStatus.FAILURE); }