--- /dev/null
+package db
+
+import . "github.com/tendermint/tmlibs/common"
+
+type DB interface {
+ Get([]byte) []byte
+ Set([]byte, []byte)
+ SetSync([]byte, []byte)
+ Delete([]byte)
+ DeleteSync([]byte)
+ Close()
+ NewBatch() Batch
+ Iterator() Iterator
+ IteratorPrefix([]byte) Iterator
+
+ // For debugging
+ Print()
+ Stats() map[string]string
+}
+
+type Batch interface {
+ Set(key, value []byte)
+ Delete(key []byte)
+ Write()
+}
+
+type Iterator interface {
+ Next() bool
+
+ Key() []byte
+ Value() []byte
+ Seek([]byte) bool
+
+ Release()
+ Error() error
+}
+
+//-----------------------------------------------------------------------------
+
+const (
+ LevelDBBackendStr = "leveldb" // legacy, defaults to goleveldb.
+ CLevelDBBackendStr = "cleveldb"
+ GoLevelDBBackendStr = "goleveldb"
+ MemDBBackendStr = "memdb"
+)
+
+type dbCreator func(name string, dir string) (DB, error)
+
+var backends = map[string]dbCreator{}
+
+func registerDBCreator(backend string, creator dbCreator, force bool) {
+ _, ok := backends[backend]
+ if !force && ok {
+ return
+ }
+ backends[backend] = creator
+}
+
+func NewDB(name string, backend string, dir string) DB {
+ db, err := backends[backend](name, dir)
+ if err != nil {
+ PanicSanity(Fmt("Error initializing DB: %v", err))
+ }
+ return db
+}