From 3cd47de8c3c3a703d8bf19d9180a608e7c9e6906 Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Fri, 23 Jan 2026 02:23:02 +0100 Subject: [PATCH 1/4] Add temporary stanzas --- cabal.project | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cabal.project b/cabal.project index 3ef2447a9db..3bae4cc7e10 100644 --- a/cabal.project +++ b/cabal.project @@ -16,6 +16,17 @@ index-state: , hackage.haskell.org 2025-10-17T00:26:22Z , cardano-haskell-packages 2025-11-20T19:55:27Z +-- BEGIN SRP STANZAS MANAGED BY STANZAMAN -- + +source-repository-package + type: git + location: https://github.com/IntersectMBO/cardano-cli.git + tag: fffc9cdff81296e9cd2409421f9ff52582f6ae6c + subdir: cardano-cli + --sha256: 0jhs47cqmmp9wryd7na473qsqan90d29mf01yjapkqlmrx3wyk6b + +-- END SRP STANZAS MANAGED BY STANZAMAN -- + packages: cardano-node cardano-node-capi From 759da1c356aae5998faceff96b007c4696eec775 Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Fri, 23 Jan 2026 02:42:46 +0100 Subject: [PATCH 2/4] Adjust versions --- .../plutus-scripts-bench/plutus-scripts-bench.cabal | 8 ++++---- bench/tx-generator/tx-generator.cabal | 4 ++-- cabal.project | 4 ++-- cardano-node-chairman/cardano-node-chairman.cabal | 2 +- cardano-node/cardano-node.cabal | 6 +++--- cardano-submit-api/cardano-submit-api.cabal | 4 ++-- cardano-testnet/cardano-testnet.cabal | 4 ++-- flake.lock | 12 ++++++------ 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index 169a3126ed8..37bfbb5cd8a 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -82,10 +82,10 @@ library -- IOG dependencies -------------------------- build-depends: - , cardano-api ^>=10.19 - , plutus-ledger-api ^>=1.53 - , plutus-tx ^>=1.53 - , plutus-tx-plugin ^>=1.53 + , cardano-api ^>=10.23 + , plutus-ledger-api ^>=1.57 + , plutus-tx ^>=1.57 + , plutus-tx-plugin ^>=1.57 ------------------------ -- Non-IOG dependencies diff --git a/bench/tx-generator/tx-generator.cabal b/bench/tx-generator/tx-generator.cabal index afaa52fd929..352a2138886 100644 --- a/bench/tx-generator/tx-generator.cabal +++ b/bench/tx-generator/tx-generator.cabal @@ -111,9 +111,9 @@ library , attoparsec-aeson , base16-bytestring , bytestring - , cardano-api ^>= 10.19 + , cardano-api ^>= 10.23 , cardano-binary - , cardano-cli ^>= 10.13 + , cardano-cli ^>= 10.15 , cardano-crypto-class , cardano-crypto-wrapper , cardano-data diff --git a/cabal.project b/cabal.project index 3bae4cc7e10..79250e7c242 100644 --- a/cabal.project +++ b/cabal.project @@ -13,8 +13,8 @@ repository cardano-haskell-packages -- See CONTRIBUTING for information about these, including some Nix commands -- you need to run if you change them index-state: - , hackage.haskell.org 2025-10-17T00:26:22Z - , cardano-haskell-packages 2025-11-20T19:55:27Z + , hackage.haskell.org 2026-01-23T16:01:56Z + , cardano-haskell-packages 2026-01-30T03:40:53Z -- BEGIN SRP STANZAS MANAGED BY STANZAMAN -- diff --git a/cardano-node-chairman/cardano-node-chairman.cabal b/cardano-node-chairman/cardano-node-chairman.cabal index ed6faec2369..20393409a69 100644 --- a/cardano-node-chairman/cardano-node-chairman.cabal +++ b/cardano-node-chairman/cardano-node-chairman.cabal @@ -88,5 +88,5 @@ test-suite chairman-tests ghc-options: -threaded -rtsopts "-with-rtsopts=-N -T" build-tool-depends: cardano-node:cardano-node - , cardano-cli:cardano-cli ^>= 10.13 + , cardano-cli:cardano-cli ^>= 10.15 , cardano-node-chairman:cardano-node-chairman diff --git a/cardano-node/cardano-node.cabal b/cardano-node/cardano-node.cabal index f6836d20bd6..322b104d4f0 100644 --- a/cardano-node/cardano-node.cabal +++ b/cardano-node/cardano-node.cabal @@ -138,7 +138,7 @@ library , async , base16-bytestring , bytestring - , cardano-api ^>= 10.19 + , cardano-api ^>= 10.23 , cardano-crypto-class ^>=2.2.3.2 , cardano-crypto-wrapper , cardano-git-rev ^>=0.2.2 @@ -185,9 +185,9 @@ library , network-mux >= 0.8 , nothunks , optparse-applicative - , ouroboros-consensus ^>= 0.28 + , ouroboros-consensus ^>= 0.30 , ouroboros-consensus-cardano ^>= 0.26 - , ouroboros-consensus-diffusion ^>= 0.24 + , ouroboros-consensus-diffusion ^>= 0.25 , ouroboros-consensus-protocol , ouroboros-network-api ^>= 0.16 , ouroboros-network:{ouroboros-network, cardano-diffusion, orphan-instances} ^>= 0.22.4 diff --git a/cardano-submit-api/cardano-submit-api.cabal b/cardano-submit-api/cardano-submit-api.cabal index 866ca526430..dac88bc83a3 100644 --- a/cardano-submit-api/cardano-submit-api.cabal +++ b/cardano-submit-api/cardano-submit-api.cabal @@ -39,9 +39,9 @@ library , aeson , async , bytestring - , cardano-api ^>= 10.19 + , cardano-api ^>= 10.23 , cardano-binary - , cardano-cli ^>= 10.13 + , cardano-cli ^>= 10.15 , cardano-crypto-class ^>=2.2.3.2 , containers , ekg-core diff --git a/cardano-testnet/cardano-testnet.cabal b/cardano-testnet/cardano-testnet.cabal index d9ad3e1840a..5dec3c6425b 100644 --- a/cardano-testnet/cardano-testnet.cabal +++ b/cardano-testnet/cardano-testnet.cabal @@ -41,8 +41,8 @@ library , annotated-exception , ansi-terminal , bytestring - , cardano-api ^>= 10.19 - , cardano-cli:{cardano-cli, cardano-cli-test-lib} ^>= 10.13 + , cardano-api ^>= 10.23 + , cardano-cli:{cardano-cli, cardano-cli-test-lib} ^>= 10.15 , cardano-crypto-class ^>=2.2.3.2 , cardano-crypto-wrapper , cardano-git-rev ^>= 0.2.2 diff --git a/flake.lock b/flake.lock index 4d13bd65fc0..2e0f1c18726 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "CHaP": { "flake": false, "locked": { - "lastModified": 1764072073, - "narHash": "sha256-ZLlhdnWO8bP5gsbmUKg6U+3oxBX66vZUO6jyirAhgHo=", + "lastModified": 1769746903, + "narHash": "sha256-aP97gwy91CpecSSDa/BEsohQ7hv7kuovziuNikzRGTw=", "owner": "intersectmbo", "repo": "cardano-haskell-packages", - "rev": "be9725d16fb590998020914e0b71f41a23c50ec2", + "rev": "13b004164316511afb0d50be4fd0764da40a7a84", "type": "github" }, "original": { @@ -306,11 +306,11 @@ "hackageNix_2": { "flake": false, "locked": { - "lastModified": 1761265459, - "narHash": "sha256-7tsC/ZcNBJR1pXWdKsRoh/qlVDhCxb1Ukr7PVd2zieE=", + "lastModified": 1769184843, + "narHash": "sha256-jQ64H8jCGAX1ZDuHmJfWSYojZUuduIUU9RMLQVl0SkI=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "eb8e4d02528b4973cd09450bb62cf34997777226", + "rev": "4ea5205ba96ff9071cc490f34d1bdd101181e40a", "type": "github" }, "original": { From 22c073b1e1e8d63786e34af8955acfafbf143e83 Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Sat, 24 Jan 2026 01:35:46 +0100 Subject: [PATCH 3/4] Fix compilation errors --- bench/tx-generator/app/calibrate-script.hs | 2 +- .../tx-generator/src/Cardano/Benchmarking/Compiler.hs | 1 - .../tx-generator/src/Cardano/Benchmarking/LogTypes.hs | 1 - .../src/Cardano/Benchmarking/Script/Aeson.hs | 1 - .../src/Cardano/Benchmarking/Script/Types.hs | 1 - bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs | 1 - bench/tx-generator/src/Cardano/TxGenerator/Utils.hs | 1 - .../app/Cardano/Chairman/Commands/Run.hs | 1 - .../src/Cardano/Node/Configuration/NodeAddress.hs | 1 - cardano-node/src/Cardano/Node/Protocol/Byron.hs | 1 - cardano-node/src/Cardano/Node/Run.hs | 1 + cardano-node/src/Cardano/Node/TraceConstraints.hs | 1 + .../src/Cardano/Node/Tracing/Tracers/Consensus.hs | 10 +++++----- cardano-node/src/Cardano/Node/Types.hs | 1 - .../src/Cardano/Tracing/OrphanInstances/Consensus.hs | 6 +++--- cardano-node/src/Cardano/Tracing/Tracers.hs | 4 ++-- .../src/Testnet/Components/Configuration.hs | 1 - cardano-testnet/src/Testnet/Components/Query.hs | 1 - cardano-testnet/src/Testnet/Process/Cli/DRep.hs | 1 - cardano-testnet/src/Testnet/Property/Assert.hs | 1 - cardano-testnet/src/Testnet/Types.hs | 1 - .../Cardano/Testnet/Test/Cli/LeadershipSchedule.hs | 1 - .../Cardano/Testnet/Test/Cli/Plutus/CostCalculation.hs | 1 - .../Cardano/Testnet/Test/Cli/Query.hs | 1 - 24 files changed, 13 insertions(+), 29 deletions(-) diff --git a/bench/tx-generator/app/calibrate-script.hs b/bench/tx-generator/app/calibrate-script.hs index 209a5415771..d24d51f99ff 100644 --- a/bench/tx-generator/app/calibrate-script.hs +++ b/bench/tx-generator/app/calibrate-script.hs @@ -33,9 +33,9 @@ import Data.Char import Data.Function (on, (&)) import Data.List (nub, sort, transpose) import Data.List.Extra (split) + import Data.Map.Strict as Map (Map, empty, fromList, union) import Data.Maybe -import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import Numeric diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs b/bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs index 6881f9ab428..719819250b1 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Compiler.hs @@ -24,7 +24,6 @@ import Data.DList (DList) import qualified Data.DList as DL import Data.Functor ((<&>)) import Data.Maybe -import Data.Text (Text) import qualified Data.Text as Text data CompileError where diff --git a/bench/tx-generator/src/Cardano/Benchmarking/LogTypes.hs b/bench/tx-generator/src/Cardano/Benchmarking/LogTypes.hs index 32eb5c295dd..67e5fa75aac 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/LogTypes.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/LogTypes.hs @@ -48,7 +48,6 @@ import Prelude import qualified Codec.CBOR.Term as CBOR import qualified Control.Concurrent.Async as Async (Async) import qualified Control.Concurrent.STM as STM (TVar) -import Data.Text import Data.Time.Clock (DiffTime, NominalDiffTime) import GHC.Generics import qualified Network.Mux as Mux diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Script/Aeson.hs b/bench/tx-generator/src/Cardano/Benchmarking/Script/Aeson.hs index c05e0f64da3..409fa2097ff 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Script/Aeson.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Script/Aeson.hs @@ -24,7 +24,6 @@ import qualified Data.Attoparsec.ByteString as Atto import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS (lines) import qualified Data.ByteString.Lazy as BSL -import Data.Text (Text) import qualified Data.Yaml as Yaml (encode) import GHC.Generics (Generic) import System.Exit diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs b/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs index 0101a1dea41..08a2f63c8c8 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs @@ -51,7 +51,6 @@ import Prelude import Data.Function (on) import Data.List.NonEmpty -import Data.Text (Text) import GHC.Generics diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs b/bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs index a42f430aeb2..453a01217d3 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs @@ -46,7 +46,6 @@ import Data.Kind import Data.List (find) import qualified Data.Map.Strict as Map import Data.Maybe (fromMaybe) -import Data.Text (Text) import qualified Data.Text as Text import Data.Time.Clock import GHC.Generics diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Utils.hs b/bench/tx-generator/src/Cardano/TxGenerator/Utils.hs index a739808bccd..6565dbc1575 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Utils.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Utils.hs @@ -18,7 +18,6 @@ import qualified Cardano.Ledger.Coin as L import Cardano.TxGenerator.Types import Data.Maybe (fromJust) -import Data.Text (Text) import GHC.Stack diff --git a/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs b/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs index cb7cb7170e2..66b645adf46 100644 --- a/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs +++ b/cardano-node-chairman/app/Cardano/Chairman/Commands/Run.hs @@ -26,7 +26,6 @@ import Ouroboros.Consensus.Node.ProtocolInfo import Control.Monad.Class.MonadTime.SI (DiffTime) import Control.Tracer (Tracer (..), stdoutTracer) import Data.Monoid (Last (..)) -import Data.Text (Text) import qualified Data.Time.Clock as DTC import Options.Applicative import qualified Options.Applicative as Opt diff --git a/cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs b/cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs index afdadaa5dd3..e880575cfbe 100644 --- a/cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs +++ b/cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs @@ -37,7 +37,6 @@ import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPo import Data.Aeson (Value (..), object, withObject, (.:), (.=)) import Data.IP (IP (..), IPv4, IPv6) import qualified Data.IP as IP -import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import qualified Network.DNS as DNS (Domain) diff --git a/cardano-node/src/Cardano/Node/Protocol/Byron.hs b/cardano-node/src/Cardano/Node/Protocol/Byron.hs index 6342184fcf4..7b53ff28e4c 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Byron.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Byron.hs @@ -39,7 +39,6 @@ import qualified Ouroboros.Consensus.Cardano as Consensus import Control.Exception import qualified Data.ByteString.Lazy as LB import Data.Maybe (fromMaybe) -import Data.Text (Text) ------------------------------------------------------------------------------ diff --git a/cardano-node/src/Cardano/Node/Run.hs b/cardano-node/src/Cardano/Node/Run.hs index 2c87c34956f..e12a28be1d1 100644 --- a/cardano-node/src/Cardano/Node/Run.hs +++ b/cardano-node/src/Cardano/Node/Run.hs @@ -466,6 +466,7 @@ handleSimpleNode blockType runP tracers nc onKernel = do , rnTraceNTN = nodeToNodeTracers tracers , rnTraceNTC = nodeToClientTracers tracers , rnProtocolInfo = pInfo + , rnMempoolTimeoutConfig = Nothing -- read from config and use defaults if not provided , rnNodeKernelHook = \registry nodeKernel -> do -- set the initial block forging blockForging <- snd (Api.protocolInfo runP) (Consensus.kesAgentTracer $ consensusTracers tracers) diff --git a/cardano-node/src/Cardano/Node/TraceConstraints.hs b/cardano-node/src/Cardano/Node/TraceConstraints.hs index ec4b9f61034..41ff18840f6 100644 --- a/cardano-node/src/Cardano/Node/TraceConstraints.hs +++ b/cardano-node/src/Cardano/Node/TraceConstraints.hs @@ -1,6 +1,7 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE MonoLocalBinds #-} {-# OPTIONS_GHC -Wno-unused-imports #-} diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/Consensus.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/Consensus.hs index fa4e08f3da6..712f185e832 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/Consensus.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/Consensus.hs @@ -1254,7 +1254,7 @@ instance , "tx" .= forMachine dtal (txForgetValidated tx) , "mempoolSize" .= forMachine dtal mpSzAfter ] - forMachine dtal (TraceMempoolRejectedTx tx txApplyErr mpSz) = + forMachine dtal (TraceMempoolRejectedTx tx txApplyErr _ mpSz) = mconcat $ [ "kind" .= String "TraceMempoolRejectedTx" , "tx" .= forMachine dtal tx @@ -1311,7 +1311,7 @@ instance [ IntM "txsInMempool" (fromIntegral $ msNumTxs mpSz) , IntM "mempoolBytes" (fromIntegral . unByteSize32 . msNumBytes $ mpSz) ] - asMetrics (TraceMempoolRejectedTx _tx _txApplyErr mpSz) = + asMetrics (TraceMempoolRejectedTx _tx _txApplyErr _ mpSz) = [ IntM "txsInMempool" (fromIntegral $ msNumTxs mpSz) , IntM "mempoolBytes" (fromIntegral . unByteSize32 . msNumBytes $ mpSz) ] @@ -1520,7 +1520,7 @@ instance ( tx ~ GenTx blk , "mempoolHash" .= String (renderChainHash @blk (renderHeaderHash (Proxy @blk)) mpHash) , "mempoolSlot" .= toJSON (unSlotNo mpSlot) ] - forMachine _dtal (TraceForgedBlock slotNo _ blk _) = + forMachine _dtal (TraceForgedBlock slotNo _ blk _ _) = mconcat [ "kind" .= String "TraceForgedBlock" , "slot" .= toJSON (unSlotNo slotNo) @@ -1632,7 +1632,7 @@ instance ( tx ~ GenTx blk <> renderChainHash @blk (renderHeaderHash (Proxy @blk)) mpHash <> " ticked to slot " <> showT (unSlotNo mpSlot) - forHuman (TraceForgedBlock slotNo _ _ _) = + forHuman (TraceForgedBlock slotNo _ _ _ _) = "Forged block in slot " <> showT (unSlotNo slotNo) forHuman (TraceDidntAdoptBlock slotNo _) = "Didn't adopt forged block in slot " <> showT (unSlotNo slotNo) @@ -1690,7 +1690,7 @@ instance ( tx ~ GenTx blk [CounterM "Forge.node-is-leader" Nothing] asMetrics TraceForgeTickedLedgerState {} = [] asMetrics TraceForgingMempoolSnapshot {} = [] - asMetrics (TraceForgedBlock slot _ _ _) = + asMetrics (TraceForgedBlock slot _ _ _ _) = [IntM "forgedSlotLast" (fromIntegral $ unSlotNo slot), CounterM "Forge.forged" Nothing] asMetrics (TraceDidntAdoptBlock _slot _) = diff --git a/cardano-node/src/Cardano/Node/Types.hs b/cardano-node/src/Cardano/Node/Types.hs index b3c9109cb4c..321d038cdc1 100644 --- a/cardano-node/src/Cardano/Node/Types.hs +++ b/cardano-node/src/Cardano/Node/Types.hs @@ -55,7 +55,6 @@ import Data.ByteString (ByteString) import Data.Maybe (isJust) import Data.Monoid (Last (..)) import Data.String (IsString) -import Data.Text (Text) import qualified Data.Text as Text import Data.Typeable import Data.Word (Word16, Word8) diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs index e22cf83c3b7..e8ce3cc717d 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs @@ -479,7 +479,7 @@ instance ( tx ~ GenTx blk <> renderChainHash (Text.decodeLatin1 . toRawHash (Proxy @blk)) mpHash <> " ticked to slot " <> showT (unSlotNo mpSlot) - TraceForgedBlock slotNo _ _ _ -> const $ + TraceForgedBlock slotNo _ _ _ _ -> const $ "Forged block in slot " <> showT (unSlotNo slotNo) TraceDidntAdoptBlock slotNo _ -> const $ "Didn't adopt forged block in slot " <> showT (unSlotNo slotNo) @@ -1543,7 +1543,7 @@ instance ( ToObject (ApplyTxErr blk), ToObject (GenTx blk), , "tx" .= toObject verb (txForgetValidated tx) , "mempoolSize" .= toObject verb mpSzAfter ] - toObject verb (TraceMempoolRejectedTx tx txApplyErr mpSz) = + toObject verb (TraceMempoolRejectedTx tx txApplyErr _ mpSz) = mconcat $ [ "kind" .= String "TraceMempoolRejectedTx" , "tx" .= toObject verb tx @@ -1698,7 +1698,7 @@ instance ( RunNode blk , "mempoolHash" .= String (renderChainHash @blk (renderHeaderHash (Proxy @blk)) mpHash) , "mempoolSlot" .= toJSON (unSlotNo mpSlot) ] - toObject _verb (TraceForgedBlock slotNo _ blk _) = + toObject _verb (TraceForgedBlock slotNo _ blk _ _) = mconcat [ "kind" .= String "TraceForgedBlock" , "slot" .= toJSON (unSlotNo slotNo) diff --git a/cardano-node/src/Cardano/Tracing/Tracers.hs b/cardano-node/src/Cardano/Tracing/Tracers.hs index 7aaf9b03cb4..38a4134586e 100644 --- a/cardano-node/src/Cardano/Tracing/Tracers.hs +++ b/cardano-node/src/Cardano/Tracing/Tracers.hs @@ -1140,7 +1140,7 @@ teeForge' tr = LogValue "forgeTickedLedgerState" $ PureI $ fromIntegral $ unSlotNo slot Consensus.TraceForgingMempoolSnapshot slot _prevPt _mpHash _mpSlotNo -> LogValue "forgingMempoolSnapshot" $ PureI $ fromIntegral $ unSlotNo slot - Consensus.TraceForgedBlock slot _ _ _ -> + Consensus.TraceForgedBlock slot _ _ _ _ -> LogValue "forgedSlotLast" $ PureI $ fromIntegral $ unSlotNo slot Consensus.TraceDidntAdoptBlock slot _ -> LogValue "notAdoptedSlotLast" $ PureI $ fromIntegral $ unSlotNo slot @@ -1264,7 +1264,7 @@ mempoolMetricsTraceTransformer tr = Tracer $ \mempoolEvent -> do let tr' = appendName "metrics" tr (_n, tot_m) = case mempoolEvent of TraceMempoolAddedTx _tx0 _ tot0 -> (1, Just tot0) - TraceMempoolRejectedTx _tx0 _ tot0 -> (1, Just tot0) + TraceMempoolRejectedTx _tx0 _ _ tot0 -> (1, Just tot0) TraceMempoolRemoveTxs txs0 tot0 -> (length txs0, Just tot0) TraceMempoolManuallyRemovedTxs txs0 txs1 tot0 -> ( length txs0 + length txs1, Just tot0) TraceMempoolSynced _ -> (0, Nothing) diff --git a/cardano-testnet/src/Testnet/Components/Configuration.hs b/cardano-testnet/src/Testnet/Components/Configuration.hs index 1adbc7a813c..458cf839818 100644 --- a/cardano-testnet/src/Testnet/Components/Configuration.hs +++ b/cardano-testnet/src/Testnet/Components/Configuration.hs @@ -41,7 +41,6 @@ import Data.Aeson.Key hiding (fromString) import Data.Aeson.KeyMap hiding (map) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS -import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Time.Clock as DTC import Data.Word (Word64) diff --git a/cardano-testnet/src/Testnet/Components/Query.hs b/cardano-testnet/src/Testnet/Components/Query.hs index 394e0876bd2..8e42611e91b 100644 --- a/cardano-testnet/src/Testnet/Components/Query.hs +++ b/cardano-testnet/src/Testnet/Components/Query.hs @@ -69,7 +69,6 @@ import Data.Map.Strict (Map) import Data.Maybe import Data.Ord (Down (..)) import qualified Data.Set as Set -import Data.Text (Text) import qualified Data.Text as T import Data.Type.Equality import Data.Word (Word64) diff --git a/cardano-testnet/src/Testnet/Process/Cli/DRep.hs b/cardano-testnet/src/Testnet/Process/Cli/DRep.hs index 8c294f2479b..1cf7d570124 100644 --- a/cardano-testnet/src/Testnet/Process/Cli/DRep.hs +++ b/cardano-testnet/src/Testnet/Process/Cli/DRep.hs @@ -30,7 +30,6 @@ import Control.Monad.Catch (MonadCatch) import Control.Monad.Trans.Control (MonadBaseControl) import qualified Data.Aeson as Aeson import qualified Data.Aeson.Lens as AL -import Data.Text (Text) import qualified Data.Text as Text import Data.Typeable (Typeable) import Data.Word (Word16) diff --git a/cardano-testnet/src/Testnet/Property/Assert.hs b/cardano-testnet/src/Testnet/Property/Assert.hs index 800eb927884..6d0e12fa453 100644 --- a/cardano-testnet/src/Testnet/Property/Assert.hs +++ b/cardano-testnet/src/Testnet/Property/Assert.hs @@ -34,7 +34,6 @@ import Data.Maybe (mapMaybe) import qualified Data.Maybe as Maybe import Data.Set (Set) import qualified Data.Set as Set -import Data.Text (Text) import qualified Data.Time.Clock as DTC import Data.Type.Equality import Data.Word (Word8) diff --git a/cardano-testnet/src/Testnet/Types.hs b/cardano-testnet/src/Testnet/Types.hs index 700be30a088..07bfcf709fc 100644 --- a/cardano-testnet/src/Testnet/Types.hs +++ b/cardano-testnet/src/Testnet/Types.hs @@ -60,7 +60,6 @@ import qualified Data.Aeson as A import Data.List (intercalate) import Data.Maybe import Data.MonoTraversable (Element, MonoFunctor (..)) -import Data.Text (Text) import GHC.Exts (IsString (..)) import GHC.Generics (Generic) import qualified GHC.IO.Handle as IO diff --git a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/LeadershipSchedule.hs b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/LeadershipSchedule.hs index 914d265b342..605d21b115a 100644 --- a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/LeadershipSchedule.hs +++ b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/LeadershipSchedule.hs @@ -31,7 +31,6 @@ import qualified Data.IP as IP import Data.List ((\\)) import qualified Data.List as L import qualified Data.Map.Strict as Map -import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Time.Clock as DTC import qualified GHC.Stack as GHC diff --git a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Plutus/CostCalculation.hs b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Plutus/CostCalculation.hs index 27f8db29252..03bd819087d 100644 --- a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Plutus/CostCalculation.hs +++ b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Plutus/CostCalculation.hs @@ -27,7 +27,6 @@ import Data.Aeson.Types (Value (..), object) import Data.Bifunctor (first) import qualified Data.ByteString as BS import Data.Default.Class (Default (def)) -import Data.Text (Text) import qualified Data.Text as Text import Data.Text.Encoding (decodeLatin1) import qualified Data.Vector as Vector diff --git a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Query.hs b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Query.hs index a33862d4b25..a6fe593929b 100644 --- a/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Query.hs +++ b/cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Query.hs @@ -40,7 +40,6 @@ import Data.Default.Class import qualified Data.Map as Map import Data.Map.Strict (Map) import Data.String (IsString (fromString)) -import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Encoding as TL From 19e263892de1d0a1510ff70f466b48d5ddf4b05c Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Sat, 24 Jan 2026 02:30:56 +0100 Subject: [PATCH 4/4] Add parsing logic --- .../src/Cardano/Node/Configuration/POM.hs | 50 +++++++++++++++++++ cardano-node/src/Cardano/Node/Parsers.hs | 3 ++ cardano-node/src/Cardano/Node/Run.hs | 7 ++- cardano-node/test/Test/Cardano/Node/POM.hs | 9 ++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/cardano-node/src/Cardano/Node/Configuration/POM.hs b/cardano-node/src/Cardano/Node/Configuration/POM.hs index 4255c77d775..13f9052837d 100644 --- a/cardano-node/src/Cardano/Node/Configuration/POM.hs +++ b/cardano-node/src/Cardano/Node/Configuration/POM.hs @@ -140,6 +140,28 @@ data NodeConfiguration -- 'Ouroboros.Network.Protocol.ChainSync.Codec.ChainSyncTimeout' , ncChainSyncIdleTimeout :: TimeoutOverride + -- Mempool timeout configurations: + -- These configuration control a lightweight "defensive programming" + -- feature in the Mempool. + -- See documentation in @Ouroboros.Consensus.Mempool.API@ for more info + + -- | If the mempool takes longer than this to validate a tx, then it + -- discards the tx instead of adding it. + , ncMempoolTimeoutSoft :: DiffTime + + -- | If the mempool takes longer than this to validate a tx, then it + -- disconnects from the peer. + -- + -- WARNING: if this is less than 'mempoolTimeoutSoft', then + -- 'mempoolTimeoutSoft' is irrelevant. If it's equal or just barely larger, + -- then the soft/hard distinction will likely be unreliable. + , ncMempoolTimeoutHard :: DiffTime + + -- | If the mempool takes longer than this cumulatively to + -- validate when each entered the mempool, then the mempool is at + -- capacity, ie it's full, ie no tx can be added. + , ncMempoolTimeoutCapacity :: DiffTime + -- | Node AcceptedConnectionsLimit , ncAcceptedConnectionsLimit :: !AcceptedConnectionsLimit @@ -237,6 +259,11 @@ data PartialNodeConfiguration , pncChainSyncIdleTimeout :: !(Last DiffTime) + -- Mempool timeout configurations: + , pncMempoolTimeoutSoft :: !(Last DiffTime) + , pncMempoolTimeoutHard :: !(Last DiffTime) + , pncMempoolTimeoutCapacity :: !(Last DiffTime) + -- AcceptedConnectionsLimit , pncAcceptedConnectionsLimit :: !(Last AcceptedConnectionsLimit) @@ -370,6 +397,10 @@ instance FromJSON PartialNodeConfiguration where pncChainSyncIdleTimeout <- Last <$> v .:? "ChainSyncIdleTimeout" + pncMempoolTimeoutSoft <- Last <$> v .:? "MempoolTimeoutSoft" + pncMempoolTimeoutHard <- Last <$> v .:? "MempoolTimeoutHard" + pncMempoolTimeoutCapacity <- Last <$> v .:? "MempoolTimeoutCapacity" + -- Peer Sharing pncPeerSharing <- Last <$> v .:? "PeerSharing" @@ -404,6 +435,9 @@ instance FromJSON PartialNodeConfiguration where , pncProtocolIdleTimeout , pncTimeWaitTimeout , pncChainSyncIdleTimeout + , pncMempoolTimeoutSoft + , pncMempoolTimeoutHard + , pncMempoolTimeoutCapacity , pncEgressPollInterval , pncAcceptedConnectionsLimit , pncDeadlineTargetOfRootPeers @@ -658,6 +692,9 @@ defaultPartialNodeConfiguration = , pncAcceptedConnectionsLimit = Last (Just Ouroboros.defaultAcceptedConnectionsLimit) -- https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-Diffusion-Configuration.html#v:defaultAcceptedConnectionsLimit , pncChainSyncIdleTimeout = mempty + , pncMempoolTimeoutSoft = mempty + , pncMempoolTimeoutHard = mempty + , pncMempoolTimeoutCapacity = mempty -- these targets are set properly in makeNodeConfiguration below , pncDeadlineTargetOfRootPeers = mempty @@ -780,6 +817,16 @@ makeNodeConfiguration pnc = do $ getLast $ pncChainSyncIdleTimeout pnc + let mempoolTimeouts = ( getLast (pncMempoolTimeoutSoft pnc) + , getLast (pncMempoolTimeoutHard pnc) + , getLast (pncMempoolTimeoutCapacity pnc) + ) + (ncMempoolTimeoutSoft, ncMempoolTimeoutHard, ncMempoolTimeoutCapacity) <- + case mempoolTimeouts of + (Just s, Just h, Just c) -> pure (s, h, c) + (Nothing, Nothing, Nothing) -> pure (1, 1.5, 5) + _ -> Left "Mempool timeouts must be either all set or all unset" + let ncPeerSharing = case pncPeerSharing pnc of Last Nothing -> @@ -851,6 +898,9 @@ makeNodeConfiguration pnc = do , ncProtocolIdleTimeout , ncTimeWaitTimeout , ncChainSyncIdleTimeout + , ncMempoolTimeoutSoft + , ncMempoolTimeoutHard + , ncMempoolTimeoutCapacity , ncEgressPollInterval , ncAcceptedConnectionsLimit , ncDeadlineTargetOfRootPeers diff --git a/cardano-node/src/Cardano/Node/Parsers.hs b/cardano-node/src/Cardano/Node/Parsers.hs index 077e9675b62..b6ec0c7441b 100644 --- a/cardano-node/src/Cardano/Node/Parsers.hs +++ b/cardano-node/src/Cardano/Node/Parsers.hs @@ -121,6 +121,9 @@ nodeRunParser = do , pncTimeWaitTimeout = mempty , pncEgressPollInterval = mempty , pncChainSyncIdleTimeout = mempty + , pncMempoolTimeoutSoft = mempty + , pncMempoolTimeoutHard = mempty + , pncMempoolTimeoutCapacity = mempty , pncAcceptedConnectionsLimit = mempty , pncDeadlineTargetOfRootPeers = mempty , pncDeadlineTargetOfKnownPeers = mempty diff --git a/cardano-node/src/Cardano/Node/Run.hs b/cardano-node/src/Cardano/Node/Run.hs index e12a28be1d1..edc43f58078 100644 --- a/cardano-node/src/Cardano/Node/Run.hs +++ b/cardano-node/src/Cardano/Node/Run.hs @@ -166,6 +166,7 @@ import System.Win32.File import Paths_cardano_node (version) import Paths_cardano_node (version) +import Ouroboros.Consensus.Mempool (MempoolTimeoutConfig(..)) {- HLINT ignore "Fuse concatMap/map" -} {- HLINT ignore "Redundant <$>" -} @@ -466,7 +467,11 @@ handleSimpleNode blockType runP tracers nc onKernel = do , rnTraceNTN = nodeToNodeTracers tracers , rnTraceNTC = nodeToClientTracers tracers , rnProtocolInfo = pInfo - , rnMempoolTimeoutConfig = Nothing -- read from config and use defaults if not provided + , rnMempoolTimeoutConfig = Just $ MempoolTimeoutConfig + { mempoolTimeoutSoft = ncMempoolTimeoutSoft nc + , mempoolTimeoutHard = ncMempoolTimeoutHard nc + , mempoolTimeoutCapacity = ncMempoolTimeoutCapacity nc + } , rnNodeKernelHook = \registry nodeKernel -> do -- set the initial block forging blockForging <- snd (Api.protocolInfo runP) (Consensus.kesAgentTracer $ consensusTracers tracers) diff --git a/cardano-node/test/Test/Cardano/Node/POM.hs b/cardano-node/test/Test/Cardano/Node/POM.hs index cfe7fd8be2a..d4de440fbd7 100644 --- a/cardano-node/test/Test/Cardano/Node/POM.hs +++ b/cardano-node/test/Test/Cardano/Node/POM.hs @@ -149,6 +149,9 @@ testPartialYamlConfig = , pncProtocolIdleTimeout = mempty , pncTimeWaitTimeout = mempty , pncChainSyncIdleTimeout = mempty + , pncMempoolTimeoutSoft = mempty + , pncMempoolTimeoutHard = mempty + , pncMempoolTimeoutCapacity = mempty , pncAcceptedConnectionsLimit = mempty , pncDeadlineTargetOfRootPeers = mempty , pncDeadlineTargetOfKnownPeers = mempty @@ -199,6 +202,9 @@ testPartialCliConfig = , pncProtocolIdleTimeout = mempty , pncTimeWaitTimeout = mempty , pncChainSyncIdleTimeout = mempty + , pncMempoolTimeoutSoft = mempty + , pncMempoolTimeoutHard = mempty + , pncMempoolTimeoutCapacity = mempty , pncAcceptedConnectionsLimit = mempty , pncDeadlineTargetOfRootPeers = mempty , pncDeadlineTargetOfKnownPeers = mempty @@ -251,6 +257,9 @@ eExpectedConfig = do , ncProtocolIdleTimeout = 5 , ncTimeWaitTimeout = 60 , ncChainSyncIdleTimeout = NoTimeoutOverride + , ncMempoolTimeoutSoft = 1.0 + , ncMempoolTimeoutHard = 1.5 + , ncMempoolTimeoutCapacity = 5.0 , ncAcceptedConnectionsLimit = AcceptedConnectionsLimit { acceptedConnectionsHardLimit = 512