From 1a49fe303d6e5e2c58251148d5ae0970b2979263 Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Thu, 30 Jan 2025 18:48:19 +0200 Subject: [PATCH 1/7] fix previous block proof saving --- consensus/spos/bls/v2/subroundBlock.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/consensus/spos/bls/v2/subroundBlock.go b/consensus/spos/bls/v2/subroundBlock.go index 36f62391257..7196d286403 100644 --- a/consensus/spos/bls/v2/subroundBlock.go +++ b/consensus/spos/bls/v2/subroundBlock.go @@ -355,6 +355,10 @@ func (sr *subroundBlock) createHeader() (data.HeaderHandler, error) { } func (sr *subroundBlock) saveProofForPreviousHeaderIfNeeded(header data.HeaderHandler, prevHeader data.HeaderHandler) { + if !common.ShouldBlockHavePrevProof(header, sr.EnableEpochsHandler(), common.EquivalentMessagesFlag) { + return + } + hasProof := sr.EquivalentProofsPool().HasProof(sr.ShardCoordinator().SelfId(), header.GetPrevHash()) if hasProof { log.Debug("saveProofForPreviousHeaderIfNeeded: no need to set proof since it is already saved") From e03fb3501fd2b31dab1f7db91975191582ec6459 Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Thu, 30 Jan 2025 18:53:41 +0200 Subject: [PATCH 2/7] fix prev proof verification --- consensus/spos/interface.go | 2 +- .../disabled/disabledHeaderSigVerifier.go | 2 +- process/headerCheck/headerSignatureVerify.go | 19 ++++++++----------- process/interface.go | 2 +- .../consensus/headerSigVerifierStub.go | 2 +- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/consensus/spos/interface.go b/consensus/spos/interface.go index 071790979c9..40bc30e2237 100644 --- a/consensus/spos/interface.go +++ b/consensus/spos/interface.go @@ -141,7 +141,7 @@ type HeaderSigVerifier interface { VerifyLeaderSignature(header data.HeaderHandler) error VerifySignature(header data.HeaderHandler) error VerifySignatureForHash(header data.HeaderHandler, hash []byte, pubkeysBitmap []byte, signature []byte) error - VerifyHeaderWithProof(header data.HeaderHandler) error + VerifyHeaderWithPrevProof(header data.HeaderHandler) error VerifyHeaderProof(headerProof data.HeaderProofHandler) error IsInterfaceNil() bool } diff --git a/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go b/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go index e4c4bb14a25..89947bc5f21 100644 --- a/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go +++ b/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go @@ -42,7 +42,7 @@ func (h *headerSigVerifier) VerifySignatureForHash(_ data.HeaderHandler, _ []byt } // VerifyHeaderWithProof returns nil as it is disabled -func (h *headerSigVerifier) VerifyHeaderWithProof(_ data.HeaderHandler) error { +func (h *headerSigVerifier) VerifyHeaderWithPrevProof(_ data.HeaderHandler) error { return nil } diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index cce3ef6665b..97539ad3cc4 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -227,8 +227,12 @@ func getPubKeySigners(consensusPubKeys []string, pubKeysBitmap []byte) [][]byte // VerifySignature will check if signature is correct func (hsv *HeaderSigVerifier) VerifySignature(header data.HeaderHandler) error { - if hsv.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, header.GetEpoch()) { - return hsv.VerifyHeaderWithProof(header) + if common.ShouldBlockHavePrevProof(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { + return hsv.VerifyHeaderWithPrevProof(header) + } + + if prevProof := header.GetPreviousProof(); !check.IfNilReflect(prevProof) { + return ErrProofNotExpected } headerCopy, err := hsv.copyHeaderWithoutSig(header) @@ -290,16 +294,9 @@ func (hsv *HeaderSigVerifier) VerifySignatureForHash(header data.HeaderHandler, return multiSigVerifier.VerifyAggregatedSig(pubKeysSigners, hash, signature) } -// VerifyHeaderWithProof checks if the proof on the header is correct -func (hsv *HeaderSigVerifier) VerifyHeaderWithProof(header data.HeaderHandler) error { +// VerifyHeaderWithPrevProof checks if the proof on the header is correct +func (hsv *HeaderSigVerifier) VerifyHeaderWithPrevProof(header data.HeaderHandler) error { // first block for transition to equivalent proofs consensus does not have a previous proof - if !common.ShouldBlockHavePrevProof(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { - if prevProof := header.GetPreviousProof(); !check.IfNilReflect(prevProof) { - return ErrProofNotExpected - } - return nil - } - err := verifyPrevProofForHeaderIntegrity(header) if err != nil { return err diff --git a/process/interface.go b/process/interface.go index 09a7ac3ca30..8528e9e931b 100644 --- a/process/interface.go +++ b/process/interface.go @@ -854,7 +854,7 @@ type InterceptedHeaderSigVerifier interface { VerifySignature(header data.HeaderHandler) error VerifySignatureForHash(header data.HeaderHandler, hash []byte, pubkeysBitmap []byte, signature []byte) error VerifyHeaderProof(headerProof data.HeaderProofHandler) error - VerifyHeaderWithProof(header data.HeaderHandler) error + VerifyHeaderWithPrevProof(header data.HeaderHandler) error IsInterfaceNil() bool } diff --git a/testscommon/consensus/headerSigVerifierStub.go b/testscommon/consensus/headerSigVerifierStub.go index d6f1004e9fd..a5ee821b531 100644 --- a/testscommon/consensus/headerSigVerifierStub.go +++ b/testscommon/consensus/headerSigVerifierStub.go @@ -59,7 +59,7 @@ func (mock *HeaderSigVerifierMock) VerifySignatureForHash(header data.HeaderHand } // VerifyHeaderWithProof - -func (mock *HeaderSigVerifierMock) VerifyHeaderWithProof(header data.HeaderHandler) error { +func (mock *HeaderSigVerifierMock) VerifyHeaderWithPrevProof(header data.HeaderHandler) error { if mock.VerifyHeaderWithProofCalled != nil { return mock.VerifyHeaderWithProofCalled(header) } From 2881f478e9811e527e4bd603f0a487e215b5ed72 Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Fri, 31 Jan 2025 10:07:13 +0200 Subject: [PATCH 3/7] fix proof signature verification at transition --- process/headerCheck/headerSignatureVerify.go | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index 97539ad3cc4..23f229bd4e5 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -303,9 +303,34 @@ func (hsv *HeaderSigVerifier) VerifyHeaderWithPrevProof(header data.HeaderHandle } prevProof := header.GetPreviousProof() + if header.GetShardID() != common.MetachainShardId && common.IsEpochChangeBlockForFlagActivation(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { + return hsv.verifyShardHeaderProofAtTransition(header, prevProof) + } + return hsv.VerifyHeaderProof(prevProof) } +func (hsv *HeaderSigVerifier) verifyShardHeaderProofAtTransition(header data.HeaderHandler, prevProof data.HeaderProofHandler) error { + consensusPubKeys, err := hsv.getConsensusSigners( + header.GetPrevRandSeed(), + prevProof.GetHeaderShardId(), + prevProof.GetHeaderEpoch(), + prevProof.GetIsStartOfEpoch(), + prevProof.GetHeaderRound(), + prevProof.GetHeaderHash(), + prevProof.GetPubKeysBitmap()) + if err != nil { + return err + } + + multiSigVerifier, err := hsv.multiSigContainer.GetMultiSigner(prevProof.GetHeaderEpoch()) + if err != nil { + return err + } + + return multiSigVerifier.VerifyAggregatedSig(consensusPubKeys, prevProof.GetHeaderHash(), prevProof.GetAggregatedSignature()) +} + // VerifyHeaderProof checks if the proof is correct for the header func (hsv *HeaderSigVerifier) VerifyHeaderProof(proofHandler data.HeaderProofHandler) error { if check.IfNilReflect(proofHandler) { From 3ac62dd78c6f7c7028a9a4f575d5f0fc54a3c102 Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Fri, 31 Jan 2025 10:25:25 +0200 Subject: [PATCH 4/7] adapt chain simulator config to the updated chain parameters --- node/chainSimulator/configs/configs.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/node/chainSimulator/configs/configs.go b/node/chainSimulator/configs/configs.go index 718329381e3..335064ba01e 100644 --- a/node/chainSimulator/configs/configs.go +++ b/node/chainSimulator/configs/configs.go @@ -134,12 +134,14 @@ func CreateChainSimulatorConfigs(args ArgsChainSimulatorConfigs) (*ArgsConfigsSi return nil, err } - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].ShardMinNumNodes = args.MinNodesPerShard - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].MetachainMinNumNodes = args.MetaChainMinNodes - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].MetachainConsensusGroupSize = args.MetaChainConsensusGroupSize - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].ShardConsensusGroupSize = args.ConsensusGroupSize - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].RoundDuration = args.RoundDurationInMillis - configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[0].Hysteresis = args.Hysteresis + for idx := 0; idx < len(configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch); idx++ { + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].ShardMinNumNodes = args.MinNodesPerShard + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].MetachainMinNumNodes = args.MetaChainMinNodes + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].MetachainConsensusGroupSize = args.MetaChainConsensusGroupSize + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].ShardConsensusGroupSize = args.ConsensusGroupSize + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].RoundDuration = args.RoundDurationInMillis + configs.GeneralConfig.GeneralSettings.ChainParametersByEpoch[idx].Hysteresis = args.Hysteresis + } // TODO[Sorin]: remove this once all equivalent messages PRs are merged configs.EpochConfig.EnableEpochs.EquivalentMessagesEnableEpoch = integrationTests.UnreachableEpoch From 8d3b00d330589f58f4fac4dc4c388cb438226e4b Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Fri, 31 Jan 2025 11:38:45 +0200 Subject: [PATCH 5/7] simplify --- dataRetriever/dataPool/headersCache/headersPool.go | 2 +- process/headerCheck/headerSignatureVerify.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dataRetriever/dataPool/headersCache/headersPool.go b/dataRetriever/dataPool/headersCache/headersPool.go index 8b2e044b432..dc8759441c9 100644 --- a/dataRetriever/dataPool/headersCache/headersPool.go +++ b/dataRetriever/dataPool/headersCache/headersPool.go @@ -65,7 +65,7 @@ func (pool *headersPool) AddHeader(headerHash []byte, header data.HeaderHandler) added := pool.cache.addHeader(headerHash, header) if added { - log.Debug("TOREMOVE - added header to pool", "cache ptr", fmt.Sprintf("%p", pool.cache), "header shard", header.GetShardID(), "header nonce", header.GetNonce()) + log.Debug("added header to pool", "header shard", header.GetShardID(), "header nonce", header.GetNonce(), "header hash", headerHash) pool.callAddedDataHandlers(header, headerHash) } } diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index 23f229bd4e5..835f680786f 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -303,14 +303,14 @@ func (hsv *HeaderSigVerifier) VerifyHeaderWithPrevProof(header data.HeaderHandle } prevProof := header.GetPreviousProof() - if header.GetShardID() != common.MetachainShardId && common.IsEpochChangeBlockForFlagActivation(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { - return hsv.verifyShardHeaderProofAtTransition(header, prevProof) + if common.IsEpochChangeBlockForFlagActivation(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { + return hsv.verifyHeaderProofAtTransition(header, prevProof) } return hsv.VerifyHeaderProof(prevProof) } -func (hsv *HeaderSigVerifier) verifyShardHeaderProofAtTransition(header data.HeaderHandler, prevProof data.HeaderProofHandler) error { +func (hsv *HeaderSigVerifier) verifyHeaderProofAtTransition(header data.HeaderHandler, prevProof data.HeaderProofHandler) error { consensusPubKeys, err := hsv.getConsensusSigners( header.GetPrevRandSeed(), prevProof.GetHeaderShardId(), From 24f0415d5bdd04ae90d7c485f30653c40f14be10 Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Fri, 31 Jan 2025 12:59:31 +0200 Subject: [PATCH 6/7] fixes prev proof verification --- consensus/spos/interface.go | 2 +- .../disabled/disabledHeaderSigVerifier.go | 2 +- factory/processing/processComponents.go | 1 + .../testProcessorNodeWithMultisigner.go | 3 ++ process/headerCheck/headerSignatureVerify.go | 42 +++++++++++++++---- .../headerCheck/headerSignatureVerify_test.go | 2 + process/interface.go | 2 +- .../consensus/headerSigVerifierStub.go | 2 +- 8 files changed, 44 insertions(+), 12 deletions(-) diff --git a/consensus/spos/interface.go b/consensus/spos/interface.go index 40bc30e2237..071790979c9 100644 --- a/consensus/spos/interface.go +++ b/consensus/spos/interface.go @@ -141,7 +141,7 @@ type HeaderSigVerifier interface { VerifyLeaderSignature(header data.HeaderHandler) error VerifySignature(header data.HeaderHandler) error VerifySignatureForHash(header data.HeaderHandler, hash []byte, pubkeysBitmap []byte, signature []byte) error - VerifyHeaderWithPrevProof(header data.HeaderHandler) error + VerifyHeaderWithProof(header data.HeaderHandler) error VerifyHeaderProof(headerProof data.HeaderProofHandler) error IsInterfaceNil() bool } diff --git a/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go b/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go index 89947bc5f21..e4c4bb14a25 100644 --- a/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go +++ b/epochStart/bootstrap/disabled/disabledHeaderSigVerifier.go @@ -42,7 +42,7 @@ func (h *headerSigVerifier) VerifySignatureForHash(_ data.HeaderHandler, _ []byt } // VerifyHeaderWithProof returns nil as it is disabled -func (h *headerSigVerifier) VerifyHeaderWithPrevProof(_ data.HeaderHandler) error { +func (h *headerSigVerifier) VerifyHeaderWithProof(_ data.HeaderHandler) error { return nil } diff --git a/factory/processing/processComponents.go b/factory/processing/processComponents.go index 9fd1d330d19..bfd985b4074 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(), + StorageService: pcf.data.StorageService(), } headerSigVerifier, err := headerCheck.NewHeaderSigVerifier(argsHeaderSig) if err != nil { diff --git a/integrationTests/testProcessorNodeWithMultisigner.go b/integrationTests/testProcessorNodeWithMultisigner.go index 7c20b09f349..7603865cc38 100644 --- a/integrationTests/testProcessorNodeWithMultisigner.go +++ b/integrationTests/testProcessorNodeWithMultisigner.go @@ -33,6 +33,7 @@ import ( "github.com/multiversx/mx-chain-go/testscommon/chainParameters" "github.com/multiversx/mx-chain-go/testscommon/cryptoMocks" "github.com/multiversx/mx-chain-go/testscommon/enableEpochsHandlerMock" + "github.com/multiversx/mx-chain-go/testscommon/genericMocks" "github.com/multiversx/mx-chain-go/testscommon/genesisMocks" "github.com/multiversx/mx-chain-go/testscommon/marshallerMock" "github.com/multiversx/mx-chain-go/testscommon/nodeTypeProviderMock" @@ -474,6 +475,7 @@ func CreateNodesWithNodesCoordinatorAndHeaderSigVerifier( FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{}, EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(), HeadersPool: &mock.HeadersCacherStub{}, + StorageService: &genericMocks.ChainStorerMock{}, } headerSig, _ := headerCheck.NewHeaderSigVerifier(&args) @@ -619,6 +621,7 @@ func CreateNodesWithNodesCoordinatorKeygenAndSingleSigner( FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{}, EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(), HeadersPool: &mock.HeadersCacherStub{}, + StorageService: &genericMocks.ChainStorerMock{}, } headerSig, _ := headerCheck.NewHeaderSigVerifier(&args) diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index 835f680786f..49763c33dc9 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -35,6 +35,7 @@ type ArgsHeaderSigVerifier struct { FallbackHeaderValidator process.FallbackHeaderValidator EnableEpochsHandler common.EnableEpochsHandler HeadersPool dataRetriever.HeadersPool + StorageService dataRetriever.StorageService } // HeaderSigVerifier is component used to check if a header is valid @@ -48,6 +49,7 @@ type HeaderSigVerifier struct { fallbackHeaderValidator process.FallbackHeaderValidator enableEpochsHandler common.EnableEpochsHandler headersPool dataRetriever.HeadersPool + storageService dataRetriever.StorageService } // NewHeaderSigVerifier will create a new instance of HeaderSigVerifier @@ -108,6 +110,9 @@ func checkArgsHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) error { if check.IfNil(arguments.HeadersPool) { return process.ErrNilHeadersDataPool } + if check.IfNil(arguments.StorageService) { + return process.ErrNilStorageService + } return nil } @@ -227,10 +232,9 @@ func getPubKeySigners(consensusPubKeys []string, pubKeysBitmap []byte) [][]byte // VerifySignature will check if signature is correct func (hsv *HeaderSigVerifier) VerifySignature(header data.HeaderHandler) error { - if common.ShouldBlockHavePrevProof(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { - return hsv.VerifyHeaderWithPrevProof(header) + if hsv.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, header.GetEpoch()) { + return hsv.VerifyHeaderWithProof(header) } - if prevProof := header.GetPreviousProof(); !check.IfNilReflect(prevProof) { return ErrProofNotExpected } @@ -294,23 +298,45 @@ func (hsv *HeaderSigVerifier) VerifySignatureForHash(header data.HeaderHandler, return multiSigVerifier.VerifyAggregatedSig(pubKeysSigners, hash, signature) } -// VerifyHeaderWithPrevProof checks if the proof on the header is correct -func (hsv *HeaderSigVerifier) VerifyHeaderWithPrevProof(header data.HeaderHandler) error { +// VerifyHeaderWithProof checks if the proof on the header is correct +func (hsv *HeaderSigVerifier) VerifyHeaderWithProof(header data.HeaderHandler) error { // first block for transition to equivalent proofs consensus does not have a previous proof + if !common.ShouldBlockHavePrevProof(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { + if prevProof := header.GetPreviousProof(); !check.IfNilReflect(prevProof) { + return ErrProofNotExpected + } + return nil + } + err := verifyPrevProofForHeaderIntegrity(header) if err != nil { return err } prevProof := header.GetPreviousProof() - if common.IsEpochChangeBlockForFlagActivation(header, hsv.enableEpochsHandler, common.EquivalentMessagesFlag) { - return hsv.verifyHeaderProofAtTransition(header, prevProof) + if prevProof.GetIsStartOfEpoch() { + return hsv.verifyHeaderProofAtTransition(prevProof) } return hsv.VerifyHeaderProof(prevProof) } -func (hsv *HeaderSigVerifier) verifyHeaderProofAtTransition(header data.HeaderHandler, prevProof data.HeaderProofHandler) error { +func (hsv *HeaderSigVerifier) getHeaderForProof(proof data.HeaderProofHandler) (data.HeaderHandler, error) { + headerUnit := dataRetriever.GetHeadersDataUnit(proof.GetHeaderShardId()) + headersStorer, err := hsv.storageService.GetStorer(headerUnit) + if err != nil { + return nil, err + } + + return process.GetHeader(proof.GetHeaderHash(), hsv.headersPool, headersStorer, hsv.marshalizer, proof.GetHeaderShardId()) +} + +func (hsv *HeaderSigVerifier) verifyHeaderProofAtTransition(prevProof data.HeaderProofHandler) error { + header, err := hsv.getHeaderForProof(prevProof) + if err != nil { + return err + } + consensusPubKeys, err := hsv.getConsensusSigners( header.GetPrevRandSeed(), prevProof.GetHeaderShardId(), diff --git a/process/headerCheck/headerSignatureVerify_test.go b/process/headerCheck/headerSignatureVerify_test.go index ffa59035043..95aa451a837 100644 --- a/process/headerCheck/headerSignatureVerify_test.go +++ b/process/headerCheck/headerSignatureVerify_test.go @@ -19,6 +19,7 @@ import ( "github.com/multiversx/mx-chain-go/testscommon" "github.com/multiversx/mx-chain-go/testscommon/cryptoMocks" "github.com/multiversx/mx-chain-go/testscommon/enableEpochsHandlerMock" + "github.com/multiversx/mx-chain-go/testscommon/genericMocks" "github.com/multiversx/mx-chain-go/testscommon/hashingMocks" "github.com/multiversx/mx-chain-go/testscommon/shardingMocks" ) @@ -57,6 +58,7 @@ func createHeaderSigVerifierArgs() *ArgsHeaderSigVerifier { }, nil }, }, + StorageService: &genericMocks.ChainStorerMock{}, } } diff --git a/process/interface.go b/process/interface.go index 8528e9e931b..09a7ac3ca30 100644 --- a/process/interface.go +++ b/process/interface.go @@ -854,7 +854,7 @@ type InterceptedHeaderSigVerifier interface { VerifySignature(header data.HeaderHandler) error VerifySignatureForHash(header data.HeaderHandler, hash []byte, pubkeysBitmap []byte, signature []byte) error VerifyHeaderProof(headerProof data.HeaderProofHandler) error - VerifyHeaderWithPrevProof(header data.HeaderHandler) error + VerifyHeaderWithProof(header data.HeaderHandler) error IsInterfaceNil() bool } diff --git a/testscommon/consensus/headerSigVerifierStub.go b/testscommon/consensus/headerSigVerifierStub.go index a5ee821b531..d6f1004e9fd 100644 --- a/testscommon/consensus/headerSigVerifierStub.go +++ b/testscommon/consensus/headerSigVerifierStub.go @@ -59,7 +59,7 @@ func (mock *HeaderSigVerifierMock) VerifySignatureForHash(header data.HeaderHand } // VerifyHeaderWithProof - -func (mock *HeaderSigVerifierMock) VerifyHeaderWithPrevProof(header data.HeaderHandler) error { +func (mock *HeaderSigVerifierMock) VerifyHeaderWithProof(header data.HeaderHandler) error { if mock.VerifyHeaderWithProofCalled != nil { return mock.VerifyHeaderWithProofCalled(header) } From e6281466f53718e9ed1d812c7e087e157eb901ac Mon Sep 17 00:00:00 2001 From: Adrian Dobrita Date: Fri, 31 Jan 2025 14:15:13 +0200 Subject: [PATCH 7/7] init storage service --- process/common.go | 5 +++-- process/headerCheck/headerSignatureVerify.go | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/process/common.go b/process/common.go index 0912bdf153a..0bc06bab14e 100644 --- a/process/common.go +++ b/process/common.go @@ -18,12 +18,13 @@ import ( "github.com/multiversx/mx-chain-core-go/data/typeConverters" "github.com/multiversx/mx-chain-core-go/hashing" "github.com/multiversx/mx-chain-core-go/marshal" + logger "github.com/multiversx/mx-chain-logger-go" + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/multiversx/mx-chain-go/common" "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/state" "github.com/multiversx/mx-chain-go/storage" - logger "github.com/multiversx/mx-chain-logger-go" - vmcommon "github.com/multiversx/mx-chain-vm-common-go" ) var log = logger.GetOrCreate("process") diff --git a/process/headerCheck/headerSignatureVerify.go b/process/headerCheck/headerSignatureVerify.go index 49763c33dc9..3041fd22ad5 100644 --- a/process/headerCheck/headerSignatureVerify.go +++ b/process/headerCheck/headerSignatureVerify.go @@ -69,6 +69,7 @@ func NewHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) (*HeaderSigVerifier, fallbackHeaderValidator: arguments.FallbackHeaderValidator, enableEpochsHandler: arguments.EnableEpochsHandler, headersPool: arguments.HeadersPool, + storageService: arguments.StorageService, }, nil } @@ -332,6 +333,9 @@ func (hsv *HeaderSigVerifier) getHeaderForProof(proof data.HeaderProofHandler) ( } func (hsv *HeaderSigVerifier) verifyHeaderProofAtTransition(prevProof data.HeaderProofHandler) error { + if check.IfNilReflect(prevProof) { + return process.ErrNilHeaderProof + } header, err := hsv.getHeaderForProof(prevProof) if err != nil { return err