aboutsummaryrefslogtreecommitdiffstats
path: root/dex/blockdb
diff options
context:
space:
mode:
authorSonic <sonic@dexon.org>2018-11-20 12:05:00 +0800
committerWei-Ning Huang <w@dexon.org>2019-03-12 12:19:09 +0800
commitf982aba1c9a0b0c4db00b9032ae9751ffb3333ac (patch)
treea232d643bcc5fe2a9e1cc874e6224a9b7e36767f /dex/blockdb
parentb2b6382ec557ab0895a1bbfe053a265fb470ec81 (diff)
downloaddexon-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.go54
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 }