diff --git a/domain/consensus/database/dbmanager.go b/domain/consensus/database/dbmanager.go index 7984da4b2..3474bcaf4 100644 --- a/domain/consensus/database/dbmanager.go +++ b/domain/consensus/database/dbmanager.go @@ -27,7 +27,11 @@ func (dbw *dbManager) Cursor(bucket model.DBBucket) (model.DBCursor, error) { } func (dbw *dbManager) Begin() (model.DBTransaction, error) { - panic("unimplemented") + transaction, err := dbw.db.Begin() + if err != nil { + return nil, err + } + return newDBTransaction(transaction), nil } // New returns wraps the given database as an instance of model.DBManager diff --git a/domain/consensus/database/transaction.go b/domain/consensus/database/transaction.go new file mode 100644 index 000000000..feb1bf8be --- /dev/null +++ b/domain/consensus/database/transaction.go @@ -0,0 +1,34 @@ +package database + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model" + "github.com/kaspanet/kaspad/infrastructure/db/database" +) + +type dbTransaction struct { + transaction database.Transaction +} + +func (d dbTransaction) Put(key model.DBKey, value []byte) error { + return d.transaction.Put(dbKeyToDatabaseKey(key), value) +} + +func (d dbTransaction) Delete(key model.DBKey) error { + return d.transaction.Delete(dbKeyToDatabaseKey(key)) +} + +func (d dbTransaction) Rollback() error { + return d.transaction.Rollback() +} + +func (d dbTransaction) Commit() error { + return d.Commit() +} + +func (d dbTransaction) RollbackUnlessClosed() error { + return d.RollbackUnlessClosed() +} + +func newDBTransaction(transaction database.Transaction) model.DBTransaction { + return &dbTransaction{transaction: transaction} +}