/
transfer.go
59 lines (47 loc) · 1.64 KB
/
transfer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package cmd
import (
"errors"
AChain "github.com/ayachain/go-aya/chain"
AKeyStore "github.com/ayachain/go-aya/keystore"
ARsponse "github.com/ayachain/go-aya/response"
ATxUtils "github.com/ayachain/go-aya/tx/txutils"
EComm "github.com/ethereum/go-ethereum/common"
cmds "github.com/ipfs/go-ipfs-cmds"
"strconv"
)
var transferCMD = &cmds.Command{
Helptext:cmds.HelpText{
Tagline: "transfer balance",
},
Arguments: []cmds.Argument {
cmds.StringArg("chainid", true, false, "aya chain id"),
cmds.StringArg("to", true, false, "target address"),
cmds.StringArg("value", true, false, "amount"),
},
Run:func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
chain := AChain.GetChainByIdentifier(req.Arguments[0])
if chain == nil {
return ARsponse.EmitErrorResponse(re, errors.New("not exist chain connection") )
}
acc := AKeyStore.GetCoinBaseAddress()
vnumber, err := strconv.ParseUint(req.Arguments[2], 10, 64)
if err != nil {
return ARsponse.EmitErrorResponse(re, err)
}
txcount, err := chain.CVFServices().Transactions().GetTxCount(acc.Address)
if err != nil {
return ARsponse.EmitErrorResponse(re, err)
}
tx := ATxUtils.MakeTransferAvail(acc.Address, EComm.HexToAddress(req.Arguments[1]), vnumber, txcount)
if err := AKeyStore.SignTransaction(tx, acc); err != nil {
return ARsponse.EmitErrorResponse(re, err)
}
if !tx.Verify() {
return ARsponse.EmitErrorResponse(re, errors.New("transaction verify failed"))
}
if err := chain.GetTxPool().PublishTx(tx); err != nil {
return ARsponse.EmitErrorResponse(re, err)
}
return ARsponse.EmitSuccessResponse(re, tx.GetHash256())
},
}