"github.com/vapor/asset"
"github.com/vapor/blockchain/pseudohsm"
"github.com/vapor/blockchain/txfeed"
+ "github.com/vapor/common"
cfg "github.com/vapor/config"
"github.com/vapor/consensus"
+ engine "github.com/vapor/consensus/consensus"
+ "github.com/vapor/consensus/consensus/dpos"
"github.com/vapor/crypto/ed25519/chainkd"
"github.com/vapor/database/leveldb"
"github.com/vapor/env"
- "github.com/vapor/mining/cpuminer"
+ "github.com/vapor/mining/miner"
"github.com/vapor/mining/miningpool"
"github.com/vapor/net/websocket"
"github.com/vapor/netsync"
maxNewBlockChSize = 1024
)
+var consensusEngine engine.Engine
+
type Node struct {
cmn.BaseService
api *api.API
chain *protocol.Chain
txfeed *txfeed.Tracker
- cpuMiner *cpuminer.CPUMiner
- miningPool *miningpool.MiningPool
- miningEnable bool
+ //cpuMiner *cpuminer.CPUMiner
+ miner *miner.Miner
+
+ miningPool *miningpool.MiningPool
+ miningEnable bool
newBlockCh chan *bc.Hash
}
}
initLogFile(config)
initActiveNetParams(config)
+ initConsensusConfig(config)
initCommonConfig(config)
+
util.MainchainConfig = config.MainChain
util.ValidatePegin = config.ValidatePegin
// Get store
}
if !config.Wallet.Disable {
+ address, err := common.DecodeAddress(config.Consensus.Dpos.Coinbase, &consensus.ActiveNetParams)
+ if err != nil {
+ cmn.Exit(cmn.Fmt("DecodeAddress: %v", err))
+ }
walletDB := dbm.NewDB("wallet", config.DBBackend, config.DBDir())
accounts = account.NewManager(walletDB, chain)
assets = asset.NewRegistry(walletDB, chain)
- wallet, err = w.NewWallet(walletDB, accounts, assets, hsm, chain)
+ wallet, err = w.NewWallet(walletDB, accounts, assets, hsm, chain, address)
if err != nil {
log.WithField("error", err).Error("init NewWallet")
}
notificationMgr: notificationMgr,
}
- node.cpuMiner = cpuminer.NewCPUMiner(chain, accounts, txPool, newBlockCh)
+ //node.cpuMiner = cpuminer.NewCPUMiner(chain, accounts, txPool, newBlockCh)
+ consensusEngine = createConsensusEngine(config, store)
+ node.miner = miner.NewMiner(chain, accounts, txPool, newBlockCh, consensusEngine)
node.miningPool = miningpool.NewMiningPool(chain, accounts, txPool, newBlockCh)
node.BaseService = *cmn.NewBaseService(nil, "Node", node)
}
func (n *Node) initAndstartApiServer() {
- n.api = api.NewAPI(n.syncManager, n.wallet, n.txfeed, n.cpuMiner, n.miningPool, n.chain, n.config, n.accessTokens, n.newBlockCh, n.notificationMgr)
+ n.api = api.NewAPI(n.syncManager, n.wallet, n.txfeed, n.miner, n.miningPool, n.chain, n.config, n.accessTokens, n.newBlockCh, n.notificationMgr)
listenAddr := env.String("LISTEN", n.config.ApiAddress)
env.Parse()
n.miningEnable = false
log.Error(err)
} else {
- n.cpuMiner.Start()
+ //n.cpuMiner.Start()
+ n.miner.Start()
}
}
if !n.config.VaultMode {
n.notificationMgr.WaitForShutdown()
n.BaseService.OnStop()
if n.miningEnable {
- n.cpuMiner.Stop()
+ n.miner.Stop()
}
if !n.config.VaultMode {
n.syncManager.Stop()
json.Unmarshal(tmp, &blockHeader)
hash := blockHeader.BlockHeader.Hash()
if strings.Compare(consensus.ActiveNetParams.ParentGenesisBlockHash, hash.String()) != 0 {
- log.Error("Invalid parent genesis block hash response via RPC. Contacting wrong parent daemon?")
+ log.Error("Invalid parent genesis block hash response via RPC. Contacting wrong parent daemon?", consensus.ActiveNetParams.ParentGenesisBlockHash, hash.String())
return false
}
break
return true
}
+
+func initConsensusConfig(config *cfg.Config) {
+ if config.ConsensusConfigFile == "" {
+ // poa
+ } else {
+ //
+ file, err := os.Open(config.ConsensusConfigFile)
+ if err != nil {
+ cmn.Exit(cmn.Fmt("Failed to read consensus file: %v", err))
+ }
+ defer file.Close()
+
+ if err := json.NewDecoder(file).Decode(config); err != nil {
+ cmn.Exit(cmn.Fmt("invalid consensus file: %v", err))
+ }
+ for _, v := range config.Consensus.Dpos.SelfVoteSigners {
+ address, err := common.DecodeAddress(v, &consensus.ActiveNetParams)
+ if err != nil {
+ cmn.Exit(cmn.Fmt("Address resolution failed: %v", err))
+ }
+ config.Consensus.Dpos.Signers = append(config.Consensus.Dpos.Signers, address)
+ }
+ }
+}
+
+func createConsensusEngine(config *cfg.Config, store protocol.Store) engine.Engine {
+ if config.Consensus.Dpos != nil {
+ return dpos.New(config.Consensus.Dpos, store)
+ } else {
+ return nil
+ }
+}
+
+func GetConsensusEngine() engine.Engine {
+ return consensusEngine
+}