Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Param Change Proposal #4206

Merged
merged 108 commits into from Apr 30, 2019
Merged
Show file tree
Hide file tree
Changes from 91 commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
1d789ac
Add params error types
alexanderbez Apr 16, 2019
2585f58
Update param module keeper to take a codespace
alexanderbez Apr 16, 2019
d4558e0
Update imports
alexanderbez Apr 16, 2019
ae3ccd5
Implement SetRaw and SetRawWithSubkey
alexanderbez Apr 16, 2019
17500e0
Implement ParamChange and update aliases
alexanderbez Apr 17, 2019
d558489
Add types codec
alexanderbez Apr 17, 2019
cde7aa6
Implement ParameterChangeProposal
alexanderbez Apr 17, 2019
1983ef1
Implement TestParameterChangeProposal
alexanderbez Apr 18, 2019
bd1693b
Fix linting errors
alexanderbez Apr 18, 2019
35bb305
Update tags
alexanderbez Apr 18, 2019
e52193a
Implement content
alexanderbez Apr 18, 2019
2f34813
Updata params aliases
alexanderbez Apr 18, 2019
1674f44
Finish params handler and proposal types
alexanderbez Apr 18, 2019
d79b214
Move deposit and vote logic to types package
alexanderbez Apr 18, 2019
597a96c
Move proposal type to types package
alexanderbez Apr 18, 2019
2cfd4cb
Move errors to types package
alexanderbez Apr 18, 2019
0516c8c
Update proposal
alexanderbez Apr 18, 2019
d192f90
Move gov messages to types package
alexanderbez Apr 18, 2019
52e3ae4
Minor updates to naming
alexanderbez Apr 18, 2019
cc5022f
Move keys to types package
alexanderbez Apr 18, 2019
6b94d44
Move codec to types package
alexanderbez Apr 18, 2019
7dbc8ea
Move proposal types to types package
alexanderbez Apr 18, 2019
5e3758b
Update aliases
alexanderbez Apr 18, 2019
002ba9e
Merge branch '3565-param-change-proposal-1' into 3565-param-change-pr…
alexanderbez Apr 18, 2019
3875b79
Add governance alias types
alexanderbez Apr 18, 2019
c3c2abf
Implement governance router
alexanderbez Apr 18, 2019
b336398
Update gov aliases
alexanderbez Apr 18, 2019
695523f
Update gov keeper
alexanderbez Apr 18, 2019
0ae1e34
Update private functions needed for the keeper
alexanderbez Apr 18, 2019
c76f85f
Update godocs
alexanderbez Apr 18, 2019
673a7ac
Update the gov message handler
alexanderbez Apr 18, 2019
dbfbb8d
Update Gaia app
alexanderbez Apr 18, 2019
61e3900
Make updates to auth
alexanderbez Apr 18, 2019
99f6c3f
Merge branch '3565-param-change-proposal-1' into 3565-param-change-pr…
alexanderbez Apr 18, 2019
f9efe1b
Merge branch '3565-param-change-proposal-1' into 3565-param-change-pr…
alexanderbez Apr 18, 2019
7bd44fa
Merge branch '3565-param-change-proposal-2' into 3565-param-change-pr…
alexanderbez Apr 18, 2019
65a0e89
Update the message codec in the keeper
alexanderbez Apr 18, 2019
5687d9e
Update gov end blocker
alexanderbez Apr 19, 2019
e782bdc
Update types tests
alexanderbez Apr 19, 2019
b1a5283
Minor tweaks
alexanderbez Apr 19, 2019
427e127
Add legacy genesis logic
alexanderbez Apr 19, 2019
359f17e
Update gov aliases
alexanderbez Apr 19, 2019
25d14e8
Move gov keys to types package
alexanderbez Apr 19, 2019
03801ce
Revertt to using gov/types in params
alexanderbez Apr 19, 2019
09bfdb1
Implement params handler test
alexanderbez Apr 19, 2019
5b22229
Update governance tests
alexanderbez Apr 19, 2019
659f7f1
Fix endblocker tests
alexanderbez Apr 19, 2019
c15584c
Fix governance querier tests
alexanderbez Apr 19, 2019
bb14e5e
Add seal support to gov router
alexanderbez Apr 19, 2019
8b4cbd2
Update simulationCreateMsgSubmitProposal
alexanderbez Apr 20, 2019
501404c
Disable software upgrade proposals
alexanderbez Apr 21, 2019
a03b455
Move params keys to types package
alexanderbez Apr 21, 2019
d1caf68
Implement param module proposal client logic
alexanderbez Apr 21, 2019
8f6884f
Update gov client logic
alexanderbez Apr 21, 2019
2ae4b7b
Update gaia app client hooks
alexanderbez Apr 21, 2019
997569e
Fix linting errors
alexanderbez Apr 21, 2019
b476725
Fix ValidateBasic
alexanderbez Apr 21, 2019
e271fc7
Remove legacy files
alexanderbez Apr 22, 2019
18af40a
Merge branch '3565-param-change-proposal-3' into 3565-param-change-pr…
alexanderbez Apr 22, 2019
ccfca73
Update paramchange to use strings
alexanderbez Apr 22, 2019
fb40778
Update paramchange cli cmd
alexanderbez Apr 22, 2019
54b6a69
Update ValidateBasic and errors
alexanderbez Apr 22, 2019
6bf5d11
Use PostCommands when adding child cmds
alexanderbez Apr 22, 2019
3975ffc
Fix codec logic
alexanderbez Apr 22, 2019
e090648
Update params client and handler
alexanderbez Apr 22, 2019
24f9b57
Update IsValidProposalType
alexanderbez Apr 22, 2019
6f106ea
Update SubmitProposal to test exec
alexanderbez Apr 22, 2019
ff09412
Implement TestGaiaCLISubmitParamChangeProposal
alexanderbez Apr 22, 2019
63623af
Implement TestSubmitParamChangeProposal
alexanderbez Apr 22, 2019
b08d224
Update swagger.yaml
alexanderbez Apr 22, 2019
c603e0d
Update gaiacli.md
alexanderbez Apr 22, 2019
43a2ea3
Update gov spec docs
alexanderbez Apr 22, 2019
312792c
Fix linting errors
alexanderbez Apr 22, 2019
b54e28e
Fix unit tests
alexanderbez Apr 23, 2019
add7750
Add pending log entries
alexanderbez Apr 23, 2019
f991808
Update docs
alexanderbez Apr 23, 2019
3df4d2a
Update docs
alexanderbez Apr 23, 2019
9d5d02f
Update client/lcd/swagger-ui/swagger.yaml
fedekunze Apr 23, 2019
a4729b5
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
b30913b
Update cmd/gaia/cli_test/test_helpers.go
fedekunze Apr 23, 2019
030e84d
Update client/lcd/test_helpers.go
fedekunze Apr 23, 2019
eeb07f9
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
de27950
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
50c07ce
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
ef39808
Update x/gov/types/proposal.go
fedekunze Apr 23, 2019
d55b29a
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
710164d
Update docs/cosmos-hub/gaiacli.md
fedekunze Apr 23, 2019
47c44de
Address PR comments
alexanderbez Apr 23, 2019
7dda783
Update docs/cosmos-hub/gaiacli.md
cwgoes Apr 29, 2019
c4a294a
Update gov docs to include quorum notes
alexanderbez Apr 29, 2019
d00f0b6
Add logs to handleParameterChangeProposal
alexanderbez Apr 29, 2019
c1a3b5a
Update docs/spec/governance/02_state.md
mossid Apr 30, 2019
548d092
Support and use new StatusFailed when proposal passes but fails exec
alexanderbez Apr 30, 2019
c5111dd
Add docs/notes warning on param validity
alexanderbez Apr 30, 2019
4a00a84
Update docs
alexanderbez Apr 30, 2019
fbb6385
Update docs/spec/governance/02_state.md
rigelrozanski Apr 30, 2019
785b3d5
Update docs/spec/governance/02_state.md
rigelrozanski Apr 30, 2019
d2ef953
Minor doc update
alexanderbez Apr 30, 2019
8ad4ee0
Update x/gov/client/cli/tx.go
rigelrozanski Apr 30, 2019
8992ad5
Merge branch '3565-param-change-proposal-4' of github.com:cosmos/cosm…
alexanderbez Apr 30, 2019
90a6d23
Fix usage of fromAddr
alexanderbez Apr 30, 2019
f9fdac2
Rige code style suggestion
alexanderbez Apr 30, 2019
c64d40f
Update x/params/types/proposal.go
rigelrozanski Apr 30, 2019
33bcb1c
Fix CI lint errors
alexanderbez Apr 30, 2019
8135ddf
Update NewModuleClient godoc
alexanderbez Apr 30, 2019
63938c7
Add godoc to rtr.Seal() call
alexanderbez Apr 30, 2019
4572307
Rename files
alexanderbez Apr 30, 2019
eebec90
Rename NewProposalHandler
alexanderbez Apr 30, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions .pending/breaking/sdk/3565-Updates-to-the-governance-module
@@ -0,0 +1,4 @@
#3565 Updates to the governance module:
* Rename JSON field from `proposal_content` to `content`
* Rename JSON field from `proposal_id` to `id`
* Disable `ProposalTypeSoftwareUpgrade` temporarily
@@ -0,0 +1,3 @@
#3565 Implement parameter change proposal support.
Parameter change proposals can be submitted through the CLI
or a REST endpoint. See docs for further usage.
37 changes: 37 additions & 0 deletions client/lcd/lcd_test.go
Expand Up @@ -630,6 +630,43 @@ func TestSubmitProposal(t *testing.T) {
require.Equal(t, proposalID, proposer.ProposalID)
}

func TestSubmitParamChangeProposal(t *testing.T) {
kb, err := keys.NewKeyBaseFromDir(InitClientHome(t, ""))
require.NoError(t, err)
addr, seed := CreateAddr(t, name1, pw, kb)
cleanup, _, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}, true)
defer cleanup()

acc := getAccount(t, port, addr)
initialBalance := acc.GetCoins()

// create proposal tx
proposalTokens := sdk.TokensFromTendermintPower(5)
resultTx := doSubmitParamChangeProposal(t, port, seed, name1, pw, addr, proposalTokens, fees)
tests.WaitForHeight(resultTx.Height+1, port)

// check if tx was committed
require.Equal(t, uint32(0), resultTx.Code)

var proposalID uint64
bz, err := hex.DecodeString(resultTx.Data)
require.NoError(t, err)
cdc.MustUnmarshalBinaryLengthPrefixed(bz, &proposalID)

// verify balance
acc = getAccount(t, port, addr)
expectedBalance := initialBalance[0].Sub(fees[0])
require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), acc.GetCoins().AmountOf(sdk.DefaultBondDenom))

// query proposal
proposal := getProposal(t, port, proposalID)
require.Equal(t, "Test", proposal.GetTitle())

proposer := getProposer(t, port, proposalID)
require.Equal(t, addr.String(), proposer.Proposer)
require.Equal(t, proposalID, proposer.ProposalID)
}

func TestDeposit(t *testing.T) {
kb, err := keys.NewKeyBaseFromDir(InitClientHome(t, ""))
require.NoError(t, err)
Expand Down
57 changes: 57 additions & 0 deletions client/lcd/swagger-ui/swagger.yaml
Expand Up @@ -1106,6 +1106,49 @@ paths:
description: Invalid query parameters
500:
description: Internal Server Error
/gov/proposals/param_change:
post:
summary: Generate a parameter change proposal transaction
description: Generate a parameter change proposal transaction
consumes:
- application/json
produces:
- application/json
tags:
- ICS22
parameters:
- description: The parameter change proposal body that contains all parameter changes
name: post_proposal_body
in: body
required: true
schema:
type: object
properties:
base_req:
$ref: "#/definitions/BaseReq"
title:
type: string
description:
type: string
proposer:
$ref: "#/definitions/Address"
deposit:
type: array
items:
$ref: "#/definitions/Coin"
changes:
type: array
items:
$ref: "#/definitions/ParamChange"
responses:
200:
description: The transaction was succesfully generated
schema:
$ref: "#/definitions/StdTx"
400:
description: Invalid proposal body
500:
description: Internal Server Error
/gov/proposals/{proposalId}:
get:
summary: Query a proposal
Expand Down Expand Up @@ -2351,3 +2394,17 @@ definitions:
type: string
missed_blocks_counter:
type: string
ParamChange:
type: object
subspace:
fedekunze marked this conversation as resolved.
Show resolved Hide resolved
type: string
description: The parameter module subspace
key:
fedekunze marked this conversation as resolved.
Show resolved Hide resolved
type: string
description: The parameter key
subkey:
fedekunze marked this conversation as resolved.
Show resolved Hide resolved
type: string
description: An optional parameter subkey
value:
type: string
description: The new parameter value
48 changes: 45 additions & 3 deletions client/lcd/test_helpers.go
Expand Up @@ -4,13 +4,12 @@ import (
"bytes"
"encoding/json"
"fmt"
"regexp"

"io/ioutil"
"net"
"net/http"
"os"
"path/filepath"
"regexp"
"sort"
"strings"
"testing"
Expand All @@ -22,6 +21,7 @@ import (
clientkeys "github.com/cosmos/cosmos-sdk/client/keys"
"github.com/cosmos/cosmos-sdk/client/utils"
"github.com/cosmos/cosmos-sdk/crypto/keys"
"github.com/cosmos/cosmos-sdk/x/params"

"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/client/tx"
Expand All @@ -43,6 +43,8 @@ import (
govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest"
gcutils "github.com/cosmos/cosmos-sdk/x/gov/client/utils"
mintrest "github.com/cosmos/cosmos-sdk/x/mint/client/rest"
paramsrest "github.com/cosmos/cosmos-sdk/x/params/client/rest"
paramscutils "github.com/cosmos/cosmos-sdk/x/params/client/utils"
"github.com/cosmos/cosmos-sdk/x/slashing"
slashingrest "github.com/cosmos/cosmos-sdk/x/slashing/client/rest"
"github.com/cosmos/cosmos-sdk/x/staking"
Expand Down Expand Up @@ -411,7 +413,7 @@ func registerRoutes(rs *RestServer) {
distrrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc, distr.StoreKey)
stakingrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc, rs.KeyBase)
slashingrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc, rs.KeyBase)
govrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc)
govrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc, paramsrest.ProposalRESTHandler(rs.CliCtx, rs.Cdc))
mintrest.RegisterRoutes(rs.CliCtx, rs.Mux, rs.Cdc)
}

Expand Down Expand Up @@ -1151,6 +1153,46 @@ func doSubmitProposal(
return txResp
}

func doSubmitParamChangeProposal(
t *testing.T, port, seed, name, pwd string, proposerAddr sdk.AccAddress,
amount sdk.Int, fees sdk.Coins,
) sdk.TxResponse {

acc := getAccount(t, port, proposerAddr)
accnum := acc.GetAccountNumber()
sequence := acc.GetSequence()
chainID := viper.GetString(client.FlagChainID)
from := acc.GetAddress().String()

baseReq := rest.NewBaseReq(from, "", chainID, "", "", accnum, sequence, fees, nil, false)
pr := paramscutils.ParamChangeProposalReq{
BaseReq: baseReq,
Title: "Test",
Description: "test",
Proposer: proposerAddr,
Deposit: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, amount)},
Changes: []params.ParamChange{
params.NewParamChange("staking", "MaxValidators", "", "105"),
},
}

req, err := cdc.MarshalJSON(pr)
require.NoError(t, err)

resp, body := Request(t, port, "POST", "/gov/proposals/param_change", req)
fmt.Println(resp)
require.Equal(t, http.StatusOK, resp.StatusCode, body)

resp, body = signAndBroadcastGenTx(t, port, name, pwd, body, acc, client.DefaultGasAdjustment, false)
require.Equal(t, http.StatusOK, resp.StatusCode, body)

var txResp sdk.TxResponse
err = cdc.UnmarshalJSON([]byte(body), &txResp)
require.NoError(t, err)

return txResp
}

// GET /gov/proposals Query proposals
func getProposalsAll(t *testing.T, port string) []gov.Proposal {
res, body := Request(t, port, "GET", "/gov/proposals", nil)
Expand Down
19 changes: 13 additions & 6 deletions cmd/gaia/app/app.go
Expand Up @@ -6,11 +6,6 @@ import (
"os"
"sort"

abci "github.com/tendermint/tendermint/abci/types"
cmn "github.com/tendermint/tendermint/libs/common"
dbm "github.com/tendermint/tendermint/libs/db"
"github.com/tendermint/tendermint/libs/log"

bam "github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand All @@ -23,6 +18,11 @@ import (
"github.com/cosmos/cosmos-sdk/x/params"
"github.com/cosmos/cosmos-sdk/x/slashing"
"github.com/cosmos/cosmos-sdk/x/staking"

abci "github.com/tendermint/tendermint/abci/types"
cmn "github.com/tendermint/tendermint/libs/common"
dbm "github.com/tendermint/tendermint/libs/db"
"github.com/tendermint/tendermint/libs/log"
)

const (
Expand Down Expand Up @@ -97,7 +97,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b
tkeyParams: sdk.NewTransientStoreKey(params.TStoreKey),
}

app.paramsKeeper = params.NewKeeper(app.cdc, app.keyParams, app.tkeyParams)
app.paramsKeeper = params.NewKeeper(app.cdc, app.keyParams, app.tkeyParams, params.DefaultCodespace)

// define the accountKeeper
app.accountKeeper = auth.NewAccountKeeper(
Expand Down Expand Up @@ -140,11 +140,17 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b
&stakingKeeper, app.paramsKeeper.Subspace(slashing.DefaultParamspace),
slashing.DefaultCodespace,
)

govRouter := gov.NewRouter()
govRouter.AddRoute(gov.RouterKey, gov.ProposalHandler).
AddRoute(params.RouterKey, params.NewProposalHandler(app.paramsKeeper))
alexanderbez marked this conversation as resolved.
Show resolved Hide resolved

app.govKeeper = gov.NewKeeper(
app.cdc,
app.keyGov,
app.paramsKeeper, app.paramsKeeper.Subspace(gov.DefaultParamspace), app.bankKeeper, &stakingKeeper,
gov.DefaultCodespace,
govRouter,
)
app.crisisKeeper = crisis.NewKeeper(
app.paramsKeeper.Subspace(crisis.DefaultParamspace),
Expand Down Expand Up @@ -209,6 +215,7 @@ func MakeCodec() *codec.Codec {
staking.RegisterCodec(cdc)
distr.RegisterCodec(cdc)
slashing.RegisterCodec(cdc)
params.RegisterCodec(cdc)
gov.RegisterCodec(cdc)
auth.RegisterCodec(cdc)
crisis.RegisterCodec(cdc)
Expand Down
61 changes: 61 additions & 0 deletions cmd/gaia/cli_test/cli_test.go
Expand Up @@ -598,6 +598,67 @@ func TestGaiaCLISubmitProposal(t *testing.T) {
f.Cleanup()
}

func TestGaiaCLISubmitParamChangeProposal(t *testing.T) {
t.Parallel()
f := InitFixtures(t)

proc := f.GDStart()
defer proc.Stop(false)

fooAddr := f.KeyAddress(keyFoo)
fooAcc := f.QueryAccount(fooAddr)
startTokens := sdk.TokensFromTendermintPower(50)
require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(sdk.DefaultBondDenom))

// write proposal to file
proposalTokens := sdk.TokensFromTendermintPower(5)
proposal := fmt.Sprintf(`{
"title": "Param Change",
"description": "Update max validators",
"changes": [
{
"subspace": "staking",
fedekunze marked this conversation as resolved.
Show resolved Hide resolved
"key": "MaxValidators",
"value": "105"
}
],
"deposit": [
{
"denom": "stake",
"amount": "%s"
}
]
}
`, proposalTokens.String())

proposalFile := WriteToNewTempFile(t, proposal)

// create the param change proposal
f.TxGovSubmitParamChangeProposal(keyFoo, proposalFile.Name(), sdk.NewCoin(denom, proposalTokens), "-y")
tests.WaitForNextNBlocksTM(1, f.Port)

// ensure transaction tags can be queried
txs := f.QueryTxs(1, 50, "action:submit_proposal", fmt.Sprintf("sender:%s", fooAddr))
require.Len(t, txs, 1)

// ensure deposit was deducted
fooAcc = f.QueryAccount(fooAddr)
require.Equal(t, startTokens.Sub(proposalTokens).String(), fooAcc.GetCoins().AmountOf(sdk.DefaultBondDenom).String())

// ensure proposal is directly queryable
proposal1 := f.QueryGovProposal(1)
require.Equal(t, uint64(1), proposal1.ProposalID)
require.Equal(t, gov.StatusDepositPeriod, proposal1.Status)

// ensure correct query proposals result
proposalsQuery := f.QueryGovProposals()
require.Equal(t, uint64(1), proposalsQuery[0].ProposalID)

// ensure the correct deposit amount on the proposal
deposit := f.QueryGovDeposit(1, fooAddr)
require.Equal(t, proposalTokens, deposit.Amount.AmountOf(denom))
}

func TestGaiaCLIQueryTxPagination(t *testing.T) {
t.Parallel()
f := InitFixtures(t)
Expand Down
14 changes: 14 additions & 0 deletions cmd/gaia/cli_test/test_helpers.go
Expand Up @@ -387,6 +387,20 @@ func (f *Fixtures) TxGovVote(proposalID int, option gov.VoteOption, from string,
return executeWriteRetStdStreams(f.T, addFlags(cmd, flags), client.DefaultKeyPass)
}

// TxGovSubmitParamChangeProposal executes a CLI parameter change proposal
// submission.
func (f *Fixtures) TxGovSubmitParamChangeProposal(
from, proposalPath string, deposit sdk.Coin, flags ...string,
) (bool, string, string) {

cmd := fmt.Sprintf(
"%s tx gov submit-proposal param-change %s --from=%s %v",
f.GaiacliBinary, proposalPath, from, f.Flags(),
)

return executeWriteRetStdStreams(f.T, addFlags(cmd, flags), client.DefaultKeyPass)
}

//___________________________________________________________________________________
// gaiacli query account

Expand Down