diff --git a/Makefile b/Makefile
index 9d57c83c3e82e708ffae5ef97f4474b17b6504ae..5185c96d64de2efd4e78d771f8899fb3e2ec36ec 100644
--- a/Makefile
+++ b/Makefile
@@ -106,9 +106,6 @@ test: semantics/z3/build/libz3.a
 test-lmdb: semantics/z3/build/libz3.a
 	TEST_DB=lmdb $(GORUN) build/ci.go test
 
-test-badger: semantics/z3/build/libz3.a
-	TEST_DB=badger $(GORUN) build/ci.go test
-
 test-bolt: semantics/z3/build/libz3.a
 	TEST_DB=bolt $(GORUN) build/ci.go test
 
diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
index aae56fa652f862ef77f4a6f429fa275a80448875..b570a00fcfdb75bea5567fdb49f5859eaf84430c 100644
--- a/cmd/geth/chaincmd.go
+++ b/cmd/geth/chaincmd.go
@@ -387,7 +387,6 @@ func exportPreimages(ctx *cli.Context) error {
 	return nil
 }
 
-// TODO [Issue 144] support BadgerDB
 func copyDb(ctx *cli.Context) error {
 	// Ensure we have a source chain directory to copy
 	if len(ctx.Args()) < 1 {
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index ddce8b0444d3d81d1e199b7476bd2c0e77b10eef..3ca6fa3e6aa2c04b320c85f8105185be8a007e30 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -443,7 +443,7 @@ var (
 	}
 	DatabaseFlag = cli.StringFlag{
 		Name:  "database",
-		Usage: "Which database software to use? Currently supported values: badger & bolt & lmdb",
+		Usage: "Which database software to use? Currently supported values: bolt & lmdb",
 		Value: "lmdb",
 	}
 	PrivateApiAddr = cli.StringFlag{
@@ -1279,8 +1279,7 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) {
 	}
 
 	databaseFlag := ctx.GlobalString(DatabaseFlag.Name)
-	cfg.BadgerDB = strings.EqualFold(databaseFlag, "badger") //case insensitive
-	cfg.LMDB = strings.EqualFold(databaseFlag, "lmdb")       //case insensitive
+	cfg.LMDB = strings.EqualFold(databaseFlag, "lmdb") //case insensitive
 	if cfg.LMDB && ctx.GlobalString(LMDBMapSizeFlag.Name) != "" {
 		var size datasize.ByteSize
 		err := size.UnmarshalText([]byte(ctx.GlobalString(LMDBMapSizeFlag.Name)))
diff --git a/ethdb/AbstractKV.md b/ethdb/AbstractKV.md
index 296abfa2e765cf3a0b134864f7cfa9d45d851e89..3062b7ee16b9666e6acc7506a1154402c8b3db61 100644
--- a/ethdb/AbstractKV.md
+++ b/ethdb/AbstractKV.md
@@ -1,12 +1,12 @@
 ## Target: 
 
-To build 1 key-value abstraction on top of Bolt, Badger and RemoteDB (our own read-only TCP protocol for key-value databases).
+To build 1 key-value abstraction on top of Bolt, LMDB and RemoteDB (our own read-only TCP protocol for key-value databases).
 
 ## Design principles:
 - No internal copies/allocations - all must be delegated to user. It means app must copy keys/values before put to database.  
 Make it part of contract - written clearly in docs, because it's unsafe (unsafe to put slice to DB and then change it). 
 Known problems: mutation.Put does copy internally. 
-- Low-level API: as close to original Bolt/Badger as possible.
+- Low-level API: as close to original LMDB as possible.
 - Expose concept of transaction - app-level code can .Rollback() or .Commit() at once. 
 
 ## Result interface:
@@ -58,10 +58,9 @@ type NoValuesCursor interface {
 
 #### Buckets concept:
 - Bucket is an interface, can’t be nil, can't return error
-- For Badger - auto-remove bucket from key prefix
 
 #### InMemory and ReadOnly modes: 
-- `NewBadger().InMem().ReadOnly().Open(ctx)` 
+- `NewLMDB().InMem().ReadOnly().Open(ctx)` 
 
 #### Context:
 - For transactions - yes
@@ -69,10 +68,8 @@ type NoValuesCursor interface {
 
 #### Cursor/Iterator: 
 - Cursor is an interface, can’t be nil, can't return error
-- `cursor.Prefix(prefix)` filtering keys by given prefix. Badger using i.Prefix. RemoteDb - to support server side filtering.
-- `cursor.Prefetch(1000)` - useful for Badger and Remote
-- Badger iterator require i.Close() call - abstraction automated it.
-- Badger iterator has AllVersions=true by default - why?
+- `cursor.Prefix(prefix)` filtering keys by given prefix. RemoteDb - to support server side filtering.
+- `cursor.Prefetch(1000)` - useful for Remote
 - Methods .First, .Next, .Seek - can return error. If err!=nil then key SHOULD be !=nil (can be []byte{} for example). Then looping code will look as: 
 ```go
 for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
@@ -84,23 +81,18 @@ for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
 ``` 
 
 #### Concept of Item:
-- Badger's concept of Item adding complexity, need hide it: `k,v,err := curor.First()`
 - No Lazy values, but can disable fetching values by: `.Cursor().PrefetchValues(false).FirstKey()`
-- Badger's metadata, ttl and version - don’t expose
 
 #### Managed/un-managed transactions
 - Tx is an interface
 - db.Update, db.View - yes
 - db.Batch - no
+- all keys and values returned by all method are valid until end of transaction
+- transaction object can be used only withing 1 goroutine
   
 #### Errors: 
 - Lib-Errors must be properly wrapped to project: for example ethdb.ErrKeyNotFound
 
-#### Badger’s streaming:
-- Need more research: why it’s based on callback instead of  “for channel”? Is it ordered? Is it stoppable? 
-- Is it equal to Bolt’s ForEach?
-
-#### Yeld: abstraction leak from RemoteDb, but need investigate how Badger Streams working here
 #### i.SeekTo vs i.Rewind: TBD
 #### in-memory LRU cache: TBD
 - Reverse Iterator
@@ -108,9 +100,7 @@ for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
 ## Not covered by Abstractions:
 - DB stats, bucket.Stats(), item.EstimatedSize()
 - buckets stats, buckets list
-- Merge operator of Badger - no
 - TTL of keys
-- Fetch AllVersions of Badger
 - Monotonic int DB.GetSequence 
 - Nested Buckets
 - Backups, tx.WriteTo
diff --git a/ethdb/abstractbench/abstract_bench_test.go b/ethdb/abstractbench/abstract_bench_test.go
index 168493100a24236aa8e42c721a72a1b2d4e730d3..95d2eec64dedcf48c69514bad7ee17fde14c29ea 100644
--- a/ethdb/abstractbench/abstract_bench_test.go
+++ b/ethdb/abstractbench/abstract_bench_test.go
@@ -12,10 +12,8 @@ import (
 
 var boltOriginDb *bolt.DB
 
-//var badgerOriginDb *badger.DB
 var boltKV *ethdb.BoltKV
 
-//var badgerDb ethdb.KV
 var lmdbKV *ethdb.LmdbKV
 
 var keysAmount = 100_000
@@ -32,7 +30,6 @@ func setupDatabases() func() {
 	}
 	//boltKV = ethdb.NewBolt().Path("/Users/alex.sharov/Library/Ethereum/geth-remove-me2/geth/chaindata").ReadOnly().MustOpen().(*ethdb.BoltKV)
 	boltKV = ethdb.NewBolt().Path("test1").MustOpen().(*ethdb.BoltKV)
-	//badgerDb = ethdb.NewBadger().Path("test2").MustOpen()
 	//lmdbKV = ethdb.NewLMDB().Path("/Users/alex.sharov/Library/Ethereum/geth-remove-me4/geth/chaindata_lmdb").ReadOnly().MustOpen().(*ethdb.LmdbKV)
 	lmdbKV = ethdb.NewLMDB().Path("test4").MustOpen().(*ethdb.LmdbKV)
 	var errOpen error
@@ -43,11 +40,6 @@ func setupDatabases() func() {
 		panic(errOpen)
 	}
 
-	//badgerOriginDb, errOpen = badger.Open(badger.DefaultOptions("test4"))
-	//if errOpen != nil {
-	//	panic(errOpen)
-	//}
-
 	if err := boltOriginDb.Update(func(tx *bolt.Tx) error {
 		for _, name := range dbutils.Buckets {
 			_, createErr := tx.CreateBucketIfNotExists(name, false)
@@ -94,38 +86,6 @@ func setupDatabases() func() {
 	//	panic(err)
 	//}
 	//
-	//if err := badgerDb.Update(ctx, func(tx ethdb.Tx) error {
-	//	defer func(t time.Time) { fmt.Println("abstract badger filled:", time.Since(t)) }(time.Now())
-	//
-	//	//for i := 0; i < keysAmount; i++ {
-	//	//	v := make([]byte, vsize)
-	//	//	k := make([]byte, 8)
-	//	//	binary.BigEndian.PutUint64(k, uint64(i))
-	//	//	bucket := tx.Bucket(dbutils.CurrentStateBucket)
-	//	//	if err := bucket.Put(k, common.CopyBytes(v)); err != nil {
-	//	//		panic(err)
-	//	//	}
-	//	//}
-	//
-	//	return nil
-	//}); err != nil {
-	//	panic(err)
-	//}
-	//
-	//if err := badgerOriginDb.Update(func(tx *badger.Txn) error {
-	//	defer func(t time.Time) { fmt.Println("pure badger filled:", time.Since(t)) }(time.Now())
-	//
-	//	for i := 0; i < keysAmount; i++ {
-	//		v := make([]byte, vsize)
-	//		k := make([]byte, 8)
-	//		binary.BigEndian.PutUint64(k, uint64(i))
-	//		_ = tx.Set(append(dbutils.CurrentStateBucket, k...), common.CopyBytes(v))
-	//	}
-	//
-	//	return nil
-	//}); err != nil {
-	//	panic(err)
-	//}
 	//
 	//if err := lmdbKV.Update(ctx, func(tx ethdb.Tx) error {
 	//	defer func(t time.Time) { fmt.Println("abstract lmdb filled:", time.Since(t)) }(time.Now())
@@ -189,32 +149,7 @@ func BenchmarkCursor(b *testing.B) {
 			}
 		}
 	})
-	//b.Run("abstract badger", func(b *testing.B) {
-	//	for i := 0; i < b.N; i++ {
-	//		if err := badgerDb.View(ctx, func(tx *ethdb.Tx) error {
-	//			bucket, err := tx.Bucket(dbutils.AccountsBucket)
-	//			if err != nil {
-	//				return err
-	//			}
-	//
-	//			c, err := bucket.CursorOpts().Cursor()
-	//			if err != nil {
-	//				return err
-	//			}
-	//
-	//			for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
-	//				if err != nil {
-	//					return err
-	//				}
-	//				_ = v
-	//			}
-	//
-	//			return nil
-	//		}); err != nil {
-	//			panic(err)
-	//		}
-	//	}
-	//})
+
 	b.Run("pure bolt", func(b *testing.B) {
 		for i := 0; i < b.N; i++ {
 
@@ -231,27 +166,5 @@ func BenchmarkCursor(b *testing.B) {
 			}
 		}
 	})
-	//b.Run("pure badger", func(b *testing.B) {
-	//	valFunc := func(val []byte) error {
-	//		_ = val
-	//		return nil
-	//	}
-	//	for i := 0; i < b.N; i++ {
-	//		if err := badgerOriginDb.View(func(tx *badger.Txn) error {
-	//			opts := badger.DefaultIteratorOptions
-	//			opts.Prefix = dbutils.AccountsBucket
-	//			it := tx.NewIterator(opts)
-	//
-	//			for it.Rewind(); it.Valid(); it.Next() {
-	//				item := it.Item()
-	//				_ = item.Key()
-	//				_ = item.Value(valFunc)
-	//			}
-	//			it.Close()
-	//			return nil
-	//		}); err != nil {
-	//			panic(err)
-	//		}
-	//	}
-	//})
+
 }
diff --git a/ethdb/database_test.go b/ethdb/database_test.go
index ae561029d705ce5bbf1b1ce023963036e3a6b83f..31cfc81498df6ca3f3cb2c5822941207fc5b8105 100644
--- a/ethdb/database_test.go
+++ b/ethdb/database_test.go
@@ -40,13 +40,6 @@ func newTestBoltDB() (Database, func()) {
 	}
 }
 
-func newTestBadgerDB() (Database, func()) {
-	db := NewObjectDatabase(NewBadger().InMem().MustOpen())
-	return db, func() {
-		db.Close()
-	}
-}
-
 func newTestLmdb() *ObjectDatabase {
 	return NewObjectDatabase(NewLMDB().InMem().MustOpen())
 }
@@ -68,13 +61,6 @@ func TestMemoryDB_PutGet(t *testing.T) {
 	testNoPanicAfterDbClosed(db, t)
 }
 
-func TestBadgerDB_PutGet(t *testing.T) {
-	db, remove := newTestBadgerDB()
-	defer remove()
-	testPutGet(db, t)
-	testNoPanicAfterDbClosed(db, t)
-}
-
 func TestLMDB_PutGet(t *testing.T) {
 	db := newTestLmdb()
 	defer db.Close()
@@ -218,12 +204,6 @@ func TestLMDB_ParallelPutGet(t *testing.T) {
 	testParallelPutGet(db)
 }
 
-func TestBadgerDB_ParallelPutGet(t *testing.T) {
-	db, remove := newTestBadgerDB()
-	defer remove()
-	testParallelPutGet(db)
-}
-
 func testParallelPutGet(db MinDatabase) {
 	const n = 8
 	var pending sync.WaitGroup
@@ -292,12 +272,6 @@ func TestBoltDB_Walk(t *testing.T) {
 	testWalk(db, t)
 }
 
-func TestBadgerDB_Walk(t *testing.T) {
-	db, remove := newTestBadgerDB()
-	defer remove()
-	testWalk(db, t)
-}
-
 func TestLMDB_Walk(t *testing.T) {
 	db := newTestLmdb()
 	defer db.Close()
diff --git a/ethdb/kv_abstract.go b/ethdb/kv_abstract.go
index 8f078d84c3ddde304067ff6b1b170e4267663080..0ababe3b1b323e89174e9da7f1de1b9ef9bdefb8 100644
--- a/ethdb/kv_abstract.go
+++ b/ethdb/kv_abstract.go
@@ -75,7 +75,6 @@ type DbProvider uint8
 
 const (
 	Bolt DbProvider = iota
-	Badger
 	Remote
 	Lmdb
 )
diff --git a/ethdb/kv_abstract_test.go b/ethdb/kv_abstract_test.go
index 99ed576367a1487e35fafc1ef5d5be1f425e6ae8..bbac948f4967223af3983088c32a31333405b7ca 100644
--- a/ethdb/kv_abstract_test.go
+++ b/ethdb/kv_abstract_test.go
@@ -4,7 +4,6 @@ import (
 	"context"
 	"errors"
 	"fmt"
-	"io"
 	"testing"
 	"time"
 
@@ -89,47 +88,31 @@ func TestManagedTx(t *testing.T) {
 func setupDatabases() (writeDBs []ethdb.KV, readDBs []ethdb.KV, close func()) {
 	writeDBs = []ethdb.KV{
 		ethdb.NewBolt().InMem().MustOpen(),
-		ethdb.NewLMDB().InMem().MustOpen(), // for remote db
-		ethdb.NewBadger().InMem().MustOpen(),
 		ethdb.NewLMDB().InMem().MustOpen(),
 		ethdb.NewLMDB().InMem().MustOpen(), // for remote2 db
 	}
 
-	serverIn, clientOut := io.Pipe()
-	clientIn, serverOut := io.Pipe()
 	conn := bufconn.Listen(1024 * 1024)
 
 	readDBs = []ethdb.KV{
 		writeDBs[0],
-		ethdb.NewRemote().InMem(clientIn, clientOut).MustOpen(),
-		writeDBs[2],
-		writeDBs[3],
+		writeDBs[1],
 		ethdb.NewRemote2().InMem(conn).MustOpen(),
 	}
 
-	serverCtx, serverCancel := context.WithCancel(context.Background())
-	go func() {
-		_ = remotedbserver.Server(serverCtx, writeDBs[1], serverIn, serverOut, nil)
-	}()
 	grpcServer := grpc.NewServer()
 	go func() {
-		remote.RegisterKVServer(grpcServer, remotedbserver.NewKvServer(writeDBs[4]))
+		remote.RegisterKVServer(grpcServer, remotedbserver.NewKvServer(writeDBs[2]))
 		if err := grpcServer.Serve(conn); err != nil {
 			log.Error("private RPC server fail", "err", err)
 		}
 	}()
 
 	return writeDBs, readDBs, func() {
-		serverIn.Close()
-		serverOut.Close()
-		clientIn.Close()
-		clientOut.Close()
 		grpcServer.Stop()
 
 		conn.Close()
 
-		serverCancel()
-
 		for _, db := range readDBs {
 			db.Close()
 		}
diff --git a/ethdb/kv_badger.go b/ethdb/kv_badger.go
deleted file mode 100644
index 16962950e5dda9fe385c63afb503d9418e109ef3..0000000000000000000000000000000000000000
--- a/ethdb/kv_badger.go
+++ /dev/null
@@ -1,555 +0,0 @@
-package ethdb
-
-import (
-	"context"
-	"errors"
-	"fmt"
-	"os"
-	"sync"
-	"time"
-
-	"github.com/dgraph-io/badger/v2"
-	"github.com/ledgerwatch/turbo-geth/common"
-	"github.com/ledgerwatch/turbo-geth/common/dbutils"
-	"github.com/ledgerwatch/turbo-geth/log"
-)
-
-// https://github.com/dgraph-io/badger#garbage-collection
-const gcPeriod = 5 * time.Minute
-
-type badgerOpts struct {
-	Badger badger.Options
-}
-
-func (opts badgerOpts) Path(path string) badgerOpts {
-	opts.Badger = opts.Badger.WithDir(path).WithValueDir(path)
-	return opts
-}
-
-func (opts badgerOpts) InMem() badgerOpts {
-	opts.Badger = opts.Badger.WithInMemory(true)
-	return opts
-}
-
-func (opts badgerOpts) ReadOnly() badgerOpts {
-	opts.Badger = opts.Badger.WithReadOnly(true)
-	return opts
-}
-
-func (opts badgerOpts) Open() (KV, error) {
-	logger := log.New("badger_db", opts.Badger.Dir)
-	opts.Badger = opts.Badger.WithMaxTableSize(128 << 20) // 128MB, default 64Mb
-
-	if opts.Badger.InMemory {
-		opts.Badger = opts.Badger.WithEventLogging(false).WithNumCompactors(1)
-	}
-
-	if !opts.Badger.InMemory {
-		if err := os.MkdirAll(opts.Badger.Dir, 0744); err != nil {
-			return nil, fmt.Errorf("could not create dir: %s, %w", opts.Badger.Dir, err)
-		}
-	}
-
-	badgerDB, err := badger.Open(opts.Badger)
-	if err != nil {
-		return nil, err
-	}
-
-	db := &badgerKV{
-		opts:   opts,
-		badger: badgerDB,
-		log:    logger,
-		wg:     &sync.WaitGroup{},
-	}
-
-	if !opts.Badger.InMemory {
-		ctx, ctxCancel := context.WithCancel(context.Background())
-		db.stopGC = ctxCancel
-		db.wg.Add(1)
-		go func() {
-			defer db.wg.Done()
-			gcTicker := time.NewTicker(gcPeriod)
-			defer gcTicker.Stop()
-			db.vlogGCLoop(ctx, gcTicker)
-		}()
-	}
-
-	return db, nil
-}
-
-func (opts badgerOpts) MustOpen() KV {
-	db, err := opts.Open()
-	if err != nil {
-		panic(err)
-	}
-	return db
-}
-
-type badgerKV struct {
-	opts   badgerOpts
-	badger *badger.DB
-	log    log.Logger
-	stopGC context.CancelFunc
-	wg     *sync.WaitGroup
-}
-
-func NewBadger() badgerOpts {
-	return badgerOpts{Badger: badger.DefaultOptions("")}
-}
-
-func (db *badgerKV) vlogGCLoop(ctx context.Context, gcTicker *time.Ticker) {
-	// DB.RunValueLogGC():
-	// This method is designed to do garbage collection while Badger is online.
-	// Along with randomly picking a file, it uses statistics generated by the LSM-tree compactions
-	// to pick files that are likely to lead to maximum space reclamation. It is recommended to be called
-	// during periods of low activity in your system, or periodically. One call would only result in removal
-	// of at max one log file. As an optimization, you could also immediately re-run it whenever
-	// it returns nil error (indicating a successful value log GC), as shown below.
-	i := 0
-	for db.badger != nil {
-		for { // do work until badger.ErrNoRewrite
-			err := db.badger.RunValueLogGC(0.7)
-			if err == nil {
-				i++
-			}
-			if errors.Is(err, badger.ErrNoRewrite) {
-				db.log.Info("Badger GC happened", "rewritten_vlog_files", i)
-				i = 0
-				break
-			}
-		}
-
-		select {
-		case <-ctx.Done():
-			return
-		case <-gcTicker.C:
-		}
-	}
-}
-
-// Close closes BoltKV
-// All transactions must be closed before closing the database.
-func (db *badgerKV) Close() {
-	if db.stopGC != nil {
-		db.stopGC()
-	}
-	db.wg.Wait()
-	if db.badger != nil {
-		if err := db.badger.Close(); err != nil {
-			db.log.Warn("failed to close badger DB", "err", err)
-		} else {
-			db.log.Info("badger database closed")
-		}
-		db.badger = nil
-	}
-}
-
-func (db *badgerKV) DiskSize(_ context.Context) (uint64, error) {
-	lsm, vlog := db.badger.Size()
-	return uint64(lsm + vlog), nil
-}
-
-func (db *badgerKV) IdealBatchSize() int {
-	return int(db.badger.MaxBatchSize() / 2)
-}
-
-func (db *badgerKV) Begin(ctx context.Context, writable bool) (Tx, error) {
-	if db.badger == nil {
-		return nil, fmt.Errorf("db closed")
-	}
-
-	db.wg.Add(1)
-	return &badgerTx{
-		db:     db,
-		ctx:    ctx,
-		badger: db.badger.NewTransaction(writable),
-	}, nil
-}
-
-type badgerTx struct {
-	ctx context.Context
-	db  *badgerKV
-
-	badger  *badger.Txn
-	cursors []*badger.Iterator
-}
-
-type badgerBucket struct {
-	nameLen uint
-	tx      *badgerTx
-	prefix  []byte
-	id      int
-}
-
-type badgerCursor struct {
-	badgerOpts badger.IteratorOptions
-	ctx        context.Context
-	bucket     badgerBucket
-	prefix     []byte
-
-	badger *badger.Iterator
-
-	k   []byte
-	v   []byte
-	err error
-}
-
-func (db *badgerKV) View(ctx context.Context, f func(tx Tx) error) (err error) {
-	if db.badger == nil {
-		return fmt.Errorf("db closed")
-	}
-
-	db.wg.Add(1)
-	defer db.wg.Done()
-
-	t := &badgerTx{db: db, ctx: ctx}
-	return db.badger.View(func(tx *badger.Txn) error {
-		defer t.closeCursors()
-		t.badger = tx
-		return f(t)
-	})
-}
-
-func (db *badgerKV) Update(ctx context.Context, f func(tx Tx) error) (err error) {
-	if db.badger == nil {
-		return fmt.Errorf("db closed")
-	}
-
-	db.wg.Add(1)
-	defer db.wg.Done()
-
-	t := &badgerTx{db: db, ctx: ctx}
-	return db.badger.Update(func(tx *badger.Txn) error {
-		defer t.closeCursors()
-		t.badger = tx
-		return f(t)
-	})
-}
-
-func (tx *badgerTx) Bucket(name []byte) Bucket {
-	b := badgerBucket{tx: tx, nameLen: uint(len(name)), id: dbutils.BucketsCfg[string(name)].ID}
-	b.prefix = name
-	return b
-}
-
-func (tx *badgerTx) Commit(ctx context.Context) error {
-	if tx.db.badger == nil {
-		return fmt.Errorf("db closed")
-	}
-
-	defer tx.db.wg.Done()
-	tx.closeCursors()
-	return tx.badger.Commit()
-}
-
-func (tx *badgerTx) Rollback() {
-	if tx.db.badger == nil {
-		return
-	}
-
-	defer tx.db.wg.Done()
-	tx.closeCursors()
-	tx.badger.Discard()
-}
-
-func (tx *badgerTx) closeCursors() {
-	for _, i := range tx.cursors {
-		if i != nil {
-			i.Close()
-		}
-	}
-	tx.cursors = tx.cursors[:0]
-}
-
-func (c *badgerCursor) Prefix(v []byte) Cursor {
-	c.prefix = append(c.prefix[:0], c.bucket.prefix[:c.bucket.nameLen]...)
-	c.prefix = append(c.prefix, v...)
-
-	c.badgerOpts.Prefix = append(c.badgerOpts.Prefix[:0], c.prefix...)
-	return c
-}
-
-func (c *badgerCursor) MatchBits(n uint) Cursor {
-	panic("not implemented yet")
-}
-
-func (c *badgerCursor) Prefetch(v uint) Cursor {
-	c.badgerOpts.PrefetchSize = int(v)
-	return c
-}
-
-func (c *badgerCursor) NoValues() NoValuesCursor {
-	c.badgerOpts.PrefetchValues = false
-	return &badgerNoValuesCursor{badgerCursor: c}
-}
-
-func (b badgerBucket) Get(key []byte) (val []byte, err error) {
-	select {
-	case <-b.tx.ctx.Done():
-		return nil, b.tx.ctx.Err()
-	default:
-	}
-
-	var item *badger.Item
-	b.prefix = append(b.prefix[:b.nameLen], key...)
-	item, err = b.tx.badger.Get(b.prefix)
-	if err != nil {
-		if errors.Is(err, badger.ErrKeyNotFound) {
-			return nil, nil
-		}
-		return nil, err
-	}
-	if item != nil {
-		val, err = item.ValueCopy(nil) // can improve this by using pool
-	}
-	if val == nil {
-		val = []byte{}
-	}
-	return val, err
-}
-
-func (b badgerBucket) Put(key []byte, value []byte) error {
-	select {
-	case <-b.tx.ctx.Done():
-		return b.tx.ctx.Err()
-	default:
-	}
-
-	b.prefix = append(b.prefix[:b.nameLen], key...) // avoid passing buffer in Put, need copy bytes
-	return b.tx.badger.Set(common.CopyBytes(b.prefix), value)
-}
-
-func (b badgerBucket) Delete(key []byte) error {
-	select {
-	case <-b.tx.ctx.Done():
-		return b.tx.ctx.Err()
-	default:
-	}
-
-	b.prefix = append(b.prefix[:b.nameLen], key...)
-	return b.tx.badger.Delete(b.prefix)
-}
-
-func (b badgerBucket) Size() (uint64, error) {
-	panic("not implemented")
-}
-
-func (b badgerBucket) Clear() error {
-	return b.tx.db.badger.DropPrefix(dbutils.Buckets[b.id])
-}
-
-func (b badgerBucket) Cursor() Cursor {
-	c := &badgerCursor{bucket: b, ctx: b.tx.ctx, badgerOpts: badger.DefaultIteratorOptions}
-	c.prefix = append(c.prefix[:0], c.bucket.prefix[:c.bucket.nameLen]...)
-	c.badgerOpts.Prefix = append(c.badgerOpts.Prefix[:0], c.prefix...)
-	return c
-}
-
-func (c *badgerCursor) initCursor() {
-	if c.badger != nil {
-		return
-	}
-
-	tx := c.bucket.tx
-	c.badger = tx.badger.NewIterator(c.badgerOpts)
-
-	// add to auto-cleanup on end of transactions
-	if tx.cursors == nil {
-		tx.cursors = make([]*badger.Iterator, 0, 1)
-	}
-	tx.cursors = append(tx.cursors, c.badger)
-}
-
-func (c *badgerCursor) First() ([]byte, []byte, error) {
-	c.initCursor()
-
-	c.badger.Rewind()
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, c.v, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-	if c.badgerOpts.PrefetchValues {
-		c.v, c.err = item.ValueCopy(c.v) // bech show: using .ValueCopy on same buffer has same speed as item.Value()
-	}
-	if c.err != nil {
-		return []byte{}, nil, c.err
-	}
-	if c.v == nil {
-		c.v = []byte{}
-	}
-	return c.k, c.v, nil
-}
-
-func (c *badgerCursor) Seek(seek []byte) ([]byte, []byte, error) {
-	select {
-	case <-c.ctx.Done():
-		return []byte{}, nil, c.ctx.Err()
-	default:
-	}
-
-	c.initCursor()
-
-	c.badger.Seek(append(c.prefix[:c.bucket.nameLen], seek...))
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, c.v, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-	if c.badgerOpts.PrefetchValues {
-		c.v, c.err = item.ValueCopy(c.v)
-	}
-	if c.err != nil {
-		return []byte{}, nil, c.err
-	}
-	if c.v == nil {
-		c.v = []byte{}
-	}
-
-	return c.k, c.v, nil
-}
-
-func (c *badgerCursor) SeekTo(seek []byte) ([]byte, []byte, error) {
-	return c.Seek(seek)
-}
-
-func (c *badgerCursor) Next() ([]byte, []byte, error) {
-	select {
-	case <-c.ctx.Done():
-		return []byte{}, nil, c.ctx.Err() // on error key should be != nil
-	default:
-	}
-
-	c.badger.Next()
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, c.v, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-	if c.badgerOpts.PrefetchValues {
-		c.v, c.err = item.ValueCopy(c.v)
-	}
-	if c.err != nil {
-		return []byte{}, nil, c.err // on error key should be != nil
-	}
-	if c.v == nil {
-		c.v = []byte{}
-	}
-	return c.k, c.v, nil
-}
-
-func (c *badgerCursor) Delete(key []byte) error {
-	select {
-	case <-c.ctx.Done():
-		return c.ctx.Err()
-	default:
-	}
-
-	return c.bucket.Delete(key)
-}
-
-func (c *badgerCursor) Put(key []byte, value []byte) error {
-	select {
-	case <-c.ctx.Done():
-		return c.ctx.Err()
-	default:
-	}
-
-	return c.bucket.Put(key, value)
-}
-
-func (c *badgerCursor) Append(key []byte, value []byte) error {
-	return c.Put(key, value)
-}
-
-func (c *badgerCursor) Walk(walker func(k, v []byte) (bool, error)) error {
-	for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
-		if err != nil {
-			return err
-		}
-		ok, err := walker(k, v)
-		if err != nil {
-			return err
-		}
-		if !ok {
-			return nil
-		}
-	}
-	return nil
-}
-
-type badgerNoValuesCursor struct {
-	*badgerCursor
-}
-
-func (c *badgerNoValuesCursor) Walk(walker func(k []byte, vSize uint32) (bool, error)) error {
-	for k, vSize, err := c.First(); k != nil; k, vSize, err = c.Next() {
-		if err != nil {
-			return err
-		}
-		ok, err := walker(k, vSize)
-		if err != nil {
-			return err
-		}
-		if !ok {
-			return nil
-		}
-	}
-	return nil
-}
-
-func (c *badgerNoValuesCursor) First() ([]byte, uint32, error) {
-	c.initCursor()
-	c.badger.Rewind()
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, 0, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-	return c.k, uint32(item.ValueSize()), nil
-}
-
-func (c *badgerNoValuesCursor) Seek(seek []byte) ([]byte, uint32, error) {
-	select {
-	case <-c.ctx.Done():
-		return []byte{}, 0, c.ctx.Err()
-	default:
-	}
-
-	c.initCursor()
-
-	c.badger.Seek(append(c.prefix[:c.bucket.nameLen], seek...))
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, 0, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-
-	return c.k, uint32(item.ValueSize()), nil
-}
-
-func (c *badgerNoValuesCursor) SeekTo(seek []byte) ([]byte, uint32, error) {
-	return c.Seek(seek)
-}
-
-func (c *badgerNoValuesCursor) Next() ([]byte, uint32, error) {
-	select {
-	case <-c.ctx.Done():
-		return []byte{}, 0, c.ctx.Err()
-	default:
-	}
-
-	c.badger.Next()
-	if !c.badger.Valid() {
-		c.k, c.v = nil, nil
-		return c.k, 0, nil
-	}
-	item := c.badger.Item()
-	c.k = item.Key()[c.bucket.nameLen:]
-	return c.k, uint32(item.ValueSize()), nil
-}
diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go
index 88fcb09bd4f08e7bf02d415a90e28e00f2e9b364..7cfc23e5b8e894e3d69d7debdb34a7d8d83a39b9 100644
--- a/ethdb/memory_database.go
+++ b/ethdb/memory_database.go
@@ -24,8 +24,6 @@ func NewMemDatabase() *ObjectDatabase {
 	switch debug.TestDB() {
 	case "bolt":
 		return NewObjectDatabase(NewBolt().InMem().MustOpen())
-	case "badger":
-		return NewObjectDatabase(NewBadger().InMem().MustOpen())
 	case "lmdb":
 		return NewObjectDatabase(NewLMDB().InMem().MustOpen())
 	default:
diff --git a/ethdb/object_db.go b/ethdb/object_db.go
index 39e33f09a015c1d3e0ae4f8dbb8667974700b0ae..4475f7ca0a1f286389792d77e64a86513bec0184 100644
--- a/ethdb/object_db.go
+++ b/ethdb/object_db.go
@@ -70,8 +70,6 @@ func Open(path string) (*ObjectDatabase, error) {
 	switch true {
 	case testDB == "lmdb" || strings.HasSuffix(path, "_lmdb"):
 		kv, err = NewLMDB().Path(path).Open()
-	case testDB == "badger" || strings.HasSuffix(path, "_badger"):
-		kv, err = NewBadger().Path(path).Open()
 	case testDB == "bolt" || strings.HasSuffix(path, "_bolt"):
 		kv, err = NewBolt().Path(path).Open()
 	default:
@@ -421,8 +419,6 @@ func (db *ObjectDatabase) MemCopy() *ObjectDatabase {
 		mem = NewObjectDatabase(NewLMDB().InMem().MustOpen())
 	case *BoltKV:
 		mem = NewObjectDatabase(NewBolt().InMem().MustOpen())
-	case *badgerKV:
-		mem = NewObjectDatabase(NewBadger().InMem().MustOpen())
 	}
 
 	if err := db.kv.View(context.Background(), func(readTx Tx) error {
diff --git a/go.mod b/go.mod
index f7a3f47926832fa0698d7d6c0d52edff79ac5544..4d66f388fb5623e456486088645c4a9a98517f4f 100644
--- a/go.mod
+++ b/go.mod
@@ -18,7 +18,6 @@ require (
 	github.com/cloudflare/cloudflare-go v0.10.6
 	github.com/davecgh/go-spew v1.1.1
 	github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea
-	github.com/dgraph-io/badger/v2 v2.0.3
 	github.com/dlclark/regexp2 v1.2.0 // indirect
 	github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf
 	github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87
diff --git a/go.sum b/go.sum
index c89c744de413a3badd8ca3b5275813012cf7abf2..2daf39f4f0ffd97e548a571db82cb11071862b42 100644
--- a/go.sum
+++ b/go.sum
@@ -22,8 +22,6 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L
 github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
 github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM=
-github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
 github.com/JekaMas/notify v0.9.4 h1:Ns+DRf9kho8T0yQNSKoZqAnbvO/Hg3KmJCUaoRhL7MM=
 github.com/JekaMas/notify v0.9.4/go.mod h1:KYZd45vBSOYP2/9lY38EjZtvKRZMfgWaJk8bvBxhIYk=
 github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
@@ -67,12 +65,9 @@ github.com/cloudflare/cloudflare-go v0.10.6/go.mod h1:dcRl7AXBH5Bf7QFTBVc3TRzwvo
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 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=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
@@ -82,14 +77,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0=
 github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
-github.com/dgraph-io/badger/v2 v2.0.3 h1:inzdf6VF/NZ+tJ8RwwYMjJMvsOALTHYdozn0qSl6XJI=
-github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM=
-github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3 h1:MQLRM35Pp0yAyBYksjbj1nZI/w6eyRY/mWoM1sFf4kU=
-github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
-github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk=
 github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
@@ -97,8 +86,6 @@ github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf h1:sh8rkQZavChcmak
 github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87 h1:OMbqMXf9OAXzH1dDH82mQMrddBE8LIIwDtxeK4wE1/A=
 github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA=
-github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcrVP6vyzO4dusgi/HnceHTgxSejUM=
 github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -317,8 +304,6 @@ github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 h1:8DPul/X0IT/1TNMIxoKLwde
 github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/rs/xhandler v0.0.0-20170707052532-1eb70cf1520d h1:8Tt7DYYdFqLlOIuyiE0RluKem4T+048AUafnIjH80wg=
 github.com/rs/xhandler v0.0.0-20170707052532-1eb70cf1520d/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ=
-github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/shirou/gopsutil v2.20.5+incompatible h1:tYH07UPoQt0OCQdgWWMgYHy3/a9bcxNpBIysykNIP7I=
@@ -329,18 +314,13 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
-github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
 github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
 github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/status-im/keycard-go v0.0.0-20190424133014-d95853db0f48 h1:ju5UTwk5Odtm4trrY+4Ca4RMj5OyXbmVeDAVad2T0Jw=
 github.com/status-im/keycard-go v0.0.0-20190424133014-d95853db0f48/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
@@ -362,7 +342,6 @@ github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
 github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
 github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
 github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
@@ -378,7 +357,6 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
@@ -399,7 +377,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
 golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
@@ -418,12 +395,10 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/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-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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/node/config.go b/node/config.go
index 49a557f83fac6253e03f6dc621998decad035e71..5fcc08e1e33e709714d68a7ba7b4c40500aca017 100644
--- a/node/config.go
+++ b/node/config.go
@@ -188,10 +188,9 @@ type Config struct {
 	// Logger is a custom logger to use with the p2p.Server.
 	Logger log.Logger `toml:",omitempty"`
 
-	// Whether to use BadgerDB or BoltDB or LMDB.
-	BadgerDB bool
-	LMDB     bool
-	Bolt     bool
+	// Whether to use BoltDB or LMDB.
+	LMDB bool
+	Bolt bool
 
 	// Address to listen to when launchig listener for remote database access
 	// empty string means not to start the listener
diff --git a/node/node.go b/node/node.go
index 16368e02922e5a165ae23dfc2c719e559ca0c2f7..648a6bc495e948a2fdd26ae508c692cd498868cc 100644
--- a/node/node.go
+++ b/node/node.go
@@ -651,11 +651,6 @@ func (n *Node) OpenDatabase(name string) (*ethdb.ObjectDatabase, error) {
 		return ethdb.NewMemDatabase(), nil
 	}
 
-	if n.config.BadgerDB {
-		log.Info("Opening Database (Badger)")
-		return ethdb.Open(n.config.ResolvePath(name + "_badger"))
-	}
-
 	if n.config.Bolt {
 		log.Info("Opening Database (Bolt)")
 		return ethdb.Open(n.config.ResolvePath(name + "_bolt"))
diff --git a/node/service.go b/node/service.go
index 38c979cb57716ca5d6b17d20eaa31776408c1761..f845c9ff5049a8f2d9d4cfac1efe6a8b91430ecc 100644
--- a/node/service.go
+++ b/node/service.go
@@ -51,11 +51,6 @@ func (ctx *ServiceContext) OpenDatabase(name string) (*ethdb.ObjectDatabase, err
 		return ethdb.NewMemDatabase(), nil
 	}
 
-	if ctx.Config.BadgerDB {
-		log.Info("Opening Database (Badger)")
-		return ethdb.Open(ctx.Config.ResolvePath(name + "_badger"))
-	}
-
 	if ctx.Config.Bolt {
 		log.Info("Opening Database (Bolt)")
 		return ethdb.Open(ctx.Config.ResolvePath(name + "_bolt"))