Documentation ¶
Index ¶
- Constants
- Variables
- func GetKeyFromID(id uint64) []byte
- func GetVoteKey(proposalID uint64, voter sdk.AccAddress) []byte
- func RegisterCodec(cdc *codec.Codec)
- func RegisterPermissionTypeCodec(o interface{}, name string)
- func RegisterProposalTypeCodec(o interface{}, name string)
- func Uint64FromBytes(bz []byte) uint64
- type AllowedAssetParam
- type AllowedAssetParams
- type AllowedCollateralParam
- type AllowedCollateralParams
- type AllowedDebtParam
- type AllowedMarket
- type AllowedMarkets
- type AllowedParam
- type AllowedParams
- type Committee
- type CommitteeChangeProposal
- func (ccp CommitteeChangeProposal) GetDescription() string
- func (ccp CommitteeChangeProposal) GetTitle() string
- func (ccp CommitteeChangeProposal) ProposalRoute() string
- func (ccp CommitteeChangeProposal) ProposalType() string
- func (ccp CommitteeChangeProposal) String() string
- func (ccp CommitteeChangeProposal) ValidateBasic() error
- type CommitteeDeleteProposal
- func (cdp CommitteeDeleteProposal) GetDescription() string
- func (cdp CommitteeDeleteProposal) GetTitle() string
- func (cdp CommitteeDeleteProposal) ProposalRoute() string
- func (cdp CommitteeDeleteProposal) ProposalType() string
- func (cdp CommitteeDeleteProposal) String() string
- func (cdp CommitteeDeleteProposal) ValidateBasic() error
- type GenesisState
- type GodPermission
- type MsgSubmitProposal
- type MsgVote
- type ParamKeeper
- type Permission
- type Proposal
- type PubProposal
- type QueryCommitteeParams
- type QueryProposalParams
- type QueryVoteParams
- type SimpleParamChangePermission
- type SoftwareUpgradePermission
- type SubParamChangePermission
- type TextPermission
- type Vote
Constants ¶
const ( EventTypeProposalSubmit = "proposal_submit" EventTypeProposalClose = "proposal_close" EventTypeProposalVote = "proposal_vote" AttributeValueCategory = "committee" AttributeKeyCommitteeID = "committee_id" AttributeKeyProposalID = "proposal_id" AttributeKeyProposalCloseStatus = "status" AttributeKeyVoter = "voter" AttributeValueProposalPassed = "proposal_passed" AttributeValueProposalTimeout = "proposal_timeout" AttributeValueProposalFailed = "proposal_failed" )
Module event types
const ( // ModuleName The name that will be used throughout the module ModuleName = "committee" // StoreKey Top level store key where all module items will be stored StoreKey = ModuleName // RouterKey Top level router key RouterKey = ModuleName // QuerierRoute Top level query string QuerierRoute = ModuleName // DefaultParamspace default name for parameter store DefaultParamspace = ModuleName )
const ( TypeMsgSubmitProposal = "commmittee_submit_proposal" // 'committee' prefix appended to avoid potential conflicts with gov msg types TypeMsgVote = "committee_vote" )
const ( ProposalTypeCommitteeChange = "CommitteeChange" ProposalTypeCommitteeDelete = "CommitteeDelete" )
const ( QueryCommittees = "committees" QueryCommittee = "committee" QueryProposals = "proposals" QueryProposal = "proposal" QueryVotes = "votes" QueryVote = "vote" QueryTally = "tally" )
Query endpoints supported by the Querier
const DefaultNextProposalID uint64 = 1
DefaultNextProposalID is the starting poiint for proposal IDs.
const MaxCommitteeDescriptionLength int = 512
Variables ¶
var ( ErrUnknownCommittee = sdkerrors.Register(ModuleName, 2, "committee not found") ErrInvalidCommittee = sdkerrors.Register(ModuleName, 3, "invalid committee") ErrUnknownProposal = sdkerrors.Register(ModuleName, 4, "proposal not found") ErrProposalExpired = sdkerrors.Register(ModuleName, 5, "proposal expired") ErrInvalidPubProposal = sdkerrors.Register(ModuleName, 6, "invalid pubproposal") ErrUnknownVote = sdkerrors.Register(ModuleName, 7, "vote not found") ErrInvalidGenesis = sdkerrors.Register(ModuleName, 8, "invalid genesis") ErrNoProposalHandlerExists = sdkerrors.Register(ModuleName, 9, "pubproposal has no corresponding handler") )
var ( CommitteeKeyPrefix = []byte{0x00} // prefix for keys that store committees ProposalKeyPrefix = []byte{0x01} // prefix for keys that store proposals VoteKeyPrefix = []byte{0x02} // prefix for keys that store votes NextProposalIDKey = []byte{0x03} // key for the next proposal id )
Key prefixes
var ModuleCdc *codec.Codec
ModuleCdc is a generic codec to be used throughout module
Functions ¶
func GetKeyFromID ¶
GetKeyFromID returns the bytes to use as a key for a uint64 id
func GetVoteKey ¶
func GetVoteKey(proposalID uint64, voter sdk.AccAddress) []byte
func RegisterCodec ¶
RegisterCodec registers the necessary types for the module
func RegisterPermissionTypeCodec ¶
func RegisterPermissionTypeCodec(o interface{}, name string)
RegisterPermissionTypeCodec allows external modules to register their own permission types on the internal ModuleCdc. This allows the MsgSubmitProposal to be correctly Amino encoded and decoded (when the msg contains a CommitteeChangeProposal).
func RegisterProposalTypeCodec ¶
func RegisterProposalTypeCodec(o interface{}, name string)
RegisterProposalTypeCodec allows external modules to register their own pubproposal types on the internal ModuleCdc. This allows the MsgSubmitProposal to be correctly Amino encoded and decoded.
func Uint64FromBytes ¶
Uint64FromBytes converts some fixed length bytes back into a uint64.
Types ¶
type AllowedAssetParam ¶
type AllowedAssetParam struct { Denom string `json:"denom" yaml:"denom"` CoinID bool `json:"coin_id" yaml:"coin_id"` Limit bool `json:"limit" yaml:"limit"` Active bool `json:"active" yaml:"active"` }
func (AllowedAssetParam) Allows ¶
func (aap AllowedAssetParam) Allows(current, incoming bep3types.AssetParam) bool
type AllowedAssetParams ¶
type AllowedAssetParams []AllowedAssetParam
func (AllowedAssetParams) Allows ¶
func (aaps AllowedAssetParams) Allows(current, incoming bep3types.AssetParams) bool
type AllowedCollateralParam ¶
type AllowedCollateralParam struct { Denom string `json:"denom" yaml:"denom"` LiquidationRatio bool `json:"liquidation_ratio" yaml:"liquidation_ratio"` DebtLimit bool `json:"debt_limit" yaml:"debt_limit"` StabilityFee bool `json:"stability_fee" yaml:"stability_fee"` AuctionSize bool `json:"auction_size" yaml:"auction_size"` LiquidationPenalty bool `json:"liquidation_penalty" yaml:"liquidation_penalty"` Prefix bool `json:"prefix" yaml:"prefix"` SpotMarketID bool `json:"spot_market_id" yaml:"spot_market_id"` LiquidationMarketID bool `json:"liquidation_market_id" yaml:"liquidation_market_id"` ConversionFactor bool `json:"conversion_factor" yaml:"conversion_factor"` }
func (AllowedCollateralParam) Allows ¶
func (acp AllowedCollateralParam) Allows(current, incoming cdptypes.CollateralParam) bool
type AllowedCollateralParams ¶
type AllowedCollateralParams []AllowedCollateralParam
func (AllowedCollateralParams) Allows ¶
func (acps AllowedCollateralParams) Allows(current, incoming cdptypes.CollateralParams) bool
type AllowedDebtParam ¶
type AllowedDebtParam struct { Denom bool `json:"denom" yaml:"denom"` ReferenceAsset bool `json:"reference_asset" yaml:"reference_asset"` ConversionFactor bool `json:"conversion_factor" yaml:"conversion_factor"` DebtFloor bool `json:"debt_floor" yaml:"debt_floor"` SavingsRate bool `json:"savings_rate" yaml:"savings_rate"` }
type AllowedMarket ¶
type AllowedMarket struct { MarketID string `json:"market_id" yaml:"market_id"` BaseAsset bool `json:"base_asset" yaml:"base_asset"` QuoteAsset bool `json:"quote_asset" yaml:"quote_asset"` Oracles bool `json:"oracles" yaml:"oracles"` Active bool `json:"active" yaml:"active"` }
func (AllowedMarket) Allows ¶
func (am AllowedMarket) Allows(current, incoming pricefeedtypes.Market) bool
type AllowedMarkets ¶
type AllowedMarkets []AllowedMarket
func (AllowedMarkets) Allows ¶
func (ams AllowedMarkets) Allows(current, incoming pricefeedtypes.Markets) bool
type AllowedParam ¶
type AllowedParams ¶
type AllowedParams []AllowedParam
func (AllowedParams) Contains ¶
func (allowed AllowedParams) Contains(paramChange paramstypes.ParamChange) bool
type Committee ¶
type Committee struct { ID uint64 `json:"id" yaml:"id"` Description string `json:"description" yaml:"description"` Members []sdk.AccAddress `json:"members" yaml:"members"` Permissions []Permission `json:"permissions" yaml:"permissions"` VoteThreshold sdk.Dec `json:"vote_threshold" yaml:"vote_threshold"` // Smallest percentage of members that must vote for a proposal to pass. ProposalDuration time.Duration `json:"proposal_duration" yaml:"proposal_duration"` // The length of time a proposal remains active for. Proposals will close earlier if they get enough votes. }
A Committee is a collection of addresses that are allowed to vote and enact any governance proposal that passes their permissions.
func NewCommittee ¶
func NewCommittee(id uint64, description string, members []sdk.AccAddress, permissions []Permission, threshold sdk.Dec, duration time.Duration) Committee
func (Committee) HasPermissionsFor ¶
func (c Committee) HasPermissionsFor(ctx sdk.Context, appCdc *codec.Codec, pk ParamKeeper, proposal PubProposal) bool
HasPermissionsFor returns whether the committee is authorized to enact a proposal. As long as one permission allows the proposal then it goes through. Its the OR of all permissions.
type CommitteeChangeProposal ¶
type CommitteeChangeProposal struct { Title string `json:"title" yaml:"title"` Description string `json:"description" yaml:"description"` NewCommittee Committee `json:"new_committee" yaml:"new_committee"` }
CommitteeChangeProposal is a gov proposal for creating a new committee or modifying an existing one.
func NewCommitteeChangeProposal ¶
func NewCommitteeChangeProposal(title string, description string, newCommittee Committee) CommitteeChangeProposal
func (CommitteeChangeProposal) GetDescription ¶
func (ccp CommitteeChangeProposal) GetDescription() string
GetDescription returns the description of the proposal.
func (CommitteeChangeProposal) GetTitle ¶
func (ccp CommitteeChangeProposal) GetTitle() string
GetTitle returns the title of the proposal.
func (CommitteeChangeProposal) ProposalRoute ¶
func (ccp CommitteeChangeProposal) ProposalRoute() string
ProposalRoute returns the routing key of the proposal.
func (CommitteeChangeProposal) ProposalType ¶
func (ccp CommitteeChangeProposal) ProposalType() string
ProposalType returns the type of the proposal.
func (CommitteeChangeProposal) String ¶
func (ccp CommitteeChangeProposal) String() string
String implements the Stringer interface.
func (CommitteeChangeProposal) ValidateBasic ¶
func (ccp CommitteeChangeProposal) ValidateBasic() error
ValidateBasic runs basic stateless validity checks
type CommitteeDeleteProposal ¶
type CommitteeDeleteProposal struct { Title string `json:"title" yaml:"title"` Description string `json:"description" yaml:"description"` CommitteeID uint64 `json:"committee_id" yaml:"committee_id"` }
CommitteeDeleteProposal is a gov proposal for removing a committee.
func NewCommitteeDeleteProposal ¶
func NewCommitteeDeleteProposal(title string, description string, committeeID uint64) CommitteeDeleteProposal
func (CommitteeDeleteProposal) GetDescription ¶
func (cdp CommitteeDeleteProposal) GetDescription() string
GetDescription returns the description of the proposal.
func (CommitteeDeleteProposal) GetTitle ¶
func (cdp CommitteeDeleteProposal) GetTitle() string
GetTitle returns the title of the proposal.
func (CommitteeDeleteProposal) ProposalRoute ¶
func (cdp CommitteeDeleteProposal) ProposalRoute() string
ProposalRoute returns the routing key of the proposal.
func (CommitteeDeleteProposal) ProposalType ¶
func (cdp CommitteeDeleteProposal) ProposalType() string
ProposalType returns the type of the proposal.
func (CommitteeDeleteProposal) String ¶
func (cdp CommitteeDeleteProposal) String() string
String implements the Stringer interface.
func (CommitteeDeleteProposal) ValidateBasic ¶
func (cdp CommitteeDeleteProposal) ValidateBasic() error
ValidateBasic runs basic stateless validity checks
type GenesisState ¶
type GenesisState struct { NextProposalID uint64 `json:"next_proposal_id" yaml:"next_proposal_id"` Committees []Committee `json:"committees" yaml:"committees"` Proposals []Proposal `json:"proposals" yaml:"proposals"` Votes []Vote `json:"votes" yaml:"votes"` }
GenesisState is state that must be provided at chain genesis.
func DefaultGenesisState ¶
func DefaultGenesisState() GenesisState
DefaultGenesisState returns the default genesis state for the module.
func NewGenesisState ¶
func NewGenesisState(nextProposalID uint64, committees []Committee, proposals []Proposal, votes []Vote) GenesisState
NewGenesisState returns a new genesis state object for the module.
func (GenesisState) Equal ¶
func (data GenesisState) Equal(data2 GenesisState) bool
Equal checks whether two gov GenesisState structs are equivalent
func (GenesisState) IsEmpty ¶
func (data GenesisState) IsEmpty() bool
IsEmpty returns true if a GenesisState is empty
func (GenesisState) Validate ¶
func (gs GenesisState) Validate() error
Validate performs basic validation of genesis data.
type GodPermission ¶
type GodPermission struct{}
GodPermission allows any governance proposal. It is used mainly for testing.
func (GodPermission) Allows ¶
func (GodPermission) Allows(sdk.Context, *codec.Codec, ParamKeeper, PubProposal) bool
func (GodPermission) MarshalYAML ¶
func (GodPermission) MarshalYAML() (interface{}, error)
type MsgSubmitProposal ¶
type MsgSubmitProposal struct { PubProposal PubProposal `json:"pub_proposal" yaml:"pub_proposal"` Proposer sdk.AccAddress `json:"proposer" yaml:"proposer"` CommitteeID uint64 `json:"committee_id" yaml:"committee_id"` }
MsgSubmitProposal is used by committee members to create a new proposal that they can vote on.
func NewMsgSubmitProposal ¶
func NewMsgSubmitProposal(pubProposal PubProposal, proposer sdk.AccAddress, committeeID uint64) MsgSubmitProposal
NewMsgSubmitProposal creates a new MsgSubmitProposal instance
func (MsgSubmitProposal) GetSignBytes ¶
func (msg MsgSubmitProposal) GetSignBytes() []byte
GetSignBytes gets the canonical byte representation of the Msg.
func (MsgSubmitProposal) GetSigners ¶
func (msg MsgSubmitProposal) GetSigners() []sdk.AccAddress
GetSigners returns the addresses of signers that must sign.
func (MsgSubmitProposal) Route ¶
func (msg MsgSubmitProposal) Route() string
Route return the message type used for routing the message.
func (MsgSubmitProposal) Type ¶
func (msg MsgSubmitProposal) Type() string
Type returns a human-readable string for the message, intended for utilization within events.
func (MsgSubmitProposal) ValidateBasic ¶
func (msg MsgSubmitProposal) ValidateBasic() error
ValidateBasic does a simple validation check that doesn't require access to any other information.
type MsgVote ¶
type MsgVote struct { ProposalID uint64 `json:"proposal_id" yaml:"proposal_id"` Voter sdk.AccAddress `json:"voter" yaml:"voter"` }
MsgVote is submitted by committee members to vote on proposals.
func NewMsgVote ¶
func NewMsgVote(voter sdk.AccAddress, proposalID uint64) MsgVote
NewMsgVote creates a message to cast a vote on an active proposal
func (MsgVote) GetSignBytes ¶
GetSignBytes gets the canonical byte representation of the Msg.
func (MsgVote) GetSigners ¶
func (msg MsgVote) GetSigners() []sdk.AccAddress
GetSigners returns the addresses of signers that must sign.
func (MsgVote) Type ¶
Type returns a human-readable string for the message, intended for utilization within events.
func (MsgVote) ValidateBasic ¶
ValidateBasic does a simple validation check that doesn't require access to any other information.
type Permission ¶
type Permission interface {
Allows(sdk.Context, *codec.Codec, ParamKeeper, PubProposal) bool
}
Permission is anything with a method that validates whether a proposal is allowed by it or not.
type Proposal ¶
type Proposal struct { PubProposal `json:"pub_proposal" yaml:"pub_proposal"` ID uint64 `json:"id" yaml:"id"` CommitteeID uint64 `json:"committee_id" yaml:"committee_id"` Deadline time.Time `json:"deadline" yaml:"deadline"` }
Proposal is an internal record of a governance proposal submitted to a committee.
func NewProposal ¶
func (Proposal) HasExpiredBy ¶
HasExpiredBy calculates if the proposal will have expired by a certain time. All votes must be cast before deadline, those cast at time == deadline are not valid
type PubProposal ¶
PubProposal is the interface that all proposals must fulfill to be submitted to a committee. Proposal types can be created external to this module. For example a ParamChangeProposal, or CommunityPoolSpendProposal. It is pinned to the equivalent type in the gov module to create compatibility between proposal types.
type QueryCommitteeParams ¶
type QueryCommitteeParams struct {
CommitteeID uint64 `json:"committee_id" yaml:"committee_id"`
}
func NewQueryCommitteeParams ¶
func NewQueryCommitteeParams(committeeID uint64) QueryCommitteeParams
type QueryProposalParams ¶
type QueryProposalParams struct {
ProposalID uint64 `json:"proposal_id" yaml:"proposal_id"`
}
func NewQueryProposalParams ¶
func NewQueryProposalParams(proposalID uint64) QueryProposalParams
type QueryVoteParams ¶
type QueryVoteParams struct { ProposalID uint64 `json:"proposal_id" yaml:"proposal_id"` Voter sdk.AccAddress `json:"voter" yaml:"voter"` }
func NewQueryVoteParams ¶
func NewQueryVoteParams(proposalID uint64, voter sdk.AccAddress) QueryVoteParams
type SimpleParamChangePermission ¶
type SimpleParamChangePermission struct {
AllowedParams AllowedParams `json:"allowed_params" yaml:"allowed_params"`
}
SimpleParamChangePermission only allows changes to certain params
func (SimpleParamChangePermission) Allows ¶
func (perm SimpleParamChangePermission) Allows(_ sdk.Context, _ *codec.Codec, _ ParamKeeper, p PubProposal) bool
func (SimpleParamChangePermission) MarshalYAML ¶
func (perm SimpleParamChangePermission) MarshalYAML() (interface{}, error)
type SoftwareUpgradePermission ¶
type SoftwareUpgradePermission struct{}
func (SoftwareUpgradePermission) Allows ¶
func (SoftwareUpgradePermission) Allows(_ sdk.Context, _ *codec.Codec, _ ParamKeeper, p PubProposal) bool
func (SoftwareUpgradePermission) MarshalYAML ¶
func (SoftwareUpgradePermission) MarshalYAML() (interface{}, error)
type SubParamChangePermission ¶
type SubParamChangePermission struct { AllowedParams AllowedParams `json:"allowed_params" yaml:"allowed_params"` AllowedCollateralParams AllowedCollateralParams `json:"allowed_collateral_params" yaml:"allowed_collateral_params"` AllowedDebtParam AllowedDebtParam `json:"allowed_debt_param" yaml:"allowed_debt_param"` AllowedAssetParams AllowedAssetParams `json:"allowed_asset_params" yaml:"allowed_asset_params"` AllowedMarkets AllowedMarkets `json:"allowed_markets" yaml:"allowed_markets"` }
ParamChangeProposal only allows changes to certain params
func (SubParamChangePermission) Allows ¶
func (perm SubParamChangePermission) Allows(ctx sdk.Context, appCdc *codec.Codec, pk ParamKeeper, p PubProposal) bool
func (SubParamChangePermission) MarshalYAML ¶
func (perm SubParamChangePermission) MarshalYAML() (interface{}, error)
type TextPermission ¶
type TextPermission struct{}
TextPermission allows any text governance proposal.
func (TextPermission) Allows ¶
func (TextPermission) Allows(_ sdk.Context, _ *codec.Codec, _ ParamKeeper, p PubProposal) bool
func (TextPermission) MarshalYAML ¶
func (TextPermission) MarshalYAML() (interface{}, error)