You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

126 lines
5.9 KiB

package l2db
import (
"encoding/json"
"math/big"
"time"
ethCommon "github.com/ethereum/go-ethereum/common"
"github.com/hermeznetwork/hermez-node/api/apitypes"
"github.com/hermeznetwork/hermez-node/common"
"github.com/iden3/go-iden3-crypto/babyjub"
)
// PoolL2TxWrite holds the necessary data to perform inserts in tx_pool
type PoolL2TxWrite struct {
TxID common.TxID `meddler:"tx_id"`
FromIdx common.Idx `meddler:"from_idx"`
ToIdx *common.Idx `meddler:"to_idx"`
ToEthAddr *ethCommon.Address `meddler:"to_eth_addr"`
ToBJJ *babyjub.PublicKeyComp `meddler:"to_bjj"`
TokenID common.TokenID `meddler:"token_id"`
Amount *big.Int `meddler:"amount,bigint"`
AmountFloat float64 `meddler:"amount_f"`
Fee common.FeeSelector `meddler:"fee"`
Nonce common.Nonce `meddler:"nonce"`
State common.PoolL2TxState `meddler:"state"`
Signature babyjub.SignatureComp `meddler:"signature"`
RqFromIdx *common.Idx `meddler:"rq_from_idx"`
RqToIdx *common.Idx `meddler:"rq_to_idx"`
RqToEthAddr *ethCommon.Address `meddler:"rq_to_eth_addr"`
RqToBJJ *babyjub.PublicKeyComp `meddler:"rq_to_bjj"`
RqTokenID *common.TokenID `meddler:"rq_token_id"`
RqAmount *big.Int `meddler:"rq_amount,bigintnull"`
RqFee *common.FeeSelector `meddler:"rq_fee"`
RqNonce *common.Nonce `meddler:"rq_nonce"`
Type common.TxType `meddler:"tx_type"`
ClientIP string `meddler:"client_ip"`
}
// PoolTxAPI represents a L2 Tx pool with extra metadata used by the API
type PoolTxAPI struct {
TxID common.TxID `meddler:"tx_id"`
FromIdx apitypes.HezIdx `meddler:"from_idx"`
EffectiveFromEthAddr *apitypes.HezEthAddr `meddler:"effective_from_eth_addr"`
EffectiveFromBJJ *apitypes.HezBJJ `meddler:"effective_from_bjj"`
ToIdx *apitypes.HezIdx `meddler:"to_idx"`
EffectiveToEthAddr *apitypes.HezEthAddr `meddler:"effective_to_eth_addr"`
EffectiveToBJJ *apitypes.HezBJJ `meddler:"effective_to_bjj"`
Amount apitypes.BigIntStr `meddler:"amount"`
Fee common.FeeSelector `meddler:"fee"`
Nonce common.Nonce `meddler:"nonce"`
State common.PoolL2TxState `meddler:"state"`
Info *string `meddler:"info"`
Signature babyjub.SignatureComp `meddler:"signature"`
RqFromIdx *apitypes.HezIdx `meddler:"rq_from_idx"`
RqToIdx *apitypes.HezIdx `meddler:"rq_to_idx"`
RqToEthAddr *apitypes.HezEthAddr `meddler:"rq_to_eth_addr"`
RqToBJJ *apitypes.HezBJJ `meddler:"rq_to_bjj"`
RqTokenID *common.TokenID `meddler:"rq_token_id"`
RqAmount *apitypes.BigIntStr `meddler:"rq_amount"`
RqFee *common.FeeSelector `meddler:"rq_fee"`
RqNonce *common.Nonce `meddler:"rq_nonce"`
Type common.TxType `meddler:"tx_type"`
// Extra read fileds
BatchNum *common.BatchNum `meddler:"batch_num"`
Timestamp time.Time `meddler:"timestamp,utctime"`
TotalItems uint64 `meddler:"total_items"`
TokenID common.TokenID `meddler:"token_id"`
TokenItemID uint64 `meddler:"token_item_id"`
TokenEthBlockNum int64 `meddler:"eth_block_num"`
TokenEthAddr ethCommon.Address `meddler:"eth_addr"`
TokenName string `meddler:"name"`
TokenSymbol string `meddler:"symbol"`
TokenDecimals uint64 `meddler:"decimals"`
TokenUSD *float64 `meddler:"usd"`
TokenUSDUpdate *time.Time `meddler:"usd_update"`
}
// MarshalJSON is used to neast some of the fields of PoolTxAPI
// without the need of auxiliar structs
func (tx PoolTxAPI) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"id": tx.TxID,
"type": tx.Type,
"fromAccountIndex": tx.FromIdx,
"fromHezEthereumAddress": tx.EffectiveFromEthAddr,
"fromBJJ": tx.EffectiveFromBJJ,
"toAccountIndex": tx.ToIdx,
"toHezEthereumAddress": tx.EffectiveToEthAddr,
"toBjj": tx.EffectiveToBJJ,
"amount": tx.Amount,
"fee": tx.Fee,
"nonce": tx.Nonce,
"state": tx.State,
"info": tx.Info,
"signature": tx.Signature,
"timestamp": tx.Timestamp,
"requestFromAccountIndex": tx.RqFromIdx,
"requestToAccountIndex": tx.RqToIdx,
"requestToHezEthereumAddress": tx.RqToEthAddr,
"requestToBJJ": tx.RqToBJJ,
"requestTokenId": tx.RqTokenID,
"requestAmount": tx.RqAmount,
"requestFee": tx.RqFee,
"requestNonce": tx.RqNonce,
"token": map[string]interface{}{
"id": tx.TokenID,
"itemId": tx.TokenItemID,
"ethereumBlockNum": tx.TokenEthBlockNum,
"ethereumAddress": tx.TokenEthAddr,
"name": tx.TokenName,
"symbol": tx.TokenSymbol,
"decimals": tx.TokenDecimals,
"USD": tx.TokenUSD,
"fiatUpdate": tx.TokenUSDUpdate,
},
})
}
// AccountCreationAuthAPI represents an account creation auth in the expected format by the API
type AccountCreationAuthAPI struct {
EthAddr apitypes.HezEthAddr `json:"hezEthereumAddress" meddler:"eth_addr" `
BJJ apitypes.HezBJJ `json:"bjj" meddler:"bjj" `
Signature apitypes.EthSignature `json:"signature" meddler:"signature" `
Timestamp time.Time `json:"timestamp" meddler:"timestamp,utctime"`
}