ouroboros-consensus-0.1.0.1: Consensus layer for the Ouroboros blockchain protocol
Safe Haskell None
Language Haskell2010

Ouroboros.Consensus.Network.NodeToClient

Description

Intended for qualified import

Synopsis

Handlers

mkHandlers :: forall m blk remotePeer localPeer. ( IOLike m, LedgerSupportsMempool blk, LedgerSupportsProtocol blk, QueryLedger blk, ConfigSupportsNode blk) => NodeKernelArgs m remotePeer localPeer blk -> NodeKernel m remotePeer localPeer blk -> Handlers m localPeer blk Source #

Codecs

type Codecs blk e m bCS bTX bSQ bTM = Codecs' blk ( Serialised blk) e m bCS bTX bSQ bTM Source #

data Codecs' blk serialisedBlk e m bCS bTX bSQ bTM Source #

Node-to-client protocol codecs needed to run Handlers .

clientCodecs :: forall m blk. ( MonadST m, SerialiseNodeToClientConstraints blk, ShowQuery ( BlockQuery blk), StandardHash blk, Serialise ( HeaderHash blk)) => CodecConfig blk -> BlockNodeToClientVersion blk -> NodeToClientVersion -> ClientCodecs blk m Source #

Protocol codecs for the node-to-client protocols which serialise deserialise blocks in chain-sync/ protocol.

defaultCodecs :: forall m blk. ( MonadST m, SerialiseNodeToClientConstraints blk, ShowQuery ( BlockQuery blk), StandardHash blk, Serialise ( HeaderHash blk)) => CodecConfig blk -> BlockNodeToClientVersion blk -> NodeToClientVersion -> DefaultCodecs blk m Source #

Protocol codecs for the node-to-client protocols

We pass the BlockConfig here, even though it is currently unused. If at any point we want to introduce local protocols that for example send Byron blocks or headers across, we will need to have the epoch size, which comes from the Byron config. Unlike the full TopLevelConfig , it should not be difficult for a wallet to construct the BlockConfig .

NOTE: Somewhat confusingly, pcChainSyncCodec currently does send Byron blocks across, but it does not deserialize them (the user of the codec is itself responsible for doing that), which is why it currently does not need the config.

Implementation mode: currently none of the consensus encoders/decoders do anything different based on the version, so _version is unused; it's just that not all codecs are used, depending on the version number.

ClientCodecs

Tracers

type Tracers m peer blk e = Tracers' peer blk e ( Tracer m) Source #

A record of Tracer s for the different protocols.

nullTracers :: Monad m => Tracers m peer blk e Source #

Use a nullTracer for each protocol.

Applications

type App m peer bytes a = peer -> Channel m bytes -> m (a, Maybe bytes) Source #

A node-to-client application

data Apps m peer bCS bTX bSQ bTM a Source #

Applications for the node-to-client (i.e., local) protocols

See MuxApplication

Constructors

Apps

Fields

mkApps :: forall m remotePeer localPeer blk e bCS bTX bSQ bTM. ( IOLike m, Exception e, ShowProxy blk, ShowProxy ( ApplyTxErr blk), ShowProxy ( BlockQuery blk), ShowProxy ( GenTx blk), ShowProxy ( GenTxId blk), ShowQuery ( BlockQuery blk)) => NodeKernel m remotePeer localPeer blk -> Tracers m localPeer blk e -> Codecs blk e m bCS bTX bSQ bTM -> Handlers m localPeer blk -> Apps m localPeer bCS bTX bSQ bTM () Source #

Construct the NetworkApplication for the node-to-client protocols

Projections

responder :: NodeToClientVersion -> Apps m ( ConnectionId peer) b b b b a -> OuroborosApplication ' ResponderMode peer b m Void a Source #

A projection from NetworkApplication to a server-side OuroborosApplication for the node-to-client protocols.