Skip to content

Commit ff8b255

Browse files
localmsgsubmission: codec and server changes
1 parent 08c84ff commit ff8b255

File tree

2 files changed

+29
-24
lines changed

2 files changed

+29
-24
lines changed
Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,46 @@
1+
{-# LANGUAGE FlexibleContexts #-}
2+
{-# LANGUAGE StandaloneDeriving #-}
3+
14
module DMQ.NodeToClient.LocalMsgSubmission where
25

36
import Control.Concurrent.Class.MonadSTM
47
import Control.Tracer
5-
import Data.Maybe
68

79
import DMQ.Protocol.LocalMsgSubmission.Server
810
import DMQ.Protocol.LocalMsgSubmission.Type
9-
import Ouroboros.Network.TxSubmission.Inbound.V2
11+
import Ouroboros.Network.TxSubmission.Mempool.Simple
1012

1113
-- | Local transaction submission server, for adding txs to the 'Mempool'
1214
--
1315
localMsgSubmissionServer ::
1416
MonadSTM m
15-
=> Tracer m (TraceLocalMsgSubmission msg msgid SigMempoolFail)
16-
-> TxSubmissionMempoolWriter msgid msg idx m
17-
-> m (LocalMsgSubmissionServer msg m ())
18-
localMsgSubmissionServer tracer TxSubmissionMempoolWriter { mempoolAddTxs } =
17+
=> Tracer m (TraceLocalMsgSubmission sig sigid)
18+
-> MempoolWriter sigid sig failure idx m
19+
-- ^ duplicate error tag in case the mempool returns the empty list on failure
20+
-> m (LocalMsgSubmissionServer sig m ())
21+
localMsgSubmissionServer tracer MempoolWriter { mempoolAddTxs } =
1922
pure server
2023
where
21-
failure =
22-
-- TODO remove dummy hardcode when mempool returns reason
23-
(SubmitFail SigExpired, server) <$ traceWith tracer (TraceSubmitFailure SigExpired)
24-
success msgid =
25-
(SubmitSuccess, server) <$ traceWith tracer (TraceSubmitAccept msgid)
24+
process (sigid, e@(SubmitFail reason)) =
25+
(e, server) <$ traceWith tracer (TraceSubmitFailure sigid reason)
26+
process (sigid, success) =
27+
(success, server) <$ traceWith tracer (TraceSubmitAccept sigid)
2628

2729
server = LocalTxSubmissionServer {
28-
recvMsgSubmitTx = \msg -> do
29-
traceWith tracer $ TraceReceivedMsg msg
30-
-- TODO mempool should return 'SubmitResult'
31-
maybe failure success . listToMaybe =<< mempoolAddTxs [msg]
30+
recvMsgSubmitTx = \sig -> do
31+
traceWith tracer $ TraceReceivedMsg sig
32+
process . head =<< mempoolAddTxs [sig]
3233

3334
, recvMsgDone = ()
3435
}
3536

3637

37-
data TraceLocalMsgSubmission msg msgid reject =
38-
TraceReceivedMsg msg
38+
data TraceLocalMsgSubmission sig sigid =
39+
TraceReceivedMsg sig
3940
-- ^ A transaction was received.
40-
| TraceSubmitFailure reject
41-
| TraceSubmitAccept msgid
42-
deriving Show
41+
| TraceSubmitFailure sigid (MempoolAddFail sig)
42+
| TraceSubmitAccept sigid
43+
44+
deriving instance
45+
(Show sig, Show sigid, Show (MempoolAddFail sig))
46+
=> Show (TraceLocalMsgSubmission sig sigid)

dmq-node/src/DMQ/Protocol/LocalMsgSubmission/Codec.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import Cardano.KESAgent.KES.Crypto (Crypto (..))
1717
import DMQ.Protocol.LocalMsgSubmission.Type
1818
import DMQ.Protocol.SigSubmission.Codec qualified as SigSubmission
1919
import DMQ.Protocol.SigSubmission.Type (Sig (..))
20+
import DMQ.Protocol.SigSubmission.Validate
2021

2122
import Network.TypedProtocol.Codec.CBOR
2223
import Ouroboros.Network.Protocol.LocalTxSubmission.Codec qualified as LTX
@@ -26,21 +27,21 @@ codecLocalMsgSubmission
2627
( MonadST m
2728
, Crypto crypto
2829
)
29-
=> (SigMempoolFail -> CBOR.Encoding)
30-
-> (forall s. CBOR.Decoder s SigMempoolFail)
30+
=> (MempoolAddFail (Sig crypto) -> CBOR.Encoding)
31+
-> (forall s. CBOR.Decoder s (MempoolAddFail (Sig crypto)))
3132
-> AnnotatedCodec (LocalMsgSubmission (Sig crypto)) CBOR.DeserialiseFailure m ByteString
3233
codecLocalMsgSubmission =
3334
LTX.anncodecLocalTxSubmission' SigWithBytes SigSubmission.encodeSig SigSubmission.decodeSig
3435

35-
encodeReject :: SigMempoolFail -> CBOR.Encoding
36+
encodeReject :: MempoolAddFail (Sig crypto) -> CBOR.Encoding
3637
encodeReject = \case
3738
SigInvalid reason -> CBOR.encodeListLen 2 <> CBOR.encodeWord 0 <> CBOR.encodeString reason
3839
SigDuplicate -> CBOR.encodeListLen 1 <> CBOR.encodeWord 1
3940
SigExpired -> CBOR.encodeListLen 1 <> CBOR.encodeWord 2
4041
SigResultOther reason
4142
-> CBOR.encodeListLen 2 <> CBOR.encodeWord 3 <> CBOR.encodeString reason
4243

43-
decodeReject :: CBOR.Decoder s SigMempoolFail
44+
decodeReject :: CBOR.Decoder s (MempoolAddFail (Sig crypto))
4445
decodeReject = do
4546
len <- CBOR.decodeListLen
4647
tag <- CBOR.decodeWord

0 commit comments

Comments
 (0)