plutus_ledger_api/v1/
redeemer.rs1use cardano_serialization_lib as csl;
4
5#[cfg(feature = "lbf")]
6use lbr_prelude::json::Json;
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10use crate as plutus_ledger_api;
11use crate::csl::pla_to_csl::{TryFromPLA, TryFromPLAError, TryToCSL};
12use crate::plutus_data::{IsPlutusData, PlutusData};
13use crate::v1::crypto::LedgerBytes;
14
15#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, IsPlutusData)]
22#[is_plutus_data_derive_strategy = "Newtype"]
23#[cfg_attr(feature = "lbf", derive(Json))]
24#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25pub struct Redeemer(pub PlutusData);
26
27#[derive(Clone, Debug)]
28pub struct RedeemerWithExtraInfo<'a> {
29 pub redeemer: &'a Redeemer,
30 pub tag: &'a csl::RedeemerTag,
31 pub index: u64,
32}
33
34impl TryFromPLA<RedeemerWithExtraInfo<'_>> for csl::Redeemer {
35 fn try_from_pla<'a>(val: &RedeemerWithExtraInfo<'_>) -> Result<csl::Redeemer, TryFromPLAError> {
36 let Redeemer(plutus_data) = val.redeemer;
37 Ok(csl::Redeemer::new(
38 val.tag,
39 &val.index.try_to_csl()?,
40 &plutus_data.try_to_csl()?,
41 &csl::ExUnits::new(&csl::BigNum::from(0u64), &csl::BigNum::from(0u64)),
42 ))
43 }
44}
45
46#[derive(Clone, Debug, PartialEq, Eq, IsPlutusData)]
52#[is_plutus_data_derive_strategy = "Newtype"]
53#[cfg_attr(feature = "lbf", derive(Json))]
54#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
55pub struct RedeemerHash(pub LedgerBytes);