aboutsummaryrefslogtreecommitdiffstats
path: root/dex
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2018-12-18 10:02:30 +0800
committerWei-Ning Huang <w@byzantine-lab.io>2019-06-12 17:27:19 +0800
commit70ab62c1b72c6fef8dd2c8e405d7f9823f70f475 (patch)
tree114f68dd0281d972b18e875c3f34a83af7d5962d /dex
parentaa34cc1069a815ed66ec8fae0988fc4f29687bfd (diff)
downloadgo-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar.gz
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar.bz2
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar.lz
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar.xz
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.tar.zst
go-tangerine-70ab62c1b72c6fef8dd2c8e405d7f9823f70f475.zip
vendor: sync to latest core (#91)
- Implement new methods in db to cache DKG private key. - Implement new methods in db to cache compaction chain tip.
Diffstat (limited to 'dex')
-rw-r--r--dex/backend.go4
-rw-r--r--dex/db/db.go (renamed from dex/blockdb/db.go)58
-rw-r--r--dex/handler.go4
3 files changed, 51 insertions, 15 deletions
diff --git a/dex/backend.go b/dex/backend.go
index 5ea30b1a9..2c87425de 100644
--- a/dex/backend.go
+++ b/dex/backend.go
@@ -31,7 +31,7 @@ import (
"github.com/dexon-foundation/dexon/core/bloombits"
"github.com/dexon-foundation/dexon/core/rawdb"
"github.com/dexon-foundation/dexon/core/vm"
- "github.com/dexon-foundation/dexon/dex/blockdb"
+ dexDB "github.com/dexon-foundation/dexon/dex/db"
"github.com/dexon-foundation/dexon/dex/downloader"
"github.com/dexon-foundation/dexon/eth/filters"
"github.com/dexon-foundation/dexon/eth/gasprice"
@@ -170,7 +170,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Dexon, error) {
log.Info("DEXON Consensus DMoment", "time", dMoment)
dex.consensus = dexCore.NewConsensus(dMoment,
- dex.app, dex.governance, blockdb.NewDatabase(chainDb), dex.network, privKey, log.Root())
+ dex.app, dex.governance, dexDB.NewDatabase(chainDb), dex.network, privKey, log.Root())
return dex, nil
}
diff --git a/dex/blockdb/db.go b/dex/db/db.go
index 4f08a3edd..d51c2df54 100644
--- a/dex/blockdb/db.go
+++ b/dex/db/db.go
@@ -15,10 +15,11 @@
// along with the dexon-consensus library. If not, see
// <http://www.gnu.org/licenses/>.
-package blockdb
+package db
import (
coreCommon "github.com/dexon-foundation/dexon-consensus/common"
+ coreDKG "github.com/dexon-foundation/dexon-consensus/core/crypto/dkg"
coreDb "github.com/dexon-foundation/dexon-consensus/core/db"
coreTypes "github.com/dexon-foundation/dexon-consensus/core/types"
@@ -27,20 +28,20 @@ import (
"github.com/dexon-foundation/dexon/ethdb"
)
-// BlockDB implement dexon-consensus BlockDatabase interface.
-type BlockDB struct {
+// DB implement dexon-consensus BlockDatabase interface.
+type DB struct {
db ethdb.Database
}
-func NewDatabase(db ethdb.Database) *BlockDB {
- return &BlockDB{db}
+func NewDatabase(db ethdb.Database) *DB {
+ return &DB{db}
}
-func (d *BlockDB) HasBlock(hash coreCommon.Hash) bool {
+func (d *DB) HasBlock(hash coreCommon.Hash) bool {
return rawdb.HasCoreBlock(d.db, common.Hash(hash))
}
-func (d *BlockDB) GetBlock(hash coreCommon.Hash) (coreTypes.Block, error) {
+func (d *DB) GetBlock(hash coreCommon.Hash) (coreTypes.Block, error) {
block := rawdb.ReadCoreBlock(d.db, common.Hash(hash))
if block == nil {
return coreTypes.Block{}, coreDb.ErrBlockDoesNotExist
@@ -48,11 +49,11 @@ func (d *BlockDB) GetBlock(hash coreCommon.Hash) (coreTypes.Block, error) {
return *block, nil
}
-func (d *BlockDB) GetAllBlocks() (coreDb.BlockIterator, error) {
+func (d *DB) GetAllBlocks() (coreDb.BlockIterator, error) {
return nil, coreDb.ErrNotImplemented
}
-func (d *BlockDB) UpdateBlock(block coreTypes.Block) error {
+func (d *DB) UpdateBlock(block coreTypes.Block) error {
if !d.HasBlock(block.Hash) {
return coreDb.ErrBlockDoesNotExist
}
@@ -60,7 +61,7 @@ func (d *BlockDB) UpdateBlock(block coreTypes.Block) error {
return nil
}
-func (d *BlockDB) PutBlock(block coreTypes.Block) error {
+func (d *DB) PutBlock(block coreTypes.Block) error {
if d.HasBlock(block.Hash) {
return coreDb.ErrBlockExists
}
@@ -68,4 +69,39 @@ func (d *BlockDB) PutBlock(block coreTypes.Block) error {
return nil
}
-func (d *BlockDB) Close() error { return nil }
+func (d *DB) HasDKGPrivateKey(round uint64) (bool, error) {
+ return rawdb.HasCoreDKGPrivateKey(d.db, round)
+}
+
+func (d *DB) GetDKGPrivateKey(round uint64) (coreDKG.PrivateKey, error) {
+ key := rawdb.ReadCoreDKGPrivateKey(d.db, round)
+ if key == nil {
+ return coreDKG.PrivateKey{}, coreDb.ErrDKGPrivateKeyDoesNotExist
+ }
+ return *key, nil
+}
+
+func (d *DB) PutDKGPrivateKey(round uint64, key coreDKG.PrivateKey) error {
+ has, err := d.HasDKGPrivateKey(round)
+ if err != nil {
+ return err
+ }
+ if has {
+ return coreDb.ErrDKGPrivateKeyExists
+ }
+ return rawdb.WriteCoreDKGPrivateKey(d.db, round, &key)
+}
+
+func (d *DB) PutCompactionChainTipInfo(hash coreCommon.Hash, height uint64) error {
+ _, currentHeight := d.GetCompactionChainTipInfo()
+ if height <= currentHeight {
+ return coreDb.ErrInvalidCompactionChainTipHeight
+ }
+ return rawdb.WriteCoreCompactionChainTip(d.db, hash, height)
+}
+
+func (d *DB) GetCompactionChainTipInfo() (hash coreCommon.Hash, height uint64) {
+ return rawdb.ReadCoreCompactionChainTip(d.db)
+}
+
+func (d *DB) Close() error { return nil }
diff --git a/dex/handler.go b/dex/handler.go
index 620320f49..9174d8516 100644
--- a/dex/handler.go
+++ b/dex/handler.go
@@ -53,7 +53,7 @@ import (
"github.com/dexon-foundation/dexon/core"
"github.com/dexon-foundation/dexon/core/types"
"github.com/dexon-foundation/dexon/crypto"
- "github.com/dexon-foundation/dexon/dex/blockdb"
+ dexDB "github.com/dexon-foundation/dexon/dex/db"
"github.com/dexon-foundation/dexon/dex/downloader"
"github.com/dexon-foundation/dexon/dex/fetcher"
"github.com/dexon-foundation/dexon/ethdb"
@@ -158,7 +158,7 @@ func NewProtocolManager(
nodeTable: tab,
gov: gov,
blockchain: blockchain,
- cache: newCache(5120, blockdb.NewDatabase(chaindb)),
+ cache: newCache(5120, dexDB.NewDatabase(chaindb)),
chainconfig: config,
newPeerCh: make(chan *peer),
noMorePeers: make(chan struct{}),