#decimal #contracts #soroban #percent #i128 #atomic #place

soroban-decimal

A precise decimal arithmetic package for Soroban contracts

2 stable releases

1.1.0 Aug 27, 2024
1.0.0 May 8, 2024

#6 in #i128

GPL-3.0 license

78KB
1.5K SLoC

Soroban Decimal

This code is taken from the cosmwasm-std crate, which is licensed under the Apache License 2.0 The contract provides a Decimal struct for arithmetic operations, suitable for blockchain De-Fi operations, where precision is of highest importance. It ensures that calculations are accurate up to 18 decimal places.

Decimal(i128)

Methods

  • new(value: i128) -> Self: Creates a new Decimal.
  • raw(value: i128) -> Self: Returns the raw value from i128.
  • one() -> Self: Create a 1.0 Decimal.
  • zero() -> Self: Create a 0.0 Decimal.
  • percent(x: i64) -> Self: Convert x% into Decimal.
  • permille(x: i64) -> Self: Convert permille (x/1000) into Decimal.
  • bps(x: i64) -> Self: Convert basis points (x/10000) into Decimal.
  • from_atomics(atomics: i128, decimal_places: i32) -> Self: Creates a Decimal from atomic units and decimal places.
  • inv(&self) -> Option<Self>: Returns the multiplicative inverse 1/d for decimal d.
  • from_ratio(numerator: impl Into<i128>, denominator: impl Into<i128>) -> Self: Returns the ratio (numerator / denominator) as a Decimal.
  • abs(&self) -> Self: Returns the absolute value of the Decimal.
  • to_string(&self, env: &Env) -> String: Converts the Decimal to a string.

Decimal256

Methods

  • new(value: u128) -> Self: Creates a new Decimal.
  • raw(value: u128) -> Self: Returns the raw value from u128.
  • one() -> Self: Create a 1.0 Decimal.
  • zero() -> Self: Create a 0.0 Decimal.
  • percent(x: u64) -> Self: Convert x% into Decimal.
  • permille(x: u64) -> Self: Convert permille (x/1000) into Decimal.
  • bps(x: u64) -> Self: Convert basis points (x/10000) into Decimal.
  • from_atomics(atomics: u128, decimal_places: i32) -> Self: Creates a Decimal from atomic units and decimal places.
  • inv(&self) -> Option<Self>: Returns the multiplicative inverse 1/d for decimal d.
  • from_ratio(numerator: impl Into<U256>, denominator: impl Into<U256>) -> Self: Returns the ratio (numerator / denominator) as a Decimal.
  • abs(&self) -> Self: Returns the absolute value of the Decimal.
  • to_string(&self, env: &Env) -> String: Converts the Decimal to a string.

N.B.: from_atomics(atomics: u128, decimal_places: i32) -> Self currently supports maximum 38 as input for decimcal_places

Dependencies

~11–15MB
~315K SLoC