(ctx *cli.Context)
| 116 | } |
| 117 | |
| 118 | func transfer(ctx *cli.Context) error { |
| 119 | SetRpcPort(ctx) |
| 120 | if !ctx.IsSet(utils.GetFlagName(utils.TransactionToFlag)) || |
| 121 | !ctx.IsSet(utils.GetFlagName(utils.TransactionFromFlag)) || |
| 122 | !ctx.IsSet(utils.GetFlagName(utils.TransactionAmountFlag)) { |
| 123 | PrintErrorMsg("Missing %s %s or %s argument.", utils.TransactionToFlag.Name, utils.TransactionFromFlag.Name, utils.TransactionAmountFlag.Name) |
| 124 | cli.ShowSubcommandHelp(ctx) |
| 125 | return nil |
| 126 | } |
| 127 | |
| 128 | asset := ctx.String(utils.GetFlagName(utils.TransactionAssetFlag)) |
| 129 | if asset == "" { |
| 130 | asset = utils.ASSET_GAS |
| 131 | } |
| 132 | from := ctx.String(utils.TransactionFromFlag.Name) |
| 133 | fromAddr, err := cmdcom.ParseAddress(from, ctx) |
| 134 | if err != nil { |
| 135 | return err |
| 136 | } |
| 137 | to := ctx.String(utils.TransactionToFlag.Name) |
| 138 | toAddr, err := cmdcom.ParseAddress(to, ctx) |
| 139 | if err != nil { |
| 140 | return err |
| 141 | } |
| 142 | |
| 143 | var amount uint64 |
| 144 | amountStr := ctx.String(utils.TransactionAmountFlag.Name) |
| 145 | switch strings.ToLower(asset) { |
| 146 | case "gas": |
| 147 | amount = utils.ParseOng(amountStr) |
| 148 | amountStr = utils.FormatOng(amount) |
| 149 | default: |
| 150 | return fmt.Errorf("unsupport asset:%s", asset) |
| 151 | } |
| 152 | |
| 153 | err = utils.CheckAssetAmount(asset, amount) |
| 154 | if err != nil { |
| 155 | return err |
| 156 | } |
| 157 | |
| 158 | force := ctx.Bool(utils.GetFlagName(utils.ForceSendTxFlag)) |
| 159 | if !force { |
| 160 | balance, err := utils.GetAccountBalance(fromAddr, asset) |
| 161 | if err != nil { |
| 162 | return err |
| 163 | } |
| 164 | if balance < amount { |
| 165 | PrintErrorMsg("Account:%s balance not enough.", fromAddr) |
| 166 | PrintInfoMsg("\nTip:") |
| 167 | PrintInfoMsg(" If you want to send transaction compulsively, please using %s flag.", utils.GetFlagName(utils.ForceSendTxFlag)) |
| 168 | return nil |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | gasPrice := ctx.Uint64(utils.TransactionGasPriceFlag.Name) |
| 173 | gasLimit := ctx.Uint64(utils.TransactionGasLimitFlag.Name) |
| 174 | |
| 175 | networkId, err := utils.GetNetworkId() |
nothing calls this directly
no test coverage detected