module Test.Cardano.Chain.UTxO.Gen ( genCompactTxId, genCompactTxIn, genCompactTxOut, genVKWitness, genRedeemWitness, genTx, genTxAttributes, genTxAux, genTxHash, genTxId, genTxIn, genTxInList, genTxInWitness, genTxOut, genTxOutList, genTxPayload, genUTxOConfiguration, genTxProof, genTxSig, genTxSigData, genTxValidationError, genTxWitness, genUTxO, genUTxOError, genUTxOValidationError, ) where import Cardano.Chain.Common (makeNetworkMagic, mkAttributes) import Cardano.Chain.UTxO ( CompactTxId, CompactTxIn, CompactTxOut, Tx (..), TxAttributes, TxAux, TxId, TxIn (..), TxInWitness (..), TxOut (..), TxPayload, TxProof (..), TxSig, TxSigData (..), TxValidationError (..), TxWitness, UTxO, UTxOConfiguration (..), UTxOError (..), UTxOValidationError (..), fromList, mkTxAux, mkTxPayload, mkUTxOConfiguration, toCompactTxId, toCompactTxIn, toCompactTxOut, ) import Cardano.Crypto ( Hash, ProtocolMagicId, decodeHash, getProtocolMagicId, sign, ) import Cardano.Prelude import Data.ByteString.Base16 as B16 import Data.Coerce (coerce) import qualified Data.Vector as V import Hedgehog import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range import Test.Cardano.Chain.Common.Gen ( genAddress, genLovelace, genLovelaceError, genMerkleRoot, genNetworkMagic, ) import Test.Cardano.Crypto.Gen ( genAbstractHash, genProtocolMagic, genRedeemSignature, genRedeemVerificationKey, genSignTag, genSigningKey, genTextHash, genVerificationKey, ) import Test.Cardano.Prelude genCompactTxId :: Gen CompactTxId genCompactTxId :: Gen CompactTxId genCompactTxId = Hash Tx -> CompactTxId toCompactTxId (Hash Tx -> CompactTxId) -> GenT Identity (Hash Tx) -> Gen CompactTxId forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity (Hash Tx) genTxId genCompactTxIn :: Gen CompactTxIn genCompactTxIn :: Gen CompactTxIn genCompactTxIn = TxIn -> CompactTxIn toCompactTxIn (TxIn -> CompactTxIn) -> GenT Identity TxIn -> Gen CompactTxIn forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity TxIn genTxIn genCompactTxOut :: Gen CompactTxOut genCompactTxOut :: Gen CompactTxOut genCompactTxOut = TxOut -> CompactTxOut toCompactTxOut (TxOut -> CompactTxOut) -> GenT Identity TxOut -> Gen CompactTxOut forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity TxOut genTxOut genVKWitness :: ProtocolMagicId -> Gen TxInWitness genVKWitness :: ProtocolMagicId -> Gen TxInWitness genVKWitness ProtocolMagicId pm = VerificationKey -> TxSig -> TxInWitness VKWitness (VerificationKey -> TxSig -> TxInWitness) -> GenT Identity VerificationKey -> GenT Identity (TxSig -> TxInWitness) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity VerificationKey genVerificationKey GenT Identity (TxSig -> TxInWitness) -> GenT Identity TxSig -> Gen TxInWitness forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ProtocolMagicId -> GenT Identity TxSig genTxSig ProtocolMagicId pm genRedeemWitness :: ProtocolMagicId -> Gen TxInWitness genRedeemWitness :: ProtocolMagicId -> Gen TxInWitness genRedeemWitness ProtocolMagicId pm = RedeemVerificationKey -> RedeemSignature TxSigData -> TxInWitness RedeemWitness (RedeemVerificationKey -> RedeemSignature TxSigData -> TxInWitness) -> GenT Identity RedeemVerificationKey -> GenT Identity (RedeemSignature TxSigData -> TxInWitness) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity RedeemVerificationKey genRedeemVerificationKey GenT Identity (RedeemSignature TxSigData -> TxInWitness) -> GenT Identity (RedeemSignature TxSigData) -> Gen TxInWitness forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ProtocolMagicId -> Gen TxSigData -> GenT Identity (RedeemSignature TxSigData) forall a. EncCBOR a => ProtocolMagicId -> Gen a -> Gen (RedeemSignature a) genRedeemSignature ProtocolMagicId pm Gen TxSigData genTxSigData genTx :: Gen Tx genTx :: Gen Tx genTx = NonEmpty TxIn -> NonEmpty TxOut -> TxAttributes -> Tx UnsafeTx (NonEmpty TxIn -> NonEmpty TxOut -> TxAttributes -> Tx) -> GenT Identity (NonEmpty TxIn) -> GenT Identity (NonEmpty TxOut -> TxAttributes -> Tx) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity (NonEmpty TxIn) genTxInList GenT Identity (NonEmpty TxOut -> TxAttributes -> Tx) -> GenT Identity (NonEmpty TxOut) -> GenT Identity (TxAttributes -> Tx) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity (NonEmpty TxOut) genTxOutList GenT Identity (TxAttributes -> Tx) -> GenT Identity TxAttributes -> Gen Tx forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity TxAttributes genTxAttributes genTxAttributes :: Gen TxAttributes genTxAttributes :: GenT Identity TxAttributes genTxAttributes = TxAttributes -> GenT Identity TxAttributes forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure (TxAttributes -> GenT Identity TxAttributes) -> TxAttributes -> GenT Identity TxAttributes forall a b. (a -> b) -> a -> b $ () -> TxAttributes forall h. h -> Attributes h mkAttributes () genTxAux :: ProtocolMagicId -> Gen TxAux genTxAux :: ProtocolMagicId -> Gen TxAux genTxAux ProtocolMagicId pm = Tx -> TxWitness -> TxAux mkTxAux (Tx -> TxWitness -> TxAux) -> Gen Tx -> GenT Identity (TxWitness -> TxAux) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Tx genTx GenT Identity (TxWitness -> TxAux) -> GenT Identity TxWitness -> Gen TxAux forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (ProtocolMagicId -> GenT Identity TxWitness genTxWitness ProtocolMagicId pm) genTxHash :: Gen (Hash Tx) genTxHash :: GenT Identity (Hash Tx) genTxHash = Hash Text -> Hash Tx forall a b. Coercible a b => a -> b coerce (Hash Text -> Hash Tx) -> GenT Identity (Hash Text) -> GenT Identity (Hash Tx) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity (Hash Text) genTextHash genTxId :: Gen TxId genTxId :: GenT Identity (Hash Tx) genTxId = GenT Identity Text genBase16Text GenT Identity Text -> (Text -> GenT Identity (Either Text (Hash Tx))) -> GenT Identity (Either Text (Hash Tx)) forall a b. GenT Identity a -> (a -> GenT Identity b) -> GenT Identity b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Either Text (Hash Tx) -> GenT Identity (Either Text (Hash Tx)) forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure (Either Text (Hash Tx) -> GenT Identity (Either Text (Hash Tx))) -> (Text -> Either Text (Hash Tx)) -> Text -> GenT Identity (Either Text (Hash Tx)) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> Either Text (Hash Tx) forall a. Text -> Either Text (Hash a) decodeHash GenT Identity (Either Text (Hash Tx)) -> (Either Text (Hash Tx) -> GenT Identity (Hash Tx)) -> GenT Identity (Hash Tx) forall a b. GenT Identity a -> (a -> GenT Identity b) -> GenT Identity b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (Text -> GenT Identity (Hash Tx)) -> (Hash Tx -> GenT Identity (Hash Tx)) -> Either Text (Hash Tx) -> GenT Identity (Hash Tx) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either Text -> GenT Identity (Hash Tx) forall a. HasCallStack => Text -> a panic Hash Tx -> GenT Identity (Hash Tx) forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure where genBase16Text :: GenT Identity Text genBase16Text = ByteString -> Text decodeUtf8 (ByteString -> Text) -> GenT Identity ByteString -> GenT Identity Text forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity ByteString genBase16Bs genBase16Bs :: Gen ByteString genBase16Bs :: GenT Identity ByteString genBase16Bs = ByteString -> ByteString B16.encode (ByteString -> ByteString) -> GenT Identity ByteString -> GenT Identity ByteString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Int -> GenT Identity ByteString genBytes Int 32 genTxIn :: Gen TxIn genTxIn :: GenT Identity TxIn genTxIn = Hash Tx -> Word16 -> TxIn TxInUtxo (Hash Tx -> Word16 -> TxIn) -> GenT Identity (Hash Tx) -> GenT Identity (Word16 -> TxIn) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity (Hash Tx) genTxId GenT Identity (Word16 -> TxIn) -> GenT Identity Word16 -> GenT Identity TxIn forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity Word16 genWord16 genTxInList :: Gen (NonEmpty TxIn) genTxInList :: GenT Identity (NonEmpty TxIn) genTxInList = Range Int -> GenT Identity TxIn -> GenT Identity (NonEmpty TxIn) forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m (NonEmpty a) Gen.nonEmpty (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 1 Int 20) GenT Identity TxIn genTxIn genTxOut :: Gen TxOut genTxOut :: GenT Identity TxOut genTxOut = Address -> Lovelace -> TxOut TxOut (Address -> Lovelace -> TxOut) -> GenT Identity Address -> GenT Identity (Lovelace -> TxOut) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity Address genAddress GenT Identity (Lovelace -> TxOut) -> GenT Identity Lovelace -> GenT Identity TxOut forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity Lovelace genLovelace genTxOutList :: Gen (NonEmpty TxOut) genTxOutList :: GenT Identity (NonEmpty TxOut) genTxOutList = Range Int -> GenT Identity TxOut -> GenT Identity (NonEmpty TxOut) forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m (NonEmpty a) Gen.nonEmpty (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 1 Int 100) GenT Identity TxOut genTxOut genUTxOConfiguration :: Gen UTxOConfiguration genUTxOConfiguration :: Gen UTxOConfiguration genUTxOConfiguration = [Address] -> UTxOConfiguration mkUTxOConfiguration ([Address] -> UTxOConfiguration) -> GenT Identity [Address] -> Gen UTxOConfiguration forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Int -> GenT Identity Address -> GenT Identity [Address] forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m [a] Gen.list (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 0 Int 50) GenT Identity Address genAddress genTxPayload :: ProtocolMagicId -> Gen TxPayload genTxPayload :: ProtocolMagicId -> Gen TxPayload genTxPayload ProtocolMagicId pm = [TxAux] -> TxPayload mkTxPayload ([TxAux] -> TxPayload) -> GenT Identity [TxAux] -> Gen TxPayload forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Int -> Gen TxAux -> GenT Identity [TxAux] forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m [a] Gen.list (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 0 Int 10) (ProtocolMagicId -> Gen TxAux genTxAux ProtocolMagicId pm) genTxProof :: ProtocolMagicId -> Gen TxProof genTxProof :: ProtocolMagicId -> Gen TxProof genTxProof ProtocolMagicId pm = Word32 -> MerkleRoot Tx -> Hash [TxWitness] -> TxProof TxProof (Word32 -> MerkleRoot Tx -> Hash [TxWitness] -> TxProof) -> GenT Identity Word32 -> GenT Identity (MerkleRoot Tx -> Hash [TxWitness] -> TxProof) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity Word32 genWord32 GenT Identity (MerkleRoot Tx -> Hash [TxWitness] -> TxProof) -> GenT Identity (MerkleRoot Tx) -> GenT Identity (Hash [TxWitness] -> TxProof) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Tx -> GenT Identity (MerkleRoot Tx) forall a. EncCBOR a => Gen a -> Gen (MerkleRoot a) genMerkleRoot Gen Tx genTx GenT Identity (Hash [TxWitness] -> TxProof) -> GenT Identity (Hash [TxWitness]) -> Gen TxProof forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen [TxWitness] -> GenT Identity (Hash [TxWitness]) forall a algo. (EncCBOR a, HashAlgorithm algo) => Gen a -> Gen (AbstractHash algo a) genAbstractHash (Range Int -> GenT Identity TxWitness -> Gen [TxWitness] forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m [a] Gen.list (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 1 Int 5) (ProtocolMagicId -> GenT Identity TxWitness genTxWitness ProtocolMagicId pm)) genTxSig :: ProtocolMagicId -> Gen TxSig genTxSig :: ProtocolMagicId -> GenT Identity TxSig genTxSig ProtocolMagicId pm = ProtocolMagicId -> SignTag -> SigningKey -> TxSigData -> TxSig forall a. EncCBOR a => ProtocolMagicId -> SignTag -> SigningKey -> a -> Signature a sign ProtocolMagicId pm (SignTag -> SigningKey -> TxSigData -> TxSig) -> GenT Identity SignTag -> GenT Identity (SigningKey -> TxSigData -> TxSig) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity SignTag genSignTag GenT Identity (SigningKey -> TxSigData -> TxSig) -> GenT Identity SigningKey -> GenT Identity (TxSigData -> TxSig) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity SigningKey genSigningKey GenT Identity (TxSigData -> TxSig) -> Gen TxSigData -> GenT Identity TxSig forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen TxSigData genTxSigData genTxSigData :: Gen TxSigData genTxSigData :: Gen TxSigData genTxSigData = Hash Tx -> TxSigData TxSigData (Hash Tx -> TxSigData) -> GenT Identity (Hash Tx) -> Gen TxSigData forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity (Hash Tx) genTxHash genTxValidationError :: Gen TxValidationError genTxValidationError :: Gen TxValidationError genTxValidationError = do ProtocolMagic pm <- Gen ProtocolMagic genProtocolMagic let pmi :: ProtocolMagicId pmi = ProtocolMagic -> ProtocolMagicId forall a. AProtocolMagic a -> ProtocolMagicId getProtocolMagicId ProtocolMagic pm nm :: NetworkMagic nm = ProtocolMagic -> NetworkMagic forall a. AProtocolMagic a -> NetworkMagic makeNetworkMagic ProtocolMagic pm [Gen TxValidationError] -> Gen TxValidationError forall (m :: * -> *) a. MonadGen m => [m a] -> m a Gen.choice [ Text -> LovelaceError -> TxValidationError TxValidationLovelaceError (Text -> LovelaceError -> TxValidationError) -> GenT Identity Text -> GenT Identity (LovelaceError -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Int -> GenT Identity Char -> GenT Identity Text forall (m :: * -> *). MonadGen m => Range Int -> m Char -> m Text Gen.text (Int -> Int -> Range Int forall a. a -> a -> Range a Range.constant Int 0 Int 1000) GenT Identity Char forall (m :: * -> *). MonadGen m => m Char Gen.alphaNum GenT Identity (LovelaceError -> TxValidationError) -> GenT Identity LovelaceError -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity LovelaceError genLovelaceError , Tx -> Lovelace -> Lovelace -> TxValidationError TxValidationFeeTooSmall (Tx -> Lovelace -> Lovelace -> TxValidationError) -> Gen Tx -> GenT Identity (Lovelace -> Lovelace -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Tx genTx GenT Identity (Lovelace -> Lovelace -> TxValidationError) -> GenT Identity Lovelace -> GenT Identity (Lovelace -> TxValidationError) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity Lovelace genLovelace GenT Identity (Lovelace -> TxValidationError) -> GenT Identity Lovelace -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity Lovelace genLovelace , TxInWitness -> ProtocolMagicId -> TxSigData -> TxValidationError TxValidationWitnessWrongSignature (TxInWitness -> ProtocolMagicId -> TxSigData -> TxValidationError) -> Gen TxInWitness -> GenT Identity (ProtocolMagicId -> TxSigData -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ProtocolMagicId -> Gen TxInWitness genTxInWitness ProtocolMagicId pmi GenT Identity (ProtocolMagicId -> TxSigData -> TxValidationError) -> GenT Identity ProtocolMagicId -> GenT Identity (TxSigData -> TxValidationError) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ProtocolMagicId -> GenT Identity ProtocolMagicId forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure ProtocolMagicId pmi GenT Identity (TxSigData -> TxValidationError) -> Gen TxSigData -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen TxSigData genTxSigData , TxInWitness -> Address -> TxValidationError TxValidationWitnessWrongKey (TxInWitness -> Address -> TxValidationError) -> Gen TxInWitness -> GenT Identity (Address -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ProtocolMagicId -> Gen TxInWitness genTxInWitness ProtocolMagicId pmi GenT Identity (Address -> TxValidationError) -> GenT Identity Address -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity Address genAddress , TxIn -> TxValidationError TxValidationMissingInput (TxIn -> TxValidationError) -> GenT Identity TxIn -> Gen TxValidationError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity TxIn genTxIn , NetworkMagic -> NetworkMagic -> TxValidationError TxValidationNetworkMagicMismatch (NetworkMagic -> NetworkMagic -> TxValidationError) -> GenT Identity NetworkMagic -> GenT Identity (NetworkMagic -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity NetworkMagic genNetworkMagic GenT Identity (NetworkMagic -> TxValidationError) -> GenT Identity NetworkMagic -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> NetworkMagic -> GenT Identity NetworkMagic forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure NetworkMagic nm , Natural -> Natural -> TxValidationError TxValidationTxTooLarge (Natural -> Natural -> TxValidationError) -> GenT Identity Natural -> GenT Identity (Natural -> TxValidationError) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Natural -> GenT Identity Natural forall (m :: * -> *) a. (MonadGen m, Integral a) => Range a -> m a Gen.integral (Natural -> Natural -> Range Natural forall a. a -> a -> Range a Range.constant Natural 0 Natural 1000) GenT Identity (Natural -> TxValidationError) -> GenT Identity Natural -> Gen TxValidationError forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Range Natural -> GenT Identity Natural forall (m :: * -> *) a. (MonadGen m, Integral a) => Range a -> m a Gen.integral (Natural -> Natural -> Range Natural forall a. a -> a -> Range a Range.constant Natural 0 Natural 1000) , TxValidationError -> Gen TxValidationError forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure TxValidationError TxValidationUnknownAddressAttributes , TxValidationError -> Gen TxValidationError forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure TxValidationError TxValidationUnknownAttributes ] genTxInWitness :: ProtocolMagicId -> Gen TxInWitness genTxInWitness :: ProtocolMagicId -> Gen TxInWitness genTxInWitness ProtocolMagicId pm = [Gen TxInWitness] -> Gen TxInWitness forall (m :: * -> *) a. MonadGen m => [m a] -> m a Gen.choice [ProtocolMagicId -> Gen TxInWitness genVKWitness ProtocolMagicId pm, ProtocolMagicId -> Gen TxInWitness genRedeemWitness ProtocolMagicId pm] genTxWitness :: ProtocolMagicId -> Gen TxWitness genTxWitness :: ProtocolMagicId -> GenT Identity TxWitness genTxWitness ProtocolMagicId pm = [TxInWitness] -> TxWitness forall a. [a] -> Vector a V.fromList ([TxInWitness] -> TxWitness) -> GenT Identity [TxInWitness] -> GenT Identity TxWitness forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Int -> Gen TxInWitness -> GenT Identity [TxInWitness] forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m [a] Gen.list (Int -> Int -> Range Int forall a. Integral a => a -> a -> Range a Range.linear Int 1 Int 10) (ProtocolMagicId -> Gen TxInWitness genTxInWitness ProtocolMagicId pm) genUTxO :: Gen UTxO genUTxO :: Gen UTxO genUTxO = [(TxIn, TxOut)] -> UTxO fromList ([(TxIn, TxOut)] -> UTxO) -> GenT Identity [(TxIn, TxOut)] -> Gen UTxO forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Range Int -> GenT Identity (TxIn, TxOut) -> GenT Identity [(TxIn, TxOut)] forall (m :: * -> *) a. MonadGen m => Range Int -> m a -> m [a] Gen.list (Int -> Int -> Range Int forall a. a -> a -> Range a Range.constant Int 0 Int 1000) GenT Identity (TxIn, TxOut) genTxInTxOut where genTxInTxOut :: Gen (TxIn, TxOut) genTxInTxOut :: GenT Identity (TxIn, TxOut) genTxInTxOut = (,) (TxIn -> TxOut -> (TxIn, TxOut)) -> GenT Identity TxIn -> GenT Identity (TxOut -> (TxIn, TxOut)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity TxIn genTxIn GenT Identity (TxOut -> (TxIn, TxOut)) -> GenT Identity TxOut -> GenT Identity (TxIn, TxOut) forall a b. GenT Identity (a -> b) -> GenT Identity a -> GenT Identity b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> GenT Identity TxOut genTxOut genUTxOError :: Gen UTxOError genUTxOError :: Gen UTxOError genUTxOError = [Gen UTxOError] -> Gen UTxOError forall (m :: * -> *) a. MonadGen m => [m a] -> m a Gen.choice [ TxIn -> UTxOError UTxOMissingInput (TxIn -> UTxOError) -> GenT Identity TxIn -> Gen UTxOError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenT Identity TxIn genTxIn , UTxOError -> Gen UTxOError forall a. a -> GenT Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure UTxOError UTxOOverlappingUnion ] genUTxOValidationError :: Gen UTxOValidationError genUTxOValidationError :: Gen UTxOValidationError genUTxOValidationError = [Gen UTxOValidationError] -> Gen UTxOValidationError forall (m :: * -> *) a. MonadGen m => [m a] -> m a Gen.choice [ TxValidationError -> UTxOValidationError UTxOValidationTxValidationError (TxValidationError -> UTxOValidationError) -> Gen TxValidationError -> Gen UTxOValidationError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen TxValidationError genTxValidationError , UTxOError -> UTxOValidationError UTxOValidationUTxOError (UTxOError -> UTxOValidationError) -> Gen UTxOError -> Gen UTxOValidationError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen UTxOError genUTxOError ]