arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/common/block.go
common/block.goRaw
  1package common
  2
  3import (
  4	"math/big"
  5	"time"
  6
  7	ethCommon "github.com/ethereum/go-ethereum/common"
  8)
  9
 10// Block represents of an Ethereum block
 11type Block struct {
 12	EthBlockNum int64          `meddler:"eth_block_num"`
 13	Timestamp   time.Time      `meddler:"timestamp,utctime"`
 14	Hash        ethCommon.Hash `meddler:"hash"`
 15	ParentHash  ethCommon.Hash `meddler:"-"`
 16}
 17
 18// RollupData contains information returned by the Rollup smart contract
 19type RollupData struct {
 20	// L1UserTxs that were submitted in the block
 21	L1UserTxs   []L1Tx
 22	Batches     []BatchData
 23	AddedTokens []Token
 24	Withdrawals []WithdrawInfo
 25	Vars        *RollupVariables
 26}
 27
 28// NewRollupData creates an empty RollupData with the slices initialized.
 29func NewRollupData() RollupData {
 30	return RollupData{
 31		L1UserTxs:   make([]L1Tx, 0),
 32		Batches:     make([]BatchData, 0),
 33		AddedTokens: make([]Token, 0),
 34		Withdrawals: make([]WithdrawInfo, 0),
 35		Vars:        nil,
 36	}
 37}
 38
 39// AuctionData contains information returned by the Action smart contract
 40type AuctionData struct {
 41	Bids         []Bid
 42	Coordinators []Coordinator
 43	Vars         *AuctionVariables
 44}
 45
 46// NewAuctionData creates an empty AuctionData with the slices initialized.
 47func NewAuctionData() AuctionData {
 48	return AuctionData{
 49		Bids:         make([]Bid, 0),
 50		Coordinators: make([]Coordinator, 0),
 51		Vars:         nil,
 52	}
 53}
 54
 55// WDelayerTransfer represents a transfer (either deposit or withdrawal) in the
 56// WDelayer smart contract
 57type WDelayerTransfer struct {
 58	Owner  ethCommon.Address
 59	Token  ethCommon.Address
 60	Amount *big.Int
 61	// TxHash ethCommon.Hash // hash of the transaction in which the wdelayer transfer happened
 62}
 63
 64// WDelayerData contains information returned by the WDelayer smart contract
 65type WDelayerData struct {
 66	Vars             *WDelayerVariables
 67	Deposits         []WDelayerTransfer
 68	DepositsByTxHash map[ethCommon.Hash]*WDelayerTransfer
 69	Withdrawals      []WDelayerTransfer
 70}
 71
 72// NewWDelayerData creates an empty WDelayerData.
 73func NewWDelayerData() WDelayerData {
 74	return WDelayerData{
 75		Vars:             nil,
 76		Deposits:         make([]WDelayerTransfer, 0),
 77		DepositsByTxHash: make(map[ethCommon.Hash]*WDelayerTransfer),
 78		Withdrawals:      make([]WDelayerTransfer, 0),
 79	}
 80}
 81
 82// BlockData contains the information of a Block
 83type BlockData struct {
 84	Block    Block
 85	Rollup   RollupData
 86	Auction  AuctionData
 87	WDelayer WDelayerData
 88	// TODO: enable when common.WithdrawalDelayerVars is Merged from Synchronizer PR
 89	// WithdrawalDelayerVars *common.WithdrawalDelayerVars
 90}
 91
 92// BatchData contains the information of a Batch
 93type BatchData struct {
 94	// L1UserTxs that were forged in the batch
 95	L1Batch bool // TODO: Remove once Batch.ForgeL1TxsNum is a pointer
 96	// L1UserTxs        []common.L1Tx
 97	L1CoordinatorTxs []L1Tx
 98	L2Txs            []L2Tx
 99	CreatedAccounts  []Account
100	ExitTree         []ExitInfo
101	Batch            Batch
102}
103
104// NewBatchData creates an empty BatchData with the slices initialized.
105func NewBatchData() *BatchData {
106	return &BatchData{
107		L1Batch: false,
108		// L1UserTxs:        make([]common.L1Tx, 0),
109		L1CoordinatorTxs: make([]L1Tx, 0),
110		L2Txs:            make([]L2Tx, 0),
111		CreatedAccounts:  make([]Account, 0),
112		ExitTree:         make([]ExitInfo, 0),
113		Batch:            Batch{},
114	}
115}