Skip to content

Commit

Permalink
CAD-2772 add cases for Alonzo
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcFontaine committed Jun 8, 2021
1 parent 6b8234a commit 33bfc08
Show file tree
Hide file tree
Showing 12 changed files with 33 additions and 8 deletions.
Expand Up @@ -62,6 +62,7 @@ plainOldCliScript _ _ (FundsUtxo _ _ _) _ = error "plainOldCliScript FundsUtxo n
plainOldCliScript _ _ (FundsSplitUtxo _ _) _ = error "plainOldCliScript FundsSplitUtxo not supported"
plainOldCliScript cliPartialBenchmark benchmarkEra (FundsGenesis keyFile) (tracers, dslSet) = do
case benchmarkEra of
AnyCardanoEra AlonzoEra -> error "AlonzoEra not supported"
AnyCardanoEra ByronEra -> error "ByronEra not supported"
AnyCardanoEra ShelleyEra -> do
myTracer "POScript :: ShelleyEra"
Expand Down
1 change: 1 addition & 0 deletions bench/tx-generator/src/Cardano/Benchmarking/DSL.hs
Expand Up @@ -26,6 +26,7 @@ getDSL _ ByronEra = error "ByronEra not supported"
getDSL (x, _, _) ShelleyEra = x
getDSL (_, x, _) AllegraEra = x
getDSL (_, _, x) MaryEra = x
getDSL _ AlonzoEra = error "AlonzoEra not supported" -- use json mode

type Fee = Lovelace
type TTL = SlotNo
Expand Down
1 change: 1 addition & 0 deletions bench/tx-generator/src/Cardano/Benchmarking/FundSet.hs
Expand Up @@ -103,3 +103,4 @@ liftAnyEra f x = case x of
InAnyCardanoEra ShelleyEra a -> InAnyCardanoEra ShelleyEra $ f a
InAnyCardanoEra AllegraEra a -> InAnyCardanoEra AllegraEra $ f a
InAnyCardanoEra MaryEra a -> InAnyCardanoEra MaryEra $ f a
InAnyCardanoEra AlonzoEra a -> InAnyCardanoEra AlonzoEra $ f a
4 changes: 2 additions & 2 deletions bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx.hs
Expand Up @@ -189,7 +189,7 @@ splitFunds
-- same TxOut for all
outs = zip [identityIndex ..
identityIndex + fromIntegral numOutsPerInitTx - 1]
(repeat (TxOut globalOutAddr txOut))
(repeat (TxOut globalOutAddr txOut TxOutDatumHashNone))
(mFunds, _fees, outIndices, splitTx) =
mkTransactionGen sKey (initialFund :| []) globalOutAddr outs TxMetadataNone fee
!splitTxId = getTxId $ getTxBody splitTx
Expand Down Expand Up @@ -381,7 +381,7 @@ txGenerator
initRecipientIndex = 0 :: Int
-- The same output for all transactions.
valueForRecipient = quantityToLovelace $ Quantity 1000000 -- 10 ADA
!txOut = TxOut recipientAddress (mkTxOutValueAdaOnly valueForRecipient)
!txOut = TxOut recipientAddress (mkTxOutValueAdaOnly valueForRecipient) TxOutDatumHashNone
totalValue = valueForRecipient + txFee
-- Send possible change to the same 'recipientAddress'.
addressForChange = recipientAddress
Expand Down
Expand Up @@ -148,6 +148,7 @@ pTxOut =
TxOut <$> parseAddressInEra
<* Atto.char '+'
<*> (TxOutAdaOnly AdaOnlyInShelleyEra <$> parseLovelace)
<*> pure TxOutDatumHashNone

parseAddressInEra :: IsCardanoEra era => Atto.Parser (AddressInEra era)
parseAddressInEra = do
Expand Down
Expand Up @@ -58,7 +58,7 @@ genesisExpenditure networkId key addr coin fee ttl = (tx, fund)
tx = mkGenesisTransaction (castKey key) 0 ttl fee [ pseudoTxIn ] [ txout ]

value = mkTxOutValueAdaOnly $ coin - fee
txout = TxOut addr value
txout = TxOut addr value TxOutDatumHashNone

pseudoTxIn = genesisUTxOPseudoTxIn networkId
(verificationKeyHash $ getVerificationKey $ castKey key)
Expand Down
Expand Up @@ -25,18 +25,22 @@ assume_cbor_properties
= prop_mapCostsShelley
&& prop_mapCostsAllegra
&& prop_mapCostsMary
&& prop_mapCostsAlonzo
&& prop_bsCostsShelley
&& prop_bsCostsAllegra
&& prop_bsCostsMary
&& prop_bsCostsAlonzo

-- The cost of map entries in metadata follows a step function.
-- This assums the map indecies are [0..n].
prop_mapCostsShelley :: Bool
prop_mapCostsAllegra :: Bool
prop_mapCostsMary :: Bool
prop_mapCostsAlonzo :: Bool
prop_mapCostsShelley = measureMapCosts AsShelleyEra == assumeMapCosts AsShelleyEra
prop_mapCostsAllegra = measureMapCosts AsAllegraEra == assumeMapCosts AsAllegraEra
prop_mapCostsMary = measureMapCosts AsMaryEra == assumeMapCosts AsMaryEra
prop_mapCostsAlonzo = measureMapCosts AsAlonzoEra == assumeMapCosts AsAlonzoEra

assumeMapCosts :: forall era . IsShelleyBasedEra era => AsType era -> [Int]
assumeMapCosts _proxy = stepFunction [
Expand All @@ -51,15 +55,20 @@ assumeMapCosts _proxy = stepFunction [
ShelleyBasedEraShelley -> 37
ShelleyBasedEraAllegra -> 39
ShelleyBasedEraMary -> 39
-- Unconfirmed ! update when alonzo is runnable.
ShelleyBasedEraAlonzo -> error "39"

-- Bytestring costs are not LINEAR !!
-- Costs are piecewise linear for payload sizes [0..23] and [24..64].
prop_bsCostsShelley :: Bool
prop_bsCostsAllegra :: Bool
prop_bsCostsMary :: Bool
prop_bsCostsAlonzo :: Bool
prop_bsCostsShelley = measureBSCosts AsShelleyEra == [37..60] ++ [62..102]
prop_bsCostsAllegra = measureBSCosts AsAllegraEra == [39..62] ++ [64..104]
prop_bsCostsMary = measureBSCosts AsMaryEra == [39..62] ++ [64..104]
-- Unconfirmed ! update when alonzo is runnable.
prop_bsCostsAlonzo = measureBSCosts AsAlonzoEra == error "[39..62] ++ [64..104]"

stepFunction :: [(Int, Int)] -> [Int]
stepFunction f = scanl1 (+) steps
Expand Down Expand Up @@ -113,6 +122,7 @@ metadataInEra (Just m) = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxMetadataInEra TxMetadataInShelleyEra m
ShelleyBasedEraAllegra -> TxMetadataInEra TxMetadataInAllegraEra m
ShelleyBasedEraMary -> TxMetadataInEra TxMetadataInMaryEra m
ShelleyBasedEraAlonzo -> TxMetadataInEra TxMetadataInAlonzoEra m

mkMetadata :: forall era . IsShelleyBasedEra era => Int -> Either String (TxMetadataInEra era)
mkMetadata 0 = Right $ metadataInEra Nothing
Expand All @@ -125,6 +135,7 @@ mkMetadata size
ShelleyBasedEraShelley -> 37
ShelleyBasedEraAllegra -> 39
ShelleyBasedEraMary -> 39
ShelleyBasedEraAlonzo -> error "39"
nettoSize = size - minSize

-- At 24 the CBOR representation changes.
Expand Down
Expand Up @@ -63,7 +63,7 @@ import Ouroboros.Consensus.Shelley.Ledger.Mempool (mkShelleyTx)
import qualified Ouroboros.Consensus.Shelley.Ledger.Mempool as Mempool (TxId(ShelleyTxId))
import Ouroboros.Consensus.Shelley.Protocol (StandardCrypto)

import Ouroboros.Consensus.Cardano.Block (GenTx (GenTxShelley, GenTxMary, GenTxAllegra))
import Ouroboros.Consensus.Cardano.Block (GenTx (GenTxAllegra, GenTxAlonzo, GenTxShelley, GenTxMary))
import qualified Ouroboros.Consensus.Cardano.Block as Block (TxId(GenTxIdShelley, GenTxIdAllegra, GenTxIdMary))

import Ouroboros.Network.Protocol.TxSubmission.Client (ClientStIdle (..),
Expand Down Expand Up @@ -361,6 +361,7 @@ txSubmissionClient tr bmtr sub threadIx =
(ShelleyBasedEraShelley, ShelleyTx _ tx') -> GenTxShelley (mkShelleyTx tx')
(ShelleyBasedEraAllegra, ShelleyTx _ tx') -> GenTxAllegra (mkShelleyTx tx')
(ShelleyBasedEraMary, ShelleyTx _ tx') -> GenTxMary (mkShelleyTx tx')
(ShelleyBasedEraAlonzo, ShelleyTx _ tx') -> GenTxAlonzo (mkShelleyTx tx')

fromGenTxId :: gentxid -> txid
fromGenTxId (Block.GenTxIdShelley (Mempool.ShelleyTxId i)) = fromShelleyTxId i
Expand Down
10 changes: 8 additions & 2 deletions bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/Tx.hs
Expand Up @@ -81,10 +81,12 @@ mkGenesisTransaction key _payloadSize ttl fee txins txouts
ShelleyBasedEraShelley -> TxFeeExplicit TxFeesExplicitInShelleyEra fee
ShelleyBasedEraAllegra -> TxFeeExplicit TxFeesExplicitInAllegraEra fee
ShelleyBasedEraMary -> TxFeeExplicit TxFeesExplicitInMaryEra fee
ShelleyBasedEraAlonzo -> TxFeeExplicit TxFeesExplicitInAlonzoEra fee
validityUpperBound = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxValidityUpperBound ValidityUpperBoundInShelleyEra ttl
ShelleyBasedEraAllegra -> TxValidityUpperBound ValidityUpperBoundInAllegraEra ttl
ShelleyBasedEraMary -> TxValidityUpperBound ValidityUpperBoundInMaryEra ttl
ShelleyBasedEraAlonzo -> TxValidityUpperBound ValidityUpperBoundInAlonzoEra ttl

mkTransaction :: forall era .
IsShelleyBasedEra era
Expand Down Expand Up @@ -121,6 +123,7 @@ mkFee f = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxFeeExplicit TxFeesExplicitInShelleyEra f
ShelleyBasedEraAllegra -> TxFeeExplicit TxFeesExplicitInAllegraEra f
ShelleyBasedEraMary -> TxFeeExplicit TxFeesExplicitInMaryEra f
ShelleyBasedEraAlonzo -> TxFeeExplicit TxFeesExplicitInAlonzoEra f

mkValidityUpperBound :: forall era .
IsShelleyBasedEra era
Expand All @@ -130,6 +133,7 @@ mkValidityUpperBound ttl = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxValidityUpperBound ValidityUpperBoundInShelleyEra ttl
ShelleyBasedEraAllegra -> TxValidityUpperBound ValidityUpperBoundInAllegraEra ttl
ShelleyBasedEraMary -> TxValidityUpperBound ValidityUpperBoundInMaryEra ttl
ShelleyBasedEraAlonzo -> TxValidityUpperBound ValidityUpperBoundInAlonzoEra ttl

mkTransactionGen :: forall era .
IsShelleyBasedEra era
Expand Down Expand Up @@ -164,7 +168,7 @@ mkTransactionGen signingKey inputs address payments metadata fee =

(txOutputs, mChange) = case compare changeValue 0 of
GT ->
let changeTxOut = TxOut address $ mkTxOutValueAdaOnly changeValue
let changeTxOut = TxOut address (mkTxOutValueAdaOnly changeValue) TxOutDatumHashNone
changeIndex = TxIx $ fromIntegral $ length payTxOuts -- 0-based index
in
(appendr payTxOuts (changeTxOut :| []), Just (changeIndex, changeValue))
Expand All @@ -181,7 +185,7 @@ mkTransactionGen signingKey inputs address payments metadata fee =
txOutSum :: [ TxOut era ] -> Lovelace
txOutSum l = sum $ map toVal l

toVal (TxOut _ val) = txOutValueToLovelace val
toVal (TxOut _ val _) = txOutValueToLovelace val

-- | Append a non-empty list to a list.
-- > appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]
Expand All @@ -193,6 +197,7 @@ mkTxOutValueAdaOnly l = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxOutAdaOnly AdaOnlyInShelleyEra l
ShelleyBasedEraAllegra -> TxOutAdaOnly AdaOnlyInAllegraEra l
ShelleyBasedEraMary -> TxOutValue MultiAssetInMaryEra $ lovelaceToValue l
ShelleyBasedEraAlonzo -> TxOutValue MultiAssetInAlonzoEra $ lovelaceToValue l

txOutValueToLovelace :: TxOutValue era -> Lovelace
txOutValueToLovelace = \case
Expand All @@ -208,3 +213,4 @@ txInModeCardano tx = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxInMode tx ShelleyEraInCardanoMode
ShelleyBasedEraAllegra -> TxInMode tx AllegraEraInCardanoMode
ShelleyBasedEraMary -> TxInMode tx MaryEraInCardanoMode
ShelleyBasedEraAlonzo -> TxInMode tx AlonzoEraInCardanoMode
Expand Up @@ -59,7 +59,7 @@ getGenesis (SomeConsensusProtocol CardanoBlockType info) = shelleyBasedGenesis
(ProtocolInfoArgsCardano
_
Consensus.ProtocolParamsShelleyBased{Consensus.shelleyBasedGenesis}
_ _ _ _ _ _ ) = info
_ _ _ _ _ _ _ _) = info
getGenesis (SomeConsensusProtocol _ _ ) = error "getGenesis (SomeConsensusProtocol _ _ ) unknown protocol"

protocolToTopLevelConfig :: SomeConsensusProtocol -> TopLevelConfig CardanoBlock
Expand Down
2 changes: 2 additions & 0 deletions bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs
Expand Up @@ -61,6 +61,7 @@ withEra :: (forall era. IsShelleyBasedEra era => AsType era -> ActionM x) -> Act
withEra action = do
era <- get $ User TEra
case era of
AnyCardanoEra AlonzoEra -> action AsAlonzoEra
AnyCardanoEra MaryEra -> action AsMaryEra
AnyCardanoEra AllegraEra -> action AsAllegraEra
AnyCardanoEra ShelleyEra -> action AsShelleyEra
Expand Down Expand Up @@ -223,6 +224,7 @@ asyncBenchmarkCore (ThreadName threadName) transactions tps = do
coreCall :: forall era. IsShelleyBasedEra era => [Tx era] -> ExceptT TxGenError IO AsyncBenchmarkControl
coreCall l = Core.asyncBenchmark (btTxSubmit_ tracers) (btN2N_ tracers) connectClient threadName targets tps LogErrors l
ret <- liftIO $ runExceptT $ case txs of
InAnyCardanoEra AlonzoEra (TxList l) -> coreCall l
InAnyCardanoEra MaryEra (TxList l) -> coreCall l
InAnyCardanoEra AllegraEra (TxList l) -> coreCall l
InAnyCardanoEra ShelleyEra (TxList l) -> coreCall l
Expand Down
3 changes: 2 additions & 1 deletion bench/tx-generator/src/Cardano/Benchmarking/Wallet.hs
Expand Up @@ -116,13 +116,14 @@ genTx key networkId inFunds outValues
, txMintValue = TxMintNone
}

mkTxOut v = TxOut (Tx.keyAddress @ era networkId key) (mkTxOutValueAdaOnly v)
mkTxOut v = TxOut (Tx.keyAddress @ era networkId key) (mkTxOutValueAdaOnly v) TxOutDatumHashNone

upperBound :: TxValidityUpperBound era
upperBound = case shelleyBasedEra @ era of
ShelleyBasedEraShelley -> TxValidityUpperBound ValidityUpperBoundInShelleyEra $ SlotNo maxBound
ShelleyBasedEraAllegra -> TxValidityNoUpperBound ValidityNoUpperBoundInAllegraEra
ShelleyBasedEraMary -> TxValidityNoUpperBound ValidityNoUpperBoundInMaryEra
ShelleyBasedEraAlonzo -> TxValidityNoUpperBound ValidityNoUpperBoundInAlonzoEra

benchmarkTransaction :: forall era. IsShelleyBasedEra era
=> Wallet
Expand Down

0 comments on commit 33bfc08

Please sign in to comment.