hermez-node/api/dbtoapistructs.go
api/dbtoapistructs.goRaw
1package api
2
3import (
4 "encoding/base64"
5 "math/big"
6 "strconv"
7
8 ethCommon "github.com/ethereum/go-ethereum/common"
9 "github.com/hermeznetwork/hermez-node/common"
10 "github.com/hermeznetwork/hermez-node/db"
11 "github.com/hermeznetwork/hermez-node/db/historydb"
12 "github.com/hermeznetwork/hermez-node/eth"
13 "github.com/iden3/go-iden3-crypto/babyjub"
14)
15
16const exitIdx = "hez:EXIT:1"
17
18type errorMsg struct {
19 Message string
20}
21
22func bjjToString(bjj *babyjub.PublicKey) string {
23 pkComp := [32]byte(bjj.Compress())
24 sum := pkComp[0]
25 for i := 1; i < len(pkComp); i++ {
26 sum += pkComp[i]
27 }
28 bjjSum := append(pkComp[:], sum)
29 return "hez:" + base64.RawURLEncoding.EncodeToString(bjjSum)
30}
31
32func ethAddrToHez(addr ethCommon.Address) string {
33 return "hez:" + addr.String()
34}
35
36func idxToHez(idx common.Idx, tokenSymbol string) string {
37 if idx == 1 {
38 return exitIdx
39 }
40 return "hez:" + tokenSymbol + ":" + strconv.Itoa(int(idx))
41}
42
43// Exit
44
45type exitsAPI struct {
46 Exits []exitAPI `json:"exits"`
47 Pagination *db.Pagination `json:"pagination"`
48}
49
50func (e *exitsAPI) GetPagination() *db.Pagination {
51 if e.Exits[0].ItemID < e.Exits[len(e.Exits)-1].ItemID {
52 e.Pagination.FirstReturnedItem = e.Exits[0].ItemID
53 e.Pagination.LastReturnedItem = e.Exits[len(e.Exits)-1].ItemID
54 } else {
55 e.Pagination.LastReturnedItem = e.Exits[0].ItemID
56 e.Pagination.FirstReturnedItem = e.Exits[len(e.Exits)-1].ItemID
57 }
58 return e.Pagination
59}
60func (e *exitsAPI) Len() int { return len(e.Exits) }
61
62type merkleProofAPI struct {
63 Root string
64 Siblings []string
65 OldKey string
66 OldValue string
67 IsOld0 bool
68 Key string
69 Value string
70 Fnc int
71}
72
73type exitAPI struct {
74 ItemID int `json:"itemId"`
75 BatchNum common.BatchNum `json:"batchNum"`
76 AccountIdx string `json:"accountIndex"`
77 MerkleProof merkleProofAPI `json:"merkleProof"`
78 Balance string `json:"balance"`
79 InstantWithdrawn *int64 `json:"instantWithdrawn"`
80 DelayedWithdrawRequest *int64 `json:"delayedWithdrawRequest"`
81 DelayedWithdrawn *int64 `json:"delayedWithdrawn"`
82 Token historydb.TokenWithUSD `json:"token"`
83}
84
85func historyExitsToAPI(dbExits []historydb.HistoryExit) []exitAPI {
86 apiExits := []exitAPI{}
87 for i := 0; i < len(dbExits); i++ {
88 exit := exitAPI{
89 ItemID: dbExits[i].ItemID,
90 BatchNum: dbExits[i].BatchNum,
91 AccountIdx: idxToHez(dbExits[i].AccountIdx, dbExits[i].TokenSymbol),
92 MerkleProof: merkleProofAPI{
93 Root: dbExits[i].MerkleProof.Root.String(),
94 OldKey: dbExits[i].MerkleProof.OldKey.String(),
95 OldValue: dbExits[i].MerkleProof.OldValue.String(),
96 IsOld0: dbExits[i].MerkleProof.IsOld0,
97 Key: dbExits[i].MerkleProof.Key.String(),
98 Value: dbExits[i].MerkleProof.Value.String(),
99 Fnc: dbExits[i].MerkleProof.Fnc,
100 },
101 Balance: dbExits[i].Balance.String(),
102 InstantWithdrawn: dbExits[i].InstantWithdrawn,
103 DelayedWithdrawRequest: dbExits[i].DelayedWithdrawRequest,
104 DelayedWithdrawn: dbExits[i].DelayedWithdrawn,
105 Token: historydb.TokenWithUSD{
106 TokenID: dbExits[i].TokenID,
107 EthBlockNum: dbExits[i].TokenEthBlockNum,
108 EthAddr: dbExits[i].TokenEthAddr,
109 Name: dbExits[i].TokenName,
110 Symbol: dbExits[i].TokenSymbol,
111 Decimals: dbExits[i].TokenDecimals,
112 USD: dbExits[i].TokenUSD,
113 USDUpdate: dbExits[i].TokenUSDUpdate,
114 },
115 }
116 siblings := []string{}
117 for j := 0; j < len(dbExits[i].MerkleProof.Siblings); j++ {
118 siblings = append(siblings, dbExits[i].MerkleProof.Siblings[j].String())
119 }
120 exit.MerkleProof.Siblings = siblings
121 apiExits = append(apiExits, exit)
122 }
123 return apiExits
124}
125
126// Config
127
128type rollupConstants struct {
129 PublicConstants eth.RollupPublicConstants `json:"publicConstants"`
130 MaxFeeIdxCoordinator int `json:"maxFeeIdxCoordinator"`
131 ReservedIdx int `json:"reservedIdx"`
132 ExitIdx int `json:"exitIdx"`
133 LimitLoadAmount *big.Int `json:"limitLoadAmount"`
134 LimitL2TransferAmount *big.Int `json:"limitL2TransferAmount"`
135 LimitTokens int `json:"limitTokens"`
136 L1CoordinatorTotalBytes int `json:"l1CoordinatorTotalBytes"`
137 L1UserTotalBytes int `json:"l1UserTotalBytes"`
138 MaxL1UserTx int `json:"maxL1UserTx"`
139 MaxL1Tx int `json:"maxL1Tx"`
140 InputSHAConstantBytes int `json:"inputSHAConstantBytes"`
141 NumBuckets int `json:"numBuckets"`
142 MaxWithdrawalDelay int `json:"maxWithdrawalDelay"`
143 ExchangeMultiplier int `json:"exchangeMultiplier"`
144}
145
146type configAPI struct {
147 RollupConstants rollupConstants `json:"hermez"`
148 AuctionConstants eth.AuctionConstants `json:"auction"`
149 WDelayerConstants eth.WDelayerConstants `json:"withdrawalDelayer"`
150}