forked from cerc-io/plugeth
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