Struct cardano_serialization_lib::plutus::ExUnitPrices
source · pub struct ExUnitPrices { /* private fields */ }
Implementations§
source§impl ExUnitPrices
impl ExUnitPrices
pub fn from_bytes(bytes: Vec<u8>) -> Result<ExUnitPrices, DeserializeError>
source§impl ExUnitPrices
impl ExUnitPrices
pub fn from_hex(hex_str: &str) -> Result<ExUnitPrices, DeserializeError>
source§impl ExUnitPrices
impl ExUnitPrices
source§impl ExUnitPrices
impl ExUnitPrices
sourcepub fn mem_price(&self) -> UnitInterval
pub fn mem_price(&self) -> UnitInterval
Examples found in repository?
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 step_price(&self) -> UnitInterval
pub fn step_price(&self) -> UnitInterval
Examples found in repository?
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(),
))),
}
}
pub fn new(mem_price: &UnitInterval, step_price: &UnitInterval) -> Self
Trait Implementations§
source§impl Clone for ExUnitPrices
impl Clone for ExUnitPrices
source§fn clone(&self) -> ExUnitPrices
fn clone(&self) -> ExUnitPrices
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for ExUnitPrices
impl Debug for ExUnitPrices
source§impl<'de> Deserialize<'de> for ExUnitPrices
impl<'de> Deserialize<'de> for ExUnitPrices
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 ExUnitPrices
impl Deserialize for ExUnitPrices
fn deserialize<R: BufRead + Seek>(
raw: &mut Deserializer<R>
) -> Result<Self, DeserializeError>
source§impl JsonSchema for ExUnitPrices
impl JsonSchema for ExUnitPrices
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 ExUnitPrices
impl Ord for ExUnitPrices
source§fn cmp(&self, other: &ExUnitPrices) -> Ordering
fn cmp(&self, other: &ExUnitPrices) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl PartialEq<ExUnitPrices> for ExUnitPrices
impl PartialEq<ExUnitPrices> for ExUnitPrices
source§fn eq(&self, other: &ExUnitPrices) -> bool
fn eq(&self, other: &ExUnitPrices) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<ExUnitPrices> for ExUnitPrices
impl PartialOrd<ExUnitPrices> for ExUnitPrices
source§fn partial_cmp(&self, other: &ExUnitPrices) -> Option<Ordering>
fn partial_cmp(&self, other: &ExUnitPrices) -> Option<Ordering>
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