whisky_csl/utils/
redeemer.rs

1use 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}