osmomath

package
v13.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2022 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// number of decimal places
	Precision = 36

	// bytes required to represent the above precision
	// Ceiling[Log2[10**Precision - 1]]
	DecimalPrecisionBits = 120
)

Variables

View Source
var (
	ErrEmptyDecimalStr      = errors.New("decimal string cannot be empty")
	ErrInvalidDecimalLength = errors.New("invalid decimal length")
	ErrInvalidDecimalStr    = errors.New("invalid decimal string")
)

Decimal errors

View Source
var MaxSortableDec = OneDec().Quo(SmallestDec())

MaxSortableDec is the largest Dec that can be passed into SortableDecBytes() Its negative form is the least Dec that can be passed in.

Functions

func AbsDifferenceWithSign

func AbsDifferenceWithSign(a, b sdk.Dec) (sdk.Dec, bool)

AbsDifferenceWithSign returns | a - b |, (a - b).sign() a is mutated and returned.

func DecApproxEq

func DecApproxEq(t *testing.T, d1 BigDec, d2 BigDec, tol BigDec) (*testing.T, bool, string, string, string)

DecApproxEq returns true if the differences between two given decimals are smaller than the tolerance range. Intended to be used with require/assert: require.True(t, DecEq(...))

func DecEq

func DecEq(t *testing.T, exp, got BigDec) (*testing.T, bool, string, string, string)

DecEq returns true if two given decimals are equal. Intended to be used with require/assert: require.True(t, DecEq(...))

func DecsEqual

func DecsEqual(d1s, d2s []BigDec) bool

DecsEqual tests if two decimal arrays are equal

func GetPowPrecision

func GetPowPrecision() sdk.Dec

Returns the internal "power precision". All fractional exponentiation in osmosis is expected to be accurate up to powPrecision. *technically* the error term can be greater than this powPrecision, but for small bases this bound applies. See comments in the PowApprox function for more detail.

func IntEq

func IntEq(t *testing.T, exp, got BigInt) (*testing.T, bool, string, string, string)

intended to be used with require/assert: require.True(IntEq(...))

func Pow

func Pow(base sdk.Dec, exp sdk.Dec) sdk.Dec

Pow computes base^(exp) However since the exponent is not an integer, we must do an approximation algorithm. TODO: In the future, lets add some optimized routines for common exponents, e.g. for common wIn / wOut ratios Many simple exponents like 2:1 pools.

func PowApprox

func PowApprox(base sdk.Dec, exp sdk.Dec, precision sdk.Dec) sdk.Dec

Contract: 0 < base <= 2 0 <= exp < 1.

func SigFigRound

func SigFigRound(d sdk.Dec, tenToSigFig sdk.Int) sdk.Dec

SigFigRound rounds to a specified significant figure.

func SortableDecBytes

func SortableDecBytes(dec BigDec) []byte

SortableDecBytes returns a byte slice representation of a Dec that can be sorted. Left and right pads with 0s so there are 18 digits to left and right of the decimal point. For this reason, there is a maximum and minimum value for this, enforced by ValidSortableDec.

func ValidSortableDec

func ValidSortableDec(dec BigDec) bool

ValidSortableDec ensures that a Dec is within the sortable bounds, a BigDec can't have a precision of less than 10^-18. Max sortable decimal was set to the reciprocal of SmallestDec.

Types

type BigDec

type BigDec struct {
	// contains filtered or unexported fields
}

NOTE: never use new(BigDec) or else we will panic unmarshalling into the nil embedded big.Int

func BigDecFromSDKDec

func BigDecFromSDKDec(d sdk.Dec) BigDec

BigDecFromSdkDec returns the BigDec representation of an SDKDec. Values in any additional decimal places are truncated.

func BigDecFromSDKDecCoinSlice

func BigDecFromSDKDecCoinSlice(ds []sdk.DecCoin) []BigDec

BigDecFromSdkDecSlice returns the []BigDec representation of an []SDKDec. Values in any additional decimal places are truncated.

func BigDecFromSDKDecSlice

func BigDecFromSDKDecSlice(ds []sdk.Dec) []BigDec

BigDecFromSdkDecSlice returns the []BigDec representation of an []SDKDec. Values in any additional decimal places are truncated.

func DivCoinAmtsByU64ToBigDec

func DivCoinAmtsByU64ToBigDec(coins []sdk.Coin, scales []uint64, round RoundingDirection) ([]BigDec, error)

func DivIntByU64ToBigDec

func DivIntByU64ToBigDec(i sdk.Int, u uint64, round RoundingDirection) (BigDec, error)

func MaxDec

func MaxDec(d1, d2 BigDec) BigDec

MaxDec gets maximum decimal between two

func MinDec

func MinDec(d1, d2 BigDec) BigDec

MinDec gets minimum decimal between two

func MustNewDecFromStr

func MustNewDecFromStr(s string) BigDec

Decimal from string, panic on error

func NewBigDec

func NewBigDec(i int64) BigDec

create a new NewBigDec from integer assuming whole number

func NewDecFromBigInt

func NewDecFromBigInt(i *big.Int) BigDec

create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= Precision

func NewDecFromBigIntWithPrec

func NewDecFromBigIntWithPrec(i *big.Int, prec int64) BigDec

create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= Precision

func NewDecFromInt

func NewDecFromInt(i BigInt) BigDec

create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= Precision

func NewDecFromIntWithPrec

func NewDecFromIntWithPrec(i BigInt, prec int64) BigDec

create a new BigDec from big integer with decimal place at prec CONTRACT: prec <= Precision

func NewDecFromStr

func NewDecFromStr(str string) (BigDec, error)

create a decimal from an input decimal string. valid must come in the form:

(-) whole integers (.) decimal integers

examples of acceptable input include:

-123.456
456.7890
345
-456789

NOTE - An error will return if more decimal places are provided in the string than the constant Precision.

CONTRACT - This function does not mutate the input str.

func NewDecWithPrec

func NewDecWithPrec(i, prec int64) BigDec

create a new BigDec from integer with decimal place at prec CONTRACT: prec <= Precision

func OneDec

func OneDec() BigDec

func SmallestDec

func SmallestDec() BigDec

func ZeroDec

func ZeroDec() BigDec

func (BigDec) Abs

func (d BigDec) Abs() BigDec

nolint: stylecheck

func (BigDec) Add

func (d BigDec) Add(d2 BigDec) BigDec

addition

func (BigDec) ApproxRoot

func (d BigDec) ApproxRoot(root uint64) (guess BigDec, err error)

ApproxRoot returns an approximate estimation of a Dec's positive real nth root using Newton's method (where n is positive). The algorithm starts with some guess and computes the sequence of improved guesses until an answer converges to an approximate answer. It returns `|d|.ApproxRoot() * -1` if input is negative. A maximum number of 100 iterations is used a backup boundary condition for cases where the answer never converges enough to satisfy the main condition.

func (BigDec) ApproxSqrt

func (d BigDec) ApproxSqrt() (BigDec, error)

ApproxSqrt is a wrapper around ApproxRoot for the common special case of finding the square root of a number. It returns -(sqrt(abs(d)) if input is negative.

func (BigDec) BigInt

func (d BigDec) BigInt() *big.Int

BigInt returns a copy of the underlying big.Int.

func (BigDec) Ceil

func (d BigDec) Ceil() BigDec

Ceil returns the smallest interger value (as a decimal) that is greater than or equal to the given decimal.

func (BigDec) CustomBaseLog

func (x BigDec) CustomBaseLog(base BigDec) BigDec

log_a(x) custom base logarithm Formula: log_a(b) = log_2(b) / log_2(a)

func (BigDec) Equal

func (d BigDec) Equal(d2 BigDec) bool

func (BigDec) Float64

func (d BigDec) Float64() (float64, error)

Float64 returns the float64 representation of a BigDec. Will return the error if the conversion failed.

func (BigDec) Format

func (d BigDec) Format(s fmt.State, verb rune)

format decimal state

func (BigDec) GT

func (d BigDec) GT(d2 BigDec) bool

func (BigDec) GTE

func (d BigDec) GTE(d2 BigDec) bool

func (BigDec) IsInteger

func (d BigDec) IsInteger() bool

is integer, e.g. decimals are zero

func (BigDec) IsNegative

func (d BigDec) IsNegative() bool

func (BigDec) IsNil

func (d BigDec) IsNil() bool

func (BigDec) IsPositive

func (d BigDec) IsPositive() bool

func (BigDec) IsZero

func (d BigDec) IsZero() bool

func (BigDec) LT

func (d BigDec) LT(d2 BigDec) bool

func (BigDec) LTE

func (d BigDec) LTE(d2 BigDec) bool

func (BigDec) Ln

func (x BigDec) Ln() BigDec

Natural logarithm of x. Formula: ln(x) = log_2(x) / log_2(e)

func (BigDec) LogBase2

func (x BigDec) LogBase2() BigDec

LogBase2 returns log_2 {x}. Rounds down by truncations during division and right shifting. Accurate up to 32 precision digits. Implementation is based on: https://stm32duinoforum.com/forum/dsp/BinaryLogarithm.pdf

func (BigDec) Marshal

func (d BigDec) Marshal() ([]byte, error)

Marshal implements the gogo proto custom type interface.

func (BigDec) MarshalAmino

func (d BigDec) MarshalAmino() ([]byte, error)

Override Amino binary serialization by proxying to protobuf.

func (BigDec) MarshalJSON

func (d BigDec) MarshalJSON() ([]byte, error)

MarshalJSON marshals the decimal

func (*BigDec) MarshalTo

func (d *BigDec) MarshalTo(data []byte) (n int, err error)

MarshalTo implements the gogo proto custom type interface.

func (BigDec) MarshalYAML

func (d BigDec) MarshalYAML() (interface{}, error)

MarshalYAML returns the YAML representation.

func (BigDec) Mul

func (d BigDec) Mul(d2 BigDec) BigDec

multiplication

func (BigDec) MulInt

func (d BigDec) MulInt(i BigInt) BigDec

multiplication

func (BigDec) MulInt64

func (d BigDec) MulInt64(i int64) BigDec

MulInt64 - multiplication with int64

func (BigDec) MulTruncate

func (d BigDec) MulTruncate(d2 BigDec) BigDec

multiplication truncate

func (BigDec) MustFloat64

func (d BigDec) MustFloat64() float64

MustFloat64 returns the float64 representation of a BigDec. Would panic if the conversion failed.

func (BigDec) Neg

func (d BigDec) Neg() BigDec

func (BigDec) Power

func (d BigDec) Power(power uint64) BigDec

Power returns a the result of raising to a positive integer power

func (BigDec) Quo

func (d BigDec) Quo(d2 BigDec) BigDec

quotient

func (BigDec) QuoInt

func (d BigDec) QuoInt(i BigInt) BigDec

quotient

func (BigDec) QuoInt64

func (d BigDec) QuoInt64(i int64) BigDec

QuoInt64 - quotient with int64

func (BigDec) QuoRaw

func (d BigDec) QuoRaw(d2 int64) BigDec

func (BigDec) QuoRoundUp

func (d BigDec) QuoRoundUp(d2 BigDec) BigDec

quotient, round up

func (BigDec) QuoTruncate

func (d BigDec) QuoTruncate(d2 BigDec) BigDec

quotient truncate

func (BigDec) RoundInt

func (d BigDec) RoundInt() BigInt

RoundInt round the decimal using bankers rounding

func (BigDec) RoundInt64

func (d BigDec) RoundInt64() int64

RoundInt64 rounds the decimal using bankers rounding

func (BigDec) SDKDec

func (d BigDec) SDKDec() sdk.Dec

SdkDec returns the Sdk.Dec representation of a BigDec. Values in any additional decimal places are truncated.

func (*BigDec) Size

func (d *BigDec) Size() int

Size implements the gogo proto custom type interface.

func (BigDec) String

func (d BigDec) String() string

String returns a BigDec as a string.

func (BigDec) Sub

func (d BigDec) Sub(d2 BigDec) BigDec

subtraction

func (BigDec) TickLog

func (x BigDec) TickLog() BigDec

log_1.0001(x) "tick" base logarithm Formula: log_1.0001(b) = log_2(b) / log_2(1.0001)

func (BigDec) TruncateDec

func (d BigDec) TruncateDec() BigDec

TruncateDec truncates the decimals from the number and returns a Dec

func (BigDec) TruncateInt

func (d BigDec) TruncateInt() BigInt

TruncateInt truncates the decimals from the number and returns an Int

func (BigDec) TruncateInt64

func (d BigDec) TruncateInt64() int64

TruncateInt64 truncates the decimals from the number and returns an int64

func (*BigDec) Unmarshal

func (d *BigDec) Unmarshal(data []byte) error

Unmarshal implements the gogo proto custom type interface.

func (*BigDec) UnmarshalAmino

func (d *BigDec) UnmarshalAmino(bz []byte) error

func (*BigDec) UnmarshalJSON

func (d *BigDec) UnmarshalJSON(bz []byte) error

UnmarshalJSON defines custom decoding scheme

type BigInt

type BigInt struct {
	// contains filtered or unexported fields
}

Int wraps big.Int with a 257 bit range bound Checks overflow, underflow and division by zero Exists in range from -(2^256 - 1) to 2^256 - 1

func MaxInt

func MaxInt(i, i2 BigInt) BigInt

MaxInt returns the maximum between two integers.

func MinInt

func MinInt(i1, i2 BigInt) BigInt

return the minimum of the ints

func NewInt

func NewInt(n int64) BigInt

NewInt constructs Int from int64

func NewIntFromBigInt

func NewIntFromBigInt(i *big.Int) BigInt

NewIntFromBigInt constructs Int from big.Int. If the provided big.Int is nil, it returns an empty instance. This function panics if the bit length is > 256.

func NewIntFromString

func NewIntFromString(s string) (res BigInt, ok bool)

NewIntFromString constructs Int from string

func NewIntFromUint64

func NewIntFromUint64(n uint64) BigInt

NewIntFromUint64 constructs an Int from a uint64.

func NewIntWithDecimal

func NewIntWithDecimal(n int64, dec int) BigInt

NewIntWithDecimal constructs Int with decimal Result value is n*10^dec

func OneInt

func OneInt() BigInt

OneInt returns Int value with one

func ZeroInt

func ZeroInt() BigInt

ZeroInt returns Int value with zero

func (BigInt) Abs

func (i BigInt) Abs() BigInt

Abs returns the absolute value of Int.

func (BigInt) Add

func (i BigInt) Add(i2 BigInt) (res BigInt)

Add adds Int from another

func (BigInt) AddRaw

func (i BigInt) AddRaw(i2 int64) BigInt

AddRaw adds int64 to Int

func (BigInt) BigInt

func (i BigInt) BigInt() *big.Int

BigInt converts Int to big.Int

func (BigInt) Equal

func (i BigInt) Equal(i2 BigInt) bool

Equal compares two Ints

func (BigInt) GT

func (i BigInt) GT(i2 BigInt) bool

GT returns true if first Int is greater than second

func (BigInt) GTE

func (i BigInt) GTE(i2 BigInt) bool

GTE returns true if receiver Int is greater than or equal to the parameter Int.

func (BigInt) Int64

func (i BigInt) Int64() int64

Int64 converts Int to int64 Panics if the value is out of range

func (BigInt) IsInt64

func (i BigInt) IsInt64() bool

IsInt64 returns true if Int64() not panics

func (BigInt) IsNegative

func (i BigInt) IsNegative() bool

IsNegative returns true if Int is negative

func (BigInt) IsNil

func (i BigInt) IsNil() bool

IsNil returns true if Int is uninitialized

func (BigInt) IsPositive

func (i BigInt) IsPositive() bool

IsPositive returns true if Int is positive

func (BigInt) IsUint64

func (i BigInt) IsUint64() bool

IsUint64 returns true if Uint64() not panics

func (BigInt) IsZero

func (i BigInt) IsZero() bool

IsZero returns true if Int is zero

func (BigInt) LT

func (i BigInt) LT(i2 BigInt) bool

LT returns true if first Int is lesser than second

func (BigInt) LTE

func (i BigInt) LTE(i2 BigInt) bool

LTE returns true if first Int is less than or equal to second

func (BigInt) Marshal

func (i BigInt) Marshal() ([]byte, error)

Marshal implements the gogo proto custom type interface.

func (BigInt) MarshalAmino

func (i BigInt) MarshalAmino() ([]byte, error)

Override Amino binary serialization by proxying to protobuf.

func (BigInt) MarshalJSON

func (i BigInt) MarshalJSON() ([]byte, error)

MarshalJSON defines custom encoding scheme

func (*BigInt) MarshalTo

func (i *BigInt) MarshalTo(data []byte) (n int, err error)

MarshalTo implements the gogo proto custom type interface.

func (BigInt) MarshalYAML

func (i BigInt) MarshalYAML() (interface{}, error)

MarshalYAML returns the YAML representation.

func (BigInt) Mod

func (i BigInt) Mod(i2 BigInt) BigInt

Mod returns remainder after dividing with Int

func (BigInt) ModRaw

func (i BigInt) ModRaw(i2 int64) BigInt

ModRaw returns remainder after dividing with int64

func (BigInt) Mul

func (i BigInt) Mul(i2 BigInt) (res BigInt)

Mul multiples two Ints

func (BigInt) MulRaw

func (i BigInt) MulRaw(i2 int64) BigInt

MulRaw multipies Int and int64

func (BigInt) Neg

func (i BigInt) Neg() (res BigInt)

Neg negates Int

func (BigInt) Quo

func (i BigInt) Quo(i2 BigInt) (res BigInt)

Quo divides Int with Int

func (BigInt) QuoRaw

func (i BigInt) QuoRaw(i2 int64) BigInt

QuoRaw divides Int with int64

func (BigInt) Sign

func (i BigInt) Sign() int

Sign returns sign of Int

func (*BigInt) Size

func (i *BigInt) Size() int

Size implements the gogo proto custom type interface.

func (BigInt) String

func (i BigInt) String() string

Human readable string

func (BigInt) Sub

func (i BigInt) Sub(i2 BigInt) (res BigInt)

Sub subtracts Int from another

func (BigInt) SubRaw

func (i BigInt) SubRaw(i2 int64) BigInt

SubRaw subtracts int64 from Int

func (BigInt) ToDec

func (i BigInt) ToDec() BigDec

ToDec converts Int to Dec

func (BigInt) Uint64

func (i BigInt) Uint64() uint64

Uint64 converts Int to uint64 Panics if the value is out of range

func (*BigInt) Unmarshal

func (i *BigInt) Unmarshal(data []byte) error

Unmarshal implements the gogo proto custom type interface.

func (*BigInt) UnmarshalAmino

func (i *BigInt) UnmarshalAmino(bz []byte) error

func (*BigInt) UnmarshalJSON

func (i *BigInt) UnmarshalJSON(bz []byte) error

UnmarshalJSON defines custom decoding scheme

type RoundingDirection

type RoundingDirection int
const (
	RoundUnconstrained RoundingDirection = 0
	RoundUp            RoundingDirection = 1
	RoundDown          RoundingDirection = 2
	RoundBankers       RoundingDirection = 3
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL