mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-23 13:16:42 +00:00
Update ethash API
* Chain no longer passed to ethash.New() * Remove unneeded DAG creation & cache updates * Update makedag cmd to work with new MakeDAG API
This commit is contained in:
parent
18eae16b29
commit
7f116e34b5
5 changed files with 33 additions and 18 deletions
4
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
4
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
|
|
@ -165,7 +165,7 @@ func freeDAG(h *dag) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeDAG(blockNum uint64, test bool, dir string) *dag {
|
func MakeDAG(blockNum uint64, test bool, dir string) *dag {
|
||||||
if dir == "" {
|
if dir == "" {
|
||||||
dir = DefaultDir
|
dir = DefaultDir
|
||||||
}
|
}
|
||||||
|
|
@ -210,7 +210,7 @@ func (pow *Full) getDAG(blockNum uint64) *dag {
|
||||||
// This computation is very very expensive.
|
// This computation is very very expensive.
|
||||||
// The lock should prevent more than one of them
|
// The lock should prevent more than one of them
|
||||||
// to run at the same time.
|
// to run at the same time.
|
||||||
pow.dag = makeDAG(blockNum, pow.test, pow.Dir)
|
pow.dag = MakeDAG(blockNum, pow.test, pow.Dir)
|
||||||
return pow.dag
|
return pow.dag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"path"
|
"path"
|
||||||
|
|
@ -575,12 +577,33 @@ func dump(ctx *cli.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func makedag(ctx *cli.Context) {
|
func makedag(ctx *cli.Context) {
|
||||||
chain, _, _ := utils.GetChain(ctx)
|
args := ctx.Args()
|
||||||
pow := ethash.New(chain)
|
wrongArgs := func() {
|
||||||
fmt.Println("making cache")
|
utils.Fatalf(`Usage: geth makedag {true, false} <block number> <outputdir>`)
|
||||||
pow.UpdateCache(0, true)
|
}
|
||||||
fmt.Println("making DAG")
|
switch {
|
||||||
pow.UpdateDAG()
|
case len(args) == 3:
|
||||||
|
isTest, err := strconv.ParseBool(args[0])
|
||||||
|
blockNum, err := strconv.ParseUint(args[1], 0, 64)
|
||||||
|
dir := args[2]
|
||||||
|
if err != nil {
|
||||||
|
wrongArgs()
|
||||||
|
} else {
|
||||||
|
dir = filepath.Clean(dir)
|
||||||
|
// seems to require a trailing slash
|
||||||
|
if !strings.HasSuffix(dir, "/") {
|
||||||
|
dir = dir + "/"
|
||||||
|
}
|
||||||
|
_, err = ioutil.ReadDir(dir)
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("Can't find dir")
|
||||||
|
}
|
||||||
|
fmt.Println("making DAG, this could take awhile...")
|
||||||
|
ethash.MakeDAG(blockNum, isTest, dir)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
wrongArgs()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func version(c *cli.Context) {
|
func version(c *cli.Context) {
|
||||||
|
|
|
||||||
|
|
@ -316,7 +316,7 @@ func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Dat
|
||||||
|
|
||||||
eventMux := new(event.TypeMux)
|
eventMux := new(event.TypeMux)
|
||||||
chainManager := core.NewChainManager(blockDb, stateDb, eventMux)
|
chainManager := core.NewChainManager(blockDb, stateDb, eventMux)
|
||||||
pow := ethash.New(chainManager)
|
pow := ethash.New()
|
||||||
txPool := core.NewTxPool(eventMux, chainManager.State)
|
txPool := core.NewTxPool(eventMux, chainManager.State)
|
||||||
blockProcessor := core.NewBlockProcessor(stateDb, extraDb, pow, txPool, chainManager, eventMux)
|
blockProcessor := core.NewBlockProcessor(stateDb, extraDb, pow, txPool, chainManager, eventMux)
|
||||||
chainManager.SetProcessor(blockProcessor)
|
chainManager.SetProcessor(blockProcessor)
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,7 @@ func New(config *Config) (*Ethereum, error) {
|
||||||
|
|
||||||
eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())
|
eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())
|
||||||
eth.downloader = downloader.New(eth.chainManager.HasBlock, eth.chainManager.InsertChain, eth.chainManager.Td)
|
eth.downloader = downloader.New(eth.chainManager.HasBlock, eth.chainManager.InsertChain, eth.chainManager.Td)
|
||||||
eth.pow = ethash.New(eth.chainManager)
|
eth.pow = ethash.New()
|
||||||
eth.txPool = core.NewTxPool(eth.EventMux(), eth.chainManager.State)
|
eth.txPool = core.NewTxPool(eth.EventMux(), eth.chainManager.State)
|
||||||
eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.txPool, eth.chainManager, eth.EventMux())
|
eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.txPool, eth.chainManager, eth.EventMux())
|
||||||
eth.chainManager.SetProcessor(eth.blockProcessor)
|
eth.chainManager.SetProcessor(eth.blockProcessor)
|
||||||
|
|
@ -313,7 +313,6 @@ func (s *Ethereum) PeersInfo() (peersinfo []*PeerInfo) {
|
||||||
|
|
||||||
func (s *Ethereum) ResetWithGenesisBlock(gb *types.Block) {
|
func (s *Ethereum) ResetWithGenesisBlock(gb *types.Block) {
|
||||||
s.chainManager.ResetWithGenesisBlock(gb)
|
s.chainManager.ResetWithGenesisBlock(gb)
|
||||||
s.pow.UpdateCache(0, true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Ethereum) StartMining() error {
|
func (s *Ethereum) StartMining() error {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package miner
|
||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/ethereum/ethash"
|
|
||||||
"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"
|
||||||
|
|
@ -41,13 +40,7 @@ func (self *Miner) Mining() bool {
|
||||||
func (self *Miner) Start(coinbase common.Address) {
|
func (self *Miner) Start(coinbase common.Address) {
|
||||||
self.mining = true
|
self.mining = true
|
||||||
self.worker.coinbase = coinbase
|
self.worker.coinbase = coinbase
|
||||||
|
|
||||||
if self.threads > 0 {
|
|
||||||
self.pow.(*ethash.Ethash).UpdateDAG()
|
|
||||||
}
|
|
||||||
|
|
||||||
self.worker.start()
|
self.worker.start()
|
||||||
|
|
||||||
self.worker.commitNewWork()
|
self.worker.commitNewWork()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue