Skip to content

Commit 772809e

Browse files
Expose transaction size to tx submission (#4926)
* Added callback providing tx size to txSubmissionInbound * changelog update
1 parent d900a38 commit 772809e

File tree

4 files changed

+16
-3
lines changed

4 files changed

+16
-3
lines changed

ouroboros-network/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
* Added `daMinBigLedgerPeersForTrustedState` to `ArgumentsExtra` when starting diffusion.
2424
It is used by `outboundConnectionsState` when signaling trust state when syncing in
2525
Genesis mode. Default value is provided by the Configuration module.
26+
* `txSubmissionInbound` takes an additional callback which exposes
27+
CBOR-encoded transaction size as it is when transmitted over the
28+
network, except for some top level wrapping (cf. PR#4926 description)
2629

2730
### Non-Breaking changes
2831

ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/TxSubmission/AppV1.hs

+1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ txSubmissionSimulation tracer maxUnacked outboundTxs
138138
maxUnacked
139139
(getMempoolReader inboundMempool)
140140
(getMempoolWriter inboundMempool)
141+
getTxSize
141142
NodeToNodeV_7
142143

143144
prop_txSubmission :: Positive Word16

ouroboros-network/src/Ouroboros/Network/TxSubmission/Inbound.hs

+11-3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import Network.TypedProtocol.Pipelined (N, Nat (..), natToInt)
4444
import Ouroboros.Network.NodeToNode.Version (NodeToNodeVersion)
4545
import Ouroboros.Network.Protocol.Limits
4646
import Ouroboros.Network.Protocol.TxSubmission2.Server
47+
import Ouroboros.Network.SizeInBytes
4748
import Ouroboros.Network.Protocol.TxSubmission2.Type
4849
import Ouroboros.Network.TxSubmission.Inbound.Types (ProcessedTxCount (..),
4950
TraceTxSubmissionInbound (..), TxSubmissionMempoolWriter (..),
@@ -135,9 +136,10 @@ txSubmissionInbound
135136
-> NumTxIdsToAck -- ^ Maximum number of unacknowledged txids allowed
136137
-> TxSubmissionMempoolReader txid tx idx m
137138
-> TxSubmissionMempoolWriter txid tx idx m
139+
-> (tx -> SizeInBytes) -- ^ get size of CBOR encoded transaction
138140
-> NodeToNodeVersion
139141
-> TxSubmissionServerPipelined txid tx m ()
140-
txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter _version =
142+
txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter txSize _version =
141143
TxSubmissionServerPipelined $ do
142144
#ifdef TXSUBMISSION_DELAY
143145
-- make the client linger before asking for tx's and expending
@@ -262,8 +264,14 @@ txSubmissionInbound tracer (NumTxIdsToAck maxUnacked) mpReader mpWriter _version
262264
-- for. We should never get a tx we did not ask for. We take a strict
263265
-- approach to this and check it.
264266
--
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]
267275

268276
txidsReceived = Map.keysSet txsMap
269277
txidsRequested = Set.fromList txids

ouroboros-network/src/Ouroboros/Network/TxSubmission/Outbound.hs

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Ouroboros.Network.ControlMessage (ControlMessage, ControlMessageSTM,
2727
timeoutWithControlMessage)
2828
import Ouroboros.Network.NodeToNode.Version (NodeToNodeVersion)
2929
import Ouroboros.Network.Protocol.TxSubmission2.Client
30+
import Ouroboros.Network.SizeInBytes
3031
import Ouroboros.Network.Protocol.TxSubmission2.Type
3132
import Ouroboros.Network.TxSubmission.Mempool.Reader (MempoolSnapshot (..),
3233
TxSubmissionMempoolReader (..))

0 commit comments

Comments
 (0)