Struct cardano_serialization_lib::plutus::ExUnits
source · pub struct ExUnits { /* private fields */ }
Implementations§
source§impl ExUnits
impl ExUnits
pub fn from_bytes(bytes: Vec<u8>) -> Result<ExUnits, DeserializeError>
source§impl ExUnits
impl ExUnits
sourcepub fn mem(&self) -> BigNum
pub fn mem(&self) -> BigNum
Examples found in repository?
More examples
src/fees.rs (line 68)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
pub fn calculate_ex_units_ceil_cost(
ex_units: &ExUnits,
ex_unit_prices: &ExUnitPrices,
) -> Result<Coin, JsError> {
type Ratio = (BigInt, BigInt);
fn mult(sc: &SubCoin, x: &BigNum) -> Result<Ratio, JsError> {
let n: BigInt = BigInt::from_str(&sc.numerator.to_str())?;
let d: BigInt = BigInt::from_str(&sc.denominator.to_str())?;
let m: BigInt = BigInt::from_str(&x.to_str())?;
Ok((n.mul(&m), d))
}
fn sum(a: &Ratio, b: &Ratio) -> Ratio {
// Ratio Addition: a/x + b/y = ((a*y) + (b*x))/(x*y)
let (a_num, a_denum) = &a;
let (b_num, b_denum) = &b;
if a_num.is_zero() {
return b.clone();
}
if b_num.is_zero() {
return a.clone();
}
let a_num_fixed = &a_num.mul(b_denum);
let b_num_fixed = &b_num.mul(a_denum);
let a_b_num_sum = a_num_fixed.add(b_num_fixed);
let common_denum = a_denum.mul(b_denum);
(a_b_num_sum, common_denum)
}
let mem_ratio: Ratio = mult(&ex_unit_prices.mem_price(), &ex_units.mem())?;
let steps_ratio: Ratio = mult(&ex_unit_prices.step_price(), &ex_units.steps())?;
let (total_num, total_denum) = sum(&mem_ratio, &steps_ratio);
match total_num.div_ceil(&total_denum).as_u64() {
Some(coin) => Ok(coin),
_ => Err(JsError::from_str(&format!(
"Failed to calculate ceil from ratio {}/{}",
total_num.to_str(),
total_denum.to_str(),
))),
}
}
sourcepub fn steps(&self) -> BigNum
pub fn steps(&self) -> BigNum
Examples found in repository?
More examples
src/fees.rs (line 69)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
pub fn calculate_ex_units_ceil_cost(
ex_units: &ExUnits,
ex_unit_prices: &ExUnitPrices,
) -> Result<Coin, JsError> {
type Ratio = (BigInt, BigInt);
fn mult(sc: &SubCoin, x: &BigNum) -> Result<Ratio, JsError> {
let n: BigInt = BigInt::from_str(&sc.numerator.to_str())?;
let d: BigInt = BigInt::from_str(&sc.denominator.to_str())?;
let m: BigInt = BigInt::from_str(&x.to_str())?;
Ok((n.mul(&m), d))
}
fn sum(a: &Ratio, b: &Ratio) -> Ratio {
// Ratio Addition: a/x + b/y = ((a*y) + (b*x))/(x*y)
let (a_num, a_denum) = &a;
let (b_num, b_denum) = &b;
if a_num.is_zero() {
return b.clone();
}
if b_num.is_zero() {
return a.clone();
}
let a_num_fixed = &a_num.mul(b_denum);
let b_num_fixed = &b_num.mul(a_denum);
let a_b_num_sum = a_num_fixed.add(b_num_fixed);
let common_denum = a_denum.mul(b_denum);
(a_b_num_sum, common_denum)
}
let mem_ratio: Ratio = mult(&ex_unit_prices.mem_price(), &ex_units.mem())?;
let steps_ratio: Ratio = mult(&ex_unit_prices.step_price(), &ex_units.steps())?;
let (total_num, total_denum) = sum(&mem_ratio, &steps_ratio);
match total_num.div_ceil(&total_denum).as_u64() {
Some(coin) => Ok(coin),
_ => Err(JsError::from_str(&format!(
"Failed to calculate ceil from ratio {}/{}",
total_num.to_str(),
total_denum.to_str(),
))),
}
}
Trait Implementations§
source§impl<'de> Deserialize<'de> for ExUnits
impl<'de> Deserialize<'de> for ExUnits
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 ExUnits
impl Deserialize for ExUnits
fn deserialize<R: BufRead + Seek>(
raw: &mut Deserializer<R>
) -> Result<Self, DeserializeError>
source§impl JsonSchema for ExUnits
impl JsonSchema for ExUnits
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 ExUnits
impl Ord for ExUnits
source§impl PartialEq<ExUnits> for ExUnits
impl PartialEq<ExUnits> for ExUnits
source§impl PartialOrd<ExUnits> for ExUnits
impl PartialOrd<ExUnits> for ExUnits
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