From b60bf447b01c5947c3d6897278b24cdbfed5e4b7 Mon Sep 17 00:00:00 2001 From: Angel Valkov Date: Mon, 24 Feb 2025 13:41:20 +0200 Subject: [PATCH] Fix non-consecutive milestone error --- app/abci.go | 2 ++ x/milestone/abci/abci.go | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/abci.go b/app/abci.go index adbd8ee9..197fe1d3 100644 --- a/app/abci.go +++ b/app/abci.go @@ -413,6 +413,8 @@ func (app *HeimdallApp) PreBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlo logger.Debug("Adding milestone", "hashes", hashesToString(majorityMilestone.BlockHashes), "startBlock", majorityMilestone.StartBlockNumber, "endBlock", majorityMilestone.StartBlockNumber+uint64(len(majorityMilestone.BlockHashes)), "proposer", proposer) + logger.Error("nonconsec Adding milestone", "reqBlock", ctx.BlockHeight(), "startBlock", majorityMilestone.StartBlockNumber, "endBlock", majorityMilestone.StartBlockNumber+uint64(len(majorityMilestone.BlockHashes)-1)) + if err := app.MilestoneKeeper.AddMilestone(addMilestoneCtx, milestoneTypes.Milestone{ Proposer: proposer, Hash: majorityMilestone.BlockHashes[len(majorityMilestone.BlockHashes)-1], diff --git a/x/milestone/abci/abci.go b/x/milestone/abci/abci.go index 2d81a032..c5746f30 100644 --- a/x/milestone/abci/abci.go +++ b/x/milestone/abci/abci.go @@ -42,14 +42,20 @@ func GenMilestoneProposition(ctx sdk.Context, milestoneKeeper *keeper.Keeper, co logger.Debug("blocksSinceLastMilestone", "blocksSinceLastMilestone", blocksSinceLastMilestone) + logger.Error("nonconsec", "pendingMilestone", pendingMilestone) + logger.Error("nonconsec", "milestone", milestone) + // TODO: make blocksSinceLastMilestone limit configurable propStartBlock := uint64(0) - if pendingMilestone != nil && milestone != nil && blocksSinceLastMilestone < 6 { + if pendingMilestone != nil && milestone != nil && blocksSinceLastMilestone > 6 { + logger.Error("nonconsec 1") propStartBlock = milestone.EndBlock + 1 } else { if pendingMilestone != nil { + logger.Error("nonconsec 2") propStartBlock = pendingMilestone.StartBlockNumber + uint64(len(pendingMilestone.BlockHashes)) } else if milestone != nil { + logger.Error("nonconsec 3") propStartBlock = milestone.EndBlock + 1 } else { propStartBlock = 0 @@ -61,6 +67,8 @@ func GenMilestoneProposition(ctx sdk.Context, milestoneKeeper *keeper.Keeper, co return nil, err } + logger.Error("nonconsec Propose milestone", "propStartBlock", propStartBlock, "reqBlock", reqBlock, "blockHashes", len(blockHashes), "endBlock", propStartBlock+uint64(len(blockHashes)-1)) + milestoneProp := &sidetxs.MilestoneProposition{ BlockHashes: blockHashes, StartBlockNumber: propStartBlock, @@ -114,8 +122,10 @@ func GetMajorityMilestoneProposition(ctx sdk.Context, validatorSet stakeTypes.Va prefix = append(prefix, voteExtension.MilestoneProposition.BlockHashes[i]) hash := common.BytesToHash(bytes.Join(prefix, []byte{'|'})).String() + prefixCopy := make([][]byte, len(prefix)) + copy(prefixCopy, prefix) hashToProp[hash] = &sidetxs.MilestoneProposition{ - BlockHashes: prefix, + BlockHashes: prefixCopy, StartBlockNumber: voteExtension.MilestoneProposition.StartBlockNumber, } if _, ok := hashToVotingPower[hash]; !ok { @@ -148,6 +158,9 @@ func GetMajorityMilestoneProposition(ctx sdk.Context, validatorSet stakeTypes.Va if votingPower > maxVotingPower { maxVotingPower = votingPower maxHash = hash + } else if votingPower == maxVotingPower && + len(hashToProp[hash].BlockHashes) > len(hashToProp[maxHash].BlockHashes) { + maxHash = hash } }