diff --git a/factory/processing/processComponents.go b/factory/processing/processComponents.go index bfd985b4074..b41b9bedae6 100644 --- a/factory/processing/processComponents.go +++ b/factory/processing/processComponents.go @@ -296,6 +296,7 @@ func (pcf *processComponentsFactory) Create() (*processComponents, error) { FallbackHeaderValidator: fallbackHeaderValidator, EnableEpochsHandler: pcf.coreData.EnableEpochsHandler(), HeadersPool: pcf.data.Datapool().Headers(), + ProofsPool: pcf.data.Datapool().Proofs(), StorageService: pcf.data.StorageService(), } headerSigVerifier, err := headerCheck.NewHeaderSigVerifier(argsHeaderSig) diff --git a/integrationTests/testProcessorNodeWithMultisigner.go b/integrationTests/testProcessorNodeWithMultisigner.go index 7603865cc38..5ba26d0f10e 100644 --- a/integrationTests/testProcessorNodeWithMultisigner.go +++ b/integrationTests/testProcessorNodeWithMultisigner.go @@ -32,6 +32,7 @@ import ( "github.com/multiversx/mx-chain-go/testscommon" "github.com/multiversx/mx-chain-go/testscommon/chainParameters" "github.com/multiversx/mx-chain-go/testscommon/cryptoMocks" + "github.com/multiversx/mx-chain-go/testscommon/dataRetriever" "github.com/multiversx/mx-chain-go/testscommon/enableEpochsHandlerMock" "github.com/multiversx/mx-chain-go/testscommon/genericMocks" "github.com/multiversx/mx-chain-go/testscommon/genesisMocks" @@ -475,6 +476,7 @@ func CreateNodesWithNodesCoordinatorAndHeaderSigVerifier( FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{}, EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(), HeadersPool: &mock.HeadersCacherStub{}, + ProofsPool: &dataRetriever.ProofsPoolMock{}, StorageService: &genericMocks.ChainStorerMock{}, } headerSig, _ := headerCheck.NewHeaderSigVerifier(&args) @@ -621,6 +623,7 @@ func CreateNodesWithNodesCoordinatorKeygenAndSingleSigner( FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{}, EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(), HeadersPool: &mock.HeadersCacherStub{}, + ProofsPool: &dataRetriever.ProofsPoolMock{}, StorageService: &genericMocks.ChainStorerMock{}, } diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index 7e38d7b7be7..306b5f8d759 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -38,6 +38,7 @@ type ArgsHeaderSigVerifier struct { FallbackHeaderValidator process.FallbackHeaderValidator EnableEpochsHandler common.EnableEpochsHandler HeadersPool dataRetriever.HeadersPool + ProofsPool dataRetriever.ProofsPool StorageService dataRetriever.StorageService } @@ -52,6 +53,7 @@ type HeaderSigVerifier struct { fallbackHeaderValidator process.FallbackHeaderValidator enableEpochsHandler common.EnableEpochsHandler headersPool dataRetriever.HeadersPool + proofsPool dataRetriever.ProofsPool storageService dataRetriever.StorageService } @@ -72,6 +74,7 @@ func NewHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) (*HeaderSigVerifier, fallbackHeaderValidator: arguments.FallbackHeaderValidator, enableEpochsHandler: arguments.EnableEpochsHandler, headersPool: arguments.HeadersPool, + proofsPool: arguments.ProofsPool, storageService: arguments.StorageService, }, nil } @@ -114,6 +117,9 @@ func checkArgsHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) error { if check.IfNil(arguments.HeadersPool) { return process.ErrNilHeadersDataPool } + if check.IfNil(arguments.ProofsPool) { + return process.ErrNilProofsPool + } if check.IfNil(arguments.StorageService) { return process.ErrNilStorageService } @@ -321,7 +327,14 @@ func (hsv *HeaderSigVerifier) VerifyHeaderWithProof(header data.HeaderHandler) e return hsv.verifyHeaderProofAtTransition(prevProof) } - return hsv.VerifyHeaderProof(prevProof) + err = hsv.VerifyHeaderProof(prevProof) + if err != nil { + return err + } + + _ = hsv.proofsPool.AddProof(prevProof) + + return nil } func (hsv *HeaderSigVerifier) getHeaderForProofAtTransition(proof data.HeaderProofHandler) (data.HeaderHandler, error) { diff --git a/process/headerCheck/headerSignatureVerify_test.go b/process/headerCheck/headerSignatureVerify_test.go index e4cb49fa4b9..7947eb8b01e 100644 --- a/process/headerCheck/headerSignatureVerify_test.go +++ b/process/headerCheck/headerSignatureVerify_test.go @@ -22,6 +22,7 @@ import ( "github.com/multiversx/mx-chain-go/storage" "github.com/multiversx/mx-chain-go/testscommon" "github.com/multiversx/mx-chain-go/testscommon/cryptoMocks" + dataRetrieverMocks "github.com/multiversx/mx-chain-go/testscommon/dataRetriever" "github.com/multiversx/mx-chain-go/testscommon/enableEpochsHandlerMock" "github.com/multiversx/mx-chain-go/testscommon/genericMocks" "github.com/multiversx/mx-chain-go/testscommon/hashingMocks" @@ -64,6 +65,7 @@ func createHeaderSigVerifierArgs() *ArgsHeaderSigVerifier { }, nil }, }, + ProofsPool: &dataRetrieverMocks.ProofsPoolMock{}, StorageService: &genericMocks.ChainStorerMock{}, } }