// 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 . package main import ( "fmt" "os" "runtime" "strconv" "strings" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/params" "gopkg.in/urfave/cli.v1" ) var ( VersionCheckUrlFlag = cli.StringFlag{ Name: "check.url", Usage: "URL to use when checking vulnerabilities", Value: "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json", } VersionCheckVersionFlag = cli.StringFlag{ Name: "check.version", Usage: "Version to check", Value: fmt.Sprintf("Geth/v%v/%v-%v/%v", params.VersionWithCommit(gitCommit, gitDate), runtime.GOOS, runtime.GOARCH, runtime.Version()), } makecacheCommand = cli.Command{ Action: utils.MigrateFlags(makecache), Name: "makecache", Usage: "Generate ethash verification cache (for testing)", ArgsUsage: " ", Category: "MISCELLANEOUS COMMANDS", Description: ` The makecache command generates an ethash cache in . 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: " ", Category: "MISCELLANEOUS COMMANDS", Description: ` The makedag command generates an ethash DAG in . This command exists to support the system testing project. Regular users do not need to execute it. `, } versionCommand = cli.Command{ Action: utils.MigrateFlags(version), Name: "version", Usage: "Print version numbers", ArgsUsage: " ", Category: "MISCELLANEOUS COMMANDS", Description: ` The output of this command is supposed to be machine-readable. `, } versionCheckCommand = cli.Command{ Action: utils.MigrateFlags(versionCheck), Flags: []cli.Flag{ VersionCheckUrlFlag, VersionCheckVersionFlag, }, Name: "version-check", Usage: "Checks (online) whether the current version suffers from any known security vulnerabilities", ArgsUsage: "", Category: "MISCELLANEOUS COMMANDS", Description: ` The version-check command fetches vulnerability-information from https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json, and displays information about any security vulnerabilities that affect the currently executing version. `, } licenseCommand = cli.Command{ Action: utils.MigrateFlags(license), Name: "license", Usage: "Display license information", ArgsUsage: " ", Category: "MISCELLANEOUS COMMANDS", } ) // 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, 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 { args := ctx.Args() if len(args) != 2 { utils.Fatalf(`Usage: geth makedag `) } block, err := strconv.ParseUint(args[0], 0, 64) if err != nil { utils.Fatalf("Invalid block number: %v", err) } ethash.MakeDataset(block, args[1]) return nil } func version(ctx *cli.Context) error { fmt.Println(strings.Title(clientIdentifier)) fmt.Println("Version:", params.VersionWithMeta) if gitCommit != "" { fmt.Println("Git Commit:", gitCommit) } if gitDate != "" { fmt.Println("Git Commit Date:", gitDate) } fmt.Println("Architecture:", runtime.GOARCH) fmt.Println("Protocol Versions:", eth.ProtocolVersions) fmt.Println("Go Version:", runtime.Version()) fmt.Println("Operating System:", 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 .`) return nil }