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 }