good morning!!!!

Skip to content
Snippets Groups Projects
Commit cbce882f authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Basic javascript console

parent 3a2bddc1
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,7 @@ var ExportKey bool
var LogFile string
var DataDir string
var NonInteractive bool
var StartExp bool
func Init() {
flag.BoolVar(&StartConsole, "c", false, "debug and testing console")
......@@ -38,6 +39,7 @@ func Init() {
flag.StringVar(&DataDir, "dir", ".ethereum", "ethereum data directory")
flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
flag.IntVar(&MaxPeer, "x", 5, "maximum desired peers")
flag.BoolVar(&StartExp, "ex", false, "exp")
flag.Parse()
}
......@@ -146,6 +146,13 @@ save these words so you can restore your account later: %s
console := NewConsole(ethereum)
go console.Start()
}
if StartExp {
c := NewJSConsole(ethereum)
go c.Start()
}
if StartRpc {
utils.DoRpc(ethereum, RpcPort)
}
......
package main
import (
"bufio"
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethpub"
"github.com/robertkrimen/otto"
"os"
)
type JSConsole struct {
vm *otto.Otto
lib *ethpub.PEthereum
}
func NewJSConsole(ethereum *eth.Ethereum) *JSConsole {
return &JSConsole{vm: otto.New(), lib: ethpub.NewPEthereum(ethereum)}
}
func (self *JSConsole) Start() {
self.initBindings()
fmt.Println("Eth JS Console")
reader := bufio.NewReader(os.Stdin)
for {
fmt.Printf("eth >>> ")
str, _, err := reader.ReadLine()
if err != nil {
fmt.Println("Error reading input", err)
} else {
if string(str) == "quit" {
return
}
self.ParseInput(string(str))
}
}
}
func (self *JSConsole) ParseInput(code string) {
value, err := self.vm.Run(code)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(value)
}
type OtherStruct struct {
Test string
}
type JSWrapper struct {
pub *ethpub.PEthereum
vm *otto.Otto
}
func (self *JSWrapper) GetKey() otto.Value {
result, err := self.vm.ToValue(self.pub.GetKey())
if err != nil {
fmt.Println(err)
return otto.UndefinedValue()
}
return result
}
func (self *JSConsole) initBindings() {
t := &JSWrapper{self.lib, self.vm}
self.vm.Set("eth", t)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment