From 0c817d2a3c9863a7460097eab1a99cd464f3d203 Mon Sep 17 00:00:00 2001 From: smcio Date: Fri, 10 Apr 2026 09:24:37 +0200 Subject: [PATCH] fix feature activation bug --- pkg/replay/feature_activation.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/replay/feature_activation.go b/pkg/replay/feature_activation.go index 712f588b..207d841b 100644 --- a/pkg/replay/feature_activation.go +++ b/pkg/replay/feature_activation.go @@ -48,14 +48,19 @@ func scanAndEnableFeatures(acctsDb *accountsdb.AccountsDb, replayCtx *ReplayCtx, continue } - parentAccts = append(parentAccts, acct.Clone()) featureAcct := features.UnmarshalFeatureAcct(acct.Data) + // feature already activated. set it as activated on new features object. if featureAcct.ActivatedAt != nil && slot >= *featureAcct.ActivatedAt { f.EnableFeature(featureGate, *featureAcct.ActivatedAt) } + // the feature needs activating, so marshal up the feature account state as + // activated, store the parent account and modified account, and enable the + // feature on the new features object. if featureAcct.ActivatedAt == nil && startOfEpoch { + parentAccts = append(parentAccts, acct.Clone()) + newFeatureAcct := &features.FeatureAcct{ActivatedAt: &slot} newFeatureAcctBytes, err := features.MarshalFeatureAcct(newFeatureAcct) if err != nil { @@ -65,6 +70,8 @@ func scanAndEnableFeatures(acctsDb *accountsdb.AccountsDb, replayCtx *ReplayCtx, acct.Data = newFeatureAcctBytes modifiedAccts = append(modifiedAccts, acct) f.EnableFeature(featureGate, slot) + + mlog.Log.Infof("Activated new feature %s at slot %d", featureGate.Name, slot) } }