diff --git a/modules/gov/errors.go b/modules/gov/errors.go index 37c39813e..6373f82a3 100644 --- a/modules/gov/errors.go +++ b/modules/gov/errors.go @@ -21,8 +21,10 @@ const ( CodeInvalidVote sdk.CodeType = 9 CodeInvalidGenesis sdk.CodeType = 10 CodeInvalidProposalStatus sdk.CodeType = 11 + //////////////////// iris begin /////////////////////////// CodeInvalidParam sdk.CodeType = 12 CodeInvalidParamOp sdk.CodeType = 13 + //////////////////// iris end ///////////////////////////// ) //---------------------------------------- @@ -68,10 +70,12 @@ func ErrInvalidGenesis(codespace sdk.CodespaceType, msg string) sdk.Error { return sdk.NewError(codespace, CodeInvalidVote, msg) } +//////////////////// iris begin /////////////////////////// func ErrInvalidParam(codespace sdk.CodespaceType) sdk.Error { return sdk.NewError(codespace, CodeInvalidParam, fmt.Sprintf("Param is not valid")) } func ErrInvalidParamOp(codespace sdk.CodespaceType, opStr string) sdk.Error { return sdk.NewError(codespace, CodeInvalidParamOp, fmt.Sprintf("Op '%s' is not valid", opStr)) -} \ No newline at end of file +} +//////////////////// iris end ///////////////////////////// diff --git a/modules/gov/genesis.go b/modules/gov/genesis.go index 9513d272b..37ffbbc14 100644 --- a/modules/gov/genesis.go +++ b/modules/gov/genesis.go @@ -4,10 +4,10 @@ package gov import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/irisnet/irishub/modules/gov/params" - "github.com/irisnet/irishub/iparam" "fmt" "github.com/irisnet/irishub/types" "time" + "github.com/irisnet/irishub/iparam" ) // GenesisState - all gov state that must be provided at genesis @@ -35,18 +35,23 @@ func InitGenesis(ctx sdk.Context, k Keeper, data GenesisState) { panic(err) } //k.setDepositProcedure(ctx, data.DepositProcedure) + //////////////////// iris begin /////////////////////////// iparam.InitGenesisParameter(&govparams.DepositProcedureParameter, ctx, data.DepositProcedure) iparam.InitGenesisParameter(&govparams.VotingProcedureParameter, ctx, data.VotingProcedure) iparam.InitGenesisParameter(&govparams.TallyingProcedureParameter, ctx, data.TallyingProcedure) - + //////////////////// iris end ///////////////////////////// } // WriteGenesis - output genesis parameters func WriteGenesis(ctx sdk.Context, k Keeper) GenesisState { startingProposalID, _ := k.getNewProposalID(ctx) + + //////////////////// iris begin /////////////////////////// depositProcedure := govparams.GetDepositProcedure(ctx) votingProcedure := govparams.GetVotingProcedure(ctx) tallyingProcedure := govparams.GetTallyingProcedure(ctx) + //////////////////// iris end ///////////////////////////// + return GenesisState{ StartingProposalID: startingProposalID, diff --git a/modules/gov/handler.go b/modules/gov/handler.go index 08cc80198..4112c7d09 100644 --- a/modules/gov/handler.go +++ b/modules/gov/handler.go @@ -28,26 +28,30 @@ func NewHandler(keeper Keeper) sdk.Handler { } func handleMsgSubmitProposal(ctx sdk.Context, keeper Keeper, msg MsgSubmitProposal) sdk.Result { - + //////////////////// iris begin /////////////////////////// proposal := keeper.NewProposal(ctx, msg.Title, msg.Description, msg.ProposalType,msg.Param) + //////////////////// iris end ///////////////////////////// + err, votingStarted := keeper.AddDeposit(ctx, proposal.GetProposalID(), msg.Proposer, msg.InitialDeposit) if err != nil { return err.Result() } - + //////////////////// iris begin /////////////////////////// proposalIDBytes := []byte(strconv.FormatInt(proposal.GetProposalID(), 10)) var paramBytes []byte if msg.ProposalType == ProposalTypeParameterChange { paramBytes, _ = json.Marshal(proposal.(*ParameterProposal).Param) } - + //////////////////// iris end ///////////////////////////// resTags := sdk.NewTags( tags.Action, tags.ActionSubmitProposal, tags.Proposer, []byte(msg.Proposer.String()), tags.ProposalID, proposalIDBytes, + //////////////////// iris begin /////////////////////////// tags.Param, paramBytes, + //////////////////// iris end ///////////////////////////// ) if votingStarted { @@ -67,7 +71,10 @@ func handleMsgDeposit(ctx sdk.Context, keeper Keeper, msg MsgDeposit) sdk.Result return err.Result() } + //////////////////// iris begin /////////////////////////// proposalIDBytes := []byte(strconv.FormatInt(msg.ProposalID, 10)) + //////////////////// iris end ///////////////////////////// + // TODO: Add tag for if voting period started resTags := sdk.NewTags( @@ -92,7 +99,9 @@ func handleMsgVote(ctx sdk.Context, keeper Keeper, msg MsgVote) sdk.Result { return err.Result() } + //////////////////// iris begin /////////////////////////// proposalIDBytes := []byte(strconv.FormatInt(msg.ProposalID, 10)) + //////////////////// iris end ///////////////////////////// resTags := sdk.NewTags( tags.Action, tags.ActionVote, @@ -117,8 +126,9 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) { if inactiveProposal.GetStatus() != StatusDepositPeriod { continue } - + //////////////////// iris begin /////////////////////////// proposalIDBytes := []byte(strconv.FormatInt(inactiveProposal.GetProposalID(), 10)) + //////////////////// iris end ///////////////////////////// keeper.DeleteProposal(ctx, inactiveProposal) resTags.AppendTag(tags.Action, tags.ActionProposalDropped) resTags.AppendTag(tags.ProposalID, proposalIDBytes) @@ -127,7 +137,9 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) { fmt.Sprintf("proposal %d (%s) didn't meet minimum deposit of %v iris-atto (had only %v iris-atto); deleted", inactiveProposal.GetProposalID(), inactiveProposal.GetTitle(), + //////////////////// iris begin /////////////////////////// govparams.GetDepositProcedure(ctx).MinDeposit.AmountOf("iris-atto"), + //////////////////// iris end ///////////////////////////// inactiveProposal.GetTotalDeposit().AmountOf("iris-atto"), ), ) @@ -138,18 +150,25 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) { activeProposal := keeper.ActiveProposalQueuePop(ctx) proposalStartTime := activeProposal.GetVotingStartTime() + //////////////////// iris begin /////////////////////////// votingPeriod := govparams.GetVotingProcedure(ctx).VotingPeriod + //////////////////// iris end ///////////////////////////// if ctx.BlockHeader().Time.Before(proposalStartTime.Add(votingPeriod)) { continue } passes, tallyResults := tally(ctx, keeper, activeProposal) + //////////////////// iris begin /////////////////////////// proposalIDBytes := []byte(strconv.FormatInt(activeProposal.GetProposalID(), 10)) + //////////////////// iris end ///////////////////////////// var action []byte if passes { keeper.RefundDeposits(ctx, activeProposal.GetProposalID()) activeProposal.SetStatus(StatusPassed) action = tags.ActionProposalPassed + //////////////////// iris begin /////////////////////////// + activeProposal.Execute(ctx, keeper) + //////////////////// iris end ///////////////////////////// } else { keeper.DeleteDeposits(ctx, activeProposal.GetProposalID()) activeProposal.SetStatus(StatusRejected) @@ -168,7 +187,9 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags) { return resTags } func shouldPopInactiveProposalQueue(ctx sdk.Context, keeper Keeper) bool { + //////////////////// iris begin /////////////////////////// depositProcedure := govparams.GetDepositProcedure(ctx) + //////////////////// iris end ///////////////////////////// peekProposal := keeper.InactiveProposalQueuePeek(ctx) if peekProposal == nil { @@ -182,7 +203,9 @@ func shouldPopInactiveProposalQueue(ctx sdk.Context, keeper Keeper) bool { } func shouldPopActiveProposalQueue(ctx sdk.Context, keeper Keeper) bool { + //////////////////// iris begin /////////////////////////// votingProcedure := govparams.GetVotingProcedure(ctx) + //////////////////// iris end ///////////////////////////// peekProposal := keeper.ActiveProposalQueuePeek(ctx) if peekProposal == nil { diff --git a/modules/gov/keeper.go b/modules/gov/keeper.go index 5f8a20717..c991f52d3 100644 --- a/modules/gov/keeper.go +++ b/modules/gov/keeper.go @@ -51,6 +51,7 @@ func NewKeeper(cdc *codec.Codec, key sdk.StoreKey,ck bank.Keeper, ds sdk.Delegat // ===================================================== // Proposals +//////////////////// iris begin /////////////////////////// func (keeper Keeper) NewProposal(ctx sdk.Context, title string, description string, proposalType ProposalKind, param Param) Proposal { switch proposalType { case ProposalTypeText: @@ -62,6 +63,8 @@ func (keeper Keeper) NewProposal(ctx sdk.Context, title string, description stri } return nil } +//////////////////// iris end ///////////////////////////// + // ===================================================== // Proposals @@ -87,6 +90,7 @@ func (keeper Keeper) NewTextProposal(ctx sdk.Context, title string, description return proposal } +//////////////////// iris begin /////////////////////////// func (keeper Keeper) NewParametersProposal(ctx sdk.Context, title string, description string, proposalType ProposalKind, param Param) Proposal { proposalID, err := keeper.getNewProposalID(ctx) if err != nil { @@ -136,6 +140,8 @@ func (keeper Keeper) NewUpgradeProposal(ctx sdk.Context, title string, descripti keeper.InactiveProposalQueuePush(ctx, proposal) return proposal } +//////////////////// iris end ///////////////////////////// + // Get Proposal from store by ProposalID func (keeper Keeper) GetProposal(ctx sdk.Context, proposalID int64) Proposal { @@ -362,7 +368,9 @@ func (keeper Keeper) AddDeposit(ctx sdk.Context, proposalID int64, depositerAddr // Check if deposit tipped proposal into voting period // Active voting period if so activatedVotingPeriod := false + //////////////////// iris begin /////////////////////////// if proposal.GetStatus() == StatusDepositPeriod && proposal.GetTotalDeposit().IsGTE(govparams.GetDepositProcedure(ctx).MinDeposit) { + //////////////////// iris end ///////////////////////////// keeper.activateVotingPeriod(ctx, proposal) activatedVotingPeriod = true } diff --git a/modules/gov/msgs.go b/modules/gov/msgs.go index c0eedeaaf..f9a68b46e 100644 --- a/modules/gov/msgs.go +++ b/modules/gov/msgs.go @@ -20,7 +20,9 @@ type MsgSubmitProposal struct { ProposalType ProposalKind `json:"proposal_type"` // Type of proposal. Initial set {PlainTextProposal, SoftwareUpgradeProposal} Proposer sdk.AccAddress `json:"proposer"` // Address of the proposer InitialDeposit sdk.Coins `json:"initial_deposit"` // Initial deposit paid by sender. Must be strictly positive. + //////////////////// iris begin /////////////////////////// Param Param + //////////////////// iris end ///////////////////////////// } func NewMsgSubmitProposal(title string, description string, proposalType ProposalKind, proposer sdk.AccAddress, initialDeposit sdk.Coins, param Param) MsgSubmitProposal { @@ -30,7 +32,9 @@ func NewMsgSubmitProposal(title string, description string, proposalType Proposa ProposalType: proposalType, Proposer: proposer, InitialDeposit: initialDeposit, + //////////////////// iris begin /////////////////////////// Param: param, + //////////////////// iris end ///////////////////////////// } } @@ -58,6 +62,7 @@ func (msg MsgSubmitProposal) ValidateBasic() sdk.Error { if !msg.InitialDeposit.IsNotNegative() { return sdk.ErrInvalidCoins(msg.InitialDeposit.String()) } + //////////////////// iris begin /////////////////////////// if msg.ProposalType == ProposalTypeParameterChange { if msg.Param.Op != Update && msg.Param.Op != Insert { @@ -71,6 +76,7 @@ func (msg MsgSubmitProposal) ValidateBasic() sdk.Error { } } + //////////////////// iris end ///////////////////////////// return nil } diff --git a/modules/gov/proposals.go b/modules/gov/proposals.go index 9d1ba860a..a8a1429a0 100644 --- a/modules/gov/proposals.go +++ b/modules/gov/proposals.go @@ -39,6 +39,11 @@ type Proposal interface { GetVotingStartTime() time.Time SetVotingStartTime(time.Time) + + //////////////////// iris begin /////////////////////////// + Execute(ctx sdk.Context, k Keeper) error + //////////////////// iris end /////////////////////////// + } // checks if two proposals are equal @@ -98,6 +103,9 @@ func (tp TextProposal) GetVotingStartTime() time.Time { return tp.V func (tp *TextProposal) SetVotingStartTime(votingStartTime time.Time) { tp.VotingStartTime = votingStartTime } +//////////////////// iris begin /////////////////////////// +func (pp *TextProposal) Execute(ctx sdk.Context, k Keeper) (err error) {return nil} +//////////////////// iris end ///////////////////////////// //----------------------------------------------------------- // ProposalQueue diff --git a/modules/gov/tags/tags.go b/modules/gov/tags/tags.go index dadef0a2c..7b9515ef5 100644 --- a/modules/gov/tags/tags.go +++ b/modules/gov/tags/tags.go @@ -19,5 +19,7 @@ var ( VotingPeriodStart = "voting-period-start" Depositer = "depositer" Voter = "voter" + //////////////////// iris begin /////////////////////////// Param = "param" + //////////////////// iris end ///////////////////////////// ) diff --git a/modules/gov/tally.go b/modules/gov/tally.go index a4737f7b8..609ea1fc7 100644 --- a/modules/gov/tally.go +++ b/modules/gov/tally.go @@ -85,7 +85,9 @@ func tally(ctx sdk.Context, keeper Keeper, proposal Proposal) (passes bool, tall totalVotingPower = totalVotingPower.Add(votingPower) } + //////////////////// iris begin /////////////////////////// tallyingProcedure := govparams.GetTallyingProcedure(ctx) + //////////////////// iris end ///////////////////////////// tallyResults = TallyResult{ Yes: results[OptionYes],