ouroboros-network-0.1.0.1: A networking layer for the Ouroboros blockchain protocol
Safe Haskell Safe-Inferred
Language Haskell2010

Ouroboros.Network.Protocol.TxSubmission2.Type

Description

The type of the transaction submission protocol.

This is used to relay transactions between nodes.

Synopsis

Documentation

type TxSizeInBytes = Word32 Source #

Transactions are typically not big, but in principle in future we could have ones over 64k large.

data TxSubmission2 txid tx where Source #

The kind of the transaction-submission protocol, and the types of the states in the protocol state machine.

We describe this protocol using the label "client" for the peer that is submitting transactions, and "server" for the one receiving them. The protocol is however pull based, so it is typically the server that has agency in this protocol. This is the opposite of the chain sync and block fetch protocols, but that makes sense because the information flow is also reversed: submitting transactions rather than receiving headers and blocks.

Because these client/server labels are somewhat confusing in this case, we sometimes clarify by using the terms inbound and outbound. This refers to whether transactions are flowing towards a peer or away, and thus indicates what role the peer is playing.

Constructors

StInit :: TxSubmission2 txid tx

Initial protocol message.

StIdle :: TxSubmission2 txid tx

The server (inbound side) has agency; it can either terminate, ask for transaction identifiers or ask for transactions.

There is no timeout in this state.

StTxIds :: StBlockingStyle -> TxSubmission2 txid tx

The client (outbound side) has agency; it must reply with a list of transaction identifiers that it wishes to submit.

There are two sub-states for this, for blocking and non-blocking cases.

StTxs :: TxSubmission2 txid tx

The client (outbound side) has agency; it must reply with the list of transactions.

StDone :: TxSubmission2 txid tx

Nobody has agency; termination state.

Instances

Instances details
( ShowProxy txid, ShowProxy tx) => ShowProxy ( TxSubmission2 txid tx :: Type ) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

Show ( ClientHasAgency st) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

Show ( ServerHasAgency st) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

( Eq txid, Eq tx) => Eq ( Message ( TxSubmission2 txid tx) from to) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

( Show txid, Show tx) => Show ( Message ( TxSubmission2 txid tx) from to) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

Protocol ( TxSubmission2 txid tx) Source #

There are some constraints of the protocol that are not captured in the types of the messages, but are documented with the messages. Violation of these constraints is also a protocol error. The constraints are intended to ensure that implementations are able to work in bounded space.

Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

ShowProxy (' StIdle :: TxSubmission2 txid tx) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

data Message ( TxSubmission2 txid tx) (from :: TxSubmission2 txid tx) (to :: TxSubmission2 txid tx) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

data Message ( TxSubmission2 txid tx) (from :: TxSubmission2 txid tx) (to :: TxSubmission2 txid tx) where
data ClientHasAgency (st :: TxSubmission2 txid tx) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

data ClientHasAgency (st :: TxSubmission2 txid tx) where
data ServerHasAgency (st :: TxSubmission2 txid tx) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

data ServerHasAgency (st :: TxSubmission2 txid tx) where
data NobodyHasAgency (st :: TxSubmission2 txid tx) Source #
Instance details

Defined in Ouroboros.Network.Protocol.TxSubmission2.Type

data NobodyHasAgency (st :: TxSubmission2 txid tx) where

data StBlockingStyle where Source #

Constructors

StBlocking :: StBlockingStyle

In this sub-state the reply need not be prompt. There is no timeout.

StNonBlocking :: StBlockingStyle

In this state the peer must reply. There is a timeout.

data BlockingReplyList (blocking :: StBlockingStyle ) a where Source #

We have requests for lists of things. In the blocking case the corresponding reply must be non-empty, whereas in the non-blocking case and empty reply is fine.