parent
							
								
									a90a170361
								
							
						
					
					
						commit
						86f9e836be
					
				| @ -32,6 +32,7 @@ import ( | |||||||
| 	"github.com/ethereum/go-ethereum/core/state" | 	"github.com/ethereum/go-ethereum/core/state" | ||||||
| 	"github.com/ethereum/go-ethereum/core/types" | 	"github.com/ethereum/go-ethereum/core/types" | ||||||
| 	"github.com/ethereum/go-ethereum/ethdb" | 	"github.com/ethereum/go-ethereum/ethdb" | ||||||
|  | 	"github.com/ethereum/go-ethereum/logger" | ||||||
| 	"github.com/ethereum/go-ethereum/logger/glog" | 	"github.com/ethereum/go-ethereum/logger/glog" | ||||||
| 	"github.com/ethereum/go-ethereum/trie" | 	"github.com/ethereum/go-ethereum/trie" | ||||||
| 	"github.com/syndtr/goleveldb/leveldb/util" | 	"github.com/syndtr/goleveldb/leveldb/util" | ||||||
| @ -39,6 +40,18 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  | 	initCommand = cli.Command{ | ||||||
|  | 		Action:    initGenesis, | ||||||
|  | 		Name:      "init", | ||||||
|  | 		Usage:     "Bootstrap and initialize a new genesis block", | ||||||
|  | 		ArgsUsage: "<genesisPath>", | ||||||
|  | 		Category:  "BLOCKCHAIN COMMANDS", | ||||||
|  | 		Description: ` | ||||||
|  | The init command initializes a new genesis block and definition for the network. | ||||||
|  | This is a destructive action and changes the network in which you will be | ||||||
|  | participating. | ||||||
|  | `, | ||||||
|  | 	} | ||||||
| 	importCommand = cli.Command{ | 	importCommand = cli.Command{ | ||||||
| 		Action:    importChain, | 		Action:    importChain, | ||||||
| 		Name:      "import", | 		Name:      "import", | ||||||
| @ -95,6 +108,30 @@ Use "ethereum dump 0" to dump the genesis block. | |||||||
| 	} | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // initGenesis will initialise the given JSON format genesis file and writes it as
 | ||||||
|  | // the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
 | ||||||
|  | func initGenesis(ctx *cli.Context) error { | ||||||
|  | 	genesisPath := ctx.Args().First() | ||||||
|  | 	if len(genesisPath) == 0 { | ||||||
|  | 		utils.Fatalf("must supply path to genesis JSON file") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	stack := makeFullNode(ctx) | ||||||
|  | 	chaindb := utils.MakeChainDatabase(ctx, stack) | ||||||
|  | 
 | ||||||
|  | 	genesisFile, err := os.Open(genesisPath) | ||||||
|  | 	if err != nil { | ||||||
|  | 		utils.Fatalf("failed to read genesis file: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	block, err := core.WriteGenesisBlock(chaindb, genesisFile) | ||||||
|  | 	if err != nil { | ||||||
|  | 		utils.Fatalf("failed to write genesis block: %v", err) | ||||||
|  | 	} | ||||||
|  | 	glog.V(logger.Info).Infof("successfully wrote genesis block and/or chain rule set: %x", block.Hash()) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func importChain(ctx *cli.Context) error { | func importChain(ctx *cli.Context) error { | ||||||
| 	if len(ctx.Args()) != 1 { | 	if len(ctx.Args()) != 1 { | ||||||
| 		utils.Fatalf("This command requires an argument.") | 		utils.Fatalf("This command requires an argument.") | ||||||
|  | |||||||
							
								
								
									
										142
									
								
								cmd/geth/main.go
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								cmd/geth/main.go
									
									
									
									
									
								
							| @ -20,20 +20,15 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"encoding/hex" | 	"encoding/hex" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"path/filepath" |  | ||||||
| 	"runtime" | 	"runtime" | ||||||
| 	"strconv" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/ethereum/ethash" |  | ||||||
| 	"github.com/ethereum/go-ethereum/cmd/utils" | 	"github.com/ethereum/go-ethereum/cmd/utils" | ||||||
| 	"github.com/ethereum/go-ethereum/common" | 	"github.com/ethereum/go-ethereum/common" | ||||||
| 	"github.com/ethereum/go-ethereum/console" | 	"github.com/ethereum/go-ethereum/console" | ||||||
| 	"github.com/ethereum/go-ethereum/contracts/release" | 	"github.com/ethereum/go-ethereum/contracts/release" | ||||||
| 	"github.com/ethereum/go-ethereum/core" |  | ||||||
| 	"github.com/ethereum/go-ethereum/eth" | 	"github.com/ethereum/go-ethereum/eth" | ||||||
| 	"github.com/ethereum/go-ethereum/internal/debug" | 	"github.com/ethereum/go-ethereum/internal/debug" | ||||||
| 	"github.com/ethereum/go-ethereum/logger" | 	"github.com/ethereum/go-ethereum/logger" | ||||||
| @ -64,59 +59,26 @@ func init() { | |||||||
| 	app.HideVersion = true // we have a command to print the version
 | 	app.HideVersion = true // we have a command to print the version
 | ||||||
| 	app.Copyright = "Copyright 2013-2016 The go-ethereum Authors" | 	app.Copyright = "Copyright 2013-2016 The go-ethereum Authors" | ||||||
| 	app.Commands = []cli.Command{ | 	app.Commands = []cli.Command{ | ||||||
|  | 		// See chaincmd.go:
 | ||||||
|  | 		initCommand, | ||||||
| 		importCommand, | 		importCommand, | ||||||
| 		exportCommand, | 		exportCommand, | ||||||
| 		upgradedbCommand, | 		upgradedbCommand, | ||||||
| 		removedbCommand, | 		removedbCommand, | ||||||
| 		dumpCommand, | 		dumpCommand, | ||||||
|  | 		// See monitorcmd.go:
 | ||||||
| 		monitorCommand, | 		monitorCommand, | ||||||
|  | 		// See accountcmd.go:
 | ||||||
| 		accountCommand, | 		accountCommand, | ||||||
| 		walletCommand, | 		walletCommand, | ||||||
|  | 		// See consolecmd.go:
 | ||||||
| 		consoleCommand, | 		consoleCommand, | ||||||
| 		attachCommand, | 		attachCommand, | ||||||
| 		javascriptCommand, | 		javascriptCommand, | ||||||
| 		{ | 		// See misccmd.go:
 | ||||||
| 			Action:    makedag, | 		makedagCommand, | ||||||
| 			Name:      "makedag", | 		versionCommand, | ||||||
| 			Usage:     "Generate ethash DAG (for testing)", | 		licenseCommand, | ||||||
| 			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. |  | ||||||
| `, |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			Action:    version, |  | ||||||
| 			Name:      "version", |  | ||||||
| 			Usage:     "Print version numbers", |  | ||||||
| 			ArgsUsage: " ", |  | ||||||
| 			Category:  "MISCELLANEOUS COMMANDS", |  | ||||||
| 			Description: ` |  | ||||||
| The output of this command is supposed to be machine-readable. |  | ||||||
| `, |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			Action:    initGenesis, |  | ||||||
| 			Name:      "init", |  | ||||||
| 			Usage:     "Bootstrap and initialize a new genesis block", |  | ||||||
| 			ArgsUsage: "<genesisPath>", |  | ||||||
| 			Category:  "BLOCKCHAIN COMMANDS", |  | ||||||
| 			Description: ` |  | ||||||
| The init command initializes a new genesis block and definition for the network. |  | ||||||
| This is a destructive action and changes the network in which you will be |  | ||||||
| participating. |  | ||||||
| `, |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			Action:    license, |  | ||||||
| 			Name:      "license", |  | ||||||
| 			Usage:     "Display license information", |  | ||||||
| 			ArgsUsage: " ", |  | ||||||
| 			Category:  "MISCELLANEOUS COMMANDS", |  | ||||||
| 		}, |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	app.Flags = []cli.Flag{ | 	app.Flags = []cli.Flag{ | ||||||
| @ -230,30 +192,6 @@ func geth(ctx *cli.Context) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // initGenesis will initialise the given JSON format genesis file and writes it as
 |  | ||||||
| // the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
 |  | ||||||
| func initGenesis(ctx *cli.Context) error { |  | ||||||
| 	genesisPath := ctx.Args().First() |  | ||||||
| 	if len(genesisPath) == 0 { |  | ||||||
| 		utils.Fatalf("must supply path to genesis JSON file") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	stack := makeFullNode(ctx) |  | ||||||
| 	chaindb := utils.MakeChainDatabase(ctx, stack) |  | ||||||
| 
 |  | ||||||
| 	genesisFile, err := os.Open(genesisPath) |  | ||||||
| 	if err != nil { |  | ||||||
| 		utils.Fatalf("failed to read genesis file: %v", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	block, err := core.WriteGenesisBlock(chaindb, genesisFile) |  | ||||||
| 	if err != nil { |  | ||||||
| 		utils.Fatalf("failed to write genesis block: %v", err) |  | ||||||
| 	} |  | ||||||
| 	glog.V(logger.Info).Infof("successfully wrote genesis block and/or chain rule set: %x", block.Hash()) |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func makeFullNode(ctx *cli.Context) *node.Node { | func makeFullNode(ctx *cli.Context) *node.Node { | ||||||
| 	// Create the default extradata and construct the base node
 | 	// Create the default extradata and construct the base node
 | ||||||
| 	var clientInfo = struct { | 	var clientInfo = struct { | ||||||
| @ -328,65 +266,3 @@ func startNode(ctx *cli.Context, stack *node.Node) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 |  | ||||||
| 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 |  | ||||||
| } |  | ||||||
|  | |||||||
							
								
								
									
										128
									
								
								cmd/geth/misccmd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								cmd/geth/misccmd.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | |||||||
|  | // 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 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user