github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/params/types/proposal.go (about)

     1  package types
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params/types"
     8  
     9  	govtypes "github.com/fibonacci-chain/fbc/x/gov/types"
    10  
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	sdkparams "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params"
    13  )
    14  
    15  // Assert ParameterChangeProposal implements govtypes.Content at compile-time
    16  var _ govtypes.Content = ParameterChangeProposal{}
    17  
    18  func init() {
    19  	govtypes.RegisterProposalType(sdkparams.ProposalTypeChange)
    20  	govtypes.RegisterProposalTypeCodec(ParameterChangeProposal{}, "fbexchain/params/ParameterChangeProposal")
    21  }
    22  
    23  // ParameterChangeProposal is the struct of param change proposal
    24  type ParameterChangeProposal struct {
    25  	sdkparams.ParameterChangeProposal
    26  	Height uint64 `json:"height" yaml:"height"`
    27  }
    28  
    29  // NewParameterChangeProposal creates a new instance of ParameterChangeProposal
    30  func NewParameterChangeProposal(title, description string, changes []types.ParamChange, height uint64,
    31  ) ParameterChangeProposal {
    32  	return ParameterChangeProposal{
    33  		ParameterChangeProposal: sdkparams.NewParameterChangeProposal(title, description, changes),
    34  		Height:                  height,
    35  	}
    36  }
    37  
    38  // ValidateBasic validates the parameter change proposal
    39  func (pcp ParameterChangeProposal) ValidateBasic() sdk.Error {
    40  	if len(strings.TrimSpace(pcp.Title)) == 0 {
    41  		return govtypes.ErrInvalidProposalContent("title is required")
    42  	}
    43  	if len(pcp.Title) > govtypes.MaxTitleLength {
    44  		return govtypes.ErrInvalidProposalContent("title length is longer than max title length")
    45  	}
    46  
    47  	if len(pcp.Description) == 0 {
    48  		return govtypes.ErrInvalidProposalContent("description is required")
    49  	}
    50  
    51  	if len(pcp.Description) > govtypes.MaxDescriptionLength {
    52  		return govtypes.ErrInvalidProposalContent("description length is longer than max DggescriptionLength")
    53  	}
    54  
    55  	if pcp.ProposalType() != sdkparams.ProposalTypeChange {
    56  		return govtypes.ErrInvalidProposalType(pcp.ProposalType())
    57  	}
    58  
    59  	if len(pcp.Changes) != 1 {
    60  		return ErrInvalidParamsNum(DefaultCodespace, fmt.Sprintf("one proposal can only change one pair of parameter"))
    61  	}
    62  
    63  	return sdkparams.ValidateChanges(pcp.Changes)
    64  }