aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/ethereum/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ethereum/main.go')
-rw-r--r--cmd/ethereum/main.go115
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()
+}