aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2016-08-16 02:14:05 +0800
committerFelix Lange <fjl@twurst.com>2016-08-17 23:39:04 +0800
commit3c09c5f12d21258865677cf565bb9d53a8098d3a (patch)
tree768b7f6f9df8fa7a572d80a04d94e5d31fe3580a
parent1a9e66915b415cb1ca2bc2680f8fb4ff1883787c (diff)
downloadgo-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar.gz
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar.bz2
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar.lz
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar.xz
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.tar.zst
go-tangerine-3c09c5f12d21258865677cf565bb9d53a8098d3a.zip
core, miner: move Backend to miner
This ensures that package core doesn't depend on package accounts and resolves an age-old TODO.
-rw-r--r--core/types.go15
-rw-r--r--miner/miner.go23
-rw-r--r--miner/worker.go8
3 files changed, 24 insertions, 22 deletions
diff --git a/core/types.go b/core/types.go
index e656bf853..d84d0987f 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 7cc25cdf7..c16cbe6ae 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 dfda6d898..59406bf4e 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),