aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBas van Kervel <basvankervel@gmail.com>2015-06-19 20:04:18 +0800
committerBas van Kervel <bas@ethdev.com>2015-06-22 15:17:09 +0800
commitf87501b1c547a1d9cd882497ffafbab4f9941ef1 (patch)
treebc8e29d494105457cfae1db4ac2b1e0c36e4a0a1
parent3ff272b618b8bd63c9e3068d5f4be5d0b7c7c676 (diff)
downloadgo-tangerine-f87501b1c547a1d9cd882497ffafbab4f9941ef1.tar.gz
go-tangerine-f87501b1c547a1d9cd882497ffafbab4f9941ef1.tar.zst
go-tangerine-f87501b1c547a1d9cd882497ffafbab4f9941ef1.zip
added batch support to console and attach actions
-rw-r--r--cmd/geth/js.go19
-rw-r--r--cmd/geth/main.go17
-rw-r--r--cmd/utils/flags.go4
-rw-r--r--rpc/api/api_test.go15
-rw-r--r--rpc/api/eth.go1
-rw-r--r--rpc/api/eth_args.go36
6 files changed, 62 insertions, 30 deletions
diff --git a/cmd/geth/js.go b/cmd/geth/js.go
index 6e4e3e0c1..761943b63 100644
--- a/cmd/geth/js.go
+++ b/cmd/geth/js.go
@@ -220,6 +220,25 @@ func (self *jsre) loadAutoCompletion() {
}
}
+func (self *jsre) batch(statement string) {
+ val, err := self.re.Run(statement)
+
+ if err != nil {
+ fmt.Printf("error: %v", err)
+ } else if val.IsDefined() && val.IsObject() {
+ obj, _ := self.re.Get("ret_result")
+ fmt.Printf("%v", obj)
+ } else if val.IsDefined() {
+ fmt.Printf("%v", val)
+ }
+
+ if self.atexit != nil {
+ self.atexit()
+ }
+
+ self.re.Stop(false)
+}
+
// show summary of current geth instance
func (self *jsre) welcome() {
self.re.Eval(`console.log('instance: ' + web3.version.client);`)
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index f1e8ace3d..e5c3614fc 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -255,6 +255,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
utils.IPCDisabledFlag,
utils.IPCApiFlag,
utils.IPCPathFlag,
+ utils.ExecFlag,
utils.WhisperEnabledFlag,
utils.VMDebugFlag,
utils.ProtocolVersionFlag,
@@ -337,8 +338,12 @@ func attach(ctx *cli.Context) {
true,
nil)
- repl.welcome()
- repl.interactive()
+ if ctx.GlobalString(utils.ExecFlag.Name) != "" {
+ repl.batch(ctx.GlobalString(utils.ExecFlag.Name))
+ } else {
+ repl.welcome()
+ repl.interactive()
+ }
}
func console(ctx *cli.Context) {
@@ -368,8 +373,12 @@ func console(ctx *cli.Context) {
nil,
)
- repl.welcome()
- repl.interactive()
+ if ctx.GlobalString(utils.ExecFlag.Name) != "" {
+ repl.batch(ctx.GlobalString(utils.ExecFlag.Name))
+ } else {
+ repl.welcome()
+ repl.interactive()
+ }
ethereum.Stop()
ethereum.WaitForShutdown()
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 092bc5511..a9d449d1f 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -227,6 +227,10 @@ var (
Usage: "Filename for IPC socket/pipe",
Value: DirectoryString{common.DefaultIpcPath()},
}
+ ExecFlag = cli.StringFlag{
+ Name: "exec",
+ Usage: "Execute javascript statement (only in combination with console/attach)",
+ }
// Network Settings
MaxPeersFlag = cli.IntFlag{
Name: "maxpeers",
diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go
index 3e464c281..7e273ef28 100644
--- a/rpc/api/api_test.go
+++ b/rpc/api/api_test.go
@@ -3,12 +3,13 @@ package api
import (
"testing"
- "github.com/ethereum/go-ethereum/rpc/codec"
"encoding/json"
"strconv"
+
"github.com/ethereum/go-ethereum/common/compiler"
- "github.com/ethereum/go-ethereum/rpc/shared"
"github.com/ethereum/go-ethereum/eth"
+ "github.com/ethereum/go-ethereum/rpc/codec"
+ "github.com/ethereum/go-ethereum/rpc/shared"
"github.com/ethereum/go-ethereum/xeth"
)
@@ -58,11 +59,11 @@ func TestCompileSolidity(t *testing.T) {
t.Skip("WARNING: skipping test because of solc different version (%v, test written for %v, may need to update)", solc.Version(), solcVersion)
}
source := `contract test {\n` +
- " /// @notice Will multiply `a` by 7." + `\n` +
- ` function multiply(uint a) returns(uint d) {\n` +
- ` return a * 7;\n` +
- ` }\n` +
- `}\n`
+ " /// @notice Will multiply `a` by 7." + `\n` +
+ ` function multiply(uint a) returns(uint d) {\n` +
+ ` return a * 7;\n` +
+ ` }\n` +
+ `}\n`
jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}`
diff --git a/rpc/api/eth.go b/rpc/api/eth.go
index 91577c4d5..cafa05e34 100644
--- a/rpc/api/eth.go
+++ b/rpc/api/eth.go
@@ -250,7 +250,6 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) {
return v, nil
}
-
func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) {
args := new(NewDataArgs)
if err := self.codec.Decode(req.Params, &args); err != nil {
diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go
index 54eb7201d..02f438f0c 100644
--- a/rpc/api/eth_args.go
+++ b/rpc/api/eth_args.go
@@ -227,32 +227,32 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
}
type NewDataArgs struct {
- Data string
+ Data string
}
func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
- var obj []interface{}
+ var obj []interface{}
- if err := json.Unmarshal(b, &obj); err != nil {
- return shared.NewDecodeParamError(err.Error())
- }
+ if err := json.Unmarshal(b, &obj); err != nil {
+ return shared.NewDecodeParamError(err.Error())
+ }
- // Check for sufficient params
- if len(obj) < 1 {
- return shared.NewInsufficientParamsError(len(obj), 1)
- }
+ // Check for sufficient params
+ if len(obj) < 1 {
+ return shared.NewInsufficientParamsError(len(obj), 1)
+ }
- data, ok := obj[0].(string)
- if !ok {
- return shared.NewInvalidTypeError("data", "not a string")
- }
- args.Data = data
+ data, ok := obj[0].(string)
+ if !ok {
+ return shared.NewInvalidTypeError("data", "not a string")
+ }
+ args.Data = data
- if len(args.Data) == 0 {
- return shared.NewValidationError("data", "is required")
- }
+ if len(args.Data) == 0 {
+ return shared.NewValidationError("data", "is required")
+ }
- return nil
+ return nil
}
type NewSigArgs struct {