From 1c6881def8991e870e2616b7d123bfab68cdc7a1 Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Wed, 16 Dec 2020 06:41:20 -0300 Subject: [PATCH] x/ibc: fix ClientUpdateProposal unpacker (#8170) * x/ibc: fix ClientUpdateProposal unpacker * rm duplicate line --- x/ibc/core/02-client/types/proposal.go | 12 +++++++- x/ibc/core/02-client/types/proposal_test.go | 34 +++++++++++++++++++++ x/upgrade/types/plan.go | 1 - 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/x/ibc/core/02-client/types/proposal.go b/x/ibc/core/02-client/types/proposal.go index edbb4a8063..334a9d4599 100644 --- a/x/ibc/core/02-client/types/proposal.go +++ b/x/ibc/core/02-client/types/proposal.go @@ -1,6 +1,7 @@ package types import ( + codectypes "github.com/cosmos/cosmos-sdk/codec/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" @@ -11,7 +12,10 @@ const ( ProposalTypeClientUpdate = "ClientUpdate" ) -var _ govtypes.Content = &ClientUpdateProposal{} +var ( + _ govtypes.Content = &ClientUpdateProposal{} + _ codectypes.UnpackInterfacesMessage = ClientUpdateProposal{} +) // NewClientUpdateProposal creates a new client update proposal. func NewClientUpdateProposal(title, description, clientID string, header exported.Header) (*ClientUpdateProposal, error) { @@ -58,3 +62,9 @@ func (cup *ClientUpdateProposal) ValidateBasic() error { return header.ValidateBasic() } + +// UnpackInterfaces implements the UnpackInterfacesMessage interface. +func (cup ClientUpdateProposal) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var header exported.Header + return unpacker.UnpackAny(cup.Header, &header) +} diff --git a/x/ibc/core/02-client/types/proposal_test.go b/x/ibc/core/02-client/types/proposal_test.go index 2cdbaec7f8..5a47cf2f01 100644 --- a/x/ibc/core/02-client/types/proposal_test.go +++ b/x/ibc/core/02-client/types/proposal_test.go @@ -1,6 +1,8 @@ package types_test import ( + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" @@ -71,3 +73,35 @@ func (suite *TypesTestSuite) TestValidateBasic() { } } } + +// tests a client update proposal can be marshaled and unmarshaled, and the +// client state can be unpacked +func (suite *TypesTestSuite) TestMarshalClientUpdateProposalProposal() { + _, err := types.PackHeader(&ibctmtypes.Header{}) + suite.Require().NoError(err) + + // create proposal + header := suite.chainA.CurrentTMClientHeader() + proposal, err := types.NewClientUpdateProposal("update IBC client", "description", "client-id", header) + suite.Require().NoError(err) + + // create codec + ir := codectypes.NewInterfaceRegistry() + types.RegisterInterfaces(ir) + govtypes.RegisterInterfaces(ir) + ibctmtypes.RegisterInterfaces(ir) + cdc := codec.NewProtoCodec(ir) + + // marshal message + bz, err := cdc.MarshalJSON(proposal) + suite.Require().NoError(err) + + // unmarshal proposal + newProposal := &types.ClientUpdateProposal{} + err = cdc.UnmarshalJSON(bz, newProposal) + suite.Require().NoError(err) + + // unpack client state + _, err = types.UnpackHeader(newProposal.Header) + suite.Require().NoError(err) +} diff --git a/x/upgrade/types/plan.go b/x/upgrade/types/plan.go index 16feec31d7..2cbacd60b0 100644 --- a/x/upgrade/types/plan.go +++ b/x/upgrade/types/plan.go @@ -8,7 +8,6 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" ibcexported "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" )