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 | ||
|  | } |