plutus_ledger_api/generators/correct/
v2.rs1use super::primitive::arb_natural;
5use super::v1::{
6 arb_assoc_map, arb_d_cert, arb_payment_pub_key_hash, arb_plutus_interval_posix_time,
7 arb_redeemer, arb_script_purpose, arb_staking_credential, arb_transaction_hash,
8};
9use crate::generators::correct::v1::{
10 arb_address, arb_datum, arb_datum_hash, arb_script_hash, arb_transaction_input, arb_value,
11};
12use crate::v2::datum::OutputDatum;
13use crate::v2::transaction::{ScriptContext, TransactionInfo, TransactionOutput, TxInInfo};
14use proptest::collection::vec;
15use proptest::option;
16use proptest::prelude::{prop_oneof, Just};
17use proptest::strategy::Strategy;
18
19pub fn arb_transaction_output() -> impl Strategy<Value = TransactionOutput> {
21 (
22 arb_address(),
23 arb_value(),
24 arb_output_datum(),
25 option::of(arb_script_hash()),
26 )
27 .prop_map(
28 |(address, value, datum, reference_script)| TransactionOutput {
29 address,
30 value,
31 datum,
32 reference_script,
33 },
34 )
35}
36
37pub fn arb_output_datum() -> impl Strategy<Value = OutputDatum> {
39 prop_oneof![
40 Just(OutputDatum::None),
41 arb_datum_hash().prop_map(OutputDatum::DatumHash),
42 arb_datum().prop_map(OutputDatum::InlineDatum)
43 ]
44}
45
46pub fn arb_tx_in_info() -> impl Strategy<Value = TxInInfo> {
48 (arb_transaction_input(), arb_transaction_output())
49 .prop_map(|(reference, output)| TxInInfo { reference, output })
50}
51
52pub fn arb_transaction_info() -> impl Strategy<Value = TransactionInfo> {
53 (
54 vec(arb_tx_in_info(), 5),
55 vec(arb_tx_in_info(), 5),
56 vec(arb_transaction_output(), 5),
57 arb_value(),
58 arb_value(),
59 vec(arb_d_cert(), 5),
60 arb_assoc_map(arb_staking_credential(), arb_natural(1)),
61 arb_plutus_interval_posix_time(),
62 vec(arb_payment_pub_key_hash(), 5),
63 arb_assoc_map(arb_script_purpose(), arb_redeemer()),
64 arb_assoc_map(arb_datum_hash(), arb_datum()),
65 arb_transaction_hash(),
66 )
67 .prop_map(
68 |(
69 inputs,
70 reference_inputs,
71 outputs,
72 fee,
73 mint,
74 d_cert,
75 wdrl,
76 valid_range,
77 signatories,
78 redeemers,
79 datums,
80 id,
81 )| {
82 TransactionInfo {
83 inputs,
84 reference_inputs,
85 outputs,
86 fee,
87 mint,
88 d_cert,
89 wdrl,
90 valid_range,
91 signatories,
92 redeemers,
93 datums,
94 id,
95 }
96 },
97 )
98}
99
100pub fn arb_script_context() -> impl Strategy<Value = ScriptContext> {
101 (arb_script_purpose(), arb_transaction_info())
102 .prop_map(|(purpose, tx_info)| ScriptContext { purpose, tx_info })
103}