Skip to content

Commit 47a0ffe

Browse files
committed
WIP mempool txlimits consolidation
This commit is a squash of fb968f8 down to its intersection with origin/main.
1 parent 468ec24 commit 47a0ffe

File tree

66 files changed

+1302
-1152
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1302
-1152
lines changed

ouroboros-consensus-cardano/ouroboros-consensus-cardano.cabal

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,11 @@ library unstable-byronspec
198198
cardano-ledger-byron-test,
199199
cborg >=0.2.2 && <0.3,
200200
containers >=0.5 && <0.7,
201+
measures,
201202
mtl,
202203
nothunks,
203204
ouroboros-consensus ^>=0.20,
205+
ouroboros-network-api,
204206
serialise ^>=0.2,
205207
small-steps,
206208
transformers,
@@ -350,11 +352,13 @@ test-suite shelley-test
350352
constraints,
351353
containers,
352354
filepath,
355+
measures,
353356
microlens,
354357
ouroboros-consensus:{ouroboros-consensus, unstable-consensus-testlib},
355358
ouroboros-consensus-cardano,
356359
ouroboros-consensus-diffusion:unstable-diffusion-testlib,
357360
ouroboros-consensus-protocol,
361+
ouroboros-network-api,
358362
sop-core,
359363
strict-sop-core,
360364
tasty,
@@ -395,6 +399,7 @@ library unstable-cardano-testlib
395399
cardano-slotting,
396400
cardano-strict-containers,
397401
containers,
402+
measures,
398403
microlens,
399404
mtl,
400405
ouroboros-consensus:{ouroboros-consensus, unstable-consensus-testlib},

ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/Forge.hs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,11 @@ import Ouroboros.Consensus.Config
4040
import Ouroboros.Consensus.Ledger.Abstract
4141
import Ouroboros.Consensus.Ledger.SupportsMempool
4242
(LedgerSupportsMempool (..), txForgetValidated)
43-
import qualified Ouroboros.Consensus.Mempool as Mempool
4443
import Ouroboros.Consensus.Protocol.PBFT
4544

4645
forgeByronBlock ::
4746
HasCallStack
4847
=> TopLevelConfig ByronBlock
49-
-> Mempool.TxOverrides ByronBlock -- ^ How to override max tx capacity
50-
-- defined by ledger
5148
-> BlockNo -- ^ Current block number
5249
-> SlotNo -- ^ Current slot number
5350
-> TickedLedgerState ByronBlock -- ^ Current ledger
@@ -123,21 +120,21 @@ initBlockPayloads = BlockPayloads
123120
forgeRegularBlock ::
124121
HasCallStack
125122
=> BlockConfig ByronBlock
126-
-> Mempool.TxOverrides ByronBlock -- ^ How to override max tx capacity
127-
-- defined by ledger
128123
-> BlockNo -- ^ Current block number
129124
-> SlotNo -- ^ Current slot number
130125
-> TickedLedgerState ByronBlock -- ^ Current ledger
131126
-> [Validated (GenTx ByronBlock)] -- ^ Txs to consider adding in the block
132127
-> PBftIsLeader PBftByronCrypto -- ^ Leader proof ('IsLeader')
133128
-> ByronBlock
134-
forgeRegularBlock cfg maxTxCapacityOverrides bno sno st txs isLeader =
129+
forgeRegularBlock cfg bno sno st txs isLeader =
135130
forge $
136131
forgePBftFields
137132
(mkByronContextDSIGN cfg)
138133
isLeader
139134
(reAnnotate byronProtVer $ Annotated toSign ())
140135
where
136+
lcfg = byronGenesisConfig cfg
137+
141138
epochSlots :: CC.Slot.EpochSlots
142139
epochSlots = byronEpochSlots cfg
143140

@@ -146,7 +143,7 @@ forgeRegularBlock cfg maxTxCapacityOverrides bno sno st txs isLeader =
146143
foldr
147144
extendBlockPayloads
148145
initBlockPayloads
149-
(takeLargestPrefixThatFits maxTxCapacityOverrides st txs)
146+
(takeLargestPrefixThatFits lcfg st txs)
150147

151148
txPayload :: CC.UTxO.TxPayload
152149
txPayload = CC.UTxO.mkTxPayload (bpTxs blockPayloads)

ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/Mempool.hs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,29 @@ import Ouroboros.Consensus.Byron.Ledger.Serialisation
7171
(byronBlockEncodingOverhead)
7272
import Ouroboros.Consensus.Ledger.Abstract
7373
import Ouroboros.Consensus.Ledger.SupportsMempool
74-
import Ouroboros.Consensus.Mempool
7574
import Ouroboros.Consensus.Util (ShowProxy (..))
7675
import Ouroboros.Consensus.Util.Condense
76+
import Ouroboros.Consensus.Util.Orphans ()
77+
import Ouroboros.Network.SizeInBytes (SizeInBytes (..))
7778

7879
{-------------------------------------------------------------------------------
7980
TxLimits
8081
-------------------------------------------------------------------------------}
8182

8283
instance TxLimits ByronBlock where
83-
type TxMeasure ByronBlock = ByteSize
84-
txMeasure _st = ByteSize . txInBlockSize . txForgetValidated
85-
txsBlockCapacity = ByteSize . txsMaxBytes
84+
type TxMeasure ByronBlock = SizeInBytes
85+
86+
blockTxCapacity _cfg st = SizeInBytes $
87+
CC.getMaxBlockSize (tickedByronLedgerState st) - byronBlockEncodingOverhead
88+
89+
txInBlockSize _cfg _st =
90+
SizeInBytes
91+
. toEnum
92+
. Strict.length
93+
. CC.mempoolPayloadRecoverBytes
94+
. toMempoolPayload
95+
96+
txMeasureBytes _ = id
8697

8798
{-------------------------------------------------------------------------------
8899
Transactions
@@ -132,19 +143,8 @@ instance LedgerSupportsMempool ByronBlock where
132143
where
133144
validationMode = CC.ValidationMode CC.NoBlockValidation Utxo.TxValidationNoCrypto
134145

135-
txsMaxBytes st =
136-
CC.getMaxBlockSize (tickedByronLedgerState st) - byronBlockEncodingOverhead
137-
138-
txInBlockSize =
139-
fromIntegral
140-
. Strict.length
141-
. CC.mempoolPayloadRecoverBytes
142-
. toMempoolPayload
143-
144146
txForgetValidated = forgetValidatedByronTx
145147

146-
txRefScriptSize _ _ _ = 0
147-
148148
data instance TxId (GenTx ByronBlock)
149149
= ByronTxId !Utxo.TxId
150150
| ByronDlgId !Delegation.CertificateId

ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Node.hs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ import Ouroboros.Consensus.Config.SupportsNode
4949
import Ouroboros.Consensus.HeaderValidation
5050
import Ouroboros.Consensus.Ledger.Abstract
5151
import Ouroboros.Consensus.Ledger.Extended
52-
import qualified Ouroboros.Consensus.Mempool as Mempool
5352
import Ouroboros.Consensus.Node.InitStorage
5453
import Ouroboros.Consensus.Node.ProtocolInfo
5554
import Ouroboros.Consensus.Node.Run
@@ -128,10 +127,9 @@ type instance ForgeStateUpdateError ByronBlock = Void
128127

129128
byronBlockForging ::
130129
Monad m
131-
=> Mempool.TxOverrides ByronBlock
132-
-> ByronLeaderCredentials
130+
=> ByronLeaderCredentials
133131
-> BlockForging m ByronBlock
134-
byronBlockForging maxTxCapacityOverrides creds = BlockForging {
132+
byronBlockForging creds = BlockForging {
135133
forgeLabel = blcLabel creds
136134
, canBeLeader
137135
, updateForgeState = \_ _ _ -> return $ ForgeStateUpdated ()
@@ -141,7 +139,7 @@ byronBlockForging maxTxCapacityOverrides creds = BlockForging {
141139
canBeLeader
142140
slot
143141
tickedPBftState
144-
, forgeBlock = \cfg -> return ....: forgeByronBlock cfg maxTxCapacityOverrides
142+
, forgeBlock = \cfg -> return ....: forgeByronBlock cfg
145143
}
146144
where
147145
canBeLeader = mkPBftCanBeLeader creds
@@ -156,11 +154,8 @@ mkPBftCanBeLeader (ByronLeaderCredentials sk cert nid _) = PBftCanBeLeader {
156154
blockForgingByron :: Monad m
157155
=> ProtocolParams ByronBlock
158156
-> [BlockForging m ByronBlock]
159-
blockForgingByron ProtocolParamsByron { byronLeaderCredentials = mLeaderCreds
160-
, byronMaxTxCapacityOverrides = maxTxCapacityOverrides
161-
} =
162-
byronBlockForging maxTxCapacityOverrides
163-
<$> maybeToList mLeaderCreds
157+
blockForgingByron ProtocolParamsByron { byronLeaderCredentials } =
158+
byronBlockForging <$> maybeToList byronLeaderCredentials
164159

165160
{-------------------------------------------------------------------------------
166161
ProtocolInfo
@@ -178,7 +173,6 @@ data instance ProtocolParams ByronBlock = ProtocolParamsByron {
178173
, byronProtocolVersion :: Update.ProtocolVersion
179174
, byronSoftwareVersion :: Update.SoftwareVersion
180175
, byronLeaderCredentials :: Maybe ByronLeaderCredentials
181-
, byronMaxTxCapacityOverrides :: Mempool.TxOverrides ByronBlock
182176
}
183177

184178
protocolInfoByron :: ProtocolParams ByronBlock

ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/CanHardFork.hs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@ import Data.Function ((&))
5353
import Data.Functor.Identity
5454
import qualified Data.Map.Strict as Map
5555
import Data.Maybe (listToMaybe, mapMaybe)
56+
import qualified Data.Measure as Measure
5657
import Data.Proxy
5758
import Data.SOP.BasicFunctors
5859
import Data.SOP.InPairs (RequiringBoth (..), ignoringBoth)
59-
import Data.SOP.Strict (hpure)
60+
import Data.SOP.Strict (hcmap, hcollapse, hpure)
6061
import Data.SOP.Tails (Tails (..))
6162
import qualified Data.SOP.Tails as Tails
6263
import Data.Void
@@ -77,6 +78,7 @@ import Ouroboros.Consensus.HardFork.History (Bound (boundSlot),
7778
addSlots)
7879
import Ouroboros.Consensus.HardFork.Simple
7980
import Ouroboros.Consensus.Ledger.Abstract
81+
import Ouroboros.Consensus.Ledger.SupportsMempool (TxMeasure)
8082
import Ouroboros.Consensus.Ledger.SupportsProtocol
8183
(LedgerSupportsProtocol)
8284
import Ouroboros.Consensus.Protocol.Abstract
@@ -88,12 +90,14 @@ import qualified Ouroboros.Consensus.Protocol.Praos as Praos
8890
import Ouroboros.Consensus.Protocol.TPraos
8991
import qualified Ouroboros.Consensus.Protocol.TPraos as TPraos
9092
import Ouroboros.Consensus.Shelley.Ledger
93+
import qualified Ouroboros.Consensus.Shelley.Ledger.Mempool as ConwayMeasure
9194
import Ouroboros.Consensus.Shelley.Node ()
9295
import Ouroboros.Consensus.Shelley.Protocol.Praos ()
9396
import Ouroboros.Consensus.Shelley.ShelleyHFC
9497
import Ouroboros.Consensus.TypeFamilyWrappers
9598
import Ouroboros.Consensus.Util (eitherToMaybe)
9699
import Ouroboros.Consensus.Util.RedundantConstraints
100+
import Ouroboros.Network.SizeInBytes (SizeInBytes (..))
97101

98102
{-------------------------------------------------------------------------------
99103
Figure out the transition point for Byron
@@ -281,7 +285,40 @@ type CardanoHardForkConstraints c =
281285
, DSIGN c ~ Ed25519DSIGN
282286
)
283287

288+
-----
289+
290+
class InjMeasure a where
291+
injMeasure :: a -> ConwayMeasure.ConwayMeasure
292+
293+
instance InjMeasure SizeInBytes where
294+
injMeasure x = injMeasure $ ConwayMeasure.AlonzoMeasure x Measure.zero
295+
296+
instance InjMeasure AlonzoMeasure where
297+
injMeasure x = injMeasure $ ConwayMeasure.ConwayMeasure x Measure.zero
298+
299+
instance InjMeasure ConwayMeasure where injMeasure = id
300+
301+
class InjMeasure (TxMeasure blk) => WrapInjMeasure blk
302+
instance InjMeasure (TxMeasure blk) => WrapInjMeasure blk
303+
304+
-----
305+
284306
instance CardanoHardForkConstraints c => CanHardFork (CardanoEras c) where
307+
type HardForkTxMeasure (CardanoEras c) = ConwayMeasure.ConwayMeasure
308+
309+
hardForkMeasureTx =
310+
hcollapse
311+
. hcmap (Proxy @WrapInjMeasure) aux
312+
where
313+
aux ::
314+
WrapInjMeasure blk
315+
=> WrapTxMeasure blk
316+
-> K ConwayMeasure.ConwayMeasure blk
317+
aux (WrapTxMeasure x) = K $ injMeasure x
318+
319+
hardForkTxMeasureBytes _prx =
320+
ConwayMeasure.byteSize . ConwayMeasure.alonzoMeasure
321+
285322
hardForkEraTranslation = EraTranslation {
286323
translateLedgerState =
287324
PCons translateLedgerStateByronToShelleyWrapper

ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/Node.hs

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ import Ouroboros.Consensus.HardFork.Combinator.Serialisation
100100
import qualified Ouroboros.Consensus.HardFork.History as History
101101
import Ouroboros.Consensus.HeaderValidation
102102
import Ouroboros.Consensus.Ledger.Extended
103-
import qualified Ouroboros.Consensus.Mempool as Mempool
104103
import Ouroboros.Consensus.Node.NetworkProtocolVersion
105104
import Ouroboros.Consensus.Node.ProtocolInfo
106105
import Ouroboros.Consensus.Node.Run
@@ -631,37 +630,30 @@ protocolInfoCardano paramsCardano
631630
genesisShelley = ledgerTransitionConfig ^. L.tcShelleyGenesisL
632631

633632
ProtocolParamsByron {
634-
byronGenesis = genesisByron
635-
, byronLeaderCredentials = mCredsByron
636-
, byronMaxTxCapacityOverrides = maxTxCapacityOverridesByron
633+
byronGenesis = genesisByron
634+
, byronLeaderCredentials = mCredsByron
637635
} = paramsByron
638636
ProtocolParamsShelleyBased {
639637
shelleyBasedInitialNonce = initialNonceShelley
640638
, shelleyBasedLeaderCredentials = credssShelleyBased
641639
} = paramsShelleyBased
642640
ProtocolParamsShelley {
643-
shelleyProtVer = protVerShelley
644-
, shelleyMaxTxCapacityOverrides = maxTxCapacityOverridesShelley
641+
shelleyProtVer = protVerShelley
645642
} = paramsShelley
646643
ProtocolParamsAllegra {
647-
allegraProtVer = protVerAllegra
648-
, allegraMaxTxCapacityOverrides = maxTxCapacityOverridesAllegra
644+
allegraProtVer = protVerAllegra
649645
} = paramsAllegra
650646
ProtocolParamsMary {
651-
maryProtVer = protVerMary
652-
, maryMaxTxCapacityOverrides = maxTxCapacityOverridesMary
647+
maryProtVer = protVerMary
653648
} = paramsMary
654649
ProtocolParamsAlonzo {
655-
alonzoProtVer = protVerAlonzo
656-
, alonzoMaxTxCapacityOverrides = maxTxCapacityOverridesAlonzo
650+
alonzoProtVer = protVerAlonzo
657651
} = paramsAlonzo
658652
ProtocolParamsBabbage {
659-
babbageProtVer = protVerBabbage
660-
, babbageMaxTxCapacityOverrides = maxTxCapacityOverridesBabbage
653+
babbageProtVer = protVerBabbage
661654
} = paramsBabbage
662655
ProtocolParamsConway {
663-
conwayProtVer = protVerConway
664-
, conwayMaxTxCapacityOverrides = maxTxCapacityOverridesConway
656+
conwayProtVer = protVerConway
665657
} = paramsConway
666658

667659
transitionConfigShelley = transitionConfigAllegra ^. L.tcPreviousEraConfigL
@@ -1033,7 +1025,7 @@ protocolInfoCardano paramsCardano
10331025
mBlockForgingByron :: Maybe (NonEmptyOptNP (BlockForging m) (CardanoEras c))
10341026
mBlockForgingByron = do
10351027
creds <- mCredsByron
1036-
return $ byronBlockForging maxTxCapacityOverridesByron creds `OptNP.at` IZ
1028+
return $ byronBlockForging creds `OptNP.at` IZ
10371029

10381030
blockForgingShelleyBased ::
10391031
ShelleyLeaderCredentials c
@@ -1059,27 +1051,25 @@ protocolInfoCardano paramsCardano
10591051

10601052
let tpraos :: forall era.
10611053
ShelleyEraWithCrypto c (TPraos c) era
1062-
=> Mempool.TxOverrides (ShelleyBlock (TPraos c) era)
1063-
-> BlockForging m (ShelleyBlock (TPraos c) era)
1064-
tpraos maxTxCapacityOverrides =
1065-
TPraos.shelleySharedBlockForging hotKey slotToPeriod credentials maxTxCapacityOverrides
1054+
=> BlockForging m (ShelleyBlock (TPraos c) era)
1055+
tpraos =
1056+
TPraos.shelleySharedBlockForging hotKey slotToPeriod credentials
10661057

10671058
let praos :: forall era.
10681059
ShelleyEraWithCrypto c (Praos c) era
1069-
=> Mempool.TxOverrides (ShelleyBlock (Praos c) era)
1070-
-> BlockForging m (ShelleyBlock (Praos c) era)
1071-
praos maxTxCapacityOverrides =
1072-
Praos.praosSharedBlockForging hotKey slotToPeriod credentials maxTxCapacityOverrides
1060+
=> BlockForging m (ShelleyBlock (Praos c) era)
1061+
praos =
1062+
Praos.praosSharedBlockForging hotKey slotToPeriod credentials
10731063

10741064
pure
10751065
$ OptSkip -- Byron
10761066
$ OptNP.fromNonEmptyNP $
1077-
tpraos maxTxCapacityOverridesShelley :*
1078-
tpraos maxTxCapacityOverridesAllegra :*
1079-
tpraos maxTxCapacityOverridesMary :*
1080-
tpraos maxTxCapacityOverridesAlonzo :*
1081-
praos maxTxCapacityOverridesBabbage :*
1082-
praos maxTxCapacityOverridesConway :*
1067+
tpraos :*
1068+
tpraos :*
1069+
tpraos :*
1070+
tpraos :*
1071+
praos :*
1072+
praos :*
10831073
Nil
10841074

10851075
protocolClientInfoCardano ::

0 commit comments

Comments
 (0)