github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/ibc-go/modules/apps/29-fee/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"strconv"
     7  	"strings"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    12  	interfacetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types"
    13  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    14  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version"
    15  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    17  	"github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/types"
    18  	channeltypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/04-channel/types"
    19  	"github.com/spf13/cobra"
    20  )
    21  
    22  const (
    23  	flagRecvFee    = "recv-fee"
    24  	flagAckFee     = "ack-fee"
    25  	flagTimeoutFee = "timeout-fee"
    26  )
    27  
    28  // NewRegisterPayeeCmd returns the command to create a MsgRegisterPayee
    29  func NewRegisterPayeeCmd(codecProxy *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    30  	cmd := &cobra.Command{
    31  		Use:     "register-payee [port-id] [channel-id] [relayer] [payee] ",
    32  		Short:   "Register a payee on a given channel.",
    33  		Long:    strings.TrimSpace(`Register a payee address on a given channel.`),
    34  		Example: fmt.Sprintf("%s tx ibc-fee register-payee transfer channel-0 cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh cosmos153lf4zntqt33a4v0sm5cytrxyqn78q7kz8j8x5", version.ServerName),
    35  		Args:    cobra.ExactArgs(4),
    36  		RunE: func(cmd *cobra.Command, args []string) error {
    37  			inBuf := bufio.NewReader(cmd.InOrStdin())
    38  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(codecProxy.GetCdc()))
    39  			clientCtx := context.NewCLIContext().WithProxy(codecProxy).WithInterfaceRegistry(reg)
    40  
    41  			msg := types.NewMsgRegisterPayee(args[0], args[1], args[2], args[3])
    42  
    43  			return utils.GenerateOrBroadcastMsgs(clientCtx, txBldr, []sdk.Msg{msg})
    44  		},
    45  	}
    46  
    47  	flags.AddTxFlagsToCmd(cmd)
    48  
    49  	return cmd
    50  }
    51  
    52  // NewRegisterCounterpartyPayeeCmd returns the command to create a MsgRegisterCounterpartyPayee
    53  func NewRegisterCounterpartyPayeeCmd(codecProxy *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    54  	cmd := &cobra.Command{
    55  		Use:     "register-counterparty-payee [port-id] [channel-id] [relayer] [counterparty-payee] ",
    56  		Short:   "Register a counterparty payee address on a given channel.",
    57  		Long:    strings.TrimSpace(`Register a counterparty payee address on a given channel.`),
    58  		Example: fmt.Sprintf("%s tx ibc-fee register-counterparty-payee transfer channel-0 cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh osmo1v5y0tz01llxzf4c2afml8s3awue0ymju22wxx2", version.ServerName),
    59  		Args:    cobra.ExactArgs(4),
    60  		RunE: func(cmd *cobra.Command, args []string) error {
    61  			inBuf := bufio.NewReader(cmd.InOrStdin())
    62  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(codecProxy.GetCdc()))
    63  			clientCtx := context.NewCLIContext().WithProxy(codecProxy).WithInterfaceRegistry(reg)
    64  
    65  			msg := types.NewMsgRegisterCounterpartyPayee(args[0], args[1], args[2], args[3])
    66  
    67  			return utils.GenerateOrBroadcastMsgs(clientCtx, txBldr, []sdk.Msg{msg})
    68  		},
    69  	}
    70  
    71  	flags.AddTxFlagsToCmd(cmd)
    72  
    73  	return cmd
    74  }
    75  
    76  // NewPayPacketFeeAsyncTxCmd returns the command to create a MsgPayPacketFeeAsync
    77  func NewPayPacketFeeAsyncTxCmd(codecProxy *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    78  	cmd := &cobra.Command{
    79  		Use:     "pay-packet-fee [src-port] [src-channel] [sequence]",
    80  		Short:   "Pay a fee to incentivize an existing IBC packet",
    81  		Long:    strings.TrimSpace(`Pay a fee to incentivize an existing IBC packet.`),
    82  		Example: fmt.Sprintf("%s tx ibc-fee pay-packet-fee transfer channel-0 1 --recv-fee 10stake --ack-fee 10stake --timeout-fee 10stake", version.ServerName),
    83  		Args:    cobra.ExactArgs(3),
    84  		RunE: func(cmd *cobra.Command, args []string) error {
    85  			inBuf := bufio.NewReader(cmd.InOrStdin())
    86  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(codecProxy.GetCdc()))
    87  			clientCtx := context.NewCLIContext().WithProxy(codecProxy).WithInterfaceRegistry(reg)
    88  
    89  			// NOTE: specifying non-nil relayers is currently unsupported
    90  			var relayers []string
    91  
    92  			sender := clientCtx.GetFromAddress().String()
    93  			seq, err := strconv.ParseUint(args[2], 10, 64)
    94  			if err != nil {
    95  				return err
    96  			}
    97  
    98  			packetID := channeltypes.NewPacketId(args[0], args[1], seq)
    99  
   100  			recvFeeStr, err := cmd.Flags().GetString(flagRecvFee)
   101  			if err != nil {
   102  				return err
   103  			}
   104  
   105  			recvFee, err := sdk.ParseCoinsNormalized(recvFeeStr)
   106  			if err != nil {
   107  				return err
   108  			}
   109  
   110  			ackFeeStr, err := cmd.Flags().GetString(flagAckFee)
   111  			if err != nil {
   112  				return err
   113  			}
   114  
   115  			ackFee, err := sdk.ParseCoinsNormalized(ackFeeStr)
   116  			if err != nil {
   117  				return err
   118  			}
   119  
   120  			timeoutFeeStr, err := cmd.Flags().GetString(flagTimeoutFee)
   121  			if err != nil {
   122  				return err
   123  			}
   124  
   125  			timeoutFee, err := sdk.ParseCoinsNormalized(timeoutFeeStr)
   126  			if err != nil {
   127  				return err
   128  			}
   129  
   130  			fee := types.Fee{
   131  				RecvFee:    utils.CliConvertCoinToCoinAdapters(recvFee),
   132  				AckFee:     utils.CliConvertCoinToCoinAdapters(ackFee),
   133  				TimeoutFee: utils.CliConvertCoinToCoinAdapters(timeoutFee),
   134  			}
   135  			fmt.Println(fee.String())
   136  
   137  			packetFee := types.NewPacketFee(fee, sender, relayers)
   138  			msg := types.NewMsgPayPacketFeeAsync(packetID, packetFee)
   139  
   140  			return utils.GenerateOrBroadcastMsgs(clientCtx, txBldr, []sdk.Msg{msg})
   141  		},
   142  	}
   143  
   144  	cmd.Flags().String(flagRecvFee, "", "Fee paid to a relayer for relaying a packet receive.")
   145  	cmd.Flags().String(flagAckFee, "", "Fee paid to a relayer for relaying a packet acknowledgement.")
   146  	cmd.Flags().String(flagTimeoutFee, "", "Fee paid to a relayer for relaying a packet timeout.")
   147  	flags.AddTxFlagsToCmd(cmd)
   148  
   149  	return cmd
   150  }