Rational -> Rat
This commit is contained in:
parent
13835f084f
commit
7da2789535
|
@ -147,8 +147,8 @@ type Procedure struct {
|
|||
MinDeposit int64 // Minimum deposit for a proposal to enter voting period.
|
||||
OptionSet []string // Options available to voters. {Yes, No, NoWithVeto, Abstain}
|
||||
ProposalTypes []string // Types available to submitters. {PlainTextProposal, SoftwareUpgradeProposal}
|
||||
Threshold rational.Rational // Minimum propotion of Yes votes for proposal to pass. Initial value: 0.5
|
||||
Veto rational.Rational // Minimum value of Veto votes to Total votes ratio for proposal to be vetoed. Initial value: 1/3
|
||||
Threshold rational.Rat // Minimum propotion of Yes votes for proposal to pass. Initial value: 0.5
|
||||
Veto rational.Rat // Minimum value of Veto votes to Total votes ratio for proposal to be vetoed. Initial value: 1/3
|
||||
MaxDepositPeriod int64 // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 months
|
||||
GovernancePenalty int64 // Penalty if validator does not vote
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ type Procedure struct {
|
|||
MinDeposit int64 // Minimum deposit for a proposal to enter voting period.
|
||||
OptionSet []string // Options available to voters. {Yes, No, NoWithVeto, Abstain}
|
||||
ProposalTypes []string // Types available to submitters. {PlainTextProposal, SoftwareUpgradeProposal}
|
||||
Threshold rational.Rational // Minimum propotion of Yes votes for proposal to pass. Initial value: 0.5
|
||||
Veto rational.Rational // Minimum value of Veto votes to Total votes ratio for proposal to be vetoed. Initial value: 1/3
|
||||
Threshold rational.Rat // Minimum propotion of Yes votes for proposal to pass. Initial value: 0.5
|
||||
Veto rational.Rat // Minimum value of Veto votes to Total votes ratio for proposal to be vetoed. Initial value: 1/3
|
||||
MaxDepositPeriod int64 // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 months
|
||||
GovernancePenalty int64 // Penalty if validator does not vote
|
||||
|
||||
|
|
|
@ -43,11 +43,11 @@ type Params struct {
|
|||
HoldBonded Address // account where all bonded coins are held
|
||||
HoldUnbonded Address // account where all delegated but unbonded coins are held
|
||||
|
||||
InflationRateChange rational.Rational // maximum annual change in inflation rate
|
||||
InflationMax rational.Rational // maximum inflation rate
|
||||
InflationMin rational.Rational // minimum inflation rate
|
||||
GoalBonded rational.Rational // Goal of percent bonded atoms
|
||||
ReserveTax rational.Rational // Tax collected on all fees
|
||||
InflationRateChange rational.Rat // maximum annual change in inflation rate
|
||||
InflationMax rational.Rat // maximum inflation rate
|
||||
InflationMin rational.Rat // minimum inflation rate
|
||||
GoalBonded rational.Rat // Goal of percent bonded atoms
|
||||
ReserveTax rational.Rat // Tax collected on all fees
|
||||
|
||||
MaxValidators uint16 // maximum number of validators
|
||||
BondDenom string // bondable coin denomination
|
||||
|
|
|
@ -23,31 +23,28 @@ type Rat struct {
|
|||
*big.Rat `json:"rat"`
|
||||
}
|
||||
|
||||
type Rational = Rat
|
||||
|
||||
// RationalInterface - big Rat with additional functionality
|
||||
// RatInterface - big Rat with additional functionality
|
||||
// NOTE: we only have one implementation of this interface
|
||||
// and don't use it anywhere, but it might come in handy
|
||||
// if we want to provide Rational types that include
|
||||
// if we want to provide Rat types that include
|
||||
// the units of the value in the type system.
|
||||
type RationalInterface interface {
|
||||
GetRat() *big.Rat
|
||||
Num() int64
|
||||
Denom() int64
|
||||
GT(Rational) bool
|
||||
LT(Rational) bool
|
||||
Equal(Rational) bool
|
||||
IsZero() bool
|
||||
Inv() Rational
|
||||
Mul(Rational) Rational
|
||||
Quo(Rational) Rational
|
||||
Add(Rational) Rational
|
||||
Sub(Rational) Rational
|
||||
Round(int64) Rational
|
||||
Evaluate() int64
|
||||
}
|
||||
|
||||
var _ Rational = Rat{} // enforce at compile time
|
||||
//type RatInterface interface {
|
||||
//GetRat() *big.Rat
|
||||
//Num() int64
|
||||
//Denom() int64
|
||||
//GT(Rat) bool
|
||||
//LT(Rat) bool
|
||||
//Equal(Rat) bool
|
||||
//IsZero() bool
|
||||
//Inv() Rat
|
||||
//Mul(Rat) Rat
|
||||
//Quo(Rat) Rat
|
||||
//Add(Rat) Rat
|
||||
//Sub(Rat) Rat
|
||||
//Round(int64) Rat
|
||||
//Evaluate() int64
|
||||
//}
|
||||
//var _ Rat = Rat{} // enforce at compile time
|
||||
|
||||
// nolint - common values
|
||||
var (
|
||||
|
@ -115,14 +112,14 @@ func (r Rat) GetRat() *big.Rat { return r.Rat }
|
|||
func (r Rat) Num() int64 { return r.Rat.Num().Int64() } // Num - return the numerator
|
||||
func (r Rat) Denom() int64 { return r.Rat.Denom().Int64() } // Denom - return the denominator
|
||||
func (r Rat) IsZero() bool { return r.Num() == 0 } // IsZero - Is the Rat equal to zero
|
||||
func (r Rat) Equal(r2 Rational) bool { return r.Rat.Cmp(r2.GetRat()) == 0 } // Equal - rationals are equal
|
||||
func (r Rat) GT(r2 Rational) bool { return r.Rat.Cmp(r2.GetRat()) == 1 } // GT - greater than
|
||||
func (r Rat) LT(r2 Rational) bool { return r.Rat.Cmp(r2.GetRat()) == -1 } // LT - less than
|
||||
func (r Rat) Inv() Rational { return Rat{new(big.Rat).Inv(r.Rat)} } // Inv - inverse
|
||||
func (r Rat) Mul(r2 Rational) Rational { return Rat{new(big.Rat).Mul(r.Rat, r2.GetRat())} } // Mul - multiplication
|
||||
func (r Rat) Quo(r2 Rational) Rational { return Rat{new(big.Rat).Quo(r.Rat, r2.GetRat())} } // Quo - quotient
|
||||
func (r Rat) Add(r2 Rational) Rational { return Rat{new(big.Rat).Add(r.Rat, r2.GetRat())} } // Add - addition
|
||||
func (r Rat) Sub(r2 Rational) Rational { return Rat{new(big.Rat).Sub(r.Rat, r2.GetRat())} } // Sub - subtraction
|
||||
func (r Rat) Equal(r2 Rat) bool { return r.Rat.Cmp(r2.GetRat()) == 0 } // Equal - rationals are equal
|
||||
func (r Rat) GT(r2 Rat) bool { return r.Rat.Cmp(r2.GetRat()) == 1 } // GT - greater than
|
||||
func (r Rat) LT(r2 Rat) bool { return r.Rat.Cmp(r2.GetRat()) == -1 } // LT - less than
|
||||
func (r Rat) Inv() Rat { return Rat{new(big.Rat).Inv(r.Rat)} } // Inv - inverse
|
||||
func (r Rat) Mul(r2 Rat) Rat { return Rat{new(big.Rat).Mul(r.Rat, r2.GetRat())} } // Mul - multiplication
|
||||
func (r Rat) Quo(r2 Rat) Rat { return Rat{new(big.Rat).Quo(r.Rat, r2.GetRat())} } // Quo - quotient
|
||||
func (r Rat) Add(r2 Rat) Rat { return Rat{new(big.Rat).Add(r.Rat, r2.GetRat())} } // Add - addition
|
||||
func (r Rat) Sub(r2 Rat) Rat { return Rat{new(big.Rat).Sub(r.Rat, r2.GetRat())} } // Sub - subtraction
|
||||
|
||||
var zero = big.NewInt(0)
|
||||
var one = big.NewInt(1)
|
||||
|
@ -167,51 +164,13 @@ func (r Rat) Evaluate() int64 {
|
|||
}
|
||||
|
||||
// Round - round Rat with the provided precisionFactor
|
||||
func (r Rat) Round(precisionFactor int64) Rational {
|
||||
func (r Rat) Round(precisionFactor int64) Rat {
|
||||
rTen := Rat{new(big.Rat).Mul(r.Rat, big.NewRat(precisionFactor, 1))}
|
||||
return Rat{big.NewRat(rTen.Evaluate(), precisionFactor)}
|
||||
}
|
||||
|
||||
//___________________________________________________________________________________
|
||||
|
||||
//var ratCdc = RegisterWire(wire.NewCodec())
|
||||
//// add rational codec elements to provided codec
|
||||
//func RegisterWire(cdc *wire.Codec) *wire.Codec {
|
||||
//cdc.RegisterInterface((*Rational)(nil), nil)
|
||||
//cdc.RegisterConcrete(Rat{}, "rat", nil)
|
||||
//return cdc
|
||||
//}
|
||||
|
||||
//TODO there has got to be a better way using native MarshalText and UnmarshalText
|
||||
|
||||
// RatMarshal - Marshable Rat Struct
|
||||
//type RatMarshal struct {
|
||||
//Numerator int64 `json:"numerator"`
|
||||
//Denominator int64 `json:"denominator"`
|
||||
//}
|
||||
|
||||
//// MarshalJSON - custom implementation of JSON Marshal
|
||||
//func (r Rat) MarshalJSON() ([]byte, error) {
|
||||
//return ratCdc.MarshalJSON(RatMarshal{r.Num(), r.Denom()})
|
||||
//}
|
||||
|
||||
//// UnmarshalJSON - custom implementation of JSON Unmarshal
|
||||
//func (r *Rat) UnmarshalJSON(data []byte) (err error) {
|
||||
//defer func() {
|
||||
//if rcv := recover(); rcv != nil {
|
||||
//err = fmt.Errorf("Panic during UnmarshalJSON: %v", rcv)
|
||||
//}
|
||||
//}()
|
||||
|
||||
//ratMar := new(RatMarshal)
|
||||
//if err := ratCdc.UnmarshalJSON(data, ratMar); err != nil {
|
||||
//return err
|
||||
//}
|
||||
//r.Rat = big.NewRat(ratMar.Numerator, ratMar.Denominator)
|
||||
|
||||
//return nil
|
||||
//}
|
||||
|
||||
var ratCdc JSONCodec // TODO wire.Codec
|
||||
|
||||
// Hack to just use json.Marshal for everything until
|
||||
|
|
|
@ -28,7 +28,7 @@ func GetCandidateKey(addr sdk.Address) []byte {
|
|||
}
|
||||
|
||||
// GetValidatorKey - get the key for the validator used in the power-store
|
||||
func GetValidatorKey(addr sdk.Address, power sdk.Rational, cdc *wire.Codec) []byte {
|
||||
func GetValidatorKey(addr sdk.Address, power sdk.Rat, cdc *wire.Codec) []byte {
|
||||
b, _ := cdc.MarshalJSON(power) // TODO need to handle error here?
|
||||
return append(ValidatorKeyPrefix, append(b, addr.Bytes()...)...) // TODO does this need prefix if its in its own store
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ func (k Keeper) removeCandidate(ctx sdk.Context, candidateAddr sdk.Address) {
|
|||
|
||||
//___________________________________________________________________________
|
||||
|
||||
//func loadValidator(store sdk.KVStore, address sdk.Address, votingPower sdk.Rational) *Validator {
|
||||
//func loadValidator(store sdk.KVStore, address sdk.Address, votingPower sdk.Rat) *Validator {
|
||||
//b := store.Get(GetValidatorKey(address, votingPower))
|
||||
//if b == nil {
|
||||
//return nil
|
||||
|
|
Loading…
Reference in New Issue