diff --git a/cabal.project b/cabal.project index b3f83016..bf7f9fd8 100644 --- a/cabal.project +++ b/cabal.project @@ -15,7 +15,7 @@ repository cardano-haskell-packages -- repeat the index-state for hackage to work around haskell.nix parsing limitation index-state: -- Bump this if you need newer packages from Hackage - , hackage.haskell.org 2026-05-13T07:31:22Z + , hackage.haskell.org 2026-06-20T00:51:00Z -- Bump this if you need newer packages from CHaP , cardano-haskell-packages 2026-05-11T20:15:43Z @@ -53,6 +53,7 @@ source-repository-package subdir: network-mux cardano-diffusion ouroboros-network + acts-generic source-repository-package type: git @@ -60,13 +61,6 @@ source-repository-package tag: ec9df6ee1d7ab918e75219107fc17e1b2cf1a0e9 --sha256: sha256-c+yGPftvlas2CcnFLUPPqjnitz5yTu/Qud5LaSMyY34= --- https://github.com/bgamari/monoidal-containers/pull/112 -source-repository-package - type: git - location: https://github.com/coot/monoidal-containers - tag: 8319c34e260c7b44adaf0ac04074b3e37e510cea - --sha256: sha256-HkQC2Hb1OAyN8mI2BPcIylcUYF0Mts4DrffJ7Fkkh6Q= - constraints: semialign >= 1.4, validation < 1.2 allow-newer: hedgehog-quickcheck:QuickCheck, diff --git a/dmq-node/app/Main.hs b/dmq-node/app/Main.hs index 3fb417f2..3d62ab5d 100644 --- a/dmq-node/app/Main.hs +++ b/dmq-node/app/Main.hs @@ -52,7 +52,6 @@ import DMQ.Diffusion.PeerSelectionPolicy (policy) import DMQ.Genesis import DMQ.Handlers.TopLevel (toplevelExceptionHandler) import DMQ.NodeToClient qualified as NtC -import DMQ.NodeToClient.LocalStateQueryClient import DMQ.NodeToNode (NodeToNodeVersion, dmqCodecs, dmqLimitsAndTimeouts, ntnApps) import DMQ.Policy qualified as Policy @@ -97,10 +96,8 @@ runDMQ commandLineConfig = do dmqcTopologyFile = I topologyFile, dmqcCardanoNodeSocket = I socketPath, dmqcVersion = I version, - dmqcLedgerPeers = I ledgerPeers, dmqcShelleyGenesisFile = I genesisFile, dmqcShelleyGenesisHash = I genesisHash - } = fromRight mempty config' <> commandLineConfig `act` @@ -128,7 +125,6 @@ runDMQ commandLineConfig = do ( dmqTracers@DMQTracers { dmqStartupTracer, - localStateQueryClientTracer, sigValidationTracer, localSigValidationTracer, cardanoNodeHandshakeTracer @@ -179,19 +175,13 @@ runDMQ commandLineConfig = do -- TODO: this might not work, since `ouroboros-network` creates its own IO Completion Port. withIOManager \iocp -> do - let localSnocket' = localSnocket iocp - mkStakePoolMonitor = connectToCardanoNode - localStateQueryClientTracer - ledgerPeers - localSnocket' - socketPath - withNodeKernel @StandardCrypto dmqTracers + (localSnocket iocp) + makeLocalBearer dmqConfig shelleyGenesis - psRng - mkStakePoolMonitor $ \nodeKernel -> do + psRng $ \nodeKernel -> do dmqDiffusionConfiguration <- mkDiffusionConfiguration dmqConfig nt nodeKernel.stakePools.ledgerBigPeersVar diff --git a/dmq-node/changelog.d/20260520_161705_coot_ouroboros_network_update.md b/dmq-node/changelog.d/20260520_161705_coot_ouroboros_network_update.md new file mode 100644 index 00000000..eb8017b7 --- /dev/null +++ b/dmq-node/changelog.d/20260520_161705_coot_ouroboros_network_update.md @@ -0,0 +1,31 @@ + + +### Breaking + +- Using `KeepAliveRegistry` instead of `FetchClientRegistry` introduced in + a recent `ouroboros-network` PR. The `fetchClientRegistry` field of + `NodeKernel` was replaced with `keepAliveRegistry` field. + +### Non-Breaking + +- Added `PrettyShow` instances for + - `NodeToNodeVersion` + - `NodeToNodeVersionData` + - `NodeToClientVersion` + - `NodeToClientVersionData` +- Signature validation changed, we're no longer using the `mark set`, pools + with no stake will be able to mint signatures as long as they have non zero + stake in the `set set`. + + + diff --git a/dmq-node/dmq-node.cabal b/dmq-node/dmq-node.cabal index 1b778aba..1639992b 100644 --- a/dmq-node/dmq-node.cabal +++ b/dmq-node/dmq-node.cabal @@ -112,6 +112,7 @@ library cardano-ledger-byron, cardano-ledger-core, cardano-ledger-shelley, + cardano-protocol-tpraos, cardano-slotting, cardano-strict-containers, cborg >=0.2.1 && <0.3, diff --git a/dmq-node/src/DMQ/Diffusion/NodeKernel.hs b/dmq-node/src/DMQ/Diffusion/NodeKernel.hs index 6fc125b5..17d5f4b0 100644 --- a/dmq-node/src/DMQ/Diffusion/NodeKernel.hs +++ b/dmq-node/src/DMQ/Diffusion/NodeKernel.hs @@ -1,15 +1,19 @@ -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE PackageImports #-} -{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE PackageImports #-} +{-# LANGUAGE RankNTypes #-} module DMQ.Diffusion.NodeKernel ( module DMQ.Diffusion.NodeKernel.Types , withNodeKernel ) where +import Control.Applicative (Alternative) import Control.Concurrent.Class.MonadMVar import Control.Concurrent.Class.MonadSTM.Strict import Control.Monad.Class.MonadAsync +import Control.Monad.Class.MonadST import Control.Monad.Class.MonadThrow import Control.Monad.Class.MonadTime.SI import Control.Monad.Class.MonadTimer.SI @@ -18,22 +22,44 @@ import "contra-tracer" Control.Tracer (nullTracer) import Data.Function (on) import Data.Hashable import Data.Map.Strict qualified as Map +import Data.Proxy import Data.Sequence (Seq) import Data.Sequence qualified as Seq import Data.Set (Set) import Data.Set qualified as Set import Data.Time.Clock.POSIX (POSIXTime) import Data.Time.Clock.POSIX qualified as Time -import Data.Void (Void) +import Data.Void (Void, absurd) import System.Random (StdGen) import System.Random qualified as Random +import Network.Mux qualified as Mx + +import Cardano.Chain.Slotting (EpochSlots (..)) +import Cardano.Network.NodeToClient qualified as Cardano.NtoC +import Cardano.Protocol.Crypto qualified as Cardano (StandardCrypto) + +import Ouroboros.Consensus.Cardano.Block (CardanoBlock) +import Ouroboros.Consensus.Cardano.Node +import Ouroboros.Consensus.Network.NodeToClient +import Ouroboros.Consensus.Node.NetworkProtocolVersion +import Ouroboros.Consensus.Node.ProtocolInfo + +import Ouroboros.Network.Handshake.Queryable (Queryable (..)) import Ouroboros.Network.KeepAlive (newKeepAliveRegistry) -import Ouroboros.Network.Magic (NetworkMagic (..)) +import Ouroboros.Network.Mux qualified as Mx import Ouroboros.Network.PeerSelection.Governor.Types (makePublicPeerSelectionStateVar) import Ouroboros.Network.PeerSharing (newPeerSharingAPI, newPeerSharingRegistry, ps_POLICY_PEER_SHARE_MAX_PEERS, ps_POLICY_PEER_SHARE_STICKY_TIME) +import Ouroboros.Network.Protocol.Handshake (Acceptable (..)) +import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionDataCodec, + noTimeLimitsHandshake) +import Ouroboros.Network.Protocol.LocalStateQuery.Client +import Ouroboros.Network.Protocol.LocalStateQuery.Type +import Ouroboros.Network.Snocket (Snocket, localAddressFromPath) +import Ouroboros.Network.Socket (ConnectToArgs (..), + HandshakeCallbacks (HandshakeCallbacks), connectToNode) import Ouroboros.Network.TxSubmission.Inbound.V2 import Ouroboros.Network.TxSubmission.Mempool.Simple (Mempool (..), MempoolSeq (..), WithIndex (..)) @@ -43,10 +69,12 @@ import DMQ.Configuration import DMQ.Diffusion.NodeKernel.Types import DMQ.Diffusion.PeerSelection.PeerMetric (mkPeerMetric) import DMQ.Genesis +import DMQ.NodeToClient.LocalStateQueryClient import DMQ.Policy qualified as Policy import DMQ.Protocol.SigSubmission.Type (Sig (sigExpiresAt, sigId), SigId) import DMQ.Tracer + newNodeKernel :: forall crypto ntnAddr m. ( MonadLabelledSTM m , MonadMVar m @@ -115,32 +143,45 @@ newNodeKernel rng ShelleyGenesis {sgMaxKESEvolutions} = do withNodeKernel :: forall crypto ntnAddr ntcAddr m a. - ( MonadAsync m - , MonadFork m - , MonadDelay m - , MonadLabelledSTM m - , MonadMask m - , MonadMVar m - , MonadTime m + ( Alternative (STM m) + , MonadAsync m + , MonadEvaluate m + , MonadFork m + , MonadDelay m + , MonadLabelledSTM m + , MonadMask m + , MonadMVar m + , Mx.MonadReadBuffer m + , MonadST m + , MonadThrow (STM m) + , MonadTime m + , MonadTimer m , Ord ntnAddr , Hashable ntnAddr ) => DMQTracers crypto ntnAddr ntcAddr m + -> Snocket m Cardano.NtoC.LocalSocket LocalAddress + -> Mx.MakeBearer m Cardano.NtoC.LocalSocket -> Configuration -> ShelleyGenesis -> StdGen - -> (NetworkMagic -> NodeKernel crypto ntnAddr m -> m (Either SomeException Void)) -> (NodeKernel crypto ntnAddr m -> m a) -- ^ as soon as the callback exits the `mempoolWorker` and all -- decision logic threads will be killed -> m a -withNodeKernel DMQTracers { sigSubmissionLogicTracer } +withNodeKernel DMQTracers { sigSubmissionLogicTracer, + localStateQueryClientTracer + } + localSnocket + mkLocalBearer Configuration { - dmqcCardanoNetworkMagic = I networkMagic + dmqcCardanoNetworkMagic = I networkMagic, + dmqcCardanoNodeSocket = I cardanoNodeSocketPath, + dmqcLedgerPeers = I ledgerPeers } shelleyGenesis rng - mkStakePoolMonitor k = do + k = do nodeKernel@NodeKernel { mempool, sigChannelVar, sigSharedTxStateVar @@ -155,11 +196,77 @@ withNodeKernel DMQTracers { sigSubmissionLogicTracer } sigChannelVar sigSharedTxStateVar) $ \sigLogicThread -> - withAsync (mkStakePoolMonitor networkMagic nodeKernel) \spmAid -> do + withAsync (connectToCardanoNode nodeKernel) \spmAid -> do link mempoolThread link sigLogicThread link spmAid k nodeKernel + where + connectToCardanoNode :: NodeKernel crypto ntnAddr m + -> m (Either SomeException Void) + connectToCardanoNode nodeKernel = + fmap fn <$> + connectToNode + localSnocket + mkLocalBearer + ConnectToArgs { + ctaHandshakeCodec = Cardano.NtoC.nodeToClientHandshakeCodec, + ctaHandshakeTimeLimits = noTimeLimitsHandshake, + ctaVersionDataCodec = cborTermVersionDataCodec Cardano.NtoC.nodeToClientCodecCBORTerm, + ctaConnectTracers = Cardano.NtoC.nullNetworkConnectTracers, --debuggingNetworkConnectTracers, + ctaHandshakeCallbacks = HandshakeCallbacks acceptableVersion queryVersion + } + (\_ -> return ()) + (Cardano.NtoC.combineVersions + [ Cardano.NtoC.simpleSingletonVersions + version + Cardano.NtoC.NodeToClientVersionData { + Cardano.NtoC.networkMagic + , Cardano.NtoC.query = False + } + \_version -> + Mx.OuroborosApplication + [ Mx.MiniProtocol + { Mx.miniProtocolNum = Mx.MiniProtocolNum 7 + , Mx.miniProtocolStart = Mx.StartEagerly + , Mx.miniProtocolLimits = + Mx.MiniProtocolLimits + { Mx.maximumIngressQueue = 0xffffffff + } + , Mx.miniProtocolRun = + Mx.InitiatorProtocolOnly + . Mx.mkMiniProtocolCbFromPeerSt + . const + $ ( nullTracer -- TODO: add tracer + , cStateQueryCodec + , StateIdle + , localStateQueryClientPeer $ + cardanoLocalStateQueryClient + localStateQueryClientTracer + ledgerPeers + (stakePools nodeKernel) + (readinessVar nodeKernel) + ) + } + ] + | version <- [minBound..maxBound] + , let -- NOTE: the query protocol is running using + -- `Cardano.StandardCrypto`, while `dmq-node` is using + -- `StandardCrypto` defined in `kes-agent-krypto`. A priori + -- cryptography could differ but it shouldn't be a problem. We + -- are querying + supportedVersionMap = + supportedNodeToClientVersions (Proxy :: Proxy (CardanoBlock Cardano.StandardCrypto)) + blk = supportedVersionMap Map.! version + Codecs {cStateQueryCodec} = + clientCodecs (pClientInfoCodecConfig . protocolClientInfoCardano $ EpochSlots 21600) + blk version + ]) + Nothing + (localAddressFromPath cardanoNodeSocketPath) + where + fn :: forall x. Either x Void -> x + fn = either id absurd mempoolWorker :: forall crypto m. diff --git a/dmq-node/src/DMQ/NodeToClient/LocalStateQueryClient.hs b/dmq-node/src/DMQ/NodeToClient/LocalStateQueryClient.hs index 7eb6c905..9eb64aa9 100644 --- a/dmq-node/src/DMQ/NodeToClient/LocalStateQueryClient.hs +++ b/dmq-node/src/DMQ/NodeToClient/LocalStateQueryClient.hs @@ -5,9 +5,9 @@ module DMQ.NodeToClient.LocalStateQueryClient ( Readiness (..) + , CardanoLocalStateQueryClient , TraceLocalStateQueryClient (..) - , cardanoClient - , connectToCardanoNode + , cardanoLocalStateQueryClient ) where import Control.Concurrent.Class.MonadSTM.Strict @@ -16,38 +16,28 @@ import Control.Monad.Class.MonadThrow import Control.Monad.Class.MonadTime.SI import Control.Monad.Class.MonadTimer.SI import Control.Monad.Trans.Except -import "contra-tracer" Control.Tracer (Tracer, nullTracer, traceWith) +import "contra-tracer" Control.Tracer (Tracer, traceWith) import Data.Functor ((<&>)) import Data.List.NonEmpty qualified as NonEmpty -import Data.Map.Strict qualified as Map -import Data.Proxy import Data.Void -import Cardano.Chain.Slotting (EpochSlots (..)) import Cardano.Ledger.Api.State.Query (StakeSnapshots (..)) -import Cardano.Network.NodeToClient import Cardano.Network.PeerSelection (LedgerPeerSnapshot (..), LedgerRelayAccessPoint (..), SingLedgerPeersKind (..)) import Cardano.Slotting.EpochInfo.API import Cardano.Slotting.Time -import DMQ.Diffusion.NodeKernel +import DMQ.Diffusion.NodeKernel.Types (Readiness (..), StakePools (..)) + import Ouroboros.Consensus.Cardano.Block -import Ouroboros.Consensus.Cardano.Node import Ouroboros.Consensus.HardFork.Combinator.Ledger.Query import Ouroboros.Consensus.HardFork.History.EpochInfo (interpreterToEpochInfo) import Ouroboros.Consensus.Ledger.Query (Query (..)) -import Ouroboros.Consensus.Network.NodeToClient -import Ouroboros.Consensus.Node.NetworkProtocolVersion -import Ouroboros.Consensus.Node.ProtocolInfo import Ouroboros.Consensus.Shelley.Ledger.Query import Ouroboros.Consensus.Shelley.Ledger.SupportsProtocol () import Ouroboros.Network.Block -import Ouroboros.Network.Magic -import Ouroboros.Network.Mux qualified as Mx import Ouroboros.Network.PeerSelection.LedgerPeers (LedgerPeersKind (..), - accumulateBigLedgerStake) -import Ouroboros.Network.PeerSelection.LedgerPeers.Type (RawBlockHash) + RawBlockHash, accumulateBigLedgerStake) import Ouroboros.Network.Point (Block (..)) import Ouroboros.Network.Protocol.LocalStateQuery.Client import Ouroboros.Network.Protocol.LocalStateQuery.Type @@ -59,23 +49,51 @@ data QueryError = UnsupportedEra instance Exception QueryError where --- | Connect the dmq node to cardano node via local state query protocol and --- update the node kernel with stake pool data necessary to perform mithril --- signature validation +-- +-- Type aliases +-- + +-- | `LocalStateQuery` using `CardanoBlock` +type CardanoLocalStateQueryClient crypto m a = + LocalStateQueryClient (CardanoBlock crypto) + (Point (CardanoBlock crypto)) + (Query (CardanoBlock crypto)) m Void + +-- | `ClientStAcuiring` using `CardanoBlock` +type CardanoClientStAcquiring crypto m a = + ClientStAcquiring (CardanoBlock crypto) (Point (CardanoBlock crypto)) (Query (CardanoBlock crypto)) m a + +-- | `ClientStAcuired` using `CardanoBlock` +type CardanoClientStAcquired crypto m a = + ClientStAcquired (CardanoBlock crypto) (Point (CardanoBlock crypto)) (Query (CardanoBlock crypto)) m a + +-- | `ClientStQuerying` using `CardanoBlock` +type CardanoClientStQuerying crypto m a b = + ClientStQuerying (CardanoBlock crypto) (Point (CardanoBlock crypto)) (Query (CardanoBlock crypto)) m a b + + +-- | Local state query client which queries cardano node for +-- +-- * stake pool data (for signature validation) +-- * ledger peers (for peer selection) -- -- NOTE: we are querying using VolatileTip, e.g. for stake snapshot this -- means that the mark set should not be trusted as it might be different -- on different forks. -- -cardanoClient - :: forall block query point crypto m. (MonadDelay m, MonadSTM m, MonadThrow m, MonadTime m) - => (block ~ CardanoBlock crypto, query ~ Query block, point ~ Point block) +cardanoLocalStateQueryClient + :: forall crypto m. + ( MonadDelay m + , MonadSTM m + , MonadThrow m + , MonadTime m + ) => Tracer m TraceLocalStateQueryClient -> Bool -- ^ use ledger peers -> StakePools m -> StrictTVar m Readiness -- ^ from node kernel - -> LocalStateQueryClient (CardanoBlock crypto) (Point block) (Query block) m Void -cardanoClient tracer ledgerPeers + -> CardanoLocalStateQueryClient crypto m Void +cardanoLocalStateQueryClient tracer ledgerPeers StakePools { stakePoolsVar, ledgerPeersVar, @@ -88,7 +106,7 @@ cardanoClient tracer ledgerPeers traceWith tracer $ Acquiring mSystemStart pure $ SendMsgAcquire VolatileTip acquire where - acquire :: ClientStAcquiring block point query m Void + acquire :: CardanoClientStAcquiring crypto m Void acquire = ClientStAcquiring { recvMsgAcquired = let epochQry systemStart = pure $ @@ -104,8 +122,8 @@ cardanoClient tracer ledgerPeers } wrappingMismatch :: forall err r. - (r -> m (ClientStAcquired block point query m Void)) - -> ClientStQuerying block point query m Void (Either err r) + (r -> m (CardanoClientStAcquired crypto m Void)) + -> CardanoClientStQuerying crypto m Void (Either err r) wrappingMismatch k = ClientStQuerying $ either (const . throwIO . userError $ "mismatch era info") k @@ -139,12 +157,7 @@ cardanoClient tracer ledgerPeers :: SystemStart -> UTCTime -- ^ next epoch - -> ClientStAcquired - (CardanoBlock crypto) - (Point (CardanoBlock crypto)) - (Query (CardanoBlock crypto)) - m - Void + -> CardanoClientStAcquired crypto m Void queryCurrentEra systemStart nextEpoch = SendMsgQuery (BlockQuery (QueryHardFork GetCurrentEra)) $ ClientStQuerying $ \era -> queryStakeSnapshots systemStart nextEpoch era @@ -155,12 +168,7 @@ cardanoClient tracer ledgerPeers -> UTCTime -- ^ next epoch -> EraIndex (CardanoEras crypto) - -> m (ClientStAcquired - (CardanoBlock crypto) - (Point (CardanoBlock crypto)) - (Query (CardanoBlock crypto)) - m - Void) + -> m (CardanoClientStAcquired crypto m Void) queryStakeSnapshots systemStart nextEpoch era = case era of EraByron{} -> throwIO UnsupportedEra @@ -181,12 +189,7 @@ cardanoClient tracer ledgerPeers where handleStakeSnapshots :: StakeSnapshots - -> m (ClientStAcquired - (CardanoBlock crypto) - (Point (CardanoBlock crypto)) - (Query (CardanoBlock crypto)) - m - Void) + -> m (CardanoClientStAcquired crypto m Void) handleStakeSnapshots StakeSnapshots { ssStakeSnapshots } = do atomically do writeTVar stakePoolsVar ssStakeSnapshots @@ -206,12 +209,7 @@ cardanoClient tracer ledgerPeers :: SystemStart -> UTCTime -- ^ next epoch - -> ClientStAcquired - (CardanoBlock crypto) - (Point (CardanoBlock crypto)) - (Query (CardanoBlock crypto)) - m - Void + -> CardanoClientStAcquired crypto m Void queryLedgerPeers systemStart nextEpoch = SendMsgQuery (BlockQuery . QueryIfCurrentConway $ GetLedgerPeerSnapshot SingAllLedgerPeers) $ wrappingMismatch handleLedgerPeers @@ -262,12 +260,7 @@ cardanoClient tracer ledgerPeers release :: SystemStart -> UTCTime -- ^ next epoch - -> ClientStAcquired - (CardanoBlock crypto) - (Point (CardanoBlock crypto)) - (Query (CardanoBlock crypto)) - m - Void + -> CardanoClientStAcquired crypto m Void release systemStart nextEpoch = SendMsgRelease do toNextEpoch <- diffUTCTime nextEpoch <$> getCurrentTime let toNextEpoch' :: DiffTime @@ -275,54 +268,3 @@ cardanoClient tracer ledgerPeers traceWith tracer $ NextEpoch nextEpoch toNextEpoch' threadDelay toNextEpoch' idle $ Just systemStart - - -connectToCardanoNode :: Tracer IO TraceLocalStateQueryClient - -> Bool -- ^ use ledger peers - -> LocalSnocket - -> FilePath - -> NetworkMagic - -> NodeKernel crypto ntnAddr IO - -> IO (Either SomeException Void) -connectToCardanoNode tracer ledgerPeers localSnocket' snocketPath networkMagic nodeKernel = - connectTo - localSnocket' - nullNetworkConnectTracers --debuggingNetworkConnectTracers - (combineVersions - [ simpleSingletonVersions - version - NodeToClientVersionData { - networkMagic - , query = False - } - \_version -> - Mx.OuroborosApplication - [ Mx.MiniProtocol - { miniProtocolNum = Mx.MiniProtocolNum 7 - , miniProtocolStart = Mx.StartEagerly - , miniProtocolLimits = - Mx.MiniProtocolLimits - { maximumIngressQueue = 0xffffffff - } - , miniProtocolRun = - Mx.InitiatorProtocolOnly - . Mx.mkMiniProtocolCbFromPeerSt - . const - $ ( nullTracer -- TODO: add tracer - , cStateQueryCodec - , StateIdle - , localStateQueryClientPeer - $ cardanoClient tracer - ledgerPeers - (stakePools nodeKernel) - (readinessVar nodeKernel) - ) - } - ] - | version <- [minBound..maxBound] - , let supportedVersionMap = supportedNodeToClientVersions (Proxy :: Proxy (CardanoBlock StandardCrypto)) - blk = supportedVersionMap Map.! version - Codecs {cStateQueryCodec} = - clientCodecs (pClientInfoCodecConfig . protocolClientInfoCardano $ EpochSlots 21600) blk version - ]) - snocketPath diff --git a/dmq-node/src/DMQ/Policy.hs b/dmq-node/src/DMQ/Policy.hs index 25c83e5f..39891d2f 100644 --- a/dmq-node/src/DMQ/Policy.hs +++ b/dmq-node/src/DMQ/Policy.hs @@ -3,7 +3,7 @@ module DMQ.Policy , sigSubmissionIngressLimit , peerMetricConfiguration , maxSigSize - , maxSigsInflight + , maxSigIdsInflight ) where import DMQ.Diffusion.PeerSelection.PeerMetric (PeerMetricConfiguration (..)) @@ -18,7 +18,7 @@ import Ouroboros.Network.TxSubmission.Inbound.V2 maxSigSize :: SizeInBytes maxSigSize = 2800 --- | Maximum numbers signatures in-flight per peer. +-- | Maximum numbers signature id's in-flight per peer. -- -- NOTE: it is used by: -- * `sigDecisionPolicy` @@ -31,8 +31,8 @@ maxSigSize = 2800 -- protocol version. -- -- TODO: make it configurable -maxSigsInflight :: NumTxIdsToReq -maxSigsInflight = 33 +maxSigIdsInflight :: NumTxIdsToReq +maxSigIdsInflight = 33 -- | The `TxDecisionPolicy` used by `SigSubmission`. -- @@ -46,9 +46,9 @@ maxSigsInflight = 33 -- sigDecisionPolicy :: TxDecisionPolicy sigDecisionPolicy = TxDecisionPolicy { - maxNumTxIdsToRequest = maxSigsInflight, - maxUnacknowledgedTxIds = 4 * maxSigsInflight, - txsSizeInflightPerPeer = maxSigSize * fromIntegral maxSigsInflight, + maxNumTxIdsToRequest = maxSigIdsInflight, + maxUnacknowledgedTxIds = 4 * maxSigIdsInflight, + txsSizeInflightPerPeer = maxSigSize * fromIntegral maxSigIdsInflight, txInflightMultiplicity = 1, bufferedTxsMinLifetime = 0, scoreRate = 0.1, diff --git a/dmq-node/src/DMQ/Protocol/SigSubmission/Codec.hs b/dmq-node/src/DMQ/Protocol/SigSubmission/Codec.hs index 7b7ecf91..12830d11 100644 --- a/dmq-node/src/DMQ/Protocol/SigSubmission/Codec.hs +++ b/dmq-node/src/DMQ/Protocol/SigSubmission/Codec.hs @@ -85,10 +85,10 @@ byteLimitsSigSubmission :: forall crypto bytes. byteLimitsSigSubmission = ProtocolSizeLimits stateToLimit where -- `(33 + 1) * 2800 = 95200` plus 2800 bytes of overhead. We add `1` to - -- `maxSigsInflight` since the txSubmission logic can download one signature - -- more that the `maxSigsInflight` limit. + -- `maxSigIdsInflight` since the txSubmission logic can download one signature + -- more that the `maxSigIdsInflight` limit. byteLimit :: Word - byteLimit = fromIntegral Policy.maxSigSize * (fromIntegral Policy.maxSigsInflight + 2) + byteLimit = fromIntegral Policy.maxSigSize * (fromIntegral Policy.maxSigIdsInflight + 2) stateToLimit :: forall (st :: SigSubmission crypto). ActiveState st => StateToken st -> Word diff --git a/dmq-node/src/DMQ/Protocol/SigSubmissionV2/Codec.hs b/dmq-node/src/DMQ/Protocol/SigSubmissionV2/Codec.hs index 7dedaace..2fe6f866 100644 --- a/dmq-node/src/DMQ/Protocol/SigSubmissionV2/Codec.hs +++ b/dmq-node/src/DMQ/Protocol/SigSubmissionV2/Codec.hs @@ -52,7 +52,7 @@ byteLimitsSigSubmissionV2 = ProtocolSizeLimits stateToLimit -- `maxSigsInflight` since the txSubmission logic can download one signature -- more that the `maxSigsInflight` limit. byteLimit :: Word - byteLimit = fromIntegral Policy.maxSigSize * (fromIntegral Policy.maxSigsInflight + 2) + byteLimit = fromIntegral Policy.maxSigSize * (fromIntegral Policy.maxSigIdsInflight + 2) stateToLimit :: forall (st :: SigSubmissionV2 sigId sig). diff --git a/flake.lock b/flake.lock index 6476700e..9134400f 100644 --- a/flake.lock +++ b/flake.lock @@ -155,11 +155,11 @@ "hackage": { "flake": false, "locked": { - "lastModified": 1779358087, - "narHash": "sha256-+tHfNr4EZabb5HaEzHXIOmG6WLkImGfG5DJg/JwKBE4=", + "lastModified": 1782113726, + "narHash": "sha256-Uwh+sHSOKIzicEyHFqnwexReNBvX9jbFiuExI0r51iM=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "5ee161948ef9f17ff778d86e03eae8f10e3fd1f1", + "rev": "7dfb22c38f71a464f1c352d88d16e67b23ada26c", "type": "github" }, "original": {