package validators import ( "std" "gno.land/p/sys/validators" "gno.land/r/gov/dao" ) const errNoChangesProposed = "no set changes proposed" // NewPropRequest creates a new proposal request that wraps a changes closure // proposal. This wrapper is required to ensure the GovDAO Realm actually // executed the callback. func NewPropRequest(changesFn func() []validators.Validator, title, description string) dao.ProposalRequest { if changesFn == nil { panic(errNoChangesProposed) } callback := func() error { for _, change := range changesFn() { if change.VotingPower == 0 { // This change request is to remove the validator removeValidator(change.Address) continue } // This change request is to add the validator addValidator(change) } return nil } e := dao.NewSimpleExecutor(callback, "") return dao.NewProposalRequest(title, description, e) } // IsValidator returns a flag indicating if the given bech32 address // is part of the validator set func IsValidator(addr std.Address) bool { return vp.IsValidator(addr) } // GetValidator returns the typed validator func GetValidator(addr std.Address) validators.Validator { if validator, err := vp.GetValidator(addr); err == nil { return validator } panic("validator not found") } // GetValidators returns the typed validator set func GetValidators() []validators.Validator { return vp.GetValidators() }