diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-05-06 17:40:23 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2016-05-30 22:25:23 +0800 |
commit | ffaf58f0a98bd987bbe76e8669bb22c405dcd62a (patch) | |
tree | 4cd484504d4a7089cfd85d22a2a9fa62c79abb7d /cmd/geth/main.go | |
parent | ab664c7e17009729d1083d8d4f7c37eb387012d3 (diff) | |
download | go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.gz go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.zst go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.zip |
cmd, console: split off the console into a reusable package
Diffstat (limited to 'cmd/geth/main.go')
-rw-r--r-- | cmd/geth/main.go | 140 |
1 files changed, 6 insertions, 134 deletions
diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 68aa7d45f..cdbda53e8 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -22,7 +22,6 @@ import ( "fmt" "io/ioutil" "os" - "os/signal" "path/filepath" "runtime" "strconv" @@ -33,6 +32,7 @@ import ( "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/ethdb" @@ -95,6 +95,9 @@ func init() { monitorCommand, accountCommand, walletCommand, + consoleCommand, + attachCommand, + javascriptCommand, { Action: makedag, Name: "makedag", @@ -140,36 +143,6 @@ This is a destructive action and changes the network in which you will be participating. `, }, - { - Action: console, - Name: "console", - Usage: `Geth Console: interactive JavaScript environment`, - Description: ` -The Geth console is an interactive shell for the JavaScript runtime environment -which exposes a node admin interface as well as the Ðapp JavaScript API. -See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console -`, - }, - { - Action: attach, - Name: "attach", - Usage: `Geth Console: interactive JavaScript environment (connect to node)`, - Description: ` - The Geth console is an interactive shell for the JavaScript runtime environment - which exposes a node admin interface as well as the Ðapp JavaScript API. - See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console. - This command allows to open a console on a running geth node. - `, - }, - { - Action: execScripts, - Name: "js", - Usage: `executes the given JavaScript files in the Geth JavaScript VM`, - Description: ` -The JavaScript VM exposes a node admin interface as well as the Ðapp -JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console -`, - }, } app.Flags = []cli.Flag{ @@ -214,7 +187,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.IPCApiFlag, utils.IPCPathFlag, utils.ExecFlag, - utils.PreLoadJSFlag, + utils.PreloadJSFlag, utils.WhisperEnabledFlag, utils.DevModeFlag, utils.TestNetFlag, @@ -263,7 +236,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso app.After = func(ctx *cli.Context) error { logger.Flush() debug.Exit() - utils.Stdin.Close() // Resets terminal mode. + console.TerminalPrompter.Close() // Resets terminal mode. return nil } } @@ -304,36 +277,6 @@ func geth(ctx *cli.Context) { node.Wait() } -// attach will connect to a running geth instance attaching a JavaScript console and to it. -func attach(ctx *cli.Context) { - // attach to a running geth instance - client, err := utils.NewRemoteRPCClient(ctx) - if err != nil { - utils.Fatalf("Unable to attach to geth: %v", err) - } - - repl := newLightweightJSRE( - ctx.GlobalString(utils.JSpathFlag.Name), - client, - ctx.GlobalString(utils.DataDirFlag.Name), - true, - ) - - // preload user defined JS files into the console - err = repl.preloadJSFiles(ctx) - if err != nil { - utils.Fatalf("unable to preload JS file %v", err) - } - - // in case the exec flag holds a JS statement execute it and return - if ctx.GlobalString(utils.ExecFlag.Name) != "" { - repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) - } else { - repl.welcome() - repl.interactive() - } -} - // 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) { @@ -359,77 +302,6 @@ func initGenesis(ctx *cli.Context) { glog.V(logger.Info).Infof("successfully wrote genesis block and/or chain rule set: %x", block.Hash()) } -// console starts a new geth node, attaching a JavaScript console to it at the -// same time. -func console(ctx *cli.Context) { - // Create and start the node based on the CLI flags - node := utils.MakeSystemNode(clientIdentifier, verString, relConfig, makeDefaultExtra(), ctx) - startNode(ctx, node) - - // Attach to the newly started node, and either execute script or become interactive - client, err := node.Attach() - if err != nil { - utils.Fatalf("Failed to attach to the inproc geth: %v", err) - } - repl := newJSRE(node, - ctx.GlobalString(utils.JSpathFlag.Name), - ctx.GlobalString(utils.RPCCORSDomainFlag.Name), - client, true) - - // preload user defined JS files into the console - err = repl.preloadJSFiles(ctx) - if err != nil { - utils.Fatalf("%v", err) - } - - // in case the exec flag holds a JS statement execute it and return - if script := ctx.GlobalString(utils.ExecFlag.Name); script != "" { - repl.batch(script) - } else { - repl.welcome() - repl.interactive() - } - node.Stop() -} - -// execScripts starts a new geth node based on the CLI flags, and executes each -// of the JavaScript files specified as command arguments. -func execScripts(ctx *cli.Context) { - // Create and start the node based on the CLI flags - node := utils.MakeSystemNode(clientIdentifier, verString, relConfig, makeDefaultExtra(), ctx) - startNode(ctx, node) - defer node.Stop() - - // Attach to the newly started node and execute the given scripts - client, err := node.Attach() - if err != nil { - utils.Fatalf("Failed to attach to the inproc geth: %v", err) - } - repl := newJSRE(node, - ctx.GlobalString(utils.JSpathFlag.Name), - ctx.GlobalString(utils.RPCCORSDomainFlag.Name), - client, false) - - // Run all given files. - for _, file := range ctx.Args() { - if err = repl.re.Exec(file); err != nil { - break - } - } - if err != nil { - utils.Fatalf("JavaScript Error: %v", jsErrorString(err)) - } - // JS files loaded successfully. - // Wait for pending callbacks, but stop for Ctrl-C. - abort := make(chan os.Signal, 1) - signal.Notify(abort, os.Interrupt) - go func() { - <-abort - repl.re.Stop(false) - }() - repl.re.Stop(true) -} - // startNode boots up the system node and all registered protocols, after which // it unlocks any requested accounts, and starts the RPC/IPC interfaces and the // miner. |