diff options
author | Sonic <sonic@dexon.org> | 2018-11-20 12:05:00 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-03-12 12:19:09 +0800 |
commit | f982aba1c9a0b0c4db00b9032ae9751ffb3333ac (patch) | |
tree | a232d643bcc5fe2a9e1cc874e6224a9b7e36767f /dex/blockdb | |
parent | b2b6382ec557ab0895a1bbfe053a265fb470ec81 (diff) | |
download | dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar.gz dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar.bz2 dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar.lz dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar.xz dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.tar.zst dexon-f982aba1c9a0b0c4db00b9032ae9751ffb3333ac.zip |
dex: add BlockDB, which implements consensus core's blockdb.BlockDatabase (#36)
Diffstat (limited to 'dex/blockdb')
-rw-r--r-- | dex/blockdb/db.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/dex/blockdb/db.go b/dex/blockdb/db.go new file mode 100644 index 000000000..8282923fb --- /dev/null +++ b/dex/blockdb/db.go @@ -0,0 +1,54 @@ +package blockdb + +import ( + coreCommon "github.com/dexon-foundation/dexon-consensus/common" + coreBlockdb "github.com/dexon-foundation/dexon-consensus/core/blockdb" + coreTypes "github.com/dexon-foundation/dexon-consensus/core/types" + + "github.com/dexon-foundation/dexon/common" + "github.com/dexon-foundation/dexon/core/rawdb" + "github.com/dexon-foundation/dexon/ethdb" +) + +// BlockDB implement dexon-consensus BlockDatabase interface. +type BlockDB struct { + db ethdb.Database +} + +func NewDatabase(db ethdb.Database) *BlockDB { + return &BlockDB{db} +} + +func (d *BlockDB) Has(hash coreCommon.Hash) bool { + return rawdb.HasCoreBlock(d.db, common.Hash(hash)) +} + +func (d *BlockDB) Get(hash coreCommon.Hash) (coreTypes.Block, error) { + block := rawdb.ReadCoreBlock(d.db, common.Hash(hash)) + if block == nil { + return coreTypes.Block{}, coreBlockdb.ErrBlockDoesNotExist + } + return *block, nil +} + +func (d *BlockDB) GetAll() (coreBlockdb.BlockIterator, error) { + return nil, coreBlockdb.ErrNotImplemented +} + +func (d *BlockDB) Update(block coreTypes.Block) error { + if !d.Has(block.Hash) { + return coreBlockdb.ErrBlockDoesNotExist + } + rawdb.WriteCoreBlock(d.db, common.Hash(block.Hash), &block) + return nil +} + +func (d *BlockDB) Put(block coreTypes.Block) error { + if d.Has(block.Hash) { + return coreBlockdb.ErrBlockExists + } + rawdb.WriteCoreBlock(d.db, common.Hash(block.Hash), &block) + return nil +} + +func (d *BlockDB) Close() error { return nil } |