Struct cardano_serialization_lib::plutus::Redeemers
source · pub struct Redeemers(_);
Implementations§
source§impl Redeemers
impl Redeemers
sourcepub fn to_bytes(&self) -> Vec<u8>
pub fn to_bytes(&self) -> Vec<u8>
Examples found in repository?
src/utils.rs (line 1263)
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
pub fn hash_script_data(
redeemers: &Redeemers,
cost_models: &Costmdls,
datums: Option<PlutusList>,
) -> ScriptDataHash {
let mut buf = Vec::new();
if redeemers.len() == 0 && datums.is_some() {
/*
; Finally, note that in the case that a transaction includes datums but does not
; include any redeemers, the script data format becomes (in hex):
; [ 80 | datums | A0 ]
; corresponding to a CBOR empty list and an empty map (our apologies).
*/
buf.push(0x80);
if let Some(d) = &datums {
buf.extend(d.to_bytes());
}
buf.push(0xA0);
} else {
/*
; script data format:
; [ redeemers | datums | language views ]
; The redeemers are exactly the data present in the transaction witness set.
; Similarly for the datums, if present. If no datums are provided, the middle
; field is an empty string.
*/
buf.extend(redeemers.to_bytes());
if let Some(d) = &datums {
buf.extend(d.to_bytes());
}
buf.extend(cost_models.language_views_encoding());
}
ScriptDataHash::from(blake2b256(&buf))
}
source§impl Redeemers
impl Redeemers
pub fn from_bytes(bytes: Vec<u8>) -> Result<Redeemers, DeserializeError>
source§impl Redeemers
impl Redeemers
sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
src/tx_builder/tx_inputs_builder.rs (line 215)
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
pub(crate) fn collect(&self) -> (PlutusScripts, Option<PlutusList>, Redeemers) {
let mut used_scripts = BTreeSet::new();
let mut used_datums = BTreeSet::new();
let mut used_redeemers = BTreeSet::new();
let mut s = PlutusScripts::new();
let mut d : Option<PlutusList> = None;
let mut r = Redeemers::new();
self.0.iter().for_each(|w| {
if let PlutusScriptSourceEnum::Script(script) = &w.script {
if used_scripts.insert(script.clone()) {
s.add(script);
}
}
if let Some(DatumSourceEnum::Datum(datum)) = &w.datum {
if used_datums.insert(datum) {
match d {
Some(ref mut d) => d.add(datum),
None => d = {
let mut initial_list = PlutusList::new();
initial_list.add(datum);
Some(initial_list)
}
}
}
}
if used_redeemers.insert(w.redeemer.clone()) {
r.add(&w.redeemer);
}
});
(s, d, r)
}
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Examples found in repository?
src/utils.rs (line 1243)
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
pub fn hash_script_data(
redeemers: &Redeemers,
cost_models: &Costmdls,
datums: Option<PlutusList>,
) -> ScriptDataHash {
let mut buf = Vec::new();
if redeemers.len() == 0 && datums.is_some() {
/*
; Finally, note that in the case that a transaction includes datums but does not
; include any redeemers, the script data format becomes (in hex):
; [ 80 | datums | A0 ]
; corresponding to a CBOR empty list and an empty map (our apologies).
*/
buf.push(0x80);
if let Some(d) = &datums {
buf.extend(d.to_bytes());
}
buf.push(0xA0);
} else {
/*
; script data format:
; [ redeemers | datums | language views ]
; The redeemers are exactly the data present in the transaction witness set.
; Similarly for the datums, if present. If no datums are provided, the middle
; field is an empty string.
*/
buf.extend(redeemers.to_bytes());
if let Some(d) = &datums {
buf.extend(d.to_bytes());
}
buf.extend(cost_models.language_views_encoding());
}
ScriptDataHash::from(blake2b256(&buf))
}
pub fn get(&self, index: usize) -> Redeemer
sourcepub fn add(&mut self, elem: &Redeemer)
pub fn add(&mut self, elem: &Redeemer)
Examples found in repository?
src/tx_builder/tx_inputs_builder.rs (line 235)
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
pub(crate) fn collect(&self) -> (PlutusScripts, Option<PlutusList>, Redeemers) {
let mut used_scripts = BTreeSet::new();
let mut used_datums = BTreeSet::new();
let mut used_redeemers = BTreeSet::new();
let mut s = PlutusScripts::new();
let mut d : Option<PlutusList> = None;
let mut r = Redeemers::new();
self.0.iter().for_each(|w| {
if let PlutusScriptSourceEnum::Script(script) = &w.script {
if used_scripts.insert(script.clone()) {
s.add(script);
}
}
if let Some(DatumSourceEnum::Datum(datum)) = &w.datum {
if used_datums.insert(datum) {
match d {
Some(ref mut d) => d.add(datum),
None => d = {
let mut initial_list = PlutusList::new();
initial_list.add(datum);
Some(initial_list)
}
}
}
}
if used_redeemers.insert(w.redeemer.clone()) {
r.add(&w.redeemer);
}
});
(s, d, r)
}
sourcepub fn total_ex_units(&self) -> Result<ExUnits, JsError>
pub fn total_ex_units(&self) -> Result<ExUnits, JsError>
Trait Implementations§
source§impl<'de> Deserialize<'de> for Redeemers
impl<'de> Deserialize<'de> for Redeemers
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl Deserialize for Redeemers
impl Deserialize for Redeemers
fn deserialize<R: BufRead + Seek>(
raw: &mut Deserializer<R>
) -> Result<Self, DeserializeError>
source§impl JsonSchema for Redeemers
impl JsonSchema for Redeemers
source§fn schema_name() -> String
fn schema_name() -> String
The name of the generated JSON Schema. Read more
source§fn json_schema(gen: &mut SchemaGenerator) -> Schema
fn json_schema(gen: &mut SchemaGenerator) -> Schema
Generates a JSON Schema for this type. Read more
source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
Whether JSON Schemas generated for this type should be re-used where possible using the
$ref
keyword. Read moresource§impl Ord for Redeemers
impl Ord for Redeemers
source§impl PartialEq<Redeemers> for Redeemers
impl PartialEq<Redeemers> for Redeemers
source§impl PartialOrd<Redeemers> for Redeemers
impl PartialOrd<Redeemers> for Redeemers
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read more