Skip to content

Commit 941aca3

Browse files
committed
tests
1 parent 789749c commit 941aca3

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

rust/src/tx_builder.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4875,5 +4875,74 @@ mod tests {
48754875
);
48764876
assert_eq!(tx_builder.script_data_hash.unwrap(), data_hash);
48774877
}
4878+
4879+
#[test]
4880+
fn test_plutus_witness_redeemer_index_auto_changing() {
4881+
let mut tx_builder = create_reallistic_tx_builder();
4882+
tx_builder.set_fee(&to_bignum(42));
4883+
let (script1, _) = plutus_script_and_hash(0);
4884+
let (script2, _) = plutus_script_and_hash(1);
4885+
let datum1 = PlutusData::new_bytes(fake_bytes(10));
4886+
let datum2 = PlutusData::new_bytes(fake_bytes(11));
4887+
4888+
// Creating redeemers with indexes ZERO
4889+
let redeemer1 = Redeemer::new(
4890+
&RedeemerTag::new_spend(),
4891+
&to_bignum(0),
4892+
&PlutusData::new_bytes(fake_bytes(20)),
4893+
&ExUnits::new(&to_bignum(1), &to_bignum(2)),
4894+
);
4895+
let redeemer2 = Redeemer::new(
4896+
&RedeemerTag::new_spend(),
4897+
&to_bignum(0),
4898+
&PlutusData::new_bytes(fake_bytes(21)),
4899+
&ExUnits::new(&to_bignum(1), &to_bignum(2)),
4900+
);
4901+
4902+
// Add a regular NON-script input first
4903+
tx_builder.add_input(
4904+
&byron_address(),
4905+
&TransactionInput::new(&genesis_id(), 0),
4906+
&Value::new(&to_bignum(1_000_000)),
4907+
);
4908+
4909+
// Adding two plutus inputs then
4910+
// both have redeemers with index ZERO
4911+
tx_builder.add_plutus_script_input(
4912+
&PlutusWitness::new(&script1, &datum1, &redeemer1),
4913+
&TransactionInput::new(&genesis_id(), 0),
4914+
&Value::new(&to_bignum(1_000_000)),
4915+
);
4916+
tx_builder.add_plutus_script_input(
4917+
&PlutusWitness::new(&script2, &datum2, &redeemer2),
4918+
&TransactionInput::new(&genesis_id(), 0),
4919+
&Value::new(&to_bignum(1_000_000)),
4920+
);
4921+
4922+
// Calc the script data hash
4923+
tx_builder.calc_script_data_hash(
4924+
&TxBuilderConstants::plutus_default_cost_models(),
4925+
);
4926+
4927+
let tx: Transaction = tx_builder.build_tx().unwrap();
4928+
assert!(tx.witness_set.redeemers.is_some());
4929+
let redeems = tx.witness_set.redeemers.unwrap();
4930+
assert_eq!(redeems.len(), 2);
4931+
4932+
fn compare_redeems(r1: Redeemer, r2: Redeemer) {
4933+
assert_eq!(r1.tag(), r2.tag());
4934+
assert_eq!(r1.data(), r2.data());
4935+
assert_eq!(r1.ex_units(), r2.ex_units());
4936+
}
4937+
4938+
compare_redeems(redeems.get(0), redeemer1);
4939+
compare_redeems(redeems.get(1), redeemer2);
4940+
4941+
// Note the redeemers from the result transaction are equal with source redeemers
4942+
// In everything EXCEPT the index field, the indexes have changed to 1 and 2
4943+
// To match the position of their corresponding input
4944+
assert_eq!(redeems.get(0).index(), to_bignum(1));
4945+
assert_eq!(redeems.get(1).index(), to_bignum(2));
4946+
}
48784947
}
48794948

0 commit comments

Comments
 (0)