|
| 1 | +{-# LANGUAGE FlexibleContexts #-} |
| 2 | +{-# LANGUAGE StandaloneDeriving #-} |
| 3 | + |
1 | 4 | module DMQ.NodeToClient.LocalMsgSubmission where |
2 | 5 |
|
3 | 6 | import Control.Concurrent.Class.MonadSTM |
4 | 7 | import Control.Tracer |
5 | | -import Data.Maybe |
6 | 8 |
|
7 | 9 | import DMQ.Protocol.LocalMsgSubmission.Server |
8 | 10 | import DMQ.Protocol.LocalMsgSubmission.Type |
9 | | -import Ouroboros.Network.TxSubmission.Inbound.V2 |
| 11 | +import Ouroboros.Network.TxSubmission.Mempool.Simple |
10 | 12 |
|
11 | 13 | -- | Local transaction submission server, for adding txs to the 'Mempool' |
12 | 14 | -- |
13 | 15 | localMsgSubmissionServer :: |
14 | 16 | 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 } = |
19 | 22 | pure server |
20 | 23 | 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) |
26 | 28 |
|
27 | 29 | 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] |
32 | 33 |
|
33 | 34 | , recvMsgDone = () |
34 | 35 | } |
35 | 36 |
|
36 | 37 |
|
37 | | -data TraceLocalMsgSubmission msg msgid reject = |
38 | | - TraceReceivedMsg msg |
| 38 | +data TraceLocalMsgSubmission sig sigid = |
| 39 | + TraceReceivedMsg sig |
39 | 40 | -- ^ 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) |
0 commit comments