ouroboros-network-0.10.1.0: A networking layer for the Ouroboros blockchain protocol
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Network.NodeToClient

Description

This is the starting point for a module that will bring together the overall node to client protocol, as a collection of mini-protocols.

Synopsis

Documentation

nodeToClientProtocols :: NodeToClientProtocols appType addr bytes m a b -> NodeToClientVersion -> OuroborosApplicationWithMinimalCtx appType addr bytes m a b Source #

Make an OuroborosApplication for the bundle of mini-protocols that make up the overall node-to-client protocol.

This function specifies the wire format protocol numbers as well as the protocols that run for each NodeToClientVersion.

They are chosen to not overlap with the node to node protocol numbers. This is not essential for correctness, but is helpful to allow a single shared implementation of tools that can analyse both protocols, e.g. wireshark plugins.

data NodeToClientProtocols appType ntcAddr bytes m a b Source #

Record of node-to-client mini protocols.

Constructors

NodeToClientProtocols 

Fields

  • localChainSyncProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b

    local chain-sync mini-protocol

  • localTxSubmissionProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b

    local tx-submission mini-protocol

  • localStateQueryProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b

    local state-query mini-protocol

  • localTxMonitorProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b

    local tx-monitor mini-protocol

data NodeToClientVersion #

Instances

Instances details
Bounded NodeToClientVersion 
Instance details

Defined in Ouroboros.Network.NodeToClient.Version

Enum NodeToClientVersion 
Instance details

Defined in Ouroboros.Network.NodeToClient.Version

Show NodeToClientVersion 
Instance details

Defined in Ouroboros.Network.NodeToClient.Version

Eq NodeToClientVersion 
Instance details

Defined in Ouroboros.Network.NodeToClient.Version

Ord NodeToClientVersion 
Instance details

Defined in Ouroboros.Network.NodeToClient.Version

data NetworkConnectTracers addr vNumber #

Constructors

NetworkConnectTracers 

Fields

connectTo Source #

Arguments

:: LocalSnocket

callback constructed by withIOManager

-> NetworkConnectTracers LocalAddress NodeToClientVersion 
-> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx InitiatorMode LocalAddress ByteString IO a b)

A dictionary of protocol versions & applications to run on an established connection. The application to run will be chosen by initial handshake protocol (the highest shared version will be chosen).

-> FilePath

path of the unix socket or named pipe

-> IO () 

A specialised version of connectToNode. It is a general purpose function which can connect using any version of the protocol. This is mostly useful for future enhancements.

data NetworkServerTracers addr vNumber #

Constructors

NetworkServerTracers 

Fields

data NetworkMutableState addr #

Constructors

NetworkMutableState 

Fields

withServer :: LocalSnocket -> NetworkServerTracers LocalAddress NodeToClientVersion -> NetworkMutableState LocalAddress -> LocalSocket -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx ResponderMode LocalAddress ByteString IO a b) -> ErrorPolicies -> IO Void Source #

A specialised version of withServerNode.

Comments to withServer apply here as well.

data NetworkSubscriptionTracers withIPList addr vNumber Source #

IP subscription tracers.

Constructors

NetworkSubscriptionTracers 

Fields

ncSubscriptionWorker :: forall mode x y. HasInitiator mode ~ True => LocalSnocket -> NetworkClientSubcriptionTracers -> NetworkMutableState LocalAddress -> ClientSubscriptionParams () -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx mode LocalAddress ByteString IO x y) -> IO Void Source #

ncSubscriptionWorker which starts given application versions on each established connection.

Null Protocol Peers

chainSyncPeerNull :: forall (header :: Type) (point :: Type) (tip :: Type) m a. MonadDelay m => Peer (ChainSync header point tip) AsClient StIdle m a Source #

localStateQueryPeerNull :: forall (block :: Type) (point :: Type) (query :: Type -> Type) m a. MonadDelay m => Peer (LocalStateQuery block point query) AsClient StIdle m a Source #

localTxSubmissionPeerNull :: forall (tx :: Type) (reject :: Type) m a. MonadDelay m => Peer (LocalTxSubmission tx reject) AsClient StIdle m a Source #

localTxMonitorPeerNull :: forall (txid :: Type) (tx :: Type) (slot :: Type) m a. MonadDelay m => Peer (LocalTxMonitor txid tx slot) AsClient StIdle m a Source #

Re-exported network interface

newtype IOManager #

Constructors

IOManager 

Fields

withIOManager :: WithIOManager #

newtype LocalSocket #

Constructors

LocalSocket 

Fields

Instances

Instances details
Generic LocalSocket 
Instance details

Defined in Ouroboros.Network.Snocket

Associated Types

type Rep LocalSocket :: Type -> Type Source #

Show LocalSocket 
Instance details

Defined in Ouroboros.Network.Snocket

Eq LocalSocket 
Instance details

Defined in Ouroboros.Network.Snocket

type Rep LocalSocket 
Instance details

Defined in Ouroboros.Network.Snocket

type Rep LocalSocket = D1 ('MetaData "LocalSocket" "Ouroboros.Network.Snocket" "ouroboros-network-framework-0.10.1.0-6oc7eN9E7cu67rZ3WydsD2" 'True) (C1 ('MetaCons "LocalSocket" 'PrefixI 'True) (S1 ('MetaSel ('Just "getLocalHandle") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 LocalHandle)))

newtype LocalAddress #

Constructors

LocalAddress 

Instances

Instances details
Generic LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

Associated Types

type Rep LocalAddress :: Type -> Type Source #

Show LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

Eq LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

Ord LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

Hashable LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

type Rep LocalAddress 
Instance details

Defined in Ouroboros.Network.Snocket

type Rep LocalAddress = D1 ('MetaData "LocalAddress" "Ouroboros.Network.Snocket" "ouroboros-network-framework-0.10.1.0-6oc7eN9E7cu67rZ3WydsD2" 'True) (C1 ('MetaCons "LocalAddress" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFilePath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)))

Versions

newtype Versions vNum vData r #

Constructors

Versions 

Fields

Instances

Instances details
Functor (Versions vNum extra) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Version

Methods

fmap :: (a -> b) -> Versions vNum extra a -> Versions vNum extra b Source #

(<$) :: a -> Versions vNum extra b -> Versions vNum extra a Source #

Ord vNum => Semigroup (Versions vNum vData r) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Version

Methods

(<>) :: Versions vNum vData r -> Versions vNum vData r -> Versions vNum vData r Source #

sconcat :: NonEmpty (Versions vNum vData r) -> Versions vNum vData r Source #

stimes :: Integral b => b -> Versions vNum vData r -> Versions vNum vData r Source #

simpleSingletonVersions :: vNum -> vData -> r -> Versions vNum vData r #

foldMapVersions :: (Ord vNum, Foldable f, HasCallStack) => (x -> Versions vNum extra r) -> f x -> Versions vNum extra r #

combineVersions :: (Ord vNum, Foldable f, HasCallStack) => f (Versions vNum extra r) -> Versions vNum extra r #

Codecs

nodeToClientHandshakeCodec :: forall (m :: Type -> Type). MonadST m => Codec (Handshake NodeToClientVersion Term) DeserialiseFailure m ByteString #

Re-exports

data ConnectionId addr #

Constructors

ConnectionId 

Fields

Instances

Instances details
Functor ConnectionId 
Instance details

Defined in Ouroboros.Network.ConnectionId

Methods

fmap :: (a -> b) -> ConnectionId a -> ConnectionId b Source #

(<$) :: a -> ConnectionId b -> ConnectionId a Source #

ShowProxy addr => ShowProxy (ConnectionId addr :: Type) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Methods

showProxy :: Proxy (ConnectionId addr) -> String

Generic (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Associated Types

type Rep (ConnectionId addr) :: Type -> Type Source #

Methods

from :: ConnectionId addr -> Rep (ConnectionId addr) x Source #

to :: Rep (ConnectionId addr) x -> ConnectionId addr Source #

Show addr => Show (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Eq addr => Eq (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Methods

(==) :: ConnectionId addr -> ConnectionId addr -> Bool Source #

(/=) :: ConnectionId addr -> ConnectionId addr -> Bool Source #

Ord addr => Ord (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Hashable a => Hashable (ConnectionId a) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Typeable addr => NoThunks (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

Methods

noThunks :: Context -> ConnectionId addr -> IO (Maybe ThunkInfo)

wNoThunks :: Context -> ConnectionId addr -> IO (Maybe ThunkInfo)

showTypeOf :: Proxy (ConnectionId addr) -> String

type Rep (ConnectionId addr) 
Instance details

Defined in Ouroboros.Network.ConnectionId

type Rep (ConnectionId addr) = D1 ('MetaData "ConnectionId" "Ouroboros.Network.ConnectionId" "ouroboros-network-framework-0.10.1.0-6oc7eN9E7cu67rZ3WydsD2" 'False) (C1 ('MetaCons "ConnectionId" 'PrefixI 'True) (S1 ('MetaSel ('Just "localAddress") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 addr) :*: S1 ('MetaSel ('Just "remoteAddress") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 addr)))

newtype ResponderContext addr #

Constructors

ResponderContext 

Instances

Instances details
Functor ResponderContext 
Instance details

Defined in Ouroboros.Network.Context

networkErrorPolicies :: ErrorPolicies Source #

ErrorPolicies for client application. Additional rules can be added by means of a Semigroup instance of ErrorPolicies.

This error policies will try to preserve subscriptionWorker, e.g. if the connect function throws an IOException we will suspend it for a shortDelay, and try to re-connect.

This allows to recover from a situation where a node temporarily shutsdown, or running a client application which is subscribed two more than one node (possibly over network).

data ErrorPolicy where #

Constructors

ErrorPolicy :: forall e. Exception e => (e -> Maybe (SuspendDecision DiffTime)) -> ErrorPolicy 

Instances

Instances details
Show ErrorPolicy 
Instance details

Defined in Ouroboros.Network.ErrorPolicy

data WithAddr addr a #

Constructors

WithAddr 

Fields

Instances

Instances details
(Show addr, Show a) => Show (WithAddr addr a) 
Instance details

Defined in Ouroboros.Network.ErrorPolicy

Methods

showsPrec :: Int -> WithAddr addr a -> ShowS Source #

show :: WithAddr addr a -> String Source #

showList :: [WithAddr addr a] -> ShowS Source #

data SuspendDecision t #

Constructors

SuspendPeer !t !t 
SuspendConsumer !t 
Throw 

Instances

Instances details
Functor SuspendDecision 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

Ord t => Semigroup (SuspendDecision t) 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

Show t => Show (SuspendDecision t) 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

Eq t => Eq (SuspendDecision t) 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

Ord t => Ord (SuspendDecision t) 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

SAct (SuspendDecision Time) (Maybe (PeerState m)) 
Instance details

Defined in Ouroboros.Network.Subscription.PeerState

Methods

(<|) :: Maybe (PeerState m) -> SuspendDecision Time -> Maybe (PeerState m)

data TraceSendRecv ps where #

Constructors

TraceSendMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps 
TraceRecvMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps 

Instances

Instances details
Show (AnyMessageAndAgency ps) => Show (TraceSendRecv ps) 
Instance details

Defined in Ouroboros.Network.Driver.Simple

data Handshake (vNumber :: k) (vParams :: k1) #

Instances

Instances details
ShowProxy (Handshake vNumber vParams :: Type) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showProxy :: Proxy (Handshake vNumber vParams) -> String

Show (ClientHasAgency st) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showsPrec :: Int -> ClientHasAgency st -> ShowS Source #

show :: ClientHasAgency st -> String Source #

showList :: [ClientHasAgency st] -> ShowS Source #

Show (ServerHasAgency st) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showsPrec :: Int -> ServerHasAgency st -> ShowS Source #

show :: ServerHasAgency st -> String Source #

showList :: [ServerHasAgency st] -> ShowS Source #

(Show vNumber, Show vParams) => Show (Message (Handshake vNumber vParams) from to) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showsPrec :: Int -> Message (Handshake vNumber vParams) from to -> ShowS Source #

show :: Message (Handshake vNumber vParams) from to -> String Source #

showList :: [Message (Handshake vNumber vParams) from to] -> ShowS Source #

Protocol (Handshake vNumber vParams) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Associated Types

data Message (Handshake vNumber vParams) st st'

data ClientHasAgency st

data ServerHasAgency st

data NobodyHasAgency st

Methods

exclusionLemma_ClientAndServerHaveAgency :: forall (st :: Handshake vNumber vParams). ClientHasAgency st -> ServerHasAgency st -> Void

exclusionLemma_NobodyAndClientHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ClientHasAgency st -> Void

exclusionLemma_NobodyAndServerHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ServerHasAgency st -> Void

data ClientHasAgency (st :: Handshake vNumber vParams) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data ClientHasAgency (st :: Handshake vNumber vParams) where
  • TokPropose :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. ClientHasAgency ('StPropose :: Handshake vNumber vParams)
data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) where
data NobodyHasAgency (st :: Handshake vNumber vParams) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data NobodyHasAgency (st :: Handshake vNumber vParams) where
  • TokDone :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. NobodyHasAgency ('StDone :: Handshake vNumber vParams)
data ServerHasAgency (st :: Handshake vNumber vParams) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data ServerHasAgency (st :: Handshake vNumber vParams) where
  • TokConfirm :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. ServerHasAgency ('StConfirm :: Handshake vNumber vParams)

data LocalAddresses addr #

Constructors

LocalAddresses 

Fields

Instances

Instances details
Semigroup (LocalAddresses addr) 
Instance details

Defined in Ouroboros.Network.Subscription.Worker

Show addr => Show (LocalAddresses addr) 
Instance details

Defined in Ouroboros.Network.Subscription.Worker

Eq addr => Eq (LocalAddresses addr) 
Instance details

Defined in Ouroboros.Network.Subscription.Worker

type HandshakeTr ntcAddr ntcVersion = WithMuxBearer (ConnectionId ntcAddr) (TraceSendRecv (Handshake ntcVersion Term)) Source #