added batch support to console and attach actions
This commit is contained in:
		
							parent
							
								
									3ff272b618
								
							
						
					
					
						commit
						f87501b1c5
					
				| @ -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
 | // show summary of current geth instance
 | ||||||
| func (self *jsre) welcome() { | func (self *jsre) welcome() { | ||||||
| 	self.re.Eval(`console.log('instance: ' + web3.version.client);`) | 	self.re.Eval(`console.log('instance: ' + web3.version.client);`) | ||||||
|  | |||||||
| @ -255,6 +255,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso | |||||||
| 		utils.IPCDisabledFlag, | 		utils.IPCDisabledFlag, | ||||||
| 		utils.IPCApiFlag, | 		utils.IPCApiFlag, | ||||||
| 		utils.IPCPathFlag, | 		utils.IPCPathFlag, | ||||||
|  | 		utils.ExecFlag, | ||||||
| 		utils.WhisperEnabledFlag, | 		utils.WhisperEnabledFlag, | ||||||
| 		utils.VMDebugFlag, | 		utils.VMDebugFlag, | ||||||
| 		utils.ProtocolVersionFlag, | 		utils.ProtocolVersionFlag, | ||||||
| @ -337,8 +338,12 @@ func attach(ctx *cli.Context) { | |||||||
| 		true, | 		true, | ||||||
| 		nil) | 		nil) | ||||||
| 
 | 
 | ||||||
| 	repl.welcome() | 	if ctx.GlobalString(utils.ExecFlag.Name) != "" { | ||||||
| 	repl.interactive() | 		repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) | ||||||
|  | 	} else { | ||||||
|  | 		repl.welcome() | ||||||
|  | 		repl.interactive() | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func console(ctx *cli.Context) { | func console(ctx *cli.Context) { | ||||||
| @ -368,8 +373,12 @@ func console(ctx *cli.Context) { | |||||||
| 		nil, | 		nil, | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	repl.welcome() | 	if ctx.GlobalString(utils.ExecFlag.Name) != "" { | ||||||
| 	repl.interactive() | 		repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) | ||||||
|  | 	} else { | ||||||
|  | 		repl.welcome() | ||||||
|  | 		repl.interactive() | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	ethereum.Stop() | 	ethereum.Stop() | ||||||
| 	ethereum.WaitForShutdown() | 	ethereum.WaitForShutdown() | ||||||
|  | |||||||
| @ -227,6 +227,10 @@ var ( | |||||||
| 		Usage: "Filename for IPC socket/pipe", | 		Usage: "Filename for IPC socket/pipe", | ||||||
| 		Value: DirectoryString{common.DefaultIpcPath()}, | 		Value: DirectoryString{common.DefaultIpcPath()}, | ||||||
| 	} | 	} | ||||||
|  | 	ExecFlag = cli.StringFlag{ | ||||||
|  | 		Name:  "exec", | ||||||
|  | 		Usage: "Execute javascript statement (only in combination with console/attach)", | ||||||
|  | 	} | ||||||
| 	// Network Settings
 | 	// Network Settings
 | ||||||
| 	MaxPeersFlag = cli.IntFlag{ | 	MaxPeersFlag = cli.IntFlag{ | ||||||
| 		Name:  "maxpeers", | 		Name:  "maxpeers", | ||||||
|  | |||||||
| @ -3,12 +3,13 @@ package api | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/ethereum/go-ethereum/rpc/codec" |  | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"strconv" | 	"strconv" | ||||||
|  | 
 | ||||||
| 	"github.com/ethereum/go-ethereum/common/compiler" | 	"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/eth" | ||||||
|  | 	"github.com/ethereum/go-ethereum/rpc/codec" | ||||||
|  | 	"github.com/ethereum/go-ethereum/rpc/shared" | ||||||
| 	"github.com/ethereum/go-ethereum/xeth" | 	"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) | 		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` + | 	source := `contract test {\n` + | ||||||
| 	"   /// @notice Will multiply `a` by 7." + `\n` + | 		"   /// @notice Will multiply `a` by 7." + `\n` + | ||||||
| 	`   function multiply(uint a) returns(uint d) {\n` + | 		`   function multiply(uint a) returns(uint d) {\n` + | ||||||
| 	`       return a * 7;\n` + | 		`       return a * 7;\n` + | ||||||
| 	`   }\n` + | 		`   }\n` + | ||||||
| 	`}\n` | 		`}\n` | ||||||
| 
 | 
 | ||||||
| 	jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}` | 	jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}` | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -250,7 +250,6 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) { | |||||||
| 	return v, nil | 	return v, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) { | func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) { | ||||||
| 	args := new(NewDataArgs) | 	args := new(NewDataArgs) | ||||||
| 	if err := self.codec.Decode(req.Params, &args); err != nil { | 	if err := self.codec.Decode(req.Params, &args); err != nil { | ||||||
|  | |||||||
| @ -227,32 +227,32 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type NewDataArgs struct { | type NewDataArgs struct { | ||||||
|     Data string | 	Data string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) { | func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) { | ||||||
|     var obj []interface{} | 	var obj []interface{} | ||||||
| 
 | 
 | ||||||
|     if err := json.Unmarshal(b, &obj); err != nil { | 	if err := json.Unmarshal(b, &obj); err != nil { | ||||||
|         return shared.NewDecodeParamError(err.Error()) | 		return shared.NewDecodeParamError(err.Error()) | ||||||
|     } | 	} | ||||||
| 
 | 
 | ||||||
|     // Check for sufficient params
 | 	// Check for sufficient params
 | ||||||
|     if len(obj) < 1 { | 	if len(obj) < 1 { | ||||||
|         return shared.NewInsufficientParamsError(len(obj), 1) | 		return shared.NewInsufficientParamsError(len(obj), 1) | ||||||
|     } | 	} | ||||||
| 
 | 
 | ||||||
|     data, ok := obj[0].(string) | 	data, ok := obj[0].(string) | ||||||
|     if !ok { | 	if !ok { | ||||||
|         return shared.NewInvalidTypeError("data", "not a string") | 		return shared.NewInvalidTypeError("data", "not a string") | ||||||
|     } | 	} | ||||||
|     args.Data = data | 	args.Data = data | ||||||
| 
 | 
 | ||||||
|     if len(args.Data) == 0 { | 	if len(args.Data) == 0 { | ||||||
|         return shared.NewValidationError("data", "is required") | 		return shared.NewValidationError("data", "is required") | ||||||
|     } | 	} | ||||||
| 
 | 
 | ||||||
|     return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type NewSigArgs struct { | type NewSigArgs struct { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user