129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2016 The go-ethereum Authors
 | |
| // This file is part of go-ethereum.
 | |
| //
 | |
| // go-ethereum is free software: you can redistribute it and/or modify
 | |
| // it under the terms of the GNU General Public License as published by
 | |
| // the Free Software Foundation, either version 3 of the License, or
 | |
| // (at your option) any later version.
 | |
| //
 | |
| // go-ethereum is distributed in the hope that it will be useful,
 | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | |
| // GNU General Public License for more details.
 | |
| //
 | |
| // You should have received a copy of the GNU General Public License
 | |
| // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"io/ioutil"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"runtime"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/ethereum/ethash"
 | |
| 	"github.com/ethereum/go-ethereum/cmd/utils"
 | |
| 	"github.com/ethereum/go-ethereum/eth"
 | |
| 	"github.com/ethereum/go-ethereum/params"
 | |
| 	"gopkg.in/urfave/cli.v1"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	makedagCommand = cli.Command{
 | |
| 		Action:    makedag,
 | |
| 		Name:      "makedag",
 | |
| 		Usage:     "Generate ethash DAG (for testing)",
 | |
| 		ArgsUsage: "<blockNum> <outputDir>",
 | |
| 		Category:  "MISCELLANEOUS COMMANDS",
 | |
| 		Description: `
 | |
| The makedag command generates an ethash DAG in /tmp/dag.
 | |
| 
 | |
| This command exists to support the system testing project.
 | |
| Regular users do not need to execute it.
 | |
| `,
 | |
| 	}
 | |
| 	versionCommand = cli.Command{
 | |
| 		Action:    version,
 | |
| 		Name:      "version",
 | |
| 		Usage:     "Print version numbers",
 | |
| 		ArgsUsage: " ",
 | |
| 		Category:  "MISCELLANEOUS COMMANDS",
 | |
| 		Description: `
 | |
| The output of this command is supposed to be machine-readable.
 | |
| `,
 | |
| 	}
 | |
| 	licenseCommand = cli.Command{
 | |
| 		Action:    license,
 | |
| 		Name:      "license",
 | |
| 		Usage:     "Display license information",
 | |
| 		ArgsUsage: " ",
 | |
| 		Category:  "MISCELLANEOUS COMMANDS",
 | |
| 	}
 | |
| )
 | |
| 
 | |
| func makedag(ctx *cli.Context) error {
 | |
| 	args := ctx.Args()
 | |
| 	wrongArgs := func() {
 | |
| 		utils.Fatalf(`Usage: geth makedag <block number> <outputdir>`)
 | |
| 	}
 | |
| 	switch {
 | |
| 	case len(args) == 2:
 | |
| 		blockNum, err := strconv.ParseUint(args[0], 0, 64)
 | |
| 		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.MakeDAG(blockNum, dir)
 | |
| 		}
 | |
| 	default:
 | |
| 		wrongArgs()
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func version(ctx *cli.Context) error {
 | |
| 	fmt.Println(strings.Title(clientIdentifier))
 | |
| 	fmt.Println("Version:", params.Version)
 | |
| 	if gitCommit != "" {
 | |
| 		fmt.Println("Git Commit:", gitCommit)
 | |
| 	}
 | |
| 	fmt.Println("Protocol Versions:", eth.ProtocolVersions)
 | |
| 	fmt.Println("Network Id:", ctx.GlobalInt(utils.NetworkIdFlag.Name))
 | |
| 	fmt.Println("Go Version:", runtime.Version())
 | |
| 	fmt.Println("OS:", runtime.GOOS)
 | |
| 	fmt.Printf("GOPATH=%s\n", os.Getenv("GOPATH"))
 | |
| 	fmt.Printf("GOROOT=%s\n", runtime.GOROOT())
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func license(_ *cli.Context) error {
 | |
| 	fmt.Println(`Geth is free software: you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation, either version 3 of the License, or
 | |
| (at your option) any later version.
 | |
| 
 | |
| Geth is distributed in the hope that it will be useful,
 | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | |
| GNU General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with geth. If not, see <http://www.gnu.org/licenses/>.
 | |
| `)
 | |
| 	return nil
 | |
| }
 |