OSDN Git Service

api add createAccount and createKey (#393)
[bytom/vapor.git] / toolbar / apinode / account.go
1 package apinode
2
3 import (
4         "encoding/json"
5
6         "github.com/vapor/api"
7         "github.com/vapor/blockchain/pseudohsm"
8         "github.com/vapor/blockchain/query"
9         "github.com/vapor/blockchain/txbuilder"
10         "github.com/vapor/crypto/ed25519/chainkd"
11         "github.com/vapor/errors"
12 )
13
14 func (n *Node) CreateKey(alias, password string) (*api.CreateKeyResp, error) {
15         url := "/create-key"
16         payload, err := json.Marshal(api.CreateKeyReq{Alias: alias, Password: password})
17         if err != nil {
18                 return nil, errors.Wrap(err, "json marshal")
19         }
20
21         res := &api.CreateKeyResp{}
22         return res, n.request(url, payload, res)
23 }
24
25 func (n *Node) ListKeys() (*[]pseudohsm.XPub, error) {
26         url := "/list-keys"
27         res := &[]pseudohsm.XPub{}
28         return res, n.request(url, nil, res)
29 }
30
31 //默认创建单签账户
32 func (n *Node) CreateAccount(keyAlias, accountAlias string) (*query.AnnotatedAccount, error) {
33         xPub, err := n.ListKeys()
34         if err != nil {
35                 return nil, err
36         }
37
38         var rootXPub *chainkd.XPub
39         for _, x := range *xPub {
40                 if x.Alias == keyAlias {
41                         rootXPub = &x.XPub
42                         break
43                 }
44         }
45
46         if rootXPub == nil {
47                 return nil, errors.New("keyAlias not found!")
48         }
49
50         return n.postCreateAccount(accountAlias, 1, []chainkd.XPub{*rootXPub})
51 }
52
53 //多签账户
54 func (n *Node) CreateMultiSignAccount(alias string, quorum int, rootXPubs []chainkd.XPub) (*query.AnnotatedAccount, error) {
55         return n.postCreateAccount(alias, quorum, rootXPubs)
56 }
57
58 func (n *Node) postCreateAccount(alias string, quorum int, rootXPubs []chainkd.XPub) (*query.AnnotatedAccount, error) {
59         url := "/create-account"
60         payload, err := json.Marshal(api.CreateAccountReq{
61                 Alias:     alias,
62                 Quorum:    quorum,
63                 RootXPubs: rootXPubs,
64         })
65         if err != nil {
66                 return nil, errors.Wrap(err, "json marshal")
67         }
68
69         res := &query.AnnotatedAccount{}
70         return res, n.request(url, payload, res)
71 }
72
73 func (n *Node) ListAccounts() (*[]query.AnnotatedAccount, error) {
74         url := "/list-accounts"
75         payload, err := json.Marshal(struct{}{})
76         if err != nil {
77                 return nil, errors.Wrap(err, "json marshal")
78         }
79
80         res := &[]query.AnnotatedAccount{}
81         return res, n.request(url, payload, res)
82 }
83
84 func (n *Node) CreateAccountReceiver(alias string) (*txbuilder.Receiver, error) {
85         url := "/create-account-receiver"
86         payload, err := json.Marshal(api.AccountFilter{
87                 AccountAlias: alias,
88         })
89         if err != nil {
90                 return nil, errors.Wrap(err, "json marshal")
91         }
92
93         res := &txbuilder.Receiver{}
94         return res, n.request(url, payload, res)
95 }