Documentation
¶
Index ¶
- Constants
- Variables
- func DecEq(t *testing.T, exp, got Dec) (*testing.T, bool, string, string, string)
- func DecsEqual(d1s, d2s []Dec) bool
- func DefaultCoinDenomRegex() string
- func GetBaseDenom() (string, error)
- func IntEq(t *testing.T, exp, got Int) (*testing.T, bool, string, string, string)
- func RegisterDenom(denom string, unit Dec) error
- func SetCoinDenomRegex(reFn func() string)
- func SortableDecBytes(dec Dec) []byte
- func ValidSortableDec(dec Dec) bool
- func ValidateDenom(denom string) error
- type Coin
- func (coin Coin) Add(coinB Coin) Coin
- func (coin Coin) AddAmount(amount Int) Coin
- func (*Coin) Descriptor() ([]byte, []int)
- func (this *Coin) Equal(that interface{}) bool
- func (m *Coin) GetDenom() string
- func (coin Coin) IsEqual(other Coin) bool
- func (coin Coin) IsGTE(other Coin) bool
- func (coin Coin) IsLT(other Coin) bool
- func (coin Coin) IsNegative() bool
- func (coin Coin) IsNil() bool
- func (coin Coin) IsPositive() bool
- func (coin Coin) IsValid() bool
- func (coin Coin) IsZero() bool
- func (m *Coin) Marshal() (dAtA []byte, err error)
- func (m *Coin) MarshalTo(dAtA []byte) (int, error)
- func (m *Coin) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Coin) ProtoMessage()
- func (m *Coin) Reset()
- func (m *Coin) Size() (n int)
- func (coin Coin) String() string
- func (coin Coin) Sub(coinB Coin) Coin
- func (coin Coin) SubAmount(amount Int) Coin
- func (m *Coin) Unmarshal(dAtA []byte) error
- func (coin Coin) Validate() error
- func (m *Coin) XXX_DiscardUnknown()
- func (m *Coin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Coin) XXX_Merge(src proto.Message)
- func (m *Coin) XXX_Size() int
- func (m *Coin) XXX_Unmarshal(b []byte) error
- type Coins
- func (coins Coins) Add(coinsB ...Coin) Coins
- func (coins Coins) AmountOf(denom string) Int
- func (coins Coins) AmountOfNoDenomValidation(denom string) Int
- func (coins Coins) DenomsSubsetOf(coinsB Coins) bool
- func (coins Coins) Empty() bool
- func (coins Coins) GetDenomByIndex(i int) string
- func (coins Coins) IsAllGT(coinsB Coins) bool
- func (coins Coins) IsAllGTE(coinsB Coins) bool
- func (coins Coins) IsAllLT(coinsB Coins) bool
- func (coins Coins) IsAllLTE(coinsB Coins) bool
- func (coins Coins) IsAllPositive() bool
- func (coins Coins) IsAnyGT(coinsB Coins) bool
- func (coins Coins) IsAnyGTE(coinsB Coins) bool
- func (coins Coins) IsAnyNegative() bool
- func (coins Coins) IsAnyNil() bool
- func (coins Coins) IsEqual(coinsB Coins) bool
- func (coins Coins) IsValid() bool
- func (coins Coins) IsZero() bool
- func (coins Coins) Len() int
- func (coins Coins) Less(i, j int) bool
- func (coins Coins) MarshalJSON() ([]byte, error)
- func (coins Coins) Max(coinsB Coins) Coins
- func (coins Coins) Min(coinsB Coins) Coins
- func (coins Coins) SafeSub(coinsB Coins) (Coins, bool)
- func (coins Coins) Sort() Coins
- func (coins Coins) String() string
- func (coins Coins) Sub(coinsB Coins) Coins
- func (coins Coins) Swap(i, j int)
- func (coins Coins) Validate() error
- type CustomProtobufType
- type Dec
- func GetDenomUnit(denom string) (Dec, bool)
- func MaxDec(d1, d2 Dec) Dec
- func MinDec(d1, d2 Dec) Dec
- func MustNewDecFromStr(s string) Dec
- func NewDec(i int64) Dec
- func NewDecFromBigInt(i *big.Int) Dec
- func NewDecFromBigIntWithPrec(i *big.Int, prec int64) Dec
- func NewDecFromInt(i Int) Dec
- func NewDecFromIntWithPrec(i Int, prec int64) Dec
- func NewDecFromStr(str string) (Dec, error)
- func NewDecWithPrec(i, prec int64) Dec
- func OneDec() Dec
- func SmallestDec() Dec
- func ZeroDec() Dec
- func (d Dec) Abs() Dec
- func (d Dec) Add(d2 Dec) Dec
- func (d Dec) ApproxRoot(root uint64) (guess Dec, err error)
- func (d Dec) ApproxSqrt() (Dec, error)
- func (d Dec) BigInt() *big.Int
- func (d Dec) Ceil() Dec
- func (d Dec) Equal(d2 Dec) bool
- func (d Dec) Float64() (float64, error)
- func (d Dec) Format(s fmt.State, _ rune)
- func (d Dec) GT(d2 Dec) bool
- func (d Dec) GTE(d2 Dec) bool
- func (d Dec) IsInteger() bool
- func (d Dec) IsNegative() bool
- func (d Dec) IsNil() bool
- func (d Dec) IsPositive() bool
- func (d Dec) IsZero() bool
- func (d Dec) LT(d2 Dec) bool
- func (d Dec) LTE(d2 Dec) bool
- func (d Dec) Marshal() ([]byte, error)
- func (d Dec) MarshalAmino() ([]byte, error)
- func (d Dec) MarshalJSON() ([]byte, error)
- func (d *Dec) MarshalTo(data []byte) (n int, err error)
- func (d Dec) MarshalYAML() (interface{}, error)
- func (d Dec) Mul(d2 Dec) Dec
- func (d Dec) MulInt(i Int) Dec
- func (d Dec) MulInt64(i int64) Dec
- func (d Dec) MulTruncate(d2 Dec) Dec
- func (d Dec) MustFloat64() float64
- func (d Dec) Neg() Dec
- func (d Dec) Power(power uint64) Dec
- func (d Dec) Quo(d2 Dec) Dec
- func (d Dec) QuoInt(i Int) Dec
- func (d Dec) QuoInt64(i int64) Dec
- func (d Dec) QuoRoundUp(d2 Dec) Dec
- func (d Dec) QuoTruncate(d2 Dec) Dec
- func (d Dec) RoundInt() Int
- func (d Dec) RoundInt64() int64
- func (d *Dec) Size() int
- func (d Dec) String() string
- func (d Dec) Sub(d2 Dec) Dec
- func (d Dec) TruncateDec() Dec
- func (d Dec) TruncateInt() Int
- func (d Dec) TruncateInt64() int64
- func (d *Dec) Unmarshal(data []byte) error
- func (d *Dec) UnmarshalAmino(bz []byte) error
- func (d *Dec) UnmarshalJSON(bz []byte) error
- type DecCoin
- func ConvertDecCoin(coin DecCoin, denom string) (DecCoin, error)
- func NewDecCoin(denom string, amount Int) DecCoin
- func NewDecCoinFromCoin(coin Coin) DecCoin
- func NewDecCoinFromDec(denom string, amount Dec) DecCoin
- func NewInt64DecCoin(denom string, amount int64) DecCoin
- func NormalizeDecCoin(coin DecCoin) DecCoin
- func ParseDecCoin(coinStr string) (coin DecCoin, err error)
- func (coin DecCoin) Add(coinB DecCoin) DecCoin
- func (*DecCoin) Descriptor() ([]byte, []int)
- func (this *DecCoin) Equal(that interface{}) bool
- func (m *DecCoin) GetDenom() string
- func (coin DecCoin) IsEqual(other DecCoin) bool
- func (coin DecCoin) IsGTE(other DecCoin) bool
- func (coin DecCoin) IsLT(other DecCoin) bool
- func (coin DecCoin) IsNegative() bool
- func (coin DecCoin) IsPositive() bool
- func (coin DecCoin) IsValid() bool
- func (coin DecCoin) IsZero() bool
- func (m *DecCoin) Marshal() (dAtA []byte, err error)
- func (m *DecCoin) MarshalTo(dAtA []byte) (int, error)
- func (m *DecCoin) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*DecCoin) ProtoMessage()
- func (m *DecCoin) Reset()
- func (m *DecCoin) Size() (n int)
- func (coin DecCoin) String() string
- func (coin DecCoin) Sub(coinB DecCoin) DecCoin
- func (coin DecCoin) TruncateDecimal() (Coin, DecCoin)
- func (m *DecCoin) Unmarshal(dAtA []byte) error
- func (coin DecCoin) Validate() error
- func (m *DecCoin) XXX_DiscardUnknown()
- func (m *DecCoin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *DecCoin) XXX_Merge(src proto.Message)
- func (m *DecCoin) XXX_Size() int
- func (m *DecCoin) XXX_Unmarshal(b []byte) error
- type DecCoins
- func (coins DecCoins) Add(coinsB ...DecCoin) DecCoins
- func (coins DecCoins) AmountOf(denom string) Dec
- func (coins DecCoins) Empty() bool
- func (coins DecCoins) GetDenomByIndex(i int) string
- func (coins DecCoins) Intersect(coinsB DecCoins) DecCoins
- func (coins DecCoins) IsAllPositive() bool
- func (coins DecCoins) IsAnyNegative() bool
- func (coins DecCoins) IsEqual(coinsB DecCoins) bool
- func (coins DecCoins) IsValid() bool
- func (coins DecCoins) IsZero() bool
- func (coins DecCoins) Len() int
- func (coins DecCoins) Less(i, j int) bool
- func (coins DecCoins) MulDec(d Dec) DecCoins
- func (coins DecCoins) MulDecTruncate(d Dec) DecCoins
- func (coins DecCoins) QuoDec(d Dec) DecCoins
- func (coins DecCoins) QuoDecTruncate(d Dec) DecCoins
- func (coins DecCoins) SafeSub(coinsB DecCoins) (DecCoins, bool)
- func (coins DecCoins) Sort() DecCoins
- func (coins DecCoins) String() string
- func (coins DecCoins) Sub(coinsB DecCoins) DecCoins
- func (coins DecCoins) Swap(i, j int)
- func (coins DecCoins) TruncateDecimal() (truncatedCoins Coins, changeCoins DecCoins)
- func (coins DecCoins) Validate() error
- type DecProto
- func (*DecProto) Descriptor() ([]byte, []int)
- func (m *DecProto) Marshal() (dAtA []byte, err error)
- func (m *DecProto) MarshalTo(dAtA []byte) (int, error)
- func (m *DecProto) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*DecProto) ProtoMessage()
- func (m *DecProto) Reset()
- func (m *DecProto) Size() (n int)
- func (dp DecProto) String() string
- func (m *DecProto) Unmarshal(dAtA []byte) error
- func (m *DecProto) XXX_DiscardUnknown()
- func (m *DecProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *DecProto) XXX_Merge(src proto.Message)
- func (m *DecProto) XXX_Size() int
- func (m *DecProto) XXX_Unmarshal(b []byte) error
- type Int
- func (i Int) Abs() Int
- func (i Int) Add(i2 Int) (res Int)
- func (i Int) AddRaw(i2 int64) Int
- func (i Int) BigInt() *big.Int
- func (i Int) Equal(i2 Int) bool
- func (i Int) GT(i2 Int) bool
- func (i Int) GTE(i2 Int) bool
- func (i Int) Int64() int64
- func (i Int) IsInt64() bool
- func (i Int) IsNegative() bool
- func (i Int) IsNil() bool
- func (i Int) IsPositive() bool
- func (i Int) IsUint64() bool
- func (i Int) IsZero() bool
- func (i Int) LT(i2 Int) bool
- func (i Int) LTE(i2 Int) bool
- func (i Int) Marshal() ([]byte, error)
- func (i Int) MarshalAmino() ([]byte, error)
- func (i Int) MarshalJSON() ([]byte, error)
- func (i *Int) MarshalTo(data []byte) (n int, err error)
- func (i Int) MarshalYAML() (interface{}, error)
- func (i Int) Mod(i2 Int) Int
- func (i Int) ModRaw(i2 int64) Int
- func (i Int) Mul(i2 Int) (res Int)
- func (i Int) MulRaw(i2 int64) Int
- func (i Int) Neg() (res Int)
- func (i Int) Quo(i2 Int) (res Int)
- func (i Int) QuoRaw(i2 int64) Int
- func (i Int) Sign() int
- func (i *Int) Size() int
- func (i Int) String() string
- func (i Int) Sub(i2 Int) (res Int)
- func (i Int) SubRaw(i2 int64) Int
- func (i Int) ToDec() Dec
- func (i Int) Uint64() uint64
- func (i *Int) Unmarshal(data []byte) error
- func (i *Int) UnmarshalAmino(bz []byte) error
- func (i *Int) UnmarshalJSON(bz []byte) error
- type IntProto
- func (*IntProto) Descriptor() ([]byte, []int)
- func (m *IntProto) Marshal() (dAtA []byte, err error)
- func (m *IntProto) MarshalTo(dAtA []byte) (int, error)
- func (m *IntProto) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*IntProto) ProtoMessage()
- func (m *IntProto) Reset()
- func (m *IntProto) Size() (n int)
- func (ip IntProto) String() string
- func (m *IntProto) Unmarshal(dAtA []byte) error
- func (m *IntProto) XXX_DiscardUnknown()
- func (m *IntProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *IntProto) XXX_Merge(src proto.Message)
- func (m *IntProto) XXX_Size() int
- func (m *IntProto) XXX_Unmarshal(b []byte) error
Constants ¶
const ( // number of decimal places Precision = 18 // bits required to represent the above precision // Ceiling[Log2[10^Precision - 1]] DecimalPrecisionBits = 60 )
Variables ¶
var ( ErrInvalidLengthCoin = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowCoin = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupCoin = fmt.Errorf("proto: unexpected end of group") )
var ( ErrEmptyDecimalStr = errors.New("decimal string cannot be empty") ErrInvalidDecimalLength = errors.New("invalid decimal length") ErrInvalidDecimalStr = errors.New("invalid decimal string") )
Decimal errors
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 DefaultCoinDenomRegex ¶
func DefaultCoinDenomRegex() string
DefaultCoinDenomRegex returns the default regex string
func GetBaseDenom ¶
GetBaseDenom returns the denom of smallest unit registered
func RegisterDenom ¶
RegisterDenom registers a denomination with a corresponding unit. If the denomination is already registered, an error will be returned.
func SetCoinDenomRegex ¶
func SetCoinDenomRegex(reFn func() string)
SetCoinDenomRegex allows for coin's custom validation by overriding the regular expression string used for denom validation.
func SortableDecBytes ¶
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 ¶
ValidSortableDec ensures that a Dec is within the sortable bounds, a Dec can't have a precision of less than 10^-18. Max sortable decimal was set to the reciprocal of SmallestDec.
func ValidateDenom ¶
ValidateDenom is the default validation function for Coin.Denom.
Types ¶
type Coin ¶
type Coin struct {
Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"`
Amount Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=Int" json:"amount"`
}
Coin defines a token with a denomination and an amount.
NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto.
func ConvertCoin ¶
ConvertCoin attempts to convert a coin to a given denomination. If the given denomination is invalid or if neither denomination is registered, an error is returned.
func NewCoin ¶
NewCoin returns a new coin with a denomination and amount. It will panic if the amount is negative or if the denomination is invalid.
func NewInt64Coin ¶
NewInt64Coin returns a new coin with a denomination and amount. It will panic if the amount is negative.
func NormalizeCoin ¶
NormalizeCoin try to convert a coin to the smallest unit registered, returns original one if failed.
func ParseCoinNormalized ¶
ParseCoinNormalized parses and normalize a cli input for one coin type, returning errors if invalid or on an empty string as well. Expected format: "{amount}{denomination}"
func (Coin) Add ¶
Add adds amounts of two coins with same denom. If the coins differ in denom then it panics.
func (*Coin) Descriptor ¶
func (Coin) IsGTE ¶
IsGTE returns true if they are the same type and the receiver is an equal or greater value
func (Coin) IsNegative ¶
IsNegative returns true if the coin amount is negative and false otherwise.
TODO: Remove once unsigned integers are used.
func (Coin) IsPositive ¶
IsPositive returns true if coin amount is positive.
TODO: Remove once unsigned integers are used.
func (Coin) IsValid ¶
IsValid returns true if the Coin has a non-negative amount and the denom is valid.
func (*Coin) ProtoMessage ¶
func (*Coin) ProtoMessage()
func (Coin) Sub ¶
Sub subtracts amounts of two coins with same denom. If the coins differ in denom then it panics.
func (Coin) Validate ¶
Validate returns an error if the Coin has a negative amount or if the denom is invalid.
func (*Coin) XXX_DiscardUnknown ¶
func (m *Coin) XXX_DiscardUnknown()
func (*Coin) XXX_Unmarshal ¶
type Coins ¶
type Coins []Coin
Coins is a set of Coin, one per currency
func NewCoins ¶
NewCoins constructs a new coin set. The provided coins will be sanitized by removing zero coins and sorting the coin set. A panic will occur if the coin set is not valid.
func NormalizeCoins ¶
NormalizeCoins normalize and truncate a list of decimal coins
func ParseCoinsNormalized ¶
ParseCoinsNormalized will parse out a list of coins separated by commas, and normalize them by converting to the smallest unit. If the parsing is successful, the provided coins will be sanitized by removing zero coins and sorting the coin set. Lastly a validation of the coin set is executed. If the check passes, ParseCoinsNormalized will return the sanitized coins. Otherwise, it will return an error. If an empty string is provided to ParseCoinsNormalized, it returns nil Coins. ParseCoinsNormalized supports decimal coins as inputs, and truncate them to int after converted to the smallest unit. Expected format: "{amount0}{denomination},...,{amountN}{denominationN}"
func (Coins) Add ¶
Add adds two sets of coins.
e.g. {2A} + {A, 2B} = {3A, 2B} {2A} + {0B} = {2A}
NOTE: Add operates under the invariant that coins are sorted by denominations.
CONTRACT: Add will never return Coins where one Coin has a non-positive amount. In otherwords, IsValid will always return true. The function panics if `coins` or `coinsB` are not sorted (ascending).
func (Coins) AmountOfNoDenomValidation ¶
AmountOfNoDenomValidation returns the amount of a denom from coins without validating the denomination.
func (Coins) DenomsSubsetOf ¶
DenomsSubsetOf returns true if receiver's denom set is subset of coinsB's denoms.
func (Coins) GetDenomByIndex ¶
GetDenomByIndex returns the Denom of the certain coin to make the findDup generic
func (Coins) IsAllGT ¶
IsAllGT returns true if for every denom in coinsB, the denom is present at a greater amount in coins.
func (Coins) IsAllGTE ¶
IsAllGTE returns false if for any denom in coinsB, the denom is present at a smaller amount in coins; else returns true.
func (Coins) IsAllLT ¶
IsAllLT returns True iff for every denom in coins, the denom is present at a smaller amount in coinsB.
func (Coins) IsAllLTE ¶
IsAllLTE returns true iff for every denom in coins, the denom is present at a smaller or equal amount in coinsB.
func (Coins) IsAllPositive ¶
IsAllPositive returns true if there is at least one coin and all currencies have a positive value.
func (Coins) IsAnyGT ¶
IsAnyGT returns true iff for any denom in coins, the denom is present at a greater amount in coinsB.
e.g. {2A, 3B}.IsAnyGT{A} = true {2A, 3B}.IsAnyGT{5C} = false {}.IsAnyGT{5C} = false {2A, 3B}.IsAnyGT{} = false
func (Coins) IsAnyGTE ¶
IsAnyGTE returns true iff coins contains at least one denom that is present at a greater or equal amount in coinsB; it returns false otherwise.
NOTE: IsAnyGTE operates under the invariant that both coin sets are sorted by denominations and there exists no zero coins.
func (Coins) IsAnyNegative ¶
IsAnyNegative returns true if there is at least one coin whose amount is negative; returns false otherwise. It returns false if the coin set is empty too.
TODO: Remove once unsigned integers are used.
func (Coins) IsAnyNil ¶
IsAnyNil returns true if there is at least one coin whose amount is nil; returns false otherwise. It returns false if the coin set is empty too.
func (Coins) IsValid ¶
IsValid calls Validate and returns true when the Coins are sorted, have positive amount, with a valid and unique denomination (i.e no duplicates).
func (Coins) MarshalJSON ¶
MarshalJSON implements a custom JSON marshaller for the Coins type to allow nil Coins to be encoded as an empty array.
func (Coins) Max ¶
Max takes two valid Coins inputs and returns a valid Coins result where for every denom D, AmountOf(D) of the result is the maximum of AmountOf(D) of the inputs. Note that the result might be not be equal to either input. For any valid Coins a, b, and c, the following are always true:
a.IsAllLTE(a.Max(b)) b.IsAllLTE(a.Max(b)) a.IsAllLTE(c) && b.IsAllLTE(c) == a.Max(b).IsAllLTE(c) a.Add(b...).IsEqual(a.Min(b).Add(a.Max(b)...))
E.g. {1A, 3B, 2C}.Max({4A, 2B, 2C} == {4A, 3B, 2C}) {2A, 3B}.Max({1B, 4C}) == {2A, 3B, 4C} {1A, 2B}.Max({}) == {1A, 2B}
func (Coins) Min ¶
Min takes two valid Coins inputs and returns a valid Coins result where for every denom D, AmountOf(D) of the result is the minimum of AmountOf(D) of the inputs. Note that the result might be not be equal to either input. For any valid Coins a, b, and c, the following are always true:
a.Min(b).IsAllLTE(a) a.Min(b).IsAllLTE(b) c.IsAllLTE(a) && c.IsAllLTE(b) == c.IsAllLTE(a.Min(b)) a.Add(b...).IsEqual(a.Min(b).Add(a.Max(b)...))
E.g. {1A, 3B, 2C}.Min({4A, 2B, 2C} == {1A, 2B, 2C}) {2A, 3B}.Min({1B, 4C}) == {1B} {1A, 2B}.Min({3C}) == empty
See also DecCoins.Intersect().
func (Coins) SafeSub ¶
SafeSub performs the same arithmetic as Sub but returns a boolean if any negative coin amount was returned. The function panics if `coins` or `coinsB` are not sorted (ascending).
type CustomProtobufType ¶
type CustomProtobufType interface {
Marshal() ([]byte, error)
MarshalTo(data []byte) (n int, err error)
Unmarshal(data []byte) error
Size() int
MarshalJSON() ([]byte, error)
UnmarshalJSON(data []byte) error
}
CustomProtobufType defines the interface custom gogo proto types must implement in order to be used as a "customtype" extension.
ref: https://github.com/gogo/protobuf/blob/master/custom_types.md
type Dec ¶
type Dec struct {
// contains filtered or unexported fields
}
NOTE: never use new(Dec) or else we will panic unmarshalling into the nil embedded big.Int
func GetDenomUnit ¶
GetDenomUnit returns a unit for a given denomination if it exists. A boolean is returned if the denomination is registered.
func NewDecFromBigInt ¶
create a new Dec from big integer assuming whole numbers CONTRACT: prec <= Precision
func NewDecFromBigIntWithPrec ¶
create a new Dec from big integer assuming whole numbers CONTRACT: prec <= Precision
func NewDecFromInt ¶
create a new Dec from big integer assuming whole numbers CONTRACT: prec <= Precision
func NewDecFromIntWithPrec ¶
create a new Dec from big integer with decimal place at prec CONTRACT: prec <= Precision
func NewDecFromStr ¶
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 ¶
create a new Dec from integer with decimal place at prec CONTRACT: prec <= Precision
func SmallestDec ¶
func SmallestDec() Dec
func (Dec) ApproxRoot ¶
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 (Dec) ApproxSqrt ¶
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 (Dec) Ceil ¶
Ceil returns the smallest interger value (as a decimal) that is greater than or equal to the given decimal.
func (Dec) Float64 ¶
Float64 returns the float64 representation of a Dec. Will return the error if the conversion failed.
func (Dec) IsNegative ¶
func (Dec) IsPositive ¶
func (Dec) MarshalAmino ¶
Override Amino binary serialization by proxying to protobuf.
func (Dec) MarshalJSON ¶
MarshalJSON marshals the decimal
func (Dec) MarshalYAML ¶
MarshalYAML returns the YAML representation.
func (Dec) MustFloat64 ¶
MustFloat64 returns the float64 representation of a Dec. Would panic if the conversion failed.
func (Dec) RoundInt64 ¶
RoundInt64 rounds the decimal using bankers rounding
func (Dec) TruncateDec ¶
TruncateDec truncates the decimals from the number and returns a Dec
func (Dec) TruncateInt ¶
TruncateInt truncates the decimals from the number and returns an Int
func (Dec) TruncateInt64 ¶
TruncateInt64 truncates the decimals from the number and returns an int64
func (*Dec) UnmarshalAmino ¶
func (*Dec) UnmarshalJSON ¶
UnmarshalJSON defines custom decoding scheme
type DecCoin ¶
type DecCoin struct {
Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"`
Amount Dec `protobuf:"bytes,2,opt,name=amount,proto3,customtype=Dec" json:"amount"`
}
DecCoin defines a token with a denomination and a decimal amount.
NOTE: The amount field is an Dec which implements the custom method signatures required by gogoproto.
func ConvertDecCoin ¶
ConvertDecCoin attempts to convert a decimal coin to a given denomination. If the given denomination is invalid or if neither denomination is registered, an error is returned.
func NewDecCoin ¶
NewDecCoin creates a new DecCoin instance from an Int.
func NewDecCoinFromCoin ¶
NewDecCoinFromCoin creates a new DecCoin from a Coin.
func NewDecCoinFromDec ¶
NewDecCoinFromDec creates a new DecCoin instance from a Dec.
func NewInt64DecCoin ¶
NewInt64DecCoin returns a new DecCoin with a denomination and amount. It will panic if the amount is negative or denom is invalid.
func NormalizeDecCoin ¶
NormalizeDecCoin try to convert a decimal coin to the smallest unit registered, returns original one if failed.
func ParseDecCoin ¶
ParseDecCoin parses a decimal coin from a string, returning an error if invalid. An empty string is considered invalid.
func (*DecCoin) Descriptor ¶
func (DecCoin) IsGTE ¶
IsGTE returns true if they are the same type and the receiver is an equal or greater value.
func (DecCoin) IsLT ¶
IsLT returns true if they are the same type and the receiver is a smaller value.
func (DecCoin) IsNegative ¶
IsNegative returns true if the coin amount is negative and false otherwise.
TODO: Remove once unsigned integers are used.
func (DecCoin) IsPositive ¶
IsPositive returns true if coin amount is positive.
TODO: Remove once unsigned integers are used.
func (DecCoin) IsValid ¶
IsValid returns true if the DecCoin has a non-negative amount and the denom is valid.
func (*DecCoin) MarshalToSizedBuffer ¶
func (*DecCoin) ProtoMessage ¶
func (*DecCoin) ProtoMessage()
func (DecCoin) String ¶
String implements the Stringer interface for DecCoin. It returns a human-readable representation of a decimal coin.
func (DecCoin) TruncateDecimal ¶
TruncateDecimal returns a Coin with a truncated decimal and a DecCoin for the change. Note, the change may be zero.
func (DecCoin) Validate ¶
Validate returns an error if the DecCoin has a negative amount or if the denom is invalid.
func (*DecCoin) XXX_DiscardUnknown ¶
func (m *DecCoin) XXX_DiscardUnknown()
func (*DecCoin) XXX_Marshal ¶
func (*DecCoin) XXX_Unmarshal ¶
type DecCoins ¶
type DecCoins []DecCoin
DecCoins defines a slice of coins with decimal values
func NewDecCoins ¶
NewDecCoins constructs a new coin set with with decimal values from DecCoins. The provided coins will be sanitized by removing zero coins and sorting the coin set. A panic will occur if the coin set is not valid.
func NewDecCoinsFromCoins ¶
NewDecCoinsFromCoins constructs a new coin set with decimal values from regular Coins.
func ParseDecCoins ¶
ParseDecCoins will parse out a list of decimal coins separated by commas. If the parsing is successuful, the provided coins will be sanitized by removing zero coins and sorting the coin set. Lastly a validation of the coin set is executed. If the check passes, ParseDecCoins will return the sanitized coins. Otherwise it will return an error. If an empty string is provided to ParseDecCoins, it returns nil Coins. Expected format: "{amount0}{denomination},...,{amountN}{denominationN}"
func (DecCoins) Add ¶
Add adds two sets of DecCoins.
NOTE: Add operates under the invariant that coins are sorted by denominations.
CONTRACT: Add will never return Coins where one Coin has a non-positive amount. In otherwords, IsValid will always return true.
func (DecCoins) GetDenomByIndex ¶
GetDenomByIndex returns the Denom to make the findDup generic
func (DecCoins) Intersect ¶
Intersect will return a new set of coins which contains the minimum DecCoin for common denoms found in both `coins` and `coinsB`. For denoms not common to both `coins` and `coinsB` the minimum is considered to be 0, thus they are not added to the final set. In other words, trim any denom amount from coin which exceeds that of coinB, such that (coin.Intersect(coinB)).IsLTE(coinB). See also Coins.Min().
func (DecCoins) IsAllPositive ¶
IsAllPositive returns true if there is at least one coin and all currencies have a positive value.
TODO: Remove once unsigned integers are used.
func (DecCoins) IsAnyNegative ¶
IsAnyNegative returns true if there is at least one coin whose amount is negative; returns false otherwise. It returns false if the DecCoins set is empty too.
TODO: Remove once unsigned integers are used.
func (DecCoins) IsValid ¶
IsValid calls Validate and returns true when the DecCoins are sorted, have positive amount, with a valid and unique denomination (i.e no duplicates).
func (DecCoins) MulDec ¶
MulDec multiplies all the coins by a decimal.
CONTRACT: No zero coins will be returned.
func (DecCoins) MulDecTruncate ¶
MulDecTruncate multiplies all the decimal coins by a decimal, truncating. It panics if d is zero.
CONTRACT: No zero coins will be returned.
func (DecCoins) QuoDec ¶
QuoDec divides all the decimal coins by a decimal. It panics if d is zero.
CONTRACT: No zero coins will be returned.
func (DecCoins) QuoDecTruncate ¶
QuoDecTruncate divides all the decimal coins by a decimal, truncating. It panics if d is zero.
CONTRACT: No zero coins will be returned.
func (DecCoins) SafeSub ¶
SafeSub performs the same arithmetic as Sub but returns a boolean if any negative coin amount was returned.
func (DecCoins) String ¶
String implements the Stringer interface for DecCoins. It returns a human-readable representation of decimal coins.
func (DecCoins) TruncateDecimal ¶
TruncateDecimal returns the coins with truncated decimals and returns the change. Note, it will not return any zero-amount coins in either the truncated or change coins.
type DecProto ¶
type DecProto struct {
Dec Dec `protobuf:"bytes,1,opt,name=dec,proto3,customtype=Dec" json:"dec"`
}
DecProto defines a Protobuf wrapper around a Dec object.
func (*DecProto) Descriptor ¶
func (*DecProto) MarshalToSizedBuffer ¶
func (*DecProto) ProtoMessage ¶
func (*DecProto) ProtoMessage()
func (*DecProto) XXX_DiscardUnknown ¶
func (m *DecProto) XXX_DiscardUnknown()
func (*DecProto) XXX_Marshal ¶
func (*DecProto) XXX_Unmarshal ¶
type Int ¶
type Int 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 NewIntFromBigInt ¶
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 ¶
NewIntFromString constructs Int from string
func NewIntFromUint64 ¶
NewIntFromUint64 constructs an Int from a uint64.
func NewIntWithDecimal ¶
NewIntWithDecimal constructs Int with decimal Result value is n*10^dec
func (Int) MarshalAmino ¶
Override Amino binary serialization by proxying to protobuf.
func (Int) MarshalJSON ¶
MarshalJSON defines custom encoding scheme
func (Int) MarshalYAML ¶
MarshalYAML returns the YAML representation.
func (*Int) UnmarshalAmino ¶
func (*Int) UnmarshalJSON ¶
UnmarshalJSON defines custom decoding scheme
type IntProto ¶
type IntProto struct {
Int Int `protobuf:"bytes,1,opt,name=int,proto3,customtype=Int" json:"int"`
}
IntProto defines a Protobuf wrapper around an Int object.
func (*IntProto) Descriptor ¶
func (*IntProto) MarshalToSizedBuffer ¶
func (*IntProto) ProtoMessage ¶
func (*IntProto) ProtoMessage()
func (*IntProto) XXX_DiscardUnknown ¶
func (m *IntProto) XXX_DiscardUnknown()