Skip to content
Open
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
3 changes: 1 addition & 2 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ index-state:
-- Bump this if you need newer packages from CHaP
, cardano-haskell-packages 2025-03-18T17:41:11Z

packages: ./cardano-ping
./monoidal-synchronisation
packages: ./monoidal-synchronisation
./network-mux
./ouroboros-network
./cardano-diffusion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
module Cardano.Network.NodeToClient.Version
( NodeToClientVersion (..)
, NodeToClientVersionData (..)
, nodeToClientCodecCBORTerm
, nodeToClientVersionCodec
, nodeToClientVersionDataCodec
, NetworkMagic (..)
) where

import Codec.CBOR.Term qualified as CBOR
Expand Down Expand Up @@ -145,3 +146,7 @@ nodeToClientCodecCBORTerm _v = CodecCBORTerm {encodeTerm, decodeTerm}
decoder :: Int -> Bool -> Either Text NodeToClientVersionData
decoder x query | x >= 0 && x <= 0xffffffff = Right (NodeToClientVersionData (NetworkMagic $ fromIntegral x) query)
| otherwise = Left $ T.pack $ "networkMagic out of bound: " <> show x


nodeToClientVersionDataCodec :: VersionDataCodec NodeToClientVersion NodeToClientVersionData
nodeToClientVersionDataCodec = mkVersionedCodecCBORTerm nodeToClientCodecCBORTerm
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ module Cardano.Network.NodeToNode.Version
, DiffusionMode (..)
, ConnectionMode (..)
, nodeToNodeVersionCodec
, nodeToNodeCodecCBORTerm
, nodeToNodeVersionDataCodec
, NetworkMagic (..)
) where

import Data.Text (Text)
Expand Down Expand Up @@ -169,4 +170,7 @@ nodeToNodeCodecCBORTerm =
= Left $ T.pack $ "unknown encoding: " ++ show t


nodeToNodeVersionDataCodec :: VersionDataCodec NodeToNodeVersion NodeToNodeVersionData
nodeToNodeVersionDataCodec = mkVersionedCodecCBORTerm nodeToNodeCodecCBORTerm

data ConnectionMode = UnidirectionalMode | DuplexMode
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ module Test.Cardano.Network.NodeToClient.Version (tests) where
import Cardano.Network.NodeToClient.Version

import Ouroboros.Network.CodecCBORTerm
import Ouroboros.Network.Magic

import Test.QuickCheck
import Test.Tasty (TestTree, testGroup)
Expand Down Expand Up @@ -45,8 +44,8 @@ prop_nodeToClientVersionCodec version =

prop_nodeToClientCodec :: VersionAndVersionData -> Bool
prop_nodeToClientCodec (VersionAndVersionData vNumber vData) =
case decodeTerm (encodeTerm vData) of
case decodeData vNumber (encodeData vNumber vData) of
Right vData' -> networkMagic vData' == networkMagic vData
Left {} -> False
where
CodecCBORTerm { encodeTerm, decodeTerm } = nodeToClientCodecCBORTerm vNumber
VersionDataCodec { encodeData, decodeData } = nodeToClientVersionDataCodec
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ module Test.Cardano.Network.NodeToNode.Version (tests) where
import Cardano.Network.NodeToNode.Version

import Ouroboros.Network.CodecCBORTerm
import Ouroboros.Network.Magic

import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing (..))
import Test.QuickCheck
Expand Down Expand Up @@ -52,9 +51,9 @@ prop_nodeToNodeVersionCodec version =

prop_nodeToNodeCodec :: NodeToNodeVersion -> NodeToNodeVersionData -> Bool
prop_nodeToNodeCodec ntnVersion ntnData =
case decodeTerm (encodeTerm ntnData) of
case decodeData ntnVersion (encodeData ntnVersion ntnData) of
Right ntnData' -> networkMagic ntnData' == networkMagic ntnData
&& diffusionMode ntnData' == diffusionMode ntnData
Left {} -> False
where
CodecCBORTerm { encodeTerm, decodeTerm } = nodeToNodeCodecCBORTerm ntnVersion
VersionDataCodec { encodeData, decodeData } = nodeToNodeVersionDataCodec
25 changes: 24 additions & 1 deletion cardano-diffusion/cardano-diffusion.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,6 @@ library protocols-tests-lib
ouroboros-network:{api, framework, protocols-tests-lib},
tasty,
tasty-quickcheck,
text,
typed-protocols,

test-suite protocols-tests
Expand Down Expand Up @@ -513,3 +512,27 @@ library subscription
io-classes:si-timers ^>=1.8.0.1,
network-mux ^>=0.9,
ouroboros-network:{api, framework} ^>=0.23,

library ping
import: ghc-options
visibility: public
hs-source-dirs: ping
exposed-modules: Cardano.Network.Ping
build-depends:
aeson >=2.1.1.0 && <3,
base >=4.14 && <4.22,
bytestring >=0.10 && <0.13,
cardano-diffusion:{cardano-diffusion, api, orphan-instances, protocols},
cborg >=0.2.8 && <0.3,
containers,
contra-tracer >=0.1 && <0.3,
io-classes:{io-classes, si-timers, strict-stm} ^>=1.8.0.1,
iproute ^>=1.7.15,
network ^>=3.2.7,
network-mux ^>=0.9,
ouroboros-network:{api, framework} ^>=0.23,
random,
serialise,
tdigest ^>=0.3,
text >=1.2.4 && <2.2,
time >=1.9.1 && <1.14,
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
### Breaking

- `cardano-ping` has been deprecated and it is recommended to switch to
`cardano-diffusion:ping` library. The API has slightly changed. The logger
is instantiated by the top level `pingClients` function. It supports
connecting to multiple nodes at once. Note that `pingClient` is now an
internal, not-exported function. The new API suports querying tip over
node-to-node and node-to-client protocols.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
### Breaking

- Added `nodeTo{Client,Node}VersionDataCodec` to
`Cardano.Network.NodeTo{Client,Node}` modules.
- Removed `nodeTo{Client,Node}CodecCBORTerm`, use the above binding instead.
9 changes: 0 additions & 9 deletions cardano-diffusion/demo/chain-sync.hs
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,6 @@ rmIfExists path = do
b <- doesFileExist path
when b (removeFile path)

-- TODO: provide sensible limits
-- https://github.com/intersectmbo/ouroboros-network/issues/575
maximumMiniProtocolLimits :: MiniProtocolLimits
maximumMiniProtocolLimits =
MiniProtocolLimits {
maximumIngressQueue = maxBound
}


--
-- Chain sync demo
--
Expand Down
8 changes: 2 additions & 6 deletions cardano-diffusion/lib/Cardano/Network/Diffusion.hs
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,7 @@ run CardanoNodeArguments {
haBearerTracer = Diffusion.dtBearerTracer tracers,
haHandshakeTracer = Diffusion.dtHandshakeTracer tracers,
haHandshakeCodec = NodeToNode.nodeToNodeHandshakeCodec,
haVersionDataCodec =
cborTermVersionDataCodec
NodeToNode.nodeToNodeCodecCBORTerm,
haVersionDataCodec = NodeToNode.nodeToNodeVersionDataCodec,
haAcceptVersion = acceptableVersion,
haQueryVersion = queryVersion,
haTimeLimits = timeLimitsHandshake
Expand All @@ -94,9 +92,7 @@ run CardanoNodeArguments {
haBearerTracer = Diffusion.dtLocalBearerTracer tracers,
haHandshakeTracer = Diffusion.dtLocalHandshakeTracer tracers,
haHandshakeCodec = NodeToClient.nodeToClientHandshakeCodec,
haVersionDataCodec =
cborTermVersionDataCodec
NodeToClient.nodeToClientCodecCBORTerm,
haVersionDataCodec = NodeToClient.nodeToClientVersionDataCodec,
haAcceptVersion = acceptableVersion,
haQueryVersion = queryVersion,
haTimeLimits = noTimeLimitsHandshake
Expand Down
25 changes: 22 additions & 3 deletions cardano-diffusion/lib/Cardano/Network/NodeToClient.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ module Cardano.Network.NodeToClient
, nullNetworkConnectTracers
, connectTo
, connectToWithMux
-- * Mini-Protocol numbers
, localChainSyncMiniProtocolNum
, localTxSubmissionMiniProtocolNum
, localStateQueryMiniProtocolNum
, localTxMonitorMiniProtocolNum
-- * Null Protocol Peers
, chainSyncPeerNull
, localStateQueryPeerNull
Expand All @@ -41,7 +46,9 @@ module Cardano.Network.NodeToClient
-- ** Codecs
, nodeToClientHandshakeCodec
, nodeToClientVersionCodec
, nodeToClientCodecCBORTerm
, nodeToClientVersionDataCodec
-- * Limits
, maximumMiniProtocolLimits
-- * Re-exports
, ConnectionId (..)
, MinimalInitiatorContext (..)
Expand Down Expand Up @@ -110,6 +117,18 @@ data NodeToClientProtocols appType ntcAddr bytes m a b = NodeToClientProtocols {
appType ntcAddr bytes m a b
}

localChainSyncMiniProtocolNum :: MiniProtocolNum
localChainSyncMiniProtocolNum = MiniProtocolNum 5

localTxSubmissionMiniProtocolNum :: MiniProtocolNum
localTxSubmissionMiniProtocolNum = MiniProtocolNum 6

localStateQueryMiniProtocolNum :: MiniProtocolNum
localStateQueryMiniProtocolNum = MiniProtocolNum 7

localTxMonitorMiniProtocolNum :: MiniProtocolNum
localTxMonitorMiniProtocolNum = MiniProtocolNum 9


-- | Make an 'OuroborosApplication' for the bundle of mini-protocols that
-- make up the overall node-to-client protocol.
Expand Down Expand Up @@ -216,7 +235,7 @@ connectTo snocket tracers versions path =
ConnectToArgs {
ctaHandshakeCodec = nodeToClientHandshakeCodec,
ctaHandshakeTimeLimits = noTimeLimitsHandshake,
ctaVersionDataCodec = cborTermVersionDataCodec nodeToClientCodecCBORTerm,
ctaVersionDataCodec = nodeToClientVersionDataCodec,
ctaConnectTracers = tracers,
ctaHandshakeCallbacks = HandshakeCallbacks acceptableVersion queryVersion
}
Expand Down Expand Up @@ -265,7 +284,7 @@ connectToWithMux snocket tracers versions path k =
ConnectToArgs {
ctaHandshakeCodec = nodeToClientHandshakeCodec,
ctaHandshakeTimeLimits = noTimeLimitsHandshake,
ctaVersionDataCodec = cborTermVersionDataCodec nodeToClientCodecCBORTerm,
ctaVersionDataCodec = nodeToClientVersionDataCodec,
ctaConnectTracers = tracers,
ctaHandshakeCallbacks = HandshakeCallbacks acceptableVersion queryVersion
}
Expand Down
4 changes: 2 additions & 2 deletions cardano-diffusion/lib/Cardano/Network/NodeToNode.hs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module Cardano.Network.NodeToNode
-- *** Codecs
, nodeToNodeHandshakeCodec
, nodeToNodeVersionCodec
, nodeToNodeCodecCBORTerm
, nodeToNodeVersionDataCodec
-- * Re-exports
, ExpandedInitiatorContext (..)
, MinimalInitiatorContext (..)
Expand Down Expand Up @@ -406,7 +406,7 @@ connectTo sn tr =
ConnectToArgs {
ctaHandshakeCodec = nodeToNodeHandshakeCodec,
ctaHandshakeTimeLimits = timeLimitsHandshake,
ctaVersionDataCodec = cborTermVersionDataCodec nodeToNodeCodecCBORTerm,
ctaVersionDataCodec = nodeToNodeVersionDataCodec,
ctaConnectTracers = tr,
ctaHandshakeCallbacks = HandshakeCallbacks acceptableVersion queryVersion
}
Expand Down
Loading