github.com/lino-network/lino@v0.6.11/x/developer/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"github.com/cosmos/cosmos-sdk/codec"
     5  	"github.com/spf13/cobra"
     6  	"github.com/spf13/viper"
     7  
     8  	"github.com/lino-network/lino/client"
     9  	linotypes "github.com/lino-network/lino/types"
    10  	"github.com/lino-network/lino/x/developer/types"
    11  )
    12  
    13  const (
    14  	FlagWebsite     = "website"
    15  	FlagDescription = "description"
    16  	FlagAppMeta     = "appmeta"
    17  	FlagIdaPrice    = "ida-price"
    18  	FlagFrom        = "from"
    19  	FlagTo          = "to"
    20  	FlagActive      = "active"
    21  	FlagAmount      = "amount"
    22  	FlagApp         = "app"
    23  )
    24  
    25  func GetTxCmd(cdc *codec.Codec) *cobra.Command {
    26  	cmd := &cobra.Command{
    27  		Use:                        types.ModuleName,
    28  		Short:                      "Developer tx subcommands",
    29  		DisableFlagParsing:         true,
    30  		SuggestionsMinimumDistance: 2,
    31  		RunE:                       client.ValidateCmd,
    32  	}
    33  
    34  	cmd.AddCommand(client.PostCommands(
    35  		GetCmdRegister(cdc),
    36  		GetCmdUpdate(cdc),
    37  		GetCmdIDAIssue(cdc),
    38  		GetCmdIDAMint(cdc),
    39  		GetCmdIDATransfer(cdc),
    40  		GetCmdIDAAuthorize(cdc),
    41  		GetCmdUpdateAffiliated(cdc),
    42  	)...)
    43  
    44  	return cmd
    45  }
    46  
    47  // GetCmdRegister - register as developer.
    48  func GetCmdRegister(cdc *codec.Codec) *cobra.Command {
    49  	cmd := &cobra.Command{
    50  		Use:   "register",
    51  		Short: "register <username> --website <web> --description <desc> --appmeta <meta>",
    52  		Args:  cobra.ExactArgs(1),
    53  		RunE: func(cmd *cobra.Command, args []string) error {
    54  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
    55  			app := args[0]
    56  			msg := types.NewDeveloperRegisterMsg(
    57  				app,
    58  				viper.GetString(FlagWebsite),
    59  				viper.GetString(FlagDescription),
    60  				viper.GetString(FlagAppMeta))
    61  			return ctx.DoTxPrintResponse(msg)
    62  		},
    63  	}
    64  	cmd.Flags().String(FlagWebsite, "", "website of the app")
    65  	cmd.Flags().String(FlagDescription, "", "description of the app")
    66  	cmd.Flags().String(FlagAppMeta, "", "meta-data of the app")
    67  	return cmd
    68  }
    69  
    70  // GetCmdUpdate - update App info
    71  func GetCmdUpdate(cdc *codec.Codec) *cobra.Command {
    72  	cmd := &cobra.Command{
    73  		Use:   "update",
    74  		Short: "update <app> --website <web> --description <desc> --appmeta <meta>",
    75  		Args:  cobra.ExactArgs(1),
    76  		RunE: func(cmd *cobra.Command, args []string) error {
    77  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
    78  			app := linotypes.AccountKey(args[0])
    79  			msg := types.DeveloperUpdateMsg{
    80  				Username:    app,
    81  				Website:     viper.GetString(FlagWebsite),
    82  				Description: viper.GetString(FlagDescription),
    83  				AppMetaData: viper.GetString(FlagAppMeta),
    84  			}
    85  			return ctx.DoTxPrintResponse(msg)
    86  		},
    87  	}
    88  	cmd.Flags().String(FlagWebsite, "", "website of the app")
    89  	cmd.Flags().String(FlagDescription, "", "description of the app")
    90  	cmd.Flags().String(FlagAppMeta, "", "meta-data of the app")
    91  	return cmd
    92  }
    93  
    94  // GetCmdIDAIssue - issue an IDA for the app.
    95  // ida-issue dlivetv --ida-price 1
    96  func GetCmdIDAIssue(cdc *codec.Codec) *cobra.Command {
    97  	cmd := &cobra.Command{
    98  		Use:   "ida-issue",
    99  		Short: "ida-issue <app> --ida-price <amount>, amount is an integer in [1, 1000], 1 = 0.001 USD",
   100  		Args:  cobra.ExactArgs(1),
   101  		RunE: func(cmd *cobra.Command, args []string) error {
   102  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   103  			app := linotypes.AccountKey(args[0])
   104  			msg := types.IDAIssueMsg{
   105  				Username: app,
   106  				IDAPrice: viper.GetInt64(FlagIdaPrice),
   107  			}
   108  			return ctx.DoTxPrintResponse(msg)
   109  		},
   110  	}
   111  	cmd.Flags().Int64(FlagIdaPrice, 0,
   112  		"The price of IDA in unit of 0.001 USD, valid range: [1, 1000]")
   113  	return cmd
   114  }
   115  
   116  // GetCmdIDAMint - mint IDA for the app
   117  func GetCmdIDAMint(cdc *codec.Codec) *cobra.Command {
   118  	cmd := &cobra.Command{
   119  		Use:   "ida-mint",
   120  		Short: "ida-mint <app> --amount <lino-amount>",
   121  		Args:  cobra.ExactArgs(1),
   122  		RunE: func(cmd *cobra.Command, args []string) error {
   123  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   124  			app := linotypes.AccountKey(args[0])
   125  			amount := viper.GetString(FlagAmount)
   126  			msg := types.IDAMintMsg{
   127  				Username: app,
   128  				Amount:   amount,
   129  			}
   130  			return ctx.DoTxPrintResponse(msg)
   131  		},
   132  	}
   133  	cmd.Flags().Int64(FlagAmount, 0,
   134  		"Amount of LINO to convert to IDA")
   135  	_ = cmd.MarkFlagRequired(FlagAmount)
   136  	return cmd
   137  }
   138  
   139  // GetCmdIDATransfer - transfer ida from or to some account.
   140  func GetCmdIDATransfer(cdc *codec.Codec) *cobra.Command {
   141  	cmd := &cobra.Command{
   142  		Use:   "ida-transfer",
   143  		Short: "ida-transfer <signer> <app> --from <foo> --to <bar> --amount <amount>",
   144  		Args:  cobra.ExactArgs(2),
   145  		RunE: func(cmd *cobra.Command, args []string) error {
   146  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   147  			signer := linotypes.AccountKey(args[0])
   148  			app := linotypes.AccountKey(args[1])
   149  			amount := linotypes.IDAStr(viper.GetString(FlagAmount))
   150  			from := linotypes.AccountKey(viper.GetString(FlagFrom))
   151  			to := linotypes.AccountKey(viper.GetString(FlagTo))
   152  			msg := types.IDATransferMsg{
   153  				App:    app,
   154  				Amount: amount,
   155  				From:   from,
   156  				To:     to,
   157  				Signer: signer,
   158  			}
   159  			return ctx.DoTxPrintResponse(msg)
   160  		},
   161  	}
   162  	cmd.Flags().String(FlagAmount, "", "amount of IDA")
   163  	cmd.Flags().String(FlagTo, "", "receipient of this transfer")
   164  	cmd.Flags().String(FlagFrom, "", "sender of this transfer")
   165  	return cmd
   166  }
   167  
   168  // GetCmdIDAAuthorize -
   169  func GetCmdIDAAuthorize(cdc *codec.Codec) *cobra.Command {
   170  	cmd := &cobra.Command{
   171  		Use:   "ida-auth",
   172  		Short: "ida-auth <username> <app> --active=true/false",
   173  		Args:  cobra.ExactArgs(2),
   174  		RunE: func(cmd *cobra.Command, args []string) error {
   175  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   176  			user := linotypes.AccountKey(args[0])
   177  			app := linotypes.AccountKey(args[1])
   178  			active := viper.GetBool(FlagActive)
   179  			msg := types.IDAAuthorizeMsg{
   180  				Username: user,
   181  				App:      app,
   182  				Activate: active,
   183  			}
   184  			return ctx.DoTxPrintResponse(msg)
   185  		},
   186  	}
   187  	cmd.Flags().Bool(FlagActive, false, "true = active IDA account")
   188  	_ = cmd.MarkFlagRequired(FlagActive)
   189  	return cmd
   190  }
   191  
   192  // GetCmdUpdateAffiliated -
   193  func GetCmdUpdateAffiliated(cdc *codec.Codec) *cobra.Command {
   194  	cmd := &cobra.Command{
   195  		Use:   "affiliated",
   196  		Short: "affiliated <app> <username> --active=true/false",
   197  		Args:  cobra.ExactArgs(2),
   198  		RunE: func(cmd *cobra.Command, args []string) error {
   199  			ctx := client.NewCoreContextFromViper().WithTxEncoder(linotypes.TxEncoder(cdc))
   200  			app := linotypes.AccountKey(args[0])
   201  			user := linotypes.AccountKey(args[1])
   202  			active := viper.GetBool(FlagActive)
   203  			msg := types.UpdateAffiliatedMsg{
   204  				App:      app,
   205  				Username: user,
   206  				Activate: active,
   207  			}
   208  			return ctx.DoTxPrintResponse(msg)
   209  		},
   210  	}
   211  	cmd.Flags().Bool(FlagActive, false, "true = add <username> as an affiliated of <app>")
   212  	_ = cmd.MarkFlagRequired(FlagActive)
   213  	return cmd
   214  }