Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
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
15 changes: 10 additions & 5 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,19 @@ 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 2025-06-17T07:53:04Z
, hackage.haskell.org 2025-07-16T09:24:19Z

-- Bump this if you need newer packages from CHaP
, cardano-haskell-packages 2025-02-15T18:39:38Z

-- `trace-dispatcher` from repo "cardano-node" branch "fmaste/dmq-node".
source-repository-package
type: git
location: https://github.com/IntersectMBO/cardano-node.git
subdir: trace-dispatcher
tag: 9d25e72454269ecca5f138ee2abf3cbbfa619428
--sha256: 1asb9gx7w50p31wv6hnac7hcmvs3h2m5zrm57p1dpmb70h38xz74

packages: ./cardano-ping
./monoidal-synchronisation
./network-mux
Expand All @@ -32,6 +40,7 @@ packages: ./cardano-ping
./ntp-client
./cardano-client
./decentralized-message-queue
./quickcheck-monoids

tests: True
benchmarks: True
Expand All @@ -53,7 +62,3 @@ package network-mux

package ouroboros-network
flags: +asserts +cddl

allow-newer: aeson:QuickCheck,
tree-diff:QuickCheck,
quickcheck-instances:QuickCheck
2 changes: 1 addition & 1 deletion cardano-client/cardano-client.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ library
io-classes:si-timers ^>=1.8.0.1,
network-mux ^>=0.9,
ouroboros-network ^>=0.22,
ouroboros-network-api ^>=0.15,
ouroboros-network-api ^>=0.16,
ouroboros-network-framework ^>=0.19,

ghc-options:
Expand Down
8 changes: 8 additions & 0 deletions cardano-ping/src/Cardano/Network/Ping.hs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ supportedNodeToClientVersions magic =
, NodeToClientVersionV19 magic
, NodeToClientVersionV20 magic
, NodeToClientVersionV21 magic
, NodeToClientVersionV22 magic
]

data InitiatorOnly = InitiatorOnly | InitiatorAndResponder
Expand Down Expand Up @@ -191,6 +192,7 @@ data NodeVersion
| NodeToClientVersionV19 Word32
| NodeToClientVersionV20 Word32
| NodeToClientVersionV21 Word32
| NodeToClientVersionV22 Word32
| NodeToNodeVersionV1 Word32
| NodeToNodeVersionV2 Word32
| NodeToNodeVersionV3 Word32
Expand Down Expand Up @@ -223,6 +225,7 @@ instance ToJSON NodeVersion where
NodeToClientVersionV19 m -> go2 "NodeToClientVersionV19" m
NodeToClientVersionV20 m -> go2 "NodeToClientVersionV20" m
NodeToClientVersionV21 m -> go2 "NodeToClientVersionV21" m
NodeToClientVersionV22 m -> go2 "NodeToClientVersionV22" m
NodeToNodeVersionV1 m -> go2 "NodeToNodeVersionV1" m
NodeToNodeVersionV2 m -> go2 "NodeToNodeVersionV2" m
NodeToNodeVersionV3 m -> go2 "NodeToNodeVersionV3" m
Expand Down Expand Up @@ -371,6 +374,9 @@ handshakeReqEnc versions query =
encodeVersion (NodeToClientVersionV21 magic) =
CBOR.encodeWord (21 `setBit` nodeToClientVersionBit)
<> nodeToClientDataWithQuery magic
encodeVersion (NodeToClientVersionV22 magic) =
CBOR.encodeWord (22 `setBit` nodeToClientVersionBit)
<> nodeToClientDataWithQuery magic

-- node-to-node
encodeVersion (NodeToNodeVersionV1 magic) =
Expand Down Expand Up @@ -521,6 +527,7 @@ handshakeDec = do
(19, True) -> Right . NodeToClientVersionV19 <$> (CBOR.decodeListLen *> CBOR.decodeWord32 <* (modeFromBool <$> CBOR.decodeBool))
(20, True) -> Right . NodeToClientVersionV20 <$> (CBOR.decodeListLen *> CBOR.decodeWord32 <* (modeFromBool <$> CBOR.decodeBool))
(21, True) -> Right . NodeToClientVersionV21 <$> (CBOR.decodeListLen *> CBOR.decodeWord32 <* (modeFromBool <$> CBOR.decodeBool))
(22, True) -> Right . NodeToClientVersionV22 <$> (CBOR.decodeListLen *> CBOR.decodeWord32 <* (modeFromBool <$> CBOR.decodeBool))
_ -> return $ Left $ UnknownVersionInRsp version

decodeWithMode :: (Word32 -> InitiatorOnly -> NodeVersion) -> CBOR.Decoder s (Either HandshakeFailure NodeVersion)
Expand Down Expand Up @@ -845,6 +852,7 @@ isSameVersionAndMagic v1 v2 = extract v1 == extract v2
extract (NodeToClientVersionV19 m) = (-19, m)
extract (NodeToClientVersionV20 m) = (-20, m)
extract (NodeToClientVersionV21 m) = (-21, m)
extract (NodeToClientVersionV22 m) = (-22, m)
extract (NodeToNodeVersionV1 m) = (1, m)
extract (NodeToNodeVersionV2 m) = (2, m)
extract (NodeToNodeVersionV3 m) = (3, m)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ library
nothunks ^>=0.1.4 || ^>=0.2,
optparse-applicative ^>=0.18,
ouroboros-network:{ouroboros-network, orphan-instances} ^>=0.22,
ouroboros-network-api ^>=0.15,
ouroboros-network-api ^>=0.16,
ouroboros-network-framework ^>=0.19,
ouroboros-network-protocols ^>=0.15,
random ^>=1.2,
Expand Down
101 changes: 52 additions & 49 deletions decentralized-message-queue/src/DMQ/Configuration.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ import GHC.Generics (Generic)
import Network.Socket (AddrInfo (..), AddrInfoFlag (..), SockAddr,
SocketType (..), defaultHints, getAddrInfo)

import Ouroboros.Network.Diffusion.Configuration
(defaultAcceptedConnectionsLimit, defaultDeadlineChurnInterval,
import Ouroboros.Network.Diffusion.Configuration (BlockProducerOrRelay (..),
defaultAcceptedConnectionsLimit, defaultDeadlineChurnInterval,
defaultDeadlineTargets, defaultProtocolIdleTimeout,
defaultTimeWaitTimeout)
import Ouroboros.Network.Diffusion.Topology (NetworkTopology (..),
Expand Down Expand Up @@ -59,53 +59,56 @@ data Configuration ntnFd ntnAddr ntcFd ntcAddr =

instance FromJSON (Configuration ntnFd ntnAddr ntcFd ntcAddr) where
parseJSON = withObject "DMQConfiguration" $ \v -> do
dmqcAcceptedConnectionsLimit <- v .:? "AcceptedConnectionsLimit"
.!= defaultAcceptedConnectionsLimit

dmqcDiffusionMode <- v .:? "DiffusionMode"
.!= InitiatorAndResponderDiffusionMode

dmqcTargetOfRootPeers <- v .:? "TargetNumberOfRootPeers"
.!= targetNumberOfRootPeers defaultDeadlineTargets
dmqcTargetOfKnownPeers <- v .:? "TargetNumberOfKnownPeers"
.!= targetNumberOfKnownPeers defaultDeadlineTargets
dmqcTargetOfEstablishedPeers <- v .:? "TargetNumberOfEstablishedPeers"
.!= targetNumberOfEstablishedPeers defaultDeadlineTargets
dmqcTargetOfActivePeers <- v .:? "TargetNumberOfActivePeers"
.!= targetNumberOfActivePeers defaultDeadlineTargets
dmqcTargetOfKnownBigLedgerPeers <- v .:? "TargetNumberOfKnownBigLedgerPeers"
.!= targetNumberOfKnownBigLedgerPeers defaultDeadlineTargets
dmqcTargetOfEstablishedBigLedgerPeers <- v .:? "TargetNumberOfEstablishedBigLedgerPeers"
.!= targetNumberOfEstablishedBigLedgerPeers defaultDeadlineTargets
dmqcTargetOfActiveBigLedgerPeers <- v .:? "TargetNumberOfActiveBigLedgerPeers"
.!= targetNumberOfActiveBigLedgerPeers defaultDeadlineTargets

dmqcProtocolIdleTimeout <- v .:? "ProtocolIdleTimeout"
.!= defaultProtocolIdleTimeout

dmqcChurnInterval <- v .:? "ChurnInterval"
.!= defaultDeadlineChurnInterval

dmqcPeerSharing <- v .:? "PeerSharing"
.!= PeerSharingEnabled
networkMagic <- v .: "NetworkMagic"

pure $
Configuration
{ dmqcAcceptedConnectionsLimit
, dmqcDiffusionMode
, dmqcTargetOfRootPeers
, dmqcTargetOfKnownPeers
, dmqcTargetOfEstablishedPeers
, dmqcTargetOfActivePeers
, dmqcTargetOfKnownBigLedgerPeers
, dmqcTargetOfEstablishedBigLedgerPeers
, dmqcTargetOfActiveBigLedgerPeers
, dmqcProtocolIdleTimeout
, dmqcChurnInterval
, dmqcPeerSharing
, dmqcNetworkMagic = NetworkMagic networkMagic
}
dmqcAcceptedConnectionsLimit <- v .:? "AcceptedConnectionsLimit"
.!= defaultAcceptedConnectionsLimit

dmqcDiffusionMode <- v .:? "DiffusionMode"
.!= InitiatorAndResponderDiffusionMode

dmqcTargetOfRootPeers <- v .:? "TargetNumberOfRootPeers"
.!= targetNumberOfRootPeers deadlineTargets
dmqcTargetOfKnownPeers <- v .:? "TargetNumberOfKnownPeers"
.!= targetNumberOfKnownPeers deadlineTargets
dmqcTargetOfEstablishedPeers <- v .:? "TargetNumberOfEstablishedPeers"
.!= targetNumberOfEstablishedPeers deadlineTargets
dmqcTargetOfActivePeers <- v .:? "TargetNumberOfActivePeers"
.!= targetNumberOfActivePeers deadlineTargets
dmqcTargetOfKnownBigLedgerPeers <- v .:? "TargetNumberOfKnownBigLedgerPeers"
.!= targetNumberOfKnownBigLedgerPeers deadlineTargets
dmqcTargetOfEstablishedBigLedgerPeers <- v .:? "TargetNumberOfEstablishedBigLedgerPeers"
.!= targetNumberOfEstablishedBigLedgerPeers deadlineTargets
dmqcTargetOfActiveBigLedgerPeers <- v .:? "TargetNumberOfActiveBigLedgerPeers"
.!= targetNumberOfActiveBigLedgerPeers deadlineTargets

dmqcProtocolIdleTimeout <- v .:? "ProtocolIdleTimeout"
.!= defaultProtocolIdleTimeout

dmqcChurnInterval <- v .:? "ChurnInterval"
.!= defaultDeadlineChurnInterval

dmqcPeerSharing <- v .:? "PeerSharing"
.!= PeerSharingEnabled
networkMagic <- v .: "NetworkMagic"

pure $
Configuration
{ dmqcAcceptedConnectionsLimit
, dmqcDiffusionMode
, dmqcTargetOfRootPeers
, dmqcTargetOfKnownPeers
, dmqcTargetOfEstablishedPeers
, dmqcTargetOfActivePeers
, dmqcTargetOfKnownBigLedgerPeers
, dmqcTargetOfEstablishedBigLedgerPeers
, dmqcTargetOfActiveBigLedgerPeers
, dmqcProtocolIdleTimeout
, dmqcChurnInterval
, dmqcPeerSharing
, dmqcNetworkMagic = NetworkMagic networkMagic
}
where
-- TODO: use DMQ's own default values
deadlineTargets = defaultDeadlineTargets Relay

-- | Read the `DMQConfiguration` from the specified file.
--
Expand Down
47 changes: 32 additions & 15 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions network-mux/network-mux.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,30 @@ library
-Wredundant-constraints
-Wunused-packages

library traces
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
library traces
library trace-dispatcher-instances

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's also an option to make this a separate package for eg. cardano-network-mux-trace since network-mux in principle is a very general library. Another benefit is that in case we make changes to the tracers we will not have to make a release of network-mux. What's your take @coot ?

build-depends:
aeson,
base >=4.14 && <4.22,
formatting,
network-mux,
trace-dispatcher ^>= 2.10.0
hs-source-dirs: traces
visibility: public
exposed-modules:
Network.Mux.Traces
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already have a very similar module Network.Mux.Trace, what about Network.Mux.Trace.TraceDispatcher?

default-language: Haskell2010
default-extensions: ImportQualifiedPost
ghc-options:
-Wall
-Wcompat
-Widentities
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wno-unticked-promoted-constructors
-Wpartial-fields
-Wredundant-constraints
-Wunused-packages

test-suite test
type: exitcode-stdio-1.0
hs-source-dirs: test
Expand Down
Loading