arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}