diff --git a/x/upgrade/go.mod b/x/upgrade/go.mod index 67c278c4b0..9fc5715083 100644 --- a/x/upgrade/go.mod +++ b/x/upgrade/go.mod @@ -13,7 +13,7 @@ require ( github.com/cometbft/cometbft v0.37.0 github.com/cosmos/cosmos-db v1.0.0-rc.1 github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5 + github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec github.com/cosmos/gogoproto v1.4.7 github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 diff --git a/x/upgrade/go.sum b/x/upgrade/go.sum index 6a5429a182..ddf97df493 100644 --- a/x/upgrade/go.sum +++ b/x/upgrade/go.sum @@ -346,8 +346,8 @@ github.com/cosmos/cosmos-db v1.0.0-rc.1 h1:SjnT8B6WKMW9WEIX32qMhnEEKcI7ZP0+G1Sa9 github.com/cosmos/cosmos-db v1.0.0-rc.1/go.mod h1:Dnmk3flSf5lkwCqvvjNpoxjpXzhxnCAFzKHlbaForso= github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5 h1:zO3mov9MaHWNnYZyQ8Wz/CZhrjfizMKvvLH41Ro/FYk= -github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5/go.mod h1:aKJRE3RjbwJUFGKG+kTDLhrST9vzFr8FlsTlv4eD+80= +github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec h1:BE559vEyhAjljq+iyCGJsnVnpKl7QgYrJuzP4Ax1QDc= +github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec/go.mod h1:lD11e/GdgJ5z2KCSN0DkXr0LFLXUrYUGIoF9cVvPU28= 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= diff --git a/x/upgrade/keeper/msg_server.go b/x/upgrade/keeper/msg_server.go index ade16ce586..2f281eba00 100644 --- a/x/upgrade/keeper/msg_server.go +++ b/x/upgrade/keeper/msg_server.go @@ -26,10 +26,18 @@ var _ types.MsgServer = msgServer{} // SoftwareUpgrade implements the Msg/SoftwareUpgrade Msg service. func (k msgServer) SoftwareUpgrade(goCtx context.Context, req *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) { + if _, err := sdk.AccAddressFromBech32(req.Authority); err != nil { + return nil, errors.Wrap(err, "authority") + } + if k.authority != req.Authority { return nil, errors.Wrapf(gov.ErrInvalidSigner, "expected %s got %s", k.authority, req.Authority) } + if err := req.Plan.ValidateBasic(); err != nil { + return nil, errors.Wrap(err, "plan") + } + ctx := sdk.UnwrapSDKContext(goCtx) err := k.ScheduleUpgrade(ctx, req.Plan) if err != nil { @@ -41,6 +49,10 @@ func (k msgServer) SoftwareUpgrade(goCtx context.Context, req *types.MsgSoftware // CancelUpgrade implements the Msg/CancelUpgrade Msg service. func (k msgServer) CancelUpgrade(goCtx context.Context, req *types.MsgCancelUpgrade) (*types.MsgCancelUpgradeResponse, error) { + if _, err := sdk.AccAddressFromBech32(req.Authority); err != nil { + return nil, errors.Wrap(err, "authority") + } + if k.authority != req.Authority { return nil, errors.Wrapf(gov.ErrInvalidSigner, "expected %s got %s", k.authority, req.Authority) } diff --git a/x/upgrade/keeper/msg_server_test.go b/x/upgrade/keeper/msg_server_test.go index 2d0b690c16..a7ae4537e4 100644 --- a/x/upgrade/keeper/msg_server_test.go +++ b/x/upgrade/keeper/msg_server_test.go @@ -15,6 +15,18 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() { expectErr bool errMsg string }{ + { + "invalid authority address", + &types.MsgSoftwareUpgrade{ + Authority: "authority", + Plan: types.Plan{ + Name: "all-good", + Height: 123450000, + }, + }, + true, + "authority: decoding bech32 failed", + }, { "unauthorized authority address", &types.MsgSoftwareUpgrade{ @@ -85,6 +97,14 @@ func (s *KeeperTestSuite) TestCancelUpgrade() { expectErr bool errMsg string }{ + { + "invalid authority address", + &types.MsgCancelUpgrade{ + Authority: "authority", + }, + true, + "authority: decoding bech32 failed", + }, { "unauthorized authority address", &types.MsgCancelUpgrade{ diff --git a/x/upgrade/types/msgs.go b/x/upgrade/types/msgs.go index 8a8c92c7a8..f53c8576e4 100644 --- a/x/upgrade/types/msgs.go +++ b/x/upgrade/types/msgs.go @@ -1,8 +1,6 @@ package types import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" ) @@ -17,19 +15,6 @@ func (m MsgSoftwareUpgrade) GetSignBytes() []byte { return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) } -// ValidateBasic does a sanity check on the provided data. -func (m *MsgSoftwareUpgrade) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { - return errorsmod.Wrap(err, "authority") - } - - if err := m.Plan.ValidateBasic(); err != nil { - return errorsmod.Wrap(err, "plan") - } - - return nil -} - // GetSigners returns the expected signers for MsgSoftwareUpgrade. func (m *MsgSoftwareUpgrade) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(m.Authority) @@ -41,15 +26,6 @@ func (m MsgCancelUpgrade) GetSignBytes() []byte { return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) } -// ValidateBasic does a sanity check on the provided data. -func (m *MsgCancelUpgrade) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { - return errorsmod.Wrap(err, "authority") - } - - return nil -} - // GetSigners returns the expected signers for MsgCancelUpgrade. func (m *MsgCancelUpgrade) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(m.Authority) diff --git a/x/upgrade/types/msgs_test.go b/x/upgrade/types/msgs_test.go deleted file mode 100644 index 52646943f6..0000000000 --- a/x/upgrade/types/msgs_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "cosmossdk.io/x/upgrade/types" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var authority = sdk.AccAddress("authority") - -func TestMsgSoftwareUpgrade(t *testing.T) { - testCases := []struct { - name string - msg *types.MsgSoftwareUpgrade - expErr bool - errMsg string - }{ - { - "invalid authority address", - &types.MsgSoftwareUpgrade{ - Authority: "authority", - Plan: types.Plan{ - Name: "all-good", - Height: 123450000, - }, - }, - true, - "authority: decoding bech32 failed", - }, - { - "invalid plan", - &types.MsgSoftwareUpgrade{ - Authority: authority.String(), - Plan: types.Plan{ - Height: 123450000, - }, - }, - true, - "plan", - }, - { - "all good", - &types.MsgSoftwareUpgrade{ - Authority: authority.String(), - Plan: types.Plan{ - Name: "all-good", - Height: 123450000, - }, - }, - false, - "", - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.expErr { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errMsg) - } else { - require.NoError(t, err) - } - }) - } -} - -func TestMsgCancelUpgrade(t *testing.T) { - testCases := []struct { - name string - msg *types.MsgCancelUpgrade - expErr bool - errMsg string - }{ - { - "invalid authority address", - &types.MsgCancelUpgrade{ - Authority: "authority", - }, - true, - "authority: decoding bech32 failed", - }, - { - "all good", - &types.MsgCancelUpgrade{ - Authority: authority.String(), - }, - false, - "", - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.expErr { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errMsg) - } else { - require.NoError(t, err) - } - }) - } -}