github.com/Finschia/finschia-sdk@v0.48.1/x/foundation/proposal.go (about) 1 package foundation 2 3 import ( 4 codectypes "github.com/Finschia/finschia-sdk/codec/types" 5 sdk "github.com/Finschia/finschia-sdk/types" 6 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 7 govtypes "github.com/Finschia/finschia-sdk/x/gov/types" 8 ) 9 10 const ( 11 ProposalTypeFoundationExec string = "FoundationExec" 12 ) 13 14 func NewFoundationExecProposal(title, description string, msgs []sdk.Msg) govtypes.Content { 15 proposal := &FoundationExecProposal{ 16 Title: title, 17 Description: description, 18 } 19 proposal.SetMessages(msgs) 20 21 return proposal 22 } 23 24 // Implements Proposal Interface 25 var _ govtypes.Content = &FoundationExecProposal{} 26 27 func (p FoundationExecProposal) ProposalRoute() string { return RouterKey } 28 func (p FoundationExecProposal) ProposalType() string { return ProposalTypeFoundationExec } 29 func (p FoundationExecProposal) ValidateBasic() error { 30 msgs := GetMessagesFromFoundationExecProposal(p) 31 for idx, msg := range msgs { 32 if err := msg.ValidateBasic(); err != nil { 33 return sdkerrors.Wrapf(err, "msg: %d", idx) 34 } 35 } 36 37 return govtypes.ValidateAbstract(&p) 38 } 39 40 func GetMessagesFromFoundationExecProposal(p FoundationExecProposal) []sdk.Msg { 41 anys := p.Messages 42 res := make([]sdk.Msg, len(anys)) 43 for i, any := range anys { 44 cached := any.GetCachedValue() 45 if cached == nil { 46 panic("Any cached value is nil") 47 } 48 res[i] = cached.(sdk.Msg) 49 } 50 return res 51 } 52 53 func (p *FoundationExecProposal) SetMessages(msgs []sdk.Msg) { 54 p.Messages = make([]*codectypes.Any, len(msgs)) 55 for i, msg := range msgs { 56 any, err := codectypes.NewAnyWithValue(msg) 57 if err != nil { 58 panic(err) 59 } 60 p.Messages[i] = any 61 } 62 } 63 64 func (p FoundationExecProposal) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { 65 return UnpackInterfaces(unpacker, p.Messages) 66 } 67 68 func init() { 69 govtypes.RegisterProposalType(ProposalTypeFoundationExec) 70 }