From 2cde3e9fe8f23eaa2b88a8afb54ebf221615174e Mon Sep 17 00:00:00 2001 From: AnilChinchawale Date: Fri, 22 Jun 2018 14:14:13 +0530 Subject: [PATCH] added MINING PERMISSION EVERY EPOCH BLOCK +1 --- cmd/XDC/main.go | 48 ++++++++++++++++++++++++++++-------------------- eth/backend.go | 5 +++++ 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/cmd/XDC/main.go b/cmd/XDC/main.go index 732be48972..e14d541763 100644 --- a/cmd/XDC/main.go +++ b/cmd/XDC/main.go @@ -290,27 +290,35 @@ func startNode(ctx *cli.Context, stack *node.Node) { utils.Fatalf("Ethereum service not running: %v", err) } - // Mining only enabled for validator nodes - if ok, err := ethereum.ValidateMiner(); err != nil { - utils.Fatalf("Can't verify validator permission: %v", err) - } else if !ok { - log.Info("Only validator can mine blocks. Cancel mining on this node") - return - } + go func() { + for { + if ethereum.Checkpoint() { + // Mining only enabled for validator nodes + if ok, err := ethereum.ValidateMiner(); err != nil { + utils.Fatalf("Can't verify validator permission: %v", err) + } else if !ok { + log.Info("Only validator can mine blocks. Cancel mining on this node") + ethereum.StopMining() + continue + } - // Use a reduced number of threads if requested - if threads := ctx.GlobalInt(utils.MinerThreadsFlag.Name); threads > 0 { - type threaded interface { - SetThreads(threads int) + // Use a reduced number of threads if requested + if threads := ctx.GlobalInt(utils.MinerThreadsFlag.Name); threads > 0 { + type threaded interface { + SetThreads(threads int) + } + if th, ok := ethereum.Engine().(threaded); ok { + th.SetThreads(threads) + } + } + // Set the gas price to the limits from the CLI and start mining + ethereum.TxPool().SetGasPrice(utils.GlobalBig(ctx, utils.GasPriceFlag.Name)) + if err := ethereum.StartMining(true); err != nil { + utils.Fatalf("Failed to start mining: %v", err) + } + } } - if th, ok := ethereum.Engine().(threaded); ok { - th.SetThreads(threads) - } - } - // Set the gas price to the limits from the CLI and start mining - ethereum.TxPool().SetGasPrice(utils.GlobalBig(ctx, utils.GasPriceFlag.Name)) - if err := ethereum.StartMining(true); err != nil { - utils.Fatalf("Failed to start mining: %v", err) - } + }() } } + diff --git a/eth/backend.go b/eth/backend.go index f3b188cdbc..da5f4c9a32 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -356,6 +356,11 @@ func (s *Ethereum) ValidateMiner() (bool, error) { return true, nil } +func (s *Ethereum) Checkpoint() bool { + number := s.blockchain.CurrentHeader().Number.Uint64() + return number%s.chainConfig.Clique.Epoch == 1 +} + func (s *Ethereum) StartMining(local bool) error { eb, err := s.Etherbase() if err != nil {