@@ -338,6 +338,33 @@ func TestDARetriever_ProcessBlobs_KeepsDataForLaterHeaderAfterCandidateEvent(t *
338338 require .Equal (t , data .Data .DACommitment ().String (), events [0 ].Data .DACommitment ().String ())
339339}
340340
341+ func TestDARetriever_ProcessBlobs_RejectsUnexpectedProposerBeforePendingHeader (t * testing.T ) {
342+ expectedAddr , expectedPub , expectedSigner := buildSyncTestSigner (t )
343+ wrongAddr , wrongPub , wrongSigner := buildSyncTestSigner (t )
344+ gen := genesis.Genesis {ChainID : "tchain" , InitialHeight : 1 , StartTime : time .Now ().Add (- time .Second ), ProposerAddress : expectedAddr }
345+
346+ r := newTestDARetriever (t , nil , config .DefaultConfig (), gen )
347+ r .setExpectedProposerProvider (func (height uint64 ) ([]byte , bool ) {
348+ if height != 5 {
349+ return nil , false
350+ }
351+ return expectedAddr , true
352+ })
353+
354+ _ , data := makeSignedDataBytes (t , gen .ChainID , 5 , expectedAddr , expectedPub , expectedSigner , 1 )
355+ wrongHeaderBin , _ := makeSignedHeaderBytes (t , gen .ChainID , 5 , wrongAddr , wrongPub , wrongSigner , nil , & data .Data , nil )
356+ correctHeaderBin , correctHeader := makeSignedHeaderBytes (t , gen .ChainID , 5 , expectedAddr , expectedPub , expectedSigner , nil , & data .Data , nil )
357+
358+ events := r .processBlobs (context .Background (), [][]byte {wrongHeaderBin }, 100 )
359+ require .Empty (t , events )
360+ require .NotContains (t , r .pendingHeaders , uint64 (5 ), "unexpected proposer must not occupy the pending header slot" )
361+
362+ events = r .processBlobs (context .Background (), [][]byte {correctHeaderBin }, 101 )
363+ require .Empty (t , events )
364+ require .Contains (t , r .pendingHeaders , uint64 (5 ), "expected proposer should be accepted as pending while data is missing" )
365+ require .Equal (t , correctHeader .Hash ().String (), r .pendingHeaders [5 ].Hash ().String ())
366+ }
367+
341368func TestDARetriever_ProcessBlobs_MultipleHeadersCrossDAHeightMatching (t * testing.T ) {
342369
343370 addr , pub , signer := buildSyncTestSigner (t )
0 commit comments