@@ -125,6 +125,12 @@ module Test.Gen.Cardano.Api.Typed
125125 , genLedgerValueForTxOut
126126 , genLedgerMultiAssetValue
127127 , genWitnesses
128+ , genScriptWitnessedTxIn
129+ , genScriptWitnessedTxMintValue
130+ , genScriptWitnessedTxCertificates
131+ , genScriptWitnessedTxProposals
132+ , genScriptWitnessedTxWithdrawals
133+ , genScriptWitnesssedTxVotingProcedures
128134 , genWitnessNetworkIdOrByronAddress
129135 , genRational
130136 , genGovernancePoll
@@ -742,6 +748,17 @@ genTxWithdrawals =
742748 ]
743749 )
744750
751+ genScriptWitnessedTxWithdrawals :: Exp. Era era -> Gen (TxWithdrawals BuildTx era )
752+ genScriptWitnessedTxWithdrawals era = do
753+ num <- Gen. integral (Range. constant 0 3 )
754+ sAddrs <- Gen. list (Range. singleton num) genStakeAddress
755+ coins <- Gen. list (Range. singleton num) genPositiveLovelace
756+ sWits <-
757+ Gen. list (Range. singleton num) $
758+ ScriptWitness ScriptWitnessForStakeAddr <$> genApiPlutusScriptWitness WitCtxStake era
759+ let withdrawals = zipWith3 (\ addr c wit -> (addr, c, BuildTxWith wit)) sAddrs coins sWits
760+ return $ TxWithdrawals (convert era) withdrawals
761+
745762genTxCertificates :: Typeable era => CardanoEra era -> Gen (TxCertificates BuildTx era )
746763genTxCertificates =
747764 inEonForEra
@@ -755,6 +772,20 @@ genTxCertificates =
755772 ]
756773 )
757774
775+ genScriptWitnessedTxCertificates :: Typeable era => Exp. Era era -> Gen (TxCertificates BuildTx era )
776+ genScriptWitnessedTxCertificates era = do
777+ let w = convert era
778+ num <- Gen. integral (Range. linear 0 3 )
779+ certs <- Gen. list (Range. singleton num) $ genCertificate w
780+ plutusScriptWits <- Gen. list (Range. singleton num) $ genApiPlutusScriptWitness WitCtxStake era
781+ let certsAndWits =
782+ zipWith
783+ (\ c p -> (c, Just p))
784+ certs
785+ plutusScriptWits
786+
787+ pure $ mkTxCertificates (convert era) certsAndWits
788+
758789genCertificate :: forall era . Typeable era => ShelleyBasedEra era -> Gen (Certificate era )
759790genCertificate sbe =
760791 Gen. choice $
@@ -1388,6 +1419,17 @@ genProposals w = conwayEraOnwardsConstraints w $ do
13881419 (proposal,) <$> Gen. maybe (genScriptWitnessForStake sbe)
13891420 pure $ mkTxProposalProcedures proposalsWithMaybeWitnesses
13901421
1422+ genScriptWitnessedTxProposals
1423+ :: Exp. Era era
1424+ -> Gen (TxProposalProcedures BuildTx era )
1425+ genScriptWitnessedTxProposals era = do
1426+ let w = convert era
1427+ num <- Gen. integral (Range. linear 0 3 )
1428+ proposals <- Gen. list (Range. singleton num) (genProposal w)
1429+ sWits <- Gen. list (Range. singleton num) $ genApiPlutusScriptWitness WitCtxStake era
1430+ let proposalsWithMaybeWitnesses = zipWith (\ p wit -> (p, Just wit)) proposals sWits
1431+ pure $ Exp. obtainCommonConstraints era $ mkTxProposalProcedures proposalsWithMaybeWitnesses
1432+
13911433genProposal :: ConwayEraOnwards era -> Gen (L. ProposalProcedure (ShelleyLedgerEra era ))
13921434genProposal w =
13931435 conwayEraOnwardsTestConstraints w Q. arbitrary
@@ -1405,6 +1447,18 @@ genVotingProcedures w = conwayEraOnwardsConstraints w $ do
14051447 <$> Q. arbitrary
14061448 <*> pure (pure votersWithWitnesses)
14071449
1450+ genScriptWitnesssedTxVotingProcedures
1451+ :: Exp. Era era
1452+ -> Gen (Api. TxVotingProcedures BuildTx era )
1453+ genScriptWitnesssedTxVotingProcedures era = do
1454+ num <- Gen. integral (Range. linear 0 3 )
1455+ voters <- Gen. list (Range. singleton num) Q. arbitrary
1456+ plutusScriptWits <- Gen. list (Range. singleton num) $ genApiPlutusScriptWitness WitCtxStake era
1457+ let votersWithWitnesses = fromList $ zip voters plutusScriptWits
1458+ Api. TxVotingProcedures
1459+ <$> Exp. obtainCommonConstraints era Q. arbitrary
1460+ <*> pure (pure votersWithWitnesses)
1461+
14081462genCurrentTreasuryValue :: ConwayEraOnwards era -> Gen L. Coin
14091463genCurrentTreasuryValue _era = Q. arbitrary
14101464
@@ -1447,8 +1501,38 @@ genPlutusScriptWitness = do
14471501genPlutusScriptDatum :: Gen (Exp. PlutusScriptDatum lang purpose )
14481502genPlutusScriptDatum = return Exp. NoScriptDatum
14491503
1504+ genScriptWitnessedTxIn
1505+ :: Exp. Era era -> Gen [(TxIn , BuildTxWith BuildTx (Witness WitCtxTxIn era ))]
1506+ genScriptWitnessedTxIn era = do
1507+ num <- Gen. integral (Range. linear 0 3 )
1508+ sWits <-
1509+ map (ScriptWitness ScriptWitnessForSpending )
1510+ <$> Gen. list (Range. singleton num) (genApiPlutusScriptWitness WitCtxTxIn era)
1511+ txIns <- Gen. list (Range. singleton num) genTxIn
1512+ pure $ zip txIns (BuildTxWith <$> sWits)
1513+
1514+ genScriptWitnessedTxMintValue
1515+ :: Exp. Era era -> Gen (TxMintValue BuildTx era )
1516+ genScriptWitnessedTxMintValue era = do
1517+ let w = convert era
1518+ num <- Gen. integral (Range. linear 0 3 )
1519+ sWits <-
1520+ Gen. list (Range. singleton num) (genApiPlutusScriptWitness WitCtxMint era)
1521+
1522+ policies <- Gen. list (Range. singleton num) genPolicyId
1523+ mintValues <- Gen. list (Range. singleton num) genPolicyAssets
1524+ let assets =
1525+ [ (p, mintValue, BuildTxWith s)
1526+ | p <- policies
1527+ , s <- sWits
1528+ , mintValue <- mintValues
1529+ ]
1530+
1531+ pure $ mkTxMintValue w assets
1532+
14501533-- | This generator does not generate a valid witness - just a random one.
1451- genScriptWitnessForStake :: ShelleyBasedEra era -> Gen (Api. ScriptWitness WitCtxStake era )
1534+ genScriptWitnessForStake
1535+ :: ShelleyBasedEra era -> Gen (Api. ScriptWitness WitCtxStake era )
14521536genScriptWitnessForStake sbe = do
14531537 ScriptInEra scriptLangInEra script' <- genScriptInEra sbe
14541538 case script' of
@@ -1474,6 +1558,50 @@ genScriptWitnessForStake sbe = do
14741558 scriptRedeemer
14751559 <$> genExecutionUnits
14761560
1561+ genAnyPlutusScriptVersion :: Gen AnyPlutusScriptVersion
1562+ genAnyPlutusScriptVersion = do
1563+ Gen. element [minBound .. maxBound ]
1564+
1565+ plutusScriptLangaugeInEra
1566+ :: Exp. Era era -> PlutusScriptVersion lang -> ScriptLanguageInEra lang era
1567+ plutusScriptLangaugeInEra Exp. ConwayEra l =
1568+ case l of
1569+ PlutusScriptV1 -> PlutusScriptV1InConway
1570+ PlutusScriptV2 -> PlutusScriptV2InConway
1571+ PlutusScriptV3 -> PlutusScriptV3InConway
1572+
1573+ genApiPlutusScriptWitness
1574+ :: WitCtx witctx -> Exp. Era era -> Gen (Api. ScriptWitness witctx era )
1575+ genApiPlutusScriptWitness witCtx era = do
1576+ dat <- case witCtx of
1577+ WitCtxTxIn -> do
1578+ datum <- Gen. maybe genHashableScriptData
1579+
1580+ Gen. element [ScriptDatumForTxIn datum, InlineScriptDatum ]
1581+ WitCtxMint -> do
1582+ pure NoScriptDatumForMint
1583+ WitCtxStake -> do
1584+ pure NoScriptDatumForStake
1585+
1586+ AnyPlutusScriptVersion lang <- genAnyPlutusScriptVersion
1587+ PlutusScript plutusScriptVersion' plutusScript <-
1588+ PlutusScript lang <$> genValidPlutusScript lang
1589+
1590+ plutusScriptOrReferenceInput <-
1591+ Gen. choice
1592+ [ pure $ PScript plutusScript
1593+ , PReferenceScript <$> genTxIn
1594+ ]
1595+
1596+ scriptRedeemer <- genHashableScriptData
1597+ PlutusScriptWitness
1598+ (plutusScriptLangaugeInEra era lang)
1599+ plutusScriptVersion'
1600+ plutusScriptOrReferenceInput
1601+ dat
1602+ scriptRedeemer
1603+ <$> genExecutionUnits
1604+
14771605genScriptWitnessForMint :: ShelleyBasedEra era -> Gen (Api. ScriptWitness WitCtxMint era )
14781606genScriptWitnessForMint sbe = do
14791607 ScriptInEra scriptLangInEra script' <- genScriptInEra sbe
0 commit comments