Skip to content

Commit

Permalink
Merge branch 'feat/equivalent-messages' into test_feat/equivalent-mes…
Browse files Browse the repository at this point in the history
…sages
  • Loading branch information
AdoAdoAdo authored Jan 31, 2025
2 parents 7804345 + 3e24cfe commit 40beff7
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 9 deletions.
4 changes: 4 additions & 0 deletions consensus/spos/bls/v2/subroundBlock.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion dataRetriever/dataPool/headersCache/headersPool.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Expand Down
1 change: 1 addition & 0 deletions factory/processing/processComponents.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
3 changes: 3 additions & 0 deletions integrationTests/testProcessorNodeWithMultisigner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -474,6 +475,7 @@ func CreateNodesWithNodesCoordinatorAndHeaderSigVerifier(
FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{},
EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(),
HeadersPool: &mock.HeadersCacherStub{},
StorageService: &genericMocks.ChainStorerMock{},
}
headerSig, _ := headerCheck.NewHeaderSigVerifier(&args)

Expand Down Expand Up @@ -619,6 +621,7 @@ func CreateNodesWithNodesCoordinatorKeygenAndSingleSigner(
FallbackHeaderValidator: &testscommon.FallBackHeaderValidatorStub{},
EnableEpochsHandler: enableEpochsHandlerMock.NewEnableEpochsHandlerStub(),
HeadersPool: &mock.HeadersCacherStub{},
StorageService: &genericMocks.ChainStorerMock{},
}

headerSig, _ := headerCheck.NewHeaderSigVerifier(&args)
Expand Down
14 changes: 8 additions & 6 deletions node/chainSimulator/configs/configs.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions process/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
52 changes: 52 additions & 0 deletions process/headerCheck/headerSignatureVerify.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -67,6 +69,7 @@ func NewHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) (*HeaderSigVerifier,
fallbackHeaderValidator: arguments.FallbackHeaderValidator,
enableEpochsHandler: arguments.EnableEpochsHandler,
headersPool: arguments.HeadersPool,
storageService: arguments.StorageService,
}, nil
}

Expand Down Expand Up @@ -108,6 +111,9 @@ func checkArgsHeaderSigVerifier(arguments *ArgsHeaderSigVerifier) error {
if check.IfNil(arguments.HeadersPool) {
return process.ErrNilHeadersDataPool
}
if check.IfNil(arguments.StorageService) {
return process.ErrNilStorageService
}

return nil
}
Expand Down Expand Up @@ -230,6 +236,9 @@ func (hsv *HeaderSigVerifier) VerifySignature(header data.HeaderHandler) error {
if hsv.enableEpochsHandler.IsFlagEnabledInEpoch(common.EquivalentMessagesFlag, header.GetEpoch()) {
return hsv.VerifyHeaderWithProof(header)
}
if prevProof := header.GetPreviousProof(); !check.IfNilReflect(prevProof) {
return ErrProofNotExpected
}

headerCopy, err := hsv.copyHeaderWithoutSig(header)
if err != nil {
Expand Down Expand Up @@ -306,9 +315,52 @@ func (hsv *HeaderSigVerifier) VerifyHeaderWithProof(header data.HeaderHandler) e
}

prevProof := header.GetPreviousProof()
if prevProof.GetIsStartOfEpoch() {
return hsv.verifyHeaderProofAtTransition(prevProof)
}

return hsv.VerifyHeaderProof(prevProof)
}

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 {
if check.IfNilReflect(prevProof) {
return process.ErrNilHeaderProof
}
header, err := hsv.getHeaderForProof(prevProof)
if err != nil {
return err
}

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) {
Expand Down
2 changes: 2 additions & 0 deletions process/headerCheck/headerSignatureVerify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -57,6 +58,7 @@ func createHeaderSigVerifierArgs() *ArgsHeaderSigVerifier {
}, nil
},
},
StorageService: &genericMocks.ChainStorerMock{},
}
}

Expand Down

0 comments on commit 40beff7

Please sign in to comment.