|
@@ -22,11 +22,13 @@ import (
|
|
|
"math/big"
|
|
"math/big"
|
|
|
"sync/atomic"
|
|
"sync/atomic"
|
|
|
|
|
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/accounts"
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/core"
|
|
|
"github.com/ethereum/go-ethereum/core/state"
|
|
"github.com/ethereum/go-ethereum/core/state"
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/ethdb"
|
|
|
"github.com/ethereum/go-ethereum/event"
|
|
"github.com/ethereum/go-ethereum/event"
|
|
|
"github.com/ethereum/go-ethereum/logger"
|
|
"github.com/ethereum/go-ethereum/logger"
|
|
|
"github.com/ethereum/go-ethereum/logger/glog"
|
|
"github.com/ethereum/go-ethereum/logger/glog"
|
|
@@ -34,6 +36,15 @@ import (
|
|
|
"github.com/ethereum/go-ethereum/pow"
|
|
"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 {
|
|
type Miner struct {
|
|
|
mux *event.TypeMux
|
|
mux *event.TypeMux
|
|
|
|
|
|
|
@@ -44,15 +55,21 @@ type Miner struct {
|
|
|
threads int
|
|
threads int
|
|
|
coinbase common.Address
|
|
coinbase common.Address
|
|
|
mining int32
|
|
mining int32
|
|
|
- eth core.Backend
|
|
|
|
|
|
|
+ eth Backend
|
|
|
pow pow.PoW
|
|
pow pow.PoW
|
|
|
|
|
|
|
|
canStart int32 // can start indicates whether we can start the mining operation
|
|
canStart int32 // can start indicates whether we can start the mining operation
|
|
|
shouldStart int32 // should start indicates whether we should start after sync
|
|
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()
|
|
go miner.update()
|
|
|
|
|
|
|
|
return miner
|
|
return miner
|