{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Conway.Translation.TranslatableGen where

import Cardano.Ledger.Alonzo.Plutus.Context (SupportedLanguage (..))
import Cardano.Ledger.Alonzo.Scripts (AlonzoEraScript, AsIx (..), PlutusPurpose)
import Cardano.Ledger.Alonzo.TxWits (Redeemers (..))
import Cardano.Ledger.Binary (mkSized)
import Cardano.Ledger.Conway (ConwayEra)
import Cardano.Ledger.Conway.Governance (VotingProcedures (..))
import Cardano.Ledger.Conway.Scripts (ConwayPlutusPurpose (..))
import Cardano.Ledger.Conway.TxBody (TxBody (ConwayTxBody))
import Cardano.Ledger.Conway.TxCert
import Cardano.Ledger.Core
import Cardano.Ledger.Plutus (Data (..), ExUnits, Language (..), plutusLanguage)
import Cardano.Ledger.TxIn (TxIn (..))
import qualified Data.Map.Strict as Map
import Data.Sequence.Strict (fromList)
import qualified Data.Set as Set
import Test.Cardano.Data.Arbitrary (genOSet)
import Test.Cardano.Ledger.Alonzo.Translation.TranslatableGen (TranslatableGen (..))
import qualified Test.Cardano.Ledger.Babbage.Translation.TranslatableGen as BabbageTranslatableGen (
  genTx,
  genTxOut,
  utxoWithTx,
 )
import Test.Cardano.Ledger.Common
import Test.Cardano.Ledger.Conway.Arbitrary ()

instance TranslatableGen ConwayEra where
  tgRedeemers :: Gen (Redeemers ConwayEra)
tgRedeemers = Gen (Redeemers ConwayEra)
forall era.
(AlonzoEraScript era,
 PlutusPurpose AsIx era ~ ConwayPlutusPurpose AsIx era) =>
Gen (Redeemers era)
genRedeemers
  tgTx :: SupportedLanguage ConwayEra -> Gen (Tx ConwayEra)
tgTx = forall era.
(TranslatableGen era, Arbitrary (TxAuxData era),
 AlonzoTxWits era ~ TxWits era) =>
Gen (TxBody era) -> Gen (AlonzoTx era)
BabbageTranslatableGen.genTx @ConwayEra (Gen (TxBody ConwayEra) -> Gen (AlonzoTx ConwayEra))
-> (SupportedLanguage ConwayEra -> Gen (TxBody ConwayEra))
-> SupportedLanguage ConwayEra
-> Gen (AlonzoTx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SupportedLanguage ConwayEra -> Gen (TxBody ConwayEra)
genTxBody
  tgUtxo :: SupportedLanguage ConwayEra -> Tx ConwayEra -> Gen (UTxO ConwayEra)
tgUtxo = forall era.
(EraTx era, Arbitrary (Value era), Arbitrary (Script era),
 TxOut era ~ BabbageTxOut era) =>
SupportedLanguage era -> Tx era -> Gen (UTxO era)
BabbageTranslatableGen.utxoWithTx @ConwayEra

genTxBody :: SupportedLanguage ConwayEra -> Gen (TxBody ConwayEra)
genTxBody :: SupportedLanguage ConwayEra -> Gen (TxBody ConwayEra)
genTxBody l :: SupportedLanguage ConwayEra
l@(SupportedLanguage SLanguage l
slang) = do
  let lang :: Language
lang = SLanguage l -> Language
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> Language
plutusLanguage SLanguage l
slang
      genTxOuts :: Gen (StrictSeq (Sized (BabbageTxOut ConwayEra)))
genTxOuts =
        [Sized (BabbageTxOut ConwayEra)]
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
forall a. [a] -> StrictSeq a
fromList
          ([Sized (BabbageTxOut ConwayEra)]
 -> StrictSeq (Sized (BabbageTxOut ConwayEra)))
-> Gen [Sized (BabbageTxOut ConwayEra)]
-> Gen (StrictSeq (Sized (BabbageTxOut ConwayEra)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Sized (BabbageTxOut ConwayEra))
-> Gen [Sized (BabbageTxOut ConwayEra)]
forall a. Gen a -> Gen [a]
listOf1
            ( Version -> BabbageTxOut ConwayEra -> Sized (BabbageTxOut ConwayEra)
forall a. EncCBOR a => Version -> a -> Sized a
mkSized (forall era. Era era => Version
eraProtVerLow @ConwayEra)
                (BabbageTxOut ConwayEra -> Sized (BabbageTxOut ConwayEra))
-> Gen (BabbageTxOut ConwayEra)
-> Gen (Sized (BabbageTxOut ConwayEra))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall era.
(EraTxOut era, Arbitrary (Value era), Arbitrary (Script era)) =>
SupportedLanguage era -> Gen (BabbageTxOut era)
BabbageTranslatableGen.genTxOut @ConwayEra SupportedLanguage ConwayEra
l
            )
      genTxIns :: Gen (Set TxIn)
genTxIns = [TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList ([TxIn] -> Set TxIn) -> Gen [TxIn] -> Gen (Set TxIn)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen TxIn -> Gen [TxIn]
forall a. Gen a -> Gen [a]
listOf1 (Gen TxIn
forall a. Arbitrary a => Gen a
arbitrary :: Gen TxIn)
      offPrePlutusV3 :: Int -> Int
offPrePlutusV3 Int
freq = if Language
lang Language -> Language -> Bool
forall a. Ord a => a -> a -> Bool
>= Language
PlutusV3 then Int
freq else Int
0
      genDelegatee :: Gen Delegatee
genDelegatee =
        [(Int, Gen Delegatee)] -> Gen Delegatee
forall a. HasCallStack => [(Int, Gen a)] -> Gen a
frequency
          [ (Int
33, KeyHash 'StakePool -> Delegatee
DelegStake (KeyHash 'StakePool -> Delegatee)
-> Gen (KeyHash 'StakePool) -> Gen Delegatee
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (KeyHash 'StakePool)
forall a. Arbitrary a => Gen a
arbitrary)
          , (Int -> Int
offPrePlutusV3 Int
33, DRep -> Delegatee
DelegVote (DRep -> Delegatee) -> Gen DRep -> Gen Delegatee
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen DRep
forall a. Arbitrary a => Gen a
arbitrary)
          , (Int -> Int
offPrePlutusV3 Int
33, KeyHash 'StakePool -> DRep -> Delegatee
DelegStakeVote (KeyHash 'StakePool -> DRep -> Delegatee)
-> Gen (KeyHash 'StakePool) -> Gen (DRep -> Delegatee)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (KeyHash 'StakePool)
forall a. Arbitrary a => Gen a
arbitrary Gen (DRep -> Delegatee) -> Gen DRep -> Gen Delegatee
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen DRep
forall a. Arbitrary a => Gen a
arbitrary)
          ]
      genDelegCert :: Gen ConwayDelegCert
genDelegCert =
        [(Int, Gen ConwayDelegCert)] -> Gen ConwayDelegCert
forall a. HasCallStack => [(Int, Gen a)] -> Gen a
frequency
          [ (Int
25, StakeCredential -> StrictMaybe Coin -> ConwayDelegCert
ConwayRegCert (StakeCredential -> StrictMaybe Coin -> ConwayDelegCert)
-> Gen StakeCredential -> Gen (StrictMaybe Coin -> ConwayDelegCert)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen StakeCredential
forall a. Arbitrary a => Gen a
arbitrary Gen (StrictMaybe Coin -> ConwayDelegCert)
-> Gen (StrictMaybe Coin) -> Gen ConwayDelegCert
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary)
          , (Int
25, StakeCredential -> StrictMaybe Coin -> ConwayDelegCert
ConwayUnRegCert (StakeCredential -> StrictMaybe Coin -> ConwayDelegCert)
-> Gen StakeCredential -> Gen (StrictMaybe Coin -> ConwayDelegCert)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen StakeCredential
forall a. Arbitrary a => Gen a
arbitrary Gen (StrictMaybe Coin -> ConwayDelegCert)
-> Gen (StrictMaybe Coin) -> Gen ConwayDelegCert
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary)
          , (Int
25, StakeCredential -> Delegatee -> ConwayDelegCert
ConwayDelegCert (StakeCredential -> Delegatee -> ConwayDelegCert)
-> Gen StakeCredential -> Gen (Delegatee -> ConwayDelegCert)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen StakeCredential
forall a. Arbitrary a => Gen a
arbitrary Gen (Delegatee -> ConwayDelegCert)
-> Gen Delegatee -> Gen ConwayDelegCert
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Delegatee
genDelegatee)
          , (Int -> Int
offPrePlutusV3 Int
25, StakeCredential -> Delegatee -> Coin -> ConwayDelegCert
ConwayRegDelegCert (StakeCredential -> Delegatee -> Coin -> ConwayDelegCert)
-> Gen StakeCredential
-> Gen (Delegatee -> Coin -> ConwayDelegCert)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen StakeCredential
forall a. Arbitrary a => Gen a
arbitrary Gen (Delegatee -> Coin -> ConwayDelegCert)
-> Gen Delegatee -> Gen (Coin -> ConwayDelegCert)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Delegatee
genDelegatee Gen (Coin -> ConwayDelegCert) -> Gen Coin -> Gen ConwayDelegCert
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary)
          ]
      genTxCerts :: Gen (OSet (ConwayTxCert ConwayEra))
genTxCerts =
        Gen (ConwayTxCert ConwayEra) -> Gen (OSet (ConwayTxCert ConwayEra))
forall a. Ord a => Gen a -> Gen (OSet a)
genOSet (Gen (ConwayTxCert ConwayEra)
 -> Gen (OSet (ConwayTxCert ConwayEra)))
-> Gen (ConwayTxCert ConwayEra)
-> Gen (OSet (ConwayTxCert ConwayEra))
forall a b. (a -> b) -> a -> b
$
          [(Int, Gen (ConwayTxCert ConwayEra))]
-> Gen (ConwayTxCert ConwayEra)
forall a. HasCallStack => [(Int, Gen a)] -> Gen a
frequency
            [ (Int
33, ConwayDelegCert -> ConwayTxCert ConwayEra
forall era. ConwayDelegCert -> ConwayTxCert era
ConwayTxCertDeleg (ConwayDelegCert -> ConwayTxCert ConwayEra)
-> Gen ConwayDelegCert -> Gen (ConwayTxCert ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen ConwayDelegCert
genDelegCert)
            , (Int
33, PoolCert -> ConwayTxCert ConwayEra
forall era. PoolCert -> ConwayTxCert era
ConwayTxCertPool (PoolCert -> ConwayTxCert ConwayEra)
-> Gen PoolCert -> Gen (ConwayTxCert ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen PoolCert
forall a. Arbitrary a => Gen a
arbitrary)
            , (Int -> Int
offPrePlutusV3 Int
33, ConwayGovCert -> ConwayTxCert ConwayEra
forall era. ConwayGovCert -> ConwayTxCert era
ConwayTxCertGov (ConwayGovCert -> ConwayTxCert ConwayEra)
-> Gen ConwayGovCert -> Gen (ConwayTxCert ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen ConwayGovCert
forall a. Arbitrary a => Gen a
arbitrary)
            ]
      genForPlutusV3 :: Arbitrary a => a -> Gen a
      genForPlutusV3 :: forall a. Arbitrary a => a -> Gen a
genForPlutusV3 a
d =
        case Language
lang of
          Language
PlutusV3 -> Gen a
forall a. Arbitrary a => Gen a
arbitrary
          Language
_ -> a -> Gen a
forall a. a -> Gen a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
d
  Set TxIn
-> Set TxIn
-> Set TxIn
-> StrictSeq (Sized (TxOut ConwayEra))
-> StrictMaybe (Sized (TxOut ConwayEra))
-> StrictMaybe Coin
-> OSet (TxCert ConwayEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> VotingProcedures ConwayEra
-> OSet (ProposalProcedure ConwayEra)
-> StrictMaybe Coin
-> Coin
-> TxBody ConwayEra
Set TxIn
-> Set TxIn
-> Set TxIn
-> StrictSeq (Sized (BabbageTxOut ConwayEra))
-> StrictMaybe (Sized (BabbageTxOut ConwayEra))
-> StrictMaybe Coin
-> OSet (ConwayTxCert ConwayEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> VotingProcedures ConwayEra
-> OSet (ProposalProcedure ConwayEra)
-> StrictMaybe Coin
-> Coin
-> TxBody ConwayEra
ConwayTxBody
    (Set TxIn
 -> Set TxIn
 -> Set TxIn
 -> StrictSeq (Sized (BabbageTxOut ConwayEra))
 -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
 -> StrictMaybe Coin
 -> OSet (ConwayTxCert ConwayEra)
 -> Withdrawals
 -> Coin
 -> ValidityInterval
 -> Set (KeyHash 'Witness)
 -> MultiAsset
 -> StrictMaybe ScriptIntegrityHash
 -> StrictMaybe TxAuxDataHash
 -> StrictMaybe Network
 -> VotingProcedures ConwayEra
 -> OSet (ProposalProcedure ConwayEra)
 -> StrictMaybe Coin
 -> Coin
 -> TxBody ConwayEra)
-> Gen (Set TxIn)
-> Gen
     (Set TxIn
      -> Set TxIn
      -> StrictSeq (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe Coin
      -> OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set TxIn)
genTxIns
    Gen
  (Set TxIn
   -> Set TxIn
   -> StrictSeq (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe Coin
   -> OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (Set TxIn)
-> Gen
     (Set TxIn
      -> StrictSeq (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe Coin
      -> OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set TxIn)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (Set TxIn
   -> StrictSeq (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe Coin
   -> OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (Set TxIn)
-> Gen
     (StrictSeq (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe Coin
      -> OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set TxIn)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (StrictSeq (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe Coin
   -> OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictSeq (Sized (BabbageTxOut ConwayEra)))
-> Gen
     (StrictMaybe (Sized (BabbageTxOut ConwayEra))
      -> StrictMaybe Coin
      -> OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictSeq (Sized (BabbageTxOut ConwayEra)))
genTxOuts
    Gen
  (StrictMaybe (Sized (BabbageTxOut ConwayEra))
   -> StrictMaybe Coin
   -> OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictMaybe (Sized (BabbageTxOut ConwayEra)))
-> Gen
     (StrictMaybe Coin
      -> OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe (Sized (BabbageTxOut ConwayEra)))
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (StrictMaybe Coin
   -> OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictMaybe Coin)
-> Gen
     (OSet (ConwayTxCert ConwayEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (OSet (ConwayTxCert ConwayEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (OSet (ConwayTxCert ConwayEra))
-> Gen
     (Withdrawals
      -> Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (OSet (ConwayTxCert ConwayEra))
genTxCerts
    Gen
  (Withdrawals
   -> Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen Withdrawals
-> Gen
     (Coin
      -> ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Withdrawals
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (Coin
   -> ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen Coin
-> Gen
     (ValidityInterval
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (ValidityInterval
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen ValidityInterval
-> Gen
     (Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Int -> Int) -> Gen ValidityInterval -> Gen ValidityInterval
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen ValidityInterval
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (Set (KeyHash 'Witness))
-> Gen
     (MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set (KeyHash 'Witness))
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen MultiAsset
-> Gen
     (StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Int -> Int) -> Gen MultiAsset -> Gen MultiAsset
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen MultiAsset
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictMaybe ScriptIntegrityHash)
-> Gen
     (StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe ScriptIntegrityHash)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictMaybe TxAuxDataHash)
-> Gen
     (StrictMaybe Network
      -> VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe TxAuxDataHash)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (StrictMaybe Network
   -> VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (StrictMaybe Network)
-> Gen
     (VotingProcedures ConwayEra
      -> OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Network)
forall a. Arbitrary a => Gen a
arbitrary
    Gen
  (VotingProcedures ConwayEra
   -> OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody ConwayEra)
-> Gen (VotingProcedures ConwayEra)
-> Gen
     (OSet (ProposalProcedure ConwayEra)
      -> StrictMaybe Coin -> Coin -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> VotingProcedures ConwayEra -> Gen (VotingProcedures ConwayEra)
forall a. Arbitrary a => a -> Gen a
genForPlutusV3 (Map Voter (Map GovActionId (VotingProcedure ConwayEra))
-> VotingProcedures ConwayEra
forall era.
Map Voter (Map GovActionId (VotingProcedure era))
-> VotingProcedures era
VotingProcedures Map Voter (Map GovActionId (VotingProcedure ConwayEra))
forall a. Monoid a => a
mempty)
    Gen
  (OSet (ProposalProcedure ConwayEra)
   -> StrictMaybe Coin -> Coin -> TxBody ConwayEra)
-> Gen (OSet (ProposalProcedure ConwayEra))
-> Gen (StrictMaybe Coin -> Coin -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> OSet (ProposalProcedure ConwayEra)
-> Gen (OSet (ProposalProcedure ConwayEra))
forall a. Arbitrary a => a -> Gen a
genForPlutusV3 OSet (ProposalProcedure ConwayEra)
forall a. Monoid a => a
mempty
    Gen (StrictMaybe Coin -> Coin -> TxBody ConwayEra)
-> Gen (StrictMaybe Coin) -> Gen (Coin -> TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> StrictMaybe Coin -> Gen (StrictMaybe Coin)
forall a. Arbitrary a => a -> Gen a
genForPlutusV3 StrictMaybe Coin
forall a. Monoid a => a
mempty
    Gen (Coin -> TxBody ConwayEra)
-> Gen Coin -> Gen (TxBody ConwayEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Coin -> Gen Coin
forall a. Arbitrary a => a -> Gen a
genForPlutusV3 Coin
forall a. Monoid a => a
mempty

genRedeemers ::
  forall era.
  (AlonzoEraScript era, PlutusPurpose AsIx era ~ ConwayPlutusPurpose AsIx era) =>
  Gen (Redeemers era)
genRedeemers :: forall era.
(AlonzoEraScript era,
 PlutusPurpose AsIx era ~ ConwayPlutusPurpose AsIx era) =>
Gen (Redeemers era)
genRedeemers = do
  Data era
d <- Gen (Data era)
forall a. Arbitrary a => Gen a
arbitrary :: Gen (Data era)
  ExUnits
eu <- Gen ExUnits
forall a. Arbitrary a => Gen a
arbitrary :: Gen ExUnits
  -- We provide `RdrmPtr Spend 0` as the only valid reedemer, because
  -- for any other redeemer type, we would have to modify the body of the transaction
  -- in order for the translation to succeed
  Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits)
-> Redeemers era
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Redeemers (Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits)
 -> Redeemers era)
-> Gen (Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits))
-> Gen (Redeemers era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits)]
-> Gen (Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits))
forall a. HasCallStack => [a] -> Gen a
elements [ConwayPlutusPurpose AsIx era
-> (Data era, ExUnits)
-> Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits)
forall k a. k -> a -> Map k a
Map.singleton (AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> ConwayPlutusPurpose f era
ConwaySpending (AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx era)
-> AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx era
forall a b. (a -> b) -> a -> b
$ Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
0) (Data era
d, ExUnits
eu), Map (ConwayPlutusPurpose AsIx era) (Data era, ExUnits)
forall k a. Map k a
Map.empty]