From 5f6d7efb30680ca604247eb9dcc837e320085968 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Sun, 16 Jun 2024 22:35:16 +0200 Subject: [PATCH 01/19] feat!: add expedited propsal antehandler --- ante/ante.go | 1 + ante/gov_expedited_ante.go | 71 +++++++++ ante/gov_expedited_ante_test.go | 270 ++++++++++++++++++++++++++++++++ go.mod | 14 +- go.sum | 24 ++- 5 files changed, 359 insertions(+), 21 deletions(-) create mode 100644 ante/gov_expedited_ante.go create mode 100644 ante/gov_expedited_ante_test.go diff --git a/ante/ante.go b/ante/ante.go index 2ee03cb2869..5af279e8fcd 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -62,6 +62,7 @@ func NewAnteHandler(opts HandlerOptions) (sdk.AnteHandler, error) { ante.NewValidateMemoDecorator(opts.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(opts.AccountKeeper), NewGovVoteDecorator(opts.Codec, opts.StakingKeeper), + NewGovExpeditedProposalsDecorator(opts.Codec), gaiafeeante.NewFeeDecorator(opts.GlobalFeeSubspace, opts.StakingKeeper), ante.NewDeductFeeDecorator(opts.AccountKeeper, opts.BankKeeper, opts.FeegrantKeeper, opts.TxFeeChecker), ante.NewSetPubKeyDecorator(opts.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators diff --git a/ante/gov_expedited_ante.go b/ante/gov_expedited_ante.go new file mode 100644 index 00000000000..dbf8a537ad9 --- /dev/null +++ b/ante/gov_expedited_ante.go @@ -0,0 +1,71 @@ +package ante + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" +) + +var expeditedPropsWhitelist = map[string]struct{}{ + "/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade": {}, + "/cosmos.upgrade.v1beta1.MsgCancelUpgrade": {}, + // legacy proposals can still be submitted using govv1.MsgSubmitProposal + "/cosmos.upgrade.v1beta1.SoftwareUpgradeProposal": {}, + "/cosmos.upgrade.v1beta1.CancelSoftwareUpgradeProposal": {}, +} + +// Check if the proposal is whitelisted for expedited voting. +type GovExpeditedProposalsDecorator struct { + cdc codec.BinaryCodec +} + +func NewGovExpeditedProposalsDecorator(cdc codec.BinaryCodec) GovExpeditedProposalsDecorator { + return GovExpeditedProposalsDecorator{ + cdc: cdc, + } +} + +// AnteHandle checks if the proposal is whitelisted for expedited voting. +// Only proposals submitted using "gaiad tx gov submit-proposal" can be expedited. +// Legacy proposals submitted using "gaiad tx gov submit-legacy-proposal" cannot be marked as expedited. +func (g GovExpeditedProposalsDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { + for _, msg := range tx.GetMsgs() { + prop, ok := msg.(*govv1.MsgSubmitProposal) + if !ok { + continue + } + if prop.Expedited { + if err := g.validateExpeditedGovProp(prop); err != nil { + return ctx, err + } + } + } + return next(ctx, tx, simulate) +} + +func (g GovExpeditedProposalsDecorator) isWhitelisted(msgType string) bool { + _, ok := expeditedPropsWhitelist[msgType] + return ok +} + +func (g GovExpeditedProposalsDecorator) validateExpeditedGovProp(prop *govv1.MsgSubmitProposal) error { + msgs := prop.GetMessages() + if len(msgs) == 0 { + return fmt.Errorf("unsupported expedited proposal") + } + for _, message := range msgs { + // in case of legacy content submitted using govv1.MsgSubmitProposal + if sdkMsg, isLegacy := message.GetCachedValue().(*govv1.MsgExecLegacyContent); isLegacy { + if !g.isWhitelisted(sdkMsg.Content.TypeUrl) { + return fmt.Errorf("unsupported expedited proposal type: %s", sdkMsg.Content.TypeUrl) + } + continue + } + if !g.isWhitelisted(message.TypeUrl) { + return fmt.Errorf("unsupported expedited proposal type: %s", message.TypeUrl) + } + } + return nil +} diff --git a/ante/gov_expedited_ante_test.go b/ante/gov_expedited_ante_test.go new file mode 100644 index 00000000000..c2302910a8f --- /dev/null +++ b/ante/gov_expedited_ante_test.go @@ -0,0 +1,270 @@ +package ante_test + +import ( + "testing" + + "github.com/cosmos/gaia/v18/app/helpers" + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + + "github.com/cosmos/gaia/v18/ante" +) + +func TestGovExpeditedProposalsDecorator(t *testing.T) { + gaiaApp := helpers.Setup(t) + + testCases := []struct { + name string + ctx sdk.Context + msgs []sdk.Msg + expectErr bool + }{ + // these cases should pass + { + name: "expedited - govv1.MsgSubmitProposal - MsgSoftwareUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&upgradetypes.MsgSoftwareUpgrade{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + Plan: upgradetypes.Plan{ + Name: "upgrade plan-plan", + Info: "some text here", + Height: 123456789, + }}}, true), + }, + expectErr: false, + }, + { + name: "expedited - govv1.MsgSubmitProposal - LegacySoftwareUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyUpgradeProp(true), // expedite + }, + expectErr: false, + }, + { + name: "expedited - govv1.MsgSubmitProposal - MsgCancelUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&upgradetypes.MsgCancelUpgrade{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + }}, true), + }, + expectErr: false, + }, + { + name: "expedited - govv1.MsgSubmitProposal - LegacyCancelUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyCancelProp(true), // expedite + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - LegacySoftwareUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyUpgradeProp(false), // normal + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - LegacyCancelUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyCancelProp(false), // normal + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - TextProposal", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyTextProp(false), // normal + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - MsgCommunityPoolSpend", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&distrtypes.MsgCommunityPoolSpend{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + Recipient: sdk.AccAddress{}.String(), + Amount: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + }}, false), // normal + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - MsgTransfer", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&banktypes.MsgSend{ + FromAddress: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + ToAddress: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + Amount: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + }}, false), // normal + }, + expectErr: false, + }, + { + name: "normal - govv1.MsgSubmitProposal - MsgUpdateParams", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&banktypes.MsgUpdateParams{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + }}, false), + }, + expectErr: false, + }, + // legacy proposals - antehandler should not affect them + // submitted using "gaiad tx gov submit-legacy-proposal" + { + name: "normal - govv1beta.MsgSubmitProposal - LegacySoftwareUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{newGovV1BETA1LegacyUpgradeProp()}, + expectErr: false, + }, + { + name: "normal - govv1beta.MsgSubmitProposal - LegacyCancelSoftwareUpgrade", + ctx: sdk.Context{}, + msgs: []sdk.Msg{newGovV1BETA1LegacyCancelUpgradeProp()}, + expectErr: false, + }, + // these cases should fail + // these are normal proposals, not whitelisted for expedited voting + { + name: "fail - expedited - govv1.MsgSubmitProposal - Empty", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{}, true), + }, + expectErr: true, + }, + { + name: "fail - expedited - govv1.MsgSubmitProposal - TextProposal", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newLegacyTextProp(true), // expedite + }, + expectErr: true, + }, + { + name: "fail - expedited - govv1.MsgSubmitProposal - MsgCommunityPoolSpend", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&distrtypes.MsgCommunityPoolSpend{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + Recipient: sdk.AccAddress{}.String(), + Amount: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + }}, true), + }, + expectErr: true, + }, + { + name: "fail - expedited - govv1.MsgSubmitProposal - MsgTransfer", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&banktypes.MsgSend{ + FromAddress: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + ToAddress: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + Amount: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), + }}, true), + }, + expectErr: true, + }, + { + name: "fail - expedited - govv1.MsgSubmitProposal - MsgUpdateParams", + ctx: sdk.Context{}, + msgs: []sdk.Msg{ + newGovProp([]sdk.Msg{&banktypes.MsgUpdateParams{ + Authority: "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + }}, true), + }, + expectErr: true, + }, + } + + for _, tc := range testCases { + tc := tc + + t.Run(tc.name, func(t *testing.T) { + txCfg := gaiaApp.GetTxConfig() + decorator := ante.NewGovExpeditedProposalsDecorator(gaiaApp.AppCodec()) + + txBuilder := txCfg.NewTxBuilder() + require.NoError(t, txBuilder.SetMsgs(tc.msgs...)) + + _, err := decorator.AnteHandle(tc.ctx, txBuilder.GetTx(), false, + func(ctx sdk.Context, _ sdk.Tx, _ bool) (sdk.Context, error) { return ctx, nil }) + if tc.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func newLegacyTextProp(expedite bool) *govv1.MsgSubmitProposal { + testProposal := govv1beta1.NewTextProposal("Proposal", "Test as normal proposal") + msgContent, err := v1.NewLegacyContent(testProposal, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + if err != nil { + return nil + } + return newGovProp([]sdk.Msg{msgContent}, expedite) +} + +func newLegacyUpgradeProp(expedite bool) *govv1.MsgSubmitProposal { + prop := upgradetypes.NewSoftwareUpgradeProposal("test legacy upgrade", "test legacy upgrade", upgradetypes.Plan{ + Name: "upgrade plan-plan", + Info: "some text here", + Height: 123456789, + }) + msgContent, err := v1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + if err != nil { + return nil + } + return newGovProp([]sdk.Msg{msgContent}, expedite) +} + +func newGovV1BETA1LegacyUpgradeProp() *govv1beta1.MsgSubmitProposal { + legacyContent := upgradetypes.NewSoftwareUpgradeProposal("test legacy upgrade", "test legacy upgrade", upgradetypes.Plan{ + Name: "upgrade plan-plan", + Info: "some text here", + Height: 123456789, + }) + + msg, _ := govv1beta1.NewMsgSubmitProposal(legacyContent, sdk.NewCoins(), sdk.AccAddress{}) + return msg +} + +func newGovV1BETA1LegacyCancelUpgradeProp() *govv1beta1.MsgSubmitProposal { + legacyContent := upgradetypes.NewCancelSoftwareUpgradeProposal("test legacy upgrade", "test legacy upgrade") + + msg, _ := govv1beta1.NewMsgSubmitProposal(legacyContent, sdk.NewCoins(), sdk.AccAddress{}) + return msg +} + +func newLegacyCancelProp(expedite bool) *govv1.MsgSubmitProposal { + prop := upgradetypes.NewCancelSoftwareUpgradeProposal("test legacy upgrade", "test legacy upgrade") + msgContent, err := v1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + if err != nil { + return nil + } + return newGovProp([]sdk.Msg{msgContent}, expedite) +} + +func newGovProp(msgs []sdk.Msg, expedite bool) *govv1.MsgSubmitProposal { + msg, _ := govv1.NewMsgSubmitProposal(msgs, sdk.NewCoins(), sdk.AccAddress{}.String(), "", "expedite", "expedite", expedite) + // fmt.Println("### msg ###", msg, "err", err) + return msg +} diff --git a/go.mod b/go.mod index fa4aa069545..ebb867e2355 100644 --- a/go.mod +++ b/go.mod @@ -26,12 +26,12 @@ require ( github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 ) require ( cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/compute v1.24.0 // indirect + cloud.google.com/go/compute v1.25.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.6 // indirect cloud.google.com/go/storage v1.38.0 // indirect @@ -39,7 +39,7 @@ require ( // github.com/gravity-devs/liquidity v1.6.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/grpc v1.63.2 + google.golang.org/grpc v1.64.0 ) require ( @@ -213,8 +213,8 @@ require ( golang.org/x/tools v0.13.0 // indirect google.golang.org/api v0.171.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/protobuf v1.34.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -228,10 +228,10 @@ replace ( github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Use special SDK v0.47.x release with support for both ICS and LSM - github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.47.15-ics-lsm + github.com/cosmos/cosmos-sdk => ../cosmos-sdk // Use special ICS v4.1.0-ics-lsm release with support for LSM - github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.2.0-lsm + github.com/cosmos/interchain-security/v4 => ../interchain-security // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 diff --git a/go.sum b/go.sum index 21ad1567b11..9a2e51ed769 100644 --- a/go.sum +++ b/go.sum @@ -71,8 +71,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= +cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -395,8 +395,6 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.47.15-ics-lsm h1:OvJXkwmAyhG+K+WkQSUNeQls4QnSbnPsyh+Mg0F+bPc= -github.com/cosmos/cosmos-sdk v0.47.15-ics-lsm/go.mod h1:uzvMwHXmuRDSOaF8ec9HickjLHJcItWBREdkaDHcPiE= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -413,8 +411,6 @@ github.com/cosmos/ibc-go/v7 v7.5.1 h1:KqS/g7W7EMX1OtOvufS8lWMJibOKpdgtNNZIU6fAgV github.com/cosmos/ibc-go/v7 v7.5.1/go.mod h1:ktFg5GvKOyrGCqTWtW7Grj5uweU4ZapxrNeVS1CLLbo= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v4 v4.2.0-lsm h1:/ET7ibwJ0tWf5SVRDwSVJ0G53b3i89BsOiFaCguUCDE= -github.com/cosmos/interchain-security/v4 v4.2.0-lsm/go.mod h1:xwuWSAibUdRrUK6Lr2r2K5Bf2tHZNXJkeVoZhQhH6s0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= @@ -1834,10 +1830,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 h1:rIo7ocm2roD9DcFIX67Ym8icoGCKSARAiPljFhh5suQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1879,8 +1875,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1897,8 +1893,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 6caaa81875c4e5c5c9737393bd10f6935ae152e6 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Mon, 17 Jun 2024 17:32:44 +0200 Subject: [PATCH 02/19] wip: add e2e testing --- go.mod | 4 +-- go.sum | 4 +++ tests/e2e/e2e_gov_test.go | 49 +++++++++++++++++++++++++++++++++++++ tests/e2e/e2e_setup_test.go | 48 +++++++++++++++++++++++++++++++++--- 4 files changed, 100 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ebb867e2355..69f9436bc27 100644 --- a/go.mod +++ b/go.mod @@ -228,10 +228,10 @@ replace ( github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Use special SDK v0.47.x release with support for both ICS and LSM - github.com/cosmos/cosmos-sdk => ../cosmos-sdk + github.com/cosmos/cosmos-sdk => github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 // Use special ICS v4.1.0-ics-lsm release with support for LSM - github.com/cosmos/interchain-security/v4 => ../interchain-security + github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.2.0-lsm // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 diff --git a/go.sum b/go.sum index 9a2e51ed769..8820559555f 100644 --- a/go.sum +++ b/go.sum @@ -411,6 +411,8 @@ github.com/cosmos/ibc-go/v7 v7.5.1 h1:KqS/g7W7EMX1OtOvufS8lWMJibOKpdgtNNZIU6fAgV github.com/cosmos/ibc-go/v7 v7.5.1/go.mod h1:ktFg5GvKOyrGCqTWtW7Grj5uweU4ZapxrNeVS1CLLbo= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/interchain-security/v4 v4.2.0-lsm h1:/ET7ibwJ0tWf5SVRDwSVJ0G53b3i89BsOiFaCguUCDE= +github.com/cosmos/interchain-security/v4 v4.2.0-lsm/go.mod h1:xwuWSAibUdRrUK6Lr2r2K5Bf2tHZNXJkeVoZhQhH6s0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= @@ -818,6 +820,8 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 h1:Vkk5RywGiqQsR68T9FwxTw5JQ2JstfpRlMiOP0j2+Tk= +github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413/go.mod h1:9sL4HXReNswcuwsPO33TACJmc+xkxYwHnmcL7rZgu1c= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= diff --git a/tests/e2e/e2e_gov_test.go b/tests/e2e/e2e_gov_test.go index 8c5282f3391..18b9c1acb3f 100644 --- a/tests/e2e/e2e_gov_test.go +++ b/tests/e2e/e2e_gov_test.go @@ -235,6 +235,22 @@ func (s *IntegrationTestSuite) submitGovCommand(chainAAPIEndpoint, sender string }) } +func (s *IntegrationTestSuite) submitGovCommandExpectingFailure(chainAAPIEndpoint, sender string, proposalID int, govCommand string, proposalFlags []string) { + s.Run(fmt.Sprintf("Running tx gov %s", govCommand), func() { + s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String()) + + s.Require().Eventually( + func() bool { + _, err := queryGovProposal(chainAAPIEndpoint, proposalID) + s.Require().Error(err) + return err != nil + }, + 15*time.Second, + 5*time.Second, + ) + }) +} + // testSetBlocksPerEpoch tests that we can change `BlocksPerEpoch` through a governance proposal func (s *IntegrationTestSuite) testSetBlocksPerEpoch() { chainEndpoint := fmt.Sprintf("http://%s", s.valResources[s.chainA.id][0].GetHostPort("1317/tcp")) @@ -282,3 +298,36 @@ func (s *IntegrationTestSuite) testSetBlocksPerEpoch() { 5*time.Second, ) } + +// testFailExpediteProposal tests that expediting a ParamChange proposal fails. +func (s *IntegrationTestSuite) testFailExpediteProposal() { + chainEndpoint := fmt.Sprintf("http://%s", s.valResources[s.chainA.id][0].GetHostPort("1317/tcp")) + + defaultBlocksPerEpoch := providertypes.DefaultParams().BlocksPerEpoch + + // assert that initially, the actual blocks per epoch are the default blocks per epoch + s.Require().Eventually( + func() bool { + blocksPerEpoch, err := queryBlocksPerEpoch(chainEndpoint) + s.T().Logf("After gov new global fee proposal: %d", gas) + s.Require().NoError(err) + + s.Require().Equal(blocksPerEpoch, defaultBlocksPerEpoch) + return true + }, + 15*time.Second, + 5*time.Second, + ) + + // attempt to change but nothing should happen -> proposal fails at ante handler + expectedBlocksPerEpoch := defaultBlocksPerEpoch + 1 + s.writeFailingExpeditedProposal(s.chainA, expectedBlocksPerEpoch) + + validatorAAddr, _ := s.chainA.validators[0].keyInfo.GetAddress() + proposalCounter++ + submitGovFlags := []string{configFile(proposalBlocksPerEpochFilename)} + + s.T().Logf("Proposal number: %d", proposalCounter) + s.T().Logf("Submitting, deposit and vote Gov Proposal: Change BlocksPerEpoch parameter [ EXPEDITED - MUST FAIL ]") + s.submitGovCommandExpectingFailure(chainEndpoint, validatorAAddr.String(), proposalCounter, paramtypes.ProposalTypeChange, submitGovFlags) +} diff --git a/tests/e2e/e2e_setup_test.go b/tests/e2e/e2e_setup_test.go index d9c92c3ad69..9b2a827e638 100644 --- a/tests/e2e/e2e_setup_test.go +++ b/tests/e2e/e2e_setup_test.go @@ -72,6 +72,7 @@ const ( proposalCommunitySpendFilename = "proposal_community_spend.json" proposalLSMParamUpdateFilename = "proposal_lsm_param_update.json" proposalBlocksPerEpochFilename = "proposal_blocks_per_epoch.json" + proposalFailExpedited = "proposal_fail_expedited.json" // proposalAddConsumerChainFilename = "proposal_add_consumer.json" // proposalRemoveConsumerChainFilename = "proposal_remove_consumer.json" @@ -786,7 +787,8 @@ func (s *IntegrationTestSuite) writeGovCommunitySpendProposal(c *chain, amount s "proposer": "Proposing validator address", "metadata": "Community Pool Spend", "title": "Fund Team!", - "summary": "summary" + "summary": "summary", + "expedited": false } ` propMsgBody := fmt.Sprintf(template, govModuleAddress, recipient, amount.Denom, amount.Amount.String()) @@ -831,7 +833,8 @@ func (s *IntegrationTestSuite) writeLiquidStakingParamsUpdateProposal(c *chain, "metadata": "ipfs://CID", "deposit": "100uatom", "title": "Update LSM Params", - "summary": "e2e-test updating LSM staking params" + "summary": "e2e-test updating LSM staking params", + "expedited": false }` propMsgBody := fmt.Sprintf(template, govAuthority, @@ -875,7 +878,46 @@ func (s *IntegrationTestSuite) writeGovParamChangeProposalBlocksPerEpoch(c *chai "proposer": "sample proposer", "metadata": "sample metadata", "title": "blocks per epoch title", - "summary": "blocks per epoch summary" + "summary": "blocks per epoch summary", + "expedited": false + }` + + propMsgBody := fmt.Sprintf(template, + govAuthority, + blocksPerEpoch, + ) + + err := writeFile(filepath.Join(c.validators[0].configDir(), "config", proposalBlocksPerEpochFilename), []byte(propMsgBody)) + s.Require().NoError(err) +} + +// writeFailingExpeditedProposal writes a governance proposal JSON file. +// The proposal fails because only SoftwareUpgrade and CancelSoftwareUpgrade can be expedited. +func (s *IntegrationTestSuite) writeFailingExpeditedProposal(c *chain, blocksPerEpoch int64) { + template := ` + { + "messages":[ + { + "@type": "/cosmos.gov.v1.MsgExecLegacyContent", + "authority": "%s", + "content": { + "@type": "/cosmos.params.v1beta1.ParameterChangeProposal", + "title": "BlocksPerEpoch", + "description": "change blocks per epoch", + "changes": [{ + "subspace": "provider", + "key": "BlocksPerEpoch", + "value": "\"%d\"" + }] + } + } + ], + "deposit": "100uatom", + "proposer": "sample proposer", + "metadata": "sample metadata", + "title": "blocks per epoch title", + "summary": "blocks per epoch summary", + "expedited": true }` propMsgBody := fmt.Sprintf(template, From 3e1e3afe527168ae7a4c9fee0a8c66a7cfa5c49f Mon Sep 17 00:00:00 2001 From: MSalopek Date: Mon, 17 Jun 2024 20:35:51 +0200 Subject: [PATCH 03/19] deps: add lsm ics version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 69f9436bc27..c084bb37a92 100644 --- a/go.mod +++ b/go.mod @@ -231,7 +231,7 @@ replace ( github.com/cosmos/cosmos-sdk => github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 // Use special ICS v4.1.0-ics-lsm release with support for LSM - github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.2.0-lsm + github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448 // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 diff --git a/go.sum b/go.sum index 8820559555f..5a777248860 100644 --- a/go.sum +++ b/go.sum @@ -411,8 +411,8 @@ github.com/cosmos/ibc-go/v7 v7.5.1 h1:KqS/g7W7EMX1OtOvufS8lWMJibOKpdgtNNZIU6fAgV github.com/cosmos/ibc-go/v7 v7.5.1/go.mod h1:ktFg5GvKOyrGCqTWtW7Grj5uweU4ZapxrNeVS1CLLbo= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v4 v4.2.0-lsm h1:/ET7ibwJ0tWf5SVRDwSVJ0G53b3i89BsOiFaCguUCDE= -github.com/cosmos/interchain-security/v4 v4.2.0-lsm/go.mod h1:xwuWSAibUdRrUK6Lr2r2K5Bf2tHZNXJkeVoZhQhH6s0= +github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448 h1:zYTOq0gesRdYMQ7R7XIho8J43iP8hZonxQzQLWdHw0g= +github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448/go.mod h1:evkSja4AtcafSkz5m2dtoNT4fuU2ogjpU9arrpBLXJs= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= From 18faf103bf840ace2d210d8a90d11a344406dbf8 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Mon, 17 Jun 2024 23:18:51 +0200 Subject: [PATCH 04/19] test: sims, genesis, e2e expedite; export tool; upgrade handler --- ante/gov_expedited_ante.go | 36 +++++--- ante/gov_expedited_ante_test.go | 12 +-- ante/notes.txt | 44 ++++++++++ app/sim_test.go | 4 + app/upgrades/v18/upgrades.go | 10 +++ cmd/gaiad/cmd/testnet_set_local_validator.go | 4 +- tests/e2e/e2e_exec_test.go | 22 ++++- tests/e2e/e2e_gov_test.go | 92 ++++++++++++-------- tests/e2e/e2e_setup_test.go | 44 ++++++++-- tests/e2e/e2e_test.go | 2 + tests/e2e/genesis.go | 4 + tests/e2e/query.go | 17 ++++ types/errors/errors.go | 3 + 13 files changed, 227 insertions(+), 67 deletions(-) create mode 100644 ante/notes.txt diff --git a/ante/gov_expedited_ante.go b/ante/gov_expedited_ante.go index dbf8a537ad9..f9d99962c8e 100644 --- a/ante/gov_expedited_ante.go +++ b/ante/gov_expedited_ante.go @@ -1,13 +1,23 @@ package ante import ( - "fmt" + errorsmod "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + + gaiaerrors "github.com/cosmos/gaia/v18/types/errors" ) +var expeditedPropDecoratorEnabled = true + +// SetExpeditedProposalsEnabled toggles the expedited proposals decorator on/off. +// Should only be used in testing - this is to allow simtests to pass. +func SetExpeditedProposalsEnabled(val bool) { + expeditedPropDecoratorEnabled = val +} + var expeditedPropsWhitelist = map[string]struct{}{ "/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade": {}, "/cosmos.upgrade.v1beta1.MsgCancelUpgrade": {}, @@ -31,14 +41,16 @@ func NewGovExpeditedProposalsDecorator(cdc codec.BinaryCodec) GovExpeditedPropos // Only proposals submitted using "gaiad tx gov submit-proposal" can be expedited. // Legacy proposals submitted using "gaiad tx gov submit-legacy-proposal" cannot be marked as expedited. func (g GovExpeditedProposalsDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { - for _, msg := range tx.GetMsgs() { - prop, ok := msg.(*govv1.MsgSubmitProposal) - if !ok { - continue - } - if prop.Expedited { - if err := g.validateExpeditedGovProp(prop); err != nil { - return ctx, err + if expeditedPropDecoratorEnabled { + for _, msg := range tx.GetMsgs() { + prop, ok := msg.(*govv1.MsgSubmitProposal) + if !ok { + continue + } + if prop.Expedited { + if err := g.validateExpeditedGovProp(prop); err != nil { + return ctx, err + } } } } @@ -53,18 +65,18 @@ func (g GovExpeditedProposalsDecorator) isWhitelisted(msgType string) bool { func (g GovExpeditedProposalsDecorator) validateExpeditedGovProp(prop *govv1.MsgSubmitProposal) error { msgs := prop.GetMessages() if len(msgs) == 0 { - return fmt.Errorf("unsupported expedited proposal") + return gaiaerrors.ErrInvalidExpeditedProposal } for _, message := range msgs { // in case of legacy content submitted using govv1.MsgSubmitProposal if sdkMsg, isLegacy := message.GetCachedValue().(*govv1.MsgExecLegacyContent); isLegacy { if !g.isWhitelisted(sdkMsg.Content.TypeUrl) { - return fmt.Errorf("unsupported expedited proposal type: %s", sdkMsg.Content.TypeUrl) + return errorsmod.Wrapf(gaiaerrors.ErrInvalidExpeditedProposal, "invalid Msg type: %s", sdkMsg.Content.TypeUrl) } continue } if !g.isWhitelisted(message.TypeUrl) { - return fmt.Errorf("unsupported expedited proposal type: %s", message.TypeUrl) + return errorsmod.Wrapf(gaiaerrors.ErrInvalidExpeditedProposal, "invalid Msg type: %s", message.TypeUrl) } } return nil diff --git a/ante/gov_expedited_ante_test.go b/ante/gov_expedited_ante_test.go index c2302910a8f..543fae1c854 100644 --- a/ante/gov_expedited_ante_test.go +++ b/ante/gov_expedited_ante_test.go @@ -3,18 +3,17 @@ package ante_test import ( "testing" - "github.com/cosmos/gaia/v18/app/helpers" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/cosmos/gaia/v18/ante" + "github.com/cosmos/gaia/v18/app/helpers" ) func TestGovExpeditedProposalsDecorator(t *testing.T) { @@ -37,7 +36,8 @@ func TestGovExpeditedProposalsDecorator(t *testing.T) { Name: "upgrade plan-plan", Info: "some text here", Height: 123456789, - }}}, true), + }, + }}, true), }, expectErr: false, }, @@ -216,7 +216,7 @@ func TestGovExpeditedProposalsDecorator(t *testing.T) { func newLegacyTextProp(expedite bool) *govv1.MsgSubmitProposal { testProposal := govv1beta1.NewTextProposal("Proposal", "Test as normal proposal") - msgContent, err := v1.NewLegacyContent(testProposal, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + msgContent, err := govv1.NewLegacyContent(testProposal, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") if err != nil { return nil } @@ -229,7 +229,7 @@ func newLegacyUpgradeProp(expedite bool) *govv1.MsgSubmitProposal { Info: "some text here", Height: 123456789, }) - msgContent, err := v1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + msgContent, err := govv1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") if err != nil { return nil } @@ -256,7 +256,7 @@ func newGovV1BETA1LegacyCancelUpgradeProp() *govv1beta1.MsgSubmitProposal { func newLegacyCancelProp(expedite bool) *govv1.MsgSubmitProposal { prop := upgradetypes.NewCancelSoftwareUpgradeProposal("test legacy upgrade", "test legacy upgrade") - msgContent, err := v1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") + msgContent, err := govv1.NewLegacyContent(prop, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn") if err != nil { return nil } diff --git a/ante/notes.txt b/ante/notes.txt new file mode 100644 index 00000000000..6fab3de7ac9 --- /dev/null +++ b/ante/notes.txt @@ -0,0 +1,44 @@ +gaiad tx gov submit-legacy-proposal software-upgrade v15 \ +--title v15 \ +--deposit 10000000uatom \ +--upgrade-height 200 \ +--upgrade-info "waitfor upgrade" \ +--description upgrade \ +--fees 400uatom \ +--from val \ +--keyring-backend test \ +--chain-id cosmoshub-4 \ +--home ~/provider-coordinator \ +--node tcp://localhost:26657 \ +--generate-only \ +--no-validate + +gaiad tx gov submit-legacy-proposal cancel-software-upgrade v15 \ +--title v15 \ +--deposit 10000000uatom \ +--description upgrade \ +--fees 400uatom \ +--from val \ +--keyring-backend test \ +--chain-id cosmoshub-4 \ +--home ~/provider-coordinator \ +--node tcp://localhost:26657 \ +--generate-only + +gaiad tx gov submit-legacy-proposal cancel-software-upgrade \ +--title v15 \ +--deposit 10000000uatom \ +--description upgrade \ +--fees 400uatom \ +--from val \ +--keyring-backend test \ +--chain-id cosmoshub-4 \ +--home ~/provider-coordinator \ +--generate-only + +gaiad tx gov submit-proposal ./draft_proposal.json \ +--generate-only \ +--from val \ +--keyring-backend test \ +--chain-id cosmoshub-4 \ +--home ~/provider-coordinator \ No newline at end of file diff --git a/app/sim_test.go b/app/sim_test.go index fb72ce7bf61..c753729807d 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -104,6 +104,10 @@ func TestAppStateDeterminism(t *testing.T) { // due to the minimum staked tokens required to submit a vote ante.SetMinStakedTokens(math.LegacyZeroDec()) + // NOTE: setting to zero to avoid failing the simulation + // gaia ante allows only certain proposals to be expedited - the simulation doesn't know about this + ante.SetExpeditedProposalsEnabled(false) + fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, diff --git a/app/upgrades/v18/upgrades.go b/app/upgrades/v18/upgrades.go index 4a841a115d9..a650998af5d 100644 --- a/app/upgrades/v18/upgrades.go +++ b/app/upgrades/v18/upgrades.go @@ -1,8 +1,11 @@ package v18 import ( + "time" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/cosmos/gaia/v18/app/keepers" @@ -21,6 +24,13 @@ func CreateUpgradeHandler( return vm, err } + govParams := keepers.GovKeeper.GetParams(ctx) + + expeditedPeriod := 24 * 7 * time.Hour // 7 days + govParams.ExpeditedVotingPeriod = &expeditedPeriod + govParams.ExpeditedThreshold = govv1.DefaultExpeditedThreshold.String() // 66.7% + govParams.ExpeditedMinDeposit = govParams.MinDeposit // full deposit amount is required + ctx.Logger().Info("Upgrade v18 complete") return vm, nil } diff --git a/cmd/gaiad/cmd/testnet_set_local_validator.go b/cmd/gaiad/cmd/testnet_set_local_validator.go index 8153a789e66..6fe3a26196d 100644 --- a/cmd/gaiad/cmd/testnet_set_local_validator.go +++ b/cmd/gaiad/cmd/testnet_set_local_validator.go @@ -253,10 +253,12 @@ func updateApplicationState(app *gaia.GaiaApp, args valArgs) error { app.SlashingKeeper.SetValidatorSigningInfo(appCtx, newConsAddr, newValidatorSigningInfo) shortVotingPeriod := time.Second * 20 + expeditedVotingPeriod := time.Second * 10 params := app.GovKeeper.GetParams(appCtx) params.VotingPeriod = &shortVotingPeriod + params.ExpeditedVotingPeriod = &expeditedVotingPeriod app.GovKeeper.SetParams(appCtx, params) - appCtx.Logger().Info("Updated governance voting period", "voting_period", shortVotingPeriod) + appCtx.Logger().Info("Updated governance voting period", "voting_period", shortVotingPeriod, "expedited_voting_period", expeditedVotingPeriod) // BANK defaultCoins := sdk.NewCoins(sdk.NewInt64Coin(app.StakingKeeper.BondDenom(appCtx), 1000000000000)) diff --git a/tests/e2e/e2e_exec_test.go b/tests/e2e/e2e_exec_test.go index 14a71ab8130..c30855880f7 100644 --- a/tests/e2e/e2e_exec_test.go +++ b/tests/e2e/e2e_exec_test.go @@ -397,9 +397,13 @@ func (s *IntegrationTestSuite) execDistributionFundCommunityPool(c *chain, valId s.T().Logf("Successfully funded community pool") } -func (s *IntegrationTestSuite) runGovExec(c *chain, valIdx int, submitterAddr, govCommand string, proposalFlags []string, fees string) { +func (s *IntegrationTestSuite) runGovExec(c *chain, valIdx int, submitterAddr, govCommand string, proposalFlags []string, fees string, validationFunc func([]byte, []byte) bool) { ctx, cancel := context.WithTimeout(context.Background(), time.Minute) defer cancel() + validateResponse := s.defaultExecValidation(c, valIdx) + if validationFunc != nil { + validateResponse = validationFunc + } gaiaCommand := []string{ gaiadBinary, @@ -420,7 +424,7 @@ func (s *IntegrationTestSuite) runGovExec(c *chain, valIdx int, submitterAddr, g gaiaCommand = concatFlags(gaiaCommand, proposalFlags, generalFlags) s.T().Logf("Executing gaiad tx gov %s on chain %s", govCommand, c.id) - s.executeGaiaTxCommand(ctx, c, gaiaCommand, valIdx, s.defaultExecValidation(c, valIdx)) + s.executeGaiaTxCommand(ctx, c, gaiaCommand, valIdx, validateResponse) s.T().Logf("Successfully executed %s", govCommand) } @@ -806,6 +810,20 @@ func (s *IntegrationTestSuite) defaultExecValidation(chain *chain, valIdx int) f } } +func (s *IntegrationTestSuite) expectTxSubmitError(expectErrString string) func([]byte, []byte) bool { + return func(stdOut []byte, stdErr []byte) bool { + var txResp sdk.TxResponse + if err := cdc.UnmarshalJSON(stdOut, &txResp); err != nil { + fmt.Println("## have ERR", err) + return false + } + if strings.Contains(txResp.String(), expectErrString) || txResp.Code == 0 { + return true + } + return false + } +} + func (s *IntegrationTestSuite) executeValidatorBond(c *chain, valIdx int, valOperAddress, delegatorAddr, home, delegateFees string) { ctx, cancel := context.WithTimeout(context.Background(), time.Minute) defer cancel() diff --git a/tests/e2e/e2e_gov_test.go b/tests/e2e/e2e_gov_test.go index 18b9c1acb3f..5f10c052294 100644 --- a/tests/e2e/e2e_gov_test.go +++ b/tests/e2e/e2e_gov_test.go @@ -8,6 +8,7 @@ import ( providertypes "github.com/cosmos/interchain-security/v4/x/ccv/provider/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types/proposal" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" @@ -221,7 +222,7 @@ func (s *IntegrationTestSuite) verifyChainPassesUpgradeHeight(c *chain, valIdx, func (s *IntegrationTestSuite) submitGovCommand(chainAAPIEndpoint, sender string, proposalID int, govCommand string, proposalFlags []string, expectedSuccessStatus govtypesv1beta1.ProposalStatus) { s.Run(fmt.Sprintf("Running tx gov %s", govCommand), func() { - s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String()) + s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String(), nil) s.Require().Eventually( func() bool { @@ -235,19 +236,10 @@ func (s *IntegrationTestSuite) submitGovCommand(chainAAPIEndpoint, sender string }) } -func (s *IntegrationTestSuite) submitGovCommandExpectingFailure(chainAAPIEndpoint, sender string, proposalID int, govCommand string, proposalFlags []string) { - s.Run(fmt.Sprintf("Running tx gov %s", govCommand), func() { - s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String()) - - s.Require().Eventually( - func() bool { - _, err := queryGovProposal(chainAAPIEndpoint, proposalID) - s.Require().Error(err) - return err != nil - }, - 15*time.Second, - 5*time.Second, - ) +func (s *IntegrationTestSuite) submitGovCommandExpectingFailure(sender string, govCommand string, proposalFlags []string) { + s.Run(fmt.Sprintf("Running failing expedited tx gov %s -- expecting error", govCommand), func() { + // runGovExec should return an error -- the Tx fails at the ante handler + s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String(), s.expectTxSubmitError("unsupported expedited proposal type")) }) } @@ -261,7 +253,7 @@ func (s *IntegrationTestSuite) testSetBlocksPerEpoch() { s.Require().Eventually( func() bool { blocksPerEpoch, err := queryBlocksPerEpoch(chainEndpoint) - s.T().Logf("After gov new global fee proposal: %d", gas) + s.T().Logf("After BlocksPerEpoch proposal: %d", gas) s.Require().NoError(err) s.Require().Equal(blocksPerEpoch, defaultBlocksPerEpoch) @@ -299,35 +291,59 @@ func (s *IntegrationTestSuite) testSetBlocksPerEpoch() { ) } -// testFailExpediteProposal tests that expediting a ParamChange proposal fails. -func (s *IntegrationTestSuite) testFailExpediteProposal() { - chainEndpoint := fmt.Sprintf("http://%s", s.valResources[s.chainA.id][0].GetHostPort("1317/tcp")) - +// ExpeditedProposalRejected tests that expediting a ParamChange proposal fails. +func (s *IntegrationTestSuite) ExpeditedProposalRejected() { defaultBlocksPerEpoch := providertypes.DefaultParams().BlocksPerEpoch - // assert that initially, the actual blocks per epoch are the default blocks per epoch - s.Require().Eventually( - func() bool { - blocksPerEpoch, err := queryBlocksPerEpoch(chainEndpoint) - s.T().Logf("After gov new global fee proposal: %d", gas) - s.Require().NoError(err) - - s.Require().Equal(blocksPerEpoch, defaultBlocksPerEpoch) - return true - }, - 15*time.Second, - 5*time.Second, - ) - // attempt to change but nothing should happen -> proposal fails at ante handler - expectedBlocksPerEpoch := defaultBlocksPerEpoch + 1 + expectedBlocksPerEpoch := defaultBlocksPerEpoch + 100 s.writeFailingExpeditedProposal(s.chainA, expectedBlocksPerEpoch) validatorAAddr, _ := s.chainA.validators[0].keyInfo.GetAddress() + submitGovFlags := []string{configFile(proposalFailExpedited)} + + s.T().Logf("Submitting, deposit and vote Gov Proposal: Change BlocksPerEpoch parameter - expecting to fail") + s.submitGovCommandExpectingFailure(validatorAAddr.String(), "submit-proposal", submitGovFlags) +} + +// MsgSoftwareUpgrade can be expedited but it can only be submitted using "tx gov submit-proposal" command. +// Messages submitted using "tx gov submit-legacy-proposal" command cannot be expedited.// submit but vote no so that the proposal is not passed +func (s *IntegrationTestSuite) GovSoftwareUpgradeExpedited() { + chainAAPIEndpoint := fmt.Sprintf("http://%s", s.valResources[s.chainA.id][0].GetHostPort("1317/tcp")) + senderAddress, _ := s.chainA.validators[0].keyInfo.GetAddress() + sender := senderAddress.String() + proposalCounter++ - submitGovFlags := []string{configFile(proposalBlocksPerEpochFilename)} + s.writeExpeditedSoftwareUpgradeProp(s.chainA) + submitGovFlags := []string{configFile(proposalExpeditedSoftwareUpgrade)} - s.T().Logf("Proposal number: %d", proposalCounter) - s.T().Logf("Submitting, deposit and vote Gov Proposal: Change BlocksPerEpoch parameter [ EXPEDITED - MUST FAIL ]") - s.submitGovCommandExpectingFailure(chainEndpoint, validatorAAddr.String(), proposalCounter, paramtypes.ProposalTypeChange, submitGovFlags) + depositGovFlags := []string{strconv.Itoa(proposalCounter), depositAmount.String()} + voteGovFlags := []string{strconv.Itoa(proposalCounter), "yes=0.1,no=0.8,abstain=0.05,no_with_veto=0.05"} + + s.Run(fmt.Sprintf("Running expedited tx gov %s", "submit-proposal"), func() { + s.submitGovCommand(chainAAPIEndpoint, sender, proposalCounter, "submit-proposal", submitGovFlags, govtypesv1beta1.StatusDepositPeriod) + + s.Require().Eventually( + func() bool { + proposal, err := queryGovProposalV1(chainAAPIEndpoint, proposalCounter) + s.Require().NoError(err) + return proposal.Proposal.Expedited && proposal.GetProposal().Status == govtypesv1.ProposalStatus_PROPOSAL_STATUS_DEPOSIT_PERIOD + }, + 15*time.Second, + 5*time.Second, + ) + s.submitGovCommand(chainAAPIEndpoint, sender, proposalCounter, "deposit", depositGovFlags, govtypesv1beta1.StatusVotingPeriod) + s.submitGovCommand(chainAAPIEndpoint, sender, proposalCounter, "weighted-vote", voteGovFlags, govtypesv1beta1.StatusRejected) // voting no on prop + + // confirm that the proposal was moved from expedited + s.Require().Eventually( + func() bool { + proposal, err := queryGovProposalV1(chainAAPIEndpoint, proposalCounter) + s.Require().NoError(err) + return proposal.Proposal.Expedited == false + }, + 15*time.Second, + 5*time.Second, + ) + }) } diff --git a/tests/e2e/e2e_setup_test.go b/tests/e2e/e2e_setup_test.go index 9b2a827e638..0a2240cd2a7 100644 --- a/tests/e2e/e2e_setup_test.go +++ b/tests/e2e/e2e_setup_test.go @@ -66,13 +66,14 @@ const ( numberOfEvidences = 10 slashingShares int64 = 10000 - proposalGlobalFeeFilename = "proposal_globalfee.json" - proposalBypassMsgFilename = "proposal_bypass_msg.json" - proposalMaxTotalBypassFilename = "proposal_max_total_bypass.json" - proposalCommunitySpendFilename = "proposal_community_spend.json" - proposalLSMParamUpdateFilename = "proposal_lsm_param_update.json" - proposalBlocksPerEpochFilename = "proposal_blocks_per_epoch.json" - proposalFailExpedited = "proposal_fail_expedited.json" + proposalGlobalFeeFilename = "proposal_globalfee.json" + proposalBypassMsgFilename = "proposal_bypass_msg.json" + proposalMaxTotalBypassFilename = "proposal_max_total_bypass.json" + proposalCommunitySpendFilename = "proposal_community_spend.json" + proposalLSMParamUpdateFilename = "proposal_lsm_param_update.json" + proposalBlocksPerEpochFilename = "proposal_blocks_per_epoch.json" + proposalFailExpedited = "proposal_fail_expedited.json" + proposalExpeditedSoftwareUpgrade = "proposal_expedited_software_upgrade.json" // proposalAddConsumerChainFilename = "proposal_add_consumer.json" // proposalRemoveConsumerChainFilename = "proposal_remove_consumer.json" @@ -925,7 +926,34 @@ func (s *IntegrationTestSuite) writeFailingExpeditedProposal(c *chain, blocksPer blocksPerEpoch, ) - err := writeFile(filepath.Join(c.validators[0].configDir(), "config", proposalBlocksPerEpochFilename), []byte(propMsgBody)) + err := writeFile(filepath.Join(c.validators[0].configDir(), "config", proposalFailExpedited), []byte(propMsgBody)) + s.Require().NoError(err) +} + +// MsgSoftwareUpgrade can be expedited but it can only be submitted using "tx gov submit-proposal" command. +// Messages submitted using "tx gov submit-legacy-proposal" command cannot be expedited. +func (s *IntegrationTestSuite) writeExpeditedSoftwareUpgradeProp(c *chain) { + body := `{ + "messages": [ + { + "@type": "/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade", + "authority": "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + "plan": { + "name": "test-expedited-upgrade", + "height": "123456789", + "info": "test", + "upgraded_client_state": null + } + } + ], + "metadata": "ipfs://CID", + "deposit": "100uatom", + "title": "title", + "summary": "test", + "expedited": true +}` + + err := writeFile(filepath.Join(c.validators[0].configDir(), "config", proposalExpeditedSoftwareUpgrade), []byte(body)) s.Require().NoError(err) } diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 92feda94a2f..8d87db28424 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -83,6 +83,8 @@ func (s *IntegrationTestSuite) TestGov() { s.AddRemoveConsumerChain() s.testSetBlocksPerEpoch() + s.ExpeditedProposalRejected() + s.GovSoftwareUpgradeExpedited() } func (s *IntegrationTestSuite) TestIBC() { diff --git a/tests/e2e/genesis.go b/tests/e2e/genesis.go index 02d8f05df9f..119742546d1 100644 --- a/tests/e2e/genesis.go +++ b/tests/e2e/genesis.go @@ -188,6 +188,7 @@ func modifyGenesis(path, moniker, amountStr string, addrAll []sdk.AccAddress, gl maxDepositPeriod := 10 * time.Minute votingPeriod := 15 * time.Second + expeditedVoting := 13 * time.Second govStateLegacy := govlegacytypes.NewGenesisState(1, govlegacytypes.NewDepositParams(sdk.NewCoins(sdk.NewCoin(denom, amnt)), maxDepositPeriod), @@ -205,6 +206,9 @@ func modifyGenesis(path, moniker, amountStr string, addrAll []sdk.AccAddress, gl return fmt.Errorf("failed to migrate v1beta1 gov genesis state to v4: %w", err) } + govStateV4.Params.ExpeditedVotingPeriod = &expeditedVoting + govStateV4.Params.ExpeditedMinDeposit = sdk.NewCoins(sdk.NewCoin(denom, amnt)) // same as normal for testing + govGenStateBz, err := cdc.MarshalJSON(govStateV4) if err != nil { return fmt.Errorf("failed to marshal gov genesis state: %w", err) diff --git a/tests/e2e/query.go b/tests/e2e/query.go index d45f7598025..b6f8131c1fb 100644 --- a/tests/e2e/query.go +++ b/tests/e2e/query.go @@ -18,6 +18,7 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types" evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -210,6 +211,22 @@ func queryGovProposal(endpoint string, proposalID int) (govtypesv1beta1.QueryPro return govProposalResp, nil } +func queryGovProposalV1(endpoint string, proposalID int) (govtypesv1.QueryProposalResponse, error) { + var govProposalResp govtypesv1.QueryProposalResponse + + path := fmt.Sprintf("%s/cosmos/gov/v1/proposals/%d", endpoint, proposalID) + + body, err := httpGet(path) + if err != nil { + return govProposalResp, fmt.Errorf("failed to execute HTTP request: %w", err) + } + if err := cdc.UnmarshalJSON(body, &govProposalResp); err != nil { + return govProposalResp, err + } + + return govProposalResp, nil +} + func queryAccount(endpoint, address string) (acc authtypes.AccountI, err error) { var res authtypes.QueryAccountResponse resp, err := http.Get(fmt.Sprintf("%s/cosmos/auth/v1beta1/accounts/%s", endpoint, address)) diff --git a/types/errors/errors.go b/types/errors/errors.go index edcb2089fab..0b1962dee07 100644 --- a/types/errors/errors.go +++ b/types/errors/errors.go @@ -34,4 +34,7 @@ var ( // ErrInsufficientStake is used when the account has insufficient staked tokens. ErrInsufficientStake = errorsmod.Register(codespace, 9, "insufficient stake") + + // ErrInvalidExpeditedProposal is used when an expedite proposal is submitted for an unsupported proposal type. + ErrInvalidExpeditedProposal = errorsmod.Register(codespace, 10, "unsupported expedited proposal type") ) From fc3af49f21341ba12c165b919d2c6baf67e57a51 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Mon, 17 Jun 2024 23:29:32 +0200 Subject: [PATCH 05/19] rm extra files --- ante/notes.txt | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 ante/notes.txt diff --git a/ante/notes.txt b/ante/notes.txt deleted file mode 100644 index 6fab3de7ac9..00000000000 --- a/ante/notes.txt +++ /dev/null @@ -1,44 +0,0 @@ -gaiad tx gov submit-legacy-proposal software-upgrade v15 \ ---title v15 \ ---deposit 10000000uatom \ ---upgrade-height 200 \ ---upgrade-info "waitfor upgrade" \ ---description upgrade \ ---fees 400uatom \ ---from val \ ---keyring-backend test \ ---chain-id cosmoshub-4 \ ---home ~/provider-coordinator \ ---node tcp://localhost:26657 \ ---generate-only \ ---no-validate - -gaiad tx gov submit-legacy-proposal cancel-software-upgrade v15 \ ---title v15 \ ---deposit 10000000uatom \ ---description upgrade \ ---fees 400uatom \ ---from val \ ---keyring-backend test \ ---chain-id cosmoshub-4 \ ---home ~/provider-coordinator \ ---node tcp://localhost:26657 \ ---generate-only - -gaiad tx gov submit-legacy-proposal cancel-software-upgrade \ ---title v15 \ ---deposit 10000000uatom \ ---description upgrade \ ---fees 400uatom \ ---from val \ ---keyring-backend test \ ---chain-id cosmoshub-4 \ ---home ~/provider-coordinator \ ---generate-only - -gaiad tx gov submit-proposal ./draft_proposal.json \ ---generate-only \ ---from val \ ---keyring-backend test \ ---chain-id cosmoshub-4 \ ---home ~/provider-coordinator \ No newline at end of file From 0c916998b1083b97a4cf4bbca3bad5282e7b14f7 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Tue, 18 Jun 2024 00:33:30 +0200 Subject: [PATCH 06/19] tests: nits --- tests/e2e/e2e_exec_test.go | 3 +-- tests/e2e/e2e_gov_test.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/e2e/e2e_exec_test.go b/tests/e2e/e2e_exec_test.go index c30855880f7..20a1b50cca4 100644 --- a/tests/e2e/e2e_exec_test.go +++ b/tests/e2e/e2e_exec_test.go @@ -814,10 +814,9 @@ func (s *IntegrationTestSuite) expectTxSubmitError(expectErrString string) func( return func(stdOut []byte, stdErr []byte) bool { var txResp sdk.TxResponse if err := cdc.UnmarshalJSON(stdOut, &txResp); err != nil { - fmt.Println("## have ERR", err) return false } - if strings.Contains(txResp.String(), expectErrString) || txResp.Code == 0 { + if strings.Contains(txResp.String(), expectErrString) { return true } return false diff --git a/tests/e2e/e2e_gov_test.go b/tests/e2e/e2e_gov_test.go index 5f10c052294..fca30ec7908 100644 --- a/tests/e2e/e2e_gov_test.go +++ b/tests/e2e/e2e_gov_test.go @@ -238,7 +238,7 @@ func (s *IntegrationTestSuite) submitGovCommand(chainAAPIEndpoint, sender string func (s *IntegrationTestSuite) submitGovCommandExpectingFailure(sender string, govCommand string, proposalFlags []string) { s.Run(fmt.Sprintf("Running failing expedited tx gov %s -- expecting error", govCommand), func() { - // runGovExec should return an error -- the Tx fails at the ante handler + // should return an error -- the Tx fails at the ante handler s.runGovExec(s.chainA, 0, sender, govCommand, proposalFlags, standardFees.String(), s.expectTxSubmitError("unsupported expedited proposal type")) }) } From da8bd96835112551d58ecab955649efaa2014a8a Mon Sep 17 00:00:00 2001 From: MSalopek Date: Tue, 18 Jun 2024 11:01:06 +0200 Subject: [PATCH 07/19] add some log lines to check test state --- tests/e2e/e2e_exec_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/e2e/e2e_exec_test.go b/tests/e2e/e2e_exec_test.go index 20a1b50cca4..7c5f097bb52 100644 --- a/tests/e2e/e2e_exec_test.go +++ b/tests/e2e/e2e_exec_test.go @@ -814,11 +814,14 @@ func (s *IntegrationTestSuite) expectTxSubmitError(expectErrString string) func( return func(stdOut []byte, stdErr []byte) bool { var txResp sdk.TxResponse if err := cdc.UnmarshalJSON(stdOut, &txResp); err != nil { + fmt.Println("---- invalid tx response ----", err) return false } - if strings.Contains(txResp.String(), expectErrString) { + fmt.Println("---- have tx response ----", txResp.String(), txResp.RawLog) + if strings.Contains(txResp.RawLog, expectErrString) { return true } + fmt.Println("---- invalid tx response ----", "error not found in tx response", txResp.String()) return false } } From faaa70177133c5849d469c2efdd3d4a0eb857188 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Tue, 18 Jun 2024 11:39:41 +0200 Subject: [PATCH 08/19] rm some log lines --- tests/e2e/e2e_exec_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/e2e/e2e_exec_test.go b/tests/e2e/e2e_exec_test.go index 7c5f097bb52..87ae2b3e546 100644 --- a/tests/e2e/e2e_exec_test.go +++ b/tests/e2e/e2e_exec_test.go @@ -814,14 +814,11 @@ func (s *IntegrationTestSuite) expectTxSubmitError(expectErrString string) func( return func(stdOut []byte, stdErr []byte) bool { var txResp sdk.TxResponse if err := cdc.UnmarshalJSON(stdOut, &txResp); err != nil { - fmt.Println("---- invalid tx response ----", err) return false } - fmt.Println("---- have tx response ----", txResp.String(), txResp.RawLog) if strings.Contains(txResp.RawLog, expectErrString) { return true } - fmt.Println("---- invalid tx response ----", "error not found in tx response", txResp.String()) return false } } From 689e4bdd3e301072838162be3d7267fc917c28c0 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Tue, 18 Jun 2024 11:40:42 +0200 Subject: [PATCH 09/19] set gov params in upgrade --- app/upgrades/v18/upgrades.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/upgrades/v18/upgrades.go b/app/upgrades/v18/upgrades.go index a650998af5d..bb68d39e862 100644 --- a/app/upgrades/v18/upgrades.go +++ b/app/upgrades/v18/upgrades.go @@ -24,12 +24,12 @@ func CreateUpgradeHandler( return vm, err } - govParams := keepers.GovKeeper.GetParams(ctx) - expeditedPeriod := 24 * 7 * time.Hour // 7 days + govParams := keepers.GovKeeper.GetParams(ctx) govParams.ExpeditedVotingPeriod = &expeditedPeriod govParams.ExpeditedThreshold = govv1.DefaultExpeditedThreshold.String() // 66.7% govParams.ExpeditedMinDeposit = govParams.MinDeposit // full deposit amount is required + keepers.GovKeeper.SetParams(ctx, govParams) ctx.Logger().Info("Upgrade v18 complete") return vm, nil From ee443540802d0eb0a5d741e77556cd3ccce1eedf Mon Sep 17 00:00:00 2001 From: MSalopek Date: Tue, 18 Jun 2024 12:33:07 +0200 Subject: [PATCH 10/19] make lint pass --- app/upgrades/v18/upgrades.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/upgrades/v18/upgrades.go b/app/upgrades/v18/upgrades.go index bb68d39e862..67e460e021c 100644 --- a/app/upgrades/v18/upgrades.go +++ b/app/upgrades/v18/upgrades.go @@ -3,6 +3,8 @@ package v18 import ( "time" + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -29,7 +31,10 @@ func CreateUpgradeHandler( govParams.ExpeditedVotingPeriod = &expeditedPeriod govParams.ExpeditedThreshold = govv1.DefaultExpeditedThreshold.String() // 66.7% govParams.ExpeditedMinDeposit = govParams.MinDeposit // full deposit amount is required - keepers.GovKeeper.SetParams(ctx, govParams) + err = keepers.GovKeeper.SetParams(ctx, govParams) + if err != nil { + return vm, errorsmod.Wrapf(err, "unable to set gov params") + } ctx.Logger().Info("Upgrade v18 complete") return vm, nil From c9df84f7d510a79326f32747939a6530d005ea38 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Wed, 19 Jun 2024 07:59:24 +0200 Subject: [PATCH 11/19] wip: use cosmwasm fork with expedited props handling --- go.mod | 2 ++ go.sum | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index ba4bd784922..afd27ca29b1 100644 --- a/go.mod +++ b/go.mod @@ -255,3 +255,5 @@ replace ( // x/exp had a breaking change in further commits golang.org/x/exp => golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb ) + +replace github.com/CosmWasm/wasmd => github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05 diff --git a/go.sum b/go.sum index 465bfe73c97..dc42bff2ed3 100644 --- a/go.sum +++ b/go.sum @@ -557,8 +557,6 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmd v0.45.0 h1:9zBqrturKJwC2kVsfHvbrA++EN0PS7UTXCffCGbg6JI= -github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzTADag944= github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -1367,6 +1365,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05 h1:bp6wQnTGGWyWaJJkJoZBpjH7+EqvBe6fEo/NrPEF1rE= +github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= From d34608d883cf43b17fd9438fba1ed8951251c8bb Mon Sep 17 00:00:00 2001 From: MSalopek Date: Thu, 20 Jun 2024 15:05:23 +0200 Subject: [PATCH 12/19] chore: change wasmd version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index afd27ca29b1..eb3d85ff80c 100644 --- a/go.mod +++ b/go.mod @@ -256,4 +256,4 @@ replace ( golang.org/x/exp => golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb ) -replace github.com/CosmWasm/wasmd => github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05 +replace github.com/CosmWasm/wasmd => github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625 diff --git a/go.sum b/go.sum index dc42bff2ed3..f634553ee8a 100644 --- a/go.sum +++ b/go.sum @@ -1211,6 +1211,8 @@ github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mq github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 h1:Vkk5RywGiqQsR68T9FwxTw5JQ2JstfpRlMiOP0j2+Tk= github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413/go.mod h1:9sL4HXReNswcuwsPO33TACJmc+xkxYwHnmcL7rZgu1c= +github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625 h1:S1zJmfpXC/VGOBYdXO1KAN9tfPQCRfx1KH7n/b89DGI= +github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -1365,8 +1367,6 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05 h1:bp6wQnTGGWyWaJJkJoZBpjH7+EqvBe6fEo/NrPEF1rE= -github.com/msalopek/wasmd v0.0.0-20240619055316-fdb5c3097b05/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= From be9e32cdbd985ac32f6316c45da05fd37a9b2db2 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Thu, 20 Jun 2024 17:16:58 +0200 Subject: [PATCH 13/19] chore: connect wasmd-lsm and ics-lsm --- go.mod | 8 ++++---- go.sum | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index eb3d85ff80c..c253a7daf40 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,11 @@ require ( github.com/Stride-Labs/ibc-rate-limiting v1.0.1 github.com/cometbft/cometbft v0.37.6 github.com/cometbft/cometbft-db v0.11.0 - github.com/cosmos/cosmos-sdk v0.47.12 + github.com/cosmos/cosmos-sdk v0.47.16-ics-lsm github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 - github.com/cosmos/ibc-go/v7 v7.5.1 + github.com/cosmos/ibc-go/v7 v7.6.0 github.com/cosmos/interchain-security/v4 v4.2.0 github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.1 @@ -238,7 +238,7 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.1 // Use special ICS v4.1.0-ics-lsm release with support for LSM - github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448 + github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0 github.com/cosmos/ledger-cosmos-go => github.com/cosmos/ledger-cosmos-go v0.12.4 @@ -256,4 +256,4 @@ replace ( golang.org/x/exp => golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb ) -replace github.com/CosmWasm/wasmd => github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625 +replace github.com/CosmWasm/wasmd => github.com/informalsystems/wasmd v0.45.0-lsm diff --git a/go.sum b/go.sum index f634553ee8a..6c2fc3363b2 100644 --- a/go.sum +++ b/go.sum @@ -762,12 +762,12 @@ github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 h1:MZGDMETv72suFpTAD6VPGqSIm1FJcChtk2HmVh9D+Bo= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= -github.com/cosmos/ibc-go/v7 v7.5.1 h1:KqS/g7W7EMX1OtOvufS8lWMJibOKpdgtNNZIU6fAgVU= -github.com/cosmos/ibc-go/v7 v7.5.1/go.mod h1:ktFg5GvKOyrGCqTWtW7Grj5uweU4ZapxrNeVS1CLLbo= +github.com/cosmos/ibc-go/v7 v7.6.0 h1:S1G5hcIVe9go+jQV6F9+I9yy+hylbJeLiVHUmktQNrM= +github.com/cosmos/ibc-go/v7 v7.6.0/go.mod h1:LifBA7JHRHl95ujjHIaBEHmUqy2qCGyqDCXB7qmAsZk= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448 h1:zYTOq0gesRdYMQ7R7XIho8J43iP8hZonxQzQLWdHw0g= -github.com/cosmos/interchain-security/v4 v4.2.0-rc0.0.20240617183411-a333255ef448/go.mod h1:evkSja4AtcafSkz5m2dtoNT4fuU2ogjpU9arrpBLXJs= +github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0 h1:osHyQRgBaN0L6uv00Rlm/I6VlvxWvjZ/uiPbTT5Pv+w= +github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0/go.mod h1:oheLfOdj+k41NwfDZemQTdMYO7j/T+HQWZ1QHQIN/YY= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= @@ -1211,8 +1211,8 @@ github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mq github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 h1:Vkk5RywGiqQsR68T9FwxTw5JQ2JstfpRlMiOP0j2+Tk= github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413/go.mod h1:9sL4HXReNswcuwsPO33TACJmc+xkxYwHnmcL7rZgu1c= -github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625 h1:S1zJmfpXC/VGOBYdXO1KAN9tfPQCRfx1KH7n/b89DGI= -github.com/informalsystems/wasmd v0.45.1-0.20240620130222-a7ea203e1625/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= +github.com/informalsystems/wasmd v0.45.0-lsm h1:sRldfkkUjZRIOV9+nNw34dS+wrTX6ShhQZd9WqcI+IQ= +github.com/informalsystems/wasmd v0.45.0-lsm/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= From bad1743c0842adf0ca85390d351b03f8781ba0f1 Mon Sep 17 00:00:00 2001 From: mpoke Date: Fri, 21 Jun 2024 09:10:30 +0200 Subject: [PATCH 14/19] add changelog entries --- .changelog/unreleased/dependencies/3109-bump-ibc.md | 3 --- .changelog/unreleased/dependencies/3154-bump-ibc.md | 3 +++ .changelog/unreleased/dependencies/3154-bump-sdk.md | 4 ++++ .changelog/unreleased/state-breaking/3109-bump-ibc.md | 3 --- .changelog/unreleased/state-breaking/3154-bump-ibc.md | 3 +++ .changelog/unreleased/state-breaking/3154-bump-sdk.md | 4 ++++ 6 files changed, 14 insertions(+), 6 deletions(-) delete mode 100644 .changelog/unreleased/dependencies/3109-bump-ibc.md create mode 100644 .changelog/unreleased/dependencies/3154-bump-ibc.md create mode 100644 .changelog/unreleased/dependencies/3154-bump-sdk.md delete mode 100644 .changelog/unreleased/state-breaking/3109-bump-ibc.md create mode 100644 .changelog/unreleased/state-breaking/3154-bump-ibc.md create mode 100644 .changelog/unreleased/state-breaking/3154-bump-sdk.md diff --git a/.changelog/unreleased/dependencies/3109-bump-ibc.md b/.changelog/unreleased/dependencies/3109-bump-ibc.md deleted file mode 100644 index 4b48b4c450d..00000000000 --- a/.changelog/unreleased/dependencies/3109-bump-ibc.md +++ /dev/null @@ -1,3 +0,0 @@ -- Bump [ibc-go](https://github.com/cosmos/ibc-go) to - [v7.5.1](https://github.com/cosmos/ibc-go/releases/tag/v7.5.1) - ([\#3109](https://github.com/cosmos/gaia/pull/3109) and [\#3115](https://github.com/cosmos/gaia/pull/3115)) \ No newline at end of file diff --git a/.changelog/unreleased/dependencies/3154-bump-ibc.md b/.changelog/unreleased/dependencies/3154-bump-ibc.md new file mode 100644 index 00000000000..22d07f7e641 --- /dev/null +++ b/.changelog/unreleased/dependencies/3154-bump-ibc.md @@ -0,0 +1,3 @@ +- Bump [ibc-go](https://github.com/cosmos/ibc-go) to + [v7.6.0](https://github.com/cosmos/ibc-go/releases/tag/v7.6.0) + ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file diff --git a/.changelog/unreleased/dependencies/3154-bump-sdk.md b/.changelog/unreleased/dependencies/3154-bump-sdk.md new file mode 100644 index 00000000000..bef893e603f --- /dev/null +++ b/.changelog/unreleased/dependencies/3154-bump-sdk.md @@ -0,0 +1,4 @@ +- Bump [cosmos-sdk](https://github.com/cosmos/cosmos-sdk) to + [v0.47.16-ics-lsm](https://github.com/cosmos/cosmos-sdk/tree/v0.47.16-ics-lsm). + This is a special cosmos-sdk branch with support for both ICS and LSM. + ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3109-bump-ibc.md b/.changelog/unreleased/state-breaking/3109-bump-ibc.md deleted file mode 100644 index e68c9af6f70..00000000000 --- a/.changelog/unreleased/state-breaking/3109-bump-ibc.md +++ /dev/null @@ -1,3 +0,0 @@ -- Bump [ibc-go](https://github.com/cosmos/ibc-go) to - [v7.5.0](https://github.com/cosmos/ibc-go/releases/tag/v7.5.0) - ([\#3109](https://github.com/cosmos/gaia/pull/3109)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3154-bump-ibc.md b/.changelog/unreleased/state-breaking/3154-bump-ibc.md new file mode 100644 index 00000000000..22d07f7e641 --- /dev/null +++ b/.changelog/unreleased/state-breaking/3154-bump-ibc.md @@ -0,0 +1,3 @@ +- Bump [ibc-go](https://github.com/cosmos/ibc-go) to + [v7.6.0](https://github.com/cosmos/ibc-go/releases/tag/v7.6.0) + ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3154-bump-sdk.md b/.changelog/unreleased/state-breaking/3154-bump-sdk.md new file mode 100644 index 00000000000..bef893e603f --- /dev/null +++ b/.changelog/unreleased/state-breaking/3154-bump-sdk.md @@ -0,0 +1,4 @@ +- Bump [cosmos-sdk](https://github.com/cosmos/cosmos-sdk) to + [v0.47.16-ics-lsm](https://github.com/cosmos/cosmos-sdk/tree/v0.47.16-ics-lsm). + This is a special cosmos-sdk branch with support for both ICS and LSM. + ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file From c8cb38e8398c322e787595151d8b543e75901e0b Mon Sep 17 00:00:00 2001 From: MSalopek Date: Fri, 21 Jun 2024 10:59:23 +0200 Subject: [PATCH 15/19] chore: add changelogs from other PR --- .../dependencies/{3154-bump-ibc.md => 3149-bump-ibc.md} | 2 +- .../dependencies/{3154-bump-sdk.md => 3149-bump-sdk.md} | 2 +- .../state-breaking/{3154-bump-ibc.md => 3149-bump-ibc.md} | 2 +- .../state-breaking/{3154-bump-sdk.md => 3149-bump-sdk.md} | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename .changelog/unreleased/dependencies/{3154-bump-ibc.md => 3149-bump-ibc.md} (68%) rename .changelog/unreleased/dependencies/{3154-bump-sdk.md => 3149-bump-sdk.md} (80%) rename .changelog/unreleased/state-breaking/{3154-bump-ibc.md => 3149-bump-ibc.md} (68%) rename .changelog/unreleased/state-breaking/{3154-bump-sdk.md => 3149-bump-sdk.md} (80%) diff --git a/.changelog/unreleased/dependencies/3154-bump-ibc.md b/.changelog/unreleased/dependencies/3149-bump-ibc.md similarity index 68% rename from .changelog/unreleased/dependencies/3154-bump-ibc.md rename to .changelog/unreleased/dependencies/3149-bump-ibc.md index 22d07f7e641..6466629cd27 100644 --- a/.changelog/unreleased/dependencies/3154-bump-ibc.md +++ b/.changelog/unreleased/dependencies/3149-bump-ibc.md @@ -1,3 +1,3 @@ - Bump [ibc-go](https://github.com/cosmos/ibc-go) to [v7.6.0](https://github.com/cosmos/ibc-go/releases/tag/v7.6.0) - ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file diff --git a/.changelog/unreleased/dependencies/3154-bump-sdk.md b/.changelog/unreleased/dependencies/3149-bump-sdk.md similarity index 80% rename from .changelog/unreleased/dependencies/3154-bump-sdk.md rename to .changelog/unreleased/dependencies/3149-bump-sdk.md index bef893e603f..c819c8a0a42 100644 --- a/.changelog/unreleased/dependencies/3154-bump-sdk.md +++ b/.changelog/unreleased/dependencies/3149-bump-sdk.md @@ -1,4 +1,4 @@ - Bump [cosmos-sdk](https://github.com/cosmos/cosmos-sdk) to [v0.47.16-ics-lsm](https://github.com/cosmos/cosmos-sdk/tree/v0.47.16-ics-lsm). This is a special cosmos-sdk branch with support for both ICS and LSM. - ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3154-bump-ibc.md b/.changelog/unreleased/state-breaking/3149-bump-ibc.md similarity index 68% rename from .changelog/unreleased/state-breaking/3154-bump-ibc.md rename to .changelog/unreleased/state-breaking/3149-bump-ibc.md index 22d07f7e641..6466629cd27 100644 --- a/.changelog/unreleased/state-breaking/3154-bump-ibc.md +++ b/.changelog/unreleased/state-breaking/3149-bump-ibc.md @@ -1,3 +1,3 @@ - Bump [ibc-go](https://github.com/cosmos/ibc-go) to [v7.6.0](https://github.com/cosmos/ibc-go/releases/tag/v7.6.0) - ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3154-bump-sdk.md b/.changelog/unreleased/state-breaking/3149-bump-sdk.md similarity index 80% rename from .changelog/unreleased/state-breaking/3154-bump-sdk.md rename to .changelog/unreleased/state-breaking/3149-bump-sdk.md index bef893e603f..c819c8a0a42 100644 --- a/.changelog/unreleased/state-breaking/3154-bump-sdk.md +++ b/.changelog/unreleased/state-breaking/3149-bump-sdk.md @@ -1,4 +1,4 @@ - Bump [cosmos-sdk](https://github.com/cosmos/cosmos-sdk) to [v0.47.16-ics-lsm](https://github.com/cosmos/cosmos-sdk/tree/v0.47.16-ics-lsm). This is a special cosmos-sdk branch with support for both ICS and LSM. - ([\#3154](https://github.com/cosmos/gaia/pull/3154)) \ No newline at end of file + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file From 55c94497c5573b75741cf91f6d57dac7ee2cd6ee Mon Sep 17 00:00:00 2001 From: MSalopek Date: Fri, 21 Jun 2024 11:00:42 +0200 Subject: [PATCH 16/19] chore: update ignore file --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index df75354186c..34294f94d42 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,8 @@ docs/tutorial dist tools-stamp docs/node_modules +docs/versioned_docs +docs/versioned_sidebars # Data - ideally these don't exist baseapp/data/* From 447d720a942a9a0facd113e463aa445c59bf6dd2 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Fri, 21 Jun 2024 11:04:57 +0200 Subject: [PATCH 17/19] chore: add cosmwasm changelogs --- .changelog/unreleased/api-breaking/3149-bump-ics.md | 3 +++ .changelog/unreleased/dependencies/3051-add-cosmwasm.md | 2 ++ .changelog/unreleased/features/3051-add-cosmwasm.md | 2 ++ .changelog/unreleased/state-breaking/3051-add-cosmwasm.md | 2 ++ .changelog/unreleased/state-breaking/3149-bump-ics.md | 3 +++ 5 files changed, 12 insertions(+) create mode 100644 .changelog/unreleased/api-breaking/3149-bump-ics.md create mode 100644 .changelog/unreleased/dependencies/3051-add-cosmwasm.md create mode 100644 .changelog/unreleased/features/3051-add-cosmwasm.md create mode 100644 .changelog/unreleased/state-breaking/3051-add-cosmwasm.md create mode 100644 .changelog/unreleased/state-breaking/3149-bump-ics.md diff --git a/.changelog/unreleased/api-breaking/3149-bump-ics.md b/.changelog/unreleased/api-breaking/3149-bump-ics.md new file mode 100644 index 00000000000..a71b63ffb73 --- /dev/null +++ b/.changelog/unreleased/api-breaking/3149-bump-ics.md @@ -0,0 +1,3 @@ +- Bump [interchain-security](https://github.com/cosmos/interchain-security) to + [v4.3.0-lsm](https://github.com/cosmos/interchain-security/releases/tag/v4.3.0-lsm). + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file diff --git a/.changelog/unreleased/dependencies/3051-add-cosmwasm.md b/.changelog/unreleased/dependencies/3051-add-cosmwasm.md new file mode 100644 index 00000000000..3898012f02c --- /dev/null +++ b/.changelog/unreleased/dependencies/3051-add-cosmwasm.md @@ -0,0 +1,2 @@ +- Add the wasmd module. + ([\#3051](https://github.com/cosmos/gaia/pull/3051)) \ No newline at end of file diff --git a/.changelog/unreleased/features/3051-add-cosmwasm.md b/.changelog/unreleased/features/3051-add-cosmwasm.md new file mode 100644 index 00000000000..3898012f02c --- /dev/null +++ b/.changelog/unreleased/features/3051-add-cosmwasm.md @@ -0,0 +1,2 @@ +- Add the wasmd module. + ([\#3051](https://github.com/cosmos/gaia/pull/3051)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3051-add-cosmwasm.md b/.changelog/unreleased/state-breaking/3051-add-cosmwasm.md new file mode 100644 index 00000000000..3898012f02c --- /dev/null +++ b/.changelog/unreleased/state-breaking/3051-add-cosmwasm.md @@ -0,0 +1,2 @@ +- Add the wasmd module. + ([\#3051](https://github.com/cosmos/gaia/pull/3051)) \ No newline at end of file diff --git a/.changelog/unreleased/state-breaking/3149-bump-ics.md b/.changelog/unreleased/state-breaking/3149-bump-ics.md new file mode 100644 index 00000000000..a71b63ffb73 --- /dev/null +++ b/.changelog/unreleased/state-breaking/3149-bump-ics.md @@ -0,0 +1,3 @@ +- Bump [interchain-security](https://github.com/cosmos/interchain-security) to + [v4.3.0-lsm](https://github.com/cosmos/interchain-security/releases/tag/v4.3.0-lsm). + ([\#3149](https://github.com/cosmos/gaia/pull/3149)) \ No newline at end of file From 77ad1e45e674c6096d89ecfb126170146f66c82f Mon Sep 17 00:00:00 2001 From: MSalopek Date: Fri, 21 Jun 2024 13:36:04 +0200 Subject: [PATCH 18/19] chore: bump ics to v4.3.0-lsm --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index c253a7daf40..6da59450c9f 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 github.com/cosmos/ibc-go/v7 v7.6.0 - github.com/cosmos/interchain-security/v4 v4.2.0 + github.com/cosmos/interchain-security/v4 v4.3.0 github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.1 github.com/ory/dockertest/v3 v3.10.0 @@ -238,7 +238,7 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.1 // Use special ICS v4.1.0-ics-lsm release with support for LSM - github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0 + github.com/cosmos/interchain-security/v4 => github.com/cosmos/interchain-security/v4 v4.3.0-lsm github.com/cosmos/ledger-cosmos-go => github.com/cosmos/ledger-cosmos-go v0.12.4 diff --git a/go.sum b/go.sum index 6c2fc3363b2..9560ce3cd08 100644 --- a/go.sum +++ b/go.sum @@ -766,8 +766,8 @@ github.com/cosmos/ibc-go/v7 v7.6.0 h1:S1G5hcIVe9go+jQV6F9+I9yy+hylbJeLiVHUmktQNr github.com/cosmos/ibc-go/v7 v7.6.0/go.mod h1:LifBA7JHRHl95ujjHIaBEHmUqy2qCGyqDCXB7qmAsZk= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0 h1:osHyQRgBaN0L6uv00Rlm/I6VlvxWvjZ/uiPbTT5Pv+w= -github.com/cosmos/interchain-security/v4 v4.3.0-lsm-rc0/go.mod h1:oheLfOdj+k41NwfDZemQTdMYO7j/T+HQWZ1QHQIN/YY= +github.com/cosmos/interchain-security/v4 v4.3.0-lsm h1:QZEPone4xBT8Zw2JwkmQxEH97bluEhsTnYnb+pWNutU= +github.com/cosmos/interchain-security/v4 v4.3.0-lsm/go.mod h1:oheLfOdj+k41NwfDZemQTdMYO7j/T+HQWZ1QHQIN/YY= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= From 364db8496f98a7a31855730b3c0889834afe75e3 Mon Sep 17 00:00:00 2001 From: MSalopek Date: Fri, 21 Jun 2024 14:06:57 +0200 Subject: [PATCH 19/19] chore: fix nits --- app/upgrades/v18/upgrades.go | 4 ++-- go.mod | 3 --- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/upgrades/v18/upgrades.go b/app/upgrades/v18/upgrades.go index 8a7b643da22..e88d2018ecb 100644 --- a/app/upgrades/v18/upgrades.go +++ b/app/upgrades/v18/upgrades.go @@ -32,8 +32,8 @@ func CreateUpgradeHandler( expeditedPeriod := 24 * 7 * time.Hour // 7 days govParams := keepers.GovKeeper.GetParams(ctx) govParams.ExpeditedVotingPeriod = &expeditedPeriod - govParams.ExpeditedThreshold = govv1.DefaultExpeditedThreshold.String() // 66.7% - govParams.ExpeditedMinDeposit = govParams.MinDeposit // full deposit amount is required + govParams.ExpeditedThreshold = govv1.DefaultExpeditedThreshold.String() // 66.7% + govParams.ExpeditedMinDeposit = sdk.NewCoins(sdk.NewCoin(types.UAtomDenom, sdk.NewInt(500_000_000))) // 500 ATOM err = keepers.GovKeeper.SetParams(ctx, govParams) if err != nil { return vm, errorsmod.Wrapf(err, "unable to set gov params") diff --git a/go.mod b/go.mod index 6da59450c9f..14da37c7c49 100644 --- a/go.mod +++ b/go.mod @@ -230,9 +230,6 @@ replace ( // Use cosmos keyring github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - // Use special SDK v0.47.x release with support for both ICS and LSM - github.com/cosmos/cosmos-sdk => github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 - github.com/cosmos/gogoproto => github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.1 diff --git a/go.sum b/go.sum index 9560ce3cd08..b547b0d4edd 100644 --- a/go.sum +++ b/go.sum @@ -751,6 +751,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.47.16-ics-lsm h1:+mlfnZ4Cs8HMw9xy7Epjv56avptYSTsX3TVlUDX3Qcs= +github.com/cosmos/cosmos-sdk v0.47.16-ics-lsm/go.mod h1:uzvMwHXmuRDSOaF8ec9HickjLHJcItWBREdkaDHcPiE= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -1209,8 +1211,6 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413 h1:Vkk5RywGiqQsR68T9FwxTw5JQ2JstfpRlMiOP0j2+Tk= -github.com/informalsystems/cosmos-sdk v0.46.0-alpha2.0.20240614081903-f1b9aac8d413/go.mod h1:9sL4HXReNswcuwsPO33TACJmc+xkxYwHnmcL7rZgu1c= github.com/informalsystems/wasmd v0.45.0-lsm h1:sRldfkkUjZRIOV9+nNw34dS+wrTX6ShhQZd9WqcI+IQ= github.com/informalsystems/wasmd v0.45.0-lsm/go.mod h1:m0eKqxW2caVw1CJKEcEDaCiLXuo7+BflIlUOwiQU55c= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=