github.com/aergoio/aergo@v1.3.1/cmd/brick/exec/sendCoin.go (about) 1 package exec 2 3 import ( 4 "fmt" 5 "math/big" 6 "strings" 7 8 "github.com/aergoio/aergo/cmd/brick/context" 9 "github.com/aergoio/aergo/contract" 10 ) 11 12 func init() { 13 registerExec(&sendCoin{}) 14 } 15 16 type sendCoin struct{} 17 18 func (c *sendCoin) Command() string { 19 return "send" 20 } 21 22 func (c *sendCoin) Syntax() string { 23 return fmt.Sprintf("%s %s %s", context.AccountSymbol, 24 context.AccountSymbol, context.AmountSymbol) 25 } 26 27 func (c *sendCoin) Usage() string { 28 return "send <sender_name> <receiver_name> <amount>" 29 } 30 31 func (c *sendCoin) Describe() string { 32 return "send aergo from sender to receiver" 33 } 34 35 func (c *sendCoin) Validate(args string) error { 36 37 // is chain is loaded? 38 if context.Get() == nil { 39 return fmt.Errorf("load chain first") 40 } 41 42 _, _, _, err := c.parse(args) 43 44 return err 45 } 46 47 func (c *sendCoin) parse(args string) (string, string, *big.Int, error) { 48 splitArgs := context.SplitSpaceAndAccent(args, false) 49 if len(splitArgs) < 3 { 50 return "", "", nil, fmt.Errorf("need 3 arguments. usage: %s", c.Usage()) 51 } 52 53 amount, success := new(big.Int).SetString(splitArgs[2].Text, 10) 54 if success == false { 55 return "", "", nil, fmt.Errorf("fail to parse number %s", splitArgs[1].Text) 56 } 57 58 return splitArgs[0].Text, 59 splitArgs[1].Text, 60 amount, 61 nil 62 } 63 64 func (c *sendCoin) Run(args string) (string, error) { 65 senderName, receiverName, amount, _ := c.parse(args) 66 67 // assuming target is contract 68 err := context.Get().ConnectBlock( 69 contract.NewLuaTxCallBig(senderName, receiverName, amount, ""), 70 ) 71 72 if err != nil && strings.HasPrefix(err.Error(), "cannot find contract") { 73 // retry to normal address 74 err := context.Get().ConnectBlock( 75 contract.NewLuaTxSendBig(senderName, receiverName, amount), 76 ) 77 if err != nil { 78 return "", err 79 } 80 } else if err != nil { 81 return "", err 82 } 83 84 Index(context.AccountSymbol, receiverName) 85 86 return "send aergo successfully", nil 87 88 }