whisky_csl/utils/
redeemer.rs1use cardano_serialization_lib::{self as csl};
2use whisky_common::*;
3
4use super::to_bignum;
5
6pub fn to_csl_redeemer(
7 redeemer_tag: RedeemerTag,
8 redeemer: Redeemer,
9 index: u64,
10) -> Result<csl::Redeemer, WError> {
11 let csl_redeemer_tag = match redeemer_tag {
12 RedeemerTag::Spend => csl::RedeemerTag::new_spend(),
13 RedeemerTag::Mint => csl::RedeemerTag::new_mint(),
14 RedeemerTag::Cert => csl::RedeemerTag::new_cert(),
15 RedeemerTag::Reward => csl::RedeemerTag::new_reward(),
16 RedeemerTag::Vote => csl::RedeemerTag::new_vote(),
17 RedeemerTag::Propose => csl::RedeemerTag::new_voting_proposal(),
18 };
19 Ok(csl::Redeemer::new(
20 &csl_redeemer_tag,
21 &to_bignum(index).map_err(WError::add_err_trace(
22 "to_csl_redeemer - invalid redeemer index",
23 ))?,
24 &csl::PlutusData::from_hex(&redeemer.data)
25 .map_err(WError::from_err("to_csl_redeemer - invalid redeemer data"))?,
26 &csl::ExUnits::new(
27 &to_bignum(redeemer.ex_units.mem).map_err(WError::add_err_trace(
28 "to_csl_redeemer - invalid redeemer memory",
29 ))?,
30 &to_bignum(redeemer.ex_units.steps).map_err(WError::add_err_trace(
31 "to_csl_redeemer - invalid redeemer steps",
32 ))?,
33 ),
34 ))
35}