github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/icamauth/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"io/ioutil"
     7  
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client"
    11  	clicontext "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags"
    13  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    14  	interfacetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types"
    15  	types2 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors"
    17  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth"
    18  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    19  	"github.com/fibonacci-chain/fbc/x/icamauth/types"
    20  	"github.com/spf13/cobra"
    21  	"github.com/spf13/viper"
    22  )
    23  
    24  // GetTxCmd creates and returns the icamauth tx command
    25  func GetTxCmd(cdc *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    26  	cmd := &cobra.Command{
    27  		Use:                        types.ModuleName,
    28  		Short:                      fmt.Sprintf("%s transactions subcommands", types.ModuleName),
    29  		DisableFlagParsing:         true,
    30  		SuggestionsMinimumDistance: 2,
    31  		RunE:                       client.ValidateCmd,
    32  	}
    33  
    34  	cmd.AddCommand(
    35  		getRegisterAccountCmd(cdc, reg),
    36  		getSubmitTxCmd(cdc, reg),
    37  	)
    38  
    39  	return cmd
    40  }
    41  
    42  func getRegisterAccountCmd(cdc *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    43  	cmd := &cobra.Command{
    44  		Use: "register",
    45  		RunE: func(cmd *cobra.Command, args []string) error {
    46  			inBuf := bufio.NewReader(cmd.InOrStdin())
    47  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc.GetCdc()))
    48  			clientCtx := clicontext.NewCLIContext().WithCodec(cdc.GetCdc()).WithInterfaceRegistry(reg)
    49  
    50  			msg := types.NewMsgRegisterAccount(
    51  				clientCtx.GetFromAddress().String(),
    52  				viper.GetString(FlagConnectionID),
    53  				viper.GetString(FlagVersion),
    54  			)
    55  
    56  			if err := msg.ValidateBasic(); err != nil {
    57  				return err
    58  			}
    59  
    60  			return utils.GenerateOrBroadcastMsgs(clientCtx, txBldr, []sdk.Msg{msg})
    61  		},
    62  	}
    63  
    64  	cmd.Flags().AddFlagSet(fsConnectionID)
    65  	cmd.Flags().AddFlagSet(fsVersion)
    66  	_ = cmd.MarkFlagRequired(FlagConnectionID)
    67  
    68  	flags.AddTxFlagsToCmd(cmd)
    69  
    70  	return cmd
    71  }
    72  
    73  func getSubmitTxCmd(codecProxy *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    74  	cmd := &cobra.Command{
    75  		Use:  "submit [path/to/sdk_msg.json]",
    76  		Args: cobra.ExactArgs(1),
    77  		RunE: func(cmd *cobra.Command, args []string) error {
    78  			inBuf := bufio.NewReader(cmd.InOrStdin())
    79  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(codecProxy.GetCdc()))
    80  			clientCtx := clicontext.NewCLIContext().WithCodec(codecProxy.GetCdc()).WithInterfaceRegistry(reg)
    81  
    82  			cdc := codecProxy.GetProtocMarshal()
    83  
    84  			var txMsg types2.MsgProtoAdapter
    85  			if err := cdc.UnmarshalInterfaceJSON([]byte(args[0]), &txMsg); err != nil {
    86  
    87  				// check for file path if JSON input is not provided
    88  				contents, err := ioutil.ReadFile(args[0])
    89  				if err != nil {
    90  					return errors.Wrap(err, "neither JSON input nor path to .json file for sdk msg were provided")
    91  				}
    92  
    93  				if err := cdc.UnmarshalInterfaceJSON(contents, &txMsg); err != nil {
    94  					return errors.Wrap(err, "error unmarshalling sdk msg file")
    95  				}
    96  			}
    97  
    98  			msg, err := types.NewMsgSubmitTx(txMsg, viper.GetString(FlagConnectionID), clientCtx.GetFromAddress().String())
    99  			if err != nil {
   100  				return err
   101  			}
   102  
   103  			if err := msg.ValidateBasic(); err != nil {
   104  				return err
   105  			}
   106  
   107  			return utils.GenerateOrBroadcastMsgs(clientCtx, txBldr, []sdk.Msg{msg})
   108  		},
   109  	}
   110  
   111  	cmd.Flags().AddFlagSet(fsConnectionID)
   112  	_ = cmd.MarkFlagRequired(FlagConnectionID)
   113  
   114  	flags.AddTxFlagsToCmd(cmd)
   115  
   116  	return cmd
   117  }