diff --git a/batchbuilder/batchbuilder.go b/batchbuilder/batchbuilder.go index 76e8cdd..c4feca1 100644 --- a/batchbuilder/batchbuilder.go +++ b/batchbuilder/batchbuilder.go @@ -1,13 +1,18 @@ package batchbuilder import ( + "encoding/binary" "math/big" ethCommon "github.com/ethereum/go-ethereum/common" "github.com/hermeznetwork/hermez-node/common" "github.com/hermeznetwork/hermez-node/db/statedb" + "github.com/iden3/go-merkletree/db" ) +// KEYIDX is used as key in the db to store the current Idx +var KEYIDX = []byte("idx") + // ConfigCircuit contains the circuit configuration type ConfigCircuit struct { TxsMax uint64 @@ -31,14 +36,13 @@ type ConfigBatch struct { // NewBatchBuilder constructs a new BatchBuilder, and executes the bb.Reset // method -func NewBatchBuilder(synchronizerStateDB *statedb.StateDB, configCircuits []ConfigCircuit, batchNum uint64, idx, nLevels uint64) (*BatchBuilder, error) { - localStateDB, err := statedb.NewLocalStateDB(synchronizerStateDB, true, int(nLevels)) +func NewBatchBuilder(dbpath string, synchronizerStateDB *statedb.StateDB, configCircuits []ConfigCircuit, batchNum uint64, nLevels uint64) (*BatchBuilder, error) { + localStateDB, err := statedb.NewLocalStateDB(dbpath, synchronizerStateDB, true, int(nLevels)) if err != nil { return nil, err } bb := BatchBuilder{ - idx: idx, localStateDB: localStateDB, configCircuits: configCircuits, } @@ -52,12 +56,17 @@ func NewBatchBuilder(synchronizerStateDB *statedb.StateDB, configCircuits []Conf // copy of the rollup state from the Synchronizer at that `batchNum`, otherwise // it can just roll back the internal copy. func (bb *BatchBuilder) Reset(batchNum uint64, fromSynchronizer bool) error { + if batchNum == 0 { + bb.idx = 0 + return nil + } err := bb.localStateDB.Reset(batchNum, fromSynchronizer) if err != nil { return err } - // bb.idx = idx // TODO idx will be obtained from the statedb reset - return nil + // idx is obtained from the statedb reset + bb.idx, err = bb.getIdx() + return err } // BuildBatch takes the transactions and returns the common.ZKInputs of the next batch @@ -139,8 +148,8 @@ func (bb *BatchBuilder) processL1Tx(tx common.L1Tx) error { return nil } -// applyCreateAccount creates a new account in the account of the depositer, it stores -// the deposit value +// applyCreateAccount creates a new account in the account of the depositer, it +// stores the deposit value func (bb *BatchBuilder) applyCreateAccount(tx common.L1Tx) error { account := &common.Account{ TokenID: tx.TokenID, @@ -156,7 +165,7 @@ func (bb *BatchBuilder) applyCreateAccount(tx common.L1Tx) error { } bb.idx = bb.idx + 1 - return nil + return bb.setIdx(bb.idx) } // applyDeposit updates the balance in the account of the depositer, if @@ -225,3 +234,31 @@ func (bb *BatchBuilder) applyTransfer(tx common.Tx) error { return nil } + +// getIdx returns the stored Idx from the localStateDB, which is the last Idx used for an Account in the localStateDB. +func (bb *BatchBuilder) getIdx() (uint64, error) { + idxBytes, err := bb.localStateDB.DB().Get(KEYIDX) + if err == db.ErrNotFound { + return 0, nil + } + if err != nil { + return 0, err + } + idx := binary.LittleEndian.Uint64(idxBytes[:8]) + return idx, nil +} + +// setIdx stores Idx in the localStateDB +func (bb *BatchBuilder) setIdx(idx uint64) error { + tx, err := bb.localStateDB.DB().NewTx() + if err != nil { + return err + } + var idxBytes [8]byte + binary.LittleEndian.PutUint64(idxBytes[:], idx) + tx.Put(KEYIDX, idxBytes[:]) + if err := tx.Commit(); err != nil { + return err + } + return nil +} diff --git a/batchbuilder/batchbuilder_test.go b/batchbuilder/batchbuilder_test.go index 696c847..4a56547 100644 --- a/batchbuilder/batchbuilder_test.go +++ b/batchbuilder/batchbuilder_test.go @@ -14,10 +14,12 @@ func TestBatchBuilder(t *testing.T) { dir, err := ioutil.TempDir("", "tmpdb") require.Nil(t, err) - synchDB, err := statedb.NewStateDB(dir, false, false, 0) + synchDB, err := statedb.NewStateDB(dir, false, 0) assert.Nil(t, err) - bb, err := NewBatchBuilder(synchDB, nil, 0, 0, 32) + bbDir, err := ioutil.TempDir("", "tmpBatchBuilderDB") + require.Nil(t, err) + bb, err := NewBatchBuilder(bbDir, synchDB, nil, 0, 32) assert.Nil(t, err) fmt.Println(bb) } diff --git a/db/statedb/statedb.go b/db/statedb/statedb.go index b66e96f..1df7154 100644 --- a/db/statedb/statedb.go +++ b/db/statedb/statedb.go @@ -1,13 +1,17 @@ package statedb import ( + "encoding/binary" "errors" + "fmt" + "os" + "os/exec" + "strconv" "github.com/hermeznetwork/hermez-node/common" "github.com/iden3/go-merkletree" "github.com/iden3/go-merkletree/db" - "github.com/iden3/go-merkletree/db/leveldb" - "github.com/iden3/go-merkletree/db/memory" + "github.com/iden3/go-merkletree/db/pebble" ) // ErrStateDBWithoutMT is used when a method that requires a MerkleTree is called in a StateDB that does not have a MerkleTree defined @@ -16,25 +20,32 @@ var ErrStateDBWithoutMT = errors.New("Can not call method to use MerkleTree in a // ErrAccountAlreadyExists is used when CreateAccount is called and the Account already exists var ErrAccountAlreadyExists = errors.New("Can not CreateAccount because Account already exists") +// KEYCURRENTBATCH is used as key in the db to store the current BatchNum +var KEYCURRENTBATCH = []byte("currentbatch") + +// PATHSTATEDB defines the subpath of the StateDB +const PATHSTATEDB = "/statedb" +const PATHBATCHNUM = "/BatchNum" +const PATHCURRENT = "/current" + // StateDB represents the StateDB object type StateDB struct { - db db.Storage - mt *merkletree.MerkleTree + path string + currentBatch uint64 + db *pebble.PebbleStorage + mt *merkletree.MerkleTree } // NewStateDB creates a new StateDB, allowing to use an in-memory or in-disk // storage -func NewStateDB(path string, inDisk bool, withMT bool, nLevels int) (*StateDB, error) { - var sto db.Storage +func NewStateDB(path string, withMT bool, nLevels int) (*StateDB, error) { + var sto *pebble.PebbleStorage var err error - if inDisk { - sto, err = leveldb.NewLevelDbStorage(path, false) - if err != nil { - return nil, err - } - } else { - sto = memory.NewMemoryStorage() + sto, err = pebble.NewPebbleStorage(path+PATHSTATEDB+PATHCURRENT, false) + if err != nil { + return nil, err } + var mt *merkletree.MerkleTree = nil if withMT { mt, err = merkletree.NewMerkleTree(sto, nLevels) @@ -43,32 +54,127 @@ func NewStateDB(path string, inDisk bool, withMT bool, nLevels int) (*StateDB, e } } - return &StateDB{ - db: sto, - mt: mt, - }, nil + sdb := &StateDB{ + path: path + PATHSTATEDB, + db: sto, + mt: mt, + } + + // load currentBatch + sdb.currentBatch, err = sdb.GetCurrentBatch() + if err != nil { + return nil, err + } + + return sdb, nil } -// CheckPointAt does a checkpoint at the given batchNum in the defined path -func (s *StateDB) CheckPointAt(batchNum uint64, path string) error { - // TODO +// DB returns the *pebble.PebbleStorage from the StateDB +func (s *StateDB) DB() *pebble.PebbleStorage { + return s.db +} + +// GetCurrentBatch returns the current BatchNum stored in the StateDB +func (s *StateDB) GetCurrentBatch() (uint64, error) { + cbBytes, err := s.db.Get(KEYCURRENTBATCH) + if err == db.ErrNotFound { + return 0, nil + } + if err != nil { + return 0, err + } + cb := binary.LittleEndian.Uint64(cbBytes[:8]) + return cb, nil +} +// setCurrentBatch stores the current BatchNum in the StateDB +func (s *StateDB) setCurrentBatch() error { + tx, err := s.db.NewTx() + if err != nil { + return err + } + var cbBytes [8]byte + binary.LittleEndian.PutUint64(cbBytes[:], s.currentBatch) + tx.Put(KEYCURRENTBATCH, cbBytes[:]) + if err := tx.Commit(); err != nil { + return err + } return nil } -// Reset resets the StateDB to the checkpoint at the given batchNum -func (s *StateDB) Reset(batchNum uint64) error { - // TODO +// MakeCheckpoint does a checkpoint at the given batchNum in the defined path. Internally this advances & stores the current BatchNum, and then stores a Checkpoint of the current state of the StateDB. +func (s *StateDB) MakeCheckpoint() error { + // advance currentBatch + s.currentBatch++ + + checkpointPath := s.path + PATHBATCHNUM + strconv.Itoa(int(s.currentBatch)) + + err := s.setCurrentBatch() + if err != nil { + return err + } + + // if checkpoint BatchNum already exist in disk, delete it + if _, err := os.Stat(checkpointPath); !os.IsNotExist(err) { + err := os.RemoveAll(checkpointPath) + if err != nil { + return err + } + } + + // execute Checkpoint + err = s.db.Pebble().Checkpoint(checkpointPath) + if err != nil { + return err + } return nil } -// Checkpoints returns a list of the checkpoints (batchNums) -func (s *StateDB) Checkpoints() ([]uint64, error) { - // TODO +// DeleteCheckpoint removes if exist the checkpoint of the given batchNum +func (s *StateDB) DeleteCheckpoint(batchNum uint64) error { + checkpointPath := s.path + PATHBATCHNUM + strconv.Itoa(int(batchNum)) + + if _, err := os.Stat(checkpointPath); os.IsNotExist(err) { + return fmt.Errorf("Checkpoint with batchNum %d does not exist in DB", batchNum) + } + + return os.RemoveAll(checkpointPath) +} + +// Reset resets the StateDB to the checkpoint at the given batchNum. Reset +// does not delete the checkpoints between old current and the new current, +// those checkpoints will remain in the storage, and eventually will be +// deleted when MakeCheckpoint overwrites them. +func (s *StateDB) Reset(batchNum uint64) error { + checkpointPath := s.path + PATHBATCHNUM + strconv.Itoa(int(batchNum)) + currentPath := s.path + PATHCURRENT + + // remove 'current' + err := os.RemoveAll(currentPath) + if err != nil { + return err + } + // copy 'BatchNumX' to 'current' + cmd := exec.Command("cp", "-r", checkpointPath, currentPath) + err = cmd.Run() + if err != nil { + return err + } + + // open the new 'current' + sto, err := pebble.NewPebbleStorage(currentPath, false) + if err != nil { + return err + } + s.db = sto - //batchnums, err - return nil, nil + // get currentBatch num + s.currentBatch, err = s.GetCurrentBatch() + if err != nil { + return err + } + return nil } // GetAccount returns the account for the given Idx @@ -195,8 +301,8 @@ type LocalStateDB struct { // NewLocalStateDB returns a new LocalStateDB connected to the given // synchronizerDB -func NewLocalStateDB(synchronizerDB *StateDB, withMT bool, nLevels int) (*LocalStateDB, error) { - s, err := NewStateDB("", false, withMT, nLevels) +func NewLocalStateDB(path string, synchronizerDB *StateDB, withMT bool, nLevels int) (*LocalStateDB, error) { + s, err := NewStateDB(path, withMT, nLevels) if err != nil { return nil, err } @@ -206,16 +312,53 @@ func NewLocalStateDB(synchronizerDB *StateDB, withMT bool, nLevels int) (*LocalS }, nil } -// Reset performs a reset, getting the state from -// LocalStateDB.synchronizerStateDB for the given batchNum +// Reset performs a reset in the LocaStateDB. If fromSynchronizer is true, it +// gets the state from LocalStateDB.synchronizerStateDB for the given batchNum. If fromSynchronizer is false, get the state from LocalStateDB checkpoints. func (l *LocalStateDB) Reset(batchNum uint64, fromSynchronizer bool) error { - // TODO - // if fromSynchronizer==true: - // make copy from l.synchronizerStateDB at the batchNum to the localStateDB - // if synchronizerStateDB does not have batchNum, return err - // the localStateDB checkpoint is set to batchNum - // else fromSynchronizer==false: - // the localStateDB checkpoint is set to batchNum - // if localStateDB does not have batchNum, return err - return nil + + synchronizerCheckpointPath := l.synchronizerStateDB.path + PATHBATCHNUM + strconv.Itoa(int(batchNum)) + checkpointPath := l.path + PATHBATCHNUM + strconv.Itoa(int(batchNum)) + currentPath := l.path + PATHCURRENT + + if fromSynchronizer { + // use checkpoint from SynchronizerStateDB + if _, err := os.Stat(synchronizerCheckpointPath); os.IsNotExist(err) { + // if synchronizerStateDB does not have checkpoint at batchNum, return err + return fmt.Errorf("Checkpoint not exist in Synchronizer") + } + + // remove 'current' + err := os.RemoveAll(currentPath) + if err != nil { + return err + } + // copy synchronizer'BatchNumX' to 'current' + cmd := exec.Command("cp", "-r", synchronizerCheckpointPath, currentPath) + err = cmd.Run() + if err != nil { + return err + } + // copy synchronizer-'BatchNumX' to 'BatchNumX' + cmd = exec.Command("cp", "-r", synchronizerCheckpointPath, checkpointPath) + err = cmd.Run() + if err != nil { + return err + } + + // open the new 'current' + sto, err := pebble.NewPebbleStorage(currentPath, false) + if err != nil { + return err + } + l.db = sto + + // get currentBatch num + l.currentBatch, err = l.GetCurrentBatch() + if err != nil { + return err + } + return nil + } + // use checkpoint from LocalStateDB + return l.StateDB.Reset(batchNum) } diff --git a/db/statedb/statedb_test.go b/db/statedb/statedb_test.go index b99ce55..96e8cd8 100644 --- a/db/statedb/statedb_test.go +++ b/db/statedb/statedb_test.go @@ -2,6 +2,7 @@ package statedb import ( "encoding/hex" + "fmt" "io/ioutil" "math/big" "testing" @@ -38,7 +39,7 @@ func TestStateDBWithoutMT(t *testing.T) { dir, err := ioutil.TempDir("", "tmpdb") require.Nil(t, err) - sdb, err := NewStateDB(dir, false, false, 0) + sdb, err := NewStateDB(dir, false, 0) assert.Nil(t, err) // create test accounts @@ -96,12 +97,12 @@ func TestStateDBWithMT(t *testing.T) { dir, err := ioutil.TempDir("", "tmpdb") require.Nil(t, err) - sdb, err := NewStateDB(dir, false, true, 32) + sdb, err := NewStateDB(dir, true, 32) assert.Nil(t, err) // create test accounts var accounts []*common.Account - for i := 0; i < 100; i++ { + for i := 0; i < 20; i++ { accounts = append(accounts, newAccount(t, i)) } @@ -142,3 +143,128 @@ func TestStateDBWithMT(t *testing.T) { assert.Nil(t, err) assert.Equal(t, accounts[1].Nonce, a.Nonce) } + +func TestCheckpoints(t *testing.T) { + dir, err := ioutil.TempDir("", "sdb") + require.Nil(t, err) + + sdb, err := NewStateDB(dir, true, 32) + assert.Nil(t, err) + + // create test accounts + var accounts []*common.Account + for i := 0; i < 10; i++ { + accounts = append(accounts, newAccount(t, i)) + } + + // add test accounts + for i := 0; i < len(accounts); i++ { + _, err = sdb.MTCreateAccount(common.Idx(i), accounts[i]) + assert.Nil(t, err) + } + + // do checkpoints and check that currentBatch is correct + err = sdb.MakeCheckpoint() + assert.Nil(t, err) + cb, err := sdb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(1), cb) + + for i := 1; i < 10; i++ { + err = sdb.MakeCheckpoint() + assert.Nil(t, err) + + cb, err = sdb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(i+1), cb) + } + + // printCheckpoints(t, sdb.path) + + // reset checkpoint + err = sdb.Reset(3) + assert.Nil(t, err) + + // check that reset can be repeated (as there exist the 'current' and + // 'BatchNum3', from where the 'current' is a copy) + err = sdb.Reset(3) + require.Nil(t, err) + + // check that currentBatch is as expected after Reset + cb, err = sdb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(3), cb) + + // advance one checkpoint and check that currentBatch is fine + err = sdb.MakeCheckpoint() + assert.Nil(t, err) + cb, err = sdb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(4), cb) + + err = sdb.DeleteCheckpoint(uint64(9)) + assert.Nil(t, err) + err = sdb.DeleteCheckpoint(uint64(10)) + assert.Nil(t, err) + err = sdb.DeleteCheckpoint(uint64(9)) // does not exist, should return err + assert.NotNil(t, err) + err = sdb.DeleteCheckpoint(uint64(11)) // does not exist, should return err + assert.NotNil(t, err) + + // Create a LocalStateDB from the initial StateDB + dirLocal, err := ioutil.TempDir("", "ldb") + require.Nil(t, err) + ldb, err := NewLocalStateDB(dirLocal, sdb, true, 32) + assert.Nil(t, err) + + // get checkpoint 4 from sdb (StateDB) to ldb (LocalStateDB) + err = ldb.Reset(4, true) + assert.Nil(t, err) + // check that currentBatch is 4 after the Reset + cb, err = ldb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(4), cb) + // advance one checkpoint in ldb + err = ldb.MakeCheckpoint() + assert.Nil(t, err) + cb, err = ldb.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(5), cb) + + // Create a 2nd LocalStateDB from the initial StateDB + dirLocal2, err := ioutil.TempDir("", "ldb2") + require.Nil(t, err) + ldb2, err := NewLocalStateDB(dirLocal2, sdb, true, 32) + assert.Nil(t, err) + + // get checkpoint 4 from sdb (StateDB) to ldb (LocalStateDB) + err = ldb2.Reset(4, true) + assert.Nil(t, err) + // check that currentBatch is 4 after the Reset + cb, err = ldb2.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(4), cb) + // advance one checkpoint in ldb2 + err = ldb2.MakeCheckpoint() + assert.Nil(t, err) + cb, err = ldb2.GetCurrentBatch() + assert.Nil(t, err) + assert.Equal(t, uint64(5), cb) + + debug := false + if debug { + printCheckpoints(t, sdb.path) + printCheckpoints(t, ldb.path) + printCheckpoints(t, ldb2.path) + } +} + +func printCheckpoints(t *testing.T, path string) { + files, err := ioutil.ReadDir(path) + assert.Nil(t, err) + + fmt.Println(path) + for _, f := range files { + fmt.Println(" " + f.Name()) + } +} diff --git a/go.mod b/go.mod index c59d6a9..3e5e316 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,9 @@ require ( github.com/dghubble/sling v1.3.0 github.com/ethereum/go-ethereum v1.9.17 github.com/gobuffalo/packr/v2 v2.8.0 + github.com/iden3/go-iden3-core v0.0.8 github.com/iden3/go-iden3-crypto v0.0.6-0.20200806115047-327a8175d6eb - github.com/iden3/go-merkletree v0.0.0-20200807083900-f6f82d8375d5 + github.com/iden3/go-merkletree v0.0.0-20200815144208-1f1bd54b93ae github.com/jinzhu/gorm v1.9.15 github.com/jmoiron/sqlx v1.2.0 github.com/lib/pq v1.8.0 diff --git a/go.sum b/go.sum index f2f3e7f..46f5d6d 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -69,6 +70,8 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20200211180108-c7c1fbc02894 h1:JLaf/iINcLyjwbtTsCJjc6rtlASgHeIJPrB6QmwURnA= +github.com/certifi/gocertifi v0.0.0-20200211180108-c7c1fbc02894/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -78,6 +81,14 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/pebble v0.0.0-20200814004841-77c18adb0ee3 h1:ldllxzWS2OC6KatCsBBxrzKxx6LwKnO2jS0/2glSecM= +github.com/cockroachdb/pebble v0.0.0-20200814004841-77c18adb0ee3/go.mod h1:hU7vhtrqonEphNF+xt8/lHdaBprxmV1h8BOGrd9XwmQ= +github.com/cockroachdb/redact v0.0.0-20200622112456-cd282804bbd3 h1:2+dpIJzYMSbLi0587YXpi8tOJT52qCOI/1I0UNThc/I= +github.com/cockroachdb/redact v0.0.0-20200622112456-cd282804bbd3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -138,10 +149,14 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= @@ -174,6 +189,8 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -187,6 +204,7 @@ github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c/go.mod h1:6lQm79 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2-0.20200707131729-196ae77b8a26 h1:lMm2hD9Fy0ynom5+85/pbdkiYcBqM1JWmhpAXLmy0fw= github.com/golang/snappy v0.0.2-0.20200707131729-196ae77b8a26/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -260,6 +278,10 @@ github.com/iden3/go-merkletree v0.0.0-20200806171216-dd600560e44c h1:EzVMSVkwKdf github.com/iden3/go-merkletree v0.0.0-20200806171216-dd600560e44c/go.mod h1:Fc49UeywIsj8nUfb5lxBzmWrMeMmqzTJ5F0OcjdiEME= github.com/iden3/go-merkletree v0.0.0-20200807083900-f6f82d8375d5 h1:qvWSCt3AYxj65uTdW6lLSKlrbckcHghOAW4TwdfJ+N8= github.com/iden3/go-merkletree v0.0.0-20200807083900-f6f82d8375d5/go.mod h1:Fc49UeywIsj8nUfb5lxBzmWrMeMmqzTJ5F0OcjdiEME= +github.com/iden3/go-merkletree v0.0.0-20200815105542-2277604e65dd h1:AkPlODLWkgQT9p1k6LnO3aRLIIeVL9ENof/YW87QL14= +github.com/iden3/go-merkletree v0.0.0-20200815105542-2277604e65dd/go.mod h1:/MsQOzDnxK8X/u7XP9ZBoZwZ4gIm9FlwfqckH5dRuTM= +github.com/iden3/go-merkletree v0.0.0-20200815144208-1f1bd54b93ae h1:CC8oKPM+38/Dkq20QymuIjyRo0UFzJZeH5DPbGWURrI= +github.com/iden3/go-merkletree v0.0.0-20200815144208-1f1bd54b93ae/go.mod h1:/MsQOzDnxK8X/u7XP9ZBoZwZ4gIm9FlwfqckH5dRuTM= github.com/iden3/go-wasm3 v0.0.1/go.mod h1:j+TcAB94Dfrjlu5kJt83h2OqAU+oyNUTwNZnQyII1sI= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= @@ -294,6 +316,7 @@ github.com/karrick/godirwalk v1.15.3 h1:0a2pXOgtB16CqIqXTiT7+K9L73f74n/aNQUnH6Or github.com/karrick/godirwalk v1.15.3/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -402,6 +425,8 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -538,7 +563,10 @@ golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= +golang.org/x/exp v0.0.0-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc= +golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -547,10 +575,12 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20200329125638-4c31acba0007/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -601,16 +631,20 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,6 +653,7 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -634,6 +669,7 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200308013534-11ec41452d41/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/txselector/txselector.go b/txselector/txselector.go index 3bb65c9..f03e6ea 100644 --- a/txselector/txselector.go +++ b/txselector/txselector.go @@ -35,8 +35,8 @@ type TxSelector struct { } // NewTxSelector returns a *TxSelector -func NewTxSelector(synchronizerStateDB *statedb.StateDB, l2 *l2db.L2DB, maxL1UserTxs, maxL1OperatorTxs, maxTxs uint64) (*TxSelector, error) { - localAccountsDB, err := statedb.NewLocalStateDB(synchronizerStateDB, false, 0) // without merkletree +func NewTxSelector(dbpath string, synchronizerStateDB *statedb.StateDB, l2 *l2db.L2DB, maxL1UserTxs, maxL1OperatorTxs, maxTxs uint64) (*TxSelector, error) { + localAccountsDB, err := statedb.NewLocalStateDB(dbpath, synchronizerStateDB, false, 0) // without merkletree if err != nil { return nil, err } diff --git a/txselector/txselector_test.go b/txselector/txselector_test.go index c2fa5b5..03ac53f 100644 --- a/txselector/txselector_test.go +++ b/txselector/txselector_test.go @@ -104,12 +104,14 @@ func initTestDB(l2 *l2db.L2DB, sdb *statedb.StateDB) *mock.MockDB { func TestGetL2TxSelection(t *testing.T) { dir, err := ioutil.TempDir("", "tmpdb") require.Nil(t, err) - sdb, err := statedb.NewStateDB(dir, false, false, 0) + sdb, err := statedb.NewStateDB(dir, false, 0) assert.Nil(t, err) testL2DB := &l2db.L2DB{} // initTestDB(testL2DB, sdb) - txsel, err := NewTxSelector(sdb, testL2DB, 3, 3, 3) + txselDir, err := ioutil.TempDir("", "tmpTxSelDB") + require.Nil(t, err) + txsel, err := NewTxSelector(txselDir, sdb, testL2DB, 3, 3, 3) assert.Nil(t, err) fmt.Println(txsel)