aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/geth/main.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-05-06 17:40:23 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-05-30 22:25:23 +0800
commitffaf58f0a98bd987bbe76e8669bb22c405dcd62a (patch)
tree4cd484504d4a7089cfd85d22a2a9fa62c79abb7d /cmd/geth/main.go
parentab664c7e17009729d1083d8d4f7c37eb387012d3 (diff)
downloadgo-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar
go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.gz
go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.bz2
go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.lz
go-tangerine-ffaf58f0a98bd987bbe76e8669bb22c405dcd62a.tar.xz
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.go140
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.