From 816dce95272e11f21e38f4afbd2d4551c1588563 Mon Sep 17 00:00:00 2001 From: Banana-J Date: Sat, 23 Mar 2024 09:18:21 +1100 Subject: [PATCH] drop peer if received bad block data which does not include the validator field (#494) Co-authored-by: wjrjerome --- consensus/XDPoS/engines/engine_v2/verifyHeader.go | 3 ++- consensus/errors.go | 2 ++ consensus/tests/engine_v2_tests/verify_header_test.go | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/consensus/XDPoS/engines/engine_v2/verifyHeader.go b/consensus/XDPoS/engines/engine_v2/verifyHeader.go index a759d7455fad..7ba672bccbaa 100644 --- a/consensus/XDPoS/engines/engine_v2/verifyHeader.go +++ b/consensus/XDPoS/engines/engine_v2/verifyHeader.go @@ -36,7 +36,8 @@ func (x *XDPoS_v2) verifyHeader(chain consensus.ChainReader, header *types.Heade } if len(header.Validator) == 0 { - return consensus.ErrNoValidatorSignature + // This should never happen, if it does, then it means the peer is sending us invalid data. + return consensus.ErrNoValidatorSignatureV2 } if fullVerify { diff --git a/consensus/errors.go b/consensus/errors.go index 0747516f8754..c8ed578c2c5f 100644 --- a/consensus/errors.go +++ b/consensus/errors.go @@ -39,6 +39,8 @@ var ( ErrNoValidatorSignature = errors.New("no validator in header") + ErrNoValidatorSignatureV2 = errors.New("no validator in v2 header") + ErrNotReadyToPropose = errors.New("not ready to propose, QC is not ready") ErrNotReadyToMine = errors.New("Not ready to mine, it's not your turn") diff --git a/consensus/tests/engine_v2_tests/verify_header_test.go b/consensus/tests/engine_v2_tests/verify_header_test.go index a8b2eaec30e2..ab3e47fbf48a 100644 --- a/consensus/tests/engine_v2_tests/verify_header_test.go +++ b/consensus/tests/engine_v2_tests/verify_header_test.go @@ -50,7 +50,7 @@ func TestShouldVerifyBlock(t *testing.T) { noValidatorBlock := blockchain.GetBlockByNumber(902).Header() noValidatorBlock.Validator = []byte{} err = adaptor.VerifyHeader(blockchain, noValidatorBlock, true) - assert.Equal(t, consensus.ErrNoValidatorSignature, err) + assert.Equal(t, consensus.ErrNoValidatorSignatureV2, err) blockFromFuture := blockchain.GetBlockByNumber(902).Header() blockFromFuture.Time = big.NewInt(time.Now().Unix() + 10000)