hermez-node/api/account.go
api/account.goRaw
1package api
2
3import (
4 "net/http"
5
6 "github.com/gin-gonic/gin"
7 "github.com/hermeznetwork/hermez-node/apitypes"
8 "github.com/hermeznetwork/hermez-node/db"
9 "github.com/hermeznetwork/hermez-node/db/historydb"
10)
11
12func getAccount(c *gin.Context) {
13 // Get Addr
14 idx, err := parseParamIdx(c)
15 if err != nil {
16 retBadReq(err, c)
17 return
18 }
19 apiAccount, err := h.GetAccountAPI(*idx)
20 if err != nil {
21 retSQLErr(err, c)
22 return
23 }
24
25 // Get balance from stateDB
26 account, err := s.GetAccount(*idx)
27 if err != nil {
28 retSQLErr(err, c)
29 return
30 }
31
32 apiAccount.Balance = apitypes.NewBigIntStr(account.Balance)
33
34 c.JSON(http.StatusOK, apiAccount)
35}
36
37func getAccounts(c *gin.Context) {
38 // Account filters
39 tokenIDs, addr, bjj, err := parseAccountFilters(c)
40 if err != nil {
41 retBadReq(err, c)
42 return
43 }
44 // Pagination
45 fromItem, order, limit, err := parsePagination(c)
46 if err != nil {
47 retBadReq(err, c)
48 return
49 }
50
51 // Fetch Accounts from historyDB
52 apiAccounts, pagination, err := h.GetAccountsAPI(tokenIDs, addr, bjj, fromItem, limit, order)
53 if err != nil {
54 retSQLErr(err, c)
55 return
56 }
57
58 // Get balances from stateDB
59 for x, apiAccount := range apiAccounts {
60 idx, err := stringToIdx(string(apiAccount.Idx), "Account Idx")
61 if err != nil {
62 retSQLErr(err, c)
63 return
64 }
65 account, err := s.GetAccount(*idx)
66 if err != nil {
67 retSQLErr(err, c)
68 return
69 }
70 apiAccounts[x].Balance = apitypes.NewBigIntStr(account.Balance)
71 }
72
73 // Build succesfull response
74 type accountResponse struct {
75 Accounts []historydb.AccountAPI `json:"accounts"`
76 Pagination *db.Pagination `json:"pagination"`
77 }
78 c.JSON(http.StatusOK, &accountResponse{
79 Accounts: apiAccounts,
80 Pagination: pagination,
81 })
82}