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.

46 lines
1.8 KiB

  1. package common
  2. import (
  3. "encoding/binary"
  4. "fmt"
  5. "math/big"
  6. ethCommon "github.com/ethereum/go-ethereum/common"
  7. )
  8. const batchNumBytesLen = 8
  9. // Batch is a struct that represents Hermez network batch
  10. type Batch struct {
  11. BatchNum BatchNum `meddler:"batch_num"`
  12. EthBlockNum int64 `meddler:"eth_block_num"` // Ethereum block in which the batch is forged
  13. ForgerAddr ethCommon.Address `meddler:"forger_addr"`
  14. CollectedFees map[TokenID]*big.Int `meddler:"fees_collected,json"`
  15. FeeIdxsCoordinator []Idx `meddler:"fee_idxs_coordinator,json"`
  16. StateRoot *big.Int `meddler:"state_root,bigint"`
  17. NumAccounts int `meddler:"num_accounts"`
  18. LastIdx int64 `meddler:"last_idx"`
  19. ExitRoot *big.Int `meddler:"exit_root,bigint"`
  20. ForgeL1TxsNum *int64 `meddler:"forge_l1_txs_num"` // optional, Only when the batch forges L1 txs. Identifier that corresponds to the group of L1 txs forged in the current batch.
  21. SlotNum int64 `meddler:"slot_num"` // Slot in which the batch is forged
  22. TotalFeesUSD *float64 `meddler:"total_fees_usd"`
  23. }
  24. // BatchNum identifies a batch
  25. type BatchNum int64
  26. // Bytes returns a byte array of length 4 representing the BatchNum
  27. func (bn BatchNum) Bytes() []byte {
  28. var batchNumBytes [batchNumBytesLen]byte
  29. binary.BigEndian.PutUint64(batchNumBytes[:], uint64(bn))
  30. return batchNumBytes[:]
  31. }
  32. // BatchNumFromBytes returns BatchNum from a []byte
  33. func BatchNumFromBytes(b []byte) (BatchNum, error) {
  34. if len(b) != batchNumBytesLen {
  35. return 0, fmt.Errorf("can not parse BatchNumFromBytes, bytes len %d, expected %d", len(b), batchNumBytesLen)
  36. }
  37. batchNum := binary.BigEndian.Uint64(b[:batchNumBytesLen])
  38. return BatchNum(batchNum), nil
  39. }