@@ -44,6 +44,7 @@ import Network.TypedProtocol.Pipelined (N, Nat (..), natToInt)
44
44
import Ouroboros.Network.NodeToNode.Version (NodeToNodeVersion )
45
45
import Ouroboros.Network.Protocol.Limits
46
46
import Ouroboros.Network.Protocol.TxSubmission2.Server
47
+ import Ouroboros.Network.SizeInBytes
47
48
import Ouroboros.Network.Protocol.TxSubmission2.Type
48
49
import Ouroboros.Network.TxSubmission.Inbound.Types (ProcessedTxCount (.. ),
49
50
TraceTxSubmissionInbound (.. ), TxSubmissionMempoolWriter (.. ),
@@ -135,9 +136,10 @@ txSubmissionInbound
135
136
-> NumTxIdsToAck -- ^ Maximum number of unacknowledged txids allowed
136
137
-> TxSubmissionMempoolReader txid tx idx m
137
138
-> TxSubmissionMempoolWriter txid tx idx m
139
+ -> (tx -> SizeInBytes ) -- ^ get size of CBOR encoded transaction
138
140
-> NodeToNodeVersion
139
141
-> TxSubmissionServerPipelined txid tx m ()
140
- txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter _version =
142
+ txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter txSize _version =
141
143
TxSubmissionServerPipelined $ do
142
144
#ifdef TXSUBMISSION_DELAY
143
145
-- make the client linger before asking for tx's and expending
@@ -262,8 +264,14 @@ txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter _version
262
264
-- for. We should never get a tx we did not ask for. We take a strict
263
265
-- approach to this and check it.
264
266
--
265
- let txsMap :: Map txid tx
266
- txsMap = Map. fromList [ (txId tx, tx) | tx <- txs ]
267
+ let availableTxidsMap = availableTxids st
268
+ txsMap :: Map txid tx
269
+ txsMap = Map. fromList [ (txId', assert sizesMatch tx)
270
+ | tx <- txs
271
+ , let txId' = txId tx
272
+ calcSize = Just $ txSize tx
273
+ advertisedSize = availableTxidsMap Map. !? txId'
274
+ sizesMatch = calcSize == advertisedSize]
267
275
268
276
txidsReceived = Map. keysSet txsMap
269
277
txidsRequested = Set. fromList txids
0 commit comments