Safe Haskell | None |
---|---|
Language | Haskell2010 |
Intended for qualified import
Synopsis
-
data
Handlers
m peer blk =
Handlers
{
- hChainSyncServer :: Follower m blk ( WithPoint blk ( Serialised blk)) -> ChainSyncServer ( Serialised blk) ( Point blk) ( Tip blk) m ()
- hTxSubmissionServer :: LocalTxSubmissionServer ( GenTx blk) ( ApplyTxErr blk) m ()
- hStateQueryServer :: LocalStateQueryServer blk ( Point blk) ( Query blk) m ()
- hTxMonitorServer :: LocalTxMonitorServer ( GenTxId blk) ( GenTx blk) SlotNo m ()
- 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
- type ClientCodecs blk m = Codecs' blk blk DeserialiseFailure m ByteString ByteString ByteString ByteString
- type Codecs blk e m bCS bTX bSQ bTM = Codecs' blk ( Serialised blk) e m bCS bTX bSQ bTM
-
data
Codecs'
blk serialisedBlk e m bCS bTX bSQ bTM =
Codecs
{
- cChainSyncCodec :: Codec ( ChainSync serialisedBlk ( Point blk) ( Tip blk)) e m bCS
- cTxSubmissionCodec :: Codec ( LocalTxSubmission ( GenTx blk) ( ApplyTxErr blk)) e m bTX
- cStateQueryCodec :: Codec ( LocalStateQuery blk ( Point blk) ( Query blk)) e m bSQ
- cTxMonitorCodec :: Codec ( LocalTxMonitor ( GenTxId blk) ( GenTx blk) SlotNo ) e m bTM
- type DefaultCodecs blk m = Codecs' blk ( Serialised blk) DeserialiseFailure m ByteString ByteString ByteString ByteString
- clientCodecs :: forall m blk. ( MonadST m, SerialiseNodeToClientConstraints blk, ShowQuery ( BlockQuery blk), StandardHash blk, Serialise ( HeaderHash blk)) => CodecConfig blk -> BlockNodeToClientVersion blk -> NodeToClientVersion -> ClientCodecs blk m
- defaultCodecs :: forall m blk. ( MonadST m, SerialiseNodeToClientConstraints blk, ShowQuery ( BlockQuery blk), StandardHash blk, Serialise ( HeaderHash blk)) => CodecConfig blk -> BlockNodeToClientVersion blk -> NodeToClientVersion -> DefaultCodecs blk m
- identityCodecs :: ( Monad m, QueryLedger blk) => Codecs blk CodecFailure m ( AnyMessage ( ChainSync ( Serialised blk) ( Point blk) ( Tip blk))) ( AnyMessage ( LocalTxSubmission ( GenTx blk) ( ApplyTxErr blk))) ( AnyMessage ( LocalStateQuery blk ( Point blk) ( Query blk))) ( AnyMessage ( LocalTxMonitor ( GenTxId blk) ( GenTx blk) SlotNo ))
- type Tracers m peer blk e = Tracers' peer blk e ( Tracer m)
-
data
Tracers'
peer blk e f =
Tracers
{
- tChainSyncTracer :: f ( TraceLabelPeer peer ( TraceSendRecv ( ChainSync ( Serialised blk) ( Point blk) ( Tip blk))))
- tTxSubmissionTracer :: f ( TraceLabelPeer peer ( TraceSendRecv ( LocalTxSubmission ( GenTx blk) ( ApplyTxErr blk))))
- tStateQueryTracer :: f ( TraceLabelPeer peer ( TraceSendRecv ( LocalStateQuery blk ( Point blk) ( Query blk))))
- tTxMonitorTracer :: f ( TraceLabelPeer peer ( TraceSendRecv ( LocalTxMonitor ( GenTxId blk) ( GenTx blk) SlotNo )))
- nullTracers :: Monad m => Tracers m peer blk e
- showTracers :: ( Show peer, Show ( GenTx blk), Show ( GenTxId blk), Show ( ApplyTxErr blk), ShowQuery ( BlockQuery blk), HasHeader blk) => Tracer m String -> Tracers m peer blk e
- type App m peer bytes a = peer -> Channel m bytes -> m (a, Maybe bytes)
-
data
Apps
m peer bCS bTX bSQ bTM a =
Apps
{
- aChainSyncServer :: App m peer bCS a
- aTxSubmissionServer :: App m peer bTX a
- aStateQueryServer :: App m peer bSQ a
- aTxMonitorServer :: App m peer bTM a
- 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 ()
- responder :: NodeToClientVersion -> Apps m ( ConnectionId peer) b b b b a -> OuroborosApplication ' ResponderMode peer b m Void a
Handlers
data Handlers m peer blk Source #
Protocol handlers for node-to-client (local) communication
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 ClientCodecs blk m = Codecs' blk blk DeserialiseFailure m ByteString ByteString ByteString ByteString Source #
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
.
Codecs | |
|
type DefaultCodecs blk m = Codecs' blk ( Serialised blk) DeserialiseFailure m ByteString ByteString ByteString ByteString Source #
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.
identityCodecs :: ( Monad m, QueryLedger blk) => Codecs blk CodecFailure m ( AnyMessage ( ChainSync ( Serialised blk) ( Point blk) ( Tip blk))) ( AnyMessage ( LocalTxSubmission ( GenTx blk) ( ApplyTxErr blk))) ( AnyMessage ( LocalStateQuery blk ( Point blk) ( Query blk))) ( AnyMessage ( LocalTxMonitor ( GenTxId blk) ( GenTx blk) SlotNo )) Source #
Identity codecs used in tests.
ClientCodecs
Tracers
type Tracers m peer blk e = Tracers' peer blk e ( Tracer m) Source #
A record of
Tracer
s for the different protocols.
data Tracers' peer blk e f Source #
Tracers | |
|
nullTracers :: Monad m => Tracers m peer blk e Source #
Use a
nullTracer
for each protocol.
showTracers :: ( Show peer, Show ( GenTx blk), Show ( GenTxId blk), Show ( ApplyTxErr blk), ShowQuery ( BlockQuery blk), HasHeader blk) => Tracer m String -> Tracers m peer blk e Source #
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
Apps | |
|
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.