diff options
Diffstat (limited to 'cmd/ethereum/main.go')
-rw-r--r-- | cmd/ethereum/main.go | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go new file mode 100644 index 000000000..f7d7761e8 --- /dev/null +++ b/cmd/ethereum/main.go @@ -0,0 +1,115 @@ +package main + +import ( + "fmt" + "os" + "runtime" + + "github.com/ethereum/go-ethereum/ethchain" + "github.com/ethereum/go-ethereum/ethlog" + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/utils" +) + +const ( + ClientIdentifier = "Ethereum(G)" + Version = "0.7.0" +) + +var logger = ethlog.NewLogger("CLI") + +func main() { + runtime.GOMAXPROCS(runtime.NumCPU()) + + utils.HandleInterrupt() + + // precedence: code-internal flag default < config file < environment variables < command line + Init() // parsing command line + + // If the difftool option is selected ignore all other log output + if DiffTool || Dump { + LogLevel = 0 + } + + utils.InitConfig(VmType, ConfigFile, Datadir, "ETH") + ethutil.Config.Diff = DiffTool + ethutil.Config.DiffType = DiffType + + utils.InitDataDir(Datadir) + + utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) + + db := utils.NewDatabase() + err := utils.DBSanityCheck(db) + if err != nil { + fmt.Println(err) + + os.Exit(1) + } + + keyManager := utils.NewKeyManager(KeyStore, Datadir, db) + + // create, import, export keys + utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive) + + clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier) + + ethereum := utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer) + + if Dump { + var block *ethchain.Block + + if len(DumpHash) == 0 && DumpNumber == -1 { + block = ethereum.ChainManager().CurrentBlock + } else if len(DumpHash) > 0 { + block = ethereum.ChainManager().GetBlock(ethutil.Hex2Bytes(DumpHash)) + } else { + block = ethereum.ChainManager().GetBlockByNumber(uint64(DumpNumber)) + } + + if block == nil { + fmt.Fprintln(os.Stderr, "block not found") + + // We want to output valid JSON + fmt.Println("{}") + + os.Exit(1) + } + + fmt.Printf("RLP: %x\nstate: %x\nhash: %x\n", ethutil.Rlp(block), block.GetRoot(), block.Hash()) + + // Leave the Println. This needs clean output for piping + fmt.Printf("%s\n", block.State().Dump()) + + os.Exit(0) + } + + if ShowGenesis { + utils.ShowGenesis(ethereum) + } + + if StartMining { + utils.StartMining(ethereum) + } + + // better reworked as cases + if StartJsConsole { + InitJsConsole(ethereum) + } else if len(InputFile) > 0 { + ExecJsFile(ethereum, InputFile) + } + + if StartRpc { + utils.StartRpc(ethereum, RpcPort) + } + + if StartWebSockets { + utils.StartWebSockets(ethereum) + } + + utils.StartEthereum(ethereum, UseSeed) + + // this blocks the thread + ethereum.WaitForShutdown() + ethlog.Flush() +} |