github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/farm/client/cli/tx.go (about) 1 package cli 2 3 import ( 4 "bufio" 5 "fmt" 6 interfacetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types" 7 "strconv" 8 "strings" 9 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 11 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils" 15 "github.com/fibonacci-chain/fbc/x/gov" 16 "github.com/spf13/cobra" 17 18 client "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags" 19 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 20 farmutils "github.com/fibonacci-chain/fbc/x/farm/client/utils" 21 "github.com/fibonacci-chain/fbc/x/farm/types" 22 ) 23 24 // GetTxCmd returns the transaction commands for this module 25 func GetTxCmd(cdc *codec.Codec) *cobra.Command { 26 farmTxCmd := &cobra.Command{ 27 Use: types.ModuleName, 28 Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), 29 SuggestionsMinimumDistance: 2, 30 } 31 32 farmTxCmd.AddCommand(client.PostCommands( 33 GetCmdCreatePool(cdc), 34 GetCmdDestroyPool(cdc), 35 GetCmdProvide(cdc), 36 GetCmdLock(cdc), 37 GetCmdUnlock(cdc), 38 GetCmdClaim(cdc), 39 )...) 40 return farmTxCmd 41 } 42 43 func GetCmdCreatePool(cdc *codec.Codec) *cobra.Command { 44 cmd := &cobra.Command{ 45 Use: "create-pool [pool-name] [min-lock-amount] [yield-token]", 46 Short: "create a farm pool", 47 Long: strings.TrimSpace( 48 fmt.Sprintf(`Create a farm pool. 49 50 Example: 51 $ %s tx farm create-pool pool-eth-xxb 10eth xxb --from mykey 52 $ %s tx farm create-pool pool-ammswap_eth_usdk-xxb 10ammswap_eth_usdk xxb --from mykey 53 `, version.ClientName, version.ClientName), 54 ), 55 Args: cobra.ExactArgs(3), 56 RunE: func(cmd *cobra.Command, args []string) error { 57 inBuf := bufio.NewReader(cmd.InOrStdin()) 58 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 59 cliCtx := context.NewCLIContext().WithCodec(cdc) 60 61 poolName := args[0] 62 minLockAmount, err := sdk.ParseDecCoin(args[1]) 63 if err != nil { 64 return err 65 } 66 yieldToken := args[2] 67 msg := types.NewMsgCreatePool(cliCtx.GetFromAddress(), poolName, minLockAmount, yieldToken) 68 69 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 70 }, 71 } 72 return cmd 73 } 74 75 func GetCmdDestroyPool(cdc *codec.Codec) *cobra.Command { 76 cmd := &cobra.Command{ 77 Use: "destroy-pool [pool-name]", 78 Short: "destroy a farm pool", 79 Long: strings.TrimSpace( 80 fmt.Sprintf(`Destroy a farm pool. 81 82 Example: 83 $ %s tx farm destroy-pool pool-eth-xxb --from mykey 84 `, version.ClientName), 85 ), 86 Args: cobra.ExactArgs(1), 87 RunE: func(cmd *cobra.Command, args []string) error { 88 inBuf := bufio.NewReader(cmd.InOrStdin()) 89 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 90 cliCtx := context.NewCLIContext().WithCodec(cdc) 91 poolName := args[0] 92 msg := types.NewMsgDestroyPool(cliCtx.GetFromAddress(), poolName) 93 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 94 }, 95 } 96 return cmd 97 } 98 99 func GetCmdProvide(cdc *codec.Codec) *cobra.Command { 100 cmd := &cobra.Command{ 101 Use: "provide [pool-name] [amount] [yield-per-block] [start-height-to-yield]", 102 Short: "provide a number of yield tokens into a pool", 103 Long: strings.TrimSpace( 104 fmt.Sprintf(`Provide a number of yield tokens into a pool. 105 106 Example: 107 $ %s tx farm provide pool-eth-xxb 1000xxb 5 10000 --from mykey 108 `, version.ClientName), 109 ), 110 Args: cobra.ExactArgs(4), 111 RunE: func(cmd *cobra.Command, args []string) error { 112 inBuf := bufio.NewReader(cmd.InOrStdin()) 113 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 114 cliCtx := context.NewCLIContext().WithCodec(cdc) 115 116 amount, err := sdk.ParseDecCoin(args[1]) 117 if err != nil { 118 return err 119 } 120 121 yieldPerBlock, err := sdk.NewDecFromStr(args[2]) 122 if err != nil { 123 return err 124 } 125 126 startHeightToYield, err := strconv.ParseInt(args[3], 10, 64) 127 if err != nil { 128 return err 129 } 130 131 poolName := args[0] 132 msg := types.NewMsgProvide(poolName, cliCtx.GetFromAddress(), amount, yieldPerBlock, startHeightToYield) 133 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 134 }, 135 } 136 return cmd 137 } 138 139 func GetCmdLock(cdc *codec.Codec) *cobra.Command { 140 cmd := &cobra.Command{ 141 Use: "lock [pool-name] [amount]", 142 Short: "lock a number of tokens for yield farming", 143 Long: strings.TrimSpace( 144 fmt.Sprintf(`Lock a number of tokens for yield farming. 145 146 Example: 147 $ %s tx farm lock pool-eth-xxb 5eth --from mykey 148 `, version.ClientName), 149 ), 150 Args: cobra.ExactArgs(2), 151 RunE: func(cmd *cobra.Command, args []string) error { 152 inBuf := bufio.NewReader(cmd.InOrStdin()) 153 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 154 cliCtx := context.NewCLIContext().WithCodec(cdc) 155 156 amount, err := sdk.ParseDecCoin(args[1]) 157 if err != nil { 158 return err 159 } 160 161 poolName := args[0] 162 msg := types.NewMsgLock(poolName, cliCtx.GetFromAddress(), amount) 163 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 164 }, 165 } 166 return cmd 167 } 168 169 func GetCmdUnlock(cdc *codec.Codec) *cobra.Command { 170 cmd := &cobra.Command{ 171 Use: "unlock [pool-name] [amount]", 172 Short: "unlock a number of tokens", 173 Long: strings.TrimSpace( 174 fmt.Sprintf(`Unlock a number of tokens. 175 176 Example: 177 $ %s tx farm unlock pool-eth-xxb 1eth --from mykey 178 `, version.ClientName), 179 ), 180 Args: cobra.ExactArgs(2), 181 RunE: func(cmd *cobra.Command, args []string) error { 182 inBuf := bufio.NewReader(cmd.InOrStdin()) 183 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 184 cliCtx := context.NewCLIContext().WithCodec(cdc) 185 186 amount, err := sdk.ParseDecCoin(args[1]) 187 if err != nil { 188 return err 189 } 190 191 poolName := args[0] 192 msg := types.NewMsgUnlock(poolName, cliCtx.GetFromAddress(), amount) 193 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 194 }, 195 } 196 return cmd 197 } 198 199 func GetCmdClaim(cdc *codec.Codec) *cobra.Command { 200 cmd := &cobra.Command{ 201 Use: "claim [pool-name]", 202 Short: "claim yield farming rewards", 203 Long: strings.TrimSpace( 204 fmt.Sprintf(`Claim yield farming rewards. 205 206 Example: 207 $ %s tx farm claim --from mykey 208 `, version.ClientName), 209 ), 210 Args: cobra.ExactArgs(1), 211 RunE: func(cmd *cobra.Command, args []string) error { 212 inBuf := bufio.NewReader(cmd.InOrStdin()) 213 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 214 cliCtx := context.NewCLIContext().WithCodec(cdc) 215 216 poolName := args[0] 217 msg := types.NewMsgClaim(poolName, cliCtx.GetFromAddress()) 218 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 219 }, 220 } 221 return cmd 222 } 223 224 // GetCmdManageWhiteListProposal implements a command handler for submitting a farm manage white list proposal transaction 225 func GetCmdManageWhiteListProposal(cdcP *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command { 226 return &cobra.Command{ 227 Use: "manage-white-list [proposal-file]", 228 Args: cobra.ExactArgs(1), 229 Short: "Submit a manage white list proposal", 230 Long: strings.TrimSpace( 231 fmt.Sprintf(`Submit a manage white list proposal along with an initial deposit. 232 The proposal details must be supplied via a JSON file. 233 234 Example: 235 $ %s tx gov submit-proposal manage-white-list <path/to/proposal.json> --from=<key_or_address> 236 237 Where proposal.json contains: 238 239 { 240 "title": "manage white list with a pool name", 241 "description": "add a pool name into the white list", 242 "pool_name": "pool-eth-xxb", 243 "is_added": true, 244 "deposit": [ 245 { 246 "denom": "%s", 247 "amount": "100" 248 } 249 ] 250 } 251 `, version.ClientName, sdk.DefaultBondDenom, 252 )), 253 RunE: func(cmd *cobra.Command, args []string) error { 254 cdc := cdcP.GetCdc() 255 inBuf := bufio.NewReader(cmd.InOrStdin()) 256 txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc)) 257 cliCtx := context.NewCLIContext().WithCodec(cdc) 258 259 proposal, err := farmutils.ParseManageWhiteListProposalJSON(cdc, args[0]) 260 if err != nil { 261 return err 262 } 263 264 from := cliCtx.GetFromAddress() 265 content := types.NewManageWhiteListProposal(proposal.Title, proposal.Description, proposal.PoolName, proposal.IsAdded) 266 msg := gov.NewMsgSubmitProposal(content, proposal.Deposit, from) 267 return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg}) 268 }, 269 } 270 }