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  }