Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 53 additions & 19 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,10 @@ 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-06-20T00:51:00Z
, hackage.haskell.org 2026-06-29T22:49:53Z

-- Bump this if you need newer packages from CHaP
, cardano-haskell-packages 2026-05-11T20:15:43Z

active-repositories:
, :rest
, cardano-haskell-packages:override
, cardano-haskell-packages 2026-07-02T10:10:00Z

packages:
./dmq-node
Expand All @@ -44,25 +40,63 @@ if impl(ghc >= 9.12.0)
-- rejecting: cardano-crypto-class-2.3.1.0 (conflict: cardano-crypto-tests => cardano-crypto-class>=2.2.2 && <2.2.4)
-- allow-newer: cardano-crypto-tests:cardano-crypto-class

-- ouroboros-network with PR#5376, but without contra-tracer-0.2.1.0 (PR#5368)
source-repository-package
type: git
location: https://github.com/IntersectMBO/ouroboros-network
tag: 5a80699bca834a4de47aca4fe4d322832309e374
--sha256: sha256-FXp0gIfsUDVEE4ZuEM5y55qx0I7d5+/wQ7AjUz6UDcE=
subdir: network-mux
cardano-diffusion
ouroboros-network
acts-generic
location: https://github.com/IntersectMBO/ouroboros-network.git
tag: 9e45c79049bd5f20e3de308ee8203c201aa61f9e
--sha256: sha256-dK8taHnenl4D18bOxepXstO0hq7RWj2jnaxECPOT+ew=
subdir:
cardano-diffusion
network-mux
ouroboros-network
acts-generic

source-repository-package
type: git
location: https://github.com/IntersectMBO/ouroboros-consensus.git
tag: e37ba209ffdbdcb3cc8e7a9cb0fb6d6fa7cce8a3
--sha256: sha256-srdli4YUIo3HtdWwpk2Tq5okk4GQ5Fpn/ipFO8eykVU=
subdir:
.

source-repository-package
type: git
location: https://github.com/IntersectMBO/ouroboros-consensus
tag: ec9df6ee1d7ab918e75219107fc17e1b2cf1a0e9
--sha256: sha256-c+yGPftvlas2CcnFLUPPqjnitz5yTu/Qud5LaSMyY34=
location: https://github.com/IntersectMBO/cardano-ledger.git
tag: 245e63dcd335e3ca29823609e4aaa8f5f096a425
--sha256: sha256-chsapfNnY/V7y1snBzjP0LSVnYl/Axt6GjahTPNOKj0=
subdir:
eras/allegra/impl
eras/alonzo/impl
eras/babbage/impl
eras/byron/chain/executable-spec
eras/byron/crypto
eras/byron/ledger/executable-spec
eras/byron/ledger/impl
eras/conway/impl
eras/dijkstra/impl
eras/mary/impl
eras/shelley-ma/test-suite
eras/shelley/impl
eras/shelley/test-suite
libs/cardano-data
libs/cardano-ledger-api
libs/cardano-ledger-binary
libs/cardano-ledger-core
libs/cardano-protocol-tpraos
libs/non-integral
libs/small-steps
libs/vector-map

source-repository-package
type: git
location: https://github.com/f-f/kes-agent.git
tag: 32c1ed675d22a30735d9f22f7afa436a3ef3e64a
--sha256: sha256-o7hFX1JnraS6Xq0WoXQwd9Z8GsPPv0Ls2DWvZ08o0ZU=
subdir:
kes-agent
kes-agent-crypto

constraints: semialign >= 1.4,
validation < 1.2
validation >= 1.2 && < 2.0
allow-newer: hedgehog-quickcheck:QuickCheck,
monoidal-containers:semialign

25 changes: 25 additions & 0 deletions dmq-node/changelog.d/20260710_092801_coot_prepare_11_1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!--
A new scriv changelog fragment.

Uncomment the section that is right (remove the HTML comment wrapper).
For top level release notes, leave all the headers commented out.
-->

### Breaking

- Using `tx-submission` undecision logic:
- `NodeKernel` data type changed to adapt to the new tx-submission logic
- `SigMempoolResult` is provided by `DMQ.Diffusion.PeerSelection.PeerMetric` module.
- `sigSubmissionLogicPeerTracer` was removed from `DMQTracers`
- `sigDecisionPolicy :: TxDecisionPolicy` was adapted to the new tx-submission logic

### Non-Breaking

- Integrated with `trace-dispatcher ^>= 2.13.0` and `contra-tracer >= 0.2.1.0`

<!--
### Patch

- A bullet item for the Patch category.

-->
6 changes: 2 additions & 4 deletions dmq-node/dmq-node.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ library
hashable >=1.0 && <1.6,
io-classes:{io-classes, si-timers, strict-mvar, strict-stm} ^>=1.8.0.1,
iproute ^>=1.7.15,
kes-agent-crypto ^>=1.1.0.0,
kes-agent-crypto ^>=1.2,
mmap,
mtl,
network ^>=3.2.7,
Expand All @@ -142,7 +142,7 @@ library
singletons,
text >=1.2.4 && <2.2,
time >=1.12 && <1.15,
trace-dispatcher ^>=2.12.1,
trace-dispatcher ^>=2.13.0,
transformers,
transformers-except,
typed-protocols:{typed-protocols, cborg} ^>=1.2,
Expand Down Expand Up @@ -219,14 +219,12 @@ test-suite dmq-tests
contra-tracer,
deepseq,
dmq-node,
hashable,
io-classes:{io-classes, si-timers, strict-mvar, strict-stm},
io-sim,
kes-agent-crypto,
ouroboros-network:{ouroboros-network, api, framework, ouroboros-network-tests-lib, protocols, protocols-tests-lib, tests-lib},
psqueues,
quickcheck-instances,
random,
serialise,
tasty,
tasty-quickcheck,
Expand Down
11 changes: 1 addition & 10 deletions dmq-node/src/DMQ/Configuration/Topology.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,11 @@ import Data.ByteString.Lazy qualified as LBS
import Data.Text (Text)
import Data.Text qualified as Text
import Ouroboros.Network.Diffusion.Topology (NetworkTopology (..))
import Ouroboros.Network.Diffusion.Types (NoExtraFlags (..))
import Ouroboros.Network.Diffusion.Types (NoExtraConfig (..), NoExtraFlags (..))
import Ouroboros.Network.OrphanInstances (localRootPeersGroupsFromJSON,
networkTopologyFromJSON, networkTopologyToJSON)
import System.Exit (die)

-- TODO: move `NoExtraConfig` and the `ToJSON NoExtraFlags` to
-- `ouroboros-network`.

data NoExtraConfig = NoExtraConfig
deriving Show

instance ToJSON NoExtraFlags where
toJSON _ = Null
omitField _ = True

instance FromJSON (NetworkTopology NoExtraConfig NoExtraFlags) where
parseJSON = networkTopologyFromJSON
Expand Down
37 changes: 18 additions & 19 deletions dmq-node/src/DMQ/Diffusion/NodeKernel.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import Control.Monad.Class.MonadTimer.SI
import "contra-tracer" Control.Tracer (nullTracer)

import Data.Function (on)
import Data.Hashable
import Data.Map.Strict qualified as Map
import Data.OrdPSQ qualified as OrdPSQ
import Data.Proxy
Expand Down Expand Up @@ -53,8 +52,7 @@ import Ouroboros.Network.PeerSelection.Governor.Types
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.Handshake.Codec (noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.LocalStateQuery.Client
import Ouroboros.Network.Protocol.LocalStateQuery.Type
import Ouroboros.Network.Snocket (Snocket, localAddressFromPath)
Expand Down Expand Up @@ -90,12 +88,11 @@ newNodeKernel rng ShelleyGenesis {sgMaxKESEvolutions} = do
peerSharingRegistry <- newPeerSharingRegistry

mempool <- Mempool.empty
sigChannelVar <- newTxChannelsVar
sigMempoolSem <- newTxMempoolSem
let (rng', rng'') = Random.splitGen rng
(peerSharingRng, peerSelectionPolicyRng) = Random.splitGen rng''
let (peerSharingRng, peerSelectionPolicyRng) = Random.splitGen rng
peerSelectionPolicyRngVar <- newTVarIO peerSelectionPolicyRng
sigSharedTxStateVar <- newSharedTxStateVar rng'
sigSharedTxStateVar <- newSharedTxStateVar emptySharedTxState
sigPeerRegistry <- newPeerTxRegistry
sigCountersVar <- newTxSubmissionCountersVar mempty
(readinessVar,
ocertCountersVar,
stakePoolsVar,
Expand Down Expand Up @@ -145,9 +142,9 @@ newNodeKernel rng ShelleyGenesis {sgMaxKESEvolutions} = do
, peerSharingAPI
, peerSelectionPolicyRngVar
, mempool
, sigChannelVar
, sigMempoolSem
, sigSharedTxStateVar
, sigPeerRegistry
, sigCountersVar
, readinessVar
, stakePools
, peerMetric
Expand All @@ -170,7 +167,6 @@ withNodeKernel :: forall crypto ntnAddr ntcAddr m a.
, MonadTime m
, MonadTimer m
, Ord ntnAddr
, Hashable ntnAddr
)
=> DMQTracers crypto ntnAddr ntcAddr m
-> Snocket m Cardano.NtoC.LocalSocket LocalAddress
Expand All @@ -183,6 +179,7 @@ withNodeKernel :: forall crypto ntnAddr ntcAddr m a.
-- decision logic threads will be killed
-> m a
withNodeKernel DMQTracers { sigSubmissionLogicTracer,
sigCountersTracer,
localStateQueryClientTracer,
cardanoNodeHandshakeProtocolTracer,
cardanoNodeMuxTracer,
Expand All @@ -200,18 +197,20 @@ withNodeKernel DMQTracers { sigSubmissionLogicTracer,
rng
k = do
nodeKernel@NodeKernel { mempool,
sigChannelVar,
sigSharedTxStateVar
sigSharedTxStateVar,
sigPeerRegistry,
sigCountersVar
}
<- newNodeKernel rng shelleyGenesis
withAsync (mempoolWorker mempool)
$ \mempoolThread ->
withAsync (decisionLogicThreads
sigSubmissionLogicTracer
nullTracer
withAsync (txCountersThreadV2
Policy.sigDecisionPolicy
sigChannelVar
sigSharedTxStateVar)
sigCountersTracer
sigSubmissionLogicTracer
sigCountersVar
sigSharedTxStateVar
sigPeerRegistry)
$ \sigLogicThread ->
withAsync (connectToCardanoNode nodeKernel) \spmAid -> do
link mempoolThread
Expand All @@ -229,7 +228,7 @@ withNodeKernel DMQTracers { sigSubmissionLogicTracer,
ConnectToArgs {
ctaHandshakeCodec = Cardano.NtoC.nodeToClientHandshakeCodec,
ctaHandshakeTimeLimits = noTimeLimitsHandshake,
ctaVersionDataCodec = cborTermVersionDataCodec Cardano.NtoC.nodeToClientCodecCBORTerm,
ctaVersionDataCodec = Cardano.NtoC.nodeToClientVersionDataCodec,
ctaConnectTracers = Cardano.NtoC.NetworkConnectTracers {
Cardano.NtoC.nctMuxTracers =
Mx.Tracers {
Expand Down
8 changes: 4 additions & 4 deletions dmq-node/src/DMQ/Diffusion/NodeKernel/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,17 @@ data Readiness = NotReady | Ready
data NodeKernel crypto ntnAddr m =
NodeKernel {
-- | The keep alive registry, used for the keep alive clients.
keepAliveRegistry :: !(KeepAliveRegistry (ConnectionId ntnAddr) m)
keepAliveRegistry :: !(KeepAliveRegistry (ConnectionId ntnAddr) m)

-- | Read the current peer sharing registry, used for interacting with
-- the PeerSharing protocol
, peerSharingRegistry :: !(PeerSharingRegistry ntnAddr m)
, peerSharingAPI :: !(PeerSharingAPI ntnAddr StdGen m)
, peerSelectionPolicyRngVar :: !(StrictTVar m StdGen)
, mempool :: !(Mempool m SigId (Sig crypto))
, sigChannelVar :: !(TxChannelsVar m ntnAddr SigId (Sig crypto))
, sigMempoolSem :: !(TxMempoolSem m)
, sigSharedTxStateVar :: !(SharedTxStateVar m ntnAddr SigId (Sig crypto))
, sigSharedTxStateVar :: !(SharedTxStateVar m ntnAddr SigId)
, sigPeerRegistry :: !(PeerTxRegistry m ntnAddr)
, sigCountersVar :: !(TxSubmissionCountersVar m)
, stakePools :: !(StakePools m)
, readinessVar :: !(StrictTVar m Readiness)
, peerMetric :: !(PeerMetric m SigId ntnAddr)
Expand Down
13 changes: 7 additions & 6 deletions dmq-node/src/DMQ/Diffusion/PeerSelection/PeerMetric.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module DMQ.Diffusion.PeerSelection.PeerMetric
, announciness
-- * Re-exports
, TraceLabelPeer (..)
, TxMempoolResult (..)
, SigMempoolResult (..)
-- * For testing purposes
, peerMetricVar
-- * Pure API exported for testing purposes
Expand All @@ -42,8 +42,9 @@ import Data.OrdPSQ qualified as OrdPSQ

import Network.Mux.Trace (TraceLabelPeer (..))

import Ouroboros.Network.TxSubmission.Inbound.V2 (TxMempoolResult (..))

data SigMempoolResult = SigAccepted | SigRejected
deriving (Eq, Show)

newtype PeerMetricConfiguration = PeerMetricConfiguration {
timeWindowToKeep :: DiffTime
Expand Down Expand Up @@ -143,7 +144,7 @@ data ReportPeerMetric' m sigid f = ReportPeerMetric {

-- | Report a received `sig`
reportSig :: LocalPeerMetricState sigid
-> f (sigid, TxMempoolResult)
-> f (sigid, SigMempoolResult)
-> STM m (LocalPeerMetricState sigid)
}

Expand Down Expand Up @@ -220,13 +221,13 @@ reportSigImpl
Ord sigid
=> PeerMetricConfiguration
-> LocalPeerMetricState sigid
-> TraceLabelPeer peeraddr (sigid, TxMempoolResult)
-> TraceLabelPeer peeraddr (sigid, SigMempoolResult)
-> PeerMetricState sigid peeraddr
-> (LocalPeerMetricState sigid, PeerMetricState sigid peeraddr)
reportSigImpl
config
localState
(TraceLabelPeer _peeraddr (sigid, TxRejected))
(TraceLabelPeer _peeraddr (sigid, SigRejected))
metricState
=
( localState'
Expand All @@ -238,7 +239,7 @@ reportSigImpl
reportSigImpl
config
localState
(TraceLabelPeer peeraddr (sigid, TxAccepted))
(TraceLabelPeer peeraddr (sigid, SigAccepted))
st
=
( localState'
Expand Down
6 changes: 3 additions & 3 deletions dmq-node/src/DMQ/NodeToClient.hs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ import Ouroboros.Network.Handshake.Queryable (Queryable (..))
import Ouroboros.Network.Mux
import Ouroboros.Network.OrphanInstances ()
import Ouroboros.Network.Protocol.Handshake (HandshakeArguments (..))
import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionDataCodec,
codecHandshake, noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.Handshake.Codec (codecHandshake,
mkVersionedCodecCBORTerm, noTimeLimitsHandshake)
import Ouroboros.Network.TxSubmission.Mempool.Reader
import Ouroboros.Network.TxSubmission.Mempool.Simple
import Ouroboros.Network.Util.ShowProxy
Expand All @@ -71,7 +71,7 @@ ntcHandshakeArguments tracer =
, haBearerTracer = nullTracer -- TODO
, haHandshakeCodec = codecHandshake nodeToClientVersionCodec
, haVersionDataCodec =
cborTermVersionDataCodec
mkVersionedCodecCBORTerm
nodeToClientCodecCBORTerm
, haAcceptVersion = acceptableVersion
, haQueryVersion = queryVersion
Expand Down
Loading
Loading