-
Notifications
You must be signed in to change notification settings - Fork 1
/
rpc.go
151 lines (136 loc) · 4.67 KB
/
rpc.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package rpc
import (
"encoding/hex"
"github.com/assetcloud/chain/account"
"github.com/assetcloud/chain/common/address"
rpctypes "github.com/assetcloud/chain/rpc/types"
"github.com/assetcloud/chain/types"
tokenty "github.com/assetcloud/plugin/plugin/dapp/token/types"
context "golang.org/x/net/context"
)
//TODO:和GetBalance进行泛化处理,同时LoadAccounts和LoadExecAccountQueue也需要进行泛化处理, added by hzj
func (c *channelClient) getTokenBalance(in *tokenty.ReqTokenBalance) ([]*types.Account, error) {
cfg := c.GetConfig()
accountTokendb, err := account.NewAccountDB(cfg, tokenty.TokenX, in.GetTokenSymbol(), nil)
if err != nil {
return nil, err
}
switch in.GetExecer() {
case cfg.ExecName(tokenty.TokenX):
addrs := in.GetAddresses()
var queryAddrs []string
queryAddrs = append(queryAddrs, addrs...)
accounts, err := accountTokendb.LoadAccounts(c.QueueProtocolAPI, queryAddrs)
if err != nil {
log.Error("GetTokenBalance", "err", err.Error(), "token symbol", in.GetTokenSymbol(), "address", queryAddrs)
return nil, err
}
return accounts, nil
default: //trade
execaddress := address.ExecAddress(in.GetExecer())
addrs := in.GetAddresses()
var accounts []*types.Account
for _, addr := range addrs {
acc, err := accountTokendb.LoadExecAccountQueue(c.QueueProtocolAPI, addr, execaddress)
if err != nil {
log.Error("GetTokenBalance for exector", "err", err.Error(), "token symbol", in.GetTokenSymbol(),
"address", addr)
continue
}
accounts = append(accounts, acc)
}
return accounts, nil
}
}
// GetTokenBalance 获取token金额(channelClient)
func (c *channelClient) GetTokenBalance(ctx context.Context, in *tokenty.ReqTokenBalance) (*types.Accounts, error) {
reply, err := c.getTokenBalance(in)
if err != nil {
return nil, err
}
return &types.Accounts{Acc: reply}, nil
}
// GetTokenBalance 获取token金额 (Jrpc)
func (c *Jrpc) GetTokenBalance(in tokenty.ReqTokenBalance, result *interface{}) error {
balances, err := c.cli.GetTokenBalance(context.Background(), &in)
if err != nil {
return err
}
var accounts []*rpctypes.Account
for _, balance := range balances.Acc {
accounts = append(accounts, &rpctypes.Account{Addr: balance.GetAddr(),
Balance: balance.GetBalance(),
Currency: balance.GetCurrency(),
Frozen: balance.GetFrozen()})
}
*result = accounts
return nil
}
// CreateRawTokenPreCreateTx 创建未签名的创建Token交易
func (c *Jrpc) CreateRawTokenPreCreateTx(param *tokenty.TokenPreCreate, result *interface{}) error {
if param == nil || param.Symbol == "" {
return types.ErrInvalidParam
}
cfg := c.cli.GetConfig()
data, err := types.CallCreateTx(cfg, cfg.ExecName(tokenty.TokenX), "TokenPreCreate", param)
if err != nil {
return err
}
*result = hex.EncodeToString(data)
return nil
}
// CreateRawTokenFinishTx 创建未签名的结束Token交易
func (c *Jrpc) CreateRawTokenFinishTx(param *tokenty.TokenFinishCreate, result *interface{}) error {
if param == nil || param.Symbol == "" {
return types.ErrInvalidParam
}
cfg := c.cli.GetConfig()
data, err := types.CallCreateTx(cfg, cfg.ExecName(tokenty.TokenX), "TokenFinishCreate", param)
if err != nil {
return err
}
*result = hex.EncodeToString(data)
return nil
}
// CreateRawTokenRevokeTx 创建未签名的撤销Token交易
func (c *Jrpc) CreateRawTokenRevokeTx(param *tokenty.TokenRevokeCreate, result *interface{}) error {
if param == nil || param.Symbol == "" {
return types.ErrInvalidParam
}
cfg := c.cli.GetConfig()
data, err := types.CallCreateTx(cfg, cfg.ExecName(tokenty.TokenX), "TokenRevokeCreate", param)
if err != nil {
return err
}
*result = hex.EncodeToString(data)
return nil
}
// CreateRawTokenMintTx 创建未签名的mint Token交易
func (c *Jrpc) CreateRawTokenMintTx(param *tokenty.TokenMint, result *interface{}) error {
if param == nil || param.Symbol == "" || param.Amount <= 0 {
return types.ErrInvalidParam
}
cfg := c.cli.GetConfig()
data, err := types.CallCreateTx(cfg, cfg.ExecName(tokenty.TokenX), "TokenMint", param)
if err != nil {
return err
}
*result = hex.EncodeToString(data)
return nil
}
// CreateRawTokenBurnTx 创建未签名的 burn Token交易
func (c *Jrpc) CreateRawTokenBurnTx(param *tokenty.TokenBurn, result *interface{}) error {
if param == nil || param.Symbol == "" || param.Amount <= 0 {
return types.ErrInvalidParam
}
cfg := c.cli.GetConfig()
data, err := types.CallCreateTx(cfg, cfg.ExecName(tokenty.TokenX), "TokenBurn", param)
if err != nil {
return err
}
*result = hex.EncodeToString(data)
return nil
}