hermez-node/batchbuilder/batchbuilder.go
batchbuilder/batchbuilder.goRaw
1package batchbuilder
2
3import (
4 "github.com/hermeznetwork/hermez-node/common"
5 "github.com/hermeznetwork/hermez-node/db/kvdb"
6 "github.com/hermeznetwork/hermez-node/db/statedb"
7 "github.com/hermeznetwork/hermez-node/txprocessor"
8 "github.com/hermeznetwork/tracerr"
9)
10
11// ConfigCircuit contains the circuit configuration
12type ConfigCircuit struct {
13 TxsMax uint64
14 L1TxsMax uint64
15 SMTLevelsMax uint64
16}
17
18// BatchBuilder implements the batch builder type, which contains the
19// functionalities
20type BatchBuilder struct {
21 localStateDB *statedb.LocalStateDB
22}
23
24// ConfigBatch contains the batch configuration
25type ConfigBatch struct {
26 TxProcessorConfig txprocessor.Config
27}
28
29// NewBatchBuilder constructs a new BatchBuilder, and executes the bb.Reset
30// method
31func NewBatchBuilder(dbpath string, synchronizerStateDB *statedb.StateDB, batchNum common.BatchNum, nLevels uint64) (*BatchBuilder, error) {
32 localStateDB, err := statedb.NewLocalStateDB(
33 statedb.Config{
34 Path: dbpath,
35 Keep: kvdb.DefaultKeep,
36 Type: statedb.TypeBatchBuilder,
37 NLevels: int(nLevels),
38 },
39 synchronizerStateDB)
40 if err != nil {
41 return nil, tracerr.Wrap(err)
42 }
43
44 bb := BatchBuilder{
45 localStateDB: localStateDB,
46 }
47
48 err = bb.Reset(batchNum, true)
49 return &bb, tracerr.Wrap(err)
50}
51
52// Reset tells the BatchBuilder to reset it's internal state to the required
53// `batchNum`. If `fromSynchronizer` is true, the BatchBuilder must take a
54// copy of the rollup state from the Synchronizer at that `batchNum`, otherwise
55// it can just roll back the internal copy.
56func (bb *BatchBuilder) Reset(batchNum common.BatchNum, fromSynchronizer bool) error {
57 return tracerr.Wrap(bb.localStateDB.Reset(batchNum, fromSynchronizer))
58}
59
60// BuildBatch takes the transactions and returns the common.ZKInputs of the next batch
61func (bb *BatchBuilder) BuildBatch(coordIdxs []common.Idx, configBatch *ConfigBatch, l1usertxs,
62 l1coordinatortxs []common.L1Tx, pooll2txs []common.PoolL2Tx) (*common.ZKInputs, error) {
63 bbStateDB := bb.localStateDB.StateDB
64 tp := txprocessor.NewTxProcessor(bbStateDB, configBatch.TxProcessorConfig)
65
66 ptOut, err := tp.ProcessTxs(coordIdxs, l1usertxs, l1coordinatortxs, pooll2txs)
67 return ptOut.ZKInputs, tracerr.Wrap(err)
68}
69
70// LocalStateDB returns the underlying LocalStateDB
71func (bb *BatchBuilder) LocalStateDB() *statedb.LocalStateDB {
72 return bb.localStateDB
73}