From 3c09c5f12d21258865677cf565bb9d53a8098d3a Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 15 Aug 2016 20:14:05 +0200 Subject: [PATCH] core, miner: move Backend to miner This ensures that package core doesn't depend on package accounts and resolves an age-old TODO. --- core/types.go | 15 --------------- miner/miner.go | 23 ++++++++++++++++++++--- miner/worker.go | 8 ++++---- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/core/types.go b/core/types.go index e656bf853b..d84d0987f4 100644 --- a/core/types.go +++ b/core/types.go @@ -19,12 +19,9 @@ package core import ( "math/big" - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" ) // Validator is an interface which defines the standard for block validation. @@ -63,15 +60,3 @@ type HeaderValidator interface { type Processor interface { Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (types.Receipts, vm.Logs, *big.Int, error) } - -// Backend is an interface defining the basic functionality for an operable node -// with all the functionality to be a functional, valid Ethereum operator. -// -// TODO Remove this -type Backend interface { - AccountManager() *accounts.Manager - BlockChain() *BlockChain - TxPool() *TxPool - ChainDb() ethdb.Database - EventMux() *event.TypeMux -} diff --git a/miner/miner.go b/miner/miner.go index 7cc25cdf7f..c16cbe6ae6 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -22,11 +22,13 @@ import ( "math/big" "sync/atomic" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" @@ -34,6 +36,15 @@ import ( "github.com/ethereum/go-ethereum/pow" ) +// Backend wraps all methods required for mining. +type Backend interface { + AccountManager() *accounts.Manager + BlockChain() *core.BlockChain + TxPool() *core.TxPool + ChainDb() ethdb.Database +} + +// Miner creates blocks and searches for proof-of-work values. type Miner struct { mux *event.TypeMux @@ -44,15 +55,21 @@ type Miner struct { threads int coinbase common.Address mining int32 - eth core.Backend + eth Backend pow pow.PoW canStart int32 // can start indicates whether we can start the mining operation shouldStart int32 // should start indicates whether we should start after sync } -func New(eth core.Backend, config *core.ChainConfig, mux *event.TypeMux, pow pow.PoW) *Miner { - miner := &Miner{eth: eth, mux: mux, pow: pow, worker: newWorker(config, common.Address{}, eth), canStart: 1} +func New(eth Backend, config *core.ChainConfig, mux *event.TypeMux, pow pow.PoW) *Miner { + miner := &Miner{ + eth: eth, + mux: mux, + pow: pow, + worker: newWorker(config, common.Address{}, eth, mux), + canStart: 1, + } go miner.update() return miner diff --git a/miner/worker.go b/miner/worker.go index dfda6d8985..59406bf4eb 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -60,7 +60,7 @@ type uint64RingBuffer struct { next int //where is the next insertion? assert 0 <= next < len(ints) } -// environment is the workers current environment and holds +// Work is the workers current environment and holds // all of the current state information type Work struct { config *core.ChainConfig @@ -105,7 +105,7 @@ type worker struct { recv chan *Result pow pow.PoW - eth core.Backend + eth Backend chain *core.BlockChain proc core.Validator chainDb ethdb.Database @@ -130,11 +130,11 @@ type worker struct { fullValidation bool } -func newWorker(config *core.ChainConfig, coinbase common.Address, eth core.Backend) *worker { +func newWorker(config *core.ChainConfig, coinbase common.Address, eth Backend, mux *event.TypeMux) *worker { worker := &worker{ config: config, eth: eth, - mux: eth.EventMux(), + mux: mux, chainDb: eth.ChainDb(), recv: make(chan *Result, resultQueueSize), gasPrice: new(big.Int),