cosmos-sdk/x/gov/migrations/v036/types.go

136 lines
3.9 KiB
Go

// Package v036 is used for legacy migration scripts. Actual migration scripts
// for v036 have been removed, but the v039->v042 migration script still
// references types from this file, so we're keeping it for now.
// DONTCOVER
package v036
import (
"fmt"
"strings"
"time"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
v034gov "github.com/cosmos/cosmos-sdk/x/gov/migrations/v034"
)
const (
ModuleName = "gov"
RouterKey = ModuleName
ProposalTypeText string = "Text"
MaxDescriptionLength int = 5000
MaxTitleLength int = 140
)
var (
_ Content = TextProposal{}
)
type (
Proposals []Proposal
ProposalQueue []uint64
TextProposal struct {
Title string `json:"title"`
Description string `json:"description"`
}
Content interface {
GetTitle() string
GetDescription() string
ProposalRoute() string
ProposalType() string
ValidateBasic() error
String() string
}
Proposal struct {
Content `json:"content"`
ProposalID uint64 `json:"id"`
Status v034gov.ProposalStatus `json:"proposal_status"`
FinalTallyResult v034gov.TallyResult `json:"final_tally_result"`
SubmitTime time.Time `json:"submit_time"`
DepositEndTime time.Time `json:"deposit_end_time"`
TotalDeposit sdk.Coins `json:"total_deposit"`
VotingStartTime time.Time `json:"voting_start_time"`
VotingEndTime time.Time `json:"voting_end_time"`
}
GenesisState struct {
StartingProposalID uint64 `json:"starting_proposal_id"`
Deposits v034gov.Deposits `json:"deposits"`
Votes v034gov.Votes `json:"votes"`
Proposals []Proposal `json:"proposals"`
DepositParams v034gov.DepositParams `json:"deposit_params"`
VotingParams v034gov.VotingParams `json:"voting_params"`
TallyParams v034gov.TallyParams `json:"tally_params"`
}
)
func NewGenesisState(
startingProposalID uint64, deposits v034gov.Deposits, votes v034gov.Votes, proposals []Proposal,
depositParams v034gov.DepositParams, votingParams v034gov.VotingParams, tallyParams v034gov.TallyParams,
) GenesisState {
return GenesisState{
StartingProposalID: startingProposalID,
Deposits: deposits,
Votes: votes,
Proposals: proposals,
DepositParams: depositParams,
VotingParams: votingParams,
TallyParams: tallyParams,
}
}
func NewTextProposal(title, description string) Content {
return TextProposal{title, description}
}
func (tp TextProposal) GetTitle() string { return tp.Title }
func (tp TextProposal) GetDescription() string { return tp.Description }
func (tp TextProposal) ProposalRoute() string { return RouterKey }
func (tp TextProposal) ProposalType() string { return ProposalTypeText }
func (tp TextProposal) ValidateBasic() error { return ValidateAbstract(tp) }
func (tp TextProposal) String() string {
return fmt.Sprintf(`Text Proposal:
Title: %s
Description: %s
`, tp.Title, tp.Description)
}
func ErrInvalidProposalContent(msg string) error {
return fmt.Errorf("invalid proposal content: %s", msg)
}
func ValidateAbstract(c Content) error {
title := c.GetTitle()
if len(strings.TrimSpace(title)) == 0 {
return ErrInvalidProposalContent("proposal title cannot be blank")
}
if len(title) > MaxTitleLength {
return ErrInvalidProposalContent(fmt.Sprintf("proposal title is longer than max length of %d", MaxTitleLength))
}
description := c.GetDescription()
if len(description) == 0 {
return ErrInvalidProposalContent("proposal description cannot be blank")
}
if len(description) > MaxDescriptionLength {
return ErrInvalidProposalContent(fmt.Sprintf("proposal description is longer than max length of %d", MaxDescriptionLength))
}
return nil
}
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
cdc.RegisterInterface((*Content)(nil), nil)
cdc.RegisterConcrete(TextProposal{}, "cosmos-sdk/TextProposal", nil)
}