diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 9df891f78..1cb975a17 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -749,6 +749,7 @@ func RegisterEthService(ctx *cli.Context, stack *node.Node, extra []byte) { GpobaseCorrectionFactor: ctx.GlobalInt(GpobaseCorrectionFactorFlag.Name), SolcPath: ctx.GlobalString(SolcPathFlag.Name), AutoDAG: ctx.GlobalBool(AutoDAGFlag.Name) || ctx.GlobalBool(MiningEnabledFlag.Name), + PowFake: ctx.GlobalBool(FakePoWFlag.Name), } // Override any default configs in dev mode or the test net diff --git a/eth/backend.go b/eth/backend.go index f98c9b724..dec8c0c6e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -45,6 +45,7 @@ import ( "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rpc" ) @@ -79,6 +80,7 @@ type Config struct { NatSpec bool DocRoot string AutoDAG bool + PowFake bool PowTest bool PowShared bool ExtraData []byte @@ -125,7 +127,7 @@ type Ethereum struct { chainDb ethdb.Database // Block chain database eventMux *event.TypeMux - pow *ethash.Ethash + pow pow.PoW accountManager *accounts.Manager ApiBackend *EthApiBackend @@ -139,7 +141,6 @@ type Ethereum struct { solcPath string NatSpec bool - PowTest bool netVersionId int netRPCService *ethapi.PublicNetAPI } @@ -174,7 +175,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { stopDbUpgrade: stopDbUpgrade, netVersionId: config.NetworkId, NatSpec: config.NatSpec, - PowTest: config.PowTest, etherbase: config.Etherbase, MinerThreads: config.MinerThreads, AutoDAG: config.AutoDAG, @@ -293,15 +293,17 @@ func SetupGenesisBlock(chainDb *ethdb.Database, config *Config) error { } // CreatePoW creates the required type of PoW instance for an Ethereum service -func CreatePoW(config *Config) (*ethash.Ethash, error) { +func CreatePoW(config *Config) (pow.PoW, error) { switch { + case config.PowFake: + glog.V(logger.Info).Infof("ethash used in fake mode") + return pow.PoW(core.FakePow{}), nil case config.PowTest: glog.V(logger.Info).Infof("ethash used in test mode") return ethash.NewForTesting() case config.PowShared: glog.V(logger.Info).Infof("ethash used in shared mode") return ethash.NewShared(), nil - default: return ethash.New(), nil } @@ -399,7 +401,7 @@ func (s *Ethereum) AccountManager() *accounts.Manager { return s.accountManager func (s *Ethereum) BlockChain() *core.BlockChain { return s.blockchain } func (s *Ethereum) TxPool() *core.TxPool { return s.txPool } func (s *Ethereum) EventMux() *event.TypeMux { return s.eventMux } -func (s *Ethereum) Pow() *ethash.Ethash { return s.pow } +func (s *Ethereum) Pow() pow.PoW { return s.pow } func (s *Ethereum) ChainDb() ethdb.Database { return s.chainDb } func (s *Ethereum) IsListening() bool { return true } // Always listening func (s *Ethereum) EthVersion() int { return int(s.protocolManager.SubProtocols[0].Version) } diff --git a/les/backend.go b/les/backend.go index d21d5a98c..3deab61f7 100644 --- a/les/backend.go +++ b/les/backend.go @@ -22,7 +22,6 @@ import ( "fmt" "time" - "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/compiler" @@ -42,6 +41,7 @@ import ( "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/pow" rpc "github.com/ethereum/go-ethereum/rpc" ) @@ -61,13 +61,12 @@ type LightEthereum struct { ApiBackend *LesApiBackend eventMux *event.TypeMux - pow *ethash.Ethash + pow pow.PoW accountManager *accounts.Manager solcPath string solc *compiler.Solidity NatSpec bool - PowTest bool netVersionId int netRPCService *ethapi.PublicNetAPI } @@ -97,7 +96,6 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { shutdownChan: make(chan bool), netVersionId: config.NetworkId, NatSpec: config.NatSpec, - PowTest: config.PowTest, solcPath: config.SolcPath, }