aboutsummaryrefslogtreecommitdiffstats
path: root/dex
diff options
context:
space:
mode:
authorWei-Ning Huang <w@cobinhood.com>2018-10-12 13:54:32 +0800
committerWei-Ning Huang <w@dexon.org>2019-03-12 12:19:09 +0800
commitcb49d3ced400076fb5d58b98c5e33edece2aa2d4 (patch)
treea53df3d3af9434e658dbb40da635936ea5538dea /dex
parent99c57e329cdc2d4c75305d6df8463f77c71e608d (diff)
downloaddexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.tar.gz
dexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.tar.zst
dexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.zip
dex: governance: implement governance interface
Diffstat (limited to 'dex')
-rw-r--r--dex/api_backend.go7
-rw-r--r--dex/backend.go32
-rw-r--r--dex/governance.go15
3 files changed, 38 insertions, 16 deletions
diff --git a/dex/api_backend.go b/dex/api_backend.go
index 8a147aab2..7f2677dc8 100644
--- a/dex/api_backend.go
+++ b/dex/api_backend.go
@@ -29,6 +29,7 @@ import (
"github.com/dexon-foundation/dexon/core/state"
"github.com/dexon-foundation/dexon/core/types"
"github.com/dexon-foundation/dexon/core/vm"
+ "github.com/dexon-foundation/dexon/eth/downloader"
"github.com/dexon-foundation/dexon/eth/gasprice"
"github.com/dexon-foundation/dexon/ethdb"
@@ -181,9 +182,9 @@ func (b *DexAPIBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.S
return b.dex.TxPool().SubscribeNewTxsEvent(ch)
}
-//func (b *DexAPIBackend) Downloader() *downloader.Downloader {
-// return b.dex.Downloader()
-//}
+func (b *DexAPIBackend) Downloader() *downloader.Downloader {
+ return b.dex.Downloader()
+}
func (b *DexAPIBackend) ProtocolVersion() int {
return b.dex.DexVersion()
diff --git a/dex/backend.go b/dex/backend.go
index 3b7fde400..8213f582e 100644
--- a/dex/backend.go
+++ b/dex/backend.go
@@ -31,6 +31,8 @@ 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/gasprice"
+ "github.com/dexon-foundation/dexon/eth/downloader"
"github.com/dexon-foundation/dexon/ethdb"
"github.com/dexon-foundation/dexon/event"
"github.com/dexon-foundation/dexon/internal/ethapi"
@@ -64,6 +66,8 @@ type Dexon struct {
bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests
bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports
+ APIBackend *DexAPIBackend
+
// Dexon consensus.
app *DexconApp
governance *DexconGovernance
@@ -81,7 +85,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Dexon, error) {
if err != nil {
panic(err)
}
- gov := NewDexconGovernance()
network := NewDexconNetwork()
// TODO(w): replace this with node key.
@@ -116,7 +119,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Dexon, error) {
shutdownChan: make(chan bool),
networkID: config.NetworkId,
bloomRequests: make(chan chan *bloombits.Retrieval),
- governance: gov,
network: network,
blockdb: db,
engine: dexcon.New(&params.DexconConfig{}),
@@ -145,9 +147,16 @@ func New(ctx *node.ServiceContext, config *Config) (*Dexon, error) {
}
dex.txPool = core.NewTxPool(config.TxPool, dex.chainConfig, dex.blockchain)
- dex.app = NewDexconApp(dex.txPool, dex.blockchain, gov, chainDb, config, vmConfig)
+ dex.APIBackend = &DexAPIBackend{dexon, nil}
+ gpoParams := config.GPO
+ //if gpoParams.Default == nil {
+ // gpoParams.Default = config.MinerGasPrice
+ //}
+ dex.APIBackend.gpo = gasprice.NewOracle(dex.APIBackend, gpoParams)
- dex.consensus = dexCore.NewConsensus(dex.app, gov, db, network, privKey)
+ dex.governance = NewDexconGovernance(dex.APIBackend)
+ dex.app = NewDexconApp(dex.txPool, dex.blockchain, dex.governance, chainDb, config, vmConfig)
+ dex.consensus = dexCore.NewConsensus(dex.app, dex.governance, db, network, privKey)
return dex, nil
}
@@ -180,10 +189,11 @@ func CreateDB(ctx *node.ServiceContext, config *Config, name string) (ethdb.Data
return db, nil
}
-func (d *Dexon) AccountManager() *accounts.Manager { return d.accountManager }
-func (d *Dexon) BlockChain() *core.BlockChain { return d.blockchain }
-func (d *Dexon) TxPool() *core.TxPool { return d.txPool }
-func (d *Dexon) DexVersion() int { return int(d.protocolManager.SubProtocols[0].Version) }
-func (d *Dexon) EventMux() *event.TypeMux { return d.eventMux }
-func (d *Dexon) Engine() consensus.Engine { return d.engine }
-func (d *Dexon) ChainDb() ethdb.Database { return d.chainDb }
+func (d *Dexon) AccountManager() *accounts.Manager { return d.accountManager }
+func (d *Dexon) BlockChain() *core.BlockChain { return d.blockchain }
+func (d *Dexon) TxPool() *core.TxPool { return d.txPool }
+func (d *Dexon) DexVersion() int { return int(d.protocolManager.SubProtocols[0].Version) }
+func (d *Dexon) EventMux() *event.TypeMux { return d.eventMux }
+func (d *Dexon) Engine() consensus.Engine { return d.engine }
+func (d *Dexon) ChainDb() ethdb.Database { return d.chainDb }
+func (d *Dexon) Downloader() *downloader.Downloader { return d.protocolManager.downloader }
diff --git a/dex/governance.go b/dex/governance.go
index e990f32f3..f49355816 100644
--- a/dex/governance.go
+++ b/dex/governance.go
@@ -4,19 +4,30 @@ import (
coreCommon "github.com/dexon-foundation/dexon-consensus-core/common"
"github.com/dexon-foundation/dexon-consensus-core/core/crypto"
"github.com/dexon-foundation/dexon-consensus-core/core/types"
+ "github.com/dexon-foundation/dexon/core/vm"
)
type DexconGovernance struct {
+ b *DexAPIBackend
}
// NewDexconGovernance retruns a governance implementation of the DEXON
// consensus governance interface.
-func NewDexconGovernance() *DexconGovernance {
- return &DexconGovernance{}
+func NewDexconGovernance(backend *DexAPIBackend) *DexconGovernance {
+ return &DexconGovernance{
+ b: backend,
+ }
}
// Configuration return the total ordering K constant.
func (d *DexconGovernance) Configuration(round uint64) *types.Config {
+ state, _, err := d.b.StateAndHeaderByNumber(ctx, blockNr)
+ if state == nil || err != nil {
+ return nil, err
+ }
+
+ s := vm.GovernanceStateHelper{state}
+
return &types.Config{}
}