Skip to content

Commit

Permalink
Add cmd for submitting a recover client prop. (#4522)
Browse files Browse the repository at this point in the history
* Add cmd for submitting a recover client prop.

* Bump cosmossdk in e2e.

* Use govtypes.ModuleName, rename old govtypes to govv1beta1

* Update modules/core/02-client/client/cli/tx.go

Co-authored-by: Damian Nolan <[email protected]>

* Add auth flag.

---------

Co-authored-by: Damian Nolan <[email protected]>
  • Loading branch information
DimitrisJim and damiannolan authored Aug 31, 2023
1 parent 016e092 commit aaee1e3
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 5 deletions.
2 changes: 2 additions & 0 deletions e2e/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -248,3 +248,5 @@ replace github.com/cosmos/ibc-go/v7 => ../
replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7

replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1

replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.47.5-0.20230828070859-c9144f02dda8
4 changes: 2 additions & 2 deletions e2e/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -354,8 +354,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.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8=
github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0=
github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg=
github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok=
github.com/cosmos/cosmos-sdk v0.47.5-0.20230828070859-c9144f02dda8 h1:H4+Ma/eOLsjG3PyK6CLVAup4MfxwzPqUa+02jV2hz08=
github.com/cosmos/cosmos-sdk v0.47.5-0.20230828070859-c9144f02dda8/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c=
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=
Expand Down
67 changes: 64 additions & 3 deletions modules/core/02-client/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,19 @@ import (
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/address"
"github.com/cosmos/cosmos-sdk/version"
govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"

"github.com/cosmos/ibc-go/v7/modules/core/02-client/types"
"github.com/cosmos/ibc-go/v7/modules/core/exported"
)

const FlagAuthority = "authority"

// NewCreateClientCmd defines the command to create a new IBC light client.
func NewCreateClientCmd() *cobra.Command {
cmd := &cobra.Command{
Expand Down Expand Up @@ -241,6 +245,63 @@ func NewUpgradeClientCmd() *cobra.Command {
return cmd
}

// NewCmdRecoverClientProposal defines the command to recover an IBC light client
func NewCmdRecoverClientProposal() *cobra.Command {
cmd := &cobra.Command{
Use: "recover [subject-client-id] [substitute-client-id] [flags]",
Args: cobra.ExactArgs(2),
Short: "recover an IBC client",
Long: "Submit a recover IBC client proposal along with an initial deposit.\n" +
"Please specify a subject client identifier you want to recover..\n" +
"Please specify the substitute client the subject client will be recovered to.",
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}

proposal, err := govcli.ReadGovPropFlags(clientCtx, cmd.Flags())
if err != nil {
return err
}

subjectClientID, substituteClientID := args[0], args[1]

authority, _ := cmd.Flags().GetString(FlagAuthority)
if authority != "" {
if _, err = sdk.AccAddressFromBech32(authority); err != nil {
return fmt.Errorf("invalid authority address: %w", err)
}
} else {
authority = sdk.AccAddress(address.Module(govtypes.ModuleName)).String()
}

msg := types.NewMsgRecoverClient(authority, subjectClientID, substituteClientID)

if err = msg.ValidateBasic(); err != nil {
return err
}

if err := proposal.SetMsgs([]sdk.Msg{msg}); err != nil {
return fmt.Errorf("failed to create recover client proposal message: %w", err)
}

return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal)
},
}

cmd.Flags().String(FlagAuthority, "", "The address of the client module authority (defaults to gov)")

flags.AddTxFlagsToCmd(cmd)
govcli.AddGovPropFlagsToCmd(cmd)
err := cmd.MarkFlagRequired(govcli.FlagTitle)
if err != nil {
panic(err)
}

return cmd
}

// NewCmdSubmitUpdateClientProposal implements a command handler for submitting an update IBC client proposal transaction.
func NewCmdSubmitUpdateClientProposal() *cobra.Command {
cmd := &cobra.Command{
Expand Down Expand Up @@ -282,7 +343,7 @@ func NewCmdSubmitUpdateClientProposal() *cobra.Command {
return err
}

msg, err := govtypes.NewMsgSubmitProposal(content, deposit, from)
msg, err := govv1beta1.NewMsgSubmitProposal(content, deposit, from)
if err != nil {
return err
}
Expand Down Expand Up @@ -381,7 +442,7 @@ func NewCmdSubmitUpgradeProposal() *cobra.Command {
return err
}

msg, err := govtypes.NewMsgSubmitProposal(content, deposit, from)
msg, err := govv1beta1.NewMsgSubmitProposal(content, deposit, from)
if err != nil {
return err
}
Expand Down

0 comments on commit aaee1e3

Please sign in to comment.