From 173dc240de213b615636e61cfdfa543eb75ab7f1 Mon Sep 17 00:00:00 2001 From: Agustin Mista Date: Thu, 9 Oct 2025 14:30:15 +0200 Subject: [PATCH 1/2] Propagate feature flags down to NodeKernelArgs Brings in cardano-base and propagates a set of `CardanoFeatureFlag`s from the top-level `RunNodeArgs` down to the `NodeKernelArgs`. This is currently needed by upcoming PRs that need to conditionally enable certain behavior based on the `PerasFlag` feature flag. --- cabal.project | 2 +- .../ouroboros-consensus-diffusion.cabal | 1 + .../Ouroboros/Consensus/Node.hs | 12 ++++++++++++ .../Ouroboros/Consensus/NodeKernel.hs | 3 +++ .../Test/ThreadNet/Network.hs | 1 + 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cabal.project b/cabal.project index 82cbf035ba..d4cf855717 100644 --- a/cabal.project +++ b/cabal.project @@ -16,7 +16,7 @@ index-state: -- Bump this if you need newer packages from Hackage , hackage.haskell.org 2025-10-23T13:39:53Z -- Bump this if you need newer packages from CHaP - , cardano-haskell-packages 2025-10-01T14:54:25Z + , cardano-haskell-packages 2025-10-07T11:20:00Z packages: ouroboros-consensus diff --git a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal index 917d1145f7..cff0d40bdc 100644 --- a/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal +++ b/ouroboros-consensus-diffusion/ouroboros-consensus-diffusion.cabal @@ -77,6 +77,7 @@ library build-depends: base >=4.14 && <4.22, bytestring >=0.10 && <0.13, + cardano-base, cardano-slotting, cborg ^>=0.2.2, containers >=0.5 && <0.8, diff --git a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs index ac9fb75450..5edf4c36e2 100644 --- a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs +++ b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Node.hs @@ -63,6 +63,7 @@ module Ouroboros.Consensus.Node , openChainDB ) where +import Cardano.Base.FeatureFlags (CardanoFeatureFlag) import qualified Cardano.Network.Diffusion as Cardano.Diffusion import Cardano.Network.Diffusion.Configuration (ChainSyncIdleTimeout (..)) import qualified Cardano.Network.Diffusion.Policies as Cardano.Diffusion @@ -87,6 +88,7 @@ import Data.Kind (Type) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map import Data.Maybe (fromMaybe, isNothing) +import Data.Set (Set) import Data.Time (NominalDiffTime) import Data.Typeable (Typeable) import Ouroboros.Consensus.Block @@ -235,6 +237,8 @@ data RunNodeArgs m addrNTN addrNTC blk = RunNodeArgs -- ^ Network PeerSharing miniprotocol willingness flag , rnGetUseBootstrapPeers :: STM m UseBootstrapPeers , rnGenesisConfig :: GenesisConfig + , rnFeatureFlags :: Set CardanoFeatureFlag + -- ^ Enabled experimental features } -- | Arguments that usually only tests /directly/ specify. @@ -322,6 +326,8 @@ data LowLevelRunNodeArgs m addrNTN addrNTC blk , llrnPublicPeerSelectionStateVar :: StrictSTM.StrictTVar m (PublicPeerSelectionState addrNTN) , llrnLdbFlavorArgs :: LedgerDbBackendArgs m blk -- ^ The flavor arguments + , llrnFeatureFlags :: Set CardanoFeatureFlag + -- ^ Enabled experimental features } data NodeDatabasePaths @@ -576,6 +582,7 @@ runWith RunNodeArgs{..} encAddrNtN decAddrNtN LowLevelRunNodeArgs{..} = gsmAntiThunderingHerd keepAliveRng cfg + llrnFeatureFlags rnTraceConsensus btime (InFutureCheck.realHeaderInFutureCheck llrnMaxClockSkew systemTime) @@ -853,6 +860,7 @@ mkNodeKernelArgs :: StdGen -> StdGen -> TopLevelConfig blk -> + Set CardanoFeatureFlag -> Tracers m (ConnectionId addrNTN) (ConnectionId addrNTC) blk -> BlockchainTime m -> InFutureCheck.SomeHeaderInFutureCheck m blk -> @@ -872,6 +880,7 @@ mkNodeKernelArgs gsmAntiThunderingHerd rng cfg + featureFlags tracers btime chainSyncFutureCheck @@ -891,6 +900,7 @@ mkNodeKernelArgs { tracers , registry , cfg + , featureFlags , btime , chainDB , initChainDB = nodeInitChainDB @@ -1009,6 +1019,7 @@ stdLowLevelRunNodeArgsIO { rnProtocolInfo , rnPeerSharing , rnGenesisConfig + , rnFeatureFlags } $(SafeWildCards.fields 'StdRunNodeArgs) = do llrnBfcSalt <- stdBfcSaltIO @@ -1058,6 +1069,7 @@ stdLowLevelRunNodeArgsIO , llrnPublicPeerSelectionStateVar = Diffusion.dcPublicPeerSelectionVar srnDiffusionConfiguration , llrnLdbFlavorArgs = ldbBackendArgs + , llrnFeatureFlags = rnFeatureFlags } where networkMagic :: NetworkMagic diff --git a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs index 1c45c68155..36ba2cbcf2 100644 --- a/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs +++ b/ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/NodeKernel.hs @@ -27,6 +27,7 @@ module Ouroboros.Consensus.NodeKernel , toConsensusMode ) where +import Cardano.Base.FeatureFlags (CardanoFeatureFlag) import Cardano.Network.ConsensusMode (ConsensusMode (..)) import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers) import Cardano.Network.PeerSelection.LocalRootPeers @@ -51,6 +52,7 @@ import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NE import Data.Maybe (isJust, mapMaybe) import Data.Proxy +import Data.Set (Set) import qualified Data.Text as Text import Data.Void (Void) import Ouroboros.Consensus.Block hiding (blockMatchesHeader) @@ -195,6 +197,7 @@ data NodeKernelArgs m addrNTN addrNTC blk = NodeKernelArgs { tracers :: Tracers m (ConnectionId addrNTN) addrNTC blk , registry :: ResourceRegistry m , cfg :: TopLevelConfig blk + , featureFlags :: Set CardanoFeatureFlag , btime :: BlockchainTime m , chainDB :: ChainDB m blk , initChainDB :: StorageConfig blk -> InitChainDB m blk -> m () diff --git a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs index f5e9dbecbd..865a296d75 100644 --- a/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs +++ b/ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs @@ -1045,6 +1045,7 @@ runThreadNetwork { tracers , registry , cfg = pInfoConfig + , featureFlags = mempty , btime , chainDB , initChainDB = nodeInitChainDB From 32dbee313b42ce672c47482da6a88f83ba68c999 Mon Sep 17 00:00:00 2001 From: Agustin Mista Date: Wed, 26 Nov 2025 16:18:11 +0100 Subject: [PATCH 2/2] Add changelog entry --- ...8_agustin.mista_introduce_feature_flags.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 ouroboros-consensus-diffusion/changelog.d/20251126_161528_agustin.mista_introduce_feature_flags.md diff --git a/ouroboros-consensus-diffusion/changelog.d/20251126_161528_agustin.mista_introduce_feature_flags.md b/ouroboros-consensus-diffusion/changelog.d/20251126_161528_agustin.mista_introduce_feature_flags.md new file mode 100644 index 0000000000..ea94b10ccc --- /dev/null +++ b/ouroboros-consensus-diffusion/changelog.d/20251126_161528_agustin.mista_introduce_feature_flags.md @@ -0,0 +1,23 @@ + + + + +### Breaking + +- Add `rnFeatureFlags` field to `RunNodeArgs` to store enabled experimental feature flags. +