Merge pull request #14889 from karalabe/ethash-cache-on-import
cmd: add makecache cmd, use caches during import cmd
This commit is contained in:
commit
8b84bd283f
|
@ -157,6 +157,7 @@ func init() {
|
||||||
attachCommand,
|
attachCommand,
|
||||||
javascriptCommand,
|
javascriptCommand,
|
||||||
// See misccmd.go:
|
// See misccmd.go:
|
||||||
|
makecacheCommand,
|
||||||
makedagCommand,
|
makedagCommand,
|
||||||
versionCommand,
|
versionCommand,
|
||||||
bugCommand,
|
bugCommand,
|
||||||
|
|
|
@ -18,9 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -33,14 +31,27 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
makedagCommand = cli.Command{
|
makecacheCommand = cli.Command{
|
||||||
Action: utils.MigrateFlags(makedag),
|
Action: utils.MigrateFlags(makecache),
|
||||||
Name: "makedag",
|
Name: "makecache",
|
||||||
Usage: "Generate ethash DAG (for testing)",
|
Usage: "Generate ethash verification cache (for testing)",
|
||||||
ArgsUsage: "<blockNum> <outputDir>",
|
ArgsUsage: "<blockNum> <outputDir>",
|
||||||
Category: "MISCELLANEOUS COMMANDS",
|
Category: "MISCELLANEOUS COMMANDS",
|
||||||
Description: `
|
Description: `
|
||||||
The makedag command generates an ethash DAG in /tmp/dag.
|
The makecache command generates an ethash cache in <outputDir>.
|
||||||
|
|
||||||
|
This command exists to support the system testing project.
|
||||||
|
Regular users do not need to execute it.
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
makedagCommand = cli.Command{
|
||||||
|
Action: utils.MigrateFlags(makedag),
|
||||||
|
Name: "makedag",
|
||||||
|
Usage: "Generate ethash mining DAG (for testing)",
|
||||||
|
ArgsUsage: "<blockNum> <outputDir>",
|
||||||
|
Category: "MISCELLANEOUS COMMANDS",
|
||||||
|
Description: `
|
||||||
|
The makedag command generates an ethash DAG in <outputDir>.
|
||||||
|
|
||||||
This command exists to support the system testing project.
|
This command exists to support the system testing project.
|
||||||
Regular users do not need to execute it.
|
Regular users do not need to execute it.
|
||||||
|
@ -65,33 +76,33 @@ The output of this command is supposed to be machine-readable.
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// makecache generates an ethash verification cache into the provided folder.
|
||||||
|
func makecache(ctx *cli.Context) error {
|
||||||
|
args := ctx.Args()
|
||||||
|
if len(args) != 2 {
|
||||||
|
utils.Fatalf(`Usage: geth makecache <block number> <outputdir>`)
|
||||||
|
}
|
||||||
|
block, err := strconv.ParseUint(args[0], 0, 64)
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("Invalid block number: %v", err)
|
||||||
|
}
|
||||||
|
ethash.MakeCache(block, args[1])
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// makedag generates an ethash mining DAG into the provided folder.
|
||||||
func makedag(ctx *cli.Context) error {
|
func makedag(ctx *cli.Context) error {
|
||||||
args := ctx.Args()
|
args := ctx.Args()
|
||||||
wrongArgs := func() {
|
if len(args) != 2 {
|
||||||
utils.Fatalf(`Usage: geth makedag <block number> <outputdir>`)
|
utils.Fatalf(`Usage: geth makedag <block number> <outputdir>`)
|
||||||
}
|
}
|
||||||
switch {
|
block, err := strconv.ParseUint(args[0], 0, 64)
|
||||||
case len(args) == 2:
|
if err != nil {
|
||||||
blockNum, err := strconv.ParseUint(args[0], 0, 64)
|
utils.Fatalf("Invalid block number: %v", err)
|
||||||
dir := args[1]
|
|
||||||
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.MakeDataset(blockNum, dir)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
wrongArgs()
|
|
||||||
}
|
}
|
||||||
|
ethash.MakeDataset(block, args[1])
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1093,7 +1093,10 @@ func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chai
|
||||||
|
|
||||||
engine := ethash.NewFaker()
|
engine := ethash.NewFaker()
|
||||||
if !ctx.GlobalBool(FakePoWFlag.Name) {
|
if !ctx.GlobalBool(FakePoWFlag.Name) {
|
||||||
engine = ethash.New("", 1, 0, "", 1, 0)
|
engine = ethash.New(
|
||||||
|
stack.ResolvePath(eth.DefaultConfig.EthashCacheDir), eth.DefaultConfig.EthashCachesInMem, eth.DefaultConfig.EthashCachesOnDisk,
|
||||||
|
stack.ResolvePath(eth.DefaultConfig.EthashDatasetDir), eth.DefaultConfig.EthashDatasetsInMem, eth.DefaultConfig.EthashDatasetsOnDisk,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
config, _, err := core.SetupGenesisBlock(chainDb, MakeGenesis(ctx))
|
config, _, err := core.SetupGenesisBlock(chainDb, MakeGenesis(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue